浏览代码

Merge branch 'develop' into dev/ltkg20200330_2nd

gaodm 5 年之前
父节点
当前提交
53205ef516
共有 100 个文件被更改,包括 5879 次插入59 次删除
  1. 24 1
      aipt-service/src/main/java/com/diagbot/aggregate/PushItemAggregate.java
  2. 6 0
      aipt-service/src/main/java/com/diagbot/dto/ConceptPushDTO.java
  3. 30 0
      aipt-service/src/main/java/com/diagbot/dto/ConceptRetrievalExtDTO.java
  4. 16 0
      aipt-service/src/main/java/com/diagbot/dto/UsualDTO.java
  5. 78 0
      aipt-service/src/main/java/com/diagbot/entity/KlSymptom.java
  6. 2 1
      aipt-service/src/main/java/com/diagbot/entity/Symptom.java
  7. 89 1
      aipt-service/src/main/java/com/diagbot/facade/ConceptFacade.java
  8. 10 0
      aipt-service/src/main/java/com/diagbot/facade/KlSymptomFacade.java
  9. 21 11
      aipt-service/src/main/java/com/diagbot/facade/PartFacade.java
  10. 49 2
      aipt-service/src/main/java/com/diagbot/facade/PushFacade.java
  11. 16 0
      aipt-service/src/main/java/com/diagbot/mapper/KlSymptomMapper.java
  12. 16 0
      aipt-service/src/main/java/com/diagbot/service/KlSymptomService.java
  13. 20 0
      aipt-service/src/main/java/com/diagbot/service/impl/KlSymptomServiceImpl.java
  14. 26 0
      aipt-service/src/main/java/com/diagbot/web/ConceptController.java
  15. 14 0
      aipt-service/src/main/java/com/diagbot/web/PushController.java
  16. 16 0
      common/src/main/java/com/diagbot/biz/push/entity/FeatureRateWithExplain.java
  17. 25 0
      common/src/main/java/com/diagbot/biz/push/entity/ResponseDataWithExplain.java
  18. 8 0
      config-server/src/main/resources/shared/tran-service-dev.yml
  19. 8 0
      config-server/src/main/resources/shared/tran-service-local.yml
  20. 8 0
      config-server/src/main/resources/shared/tran-service-pre.yml
  21. 8 0
      config-server/src/main/resources/shared/tran-service-pro.yml
  22. 8 0
      config-server/src/main/resources/shared/tran-service-test.yml
  23. 27 0
      docs/031.2020-03-20智能分诊初始化脚本/init_med.sql
  24. 1412 0
      docs/031.2020-03-20智能分诊初始化脚本/init_tran.sql
  25. 14 2
      knowledgeman-service/src/main/java/com/diagbot/dto/GetConceptInfoDTO.java
  26. 78 0
      knowledgeman-service/src/main/java/com/diagbot/entity/KlSymptom.java
  27. 32 1
      knowledgeman-service/src/main/java/com/diagbot/facade/ConceptFacade.java
  28. 10 0
      knowledgeman-service/src/main/java/com/diagbot/facade/KlSymptomFacade.java
  29. 16 0
      knowledgeman-service/src/main/java/com/diagbot/mapper/KlSymptomMapper.java
  30. 16 0
      knowledgeman-service/src/main/java/com/diagbot/service/KlSymptomService.java
  31. 20 0
      knowledgeman-service/src/main/java/com/diagbot/service/impl/KlSymptomServiceImpl.java
  32. 11 8
      knowledgeman-service/src/main/java/com/diagbot/vo/AddConceptInfoVO.java
  33. 22 0
      knowledgeman-service/src/main/java/com/diagbot/vo/SymptomExtVO.java
  34. 19 0
      knowledgeman-service/src/main/resources/mapper/KlSymptomMapper.xml
  35. 4 4
      knowledgeman-service/src/test/java/com/diagbot/CodeGeneration.java
  36. 21 0
      prec-service/src/main/java/com/diagbot/client/AiptServiceClient.java
  37. 14 0
      prec-service/src/main/java/com/diagbot/client/hystrix/AiptServiceHystrix.java
  38. 29 0
      prec-service/src/main/java/com/diagbot/dto/ConceptRetrievalExtDTO.java
  39. 18 0
      prec-service/src/main/java/com/diagbot/dto/UsualDTO.java
  40. 1 7
      prec-service/src/main/java/com/diagbot/facade/PushFacade.java
  41. 9 11
      prec-service/src/main/java/com/diagbot/facade/QuestionUsualFacade.java
  42. 8 9
      prec-service/src/main/java/com/diagbot/facade/RetrievalFacade.java
  43. 4 1
      tran-service/pom.xml
  44. 109 0
      tran-service/src/main/java/com/diagbot/aggregate/OptAggregate.java
  45. 106 0
      tran-service/src/main/java/com/diagbot/aggregate/OptHospAggregate.java
  46. 63 0
      tran-service/src/main/java/com/diagbot/dto/DiseaseDeptDTO.java
  47. 22 0
      tran-service/src/main/java/com/diagbot/dto/HospItemDTO.java
  48. 18 0
      tran-service/src/main/java/com/diagbot/dto/HospNameDTO.java
  49. 50 0
      tran-service/src/main/java/com/diagbot/dto/InquiryTriageDTO.java
  50. 22 0
      tran-service/src/main/java/com/diagbot/dto/OptDTO.java
  51. 25 0
      tran-service/src/main/java/com/diagbot/dto/OptHospDTO.java
  52. 16 0
      tran-service/src/main/java/com/diagbot/dto/PVDTO.java
  53. 18 0
      tran-service/src/main/java/com/diagbot/dto/PVHospDTO.java
  54. 17 0
      tran-service/src/main/java/com/diagbot/dto/PVHospSumDTO.java
  55. 34 0
      tran-service/src/main/java/com/diagbot/dto/SaveInquiryTriageDTO.java
  56. 16 0
      tran-service/src/main/java/com/diagbot/dto/UVDTO.java
  57. 18 0
      tran-service/src/main/java/com/diagbot/dto/UVHospDTO.java
  58. 17 0
      tran-service/src/main/java/com/diagbot/dto/UVHospSumDTO.java
  59. 16 0
      tran-service/src/main/java/com/diagbot/dto/ZZDTO.java
  60. 18 0
      tran-service/src/main/java/com/diagbot/dto/ZZHospDTO.java
  61. 17 0
      tran-service/src/main/java/com/diagbot/dto/ZZHospSumDTO.java
  62. 67 0
      tran-service/src/main/java/com/diagbot/entity/Client.java
  63. 47 0
      tran-service/src/main/java/com/diagbot/entity/Constants.java
  64. 278 0
      tran-service/src/main/java/com/diagbot/entity/DiseaseDept.java
  65. 251 0
      tran-service/src/main/java/com/diagbot/entity/InquiryTriage.java
  66. 53 0
      tran-service/src/main/java/com/diagbot/entity/JSONResponseBean.java
  67. 173 0
      tran-service/src/main/java/com/diagbot/entity/OptInfo.java
  68. 142 0
      tran-service/src/main/java/com/diagbot/entity/Request.java
  69. 120 0
      tran-service/src/main/java/com/diagbot/entity/Response.java
  70. 29 0
      tran-service/src/main/java/com/diagbot/entity/SystemHeader.java
  71. 40 0
      tran-service/src/main/java/com/diagbot/facade/DiseaseDeptFacade.java
  72. 149 0
      tran-service/src/main/java/com/diagbot/facade/InquiryTriageFacade.java
  73. 227 0
      tran-service/src/main/java/com/diagbot/facade/OptInfoFacade.java
  74. 16 0
      tran-service/src/main/java/com/diagbot/mapper/DiseaseDeptMapper.java
  75. 16 0
      tran-service/src/main/java/com/diagbot/mapper/InquiryTriageMapper.java
  76. 62 0
      tran-service/src/main/java/com/diagbot/mapper/OptInfoMapper.java
  77. 16 0
      tran-service/src/main/java/com/diagbot/service/DiseaseDeptService.java
  78. 16 0
      tran-service/src/main/java/com/diagbot/service/InquiryTriageService.java
  79. 61 0
      tran-service/src/main/java/com/diagbot/service/OptInfoService.java
  80. 20 0
      tran-service/src/main/java/com/diagbot/service/impl/DiseaseDeptServiceImpl.java
  81. 20 0
      tran-service/src/main/java/com/diagbot/service/impl/InquiryTriageServiceImpl.java
  82. 98 0
      tran-service/src/main/java/com/diagbot/service/impl/OptInfoServiceImpl.java
  83. 95 0
      tran-service/src/main/java/com/diagbot/util/AESUtils.java
  84. 139 0
      tran-service/src/main/java/com/diagbot/util/JSONUtils.java
  85. 118 0
      tran-service/src/main/java/com/diagbot/util/MessageDigestUtil.java
  86. 118 0
      tran-service/src/main/java/com/diagbot/util/OpenApiUtils.java
  87. 126 0
      tran-service/src/main/java/com/diagbot/util/SignUtil.java
  88. 18 0
      tran-service/src/main/java/com/diagbot/vo/DiseaseDeptVO.java
  89. 20 0
      tran-service/src/main/java/com/diagbot/vo/HospitalVO.java
  90. 17 0
      tran-service/src/main/java/com/diagbot/vo/InquiryTriageMechVO.java
  91. 39 0
      tran-service/src/main/java/com/diagbot/vo/OptHospPageVO.java
  92. 35 0
      tran-service/src/main/java/com/diagbot/vo/OptHospVO.java
  93. 35 0
      tran-service/src/main/java/com/diagbot/vo/OptVO.java
  94. 25 0
      tran-service/src/main/java/com/diagbot/vo/SaveDisDeptVO.java
  95. 51 0
      tran-service/src/main/java/com/diagbot/vo/SaveInquiryTriageVO.java
  96. 45 0
      tran-service/src/main/java/com/diagbot/web/DiseaseDeptController.java
  97. 57 0
      tran-service/src/main/java/com/diagbot/web/InquiryTriageController.java
  98. 130 0
      tran-service/src/main/java/com/diagbot/web/OptInfoController.java
  99. 25 0
      tran-service/src/main/resources/mapper/DiseaseDeptMapper.xml
  100. 0 0
      tran-service/src/main/resources/mapper/InquiryTriageMapper.xml

+ 24 - 1
aipt-service/src/main/java/com/diagbot/aggregate/PushItemAggregate.java

@@ -13,8 +13,10 @@ import com.diagbot.config.CryptConfiguer;
 import com.diagbot.dto.ConceptPushDTO;
 import com.diagbot.dto.ConceptPushDTO;
 import com.diagbot.dto.PushDTO;
 import com.diagbot.dto.PushDTO;
 import com.diagbot.entity.Concept;
 import com.diagbot.entity.Concept;
+import com.diagbot.entity.KlSymptom;
 import com.diagbot.enums.ConceptTypeEnum;
 import com.diagbot.enums.ConceptTypeEnum;
 import com.diagbot.enums.LexiconTypeEnum;
 import com.diagbot.enums.LexiconTypeEnum;
+import com.diagbot.enums.SysTypeEnum;
 import com.diagbot.facade.ClinicalFacade;
 import com.diagbot.facade.ClinicalFacade;
 import com.diagbot.facade.ConceptFacade;
 import com.diagbot.facade.ConceptFacade;
 import com.diagbot.facade.TranEnDeFacade;
 import com.diagbot.facade.TranEnDeFacade;
@@ -148,7 +150,8 @@ public class PushItemAggregate {
 
 
     @DataProvider("setSymptom")
     @DataProvider("setSymptom")
     public List<ConceptPushDTO> setSymptom(@InvokeParameter("featureTypeSet") Set<String> featureTypeSet,
     public List<ConceptPushDTO> setSymptom(@InvokeParameter("featureTypeSet") Set<String> featureTypeSet,
-                                           @InvokeParameter("data") ResponseData data) {
+                                           @InvokeParameter("data") ResponseData data,
+                                           @InvokeParameter("sysType") Integer sysType) {
         List<ConceptPushDTO> symptomRes = ListUtil.newArrayList();
         List<ConceptPushDTO> symptomRes = ListUtil.newArrayList();
         //症状 概念列表
         //症状 概念列表
         if (featureTypeSet.contains(String.valueOf(FeatureTypeEnum.Feature_Type_Symptom.getKey()))) {
         if (featureTypeSet.contains(String.valueOf(FeatureTypeEnum.Feature_Type_Symptom.getKey()))) {
@@ -160,6 +163,26 @@ public class PushItemAggregate {
                         .collect(Collectors.toList());
                         .collect(Collectors.toList());
                 if (ListUtil.isNotEmpty(nameList)) {
                 if (ListUtil.isNotEmpty(nameList)) {
                     symptomRes = getConceptDTOList(nameList, LexiconTypeEnum.SYMPTOM.getKey());
                     symptomRes = getConceptDTOList(nameList, LexiconTypeEnum.SYMPTOM.getKey());
+                    if (sysType.equals(SysTypeEnum.TRIAGE_SERVICE.getKey())
+                            || sysType.equals(SysTypeEnum.PREC_SERVICE.getKey())) {
+                        Map<String, KlSymptom> klSymptomMap
+                                = conceptFacade.getSymptomWithExplain(nameList, LexiconTypeEnum.SYMPTOM.getKey());
+                        if (klSymptomMap != null) {
+                            symptomRes.forEach(conceptPushDTO -> {
+                                if (klSymptomMap.containsKey(conceptPushDTO.getName())) {
+                                    conceptPushDTO
+                                            .setDescription(klSymptomMap.get(conceptPushDTO.getName()).getDescription());
+                                    conceptPushDTO
+                                            .setExplains(klSymptomMap.get(conceptPushDTO.getName()).getExplains());
+                                    if (StringUtil.isBlank(klSymptomMap.get(conceptPushDTO.getName()).getExplains())) {
+                                        conceptPushDTO.setHasExplain(0);
+                                    } else {
+                                        conceptPushDTO.setHasExplain(1);
+                                    }
+                                }
+                            });
+                        }
+                    }
                 }
                 }
             }
             }
         }
         }

+ 6 - 0
aipt-service/src/main/java/com/diagbot/dto/ConceptPushDTO.java

@@ -17,4 +17,10 @@ public class ConceptPushDTO extends ConceptBaseDTO {
     //数据服务模式调用方名称
     //数据服务模式调用方名称
     private List<String> clientNames;
     private List<String> clientNames;
     private Integer type;
     private Integer type;
+    //客户端界面描述
+    private String description;
+    //是否详细阐述
+    private Integer hasExplain = 0;
+    //详细阐述
+    private String explains;
 }
 }

+ 30 - 0
aipt-service/src/main/java/com/diagbot/dto/ConceptRetrievalExtDTO.java

@@ -0,0 +1,30 @@
+package com.diagbot.dto;
+
+import com.diagbot.annotation.CryptField;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: wangyu
+ * @time: 2019/5/10 10:20
+ */
+@Getter
+@Setter
+public class ConceptRetrievalExtDTO {
+
+    private Long selfId;//本身概念id
+    @CryptField
+    private String selfName;//本身名称
+    private Long parentId;//父级id
+    @CryptField
+    private String parentName;//父级名称
+    @CryptField
+    private String sameName;//同义词名称
+    private Long showType;//显示类型(1本体,0同义词)
+    private Long libTypeId;//标签类型id
+    private String libTypeName;//标签类型名称
+    private Integer type;//questionType
+    private String description;
+    private String explains;
+}

+ 16 - 0
aipt-service/src/main/java/com/diagbot/dto/UsualDTO.java

@@ -0,0 +1,16 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description: 概念出参基础实体类
+ * @author: zhoutg
+ * @time: 2019/5/7 9:44
+ */
+@Getter
+@Setter
+public class UsualDTO extends ConceptBaseDTO{
+    private String description; // 描述
+    private String explains;   // 详细说明
+}

+ 78 - 0
aipt-service/src/main/java/com/diagbot/entity/KlSymptom.java

@@ -0,0 +1,78 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 症状扩展表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-03-20
+ */
+@TableName("kl_symptom")
+@Getter
+@Setter
+public class KlSymptom implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 术语概念id
+     */
+    private Long conceptId;
+
+    /**
+     * 描述
+     */
+    private String description;
+
+    /**
+     * 详细阐述
+     */
+    private String explains;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+}

+ 2 - 1
aipt-service/src/main/java/com/diagbot/entity/Symptom.java

@@ -19,5 +19,6 @@ public class Symptom extends ConceptBaseDTO {
 
 
     @JsonIgnore
     @JsonIgnore
     private Long partConceptId;
     private Long partConceptId;
-    private String desc = ""; //简述
+    private String description;
+    private String explains;
 }
 }

+ 89 - 1
aipt-service/src/main/java/com/diagbot/facade/ConceptFacade.java

@@ -4,9 +4,12 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.diagbot.config.CryptConfiguer;
 import com.diagbot.config.CryptConfiguer;
 import com.diagbot.dto.ConceptBaseDTO;
 import com.diagbot.dto.ConceptBaseDTO;
 import com.diagbot.dto.ConceptRetrievalDTO;
 import com.diagbot.dto.ConceptRetrievalDTO;
+import com.diagbot.dto.ConceptRetrievalExtDTO;
 import com.diagbot.dto.ConceptWithOrderRes;
 import com.diagbot.dto.ConceptWithOrderRes;
 import com.diagbot.dto.RetrievalDTO;
 import com.diagbot.dto.RetrievalDTO;
+import com.diagbot.dto.UsualDTO;
 import com.diagbot.entity.Concept;
 import com.diagbot.entity.Concept;
+import com.diagbot.entity.KlSymptom;
 import com.diagbot.entity.wrapper.ConceptWrapper;
 import com.diagbot.entity.wrapper.ConceptWrapper;
 import com.diagbot.enums.ConceptTypeEnum;
 import com.diagbot.enums.ConceptTypeEnum;
 import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.enums.IsDeleteEnum;
@@ -50,6 +53,8 @@ public class ConceptFacade extends ConceptServiceImpl {
     ConceptDetailFacade conceptDetailFacade;
     ConceptDetailFacade conceptDetailFacade;
     @Autowired
     @Autowired
     CryptConfiguer configuer;
     CryptConfiguer configuer;
+    @Autowired
+    KlSymptomFacade klSymptomFacade;
 
 
     /**
     /**
      * 验证存在并且获取概念基本信息
      * 验证存在并且获取概念基本信息
@@ -223,7 +228,7 @@ public class ConceptFacade extends ConceptServiceImpl {
             conceptExistVO.setLibType(libType);
             conceptExistVO.setLibType(libType);
         }
         }
 
 
-        if (configuer.cryptFlag){
+        if (configuer.cryptFlag) {
             CryptUtil.encryptList(conceptExistVO.getNameList());
             CryptUtil.encryptList(conceptExistVO.getNameList());
         }
         }
         //获取结构
         //获取结构
@@ -283,6 +288,36 @@ public class ConceptFacade extends ConceptServiceImpl {
         return list;
         return list;
     }
     }
 
 
+
+    /**
+     * 获取常用标签包含通俗解释和详细说明
+     *
+     * @param conceptUsualVO
+     * @return
+     */
+    public List<UsualDTO> getConceptExtUsual(ConceptUsualVO conceptUsualVO) {
+        List<UsualDTO> res = new ArrayList<>();
+        List<ConceptBaseDTO> list = getConceptUsual(conceptUsualVO);
+        if (ListUtil.isNotEmpty(list)) {
+            List<KlSymptom> klSymptomList = klSymptomFacade.list(new QueryWrapper<KlSymptom>()
+                    .eq("is_deleted", IsDeleteEnum.N.getKey())
+                    .in("concept_id", list.stream().map(r -> r.getConceptId()).collect(Collectors.toList()))
+            );
+            Map<Long, KlSymptom> map = klSymptomList.stream().collect(Collectors.toMap(r -> r.getConceptId(), r -> r));
+            for (ConceptBaseDTO conceptBaseDTO : list) {
+                UsualDTO usualDTO = new UsualDTO();
+                BeanUtil.copyProperties(conceptBaseDTO, usualDTO);
+                if (map != null && map.get(conceptBaseDTO.getConceptId()) != null) {
+                    usualDTO.setDescription(map.get(conceptBaseDTO.getConceptId()).getDescription());
+                    usualDTO.setExplains(map.get(conceptBaseDTO.getConceptId()).getExplains());
+                }
+                res.add(usualDTO);
+            }
+        }
+        return res;
+    }
+
+
     /**
     /**
      * 概念id检索
      * 概念id检索
      *
      *
@@ -375,6 +410,35 @@ public class ConceptFacade extends ConceptServiceImpl {
     }
     }
 
 
 
 
+    /**
+     * 概念id检索,附带通俗解释和详细说明
+     *
+     * @param retrievalVO
+     * @urn
+     */
+    public List<ConceptRetrievalExtDTO> retrivelConceptInfoExt(RetrievalVO retrievalVO) {
+        List<ConceptRetrievalExtDTO> res = new ArrayList<>();
+        List<ConceptRetrievalDTO> list = retrivelConceptInfo(retrievalVO);
+        if (ListUtil.isNotEmpty(list)) {
+            List<KlSymptom> klSymptomList = klSymptomFacade.list(new QueryWrapper<KlSymptom>()
+                    .eq("is_deleted", IsDeleteEnum.N.getKey())
+                    .in("concept_id", list.stream().map(r -> r.getSelfId()).collect(Collectors.toList()))
+            );
+            Map<Long, KlSymptom> map = klSymptomList.stream().collect(Collectors.toMap(r -> r.getConceptId(), r -> r));
+            for (ConceptRetrievalDTO conceptBaseDTO : list) {
+                ConceptRetrievalExtDTO conceptRetrievalExtDTO = new ConceptRetrievalExtDTO();
+                BeanUtil.copyProperties(conceptBaseDTO, conceptRetrievalExtDTO);
+                if (map != null && conceptBaseDTO.getSelfId() != null && map.get(conceptBaseDTO.getSelfId()) != null) {
+                    conceptRetrievalExtDTO.setDescription(map.get(conceptBaseDTO.getSelfId()).getDescription());
+                    conceptRetrievalExtDTO.setExplains(map.get(conceptBaseDTO.getSelfId()).getExplains());
+                }
+                res.add(conceptRetrievalExtDTO);
+            }
+        }
+        return res;
+    }
+
+
     /**
     /**
      * 静态知识标签检索
      * 静态知识标签检索
      *
      *
@@ -435,4 +499,28 @@ public class ConceptFacade extends ConceptServiceImpl {
     public List<ConceptBaseDTO> indexConceptFac(ConceptBaseVO conceptBaseVO) {
     public List<ConceptBaseDTO> indexConceptFac(ConceptBaseVO conceptBaseVO) {
         return this.indexConcept(conceptBaseVO);
         return this.indexConcept(conceptBaseVO);
     }
     }
+
+    /**
+     * 查询带名词解释的症状术语
+     *
+     * @param names
+     * @return
+     */
+    public Map<String, KlSymptom> getSymptomWithExplain(List<String> names, Integer type) {
+        List<Concept> concepts = this.list(new QueryWrapper<Concept>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("lib_type", type)
+                .in(ListUtil.isNotEmpty(names), "lib_name", names));
+        List<Long> conceptIds = concepts.stream().map(item -> item.getId()).collect(Collectors.toList());
+        List<KlSymptom> klSymptoms = klSymptomFacade.list(new QueryWrapper<KlSymptom>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .in(ListUtil.isNotEmpty(conceptIds), "concept_id", conceptIds));
+        Map<Long, KlSymptom> klSymptomMap
+                = klSymptoms.stream().collect(Collectors.toMap(item -> item.getConceptId(), item -> item));
+        Map<String, KlSymptom> retMap = new HashMap<>();
+        for (Concept concept : concepts) {
+            retMap.put(concept.getLibName(), klSymptomMap.get(concept.getId()));
+        }
+        return retMap;
+    }
 }
 }

+ 10 - 0
aipt-service/src/main/java/com/diagbot/facade/KlSymptomFacade.java

@@ -0,0 +1,10 @@
+package com.diagbot.facade;
+
+import com.diagbot.service.impl.KlSymptomServiceImpl;
+import org.springframework.stereotype.Component;
+
+@Component
+public class KlSymptomFacade extends KlSymptomServiceImpl {
+
+
+}

+ 21 - 11
aipt-service/src/main/java/com/diagbot/facade/PartFacade.java

@@ -6,7 +6,7 @@ import com.diagbot.dto.ConceptWithOrderRes;
 import com.diagbot.dto.PartDTO;
 import com.diagbot.dto.PartDTO;
 import com.diagbot.dto.PartSymptomDTO;
 import com.diagbot.dto.PartSymptomDTO;
 import com.diagbot.entity.Concept;
 import com.diagbot.entity.Concept;
-import com.diagbot.entity.ConceptDetail;
+import com.diagbot.entity.KlSymptom;
 import com.diagbot.entity.Symptom;
 import com.diagbot.entity.Symptom;
 import com.diagbot.entity.wrapper.ConceptWrapper;
 import com.diagbot.entity.wrapper.ConceptWrapper;
 import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.enums.IsDeleteEnum;
@@ -21,9 +21,8 @@ import com.diagbot.vo.PartSymptomVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 
 
-import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.ArrayList;
-import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
@@ -42,6 +41,8 @@ public class PartFacade {
     ConceptDetailFacade conceptDetailFacade;
     ConceptDetailFacade conceptDetailFacade;
     @Autowired
     @Autowired
     private CryptConfiguer cryptConfiguer;
     private CryptConfiguer cryptConfiguer;
+    @Autowired
+    KlSymptomFacade klSymptomFacade;
 
 
     /**
     /**
      * 根据已选部位返回对应的症状
      * 根据已选部位返回对应的症状
@@ -79,6 +80,14 @@ public class PartFacade {
                 .in("lib_name", partList)
                 .in("lib_name", partList)
         );
         );
 
 
+        // 正常数据有2条,将全身区域放到最下面
+        String areaStr = cryptConfiguer.cryptFlag ?
+                CryptUtil.encrypt_char( "全身区域") : "全身区域";
+        if (ListUtil.isNotEmpty(conceptList) && conceptList.size() == 2
+                && areaStr.equals(conceptList.get(0).getLibName())) {
+            Collections.reverse(conceptList);
+        }
+
         // 设置部位区域
         // 设置部位区域
         for (Concept c : conceptList) {
         for (Concept c : conceptList) {
             PartSymptomDTO partSymptomDTO = new PartSymptomDTO();
             PartSymptomDTO partSymptomDTO = new PartSymptomDTO();
@@ -124,14 +133,14 @@ public class PartFacade {
         List<ConceptWithOrderRes> symptomList = conceptFacade.getConceptWithOrder(wrapper);
         List<ConceptWithOrderRes> symptomList = conceptFacade.getConceptWithOrder(wrapper);
         Map<Long, List<ConceptWithOrderRes>> symptomMap = EntityUtil.makeEntityListMap(symptomList, "startId");
         Map<Long, List<ConceptWithOrderRes>> symptomMap = EntityUtil.makeEntityListMap(symptomList, "startId");
 
 
-        // 获取症状的简述信息
-        List<ConceptDetail> conceptDetailList = conceptDetailFacade.list(
-                new QueryWrapper<ConceptDetail>()
-                        .eq("is_deleted", IsDeleteEnum.N.getKey())
-                        .in("concept_id", symptomList.stream().map(row -> row.getEndId()).distinct().collect(Collectors.toList()))
-                        .apply("find_in_set({0},position)", 7));
-        Map<Long, String> descMap = conceptDetailList.stream().collect(Collectors.toMap(row -> row.getConceptId(), row -> row.getText()));
 
 
+        // TODO 获取症状的简述信息
+        List<KlSymptom> klSymptomList = klSymptomFacade.list(new QueryWrapper<KlSymptom>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .in("concept_id",
+                        symptomList.stream().map(row -> row.getEndId()).distinct().collect(Collectors.toList()))
+        );
+        Map<Long, KlSymptom> descMap = klSymptomList.stream().collect(Collectors.toMap(row -> row.getConceptId(), row -> row));
 
 
         // 设置部位下的症状
         // 设置部位下的症状
         for (PartSymptomDTO partSymptomDTO : res) {
         for (PartSymptomDTO partSymptomDTO : res) {
@@ -146,7 +155,8 @@ public class PartFacade {
                         bean.setName(conceptWithOrderRes.getEndName());
                         bean.setName(conceptWithOrderRes.getEndName());
                         bean.setPartConceptId(conceptWithOrderRes.getStartId());
                         bean.setPartConceptId(conceptWithOrderRes.getStartId());
                         if (descMap.get(conceptWithOrderRes.getEndId()) != null) {
                         if (descMap.get(conceptWithOrderRes.getEndId()) != null) {
-                            bean.setDesc(descMap.get(conceptWithOrderRes.getEndId()));
+                            bean.setDescription(descMap.get(conceptWithOrderRes.getEndId()).getDescription());
+                            bean.setExplains(descMap.get(conceptWithOrderRes.getEndId()).getExplains());
                         }
                         }
                         symptoms.add(bean);
                         symptoms.add(bean);
                     }
                     }

+ 49 - 2
aipt-service/src/main/java/com/diagbot/facade/PushFacade.java

@@ -1,15 +1,22 @@
 package com.diagbot.facade;
 package com.diagbot.facade;
 
 
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
+import com.diagbot.biz.push.entity.FeatureRate;
+import com.diagbot.biz.push.entity.FeatureRateWithExplain;
 import com.diagbot.biz.push.entity.Item;
 import com.diagbot.biz.push.entity.Item;
 import com.diagbot.biz.push.entity.ResponseData;
 import com.diagbot.biz.push.entity.ResponseData;
-import com.diagbot.biz.push.vo.SearchVO;
+import com.diagbot.biz.push.entity.ResponseDataWithExplain;
 import com.diagbot.biz.push.entity.Treat;
 import com.diagbot.biz.push.entity.Treat;
 import com.diagbot.biz.push.enums.FeatureTypeEnum;
 import com.diagbot.biz.push.enums.FeatureTypeEnum;
+import com.diagbot.biz.push.vo.SearchVO;
 import com.diagbot.dto.PushDTO;
 import com.diagbot.dto.PushDTO;
+import com.diagbot.entity.KlSymptom;
+import com.diagbot.enums.LexiconTypeEnum;
 import com.diagbot.enums.SysTypeEnum;
 import com.diagbot.enums.SysTypeEnum;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
 import com.diagbot.exception.CommonException;
+import com.diagbot.util.BeanUtil;
+import com.diagbot.util.ListUtil;
 import com.diagbot.util.StringUtil;
 import com.diagbot.util.StringUtil;
 import io.github.lvyahui8.spring.aggregate.facade.DataBeanAggregateQueryFacade;
 import io.github.lvyahui8.spring.aggregate.facade.DataBeanAggregateQueryFacade;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -18,8 +25,10 @@ import org.springframework.stereotype.Component;
 import java.util.Arrays;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Map;
 import java.util.Map;
 import java.util.Set;
 import java.util.Set;
+import java.util.stream.Collectors;
 
 
 /**
 /**
  * @Description:
  * @Description:
@@ -36,6 +45,8 @@ public class PushFacade {
     private TransferFacade transferFacade;
     private TransferFacade transferFacade;
     @Autowired
     @Autowired
     DataBeanAggregateQueryFacade dataBeanAggregateQueryFacade;
     DataBeanAggregateQueryFacade dataBeanAggregateQueryFacade;
+    @Autowired
+    private ConceptFacade conceptFacade;
 
 
     /**
     /**
      * 推理接口
      * 推理接口
@@ -60,11 +71,12 @@ public class PushFacade {
 
 
         try {
         try {
             Map<String, Object> invokeParams = new HashMap<>();
             Map<String, Object> invokeParams = new HashMap<>();
-            invokeParams.put("pushDTO",pushDTO);
+            invokeParams.put("pushDTO", pushDTO);
             invokeParams.put("featureTypeSet", featureTypeSet);
             invokeParams.put("featureTypeSet", featureTypeSet);
             invokeParams.put("data", data);
             invokeParams.put("data", data);
             invokeParams.put("isConnect", isConnect);
             invokeParams.put("isConnect", isConnect);
             invokeParams.put("hosCode", searchVO.getHosCode());
             invokeParams.put("hosCode", searchVO.getHosCode());
+            invokeParams.put("sysType", searchVO.getSysType());
             pushDTO
             pushDTO
                     = dataBeanAggregateQueryFacade.get("setAll", invokeParams, PushDTO.class);
                     = dataBeanAggregateQueryFacade.get("setAll", invokeParams, PushDTO.class);
         } catch (Exception e) {
         } catch (Exception e) {
@@ -78,6 +90,41 @@ public class PushFacade {
         return pushDTO;
         return pushDTO;
     }
     }
 
 
+    /**
+     * 推理结果带名词解释
+     *
+     * @param searchVO
+     * @return
+     */
+    public ResponseDataWithExplain pushWithExplain(SearchVO searchVO) {
+        ResponseDataWithExplain responseData = new ResponseDataWithExplain();
+        ResponseData data = clinicalFacade.processClinicalData(searchVO);
+        List<FeatureRate> symptom = data.getSymptom();
+        if (ListUtil.isNotEmpty(symptom)
+                && (searchVO.getSysType().equals(SysTypeEnum.PREC_SERVICE.getKey())
+                || searchVO.getSysType().equals(SysTypeEnum.TRIAGE_SERVICE.getKey()))) {
+            List<String> names = symptom.stream().map(item -> item.getFeatureName()).collect(Collectors.toList());
+            Map<String, KlSymptom> klSymptomMap
+                    = conceptFacade.getSymptomWithExplain(names, LexiconTypeEnum.SYMPTOM.getKey());
+            List<FeatureRateWithExplain> featureRateWithExplains
+                    = BeanUtil.listCopyTo(symptom, FeatureRateWithExplain.class);
+            if (klSymptomMap != null) {
+                for (FeatureRateWithExplain featureRateWithExplain : featureRateWithExplains) {
+                    if (klSymptomMap.containsKey(featureRateWithExplain.getFeatureName())) {
+                        featureRateWithExplain
+                                .setDescription(klSymptomMap.get(featureRateWithExplain.getFeatureName()).getDescription());
+                        featureRateWithExplain
+                                .setExplains(klSymptomMap.get(featureRateWithExplain.getFeatureName()).getExplains());
+                    }
+                }
+            }
+            responseData.setSymptom(featureRateWithExplains);
+        }
+        responseData.setDis(data.getDis());
+        return responseData;
+    }
+
+
     /**
     /**
      * 获取治疗方案
      * 获取治疗方案
      *
      *

+ 16 - 0
aipt-service/src/main/java/com/diagbot/mapper/KlSymptomMapper.java

@@ -0,0 +1,16 @@
+package com.diagbot.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.diagbot.entity.KlSymptom;
+
+/**
+ * <p>
+ * 症状扩展表 Mapper 接口
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-03-20
+ */
+public interface KlSymptomMapper extends BaseMapper<KlSymptom> {
+
+}

+ 16 - 0
aipt-service/src/main/java/com/diagbot/service/KlSymptomService.java

@@ -0,0 +1,16 @@
+package com.diagbot.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.diagbot.entity.KlSymptom;
+
+/**
+ * <p>
+ * 症状扩展表 服务类
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-03-20
+ */
+public interface KlSymptomService extends IService<KlSymptom> {
+
+}

+ 20 - 0
aipt-service/src/main/java/com/diagbot/service/impl/KlSymptomServiceImpl.java

@@ -0,0 +1,20 @@
+package com.diagbot.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.diagbot.entity.KlSymptom;
+import com.diagbot.mapper.KlSymptomMapper;
+import com.diagbot.service.KlSymptomService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 症状扩展表 服务实现类
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-03-20
+ */
+@Service
+public class KlSymptomServiceImpl extends ServiceImpl<KlSymptomMapper, KlSymptom> implements KlSymptomService {
+
+}

+ 26 - 0
aipt-service/src/main/java/com/diagbot/web/ConceptController.java

@@ -4,8 +4,10 @@ package com.diagbot.web;
 import com.diagbot.annotation.SysLogger;
 import com.diagbot.annotation.SysLogger;
 import com.diagbot.dto.ConceptBaseDTO;
 import com.diagbot.dto.ConceptBaseDTO;
 import com.diagbot.dto.ConceptRetrievalDTO;
 import com.diagbot.dto.ConceptRetrievalDTO;
+import com.diagbot.dto.ConceptRetrievalExtDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.dto.RetrievalDTO;
 import com.diagbot.dto.RetrievalDTO;
+import com.diagbot.dto.UsualDTO;
 import com.diagbot.entity.Concept;
 import com.diagbot.entity.Concept;
 import com.diagbot.facade.ConceptFacade;
 import com.diagbot.facade.ConceptFacade;
 import com.diagbot.util.ParamConvertUtil;
 import com.diagbot.util.ParamConvertUtil;
@@ -57,6 +59,18 @@ public class ConceptController {
         return RespDTO.onSuc(data);
         return RespDTO.onSuc(data);
     }
     }
 
 
+    @ApiOperation(value = "知识库标准化-常用标签——根据科室获取常用标签包含通俗解释和详细说明[by:zhoutg]",
+            notes = "deptName:科室名称<br>" +
+                    "age:年龄<br>" +
+                    "sexType: 性别<br>" +
+                    "type:类型(1:症状 3:其他史 4:查体,5:化验 6:辅检 7:诊断),必填<br>")
+    @PostMapping("/getConceptExtUsual")
+    @SysLogger("getConceptExtUsual")
+    public RespDTO<List<UsualDTO>> getConceptExtUsual(@RequestBody @Valid ConceptUsualVO conceptUsualVO) {
+        List<UsualDTO> data = conceptFacade.getConceptExtUsual(conceptUsualVO);
+        return RespDTO.onSuc(data);
+    }
+
     /**
     /**
      * 根据概念Id列表获取概念列表Map
      * 根据概念Id列表获取概念列表Map
      *
      *
@@ -121,6 +135,18 @@ public class ConceptController {
         return RespDTO.onSuc(data);
         return RespDTO.onSuc(data);
     }
     }
 
 
+    @ApiOperation(value = "知识库标准化-标签检索,附带通俗解释和详细说明[by:zhoutg]",
+            notes = "type:类型(1:症状 3:其他史 4:查体,5:化验 6:辅检 7:诊断),必填<br>" +
+                    "age:年龄,必填<br>" +
+                    "inputStr:检索内容,必填<br>" +
+                    "sexType:性别,必填<br>" +
+                    "inputIds:需要去重的id<br>")
+    @PostMapping("/retrivelConceptInfoExt")
+    @SysLogger("retrivelConceptInfoExt")
+    public RespDTO<List<ConceptRetrievalExtDTO>> retrivelConceptInfoExt(@RequestBody @Valid RetrievalVO retrievalVO) {
+        List<ConceptRetrievalExtDTO> data = conceptFacade.retrivelConceptInfoExt(retrievalVO);
+        return RespDTO.onSuc(data);
+    }
 
 
     /**
     /**
      * 根据名称和类型获取概念列表Map
      * 根据名称和类型获取概念列表Map

+ 14 - 0
aipt-service/src/main/java/com/diagbot/web/PushController.java

@@ -1,6 +1,7 @@
 package com.diagbot.web;
 package com.diagbot.web;
 
 
 import com.diagbot.annotation.SysLogger;
 import com.diagbot.annotation.SysLogger;
+import com.diagbot.biz.push.entity.ResponseDataWithExplain;
 import com.diagbot.biz.push.vo.SearchVO;
 import com.diagbot.biz.push.vo.SearchVO;
 import com.diagbot.dto.PushDTO;
 import com.diagbot.dto.PushDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.dto.RespDTO;
@@ -87,4 +88,17 @@ public class PushController {
         PushDTO data = pushFacade.pushInner(searchVO);
         PushDTO data = pushFacade.pushInner(searchVO);
         return RespDTO.onSuc(data);
         return RespDTO.onSuc(data);
     }
     }
+
+    @ApiOperation(value = "知识库标准化-推理接口[by:zhaops]",
+            notes = "hosCode: 医院编码<br>" +
+                    "featureType:类型(必填多选),1:症状,7:诊断,多项用逗号分开,String<br>" +
+                    "age: 年龄(必填)<br>" +
+                    "sex:性别(必填),1:男,2:女,Integer<br>" +
+                    "symptom:现病史,String<br>")
+    @PostMapping("/pushWithExplain")
+    @SysLogger("pushWithExplain")
+    public RespDTO<ResponseDataWithExplain> pushWithExplain(@Valid @RequestBody SearchVO searchVO) {
+        ResponseDataWithExplain data = pushFacade.pushWithExplain(searchVO);
+        return RespDTO.onSuc(data);
+    }
 }
 }

+ 16 - 0
common/src/main/java/com/diagbot/biz/push/entity/FeatureRateWithExplain.java

@@ -0,0 +1,16 @@
+package com.diagbot.biz.push.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:推理返回类型带名词解释
+ * @Author:zhaops
+ * @time: 2020/3/23 10:44
+ */
+@Getter
+@Setter
+public class FeatureRateWithExplain extends FeatureRate {
+    private String description;
+    private String explains;
+}

+ 25 - 0
common/src/main/java/com/diagbot/biz/push/entity/ResponseDataWithExplain.java

@@ -0,0 +1,25 @@
+package com.diagbot.biz.push.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Description:推理结果带名词解释
+ * @Author:zhaops
+ * @time: 2020/3/23 10:45
+ */
+@Getter
+@Setter
+public class ResponseDataWithExplain {
+    /**
+     * 症状
+     */
+    private List<FeatureRateWithExplain> symptom = new ArrayList<>(10);
+    /**
+     * 诊断
+     */
+    private List<FeatureRate> dis = new ArrayList<>(10);
+}

+ 8 - 0
config-server/src/main/resources/shared/tran-service-dev.yml

@@ -110,3 +110,11 @@ mybatis-plus:
     map-underscore-to-camel-case: true
     map-underscore-to-camel-case: true
     cache-enabled: false
     cache-enabled: false
 
 
+io.github.lvyahui8.spring:
+  base-packages: com.diagbot.aggregate
+  thread-number: 12
+
+nalizx:
+  apiUrl: http://ssltest.ngarihealth.com/openapi-feature5/gateway
+  appKey: ngari5e7dd28111dc391a
+  appSecret: 11dc391a123e1002

+ 8 - 0
config-server/src/main/resources/shared/tran-service-local.yml

@@ -110,3 +110,11 @@ mybatis-plus:
     map-underscore-to-camel-case: true
     map-underscore-to-camel-case: true
     cache-enabled: false
     cache-enabled: false
 
 
+io.github.lvyahui8.spring:
+  base-packages: com.diagbot.aggregate
+  thread-number: 12
+
+nalizx:
+  apiUrl: http://ssltest.ngarihealth.com/openapi-feature5/gateway
+  appKey: ngari5e7dd28111dc391a
+  appSecret: 11dc391a123e1002

+ 8 - 0
config-server/src/main/resources/shared/tran-service-pre.yml

@@ -110,3 +110,11 @@ mybatis-plus:
     map-underscore-to-camel-case: true
     map-underscore-to-camel-case: true
     cache-enabled: false
     cache-enabled: false
 
 
+io.github.lvyahui8.spring:
+  base-packages: com.diagbot.aggregate
+  thread-number: 12
+
+nalizx:
+  apiUrl: http://ssltest.ngarihealth.com/openapi-feature5/gateway
+  appKey: ngari5e7dd28111dc391a
+  appSecret: 11dc391a123e1002

+ 8 - 0
config-server/src/main/resources/shared/tran-service-pro.yml

@@ -110,3 +110,11 @@ mybatis-plus:
     map-underscore-to-camel-case: true
     map-underscore-to-camel-case: true
     cache-enabled: false
     cache-enabled: false
 
 
+io.github.lvyahui8.spring:
+  base-packages: com.diagbot.aggregate
+  thread-number: 12
+
+nalizx:
+  apiUrl: http://ssltest.ngarihealth.com/openapi-feature5/gateway
+  appKey: ngari5e7dd28111dc391a
+  appSecret: 11dc391a123e1002

+ 8 - 0
config-server/src/main/resources/shared/tran-service-test.yml

@@ -110,3 +110,11 @@ mybatis-plus:
     map-underscore-to-camel-case: true
     map-underscore-to-camel-case: true
     cache-enabled: false
     cache-enabled: false
 
 
+io.github.lvyahui8.spring:
+  base-packages: com.diagbot.aggregate
+  thread-number: 12
+
+nalizx:
+  apiUrl: http://ssltest.ngarihealth.com/openapi-feature5/gateway
+  appKey: ngari5e7dd28111dc391a
+  appSecret: 11dc391a123e1002

+ 27 - 0
docs/031.2020-03-20智能分诊初始化脚本/init_med.sql

@@ -0,0 +1,27 @@
+use `med`;
+drop table if exists `kl_symptom`;
+CREATE TABLE `kl_symptom` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(20) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(20) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `concept_id` bigint(20) NOT NULL COMMENT '术语概念id',
+  `description` varchar(500) NOT NULL DEFAULT '' COMMENT '描述',
+  `explains` text DEFAULT NULL COMMENT '详细阐述',
+  `remark` varchar(255) DEFAULT NULL COMMENT '备注',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `CONCEPT_ID_INDEX` (`concept_id`) USING BTREE COMMENT '概念id全表唯一'
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='症状扩展表';
+
+insert into `med`.kl_symptom(`concept_id`)
+select DISTINCT id from `med`.kl_concept where lib_type = 1;
+
+update `med`.kl_symptom t,
+    (select b.id, a.description, a.explains from `sys-prec`.prec_question_info a, `med`.kl_concept b
+    where a.is_deleted = 'N' and b.is_deleted = 'N' and  b.lib_type = 1 and a.type = 1 and a.tag_type = 4
+    and Encrypt_char(a.tag_name) = b.lib_name) m
+set t.description = m.description, t.explains = m.explains
+where t.concept_id = m.id;
+

文件差异内容过多而无法显示
+ 1412 - 0
docs/031.2020-03-20智能分诊初始化脚本/init_tran.sql


+ 14 - 2
knowledgeman-service/src/main/java/com/diagbot/dto/GetConceptInfoDTO.java

@@ -1,11 +1,11 @@
 package com.diagbot.dto;
 package com.diagbot.dto;
 
 
-import java.util.List;
-
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.Setter;
 
 
+import java.util.List;
+
 /**
 /**
  * @Description
  * @Description
  * @author rgb
  * @author rgb
@@ -68,5 +68,17 @@ public class GetConceptInfoDTO {
      */
      */
     @ApiModelProperty(value="诊断类型")
     @ApiModelProperty(value="诊断类型")
     private String classify;
     private String classify;
+
+    /**
+     * 通俗解释
+     */
+    @ApiModelProperty(value="通俗解释")
+    private String description;
+
+    /**
+     * 详细说明
+     */
+    @ApiModelProperty(value="详细说明")
+    private String explains;
     
     
 }
 }

+ 78 - 0
knowledgeman-service/src/main/java/com/diagbot/entity/KlSymptom.java

@@ -0,0 +1,78 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 症状扩展表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-03-20
+ */
+@TableName("kl_symptom")
+@Getter
+@Setter
+public class KlSymptom implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 术语概念id
+     */
+    private Long conceptId;
+
+    /**
+     * 描述
+     */
+    private String description;
+
+    /**
+     * 详细阐述
+     */
+    private String explains;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+}

+ 32 - 1
knowledgeman-service/src/main/java/com/diagbot/facade/ConceptFacade.java

@@ -21,6 +21,7 @@ import com.diagbot.entity.Disease;
 import com.diagbot.entity.Lexicon;
 import com.diagbot.entity.Lexicon;
 import com.diagbot.entity.LibraryInfo;
 import com.diagbot.entity.LibraryInfo;
 import com.diagbot.entity.Relation;
 import com.diagbot.entity.Relation;
+import com.diagbot.entity.KlSymptom;
 import com.diagbot.entity.wrapper.ConceptWrapper;
 import com.diagbot.entity.wrapper.ConceptWrapper;
 import com.diagbot.enums.DiseaseClassifyEnum;
 import com.diagbot.enums.DiseaseClassifyEnum;
 import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.enums.IsDeleteEnum;
@@ -60,6 +61,7 @@ import com.diagbot.vo.IndexLexiconVO;
 import com.diagbot.vo.IndexVO;
 import com.diagbot.vo.IndexVO;
 import com.diagbot.vo.KLQuestionVO;
 import com.diagbot.vo.KLQuestionVO;
 import com.diagbot.vo.RemoveConceptInfoVO;
 import com.diagbot.vo.RemoveConceptInfoVO;
+import com.diagbot.vo.SymptomExtVO;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Maps;
 import org.apache.commons.lang.time.DateFormatUtils;
 import org.apache.commons.lang.time.DateFormatUtils;
@@ -122,6 +124,8 @@ public class ConceptFacade extends ConceptServiceImpl {
     private CryptConfiguer cryptConfiguer;
     private CryptConfiguer cryptConfiguer;
     @Autowired
     @Autowired
     private IcssManRpcFacade icssManRpcFacade;
     private IcssManRpcFacade icssManRpcFacade;
+    @Autowired
+    private KlSymptomFacade klSymptomFacade;
 
 
     /**
     /**
      * 获取所有化验公表项
      * 获取所有化验公表项
@@ -548,6 +552,14 @@ public class ConceptFacade extends ConceptServiceImpl {
                 getConceptInfoDTO.setDeptId(disease.getDeptId());
                 getConceptInfoDTO.setDeptId(disease.getDeptId());
                 getConceptInfoDTO.setClassify(disease.getClassify());
                 getConceptInfoDTO.setClassify(disease.getClassify());
             }
             }
+        } else if (LexiconTypeEnum.SYMPTOM.getKey() == concept.getLibType().intValue()) {
+            KlSymptom klSymptom = klSymptomFacade.getOne(new QueryWrapper<KlSymptom>()
+                    .eq("concept_id", concept.getId())
+                    .eq("is_deleted", IsDeleteEnum.N.getKey()), false);
+            if (klSymptom != null) {
+                getConceptInfoDTO.setDescription(klSymptom.getDescription());
+                getConceptInfoDTO.setExplains(klSymptom.getExplains());
+            }
         }
         }
 
 
         return getConceptInfoDTO;
         return getConceptInfoDTO;
@@ -746,6 +758,7 @@ public class ConceptFacade extends ConceptServiceImpl {
             conceptCommonFacade.saveOrUpdate(conceptCommon);
             conceptCommonFacade.saveOrUpdate(conceptCommon);
         }
         }
 
 
+        // 诊断扩展属性
         if (lexicon.getName().equals(LexiconTypeEnum.DIAGNOSIS.getName())) {
         if (lexicon.getName().equals(LexiconTypeEnum.DIAGNOSIS.getName())) {
             QueryWrapper<Disease> diseaseQe = new QueryWrapper<>();
             QueryWrapper<Disease> diseaseQe = new QueryWrapper<>();
             diseaseQe.eq("concept_id", conceptId);
             diseaseQe.eq("concept_id", conceptId);
@@ -769,10 +782,28 @@ public class ConceptFacade extends ConceptServiceImpl {
             } else {
             } else {
                 BeanUtil.copyProperties(addConceptInfoVO.getAddCptDiseaseExtVO(), disease);
                 BeanUtil.copyProperties(addConceptInfoVO.getAddCptDiseaseExtVO(), disease);
             }
             }
-
             diseaseFacade.saveOrUpdate(disease);
             diseaseFacade.saveOrUpdate(disease);
         }
         }
 
 
+        // 症状扩展属性
+        if (lexicon.getName().equals(LexiconTypeEnum.SYMPTOM.getName())) {
+            KlSymptom klSymptom = klSymptomFacade.getOne(new QueryWrapper<KlSymptom>()
+                    .eq("concept_id", conceptId), false);
+            if (klSymptom == null) {
+                klSymptom = new KlSymptom();
+                klSymptom.setGmtCreate(now);
+                klSymptom.setCreator(currentUser);
+            }
+            klSymptom.setConceptId(conceptId);
+            klSymptom.setGmtModified(now);
+            klSymptom.setModifier(currentUser);
+            SymptomExtVO smpVo = addConceptInfoVO.getSymptomExtVO();
+            if (smpVo != null) {
+                klSymptom.setDescription(smpVo.getDescription());
+                klSymptom.setExplains(smpVo.getExplains());
+            }
+            klSymptomFacade.saveOrUpdate(klSymptom);
+        }
         return true;
         return true;
     }
     }
 
 

+ 10 - 0
knowledgeman-service/src/main/java/com/diagbot/facade/KlSymptomFacade.java

@@ -0,0 +1,10 @@
+package com.diagbot.facade;
+
+import com.diagbot.service.impl.KlSymptomServiceImpl;
+import org.springframework.stereotype.Component;
+
+@Component
+public class KlSymptomFacade extends KlSymptomServiceImpl {
+
+
+}

+ 16 - 0
knowledgeman-service/src/main/java/com/diagbot/mapper/KlSymptomMapper.java

@@ -0,0 +1,16 @@
+package com.diagbot.mapper;
+
+import com.diagbot.entity.KlSymptom;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 症状扩展表 Mapper 接口
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-03-20
+ */
+public interface KlSymptomMapper extends BaseMapper<KlSymptom> {
+
+}

+ 16 - 0
knowledgeman-service/src/main/java/com/diagbot/service/KlSymptomService.java

@@ -0,0 +1,16 @@
+package com.diagbot.service;
+
+import com.diagbot.entity.KlSymptom;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 症状扩展表 服务类
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-03-20
+ */
+public interface KlSymptomService extends IService<KlSymptom> {
+
+}

+ 20 - 0
knowledgeman-service/src/main/java/com/diagbot/service/impl/KlSymptomServiceImpl.java

@@ -0,0 +1,20 @@
+package com.diagbot.service.impl;
+
+import com.diagbot.entity.KlSymptom;
+import com.diagbot.mapper.KlSymptomMapper;
+import com.diagbot.service.KlSymptomService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 症状扩展表 服务实现类
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-03-20
+ */
+@Service
+public class KlSymptomServiceImpl extends ServiceImpl<KlSymptomMapper, KlSymptom> implements KlSymptomService {
+
+}

+ 11 - 8
knowledgeman-service/src/main/java/com/diagbot/vo/AddConceptInfoVO.java

@@ -1,20 +1,17 @@
 package com.diagbot.vo;
 package com.diagbot.vo;
 
 
-import java.util.List;
-
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotEmpty;
-
 import com.diagbot.annotation.CryptField;
 import com.diagbot.annotation.CryptField;
-import org.hibernate.validator.constraints.Range;
-
 import com.diagbot.entity.Concept;
 import com.diagbot.entity.Concept;
 import com.diagbot.entity.ConceptCommon;
 import com.diagbot.entity.ConceptCommon;
 import com.diagbot.entity.LibraryInfo;
 import com.diagbot.entity.LibraryInfo;
-
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.Setter;
+import org.hibernate.validator.constraints.Range;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
 
 
 /**
 /**
  * @Description
  * @Description
@@ -58,6 +55,12 @@ public class AddConceptInfoVO {
 	 */
 	 */
 	@ApiModelProperty(value="诊断类型术语扩展")
 	@ApiModelProperty(value="诊断类型术语扩展")
 	private AddCptDiseaseExtVO addCptDiseaseExtVO;
 	private AddCptDiseaseExtVO addCptDiseaseExtVO;
+
+	/**
+	 * 症状扩展属性
+	 */
+	@ApiModelProperty(value="症状扩展属性")
+	private SymptomExtVO symptomExtVO;
 	
 	
 	/**
 	/**
      * 性别:1:男, 2:女, 3:通用
      * 性别:1:男, 2:女, 3:通用

+ 22 - 0
knowledgeman-service/src/main/java/com/diagbot/vo/SymptomExtVO.java

@@ -0,0 +1,22 @@
+package com.diagbot.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description 症状扩展表
+ * @author zhoutg
+ * @time 2019-03
+ */
+@Getter
+@Setter
+public class SymptomExtVO {
+
+	@ApiModelProperty(value="症状描述")
+    private String description;
+
+	@ApiModelProperty(value="详细阐述")
+    private String explains;
+	
+}

+ 19 - 0
knowledgeman-service/src/main/resources/mapper/KlSymptomMapper.xml

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.diagbot.mapper.KlSymptomMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.diagbot.entity.KlSymptom">
+        <id column="id" property="id" />
+        <result column="is_deleted" property="isDeleted" />
+        <result column="gmt_create" property="gmtCreate" />
+        <result column="gmt_modified" property="gmtModified" />
+        <result column="creator" property="creator" />
+        <result column="modifier" property="modifier" />
+        <result column="concept_id" property="conceptId" />
+        <result column="description" property="description" />
+        <result column="explains" property="explains" />
+        <result column="remark" property="remark" />
+    </resultMap>
+
+</mapper>

+ 4 - 4
knowledgeman-service/src/test/java/com/diagbot/CodeGeneration.java

@@ -48,15 +48,15 @@ public class CodeGeneration {
         dsc.setDbType(DbType.MYSQL);
         dsc.setDbType(DbType.MYSQL);
         dsc.setDriverName("com.mysql.cj.jdbc.Driver");
         dsc.setDriverName("com.mysql.cj.jdbc.Driver");
         dsc.setUsername("root");
         dsc.setUsername("root");
-        dsc.setPassword("diagbot@20180822");
-        dsc.setUrl("jdbc:mysql://192.168.2.235:3306/med-man?useUnicode=true&characterEncoding=utf-8");
+        dsc.setPassword("lantone");
+        dsc.setUrl("jdbc:mysql://192.168.2.236:3306/med?useUnicode=true&characterEncoding=utf-8");
         mpg.setDataSource(dsc);
         mpg.setDataSource(dsc);
 
 
         // 策略配置
         // 策略配置
         StrategyConfig strategy = new StrategyConfig();
         StrategyConfig strategy = new StrategyConfig();
-        strategy.setTablePrefix(new String[] { "kl_" });// 此处可以修改为您的表前缀
+        strategy.setTablePrefix(new String[] { "" });// 此处可以修改为您的表前缀
         strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略
         strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略
-        strategy.setInclude(new String[] { "kl_diagnose_question"}); // 需要生成的表
+        strategy.setInclude(new String[] { "kl_symptom"}); // 需要生成的表
 
 
         strategy.setSuperServiceClass(null);
         strategy.setSuperServiceClass(null);
         strategy.setSuperServiceImplClass(null);
         strategy.setSuperServiceImplClass(null);

+ 21 - 0
prec-service/src/main/java/com/diagbot/client/AiptServiceClient.java

@@ -4,10 +4,12 @@ import com.diagbot.biz.push.vo.SearchVO;
 import com.diagbot.client.hystrix.AiptServiceHystrix;
 import com.diagbot.client.hystrix.AiptServiceHystrix;
 import com.diagbot.dto.ConceptBaseDTO;
 import com.diagbot.dto.ConceptBaseDTO;
 import com.diagbot.dto.ConceptRetrievalDTO;
 import com.diagbot.dto.ConceptRetrievalDTO;
+import com.diagbot.dto.ConceptRetrievalExtDTO;
 import com.diagbot.dto.DisclaimerInformationDTO;
 import com.diagbot.dto.DisclaimerInformationDTO;
 import com.diagbot.dto.GetTopPatientInfoDjDTO;
 import com.diagbot.dto.GetTopPatientInfoDjDTO;
 import com.diagbot.dto.PushDTO;
 import com.diagbot.dto.PushDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.dto.RespDTO;
+import com.diagbot.dto.UsualDTO;
 import com.diagbot.dto.VersionWrapperDTO;
 import com.diagbot.dto.VersionWrapperDTO;
 import com.diagbot.vo.ConceptSearchVO;
 import com.diagbot.vo.ConceptSearchVO;
 import com.diagbot.vo.ConceptUsualVO;
 import com.diagbot.vo.ConceptUsualVO;
@@ -57,6 +59,25 @@ public interface AiptServiceClient {
     @PostMapping(value = "/concept/getConceptUsual")
     @PostMapping(value = "/concept/getConceptUsual")
     RespDTO<List<ConceptBaseDTO>> getConceptUsual(@RequestBody @Valid ConceptUsualVO conceptUsualVO);
     RespDTO<List<ConceptBaseDTO>> getConceptUsual(@RequestBody @Valid ConceptUsualVO conceptUsualVO);
 
 
+    /**
+     * 获取常用标签附带通俗解释和详细说明
+     *
+     * @param conceptUsualVO
+     * @return
+     */
+    @PostMapping(value = "/concept/getConceptExtUsual")
+    RespDTO<List<UsualDTO>> getConceptExtUsual(@RequestBody @Valid ConceptUsualVO conceptUsualVO);
+
+    /**
+     * 标签检索(附带通俗解释和详细说明, retrivelConceptInfo这个作废)
+     *
+     * @param retrievalVO
+     * @return
+     */
+    @PostMapping("/concept/retrivelConceptInfoExt")
+    RespDTO<List<ConceptRetrievalExtDTO>> retrivelConceptInfoExt(@RequestBody @Valid RetrievalVO retrievalVO);
+
+
     /**
     /**
      * 标签检索
      * 标签检索
      *
      *

+ 14 - 0
prec-service/src/main/java/com/diagbot/client/hystrix/AiptServiceHystrix.java

@@ -4,10 +4,12 @@ import com.diagbot.biz.push.vo.SearchVO;
 import com.diagbot.client.AiptServiceClient;
 import com.diagbot.client.AiptServiceClient;
 import com.diagbot.dto.ConceptBaseDTO;
 import com.diagbot.dto.ConceptBaseDTO;
 import com.diagbot.dto.ConceptRetrievalDTO;
 import com.diagbot.dto.ConceptRetrievalDTO;
+import com.diagbot.dto.ConceptRetrievalExtDTO;
 import com.diagbot.dto.DisclaimerInformationDTO;
 import com.diagbot.dto.DisclaimerInformationDTO;
 import com.diagbot.dto.GetTopPatientInfoDjDTO;
 import com.diagbot.dto.GetTopPatientInfoDjDTO;
 import com.diagbot.dto.PushDTO;
 import com.diagbot.dto.PushDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.dto.RespDTO;
+import com.diagbot.dto.UsualDTO;
 import com.diagbot.dto.VersionWrapperDTO;
 import com.diagbot.dto.VersionWrapperDTO;
 import com.diagbot.vo.ConceptSearchVO;
 import com.diagbot.vo.ConceptSearchVO;
 import com.diagbot.vo.ConceptUsualVO;
 import com.diagbot.vo.ConceptUsualVO;
@@ -55,6 +57,18 @@ public class AiptServiceHystrix implements AiptServiceClient {
         return null;
         return null;
     }
     }
 
 
+    @Override
+    public RespDTO<List<UsualDTO>> getConceptExtUsual(@Valid ConceptUsualVO conceptUsualVO) {
+        log.error("【hystrix】调用{}异常", "getConceptExtUsual");
+        return null;
+    }
+
+    @Override
+    public RespDTO<List<ConceptRetrievalExtDTO>> retrivelConceptInfoExt(@Valid RetrievalVO retrievalVO) {
+        log.error("【hystrix】调用{}异常", "retrivelConceptInfoExt");
+        return null;
+    }
+
     @Override
     @Override
     public RespDTO<List<ConceptRetrievalDTO>> retrivelConceptInfo(@Valid RetrievalVO retrievalVO) {
     public RespDTO<List<ConceptRetrievalDTO>> retrivelConceptInfo(@Valid RetrievalVO retrievalVO) {
         log.error("【hystrix】调用{}异常", "retrivelConceptInfo");
         log.error("【hystrix】调用{}异常", "retrivelConceptInfo");

+ 29 - 0
prec-service/src/main/java/com/diagbot/dto/ConceptRetrievalExtDTO.java

@@ -0,0 +1,29 @@
+package com.diagbot.dto;
+
+import com.diagbot.annotation.CryptField;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: wangyu
+ * @time: 2019/5/10 10:20
+ */
+@Getter
+@Setter
+public class ConceptRetrievalExtDTO {
+    private Long selfId;//本身概念id
+    @CryptField
+    private String selfName;//本身名称
+    private Long parentId;//父级id
+    @CryptField
+    private String parentName;//父级名称
+    @CryptField
+    private String sameName;//同义词名称
+    private Long showType;//显示类型(1本体,0同义词)
+    private Long libTypeId;//标签类型id
+    private String libTypeName;//标签类型名称
+    private Integer type;//questionType
+    private String description; //通俗解释
+    private String explains; //详细说明
+}

+ 18 - 0
prec-service/src/main/java/com/diagbot/dto/UsualDTO.java

@@ -0,0 +1,18 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description: 概念出参基础实体类
+ * @author: gaodm
+ * @time: 2019/5/7 9:44
+ */
+@Getter
+@Setter
+public class UsualDTO {
+    private Long conceptId; // 概念id
+    private String name;    //概念名称
+    private String description; // 描述
+    private String explains;   // 详细说明
+}

+ 1 - 7
prec-service/src/main/java/com/diagbot/facade/PushFacade.java

@@ -1,8 +1,8 @@
 package com.diagbot.facade;
 package com.diagbot.facade;
 
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.diagbot.biz.push.vo.SearchVO;
 import com.diagbot.biz.push.enums.FeatureTypeEnum;
 import com.diagbot.biz.push.enums.FeatureTypeEnum;
+import com.diagbot.biz.push.vo.SearchVO;
 import com.diagbot.client.AiptServiceClient;
 import com.diagbot.client.AiptServiceClient;
 import com.diagbot.dto.ConceptPushDTO;
 import com.diagbot.dto.ConceptPushDTO;
 import com.diagbot.dto.PushDTO;
 import com.diagbot.dto.PushDTO;
@@ -12,7 +12,6 @@ import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.util.EntityUtil;
 import com.diagbot.util.EntityUtil;
 import com.diagbot.util.ListUtil;
 import com.diagbot.util.ListUtil;
 import com.diagbot.util.RespDTOUtil;
 import com.diagbot.util.RespDTOUtil;
-import com.diagbot.util.StringUtil;
 import com.diagbot.vo.PushVO;
 import com.diagbot.vo.PushVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
@@ -98,11 +97,6 @@ public class PushFacade {
                         QuestionInfo questionInfo = questionInfoMap.get(concept.getTagName());
                         QuestionInfo questionInfo = questionInfoMap.get(concept.getTagName());
                         concept.setId(questionInfo.getId());
                         concept.setId(questionInfo.getId());
                         concept.setName(questionInfo.getName());
                         concept.setName(questionInfo.getName());
-                        concept.setDescription(questionInfo.getDescription());
-                        if (StringUtil.isNotBlank(questionInfo.getExplains())) {
-                            concept.setHasExplain(1);
-                            concept.setExplains(questionInfo.getExplains());
-                        }
                     }
                     }
                 }
                 }
             }
             }

+ 9 - 11
prec-service/src/main/java/com/diagbot/facade/QuestionUsualFacade.java

@@ -2,9 +2,9 @@ package com.diagbot.facade;
 
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.diagbot.client.AiptServiceClient;
 import com.diagbot.client.AiptServiceClient;
-import com.diagbot.dto.ConceptBaseDTO;
 import com.diagbot.dto.QuestionUsualDTO;
 import com.diagbot.dto.QuestionUsualDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.dto.RespDTO;
+import com.diagbot.dto.UsualDTO;
 import com.diagbot.entity.QuestionInfo;
 import com.diagbot.entity.QuestionInfo;
 import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.enums.QuestionTypeEnum;
 import com.diagbot.enums.QuestionTypeEnum;
@@ -49,18 +49,18 @@ public class QuestionUsualFacade {
         conceptUsualVO.setType(type);
         conceptUsualVO.setType(type);
         List<QuestionUsualDTO> questionUsualDTOList = new ArrayList<>();
         List<QuestionUsualDTO> questionUsualDTOList = new ArrayList<>();
         //从知识库获取常用标签
         //从知识库获取常用标签
-        RespDTO<List<ConceptBaseDTO>> conceptBaseDTORespDTO = aiptServiceClient.getConceptUsual(conceptUsualVO);
+        RespDTO<List<UsualDTO>> conceptBaseDTORespDTO = aiptServiceClient.getConceptExtUsual(conceptUsualVO);
         //如果该科室没有常用,返回全科常用
         //如果该科室没有常用,返回全科常用
         if (conceptBaseDTORespDTO != null && ListUtil.isEmpty(conceptBaseDTORespDTO.data)) {
         if (conceptBaseDTORespDTO != null && ListUtil.isEmpty(conceptBaseDTORespDTO.data)) {
             conceptUsualVO.setDeptName("全科");
             conceptUsualVO.setDeptName("全科");
-            conceptBaseDTORespDTO = aiptServiceClient.getConceptUsual(conceptUsualVO);
+            conceptBaseDTORespDTO = aiptServiceClient.getConceptExtUsual(conceptUsualVO);
         }
         }
         RespDTOUtil.respNGDeal(conceptBaseDTORespDTO, "获取常用标签失败");
         RespDTOUtil.respNGDeal(conceptBaseDTORespDTO, "获取常用标签失败");
         if (conceptBaseDTORespDTO.data != null
         if (conceptBaseDTORespDTO.data != null
                 && ListUtil.isNotEmpty(conceptBaseDTORespDTO.data)) {
                 && ListUtil.isNotEmpty(conceptBaseDTORespDTO.data)) {
             //提取标签名称
             //提取标签名称
             List<String> conceptName = conceptBaseDTORespDTO.data.stream()
             List<String> conceptName = conceptBaseDTORespDTO.data.stream()
-                    .map(ConceptBaseDTO::getName)
+                    .map(r -> r.getName())
                     .collect(Collectors.toList());
                     .collect(Collectors.toList());
             //与question标签匹配
             //与question标签匹配
             QueryWrapper<QuestionInfo> questionInfoQueryWrapper = new QueryWrapper<>();
             QueryWrapper<QuestionInfo> questionInfoQueryWrapper = new QueryWrapper<>();
@@ -73,10 +73,13 @@ public class QuestionUsualFacade {
             Map<String, QuestionInfo> questionInfoMap
             Map<String, QuestionInfo> questionInfoMap
                     = questionInfoList.stream()
                     = questionInfoList.stream()
                     .collect(Collectors.toMap(QuestionInfo::getTagName, questionInfo -> questionInfo));
                     .collect(Collectors.toMap(QuestionInfo::getTagName, questionInfo -> questionInfo));
-            for (ConceptBaseDTO conceptBaseDTO : conceptBaseDTORespDTO.data) {//将概念id和概念名称放入出参
+            for (UsualDTO conceptBaseDTO : conceptBaseDTORespDTO.data) {//将概念id和概念名称放入出参
                 QuestionUsualDTO questionUsualDTO = new QuestionUsualDTO();
                 QuestionUsualDTO questionUsualDTO = new QuestionUsualDTO();
+                BeanUtil.copyProperties(conceptBaseDTO, questionUsualDTO);
                 questionUsualDTO.setTagName(conceptBaseDTO.getName());
                 questionUsualDTO.setTagName(conceptBaseDTO.getName());
-                questionUsualDTO.setConceptId(conceptBaseDTO.getConceptId());
+                if (StringUtil.isNotBlank(questionUsualDTO.getExplains())) {
+                    questionUsualDTO.setHasExplain(1);
+                }
                 questionUsualDTOList.add(questionUsualDTO);
                 questionUsualDTOList.add(questionUsualDTO);
             }
             }
             for (QuestionUsualDTO questionUsualDTO : questionUsualDTOList) {
             for (QuestionUsualDTO questionUsualDTO : questionUsualDTOList) {
@@ -84,11 +87,6 @@ public class QuestionUsualFacade {
                     questionUsualDTO.setTagName(questionInfoMap.get(questionUsualDTO.getTagName()).getTagName());
                     questionUsualDTO.setTagName(questionInfoMap.get(questionUsualDTO.getTagName()).getTagName());
                     questionUsualDTO.setName(questionInfoMap.get(questionUsualDTO.getTagName()).getName());
                     questionUsualDTO.setName(questionInfoMap.get(questionUsualDTO.getTagName()).getName());
                     questionUsualDTO.setQuestionId(questionInfoMap.get(questionUsualDTO.getTagName()).getId());
                     questionUsualDTO.setQuestionId(questionInfoMap.get(questionUsualDTO.getTagName()).getId());
-                    questionUsualDTO.setDescription(questionInfoMap.get(questionUsualDTO.getTagName()).getDescription());
-                    if (StringUtil.isNotBlank(questionInfoMap.get(questionUsualDTO.getTagName()).getExplains())){
-                        questionUsualDTO.setHasExplain(1);
-                        questionUsualDTO.setExplains(questionInfoMap.get(questionUsualDTO.getTagName()).getExplains());
-                    }
                 }
                 }
             }
             }
             //如何没有匹配到questionId就移除
             //如何没有匹配到questionId就移除

+ 8 - 9
prec-service/src/main/java/com/diagbot/facade/RetrievalFacade.java

@@ -2,7 +2,7 @@ package com.diagbot.facade;
 
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.diagbot.client.AiptServiceClient;
 import com.diagbot.client.AiptServiceClient;
-import com.diagbot.dto.ConceptRetrievalDTO;
+import com.diagbot.dto.ConceptRetrievalExtDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.dto.RetrievalDTO;
 import com.diagbot.dto.RetrievalDTO;
 import com.diagbot.entity.QuestionInfo;
 import com.diagbot.entity.QuestionInfo;
@@ -44,12 +44,12 @@ public class RetrievalFacade {
         retrievalVO.setType(QuestionTypeEnum.Symptom.getKey());
         retrievalVO.setType(QuestionTypeEnum.Symptom.getKey());
         List<RetrievalDTO> retrievalDTOS = new ArrayList<>();
         List<RetrievalDTO> retrievalDTOS = new ArrayList<>();
         //调用aipt-服务
         //调用aipt-服务
-        RespDTO<List<ConceptRetrievalDTO>> conceptInfos = aiptServiceClient.retrivelConceptInfo(retrievalVO);
+        RespDTO<List<ConceptRetrievalExtDTO>> conceptInfos = aiptServiceClient.retrivelConceptInfoExt(retrievalVO);
         RespDTOUtil.respNGDeal(conceptInfos, "获取检索信息失败");
         RespDTOUtil.respNGDeal(conceptInfos, "获取检索信息失败");
         //获取questionId
         //获取questionId
         List<String> questionNames = new ArrayList<>();
         List<String> questionNames = new ArrayList<>();
         if (ListUtil.isNotEmpty(conceptInfos.data)) {
         if (ListUtil.isNotEmpty(conceptInfos.data)) {
-            for (ConceptRetrievalDTO conceptRetrievalDTO : conceptInfos.data) {
+            for (ConceptRetrievalExtDTO conceptRetrievalDTO : conceptInfos.data) {
                 if (!questionNames.contains(conceptRetrievalDTO.getSelfName())
                 if (!questionNames.contains(conceptRetrievalDTO.getSelfName())
                         && conceptRetrievalDTO.getSelfName() != null) {
                         && conceptRetrievalDTO.getSelfName() != null) {
                     questionNames.add(conceptRetrievalDTO.getSelfName());
                     questionNames.add(conceptRetrievalDTO.getSelfName());
@@ -66,17 +66,17 @@ public class RetrievalFacade {
                     .collect(Collectors.toMap(QuestionInfo::getTagName, questionInfo -> questionInfo));
                     .collect(Collectors.toMap(QuestionInfo::getTagName, questionInfo -> questionInfo));
             RetrievalDTO retrievalDTO = new RetrievalDTO();
             RetrievalDTO retrievalDTO = new RetrievalDTO();
             //封装
             //封装
-            for (ConceptRetrievalDTO conceptRetrievalDTO : conceptInfos.data) {
+            for (ConceptRetrievalExtDTO conceptRetrievalDTO : conceptInfos.data) {
                 retrievalDTO = new RetrievalDTO();
                 retrievalDTO = new RetrievalDTO();
                 retrievalDTO.setConceptId(conceptRetrievalDTO.getSelfId());
                 retrievalDTO.setConceptId(conceptRetrievalDTO.getSelfId());
                 retrievalDTO.setTagName(conceptRetrievalDTO.getSelfName());
                 retrievalDTO.setTagName(conceptRetrievalDTO.getSelfName());
                 if (null != questionInfoMap.get(conceptRetrievalDTO.getSelfName())) {//如果匹配到就添加questionId
                 if (null != questionInfoMap.get(conceptRetrievalDTO.getSelfName())) {//如果匹配到就添加questionId
                     retrievalDTO.setName(questionInfoMap.get(conceptRetrievalDTO.getSelfName()).getName());
                     retrievalDTO.setName(questionInfoMap.get(conceptRetrievalDTO.getSelfName()).getName());
                     retrievalDTO.setQuestionId(questionInfoMap.get(conceptRetrievalDTO.getSelfName()).getId());
                     retrievalDTO.setQuestionId(questionInfoMap.get(conceptRetrievalDTO.getSelfName()).getId());
-                    retrievalDTO.setDescription(questionInfoMap.get(conceptRetrievalDTO.getSelfName()).getDescription());
-                    if (StringUtil.isNotBlank(questionInfoMap.get(conceptRetrievalDTO.getSelfName()).getExplains())){
+                    retrievalDTO.setDescription(conceptRetrievalDTO.getDescription());
+                    if (StringUtil.isNotBlank(conceptRetrievalDTO.getExplains())){
                         retrievalDTO.setHasExplain(1);
                         retrievalDTO.setHasExplain(1);
-                        retrievalDTO.setExplains(questionInfoMap.get(conceptRetrievalDTO.getSelfName()).getExplains());
+                        retrievalDTO.setExplains(conceptRetrievalDTO.getExplains());
                     }
                     }
                 }
                 }
                 if (StringUtil.isNotEmpty(conceptRetrievalDTO.getSameName())) {//同义词
                 if (StringUtil.isNotEmpty(conceptRetrievalDTO.getSameName())) {//同义词
@@ -92,8 +92,7 @@ public class RetrievalFacade {
         //如何没有匹配到questionId就移除
         //如何没有匹配到questionId就移除
         Iterator<RetrievalDTO> retrievalDTOIterator = retrievalDTOS.iterator();
         Iterator<RetrievalDTO> retrievalDTOIterator = retrievalDTOS.iterator();
         while (retrievalDTOIterator.hasNext()) {
         while (retrievalDTOIterator.hasNext()) {
-            RetrievalDTO retrievalDTO = new RetrievalDTO();
-            retrievalDTO = retrievalDTOIterator.next();
+            RetrievalDTO retrievalDTO = retrievalDTOIterator.next();
             if (retrievalDTO.getQuestionId() == null) {
             if (retrievalDTO.getQuestionId() == null) {
                 retrievalDTOIterator.remove();
                 retrievalDTOIterator.remove();
             }
             }

+ 4 - 1
tran-service/pom.xml

@@ -172,7 +172,10 @@
             <groupId>org.apache.commons</groupId>
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-pool2</artifactId>
             <artifactId>commons-pool2</artifactId>
         </dependency>
         </dependency>
-
+        <dependency>
+            <groupId>io.github.lvyahui8</groupId>
+            <artifactId>spring-boot-data-aggregator-starter</artifactId>
+        </dependency>
     </dependencies>
     </dependencies>
 
 
     <build>
     <build>

+ 109 - 0
tran-service/src/main/java/com/diagbot/aggregate/OptAggregate.java

@@ -0,0 +1,109 @@
+package com.diagbot.aggregate;
+
+import com.diagbot.dto.OptDTO;
+import com.diagbot.dto.PVDTO;
+import com.diagbot.dto.UVDTO;
+import com.diagbot.dto.ZZDTO;
+import com.diagbot.facade.OptInfoFacade;
+import com.diagbot.util.ListUtil;
+import com.diagbot.vo.OptVO;
+import io.github.lvyahui8.spring.annotation.DataConsumer;
+import io.github.lvyahui8.spring.annotation.DataProvider;
+import io.github.lvyahui8.spring.annotation.InvokeParameter;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/2/3 10:38
+ */
+@Component
+public class OptAggregate {
+    @Autowired
+    private OptInfoFacade optInfoFacade;
+
+    @DataProvider("getAllOptSum")
+    public OptDTO getAllOptSum(
+            @InvokeParameter("optVO") OptVO optVO,
+            @DataConsumer("getPV") List<PVDTO> pvdtoList,
+            @DataConsumer("getPVSum") Long pvSum,
+            @DataConsumer("getUV") List<UVDTO> uvdtoList,
+            @DataConsumer("getUVSum") Long uvSum,
+            @DataConsumer("getZZ") List<ZZDTO> zzdtoList,
+            @DataConsumer("getZZSum") Long zzSum) {
+        OptDTO optDTO = new OptDTO();
+        if (ListUtil.isNotEmpty(pvdtoList)) {
+            optDTO.setPvdto(pvdtoList);
+        }
+        if (null != pvSum) {
+            optDTO.setPvSum(pvSum);
+        }
+        if (ListUtil.isNotEmpty(uvdtoList)) {
+            optDTO.setUvdto(uvdtoList);
+        }
+        if (null != uvSum) {
+            optDTO.setUvSum(uvSum);
+        }
+        if (ListUtil.isNotEmpty(zzdtoList)) {
+            optDTO.setZzdto(zzdtoList);
+        }
+        if (null != zzSum) {
+            optDTO.setZzSum(zzSum);
+        }
+        return optDTO;
+    }
+
+
+    @DataProvider("getAllOptSumNoDays")
+    public OptDTO getAllOptSumNoDays(
+            @InvokeParameter("optVO") OptVO optVO,
+            @DataConsumer("getPVSum") Long pvSum,
+            @DataConsumer("getUVSum") Long uvSum,
+            @DataConsumer("getZZSum") Long zzSum) {
+        OptDTO optDTO = new OptDTO();
+        if (null != pvSum) {
+            optDTO.setPvSum(pvSum);
+        }
+        if (null != uvSum) {
+            optDTO.setUvSum(uvSum);
+        }
+        if (null != zzSum) {
+            optDTO.setZzSum(zzSum);
+        }
+        return optDTO;
+    }
+
+
+    @DataProvider("getPV")
+    public List<PVDTO> getPV(@InvokeParameter("optVO") OptVO optVO) {
+        return optInfoFacade.getPV(optVO);
+    }
+
+    @DataProvider("getPVSum")
+    public Long getPVSum(@InvokeParameter("optVO") OptVO optVO) {
+        return optInfoFacade.getPVSum(optVO);
+    }
+
+    @DataProvider("getUV")
+    public List<UVDTO> getUV(@InvokeParameter("optVO") OptVO optVO) {
+        return optInfoFacade.getUV(optVO);
+    }
+
+    @DataProvider("getUVSum")
+    public Long getUVSum(@InvokeParameter("optVO") OptVO optVO) {
+        return optInfoFacade.getUVSum(optVO);
+    }
+
+    @DataProvider("getZZ")
+    public List<ZZDTO> getZZ(@InvokeParameter("optVO") OptVO optVO) {
+        return optInfoFacade.getZZ(optVO);
+    }
+
+    @DataProvider("getZZSum")
+    public Long getZZSum(@InvokeParameter("optVO") OptVO optVO) {
+        return optInfoFacade.getZZSum(optVO);
+    }
+}

+ 106 - 0
tran-service/src/main/java/com/diagbot/aggregate/OptHospAggregate.java

@@ -0,0 +1,106 @@
+package com.diagbot.aggregate;
+
+import com.diagbot.dto.OptHospDTO;
+import com.diagbot.dto.PVHospDTO;
+import com.diagbot.dto.PVHospSumDTO;
+import com.diagbot.dto.UVHospDTO;
+import com.diagbot.dto.UVHospSumDTO;
+import com.diagbot.dto.ZZHospDTO;
+import com.diagbot.dto.ZZHospSumDTO;
+import com.diagbot.facade.OptInfoFacade;
+import com.diagbot.util.ListUtil;
+import com.diagbot.vo.OptVO;
+import io.github.lvyahui8.spring.annotation.DataConsumer;
+import io.github.lvyahui8.spring.annotation.DataProvider;
+import io.github.lvyahui8.spring.annotation.InvokeParameter;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/2/3 10:38
+ */
+@Component
+public class OptHospAggregate {
+    @Autowired
+    private OptInfoFacade optInfoFacade;
+
+    @DataProvider("getAllOptSumHosp")
+    public OptHospDTO getAllOptSumHosp(
+            @InvokeParameter("optVO") OptVO optVO,
+            @DataConsumer("getPVHosp") List<PVHospDTO> pvHospDto,
+            @DataConsumer("getPVSumHosp") List<PVHospSumDTO> pvHospSumDto,
+            @DataConsumer("getUVHosp") List<UVHospDTO> uvHospDto,
+            @DataConsumer("getUVSumHosp") List<UVHospSumDTO> uvHospSumDto,
+            @DataConsumer("getZZHosp") List<ZZHospDTO> zzHospDto,
+            @DataConsumer("getZZSumHosp") List<ZZHospSumDTO> zzHospSumDto) {
+        OptHospDTO optHospDTO = new OptHospDTO();
+        if (ListUtil.isNotEmpty(pvHospDto)) {
+            optHospDTO.setPvHospDto(pvHospDto);
+        }
+        if (ListUtil.isNotEmpty(pvHospSumDto)) {
+            optHospDTO.setPvHospSumDto(pvHospSumDto);
+            Long pvSum = 0L;
+            for (PVHospSumDTO pvHospSumDTO : pvHospSumDto) {
+                pvSum += pvHospSumDTO.getPvSum();
+            }
+            optHospDTO.setPvSum(pvSum);
+        }
+        if (ListUtil.isNotEmpty(uvHospDto)) {
+            optHospDTO.setUvHospDto(uvHospDto);
+        }
+        if (ListUtil.isNotEmpty(uvHospSumDto)) {
+            optHospDTO.setUvHospSumDto(uvHospSumDto);
+            Long uvSum = 0L;
+            for (UVHospSumDTO uvHospSumDTO : uvHospSumDto) {
+                uvSum += uvHospSumDTO.getUvSum();
+            }
+            optHospDTO.setUvSum(uvSum);
+        }
+        if (ListUtil.isNotEmpty(zzHospDto)) {
+            optHospDTO.setZzHospDto(zzHospDto);
+        }
+        if (ListUtil.isNotEmpty(zzHospSumDto)) {
+            optHospDTO.setZzHospSumDto(zzHospSumDto);
+            Long zzSum = 0L;
+            for (ZZHospSumDTO zzHospSumDTO : zzHospSumDto) {
+                zzSum += zzHospSumDTO.getZzSum();
+            }
+            optHospDTO.setZzSum(zzSum);
+        }
+        return optHospDTO;
+    }
+
+    @DataProvider("getPVHosp")
+    public List<PVHospDTO> getPVHosp(@InvokeParameter("optVO") OptVO optVO) {
+        return optInfoFacade.getPVHosp(optVO);
+    }
+
+    @DataProvider("getPVSumHosp")
+    public List<PVHospSumDTO> getPVSumHosp(@InvokeParameter("optVO") OptVO optVO) {
+        return optInfoFacade.getPVSumHosp(optVO);
+    }
+
+    @DataProvider("getUVHosp")
+    public List<UVHospDTO> getUVHosp(@InvokeParameter("optVO") OptVO optVO) {
+        return optInfoFacade.getUVHosp(optVO);
+    }
+
+    @DataProvider("getUVSumHosp")
+    public List<UVHospSumDTO> getUVSumHosp(@InvokeParameter("optVO") OptVO optVO) {
+        return optInfoFacade.getUVSumHosp(optVO);
+    }
+
+    @DataProvider("getZZHosp")
+    public List<ZZHospDTO> getZZHosp(@InvokeParameter("optVO") OptVO optVO) {
+        return optInfoFacade.getZZHosp(optVO);
+    }
+
+    @DataProvider("getZZSumHosp")
+    public List<ZZHospSumDTO> getZZSumHosp(@InvokeParameter("optVO") OptVO optVO) {
+        return optInfoFacade.getZZSumHosp(optVO);
+    }
+}

+ 63 - 0
tran-service/src/main/java/com/diagbot/dto/DiseaseDeptDTO.java

@@ -0,0 +1,63 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/3/20 17:17
+ */
+@Getter
+@Setter
+public class DiseaseDeptDTO {
+    /**
+     * 医院编码
+     */
+    private String hospitalCode;
+
+    /**
+     * HIS疾病名称
+     */
+    private String diseaseName;
+
+    /**
+     * icd10编码
+     */
+    private String icd10Code;
+
+    /**
+     * icd10名称
+     */
+    private String icd10Name;
+
+    /**
+     * 朗通疾病名称
+     */
+    private String conceptDisName;
+
+    /**
+     * 小科室
+     */
+    private String subDeptName;
+
+    /**
+     * 大科室
+     */
+    private String deptName;
+
+    /**
+     * 小科室编码
+     */
+    private String subDeptCode;
+
+    /**
+     * 大科室编码
+     */
+    private String deptCode;
+
+    /**
+     * 医院科室地址
+     */
+    private String url;
+}

+ 22 - 0
tran-service/src/main/java/com/diagbot/dto/HospItemDTO.java

@@ -0,0 +1,22 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: zhoutg
+ * @time: 2020/2/3 9:27
+ */
+@Getter
+@Setter
+public class HospItemDTO {
+    //医院名称
+    private String hospitalCode;
+    // pvSum
+    private Long pvSum = 0L;
+    //uvSum
+    private Long uvSum = 0L;
+    //zzSum
+    private Long zzSum = 0L;
+}

+ 18 - 0
tran-service/src/main/java/com/diagbot/dto/HospNameDTO.java

@@ -0,0 +1,18 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/2/3 9:27
+ */
+@Getter
+@Setter
+public class HospNameDTO {
+    //医院名称
+    private List<String> hospitalCode;
+}

+ 50 - 0
tran-service/src/main/java/com/diagbot/dto/InquiryTriageDTO.java

@@ -0,0 +1,50 @@
+package com.diagbot.dto;
+
+import com.diagbot.vo.SaveDisDeptVO;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+ * @author wangfeng
+ * @Description:
+ * @date 2020/3/25 14:32
+ */
+@Setter
+@Getter
+public class InquiryTriageDTO {
+    @ApiModelProperty(value = "医院名称")
+    private String hospitalCode;
+
+    @ApiModelProperty(value = "访问者的IP", hidden = true)
+    private String ip;
+
+    @Valid
+    @ApiModelProperty(value = "诊断结果和疾病科室", required = true)
+    private String disDept;
+
+    /*@ApiModelProperty(value = "姓名")
+    private String patName;*/
+
+    @ApiModelProperty(value = "年龄")
+    private Integer patAge;
+
+    @ApiModelProperty(value = "性别(1:男 2:女)")
+    private Integer patSex;
+
+    @ApiModelProperty(value = "对接类型(1:咨询,2:挂号)")
+    private Integer idType;
+
+/*    @ApiModelProperty(value = "证件号")
+    private String idNum;*/
+
+    @ApiModelProperty(value = "症状")
+    private String symptom;
+
+    @ApiModelProperty(value = "补充说明")
+    private String supplement;
+
+}

+ 22 - 0
tran-service/src/main/java/com/diagbot/dto/OptDTO.java

@@ -0,0 +1,22 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/2/3 9:50
+ */
+@Getter
+@Setter
+public class OptDTO {
+    private List<PVDTO> pvdto;
+    private Long pvSum;
+    private List<UVDTO> uvdto;
+    private Long uvSum;
+    private List<ZZDTO> zzdto;
+    private Long zzSum;
+}

+ 25 - 0
tran-service/src/main/java/com/diagbot/dto/OptHospDTO.java

@@ -0,0 +1,25 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/2/3 9:50
+ */
+@Getter
+@Setter
+public class OptHospDTO {
+    private List<PVHospDTO> pvHospDto;
+    private List<PVHospSumDTO> pvHospSumDto;
+    private Long pvSum;
+    private List<UVHospDTO> uvHospDto;
+    private List<UVHospSumDTO> uvHospSumDto;
+    private Long uvSum;
+    private List<ZZHospDTO> zzHospDto;
+    private List<ZZHospSumDTO> zzHospSumDto;
+    private Long zzSum;
+}

+ 16 - 0
tran-service/src/main/java/com/diagbot/dto/PVDTO.java

@@ -0,0 +1,16 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/2/3 9:27
+ */
+@Getter
+@Setter
+public class PVDTO {
+    private String days;
+    private Long pvCnt;
+}

+ 18 - 0
tran-service/src/main/java/com/diagbot/dto/PVHospDTO.java

@@ -0,0 +1,18 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/2/3 9:27
+ */
+@Getter
+@Setter
+public class PVHospDTO {
+    //医院名称
+    private String hospitalCode;
+    private String days;
+    private Long pvCnt;
+}

+ 17 - 0
tran-service/src/main/java/com/diagbot/dto/PVHospSumDTO.java

@@ -0,0 +1,17 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/2/3 9:27
+ */
+@Getter
+@Setter
+public class PVHospSumDTO {
+    //医院名称
+    private String hospitalCode;
+    private Long pvSum;
+}

+ 34 - 0
tran-service/src/main/java/com/diagbot/dto/SaveInquiryTriageDTO.java

@@ -0,0 +1,34 @@
+package com.diagbot.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Map;
+
+/**
+ * @Description:
+ * @author: wangfeng
+ * @time: 2020/3/23 10:56
+ */
+@ApiModel(value = "分诊记录保存接口出参")
+@Getter
+@Setter
+public class SaveInquiryTriageDTO {
+
+    /**
+     * 纳里返回的url
+     */
+    @ApiModelProperty(value = "纳里返回的url")
+    private String body;
+
+    private String response;
+
+    private String request;
+
+    private String requestBodys;
+
+    private Map<String,Object> bodyMap;
+
+}

+ 16 - 0
tran-service/src/main/java/com/diagbot/dto/UVDTO.java

@@ -0,0 +1,16 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/2/3 9:27
+ */
+@Getter
+@Setter
+public class UVDTO {
+    private String days;
+    private Long uvCnt;
+}

+ 18 - 0
tran-service/src/main/java/com/diagbot/dto/UVHospDTO.java

@@ -0,0 +1,18 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/2/3 9:27
+ */
+@Getter
+@Setter
+public class UVHospDTO {
+    //医院名称
+    private String hospitalCode;
+    private String days;
+    private Long uvCnt;
+}

+ 17 - 0
tran-service/src/main/java/com/diagbot/dto/UVHospSumDTO.java

@@ -0,0 +1,17 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/2/3 9:27
+ */
+@Getter
+@Setter
+public class UVHospSumDTO {
+    //医院名称
+    private String hospitalCode;
+    private Long uvSum;
+}

+ 16 - 0
tran-service/src/main/java/com/diagbot/dto/ZZDTO.java

@@ -0,0 +1,16 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/2/3 9:27
+ */
+@Getter
+@Setter
+public class ZZDTO {
+    private String days;
+    private Long zzCnt;
+}

+ 18 - 0
tran-service/src/main/java/com/diagbot/dto/ZZHospDTO.java

@@ -0,0 +1,18 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/2/3 9:27
+ */
+@Getter
+@Setter
+public class ZZHospDTO {
+    //医院名称
+    private String hospitalCode;
+    private String days;
+    private Long zzCnt;
+}

+ 17 - 0
tran-service/src/main/java/com/diagbot/dto/ZZHospSumDTO.java

@@ -0,0 +1,17 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/2/3 9:27
+ */
+@Getter
+@Setter
+public class ZZHospSumDTO {
+    //医院名称
+    private String hospitalCode;
+    private Long zzSum;
+}

+ 67 - 0
tran-service/src/main/java/com/diagbot/entity/Client.java

@@ -0,0 +1,67 @@
+
+package com.diagbot.entity;
+
+import com.diagbot.util.AESUtils;
+import com.diagbot.util.JSONUtils;
+import com.diagbot.util.MessageDigestUtil;
+import com.diagbot.util.OpenApiUtils;
+import com.diagbot.util.SignUtil;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.UUID;
+
+/**
+ * Client
+ */
+public class Client {
+
+    private String apiUrl;
+    private String appKey;
+    private String appSecret;
+    private String encodingAesKey;
+
+    public Client(String apiUrl, String appKey, String appSecret, String encodingAesKey) {
+        this.apiUrl = apiUrl;
+        this.appKey = appKey;
+        this.appSecret = appSecret;
+        this.encodingAesKey = encodingAesKey;
+    }
+
+    /**
+     * 发送请求
+     *
+     * @param request request对象
+     * @return Response
+     * @throws Exception
+     */
+    public Response execute(Request request) throws Exception {
+        request.setApiUrl(this.apiUrl);
+        request.setAppKey(this.appKey);
+        request.setAppSecret(this.appSecret);
+        request.setEncodingAesKey(this.encodingAesKey);
+        request.addHeader(SystemHeader.X_CA_KEY, request.getAppKey());
+        request.addHeader(SystemHeader.X_CA_NONCE, UUID.randomUUID().toString());
+        request.addHeader(SystemHeader.X_CA_TIMESTAMP, String.valueOf(System.currentTimeMillis()));
+        String jsonStr = JSONUtils.toString(request.getBodys());
+        String encryptStr;
+        if (StringUtils.isNotEmpty(request.getEncodingAesKey())) {
+            encryptStr = AESUtils.encrypt(jsonStr, request.getEncodingAesKey());
+        } else {
+            encryptStr = jsonStr;
+        }
+        String contentMd5 = MessageDigestUtil.base64AndMD5(encryptStr);
+        request.addHeader(SystemHeader.X_CONTENT_MD5, contentMd5);
+        String signature = SignUtil.sign(request.getAppSecret(), request.getHeaders());
+        request.addHeader(SystemHeader.X_CA_SIGNATURE, signature);
+        request.setStringBody(encryptStr);
+        return OpenApiUtils.post(request);
+    }
+
+    public static void main(String[] args) throws Exception {
+        String body = "[1]";
+        String encryptStr = AESUtils.encrypt(body, "1234567890123456");
+        String contentMd5 = MessageDigestUtil.base64AndMD5(encryptStr.getBytes());
+        System.out.println(contentMd5);
+
+    }
+}

+ 47 - 0
tran-service/src/main/java/com/diagbot/entity/Constants.java

@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.diagbot.entity;
+
+/**
+ * 通用常量
+ */
+public class Constants {
+    //签名算法HmacSha256
+    public static final String HMAC_SHA256 = "HmacSHA256";
+    //编码UTF-8
+    public static final String ENCODING = "UTF-8";
+    //UserAgent
+    public static final String USER_AGENT = "demo/aliyun/java";
+    //换行符
+    public static final String LF = "\n";
+    //串联符
+    public static final String SPE1 = ",";
+    //示意符
+    public static final String SPE2 = ":";
+    //连接符
+    public static final String SPE3 = "&";
+    //赋值符
+    public static final String SPE4 = "=";
+    //问号符
+    public static final String SPE5 = "?";
+    //默认请求超时时间,单位毫秒
+    public static final int DEFAULT_TIMEOUT = 1000;
+    //参与签名的系统Header前缀,只有指定前缀的Header才会参与到签名中
+    public static final String CA_HEADER_TO_SIGN_PREFIX_SYSTEM = "X-Ca-";
+}

+ 278 - 0
tran-service/src/main/java/com/diagbot/entity/DiseaseDept.java

@@ -0,0 +1,278 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author zhaops
+ * @since 2020-03-20
+ */
+@TableName("tran_disease_dept")
+public class DiseaseDept implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 医院编码
+     */
+    private String hospitalCode;
+
+    /**
+     * HIS疾病名称
+     */
+    private String diseaseName;
+
+    /**
+     * icd10编码
+     */
+    private String icd10Code;
+
+    /**
+     * icd10名称
+     */
+    private String icd10Name;
+
+    /**
+     * 朗通疾病名称
+     */
+    private String conceptDisName;
+
+    /**
+     * 小科室
+     */
+    private String subDeptName;
+
+    /**
+     * 小科室编码
+     */
+    private String subDeptCode;
+
+    /**
+     * 大科室
+     */
+    private String deptName;
+
+    /**
+     * 大科室编码
+     */
+    private String deptCode;
+
+    /**
+     * 状态(1:有效)
+     */
+    private String status;
+
+    /**
+     * 医院科室地址
+     */
+    private String url;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getIsDeleted() {
+        return isDeleted;
+    }
+
+    public void setIsDeleted(String isDeleted) {
+        this.isDeleted = isDeleted;
+    }
+
+    public Date getGmtCreate() {
+        return gmtCreate;
+    }
+
+    public void setGmtCreate(Date gmtCreate) {
+        this.gmtCreate = gmtCreate;
+    }
+
+    public Date getGmtModified() {
+        return gmtModified;
+    }
+
+    public void setGmtModified(Date gmtModified) {
+        this.gmtModified = gmtModified;
+    }
+
+    public String getCreator() {
+        return creator;
+    }
+
+    public void setCreator(String creator) {
+        this.creator = creator;
+    }
+
+    public String getModifier() {
+        return modifier;
+    }
+
+    public void setModifier(String modifier) {
+        this.modifier = modifier;
+    }
+
+    public String getHospitalCode() {
+        return hospitalCode;
+    }
+
+    public void setHospitalCode(String hospitalCode) {
+        this.hospitalCode = hospitalCode;
+    }
+
+    public String getDiseaseName() {
+        return diseaseName;
+    }
+
+    public void setDiseaseName(String diseaseName) {
+        this.diseaseName = diseaseName;
+    }
+
+    public String getIcd10Code() {
+        return icd10Code;
+    }
+
+    public void setIcd10Code(String icd10Code) {
+        this.icd10Code = icd10Code;
+    }
+
+    public String getIcd10Name() {
+        return icd10Name;
+    }
+
+    public void setIcd10Name(String icd10Name) {
+        this.icd10Name = icd10Name;
+    }
+
+    public String getConceptDisName() {
+        return conceptDisName;
+    }
+
+    public void setConceptDisName(String conceptDisName) {
+        this.conceptDisName = conceptDisName;
+    }
+
+    public String getSubDeptName() {
+        return subDeptName;
+    }
+
+    public void setSubDeptName(String subDeptName) {
+        this.subDeptName = subDeptName;
+    }
+
+    public String getDeptName() {
+        return deptName;
+    }
+
+    public void setDeptName(String deptName) {
+        this.deptName = deptName;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    public String getSubDeptCode() {
+        return subDeptCode;
+    }
+
+    public void setSubDeptCode(String subDeptCode) {
+        this.subDeptCode = subDeptCode;
+    }
+
+    public String getDeptCode() {
+        return deptCode;
+    }
+
+    public void setDeptCode(String deptCode) {
+        this.deptCode = deptCode;
+    }
+
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
+
+    @Override
+    public String toString() {
+        return "DiseaseDept{" +
+                "id=" + id +
+                ", isDeleted=" + isDeleted +
+                ", gmtCreate=" + gmtCreate +
+                ", gmtModified=" + gmtModified +
+                ", creator=" + creator +
+                ", modifier=" + modifier +
+                ", hospitalCode=" + hospitalCode +
+                ", diseaseName=" + diseaseName +
+                ", icd10Code=" + icd10Code +
+                ", icd10Name=" + icd10Name +
+                ", conceptDisName=" + conceptDisName +
+                ", subDeptName=" + subDeptName +
+                ", subDeptCode=" + subDeptCode +
+                ", deptName=" + deptName +
+                ", deptCode=" + deptCode +
+                ", status=" + status +
+                ", url=" + url +
+                ", remark=" + remark +
+                "}";
+    }
+}

+ 251 - 0
tran-service/src/main/java/com/diagbot/entity/InquiryTriage.java

@@ -0,0 +1,251 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 智能分诊记录主表
+ * </p>
+ *
+ * @author wangfeng
+ * @since 2020-03-20
+ */
+@TableName("tran_inquiry_triage")
+public class InquiryTriage implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 医院名称
+     */
+    private String hospitalCode;
+
+    /**
+     * 访问者的IP
+     */
+    private String ip;
+
+    /**
+     * 姓名
+     */
+    private String patName;
+
+    /**
+     * 年龄
+     */
+    private Integer patAge;
+
+    /**
+     * 性别(1:男 2:女)
+     */
+    private Integer patSex;
+
+    /**
+     * 证件类型(1:身份证,2:护照)
+     */
+    private Integer idType;
+
+    /**
+     * 证件号
+     */
+    private String idNum;
+
+    /**
+     * 症状
+     */
+    private String symptom;
+
+    /**
+     * 补充说明
+     */
+    private String supplement;
+
+    /**
+     * 诊断结果和疾病科室
+     */
+    private String disDept;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+    public String getIsDeleted() {
+        return isDeleted;
+    }
+
+    public void setIsDeleted(String isDeleted) {
+        this.isDeleted = isDeleted;
+    }
+    public Date getGmtCreate() {
+        return gmtCreate;
+    }
+
+    public void setGmtCreate(Date gmtCreate) {
+        this.gmtCreate = gmtCreate;
+    }
+    public Date getGmtModified() {
+        return gmtModified;
+    }
+
+    public void setGmtModified(Date gmtModified) {
+        this.gmtModified = gmtModified;
+    }
+    public String getCreator() {
+        return creator;
+    }
+
+    public void setCreator(String creator) {
+        this.creator = creator;
+    }
+    public String getModifier() {
+        return modifier;
+    }
+
+    public void setModifier(String modifier) {
+        this.modifier = modifier;
+    }
+    public String getHospitalCode() {
+        return hospitalCode;
+    }
+
+    public void setHospitalCode(String hospitalCode) {
+        this.hospitalCode = hospitalCode;
+    }
+    public String getIp() {
+        return ip;
+    }
+
+    public void setIp(String ip) {
+        this.ip = ip;
+    }
+    public String getPatName() {
+        return patName;
+    }
+
+    public void setPatName(String patName) {
+        this.patName = patName;
+    }
+    public Integer getPatAge() {
+        return patAge;
+    }
+
+    public void setPatAge(Integer patAge) {
+        this.patAge = patAge;
+    }
+    public Integer getPatSex() {
+        return patSex;
+    }
+
+    public void setPatSex(Integer patSex) {
+        this.patSex = patSex;
+    }
+    public Integer getIdType() {
+        return idType;
+    }
+
+    public void setIdType(Integer idType) {
+        this.idType = idType;
+    }
+    public String getIdNum() {
+        return idNum;
+    }
+
+    public void setIdNum(String idNum) {
+        this.idNum = idNum;
+    }
+    public String getSymptom() {
+        return symptom;
+    }
+
+    public void setSymptom(String symptom) {
+        this.symptom = symptom;
+    }
+    public String getSupplement() {
+        return supplement;
+    }
+
+    public void setSupplement(String supplement) {
+        this.supplement = supplement;
+    }
+    public String getDisDept() {
+        return disDept;
+    }
+
+    public void setDisDept(String disDept) {
+        this.disDept = disDept;
+    }
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    @Override
+    public String toString() {
+        return "InquiryTriage{" +
+            "id=" + id +
+            ", isDeleted=" + isDeleted +
+            ", gmtCreate=" + gmtCreate +
+            ", gmtModified=" + gmtModified +
+            ", creator=" + creator +
+            ", modifier=" + modifier +
+            ", hospitalCode=" + hospitalCode +
+            ", ip=" + ip +
+            ", patName=" + patName +
+            ", patAge=" + patAge +
+            ", patSex=" + patSex +
+            ", idType=" + idType +
+            ", idNum=" + idNum +
+            ", symptom=" + symptom +
+            ", supplement=" + supplement +
+            ", disDept=" + disDept +
+            ", remark=" + remark +
+        "}";
+    }
+}

+ 53 - 0
tran-service/src/main/java/com/diagbot/entity/JSONResponseBean.java

@@ -0,0 +1,53 @@
+package com.diagbot.entity;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class JSONResponseBean {
+	private int code = 200;
+	private String msg;
+	private Object body;
+	private Map<String, Object> properties;
+	
+	public int getCode() {
+		return code;
+	}
+	
+	public void setCode(int code) {
+		this.code = code;
+	}
+	
+	public String getMsg() {
+		return msg;
+	}
+	
+	public void setMsg(String msg) {
+		this.msg = msg;
+	}
+	
+	public Object getBody() {
+		return body;
+	}
+	
+	public void setBody(Object body) {
+		this.body = body;
+	}
+	
+	public Map<String, Object> getProperties() {
+		return properties;
+	}
+	
+	public Object getProperty(String nm){
+		if(properties == null || properties.isEmpty()){
+			return null;
+		}
+		return properties.get(nm);
+	}
+	
+	public void setProperty(String name, Object val){
+		if(properties == null){
+			properties = new HashMap<>();
+		}
+		properties.put(name, val);
+	}
+}

+ 173 - 0
tran-service/src/main/java/com/diagbot/entity/OptInfo.java

@@ -0,0 +1,173 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 操作信息
+ * </p>
+ *
+ * @author wangfeng
+ * @since 2020-03-20
+ */
+@TableName("tran_opt_info")
+public class OptInfo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 访问的系统类型(1, "user-service"),(2, "diagbotman-service"),(3, "uaa-service"),(4, "log-service"),(5, "bi-service"),(6, "ltapi-service"),(7, "feedback-service"),(8, "icss-old-service"),(9, "triage-service"),(10, "appkey"),(11, "icss-service"),(12, "icssman-service"),(13, "knowledgeman-service"),(14, "tran-service"),(15, "aipt-service"),(16, "data-service"),(17, "prec-service");
+     */
+    private Integer sysType;
+
+    /**
+     * 医院名称
+     */
+    private String hospitalCode;
+
+    /**
+     * 访问者的IP
+     */
+    private String ip;
+
+    /**
+     * 操作类型:1 开始,2 结束
+     */
+    private String optType;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+    public String getIsDeleted() {
+        return isDeleted;
+    }
+
+    public void setIsDeleted(String isDeleted) {
+        this.isDeleted = isDeleted;
+    }
+    public Date getGmtCreate() {
+        return gmtCreate;
+    }
+
+    public void setGmtCreate(Date gmtCreate) {
+        this.gmtCreate = gmtCreate;
+    }
+    public Date getGmtModified() {
+        return gmtModified;
+    }
+
+    public void setGmtModified(Date gmtModified) {
+        this.gmtModified = gmtModified;
+    }
+    public String getCreator() {
+        return creator;
+    }
+
+    public void setCreator(String creator) {
+        this.creator = creator;
+    }
+    public String getModifier() {
+        return modifier;
+    }
+
+    public void setModifier(String modifier) {
+        this.modifier = modifier;
+    }
+    public Integer getSysType() {
+        return sysType;
+    }
+
+    public void setSysType(Integer sysType) {
+        this.sysType = sysType;
+    }
+    public String getHospitalCode() {
+        return hospitalCode;
+    }
+
+    public void setHospitalCode(String hospitalCode) {
+        this.hospitalCode = hospitalCode;
+    }
+    public String getIp() {
+        return ip;
+    }
+
+    public void setIp(String ip) {
+        this.ip = ip;
+    }
+    public String getOptType() {
+        return optType;
+    }
+
+    public void setOptType(String optType) {
+        this.optType = optType;
+    }
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    @Override
+    public String toString() {
+        return "OptInfo{" +
+            "id=" + id +
+            ", isDeleted=" + isDeleted +
+            ", gmtCreate=" + gmtCreate +
+            ", gmtModified=" + gmtModified +
+            ", creator=" + creator +
+            ", modifier=" + modifier +
+            ", sysType=" + sysType +
+            ", hospitalCode=" + hospitalCode +
+            ", ip=" + ip +
+            ", optType=" + optType +
+            ", remark=" + remark +
+        "}";
+    }
+}

+ 142 - 0
tran-service/src/main/java/com/diagbot/entity/Request.java

@@ -0,0 +1,142 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.diagbot.entity;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Request
+ */
+public class Request {
+
+    public Request() {
+    }
+
+    public Request(String serviceId, String method, List<Object> bodys) {
+        this.appKey = appKey;
+        this.appSecret = appSecret;
+        this.bodys=bodys;
+        headers = new HashMap<>();
+        headers.put(SystemHeader.X_CA_KEY, appKey);
+        headers.put(SystemHeader.X_SERVICE_ID, serviceId);
+        headers.put(SystemHeader.X_SERVICE_METHOD, method);
+    }
+    /**
+     * (必选)服务请求地址
+     */
+    private String apiUrl;
+
+
+
+    /**
+     * (必选)APP KEY
+     */
+    private String appKey;
+
+    /**
+     * (必选)APP密钥
+     */
+    private String appSecret;
+
+    private String encodingAesKey;
+
+
+    /**
+     * (必选) HTTP头
+     */
+    private Map<String, String> headers;
+    
+
+
+    /**
+     * (必选)请求参数
+     */
+    private List<Object> bodys;
+
+    /**
+     * (可选)字符串Body体
+     */
+    private String stringBody;
+
+
+    public String getAppKey() {
+        return appKey;
+    }
+
+    public void setAppKey(String appKey) {
+        this.appKey = appKey;
+    }
+
+    public String getAppSecret() {
+        return appSecret;
+    }
+
+    public void setAppSecret(String appSecret) {
+        this.appSecret = appSecret;
+    }
+
+
+    public Map<String, String> getHeaders() {
+        return headers;
+    }
+
+    public void setHeaders(Map<String, String> headers) {
+        this.headers = headers;
+    }
+
+    public List<Object> getBodys() {
+        return bodys;
+    }
+
+    public void setBodys(List<Object> bodys) {
+        this.bodys = bodys;
+    }
+
+    public String getStringBody() {
+        return stringBody;
+    }
+
+    public void setStringBody(String stringBody) {
+        this.stringBody = stringBody;
+    }
+
+    public String getEncodingAesKey() {
+        return encodingAesKey;
+    }
+
+    public void setEncodingAesKey(String encodingAesKey) {
+        this.encodingAesKey = encodingAesKey;
+    }
+
+    public String getApiUrl() {
+        return apiUrl;
+    }
+
+    public void setApiUrl(String apiUrl) {
+        this.apiUrl = apiUrl;
+    }
+    public void addHeader(String name, String value){
+        if(headers==null){
+            headers = new HashMap<>();
+        }
+        headers.put(name, value);
+    }
+}

+ 120 - 0
tran-service/src/main/java/com/diagbot/entity/Response.java

@@ -0,0 +1,120 @@
+package com.diagbot.entity;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class Response {
+    /**
+     * http 请求状态码
+     */
+    private int statusCode;
+    private String contentType;
+    /**
+     * 请求唯一 ID,请求一旦进入 API 网关应用后,API 网关就会生成请求 ID 并通过响应头返回给客户端,
+     * 建议客户端与后端服务都记录此请求 ID,可用于问题排查与跟踪。
+     */
+    private String requestId;
+    /**
+     * API网关会将服务端的StringToSign放到HTTP应答的Header中返回到客户端,Key为:X-Ca-Error-Message
+     * 只需要将本地计算的StringToSign与服务端返回的StringToSign进行对比即可找到问题;
+     * 如果服务端与客户端的签名串是一致的,请检查用于签名计算的密钥是否正确;
+     */
+    private String caErrorMsg;
+    /**
+     * 业务接口返回的错误信息
+     */
+    private String errorMessage;
+    private Map<String, String> headers;
+    private String body;
+    private JSONResponseBean jsonResponseBean;
+
+    public boolean isSuccess() {
+        return (200 == statusCode && jsonResponseBean != null && 200 == jsonResponseBean.getCode());
+    }
+
+    public Response() {
+
+    }
+
+    public int getStatusCode() {
+        return statusCode;
+    }
+
+    public void setStatusCode(int statusCode) {
+        this.statusCode = statusCode;
+    }
+
+    public String getContentType() {
+        return contentType;
+    }
+
+    public void setContentType(String contentType) {
+        this.contentType = contentType;
+    }
+
+    public String getRequestId() {
+        return requestId;
+    }
+
+    public void setRequestId(String requestId) {
+        this.requestId = requestId;
+    }
+
+    public String getErrorMessage() {
+        if (jsonResponseBean != null && !"200".equals(jsonResponseBean.getCode())) {
+            return jsonResponseBean.getMsg();
+        }
+        return null;
+    }
+
+    public void setErrorMessage(String errorMessage) {
+        this.errorMessage = errorMessage;
+    }
+
+    public Map<String, String> getHeaders() {
+        return headers;
+    }
+
+    public String getHeader(String key) {
+        if (null != headers) {
+            return headers.get(key);
+        } else {
+            return null;
+        }
+    }
+
+    public void setHeaders(Map<String, String> headers) {
+        this.headers = headers;
+    }
+
+    public void setHeader(String key, String value) {
+        if (null == this.headers) {
+            this.headers = new HashMap<String, String>();
+        }
+        this.headers.put(key, value);
+    }
+
+    public String getBody() {
+        return body;
+    }
+
+    public void setBody(String body) {
+        this.body = body;
+    }
+
+    public JSONResponseBean getJsonResponseBean() {
+        return jsonResponseBean;
+    }
+
+    public void setJsonResponseBean(JSONResponseBean jsonResponseBean) {
+        this.jsonResponseBean = jsonResponseBean;
+    }
+
+    public String getCaErrorMsg() {
+        return caErrorMsg;
+    }
+
+    public void setCaErrorMsg(String caErrorMsg) {
+        this.caErrorMsg = caErrorMsg;
+    }
+}

+ 29 - 0
tran-service/src/main/java/com/diagbot/entity/SystemHeader.java

@@ -0,0 +1,29 @@
+
+package com.diagbot.entity;
+
+/**
+ * 系统HTTP头常量
+ */
+public class SystemHeader {
+    //签名Header
+    public static final String X_CA_SIGNATURE = "X-Ca-Signature";
+    //所有参与签名的Header
+    public static final String X_CA_SIGNATURE_HEADERS = "X-Ca-Signature-Headers";
+    //请求时间戳
+    public static final String X_CA_TIMESTAMP = "X-Ca-Timestamp";
+    //请求放重放Nonce,15分钟内保持唯一,建议使用UUID
+    public static final String X_CA_NONCE = "X-Ca-Nonce";
+    //APP KEY
+    public static final String X_CA_KEY = "X-Ca-Key";
+    //服务id
+    public static final String X_SERVICE_ID = "X-Service-Id";
+    //具体method
+    public static final String X_SERVICE_METHOD = "X-Service-Method";
+    //MD5加密的请求体信息
+    public static final String X_CONTENT_MD5 = "X-Content-MD5";
+
+    //MD5加密的请求体信息
+    public static final String X_CA_REQUESTID = "X-Ca-RequestId";
+    //API网关会将服务端的StringToSign放到HTTP应答的Header中返回到客户端,Key为:X-Ca-Error-Message
+    public static final String X_CA_ERROR_MESSAGE = "X-Ca-Error-Message";
+}

+ 40 - 0
tran-service/src/main/java/com/diagbot/facade/DiseaseDeptFacade.java

@@ -0,0 +1,40 @@
+package com.diagbot.facade;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.diagbot.dto.DiseaseDeptDTO;
+import com.diagbot.entity.DiseaseDept;
+import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.enums.StatusEnum;
+import com.diagbot.service.impl.DiseaseDeptServiceImpl;
+import com.diagbot.util.BeanUtil;
+import com.diagbot.util.ListUtil;
+import com.diagbot.vo.DiseaseDeptVO;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/3/20 13:46
+ */
+@Component
+public class DiseaseDeptFacade extends DiseaseDeptServiceImpl {
+
+    /**
+     * 根据内部诊断名称查询诊断科室映射关系
+     *
+     * @param diseaseDeptVO
+     * @return
+     */
+    public List<DiseaseDeptDTO> getDiseaseDeptByConceptNames(DiseaseDeptVO diseaseDeptVO) {
+        QueryWrapper<DiseaseDept> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("status", StatusEnum.Enable.getKey())
+                .eq("hospital_code", diseaseDeptVO.getHospitalCode())
+                .in(ListUtil.isNotEmpty(diseaseDeptVO.getConceptNames()), "concept_dis_name", diseaseDeptVO.getConceptNames());
+        List<DiseaseDept> diseaseDeptList = this.list(queryWrapper);
+        List<DiseaseDeptDTO> diseaseDeptDTOList = BeanUtil.listCopyTo(diseaseDeptList, DiseaseDeptDTO.class);
+        return diseaseDeptDTOList;
+    }
+}

+ 149 - 0
tran-service/src/main/java/com/diagbot/facade/InquiryTriageFacade.java

@@ -0,0 +1,149 @@
+package com.diagbot.facade;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.diagbot.dto.InquiryTriageDTO;
+import com.diagbot.dto.SaveInquiryTriageDTO;
+import com.diagbot.entity.Client;
+import com.diagbot.entity.InquiryTriage;
+import com.diagbot.entity.JSONResponseBean;
+import com.diagbot.entity.Request;
+import com.diagbot.entity.Response;
+import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.service.impl.InquiryTriageServiceImpl;
+import com.diagbot.util.BeanUtil;
+import com.diagbot.util.DateUtil;
+import com.diagbot.util.FastJsonUtils;
+import com.diagbot.util.GsonUtil;
+import com.diagbot.util.HttpUtils;
+import com.diagbot.util.StringUtil;
+import com.diagbot.vo.HospitalVO;
+import com.diagbot.vo.InquiryTriageMechVO;
+import com.diagbot.vo.SaveInquiryTriageVO;
+import com.google.common.collect.Lists;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description:
+ * @author: wangfeng
+ * @time: 2020/3/23 10:33
+ */
+@Component
+@Slf4j
+public class InquiryTriageFacade extends InquiryTriageServiceImpl {
+
+    @Autowired
+    OptInfoFacade optInfoFacade;
+    @Value("${nalizx.apiUrl}")
+    private String apiUrl;
+    @Value("${nalizx.appKey}")
+    private String appKey;
+    @Value("${nalizx.appSecret}")
+    private String appSecret;
+
+    /**
+     * @param saveInquiryVO
+     * @return
+     */
+    public SaveInquiryTriageDTO saveInquiry(SaveInquiryTriageVO saveInquiryVO) {
+        if (StringUtil.isBlank(saveInquiryVO.getHospitalCode())) {
+            saveInquiryVO.setHospitalCode("朗通通用");
+        }
+        Date now = DateUtil.now();
+        InquiryTriage inquiryInfo = new InquiryTriage();
+        BeanUtil.copyProperties(saveInquiryVO, inquiryInfo);
+        inquiryInfo.setGmtCreate(now);
+        inquiryInfo.setGmtModified(now);
+        inquiryInfo.setDisDept(GsonUtil.toJson(saveInquiryVO.getDisDeptist()));
+        inquiryInfo.setIp(HttpUtils.getIpAddress());
+        boolean res = save(inquiryInfo);
+
+        HospitalVO hospitalVO = new HospitalVO();
+        hospitalVO.setHospitalCode(saveInquiryVO.getHospitalCode());
+        hospitalVO.setSysType(saveInquiryVO.getSysType());
+        // 保存记录表
+        optInfoFacade.saveOptOnfo(hospitalVO, "2");
+        //邵逸夫医院 分诊对接纳里时,返回科室编码
+        SaveInquiryTriageDTO saveInquiryDTO = new SaveInquiryTriageDTO();
+
+        if (saveInquiryVO.getHospitalCode().equals("邵逸夫医院")
+                && saveInquiryVO.getIdType().equals(1)) {
+            //去咨询
+            List<Object> naliRetList = getUrl(saveInquiryVO);
+            saveInquiryDTO.setBodyMap((Map)naliRetList.get(0));
+            saveInquiryDTO.setResponse(naliRetList.get(1).toString());
+            saveInquiryDTO.setRequest(naliRetList.get(2).toString());
+            saveInquiryDTO.setRequestBodys(naliRetList.get(3).toString());
+        }else if(saveInquiryVO.getHospitalCode().equals("邵逸夫医院")
+                && saveInquiryVO.getIdType().equals(2)){
+            //去挂号。2期
+            //TODO
+        }
+        return saveInquiryDTO;
+    }
+
+    public List<InquiryTriageDTO> getInquirysByMech(InquiryTriageMechVO inquiryTriageMechVO) {
+        QueryWrapper<InquiryTriage> inquiryTriageQuery = new QueryWrapper<>();
+        inquiryTriageQuery.eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("id_num", StringUtil.isNotBlank(inquiryTriageMechVO.getIdNum()));
+        List<InquiryTriage> data = list(inquiryTriageQuery);
+
+        List<InquiryTriageDTO> dataNew = new ArrayList<InquiryTriageDTO>();
+        //过滤
+        dataNew = BeanUtil.listCopyTo(data, InquiryTriageDTO.class);
+        return dataNew;
+    }
+    private List<Object> getUrl(SaveInquiryTriageVO saveInquiryVO) {
+        //TODO 待定
+        List<Object> ret = Lists.newArrayList();
+//        Map<String,Object> retUrl = null;
+        Request request = null;
+        Response response = null;
+        try {
+            String encodingAesKey = "";
+            Client client = new Client(apiUrl, appKey, appSecret, encodingAesKey);
+            request = getltcs(saveInquiryVO);
+            response = client.execute(request);
+            log.info("request:" + FastJsonUtils.getBeanToJson(request));
+            log.info("requestBodys:" + FastJsonUtils.getBeanToJson(request.getBodys()));
+            log.info("response:" + FastJsonUtils.getBeanToJson(response));
+            if (response.isSuccess()) {
+                JSONResponseBean result = response.getJsonResponseBean();
+                ret.add(result.getBody());
+            }
+        } catch (Exception e) {
+        }
+        ret.add(FastJsonUtils.getBeanToJson(response));
+        ret.add(FastJsonUtils.getBeanToJson(request));
+        ret.add(FastJsonUtils.getBeanToJson(request.getBodys()));
+        return ret;
+    }
+    private Request getltcs(SaveInquiryTriageVO saveInquiryVO) {
+        List bodyList = new ArrayList<>();
+        Map<String, Object> body = new HashMap<>();
+        body.put("disDeptist",saveInquiryVO.getDisDeptist() );
+        body.put("hospitalCode", saveInquiryVO.getHospitalCode());
+        body.put("patAge", saveInquiryVO.getPatAge());
+        body.put("patSex", saveInquiryVO.getPatSex());
+        body.put("idType", saveInquiryVO.getIdType());
+        body.put("symptom", saveInquiryVO.getSymptom());
+        body.put("supplement", saveInquiryVO.getSupplement());
+
+        bodyList.add(body);
+
+        //X-Service-Id对应的值
+        String serviceId = "consult.diagnoseService";
+        //X-Service-Method对应的值
+        String method = "findConsultDocByDiagnose";
+        return new Request(serviceId, method, bodyList);
+    }
+}

+ 227 - 0
tran-service/src/main/java/com/diagbot/facade/OptInfoFacade.java

@@ -0,0 +1,227 @@
+package com.diagbot.facade;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.diagbot.dto.HospItemDTO;
+import com.diagbot.dto.HospNameDTO;
+import com.diagbot.dto.OptDTO;
+import com.diagbot.dto.OptHospDTO;
+import com.diagbot.entity.OptInfo;
+import com.diagbot.exception.CommonErrorCode;
+import com.diagbot.exception.CommonException;
+import com.diagbot.service.impl.OptInfoServiceImpl;
+import com.diagbot.util.DateUtil;
+import com.diagbot.util.HttpUtils;
+import com.diagbot.util.ListUtil;
+import com.diagbot.util.StringUtil;
+import com.diagbot.vo.HospitalVO;
+import com.diagbot.vo.OptHospPageVO;
+import com.diagbot.vo.OptHospVO;
+import com.diagbot.vo.OptVO;
+import io.github.lvyahui8.spring.aggregate.facade.DataBeanAggregateQueryFacade;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+/**
+ * @author wangfeng
+ * @Description:
+ * @date 2020-03-20 16:20
+ */
+@Component
+public class OptInfoFacade extends OptInfoServiceImpl {
+    @Autowired
+    DataBeanAggregateQueryFacade dataBeanAggregateQueryFacade;
+    @Autowired
+    private OptInfoFacade optInfoFacade;
+
+    public Boolean saveOptOnfo(HospitalVO hospitalVO, String optType) {
+        OptInfo optInfo = new OptInfo();
+        Date now = DateUtil.now();
+        optInfo.setGmtModified(now);
+        optInfo.setGmtCreate(now);
+        optInfo.setIp(HttpUtils.getIpAddress());
+        optInfo.setHospitalCode(StringUtil.isNotBlank(hospitalVO.getHospitalCode()) ? hospitalVO.getHospitalCode() : "朗通通用");
+        optInfo.setOptType(optType);
+        optInfo.setSysType(hospitalVO.getSysType());
+        Boolean res = this.save(optInfo);
+        return res;
+    }
+
+    public OptDTO getOptSum(OptVO optVO) {
+        //入参验证
+        if (null != optVO && null != optVO.getStartDate()) {
+            optVO.setStartDate(DateUtil.getFirstTimeOfDay(optVO.getStartDate()));
+        }
+        if (null != optVO && null != optVO.getEndDate()) {
+            optVO.setEndDate(DateUtil.getLastTimeOfDay(optVO.getEndDate()));
+        }
+
+        if (null != optVO && null != optVO.getStartDate() && null != optVO.getEndDate()) {
+            if (DateUtil.after(optVO.getStartDate(), optVO.getEndDate())) {
+                throw new CommonException(CommonErrorCode.PARAM_IS_ERROR, "开始时间大于结束时间!");
+            }
+        }
+        if (null != optVO && null != optVO.getSysType()) {
+            optVO.setSysType(optVO.getSysType());
+        }
+        //获取统计数据
+        OptDTO optDTO = new OptDTO();
+
+        try {
+            Map<String, Object> invokeParams = new HashMap<>();
+            invokeParams.put("optVO", optVO);
+            optDTO
+                    = dataBeanAggregateQueryFacade.get("getAllOptSum", invokeParams, OptDTO.class);
+        } catch (Exception e) {
+            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR);
+        }
+        //        optDTO.setPvdto(this.getPV(optVO));
+        //        optDTO.setPvSum(this.getPVSum(optVO));
+        //        optDTO.setUvdto(this.getUV(optVO));
+        //        optDTO.setUvSum(this.getUVSum(optVO));
+        //        optDTO.setZzdto(this.getZZ(optVO));
+        //        optDTO.setZzSum(this.getZZSum(optVO));
+        return optDTO;
+    }
+
+
+    public OptDTO getOptSumNoDays(OptVO optVO) {
+        //入参验证
+        if (null != optVO && null != optVO.getStartDate()) {
+            optVO.setStartDate(DateUtil.getFirstTimeOfDay(optVO.getStartDate()));
+        }
+        if (null != optVO && null != optVO.getEndDate()) {
+            optVO.setEndDate(DateUtil.getLastTimeOfDay(optVO.getEndDate()));
+        }
+
+        if (null != optVO && null != optVO.getStartDate() && null != optVO.getEndDate()) {
+            if (DateUtil.after(optVO.getStartDate(), optVO.getEndDate())) {
+                throw new CommonException(CommonErrorCode.PARAM_IS_ERROR, "开始时间大于结束时间!");
+            }
+        }
+        if (null != optVO && null != optVO.getSysType()) {
+            optVO.setSysType(optVO.getSysType());
+        }
+        //获取统计数据
+        OptDTO optDTO = new OptDTO();
+
+        try {
+            Map<String, Object> invokeParams = new HashMap<>();
+            invokeParams.put("optVO", optVO);
+            optDTO
+                    = dataBeanAggregateQueryFacade.get("getAllOptSumNoDays", invokeParams, OptDTO.class);
+        } catch (Exception e) {
+            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR);
+        }
+        //        optDTO.setPvdto(this.getPV(optVO));
+        //        optDTO.setPvSum(this.getPVSum(optVO));
+        //        optDTO.setUvdto(this.getUV(optVO));
+        //        optDTO.setUvSum(this.getUVSum(optVO));
+        //        optDTO.setZzdto(this.getZZ(optVO));
+        //        optDTO.setZzSum(this.getZZSum(optVO));
+        return optDTO;
+    }
+
+
+    public OptHospDTO getOptSumHosp(OptVO optVO) {
+        //入参验证
+        if (null != optVO && null != optVO.getStartDate()) {
+            optVO.setStartDate(DateUtil.getFirstTimeOfDay(optVO.getStartDate()));
+        }
+        if (null != optVO && null != optVO.getEndDate()) {
+            optVO.setEndDate(DateUtil.getLastTimeOfDay(optVO.getEndDate()));
+        }
+
+        if (null != optVO && null != optVO.getStartDate() && null != optVO.getEndDate()) {
+            if (DateUtil.after(optVO.getStartDate(), optVO.getEndDate())) {
+                throw new CommonException(CommonErrorCode.PARAM_IS_ERROR, "开始时间大于结束时间!");
+            }
+        }
+        if (null != optVO && null != optVO.getSysType()) {
+            optVO.setSysType(optVO.getSysType());
+        }
+        //获取统计数据
+        OptHospDTO optHospDTO = new OptHospDTO();
+
+        try {
+            Map<String, Object> invokeParams = new HashMap<>();
+            invokeParams.put("optVO", optVO);
+            optHospDTO
+                    = dataBeanAggregateQueryFacade.get("getAllOptSumHosp", invokeParams, OptHospDTO.class);
+        } catch (Exception e) {
+            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR);
+        }
+
+        return optHospDTO;
+    }
+
+
+    public List<HospItemDTO> getOptSumHospNoDays(OptHospVO optHospVO) {
+        //入参验证
+        if (null != optHospVO && null != optHospVO.getStartDate()) {
+            optHospVO.setStartDate(DateUtil.getFirstTimeOfDay(optHospVO.getStartDate()));
+        }
+        if (null != optHospVO && null != optHospVO.getEndDate()) {
+            optHospVO.setEndDate(DateUtil.getLastTimeOfDay(optHospVO.getEndDate()));
+        }
+
+        if (null != optHospVO && null != optHospVO.getStartDate() && null != optHospVO.getEndDate()) {
+            if (DateUtil.after(optHospVO.getStartDate(), optHospVO.getEndDate())) {
+                throw new CommonException(CommonErrorCode.PARAM_IS_ERROR, "开始时间大于结束时间!");
+            }
+        }
+        if (null != optHospVO && null != optHospVO.getSysType()) {
+            optHospVO.setSysType(optHospVO.getSysType());
+        }
+        return this.getHospitalPUZ(optHospVO);
+    }
+
+
+    public IPage<HospItemDTO> getOptSumHospNoDaysPageFac(OptHospPageVO optHospPageVO) {
+        //入参验证
+        if (null != optHospPageVO && null != optHospPageVO.getStartDate()) {
+            optHospPageVO.setStartDate(DateUtil.getFirstTimeOfDay(optHospPageVO.getStartDate()));
+        }
+        if (null != optHospPageVO && null != optHospPageVO.getEndDate()) {
+            optHospPageVO.setEndDate(DateUtil.getLastTimeOfDay(optHospPageVO.getEndDate()));
+        }
+
+        if (null != optHospPageVO && null != optHospPageVO.getStartDate() && null != optHospPageVO.getEndDate()) {
+            if (DateUtil.after(optHospPageVO.getStartDate(), optHospPageVO.getEndDate())) {
+                throw new CommonException(CommonErrorCode.PARAM_IS_ERROR, "开始时间大于结束时间!");
+            }
+        }
+        if (null != optHospPageVO && null != optHospPageVO.getSysType()) {
+            optHospPageVO.setSysType(optHospPageVO.getSysType());
+        }
+        return getPageHospitalPUZ(optHospPageVO);
+    }
+
+    public HospNameDTO getAllHospitalName(){
+        HospNameDTO hospNameDTO = new HospNameDTO();
+        List<String> hospitalList = optInfoFacade.getAllHospital();
+        if(ListUtil.isNotEmpty(hospitalList)){
+            hospNameDTO.setHospitalCode(hospitalList);
+        }
+        return hospNameDTO;
+    }
+
+
+    public HospNameDTO getAllHospitalNameWithLtFrist(){
+        HospNameDTO hospNameDTO = new HospNameDTO();
+        List<String> hospitalList = optInfoFacade.getAllHospital();
+        if(ListUtil.isNotEmpty(hospitalList)){
+            List<String> hospitalListNew = new ArrayList<>();
+            List<String> hospitalListFilter = hospitalList.stream().filter(r -> !"朗通通用".equals(r)).collect(Collectors.toList());
+            hospitalListNew.add("朗通通用");
+            hospitalListNew.addAll(hospitalListFilter);
+            hospNameDTO.setHospitalCode(hospitalListNew);
+        }
+        return hospNameDTO;
+    }
+}

+ 16 - 0
tran-service/src/main/java/com/diagbot/mapper/DiseaseDeptMapper.java

@@ -0,0 +1,16 @@
+package com.diagbot.mapper;
+
+import com.diagbot.entity.DiseaseDept;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author zhaops
+ * @since 2020-03-20
+ */
+public interface DiseaseDeptMapper extends BaseMapper<DiseaseDept> {
+
+}

+ 16 - 0
tran-service/src/main/java/com/diagbot/mapper/InquiryTriageMapper.java

@@ -0,0 +1,16 @@
+package com.diagbot.mapper;
+
+import com.diagbot.entity.InquiryTriage;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 智能分诊记录主表 Mapper 接口
+ * </p>
+ *
+ * @author wangfeng
+ * @since 2020-03-20
+ */
+public interface InquiryTriageMapper extends BaseMapper<InquiryTriage> {
+
+}

+ 62 - 0
tran-service/src/main/java/com/diagbot/mapper/OptInfoMapper.java

@@ -0,0 +1,62 @@
+package com.diagbot.mapper;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.diagbot.dto.HospItemDTO;
+import com.diagbot.dto.PVDTO;
+import com.diagbot.dto.PVHospDTO;
+import com.diagbot.dto.PVHospSumDTO;
+import com.diagbot.dto.UVDTO;
+import com.diagbot.dto.UVHospDTO;
+import com.diagbot.dto.UVHospSumDTO;
+import com.diagbot.dto.ZZDTO;
+import com.diagbot.dto.ZZHospDTO;
+import com.diagbot.dto.ZZHospSumDTO;
+import com.diagbot.entity.OptInfo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.diagbot.vo.OptHospPageVO;
+import com.diagbot.vo.OptHospVO;
+import com.diagbot.vo.OptVO;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 操作信息 Mapper 接口
+ * </p>
+ *
+ * @author wangfeng
+ * @since 2020-03-20
+ */
+public interface OptInfoMapper extends BaseMapper<OptInfo> {
+    List<PVDTO> getPV(OptVO optVO);
+
+    Long getPVSum(OptVO optVO);
+
+    List<UVDTO> getUV(OptVO optVO);
+
+    Long getUVSum(OptVO optVO);
+
+    List<ZZDTO> getZZ(OptVO optVO);
+
+    Long getZZSum(OptVO optVO);
+
+    //医院合计
+    List<PVHospDTO> getPVHosp(OptVO optVO);
+
+    List<PVHospSumDTO> getPVSumHosp(OptVO optVO);
+
+    List<UVHospDTO> getUVHosp(OptVO optVO);
+
+    List<UVHospSumDTO> getUVSumHosp(OptVO optVO);
+
+    List<ZZHospDTO> getZZHosp(OptVO optVO);
+
+    List<ZZHospSumDTO> getZZSumHosp(OptVO optVO);
+
+    List<String> getAllHospital();
+
+    List<HospItemDTO> getHospitalPUZ(OptHospVO optHospVO);
+
+    IPage<HospItemDTO> getPageHospitalPUZ(OptHospPageVO optHospPageVO);
+
+}

+ 16 - 0
tran-service/src/main/java/com/diagbot/service/DiseaseDeptService.java

@@ -0,0 +1,16 @@
+package com.diagbot.service;
+
+import com.diagbot.entity.DiseaseDept;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author zhaops
+ * @since 2020-03-20
+ */
+public interface DiseaseDeptService extends IService<DiseaseDept> {
+
+}

+ 16 - 0
tran-service/src/main/java/com/diagbot/service/InquiryTriageService.java

@@ -0,0 +1,16 @@
+package com.diagbot.service;
+
+import com.diagbot.entity.InquiryTriage;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 智能分诊记录主表 服务类
+ * </p>
+ *
+ * @author wangfeng
+ * @since 2020-03-20
+ */
+public interface InquiryTriageService extends IService<InquiryTriage> {
+
+}

+ 61 - 0
tran-service/src/main/java/com/diagbot/service/OptInfoService.java

@@ -0,0 +1,61 @@
+package com.diagbot.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.diagbot.dto.HospItemDTO;
+import com.diagbot.dto.PVDTO;
+import com.diagbot.dto.PVHospDTO;
+import com.diagbot.dto.PVHospSumDTO;
+import com.diagbot.dto.UVDTO;
+import com.diagbot.dto.UVHospDTO;
+import com.diagbot.dto.UVHospSumDTO;
+import com.diagbot.dto.ZZDTO;
+import com.diagbot.dto.ZZHospDTO;
+import com.diagbot.dto.ZZHospSumDTO;
+import com.diagbot.entity.OptInfo;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.diagbot.vo.OptHospPageVO;
+import com.diagbot.vo.OptHospVO;
+import com.diagbot.vo.OptVO;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 操作信息 服务类
+ * </p>
+ *
+ * @author wangfeng
+ * @since 2020-03-20
+ */
+public interface OptInfoService extends IService<OptInfo> {
+    List<PVDTO> getPV(OptVO optVO);
+
+    Long getPVSum(OptVO optVO);
+
+    List<UVDTO> getUV(OptVO optVO);
+
+    Long getUVSum(OptVO optVO);
+
+    List<ZZDTO> getZZ(OptVO optVO);
+
+    Long getZZSum(OptVO optVO);
+
+    //医院合计
+    List<PVHospDTO> getPVHosp(OptVO optVO);
+
+    List<PVHospSumDTO> getPVSumHosp(OptVO optVO);
+
+    List<UVHospDTO> getUVHosp(OptVO optVO);
+
+    List<UVHospSumDTO> getUVSumHosp(OptVO optVO);
+
+    List<ZZHospDTO> getZZHosp(OptVO optVO);
+
+    List<ZZHospSumDTO> getZZSumHosp(OptVO optVO);
+
+    List<String> getAllHospital();
+
+    List<HospItemDTO> getHospitalPUZ(OptHospVO optHospVO);
+
+    IPage<HospItemDTO> getPageHospitalPUZ(OptHospPageVO optHospPageVO);
+}

+ 20 - 0
tran-service/src/main/java/com/diagbot/service/impl/DiseaseDeptServiceImpl.java

@@ -0,0 +1,20 @@
+package com.diagbot.service.impl;
+
+import com.diagbot.entity.DiseaseDept;
+import com.diagbot.mapper.DiseaseDeptMapper;
+import com.diagbot.service.DiseaseDeptService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author zhaops
+ * @since 2020-03-20
+ */
+@Service
+public class DiseaseDeptServiceImpl extends ServiceImpl<DiseaseDeptMapper, DiseaseDept> implements DiseaseDeptService {
+
+}

+ 20 - 0
tran-service/src/main/java/com/diagbot/service/impl/InquiryTriageServiceImpl.java

@@ -0,0 +1,20 @@
+package com.diagbot.service.impl;
+
+import com.diagbot.entity.InquiryTriage;
+import com.diagbot.mapper.InquiryTriageMapper;
+import com.diagbot.service.InquiryTriageService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 智能分诊记录主表 服务实现类
+ * </p>
+ *
+ * @author wangfeng
+ * @since 2020-03-20
+ */
+@Service
+public class InquiryTriageServiceImpl extends ServiceImpl<InquiryTriageMapper, InquiryTriage> implements InquiryTriageService {
+
+}

+ 98 - 0
tran-service/src/main/java/com/diagbot/service/impl/OptInfoServiceImpl.java

@@ -0,0 +1,98 @@
+package com.diagbot.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.diagbot.dto.HospItemDTO;
+import com.diagbot.dto.PVDTO;
+import com.diagbot.dto.PVHospDTO;
+import com.diagbot.dto.PVHospSumDTO;
+import com.diagbot.dto.UVDTO;
+import com.diagbot.dto.UVHospDTO;
+import com.diagbot.dto.UVHospSumDTO;
+import com.diagbot.dto.ZZDTO;
+import com.diagbot.dto.ZZHospDTO;
+import com.diagbot.dto.ZZHospSumDTO;
+import com.diagbot.entity.OptInfo;
+import com.diagbot.mapper.OptInfoMapper;
+import com.diagbot.service.OptInfoService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.diagbot.vo.OptHospPageVO;
+import com.diagbot.vo.OptHospVO;
+import com.diagbot.vo.OptVO;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 操作信息 服务实现类
+ * </p>
+ *
+ * @author wangfeng
+ * @since 2020-03-20
+ */
+@Service
+public class OptInfoServiceImpl extends ServiceImpl<OptInfoMapper, OptInfo> implements OptInfoService {
+    public List<PVDTO> getPV(OptVO optVO) {
+        return this.baseMapper.getPV(optVO);
+    }
+
+    public Long getPVSum(OptVO optVO) {
+        return this.baseMapper.getPVSum(optVO);
+    }
+
+    public List<UVDTO> getUV(OptVO optVO) {
+        return this.baseMapper.getUV(optVO);
+    }
+
+    public Long getUVSum(OptVO optVO) {
+        return this.baseMapper.getUVSum(optVO);
+    }
+
+    public List<ZZDTO> getZZ(OptVO optVO) {
+        return this.baseMapper.getZZ(optVO);
+    }
+
+    public Long getZZSum(OptVO optVO) {
+        return this.baseMapper.getZZSum(optVO);
+    }
+
+    //医院合计
+    public List<PVHospDTO> getPVHosp(OptVO optVO) {
+        return this.baseMapper.getPVHosp(optVO);
+    }
+
+    public List<PVHospSumDTO> getPVSumHosp(OptVO optVO) {
+        return this.baseMapper.getPVSumHosp(optVO);
+    }
+
+    public List<UVHospDTO> getUVHosp(OptVO optVO) {
+        return this.baseMapper.getUVHosp(optVO);
+    }
+
+    public List<UVHospSumDTO> getUVSumHosp(OptVO optVO) {
+        return this.baseMapper.getUVSumHosp(optVO);
+    }
+
+    public List<ZZHospDTO> getZZHosp(OptVO optVO) {
+        return this.baseMapper.getZZHosp(optVO);
+    }
+
+    public List<ZZHospSumDTO> getZZSumHosp(OptVO optVO) {
+        return this.baseMapper.getZZSumHosp(optVO);
+    }
+
+    public List<String> getAllHospital(){
+        return this.baseMapper.getAllHospital();
+    }
+
+    @Override
+    public List<HospItemDTO> getHospitalPUZ(OptHospVO optHospVO) {
+        return baseMapper.getHospitalPUZ(optHospVO);
+    }
+
+    @Override
+    public IPage<HospItemDTO> getPageHospitalPUZ(OptHospPageVO optHospPageVO) {
+        return baseMapper.getPageHospitalPUZ(optHospPageVO);
+    }
+
+}

+ 95 - 0
tran-service/src/main/java/com/diagbot/util/AESUtils.java

@@ -0,0 +1,95 @@
+package com.diagbot.util;
+
+import com.diagbot.entity.Constants;
+import org.apache.commons.codec.binary.Base64;
+
+import javax.crypto.Cipher;
+import javax.crypto.KeyGenerator;
+import javax.crypto.SecretKey;
+import javax.crypto.spec.SecretKeySpec;
+import java.security.Key;
+
+public class AESUtils {
+
+    private static final String KEY_ALGORITHM = "AES";
+    private static final String DEFAULT_CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding";
+
+    public static byte[] initSecretKey() throws Exception {
+        KeyGenerator kg = KeyGenerator.getInstance(KEY_ALGORITHM);
+        kg.init(128);
+        SecretKey secretKey = kg.generateKey();
+
+        return secretKey.getEncoded();
+    }
+
+    public static Key toKey(byte[] key) {
+        return new SecretKeySpec(key, KEY_ALGORITHM);
+    }
+
+    public static String encrypt(String data, String key) throws Exception {
+        return Base64.encodeBase64String(encrypt(data.getBytes(Constants.ENCODING), toKey(key.getBytes()), DEFAULT_CIPHER_ALGORITHM));
+    }
+
+    public static String decrypt(String data, String key) throws Exception {
+        return new String(decrypt(Base64.decodeBase64(data.getBytes(Constants.ENCODING)), toKey(key.getBytes()), DEFAULT_CIPHER_ALGORITHM));
+    }
+
+    public static byte[] encrypt(byte[] data, Key key) throws Exception {
+        return encrypt(data, key, DEFAULT_CIPHER_ALGORITHM);
+    }
+
+    public static byte[] encrypt(byte[] data, byte[] key) throws Exception {
+        return encrypt(data, toKey(key), DEFAULT_CIPHER_ALGORITHM);
+    }
+
+    public static byte[] encrypt(byte[] data, Key key, String cipherAlgorithm) throws Exception {
+        Cipher cipher = Cipher.getInstance(cipherAlgorithm);
+        cipher.init(Cipher.ENCRYPT_MODE, key);
+        return cipher.doFinal(data);
+    }
+
+    public static byte[] decrypt(byte[] data, byte[] key) throws Exception {
+        return decrypt(data, key, DEFAULT_CIPHER_ALGORITHM);
+    }
+
+    public static byte[] decrypt(byte[] data, Key key) throws Exception {
+        return decrypt(data, key, DEFAULT_CIPHER_ALGORITHM);
+    }
+
+    public static byte[] decrypt(byte[] data, byte[] key, String cipherAlgorithm) throws Exception {
+        Key k = toKey(key);
+        return decrypt(data, k, cipherAlgorithm);
+    }
+
+    public static byte[] decrypt(byte[] data, Key key, String cipherAlgorithm) throws Exception {
+        Cipher cipher = Cipher.getInstance(cipherAlgorithm);
+        cipher.init(Cipher.DECRYPT_MODE, key);
+        return cipher.doFinal(data);
+    }
+
+    private static String showByteArray(byte[] data) {
+        if (null == data) {
+            return null;
+        }
+        StringBuilder sb = new StringBuilder("{");
+        for (byte b : data) {
+            sb.append(b).append(",");
+        }
+        sb.deleteCharAt(sb.length() - 1);
+        sb.append("}");
+        return sb.toString();
+    }
+
+
+    public static void main(String[] args) throws Exception {
+        String original = "[1]";
+        String key = "1234567890123456";
+        System.out.println("original: " + original);
+        String encrypt = encrypt(original, key);
+        System.out.println("encrypt: " + encrypt + ", key: " + key);
+        String decrypt = decrypt(encrypt, key);
+        System.out.println("decrypt: " + decrypt);
+
+    }
+
+}

+ 139 - 0
tran-service/src/main/java/com/diagbot/util/JSONUtils.java

@@ -0,0 +1,139 @@
+package com.diagbot.util;
+
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import org.apache.commons.lang3.StringUtils;
+
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.Reader;
+import java.io.Writer;
+import java.text.SimpleDateFormat;
+
+public class JSONUtils {
+	private static ObjectMapper mapper =  new ObjectMapper();
+
+	static{
+		mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
+		mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
+		mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
+
+		mapper.configure(SerializationFeature.WRITE_ENUMS_USING_TO_STRING,true);
+		mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
+		mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
+		mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
+		mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
+
+	}
+
+	public static <T> T parse(String value, Class<T> clz){
+
+		if (StringUtils.isEmpty(value)) {
+			return null;
+		}
+		try {
+			return mapper.readValue(value, clz);
+		}
+		catch (Exception e) {
+			throw new IllegalStateException(e);
+		}
+	}
+
+	public static <T> T parse(byte[] bytes, Class<T> clz){
+		try {
+			return mapper.readValue(bytes, clz);
+		}
+		catch (Exception e) {
+			throw new IllegalStateException(e);
+		}
+	}
+
+
+	public static <T> T parse(InputStream ins, Class<T> clz){
+		try {
+			return mapper.readValue(ins, clz);
+		}
+		catch (Exception e) {
+			throw new IllegalStateException(e);
+		}
+	}
+
+
+	public static <T> T  parse(Reader reader, Class<T> clz){
+		try {
+			return mapper.readValue(reader, clz);
+		}
+		catch (Exception e) {
+			throw new IllegalStateException(e);
+		}
+	}
+
+	@SuppressWarnings("unchecked")
+	public static <T> T update(String value, T object) {
+		try {
+			return (T) mapper.readerForUpdating(object).readValue(value);
+		}
+		catch (Exception e) {
+			throw new IllegalStateException(e);
+		}
+	}
+
+	public static String writeValueAsString(Object o){
+		try {
+			return mapper.writeValueAsString(o);
+		}
+		catch (Exception e) {
+			throw new IllegalStateException(e);
+		}
+	}
+
+	public static void write(OutputStream outs, Object o){
+		try {
+			mapper.writeValue(outs,o);
+		}
+		catch (Exception e) {
+			throw new IllegalStateException(e);
+		}
+    }
+
+	public static void write(Writer writer, Object o){
+		try {
+			mapper.writeValue(writer,o);
+		}
+		catch (Exception e) {
+			throw new IllegalStateException(e);
+		}
+	}
+
+	public static String toString(Object o){
+		try {
+			return mapper.writeValueAsString(o);
+		}
+		catch (Exception e) {
+			throw new IllegalStateException(e);
+		}
+	}
+
+	public static String toString(Object o, Class<?> clz){
+		try {
+			return mapper.writerFor(clz).writeValueAsString(o);
+		}
+		catch (Exception e) {
+			throw new IllegalStateException(e);
+		}
+	}
+
+	public static byte[] toBytes(Object o){
+		try {
+			return mapper.writeValueAsBytes(o);
+		}
+		catch (Exception e) {
+			throw new IllegalStateException(e);
+		}
+	}
+
+}

+ 118 - 0
tran-service/src/main/java/com/diagbot/util/MessageDigestUtil.java

@@ -0,0 +1,118 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.diagbot.util;
+
+import com.diagbot.entity.Constants;
+import org.apache.commons.codec.binary.Base64;
+
+import java.io.UnsupportedEncodingException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+/**
+ * 消息摘要工具
+ */
+public class MessageDigestUtil {
+    /**
+     * 先进行MD5摘要再进行Base64编码获取摘要字符串
+     *
+     * @param str
+     * @return
+     */
+    public static String base64AndMD5(String str) {
+        if (str == null) {
+            throw new IllegalArgumentException("inStr can not be null");
+        }
+        return base64AndMD5(toBytes(str));
+    }
+
+    /**
+     * 先进行MD5摘要再进行Base64编码获取摘要字符串
+     *
+     * @return
+     */
+    public static String base64AndMD5(byte[] bytes) {
+        if (bytes == null) {
+            throw new IllegalArgumentException("bytes can not be null");
+        }
+        try {
+            final MessageDigest md = MessageDigest.getInstance("MD5");
+            md.reset();
+            md.update(bytes);
+            final Base64 base64 = new Base64();
+            final byte[] enbytes = base64.encode(md.digest());
+            return new String(enbytes);
+        } catch (final NoSuchAlgorithmException e) {
+            throw new IllegalArgumentException("unknown algorithm MD5");
+        }
+    }
+
+    /**
+     * UTF-8编码转换为ISO-9959-1
+     *
+     * @param str
+     * @return
+     */
+    public static String utf8ToIso88591(String str) {
+        if (str == null) {
+            return str;
+        }
+
+        try {
+            return new String(str.getBytes("UTF-8"), "ISO-8859-1");
+        } catch (UnsupportedEncodingException e) {
+            throw new RuntimeException(e.getMessage(), e);
+        }
+    }
+
+    /**
+     * ISO-9959-1编码转换为UTF-8
+     *
+     * @param str
+     * @return
+     */
+    public static String iso88591ToUtf8(String str) {
+        if (str == null) {
+            return str;
+        }
+
+        try {
+            return new String(str.getBytes("ISO-8859-1"), "UTF-8");
+        } catch (UnsupportedEncodingException e) {
+            throw new RuntimeException(e.getMessage(), e);
+        }
+    }
+
+    /**
+     * String转换为字节数组
+     *
+     * @param str
+     * @return
+     */
+    private static byte[] toBytes(final String str) {
+        if (str == null) {
+            return null;
+        }
+        try {
+            return str.getBytes(Constants.ENCODING);
+        } catch (final UnsupportedEncodingException e) {
+            throw new RuntimeException(e.getMessage(), e);
+        }
+    }
+}

+ 118 - 0
tran-service/src/main/java/com/diagbot/util/OpenApiUtils.java

@@ -0,0 +1,118 @@
+package com.diagbot.util;
+
+import com.diagbot.entity.JSONResponseBean;
+import com.diagbot.entity.Request;
+import com.diagbot.entity.Response;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.http.Header;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.conn.ClientConnectionManager;
+import org.apache.http.conn.scheme.Scheme;
+import org.apache.http.conn.scheme.SchemeRegistry;
+import org.apache.http.conn.ssl.SSLSocketFactory;
+import org.apache.http.entity.ContentType;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.http.util.EntityUtils;
+
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+import java.io.IOException;
+import java.security.KeyManagementException;
+import java.security.NoSuchAlgorithmException;
+import java.security.cert.X509Certificate;
+import java.util.Map;
+
+public class OpenApiUtils {
+    public static Response post(Request request) throws Exception {
+        return convert(doPost(request));
+    }
+
+    /**
+     * post form
+     *
+     * @param request
+     * @return
+     * @throws Exception
+     */
+    private static HttpResponse doPost(Request request)
+            throws Exception {
+        HttpClient httpClient = wrapClient(request.getApiUrl());
+
+        HttpPost httpPost = new HttpPost(request.getApiUrl());
+        for (Map.Entry<String, String> e : request.getHeaders().entrySet()) {
+            httpPost.addHeader(e.getKey(), e.getValue());
+        }
+        if (request.getBodys() != null || StringUtils.isNotEmpty(request.getStringBody())) {
+            if (StringUtils.isNotEmpty(request.getStringBody())) {
+                httpPost.setEntity(new StringEntity(request.getStringBody(), ContentType.APPLICATION_JSON));
+            } else {
+                httpPost.setEntity(new StringEntity(JSONUtils.toString(request.getBodys()), ContentType.APPLICATION_JSON));
+            }
+        }
+        return httpClient.execute(httpPost);
+    }
+
+    private static HttpClient wrapClient(String host) {
+        HttpClient httpClient = new DefaultHttpClient();
+        if (host.startsWith("https://")) {
+            sslClient(httpClient);
+        }
+        return httpClient;
+    }
+
+    private static void sslClient(HttpClient httpClient) {
+        try {
+            SSLContext ctx = SSLContext.getInstance("TLS");
+            X509TrustManager tm = new X509TrustManager() {
+                public X509Certificate[] getAcceptedIssuers() {
+                    return null;
+                }
+
+                public void checkClientTrusted(X509Certificate[] xcs, String str) {
+
+                }
+
+                public void checkServerTrusted(X509Certificate[] xcs, String str) {
+
+                }
+            };
+            ctx.init(null, new TrustManager[] { tm }, null);
+            SSLSocketFactory ssf = new SSLSocketFactory(ctx);
+            ssf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
+            ClientConnectionManager ccm = httpClient.getConnectionManager();
+            SchemeRegistry registry = ccm.getSchemeRegistry();
+            registry.register(new Scheme("https", 443, ssf));
+        } catch (KeyManagementException ex) {
+            throw new RuntimeException(ex);
+        } catch (NoSuchAlgorithmException ex) {
+            throw new RuntimeException(ex);
+        }
+    }
+
+    private static Response convert(HttpResponse response) throws IOException {
+        Response res = new Response();
+
+        if (null != response) {
+            res.setStatusCode(response.getStatusLine().getStatusCode());
+            for (Header header : response.getAllHeaders()) {
+                res.setHeader(header.getName(), MessageDigestUtil.iso88591ToUtf8(header.getValue()));
+            }
+            res.setContentType(res.getHeader("Content-Type"));
+            res.setRequestId(res.getHeader("X-Ca-Request-Id"));
+            res.setBody(EntityUtils.toString(response.getEntity()));
+            res.setJsonResponseBean(JSONUtils.parse(res.getBody(), JSONResponseBean.class));
+            res.setCaErrorMsg(res.getHeader("X-Ca-Error-Message"));
+
+        } else {
+            //服务器无回应
+            res.setStatusCode(500);
+            res.setErrorMessage("No Response");
+        }
+
+        return res;
+    }
+}

+ 126 - 0
tran-service/src/main/java/com/diagbot/util/SignUtil.java

@@ -0,0 +1,126 @@
+
+package com.diagbot.util;
+
+
+import com.diagbot.entity.Constants;
+import com.diagbot.entity.SystemHeader;
+import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.lang3.StringUtils;
+
+import javax.crypto.Mac;
+import javax.crypto.spec.SecretKeySpec;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+import java.util.UUID;
+
+/**
+ * 签名工具
+ */
+public class SignUtil {
+    /**
+     * 需要参与签名的请求头
+     */
+    private static final List<String> SIGN_HEADER_LIST = Arrays.asList("X-Service-Id","X-Service-Method","X-Ca-Key",
+            "X-Ca-Nonce","X-Ca-Timestamp","X-Content-MD5");
+    /**
+     * 计算签名
+     *
+     * @param secret APP密钥
+     * @param headers 请求头参数
+     * @return 签名后的字符串
+     */
+    public static String sign(String secret,
+                              Map<String, String> headers) {
+        try {
+            Mac hmacSha256 = Mac.getInstance(Constants.HMAC_SHA256);
+            byte[] keyBytes = secret.getBytes(Constants.ENCODING);
+            hmacSha256.init(new SecretKeySpec(keyBytes, 0, keyBytes.length, Constants.HMAC_SHA256));
+//            String contentMd5 = MessageDigestUtil.base64AndMD5(bodyContent);
+
+            return new String(Base64.encodeBase64(
+                    hmacSha256.doFinal((buildHeaders(headers, SIGN_HEADER_LIST))
+                            .getBytes(Constants.ENCODING))),
+                    Constants.ENCODING);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    /**
+     * 构建待签名Http头
+     *
+     * @param headers 请求中所有的Http头
+     * @param signHeaderList 自定义参与签名Header前缀
+     * @return 待签名Http头
+     */
+    public static String buildHeaders(Map<String, String> headers, List<String> signHeaderList) {
+
+    	List<String> sbList=new ArrayList<>();
+    	if (null != signHeaderList) {
+    		Collections.sort(signHeaderList);
+    		if (null != headers) {
+    			Map<String, String> sortMap = new TreeMap<String, String>();
+    			sortMap.putAll(headers);
+    			StringBuilder signHeadersStringBuilder = new StringBuilder();
+    			for (Map.Entry<String, String> header : sortMap.entrySet()) {
+                    if (isHeaderToSign(header.getKey(), signHeaderList)) {
+                        StringBuilder sb = new StringBuilder();
+                    	sb.append(header.getKey().toLowerCase());
+                    	sb.append(Constants.SPE2);
+                        if (!StringUtils.isBlank(header.getValue())) {
+                        	sb.append(header.getValue());
+                        }
+                        sbList.add(sb.toString());
+                        if (0 < signHeadersStringBuilder.length()) {
+                        	signHeadersStringBuilder.append(Constants.SPE1);
+                        }
+                        signHeadersStringBuilder.append(header.getKey().toLowerCase());
+                    }
+                }
+    			headers.put(SystemHeader.X_CA_SIGNATURE_HEADERS, signHeadersStringBuilder.toString());
+    		}
+    	}
+        return StringUtils.join(sbList,Constants.SPE3);
+    }
+
+    /**
+     * Http头是否参与签名 return
+     */
+    private static boolean isHeaderToSign(String headerName, List<String> signHeaderList) {
+        if (StringUtils.isBlank(headerName)) {
+            return false;
+        }
+
+        if (headerName.startsWith(Constants.CA_HEADER_TO_SIGN_PREFIX_SYSTEM)) {
+            return true;
+        }
+
+        if (null != signHeaderList) {
+            for (String signHeaderPrefix : signHeaderList) {
+                if (headerName.equalsIgnoreCase(signHeaderPrefix)) {
+                    return true;
+                }
+            }
+        }
+
+        return false;
+    }
+
+    public static void main(String[] args) {
+        String secret = "1234567890123456";
+        Map<String, String> headers = new HashMap<>();
+        headers.put("X-Service-Id", "eh.organ");
+        headers.put("X-Service-Method", "");
+        headers.put("X-Ca-Key", "hello");
+        headers.put("X-Ca-Timestamp", String.valueOf(System.currentTimeMillis()));
+        headers.put("X-Ca-Nonce", UUID.randomUUID().toString());
+        headers.put(SystemHeader.X_CONTENT_MD5, UUID.randomUUID().toString());
+        System.out.println(sign(secret, headers));
+
+    }
+}

+ 18 - 0
tran-service/src/main/java/com/diagbot/vo/DiseaseDeptVO.java

@@ -0,0 +1,18 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/3/20 17:00
+ */
+@Getter
+@Setter
+public class DiseaseDeptVO {
+    private List<String> conceptNames;
+    private String hospitalCode;
+}

+ 20 - 0
tran-service/src/main/java/com/diagbot/vo/HospitalVO.java

@@ -0,0 +1,20 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ */
+@Getter
+@Setter
+public class HospitalVO {
+    //医院编码
+    //    @NotBlank(message = "请输入医院信息")
+    private String hospitalCode = "朗通通用";
+
+    /**
+     * 访问的系统类型 1:user-service,2:diagbotman-service,3:uaa-service,4:log-service,5:bi-service,6:knowledge-service,7:feedback-service,8:icss-web
+     */
+    private Integer sysType;
+}

+ 17 - 0
tran-service/src/main/java/com/diagbot/vo/InquiryTriageMechVO.java

@@ -0,0 +1,17 @@
+package com.diagbot.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author wangfeng
+ * @Description:
+ * @date 2020/3/25 14:30
+ */
+@Setter
+@Getter
+public class InquiryTriageMechVO {
+    @ApiModelProperty(value = "证件号")
+    private String idNum;
+}

+ 39 - 0
tran-service/src/main/java/com/diagbot/vo/OptHospPageVO.java

@@ -0,0 +1,39 @@
+package com.diagbot.vo;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Description:
+ * @author: zhoutg
+ * @time: 2020/2/3 9:21
+ */
+@Getter
+@Setter
+public class OptHospPageVO extends Page {
+
+    //开始时间
+    @ApiModelProperty(value="开始时间,格式为:2018-11-28 17:25:30")
+    @DateTimeFormat(pattern="yyyy-MM-dd hh:mm:ss")
+    private Date startDate;
+    //结束时间
+    @ApiModelProperty(value="结束时间,格式为:2018-11-28 17:25:30")
+    @DateTimeFormat(pattern="yyyy-MM-dd hh:mm:ss")
+    private Date endDate;
+
+    //医院名称列表
+    private List<String> hospitalCodeList;
+
+    // 类型数组,默认都会返回访问量,有uvSum:再返回用户量,有zzSum:再返回提交量
+    private List<String> typeList;
+    /**
+     * 访问的系统类型 1:user-service,2:diagbotman-service,3:uaa-service,4:log-service,5:bi-service,6:knowledge-service,7:feedback-service,8:icss-web
+     */
+    private Integer sysType;
+}

+ 35 - 0
tran-service/src/main/java/com/diagbot/vo/OptHospVO.java

@@ -0,0 +1,35 @@
+package com.diagbot.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Description:
+ * @author: zhoutg
+ * @time: 2020/2/3 9:21
+ */
+@Getter
+@Setter
+public class OptHospVO {
+
+    //开始时间
+    @ApiModelProperty(value="开始时间,格式为:2018-11-28 17:25:30")
+    @DateTimeFormat(pattern="yyyy-MM-dd hh:mm:ss")
+    private Date startDate;
+    //结束时间
+    @ApiModelProperty(value="结束时间,格式为:2018-11-28 17:25:30")
+    @DateTimeFormat(pattern="yyyy-MM-dd hh:mm:ss")
+    private Date endDate;
+
+    //医院名称列表
+    private List<String> hospitalCodeList;
+    /**
+     * 访问的系统类型 1:user-service,2:diagbotman-service,3:uaa-service,4:log-service,5:bi-service,6:knowledge-service,7:feedback-service,8:icss-web
+     */
+    private Integer sysType;
+}

+ 35 - 0
tran-service/src/main/java/com/diagbot/vo/OptVO.java

@@ -0,0 +1,35 @@
+package com.diagbot.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/2/3 9:21
+ */
+@Getter
+@Setter
+public class OptVO {
+    //医院名称
+    private String hospitalCode;
+    //开始时间
+    @ApiModelProperty(value="开始时间,格式为:2018-11-28 17:25:30")
+    @DateTimeFormat(pattern="yyyy-MM-dd hh:mm:ss")
+    private Date startDate;
+    //结束时间
+    @ApiModelProperty(value="结束时间,格式为:2018-11-28 17:25:30")
+    @DateTimeFormat(pattern="yyyy-MM-dd hh:mm:ss")
+    private Date endDate;
+    /**
+     * 访问的系统类型 1:user-service,2:diagbotman-service,3:uaa-service,4:log-service,5:bi-service,6:knowledge-service,7:feedback-service,8:icss-web
+     */
+    private Integer sysType;
+    //医院名称列表
+    private List<String> hospitalCodeList;
+}

+ 25 - 0
tran-service/src/main/java/com/diagbot/vo/SaveDisDeptVO.java

@@ -0,0 +1,25 @@
+package com.diagbot.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author wangfeng
+ * @Description:
+ * @date 2020/3/23 11:24
+ */
+@Setter
+@Getter
+public class SaveDisDeptVO {
+    @ApiModelProperty(value = "疾病名称")
+    private String diagnose;
+    @ApiModelProperty(value = "大科室")
+    private String deptBig;
+    @ApiModelProperty(value = "小科室编码")
+    private String deptBigCode;
+    @ApiModelProperty(value = "小科室")
+    private String deptSmall;
+    @ApiModelProperty(value = "小科室编码")
+    private String deptSmallCode;
+}

+ 51 - 0
tran-service/src/main/java/com/diagbot/vo/SaveInquiryTriageVO.java

@@ -0,0 +1,51 @@
+package com.diagbot.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotBlank;
+import java.util.List;
+
+@ApiModel(value = "分诊记录保存接口传参")
+@Getter
+@Setter
+public class SaveInquiryTriageVO {
+    @ApiModelProperty(value = "医院名称")
+    private String hospitalCode;
+
+    @ApiModelProperty(value = "访问者的IP", hidden = true)
+    private String ip;
+
+    @Valid
+    @ApiModelProperty(value = "诊断结果和疾病科室", required = true)
+    private List<SaveDisDeptVO> disDeptist;
+
+    /*@ApiModelProperty(value = "姓名")
+    private String patName;*/
+
+    @ApiModelProperty(value = "年龄")
+    private Integer patAge;
+
+    @ApiModelProperty(value = "性别(1:男 2:女)")
+    private Integer patSex;
+
+   @ApiModelProperty(value = "对接类型(1:咨询,2:挂号)")
+    private Integer idType;
+
+    @ApiModelProperty(value = "证件号")
+    private String idNum;
+
+    @ApiModelProperty(value = "症状")
+    private String symptom;
+
+    @ApiModelProperty(value = "补充说明")
+    private String supplement;
+    /**
+     * 访问的系统类型 1:user-service,2:diagbotman-service,3:uaa-service,4:log-service,5:bi-service,6:knowledge-service,7:feedback-service,8:icss-web
+     */
+    @ApiModelProperty(value = "访问的系统类型")
+    private Integer sysType;
+}

+ 45 - 0
tran-service/src/main/java/com/diagbot/web/DiseaseDeptController.java

@@ -0,0 +1,45 @@
+package com.diagbot.web;
+
+
+import com.diagbot.annotation.SysLogger;
+import com.diagbot.dto.DiseaseDeptDTO;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.facade.DiseaseDeptFacade;
+import com.diagbot.vo.DiseaseDeptVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author zhaops
+ * @since 2020-03-20
+ */
+@RestController
+@RequestMapping("/diseaseDept")
+@Api(value = "邵逸夫诊断科室映射相关API", tags = { "邵逸夫诊断科室映射相关API" })
+public class DiseaseDeptController {
+
+    @Autowired
+    private DiseaseDeptFacade diseaseDeptFacade;
+
+    @ApiOperation(value = "根据内部诊断名称查询诊断科室映射关系:[by:zhaops]",
+            notes = "hospitalCode: 医院编码,必填<br>" +
+                    "conceptNames: 内部诊断名称列表<br>")
+    @PostMapping("/getDiseaseDeptByConceptNames")
+    @SysLogger("getDiseaseDeptByConceptNames")
+    public RespDTO<List<DiseaseDeptDTO>> getDiseaseDeptByConceptNames(@RequestBody DiseaseDeptVO diseaseDeptVO) {
+        List<DiseaseDeptDTO> data = diseaseDeptFacade.getDiseaseDeptByConceptNames(diseaseDeptVO);
+        return RespDTO.onSuc(data);
+    }
+}

+ 57 - 0
tran-service/src/main/java/com/diagbot/web/InquiryTriageController.java

@@ -0,0 +1,57 @@
+package com.diagbot.web;
+
+
+import com.diagbot.annotation.SysLogger;
+import com.diagbot.dto.InquiryTriageDTO;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.dto.SaveInquiryTriageDTO;
+import com.diagbot.facade.InquiryTriageFacade;
+import com.diagbot.vo.InquiryTriageMechVO;
+import com.diagbot.vo.SaveInquiryTriageVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 智能分诊记录主表 前端控制器
+ * </p>
+ *
+ * @author wangfeng
+ * @since 2020-03-20
+ */
+@RestController
+@RequestMapping("/inquiryTriage")
+@Api(value = "分诊记录API", tags = { "分诊-分诊记录API" })
+@SuppressWarnings("unchecked")
+public class InquiryTriageController {
+
+    @Autowired
+    private InquiryTriageFacade inquiryTriageFacade;
+
+    @ApiOperation(value = "分诊记录保存[by:wangfeng]")
+    @PostMapping("/saveInquiry")
+    @SysLogger("saveInquiry")
+    @Transactional
+    public RespDTO<SaveInquiryTriageDTO> saveInquiry(@RequestBody SaveInquiryTriageVO saveInquiryVO) {
+        SaveInquiryTriageDTO data = inquiryTriageFacade.saveInquiry(saveInquiryVO);
+        return RespDTO.onSuc(data);
+    }
+
+    @ApiOperation(value = "根据门诊号获取机构下病人病历2期[by:wangfeng]",
+            notes = "hospitalCode:医院名称<br>")
+    @PostMapping("/getInquirysByMech")
+    @SysLogger("getInquirysByMech")
+    public RespDTO<List<InquiryTriageDTO>> getInquirysByMech(@RequestBody @Validated InquiryTriageMechVO inquiryTriageMechVO) {
+        return RespDTO.onSuc(inquiryTriageFacade.getInquirysByMech(inquiryTriageMechVO));
+    }
+
+}

+ 130 - 0
tran-service/src/main/java/com/diagbot/web/OptInfoController.java

@@ -0,0 +1,130 @@
+package com.diagbot.web;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.diagbot.annotation.SysLogger;
+import com.diagbot.dto.HospItemDTO;
+import com.diagbot.dto.HospNameDTO;
+import com.diagbot.dto.OptDTO;
+import com.diagbot.dto.OptHospDTO;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.facade.OptInfoFacade;
+import com.diagbot.vo.HospitalVO;
+import com.diagbot.vo.OptHospPageVO;
+import com.diagbot.vo.OptHospVO;
+import com.diagbot.vo.OptVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 操作信息 前端控制器
+ * </p>
+ *
+ * @author wangfeng
+ * @since 2020-03-20
+ */
+@RestController
+@Api(value = "操作记录", tags = { "操作记录API" })
+@SuppressWarnings("unchecked")
+@RequestMapping("/optInfo")
+public class OptInfoController {
+    @Autowired
+    private OptInfoFacade optInfoFacade;
+
+    @ApiOperation(value = "操作记录保存[by:gaodm]")
+    @PostMapping("/saveOptInfo")
+    @SysLogger("saveOptInfo")
+    @Transactional
+    public RespDTO<Boolean> saveOptOnfo(@RequestBody HospitalVO hospitalVO) {
+        return RespDTO.onSuc(optInfoFacade.saveOptOnfo(hospitalVO, "1"));
+    }
+
+    @ApiOperation(value = "获取合计数据不带医院名称[by:gaodm]",
+            notes = "hospitalCode: 医院名称,String<br>" +
+                    "startDate: 开始时间,Date<br>" +
+                    "endDate: 结束时间,Date<br>")
+    @PostMapping("/getOptSum")
+    @SysLogger("getOptSum")
+    public RespDTO<OptDTO> getOptSum(@RequestBody OptVO optVO) {
+        return RespDTO.onSuc(optInfoFacade.getOptSum(optVO));
+    }
+
+
+    @ApiOperation(value = "获取合计数据带医院名称[by:gaodm]",
+            notes = "hospitalCode: 医院名称,String<br>" +
+                    "startDate: 开始时间,Date<br>" +
+                    "endDate: 结束时间,Date<br>")
+    @PostMapping("/getOptSumHosp")
+    @SysLogger("getOptSumHosp")
+    public RespDTO<OptHospDTO> getOptSumHosp(@RequestBody OptVO optVO) {
+        return RespDTO.onSuc(optInfoFacade.getOptSumHosp(optVO));
+    }
+
+    @ApiOperation(value = "获取所有医院名称[by:gaodm]",
+            notes = "")
+    @PostMapping("/getAllHospitalName")
+    @SysLogger("getAllHospitalName")
+    public RespDTO<HospNameDTO> getAllHospitalName() {
+        return RespDTO.onSuc(optInfoFacade.getAllHospitalName());
+    }
+
+    @ApiOperation(value = "获取所有医院名称,朗通通用排第一[by:zhoutg]",
+            notes = "")
+    @PostMapping("/getAllHospitalNameWithLtFrist")
+    @SysLogger("getAllHospitalNameWithLtFrist")
+    public RespDTO<HospNameDTO> getAllHospitalNameWithLtFrist() {
+        return RespDTO.onSuc(optInfoFacade.getAllHospitalNameWithLtFrist());
+    }
+
+
+    @ApiOperation(value = "获取合计数据不带医院名称,只统计总数据,不统计每天数据[by:zhoutg]",
+            notes = "hospitalCode: 医院名称,String<br>" +
+                    "startDate: 开始时间,Date<br>" +
+                    "endDate: 结束时间,Date<br>" +
+                    "出参:<br>" +
+                    "pvSum:访问总量<br>" +
+                    "uvSum:用户总量<br>" +
+                    "zzSum:完成问诊总量<br>")
+    @PostMapping("/getOptSumNoDays")
+    @SysLogger("getOptSumNoDays")
+    public RespDTO<OptDTO> getOptSumNoDays(@RequestBody OptVO optVO) {
+        return RespDTO.onSuc(optInfoFacade.getOptSumNoDays(optVO));
+    }
+
+
+    @ApiOperation(value = "获取合计数据带医院名称,只统计总数,不统计每天数据[by:zhoutg]",
+            notes = "hospitalCodeList: 医院名称列表,List<br>" +
+                    "startDate: 开始时间,Date<br>" +
+                    "endDate: 结束时间,Date<br>")
+    @PostMapping("/getOptSumHospNoDays")
+    @SysLogger("getOptSumHospNoDays")
+    public RespDTO<List<HospItemDTO>> getOptSumHospNoDays(@RequestBody OptHospVO optHospVO) {
+        return RespDTO.onSuc(optInfoFacade.getOptSumHospNoDays(optHospVO));
+    }
+
+    @ApiOperation(value = "获取合计数据带医院名称,只统计总数,不统计每天数据,分页[by:zhoutg]",
+            notes = "hospitalCodeList: 医院名称列表,List<br>" +
+                    "startDate: 开始时间,Date<br>" +
+                    "endDate: 结束时间,Date<br>" +
+                    "desc:排序指标,[pvSum|uvSum|zzSum]<br>" +
+                    "page;第几页<br>" +
+                    "size:条数<br>" +
+                    "typeList:类型数组,默认都会返回访问量,有uvSum:再返回用户量,有zzSum:再返回提交量")
+    @PostMapping("/getOptSumHospNoDaysPage")
+    @SysLogger("getOptSumHospNoDaysPage")
+    public RespDTO<IPage<HospItemDTO>> getOptSumHospNoDaysPage(@RequestBody OptHospPageVO optHospPageVO) {
+        IPage<HospItemDTO> data = optInfoFacade.getOptSumHospNoDaysPageFac(optHospPageVO);
+        return RespDTO.onSuc(data);
+    }
+}

+ 25 - 0
tran-service/src/main/resources/mapper/DiseaseDeptMapper.xml

@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.diagbot.mapper.DiseaseDeptMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.diagbot.entity.DiseaseDept">
+        <id column="id" property="id" />
+        <result column="is_deleted" property="isDeleted" />
+        <result column="gmt_create" property="gmtCreate" />
+        <result column="gmt_modified" property="gmtModified" />
+        <result column="creator" property="creator" />
+        <result column="modifier" property="modifier" />
+        <result column="hospital_code" property="hospitalCode" />
+        <result column="disease_name" property="diseaseName" />
+        <result column="icd10_code" property="icd10Code" />
+        <result column="icd10_name" property="icd10Name" />
+        <result column="concept_dis_name" property="conceptDisName" />
+        <result column="sub_dept_name" property="subDeptName" />
+        <result column="dept_name" property="deptName" />
+        <result column="status" property="status" />
+        <result column="url" property="url" />
+        <result column="remark" property="remark" />
+    </resultMap>
+
+</mapper>

+ 0 - 0
tran-service/src/main/resources/mapper/InquiryTriageMapper.xml


部分文件因为文件数量过多而无法显示