Browse Source

Merge branch 'develop' into dev/mrman20200117_init

gaodm 5 years ago
parent
commit
e701002377
100 changed files with 5219 additions and 247 deletions
  1. 24 1
      aipt-service/src/main/java/com/diagbot/aggregate/PushItemAggregate.java
  2. 36 9
      aipt-service/src/main/java/com/diagbot/aggregate/SearchItemAggregate.java
  3. 10 0
      aipt-service/src/main/java/com/diagbot/client/TranServiceClient.java
  4. 13 1
      aipt-service/src/main/java/com/diagbot/client/hystrix/TranServiceHystrix.java
  5. 6 0
      aipt-service/src/main/java/com/diagbot/dto/ConceptPushDTO.java
  6. 30 0
      aipt-service/src/main/java/com/diagbot/dto/ConceptRetrievalExtDTO.java
  7. 16 0
      aipt-service/src/main/java/com/diagbot/dto/UsualDTO.java
  8. 78 0
      aipt-service/src/main/java/com/diagbot/entity/KlSymptom.java
  9. 2 1
      aipt-service/src/main/java/com/diagbot/entity/Symptom.java
  10. 89 1
      aipt-service/src/main/java/com/diagbot/facade/ConceptFacade.java
  11. 10 0
      aipt-service/src/main/java/com/diagbot/facade/KlSymptomFacade.java
  12. 21 11
      aipt-service/src/main/java/com/diagbot/facade/PartFacade.java
  13. 51 4
      aipt-service/src/main/java/com/diagbot/facade/PushFacade.java
  14. 34 3
      aipt-service/src/main/java/com/diagbot/facade/TransferFacade.java
  15. 16 0
      aipt-service/src/main/java/com/diagbot/mapper/KlSymptomMapper.java
  16. 16 0
      aipt-service/src/main/java/com/diagbot/service/KlSymptomService.java
  17. 20 0
      aipt-service/src/main/java/com/diagbot/service/impl/KlSymptomServiceImpl.java
  18. 19 0
      aipt-service/src/main/java/com/diagbot/vo/OperationConfigVO.java
  19. 26 0
      aipt-service/src/main/java/com/diagbot/web/ConceptController.java
  20. 14 0
      aipt-service/src/main/java/com/diagbot/web/PushController.java
  21. 16 0
      common/src/main/java/com/diagbot/biz/push/entity/FeatureRateWithExplain.java
  22. 25 0
      common/src/main/java/com/diagbot/biz/push/entity/ResponseDataWithExplain.java
  23. 55 14
      config-server/src/main/resources/shared/ltkg-service-dev.yml
  24. 55 14
      config-server/src/main/resources/shared/ltkg-service-local.yml
  25. 55 14
      config-server/src/main/resources/shared/ltkg-service-pre.yml
  26. 55 14
      config-server/src/main/resources/shared/ltkg-service-pro.yml
  27. 55 14
      config-server/src/main/resources/shared/ltkg-service-test.yml
  28. 12 0
      config-server/src/main/resources/shared/tran-service-dev.yml
  29. 12 0
      config-server/src/main/resources/shared/tran-service-local.yml
  30. 12 0
      config-server/src/main/resources/shared/tran-service-pre.yml
  31. 12 0
      config-server/src/main/resources/shared/tran-service-pro.yml
  32. 12 0
      config-server/src/main/resources/shared/tran-service-test.yml
  33. 27 0
      docs/031.2020-03-20智能分诊初始化脚本/init_med.sql
  34. 1412 0
      docs/031.2020-03-20智能分诊初始化脚本/init_tran.sql
  35. 15 0
      docs/033.20200330手术开单合理项映射脚本/init_tran.sql
  36. 48 0
      docs/034.20200330官网知识平台二期/init_ltkg.sql
  37. 14 2
      knowledgeman-service/src/main/java/com/diagbot/dto/GetConceptInfoDTO.java
  38. 78 0
      knowledgeman-service/src/main/java/com/diagbot/entity/KlSymptom.java
  39. 32 1
      knowledgeman-service/src/main/java/com/diagbot/facade/ConceptFacade.java
  40. 10 0
      knowledgeman-service/src/main/java/com/diagbot/facade/KlSymptomFacade.java
  41. 16 0
      knowledgeman-service/src/main/java/com/diagbot/mapper/KlSymptomMapper.java
  42. 16 0
      knowledgeman-service/src/main/java/com/diagbot/service/KlSymptomService.java
  43. 20 0
      knowledgeman-service/src/main/java/com/diagbot/service/impl/KlSymptomServiceImpl.java
  44. 11 8
      knowledgeman-service/src/main/java/com/diagbot/vo/AddConceptInfoVO.java
  45. 22 0
      knowledgeman-service/src/main/java/com/diagbot/vo/SymptomExtVO.java
  46. 19 0
      knowledgeman-service/src/main/resources/mapper/KlSymptomMapper.xml
  47. 4 4
      knowledgeman-service/src/test/java/com/diagbot/CodeGeneration.java
  48. 40 0
      ltkg-service/pom.xml
  49. 1 1
      ltkg-service/src/main/java/com/diagbot/LtkgServiceApplication.java
  50. 33 0
      ltkg-service/src/main/java/com/diagbot/config/MybatisPlusConfigurer.java
  51. 23 0
      ltkg-service/src/main/java/com/diagbot/dto/MrInfoDTO.java
  52. 159 0
      ltkg-service/src/main/java/com/diagbot/entity/PresetInfo.java
  53. 31 16
      ltkg-service/src/main/java/com/diagbot/facade/KgFacade.java
  54. 29 0
      ltkg-service/src/main/java/com/diagbot/facade/PresetInfoFacade.java
  55. 16 0
      ltkg-service/src/main/java/com/diagbot/mapper/PresetInfoMapper.java
  56. 18 0
      ltkg-service/src/main/java/com/diagbot/service/PresetInfoService.java
  57. 20 0
      ltkg-service/src/main/java/com/diagbot/service/impl/PresetInfoServiceImpl.java
  58. 2 2
      ltkg-service/src/main/java/com/diagbot/vo/KgTreeVO.java
  59. 3 1
      ltkg-service/src/main/java/com/diagbot/web/KgController.java
  60. 39 0
      ltkg-service/src/main/java/com/diagbot/web/PresetInfoController.java
  61. 19 0
      ltkg-service/src/main/resources/mapper/PresetInfoMapper.xml
  62. 83 83
      ltkg-service/src/test/java/com/diagbot/CodeGeneration.java
  63. 21 0
      prec-service/src/main/java/com/diagbot/client/AiptServiceClient.java
  64. 14 0
      prec-service/src/main/java/com/diagbot/client/hystrix/AiptServiceHystrix.java
  65. 29 0
      prec-service/src/main/java/com/diagbot/dto/ConceptRetrievalExtDTO.java
  66. 18 0
      prec-service/src/main/java/com/diagbot/dto/UsualDTO.java
  67. 1 7
      prec-service/src/main/java/com/diagbot/facade/PushFacade.java
  68. 9 11
      prec-service/src/main/java/com/diagbot/facade/QuestionUsualFacade.java
  69. 8 9
      prec-service/src/main/java/com/diagbot/facade/RetrievalFacade.java
  70. 4 1
      tran-service/pom.xml
  71. 109 0
      tran-service/src/main/java/com/diagbot/aggregate/OptAggregate.java
  72. 106 0
      tran-service/src/main/java/com/diagbot/aggregate/OptHospAggregate.java
  73. 63 0
      tran-service/src/main/java/com/diagbot/dto/DiseaseDeptDTO.java
  74. 22 0
      tran-service/src/main/java/com/diagbot/dto/HospItemDTO.java
  75. 18 0
      tran-service/src/main/java/com/diagbot/dto/HospNameDTO.java
  76. 50 0
      tran-service/src/main/java/com/diagbot/dto/InquiryTriageDTO.java
  77. 22 0
      tran-service/src/main/java/com/diagbot/dto/OptDTO.java
  78. 25 0
      tran-service/src/main/java/com/diagbot/dto/OptHospDTO.java
  79. 16 0
      tran-service/src/main/java/com/diagbot/dto/PVDTO.java
  80. 18 0
      tran-service/src/main/java/com/diagbot/dto/PVHospDTO.java
  81. 17 0
      tran-service/src/main/java/com/diagbot/dto/PVHospSumDTO.java
  82. 34 0
      tran-service/src/main/java/com/diagbot/dto/SaveInquiryTriageDTO.java
  83. 16 0
      tran-service/src/main/java/com/diagbot/dto/UVDTO.java
  84. 18 0
      tran-service/src/main/java/com/diagbot/dto/UVHospDTO.java
  85. 17 0
      tran-service/src/main/java/com/diagbot/dto/UVHospSumDTO.java
  86. 16 0
      tran-service/src/main/java/com/diagbot/dto/ZZDTO.java
  87. 18 0
      tran-service/src/main/java/com/diagbot/dto/ZZHospDTO.java
  88. 17 0
      tran-service/src/main/java/com/diagbot/dto/ZZHospSumDTO.java
  89. 67 0
      tran-service/src/main/java/com/diagbot/entity/Client.java
  90. 47 0
      tran-service/src/main/java/com/diagbot/entity/Constants.java
  91. 278 0
      tran-service/src/main/java/com/diagbot/entity/DiseaseDept.java
  92. 251 0
      tran-service/src/main/java/com/diagbot/entity/InquiryTriage.java
  93. 53 0
      tran-service/src/main/java/com/diagbot/entity/JSONResponseBean.java
  94. 146 0
      tran-service/src/main/java/com/diagbot/entity/OperationConfig.java
  95. 173 0
      tran-service/src/main/java/com/diagbot/entity/OptInfo.java
  96. 142 0
      tran-service/src/main/java/com/diagbot/entity/Request.java
  97. 120 0
      tran-service/src/main/java/com/diagbot/entity/Response.java
  98. 29 0
      tran-service/src/main/java/com/diagbot/entity/SystemHeader.java
  99. 40 0
      tran-service/src/main/java/com/diagbot/facade/DiseaseDeptFacade.java
  100. 0 0
      tran-service/src/main/java/com/diagbot/facade/InquiryTriageFacade.java

+ 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.PushDTO;
 import com.diagbot.entity.Concept;
+import com.diagbot.entity.KlSymptom;
 import com.diagbot.enums.ConceptTypeEnum;
 import com.diagbot.enums.LexiconTypeEnum;
+import com.diagbot.enums.SysTypeEnum;
 import com.diagbot.facade.ClinicalFacade;
 import com.diagbot.facade.ConceptFacade;
 import com.diagbot.facade.TranEnDeFacade;
@@ -148,7 +150,8 @@ public class PushItemAggregate {
 
     @DataProvider("setSymptom")
     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();
         //症状 概念列表
         if (featureTypeSet.contains(String.valueOf(FeatureTypeEnum.Feature_Type_Symptom.getKey()))) {
@@ -160,6 +163,26 @@ public class PushItemAggregate {
                         .collect(Collectors.toList());
                 if (ListUtil.isNotEmpty(nameList)) {
                     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);
+                                    }
+                                }
+                            });
+                        }
+                    }
                 }
             }
         }

+ 36 - 9
aipt-service/src/main/java/com/diagbot/aggregate/SearchItemAggregate.java

@@ -4,8 +4,8 @@ import com.diagbot.biz.push.entity.Item;
 import com.diagbot.biz.push.entity.Lis;
 import com.diagbot.biz.push.entity.Pacs;
 import com.diagbot.biz.push.vo.SearchVO;
-import com.diagbot.config.CryptConfiguer;
 import com.diagbot.enums.ConceptTypeEnum;
+import com.diagbot.enums.SysTypeEnum;
 import com.diagbot.facade.TransferFacade;
 import com.diagbot.util.ListUtil;
 import com.google.common.collect.Lists;
@@ -78,7 +78,10 @@ public class SearchItemAggregate {
     @DataProvider("setLis")
     public List<Lis> setLis(@InvokeParameter("searchVO") SearchVO searchVO) {
         List<Lis> lis = searchVO.getLis();
-        lis = transferFacade.addLisUniqueName(lis, searchVO.getHosCode());
+        //数据引擎模式映射数据
+        if (searchVO.getSysType().intValue() == SysTypeEnum.LTAPI_SERVICE.getKey()) {
+            lis = transferFacade.addLisUniqueName(lis, searchVO.getHosCode());
+        }
         return lis;
     }
 
@@ -91,7 +94,10 @@ public class SearchItemAggregate {
     @DataProvider("setPacs")
     public List<Pacs> setPacs(@InvokeParameter("searchVO") SearchVO searchVO) {
         List<Pacs> pacs = searchVO.getPacs();
-        pacs = transferFacade.addPacsUniqueName(pacs, searchVO.getHosCode());
+        //数据引擎模式映射数据
+        if (searchVO.getSysType().intValue() == SysTypeEnum.LTAPI_SERVICE.getKey()) {
+            pacs = transferFacade.addPacsUniqueName(pacs, searchVO.getHosCode());
+        }
         return pacs;
     }
 
@@ -104,7 +110,10 @@ public class SearchItemAggregate {
     @DataProvider("setDiag")
     public List<Item> setDiag(@InvokeParameter("searchVO") SearchVO searchVO) {
         List<Item> diag = searchVO.getDiag();
-        diag = transferFacade.addItemUniqueName(diag, ConceptTypeEnum.Disease.getKey(), searchVO.getHosCode());
+        //数据引擎模式映射数据
+        if (searchVO.getSysType().intValue() == SysTypeEnum.LTAPI_SERVICE.getKey()) {
+            diag = transferFacade.addItemUniqueName(diag, ConceptTypeEnum.Disease.getKey(), searchVO.getHosCode());
+        }
         return diag;
     }
 
@@ -130,7 +139,10 @@ public class SearchItemAggregate {
     @DataProvider("setLisOrder")
     public List<Lis> setLisOrder(@InvokeParameter("searchVO") SearchVO searchVO) {
         List<Lis> lisOrder = searchVO.getLisOrder();
-        lisOrder = transferFacade.addLisUniqueName(lisOrder, searchVO.getHosCode());
+        //数据引擎模式映射数据
+        if (searchVO.getSysType().intValue() == SysTypeEnum.LTAPI_SERVICE.getKey()) {
+            lisOrder = transferFacade.addLisUniqueName(lisOrder, searchVO.getHosCode());
+        }
         return lisOrder;
     }
 
@@ -143,7 +155,10 @@ public class SearchItemAggregate {
     @DataProvider("setPacsOrder")
     public List<Pacs> setPacsOrder(@InvokeParameter("searchVO") SearchVO searchVO) {
         List<Pacs> pacsOrder = searchVO.getPacsOrder();
-        pacsOrder = transferFacade.addPacsUniqueName(pacsOrder, searchVO.getHosCode());
+        //数据引擎模式映射数据
+        if (searchVO.getSysType().intValue() == SysTypeEnum.LTAPI_SERVICE.getKey()) {
+            pacsOrder = transferFacade.addPacsUniqueName(pacsOrder, searchVO.getHosCode());
+        }
         return pacsOrder;
     }
 
@@ -156,7 +171,11 @@ public class SearchItemAggregate {
     @DataProvider("setDiagOrder")
     public List<Item> setDiagOrder(@InvokeParameter("searchVO") SearchVO searchVO) {
         List<Item> diagOrder = searchVO.getDiagOrder();
-        diagOrder = transferFacade.addItemUniqueName(diagOrder, ConceptTypeEnum.Disease.getKey(), searchVO.getHosCode());
+        //数据引擎模式映射数据
+        if (searchVO.getSysType().intValue() == SysTypeEnum.LTAPI_SERVICE.getKey()) {
+            diagOrder
+                    = transferFacade.addItemUniqueName(diagOrder, ConceptTypeEnum.Disease.getKey(), searchVO.getHosCode());
+        }
         return diagOrder;
     }
 
@@ -182,7 +201,12 @@ public class SearchItemAggregate {
     @DataProvider("setOperationOrder")
     public List<Item> setOperationOrder(@InvokeParameter("searchVO") SearchVO searchVO) {
         List<Item> operationOrder = searchVO.getOperationOrder();
-        operationOrder = transferFacade.addItemUniqueName(operationOrder, ConceptTypeEnum.OPERATION.getKey(), searchVO.getHosCode());
+        //数据引擎模式和页面推送模式对手术开单项入参做公表映射
+        if (searchVO.getSysType().intValue() == SysTypeEnum.DATA_SERVICE.getKey()
+                || searchVO.getSysType().intValue() == SysTypeEnum.LTAPI_SERVICE.getKey()) {
+            operationOrder
+                    = transferFacade.addItemUniqueName(operationOrder, ConceptTypeEnum.OPERATION.getKey(), searchVO.getHosCode());
+        }
         return operationOrder;
     }
 
@@ -211,7 +235,10 @@ public class SearchItemAggregate {
         }
         List<Item> diseaseItem = Lists.newLinkedList();
         diseaseItem.add(searchVO.getDiseaseName());
-        diseaseItem = transferFacade.addItemUniqueName(diseaseItem, ConceptTypeEnum.Disease.getKey(), searchVO.getHosCode());
+        //数据引擎模式映射数据
+        if (searchVO.getSysType().intValue() == SysTypeEnum.LTAPI_SERVICE.getKey()) {
+            diseaseItem = transferFacade.addItemUniqueName(diseaseItem, ConceptTypeEnum.Disease.getKey(), searchVO.getHosCode());
+        }
         if (ListUtil.isNotEmpty(diseaseItem)) {
             return diseaseItem.get(0);
         } else {

+ 10 - 0
aipt-service/src/main/java/com/diagbot/client/TranServiceClient.java

@@ -18,6 +18,7 @@ import com.diagbot.vo.HospitalSetVO;
 import com.diagbot.vo.IndexDataSaveVO;
 import com.diagbot.vo.IndexDataiIds;
 import com.diagbot.vo.LisConfigVO;
+import com.diagbot.vo.OperationConfigVO;
 import com.diagbot.vo.PacsConfigVO;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -97,6 +98,15 @@ public interface TranServiceClient {
     @PostMapping("/pacsConfig/getPacsConfig")
     RespDTO<Map<String, List<String>>> getPacsConfig(@RequestBody PacsConfigVO pacsConfigVO);
 
+    /**
+     * 获取手术映射关系
+     *
+     * @param operationConfigVO
+     * @return
+     */
+    @PostMapping("/operationConfig/getOperationConfig")
+    RespDTO<Map<String, List<String>>> getOperationConfig(@RequestBody OperationConfigVO operationConfigVO);
+
     /**
      * 根据医院编码获取提示信息标题映射关系
      *

+ 13 - 1
aipt-service/src/main/java/com/diagbot/client/hystrix/TranServiceHystrix.java

@@ -18,10 +18,10 @@ import com.diagbot.vo.HospitalSetVO;
 import com.diagbot.vo.IndexDataSaveVO;
 import com.diagbot.vo.IndexDataiIds;
 import com.diagbot.vo.LisConfigVO;
+import com.diagbot.vo.OperationConfigVO;
 import com.diagbot.vo.PacsConfigVO;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
-import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 
 import javax.validation.Valid;
@@ -96,6 +96,18 @@ public class TranServiceHystrix implements TranServiceClient {
         return null;
     }
 
+    /**
+     * 获取手术映射关系
+     *
+     * @param operationConfigVO
+     * @return
+     */
+    @Override
+    public RespDTO<Map<String, List<String>>> getOperationConfig(@RequestBody OperationConfigVO operationConfigVO) {
+        log.error("【hystrix】调用{}异常", "getOperationConfig");
+        return null;
+    }
+
     /**
      * 根据医院编码获取提示信息标题映射关系
      *

+ 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 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
     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.dto.ConceptBaseDTO;
 import com.diagbot.dto.ConceptRetrievalDTO;
+import com.diagbot.dto.ConceptRetrievalExtDTO;
 import com.diagbot.dto.ConceptWithOrderRes;
 import com.diagbot.dto.RetrievalDTO;
+import com.diagbot.dto.UsualDTO;
 import com.diagbot.entity.Concept;
+import com.diagbot.entity.KlSymptom;
 import com.diagbot.entity.wrapper.ConceptWrapper;
 import com.diagbot.enums.ConceptTypeEnum;
 import com.diagbot.enums.IsDeleteEnum;
@@ -50,6 +53,8 @@ public class ConceptFacade extends ConceptServiceImpl {
     ConceptDetailFacade conceptDetailFacade;
     @Autowired
     CryptConfiguer configuer;
+    @Autowired
+    KlSymptomFacade klSymptomFacade;
 
     /**
      * 验证存在并且获取概念基本信息
@@ -223,7 +228,7 @@ public class ConceptFacade extends ConceptServiceImpl {
             conceptExistVO.setLibType(libType);
         }
 
-        if (configuer.cryptFlag){
+        if (configuer.cryptFlag) {
             CryptUtil.encryptList(conceptExistVO.getNameList());
         }
         //获取结构
@@ -283,6 +288,36 @@ public class ConceptFacade extends ConceptServiceImpl {
         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检索
      *
@@ -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) {
         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.PartSymptomDTO;
 import com.diagbot.entity.Concept;
-import com.diagbot.entity.ConceptDetail;
+import com.diagbot.entity.KlSymptom;
 import com.diagbot.entity.Symptom;
 import com.diagbot.entity.wrapper.ConceptWrapper;
 import com.diagbot.enums.IsDeleteEnum;
@@ -21,9 +21,8 @@ import com.diagbot.vo.PartSymptomVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
-import java.lang.reflect.Field;
 import java.util.ArrayList;
-import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -42,6 +41,8 @@ public class PartFacade {
     ConceptDetailFacade conceptDetailFacade;
     @Autowired
     private CryptConfiguer cryptConfiguer;
+    @Autowired
+    KlSymptomFacade klSymptomFacade;
 
     /**
      * 根据已选部位返回对应的症状
@@ -79,6 +80,14 @@ public class PartFacade {
                 .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) {
             PartSymptomDTO partSymptomDTO = new PartSymptomDTO();
@@ -124,14 +133,14 @@ public class PartFacade {
         List<ConceptWithOrderRes> symptomList = conceptFacade.getConceptWithOrder(wrapper);
         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) {
@@ -146,7 +155,8 @@ public class PartFacade {
                         bean.setName(conceptWithOrderRes.getEndName());
                         bean.setPartConceptId(conceptWithOrderRes.getStartId());
                         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);
                     }

+ 51 - 4
aipt-service/src/main/java/com/diagbot/facade/PushFacade.java

@@ -1,15 +1,22 @@
 package com.diagbot.facade;
 
 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.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.enums.FeatureTypeEnum;
+import com.diagbot.biz.push.vo.SearchVO;
 import com.diagbot.dto.PushDTO;
+import com.diagbot.entity.KlSymptom;
+import com.diagbot.enums.LexiconTypeEnum;
 import com.diagbot.enums.SysTypeEnum;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
+import com.diagbot.util.BeanUtil;
+import com.diagbot.util.ListUtil;
 import com.diagbot.util.StringUtil;
 import io.github.lvyahui8.spring.aggregate.facade.DataBeanAggregateQueryFacade;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -18,8 +25,10 @@ import org.springframework.stereotype.Component;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.stream.Collectors;
 
 /**
  * @Description:
@@ -36,6 +45,8 @@ public class PushFacade {
     private TransferFacade transferFacade;
     @Autowired
     DataBeanAggregateQueryFacade dataBeanAggregateQueryFacade;
+    @Autowired
+    private ConceptFacade conceptFacade;
 
     /**
      * 推理接口
@@ -60,11 +71,12 @@ public class PushFacade {
 
         try {
             Map<String, Object> invokeParams = new HashMap<>();
-            invokeParams.put("pushDTO",pushDTO);
+            invokeParams.put("pushDTO", pushDTO);
             invokeParams.put("featureTypeSet", featureTypeSet);
             invokeParams.put("data", data);
             invokeParams.put("isConnect", isConnect);
             invokeParams.put("hosCode", searchVO.getHosCode());
+            invokeParams.put("sysType", searchVO.getSysType());
             pushDTO
                     = dataBeanAggregateQueryFacade.get("setAll", invokeParams, PushDTO.class);
         } catch (Exception e) {
@@ -78,6 +90,41 @@ public class PushFacade {
         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;
+    }
+
+
     /**
      * 获取治疗方案
      *
@@ -119,8 +166,8 @@ public class PushFacade {
      * @return
      */
     public SearchVO precSearchData(SearchVO searchVO, Boolean isConnect) {
-        //未对接或非数据引擎模式,不做映射
-        if (!isConnect || (!searchVO.getSysType().equals(SysTypeEnum.LTAPI_SERVICE.getKey()))) {
+        //未对接不做映射,细分参数是否对接单独处理,由sysType决定
+        if (!isConnect) {
             return searchVO;
         }
         try {

+ 34 - 3
aipt-service/src/main/java/com/diagbot/facade/TransferFacade.java

@@ -19,6 +19,7 @@ import com.diagbot.util.StringUtil;
 import com.diagbot.vo.DiseaseIcdVO;
 import com.diagbot.vo.HospitalSetVO;
 import com.diagbot.vo.LisConfigVO;
+import com.diagbot.vo.OperationConfigVO;
 import com.diagbot.vo.PacsConfigVO;
 import com.google.common.collect.Lists;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -226,7 +227,9 @@ public class TransferFacade {
                 if (StringUtil.isBlank(disease.getName())) {
                     continue;
                 } else {
-                    disease.setUniqueName(disMap.get(disease.getName()));
+                    if (StringUtil.isNotBlank(disMap.get(disease.getName()))) {
+                        disease.setUniqueName(disMap.get(disease.getName()));
+                    }
                 }
             }
             convertItems = BeanUtil.listCopyTo(items, Item.class);
@@ -234,8 +237,36 @@ public class TransferFacade {
             //暂无映射关系
             convertItems.addAll(items);
         } else if (type.equals(ConceptTypeEnum.OPERATION.getKey())) {
-            //暂无映射关系
-            convertItems.addAll(items);
+            OperationConfigVO operationConfigVO = new OperationConfigVO();
+            operationConfigVO.setHosCode(hosCode);
+            operationConfigVO.setNameList(items
+                    .stream()
+                    .map(operation -> operation.getName())
+                    .distinct()
+                    .collect(Collectors.toList()));
+            Map<String, List<String>> operationMap = new LinkedHashMap<>();
+            RespDTO<Map<String, List<String>>> respDTO = tranServiceClient.getOperationConfig(operationConfigVO);
+            if (RespDTOUtil.respIsOK(respDTO)) {
+                operationMap = respDTO.data;
+            }
+            for (Item item : items) {
+                if (StringUtil.isBlank(item.getName())) {
+                    convertItems.add(item);
+                    continue;
+                } else {
+                    if (ListUtil.isNotEmpty(operationMap.get(item.getName()))) {
+                        //外部一个项目对应到内部多个项目的数据,都保留
+                        for (String uniqueName : operationMap.get(item.getName())) {
+                            Item convertItem = new Item();
+                            BeanUtil.copyProperties(item, convertItem);
+                            convertItem.setUniqueName(uniqueName);
+                            convertItems.add(convertItem);
+                        }
+                    } else {
+                        convertItems.add(item);
+                    }
+                }
+            }
         }
         return convertItems;
     }

+ 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 {
+
+}

+ 19 - 0
aipt-service/src/main/java/com/diagbot/vo/OperationConfigVO.java

@@ -0,0 +1,19 @@
+package com.diagbot.vo;
+
+import com.diagbot.client.bean.HosCodeVO;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2020/3/27 15:45
+ */
+@Getter
+@Setter
+public class OperationConfigVO extends HosCodeVO {
+    private List<String> nameList;
+    private List<String> uniqueNameList;
+}

+ 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.dto.ConceptBaseDTO;
 import com.diagbot.dto.ConceptRetrievalDTO;
+import com.diagbot.dto.ConceptRetrievalExtDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.dto.RetrievalDTO;
+import com.diagbot.dto.UsualDTO;
 import com.diagbot.entity.Concept;
 import com.diagbot.facade.ConceptFacade;
 import com.diagbot.util.ParamConvertUtil;
@@ -57,6 +59,18 @@ public class ConceptController {
         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
      *
@@ -121,6 +135,18 @@ public class ConceptController {
         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

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

@@ -1,6 +1,7 @@
 package com.diagbot.web;
 
 import com.diagbot.annotation.SysLogger;
+import com.diagbot.biz.push.entity.ResponseDataWithExplain;
 import com.diagbot.biz.push.vo.SearchVO;
 import com.diagbot.dto.PushDTO;
 import com.diagbot.dto.RespDTO;
@@ -87,4 +88,17 @@ public class PushController {
         PushDTO data = pushFacade.pushInner(searchVO);
         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);
+}

+ 55 - 14
config-server/src/main/resources/shared/ltkg-service-dev.yml

@@ -6,20 +6,32 @@ spring:
   profiles:
     active: local
   datasource:
-    driver-class-name: org.neo4j.jdbc.Driver
-    url: jdbc:neo4j:http://192.168.3.150:7474
-    username: neo4j
-    password: 12345678
-    #定义初始连接数
-    initialSize: 0
-    #定义最大连接数
-    maxActive: 20
-    #定义最大空闲
-    maxIdle: 20
-    #定义最小空闲
-    minIdle: 1
-    #定义最长等待时间
-    maxWait: 60000
+    dynamic:
+      primary: neo4j
+      # 数据库配置
+      datasource:
+        neo4j:
+          driver-class-name: org.neo4j.jdbc.Driver
+          url: jdbc:neo4j:http://192.168.2.190:7474
+          username: root
+          password: zjlantone
+          #定义初始连接数
+          initialSize: 0
+          #定义最大连接数
+          maxActive: 20
+          #定义最大空闲
+          maxIdle: 20
+          #定义最小空闲
+          minIdle: 1
+          #定义最长等待时间
+          maxWait: 60000
+        mysql:
+          driver-class-name: com.mysql.cj.jdbc.Driver
+          platform: mysql
+          url: jdbc:mysql://192.168.2.236:3306/sys-ltkg?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&useSSL=false
+          username: root
+          password: lantone
+
 
   cloud:
     stream:
@@ -48,6 +60,35 @@ mybatis:
   type-aliases-package: com.diagbot.entity
   mapper-locations: classpath:mapper/**/*.xml
 
+#mybatis-plus
+mybatis-plus:
+  mapper-locations: classpath:/mapper/*Mapper.xml
+  #实体扫描,多个package用逗号或者分号分隔
+  typeAliasesPackage: com.diagbot.entity
+  global-config:
+    #刷新mapper 调试神器
+    db-config:
+      #主键类型  0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
+      id-type: id_worker
+      #字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
+      field-strategy: not_empty
+      #驼峰下划线转换
+      column-underline: true
+      #数据库大写下划线转换
+      #capital-mode: true
+      #刷新mapper 调试神器
+      refresh-mapper: true
+      #逻辑删除配置
+      logic-delete-value: 0
+      logic-not-delete-value: 1
+      #自定义填充策略接口实现
+      #meta-object-handler: com.baomidou.springboot.xxx
+      #自定义SQL注入器
+      #sql-injector: com.baomidou.springboot.xxx
+  configuration:
+    map-underscore-to-camel-case: true
+    cache-enabled: false
+
 nlprel:
   server:
     address: http://192.168.3.150:3456

+ 55 - 14
config-server/src/main/resources/shared/ltkg-service-local.yml

@@ -6,20 +6,32 @@ spring:
   profiles:
     active: local
   datasource:
-    driver-class-name: org.neo4j.jdbc.Driver
-    url: jdbc:neo4j:http://192.168.3.150:7474
-    username: neo4j
-    password: 12345678
-    #定义初始连接数
-    initialSize: 0
-    #定义最大连接数
-    maxActive: 20
-    #定义最大空闲
-    maxIdle: 20
-    #定义最小空闲
-    minIdle: 1
-    #定义最长等待时间
-    maxWait: 60000
+    dynamic:
+      primary: neo4j
+      # 数据库配置
+      datasource:
+        neo4j:
+          driver-class-name: org.neo4j.jdbc.Driver
+          url: jdbc:neo4j:http://192.168.2.190:7474
+          username: root
+          password: zjlantone
+          #定义初始连接数
+          initialSize: 0
+          #定义最大连接数
+          maxActive: 20
+          #定义最大空闲
+          maxIdle: 20
+          #定义最小空闲
+          minIdle: 1
+          #定义最长等待时间
+          maxWait: 60000
+        mysql:
+          driver-class-name: com.mysql.cj.jdbc.Driver
+          platform: mysql
+          url: jdbc:mysql://192.168.2.236:3306/sys-ltkg?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&useSSL=false
+          username: root
+          password: lantone
+
 
   cloud:
     stream:
@@ -48,6 +60,35 @@ mybatis:
   type-aliases-package: com.diagbot.entity
   mapper-locations: classpath:mapper/**/*.xml
 
+#mybatis-plus
+mybatis-plus:
+  mapper-locations: classpath:/mapper/*Mapper.xml
+  #实体扫描,多个package用逗号或者分号分隔
+  typeAliasesPackage: com.diagbot.entity
+  global-config:
+    #刷新mapper 调试神器
+    db-config:
+      #主键类型  0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
+      id-type: id_worker
+      #字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
+      field-strategy: not_empty
+      #驼峰下划线转换
+      column-underline: true
+      #数据库大写下划线转换
+      #capital-mode: true
+      #刷新mapper 调试神器
+      refresh-mapper: true
+      #逻辑删除配置
+      logic-delete-value: 0
+      logic-not-delete-value: 1
+      #自定义填充策略接口实现
+      #meta-object-handler: com.baomidou.springboot.xxx
+      #自定义SQL注入器
+      #sql-injector: com.baomidou.springboot.xxx
+  configuration:
+    map-underscore-to-camel-case: true
+    cache-enabled: false
+
 nlprel:
   server:
     address: http://192.168.3.150:3456

+ 55 - 14
config-server/src/main/resources/shared/ltkg-service-pre.yml

@@ -6,20 +6,32 @@ spring:
   profiles:
     active: local
   datasource:
-    driver-class-name: org.neo4j.jdbc.Driver
-    url: jdbc:neo4j:http://192.168.3.150:7474
-    username: neo4j
-    password: 12345678
-    #定义初始连接数
-    initialSize: 0
-    #定义最大连接数
-    maxActive: 20
-    #定义最大空闲
-    maxIdle: 20
-    #定义最小空闲
-    minIdle: 1
-    #定义最长等待时间
-    maxWait: 60000
+    dynamic:
+      primary: neo4j
+      # 数据库配置
+      datasource:
+        neo4j:
+          driver-class-name: org.neo4j.jdbc.Driver
+          url: jdbc:neo4j:http://192.168.3.150:7474
+          username: neo4j
+          password: 12345678
+          #定义初始连接数
+          initialSize: 0
+          #定义最大连接数
+          maxActive: 20
+          #定义最大空闲
+          maxIdle: 20
+          #定义最小空闲
+          minIdle: 1
+          #定义最长等待时间
+          maxWait: 60000
+        mysql:
+          driver-class-name: com.mysql.cj.jdbc.Driver
+          platform: mysql
+          url: jdbc:mysql://192.168.2.121:3306/sys-ltkg?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&useSSL=false
+          username: teamback
+          password: goTulmLeon
+
 
   cloud:
     stream:
@@ -48,6 +60,35 @@ mybatis:
   type-aliases-package: com.diagbot.entity
   mapper-locations: classpath:mapper/**/*.xml
 
+#mybatis-plus
+mybatis-plus:
+  mapper-locations: classpath:/mapper/*Mapper.xml
+  #实体扫描,多个package用逗号或者分号分隔
+  typeAliasesPackage: com.diagbot.entity
+  global-config:
+    #刷新mapper 调试神器
+    db-config:
+      #主键类型  0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
+      id-type: id_worker
+      #字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
+      field-strategy: not_empty
+      #驼峰下划线转换
+      column-underline: true
+      #数据库大写下划线转换
+      #capital-mode: true
+      #刷新mapper 调试神器
+      refresh-mapper: true
+      #逻辑删除配置
+      logic-delete-value: 0
+      logic-not-delete-value: 1
+      #自定义填充策略接口实现
+      #meta-object-handler: com.baomidou.springboot.xxx
+      #自定义SQL注入器
+      #sql-injector: com.baomidou.springboot.xxx
+  configuration:
+    map-underscore-to-camel-case: true
+    cache-enabled: false
+
 nlprel:
   server:
     address: http://192.168.3.150:3456

+ 55 - 14
config-server/src/main/resources/shared/ltkg-service-pro.yml

@@ -6,20 +6,32 @@ spring:
   profiles:
     active: local
   datasource:
-    driver-class-name: org.neo4j.jdbc.Driver
-    url: jdbc:neo4j:http://192.168.3.150:7474
-    username: neo4j
-    password: 12345678
-    #定义初始连接数
-    initialSize: 0
-    #定义最大连接数
-    maxActive: 20
-    #定义最大空闲
-    maxIdle: 20
-    #定义最小空闲
-    minIdle: 1
-    #定义最长等待时间
-    maxWait: 60000
+    dynamic:
+      primary: neo4j
+      # 数据库配置
+      datasource:
+        neo4j:
+          driver-class-name: org.neo4j.jdbc.Driver
+          url: jdbc:neo4j:http://192.168.3.150:7474
+          username: neo4j
+          password: 12345678
+          #定义初始连接数
+          initialSize: 0
+          #定义最大连接数
+          maxActive: 20
+          #定义最大空闲
+          maxIdle: 20
+          #定义最小空闲
+          minIdle: 1
+          #定义最长等待时间
+          maxWait: 60000
+        mysql:
+          driver-class-name: com.mysql.cj.jdbc.Driver
+          platform: mysql
+          url: jdbc:mysql://192.168.2.122:3306/sys-ltkg?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&useSSL=false
+          username: root
+          password: lantone
+
 
   cloud:
     stream:
@@ -48,6 +60,35 @@ mybatis:
   type-aliases-package: com.diagbot.entity
   mapper-locations: classpath:mapper/**/*.xml
 
+#mybatis-plus
+mybatis-plus:
+  mapper-locations: classpath:/mapper/*Mapper.xml
+  #实体扫描,多个package用逗号或者分号分隔
+  typeAliasesPackage: com.diagbot.entity
+  global-config:
+    #刷新mapper 调试神器
+    db-config:
+      #主键类型  0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
+      id-type: id_worker
+      #字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
+      field-strategy: not_empty
+      #驼峰下划线转换
+      column-underline: true
+      #数据库大写下划线转换
+      #capital-mode: true
+      #刷新mapper 调试神器
+      refresh-mapper: true
+      #逻辑删除配置
+      logic-delete-value: 0
+      logic-not-delete-value: 1
+      #自定义填充策略接口实现
+      #meta-object-handler: com.baomidou.springboot.xxx
+      #自定义SQL注入器
+      #sql-injector: com.baomidou.springboot.xxx
+  configuration:
+    map-underscore-to-camel-case: true
+    cache-enabled: false
+
 nlprel:
   server:
     address: http://192.168.3.150:3456

+ 55 - 14
config-server/src/main/resources/shared/ltkg-service-test.yml

@@ -6,20 +6,32 @@ spring:
   profiles:
     active: local
   datasource:
-    driver-class-name: org.neo4j.jdbc.Driver
-    url: jdbc:neo4j:http://192.168.3.150:7474
-    username: neo4j
-    password: 12345678
-    #定义初始连接数
-    initialSize: 0
-    #定义最大连接数
-    maxActive: 20
-    #定义最大空闲
-    maxIdle: 20
-    #定义最小空闲
-    minIdle: 1
-    #定义最长等待时间
-    maxWait: 60000
+    dynamic:
+      primary: neo4j
+      # 数据库配置
+      datasource:
+        neo4j:
+          driver-class-name: org.neo4j.jdbc.Driver
+          url: jdbc:neo4j:http://192.168.2.190:7474
+          username: root
+          password: zjlantone
+          #定义初始连接数
+          initialSize: 0
+          #定义最大连接数
+          maxActive: 20
+          #定义最大空闲
+          maxIdle: 20
+          #定义最小空闲
+          minIdle: 1
+          #定义最长等待时间
+          maxWait: 60000
+        mysql:
+          driver-class-name: com.mysql.cj.jdbc.Driver
+          platform: mysql
+          url: jdbc:mysql://192.168.2.241:3306/sys-ltkg?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&useSSL=false
+          username: root
+          password: lantone
+
 
   cloud:
     stream:
@@ -48,6 +60,35 @@ mybatis:
   type-aliases-package: com.diagbot.entity
   mapper-locations: classpath:mapper/**/*.xml
 
+#mybatis-plus
+mybatis-plus:
+  mapper-locations: classpath:/mapper/*Mapper.xml
+  #实体扫描,多个package用逗号或者分号分隔
+  typeAliasesPackage: com.diagbot.entity
+  global-config:
+    #刷新mapper 调试神器
+    db-config:
+      #主键类型  0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
+      id-type: id_worker
+      #字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
+      field-strategy: not_empty
+      #驼峰下划线转换
+      column-underline: true
+      #数据库大写下划线转换
+      #capital-mode: true
+      #刷新mapper 调试神器
+      refresh-mapper: true
+      #逻辑删除配置
+      logic-delete-value: 0
+      logic-not-delete-value: 1
+      #自定义填充策略接口实现
+      #meta-object-handler: com.baomidou.springboot.xxx
+      #自定义SQL注入器
+      #sql-injector: com.baomidou.springboot.xxx
+  configuration:
+    map-underscore-to-camel-case: true
+    cache-enabled: false
+
 nlprel:
   server:
     address: http://192.168.3.150:3456

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

@@ -110,3 +110,15 @@ mybatis-plus:
     map-underscore-to-camel-case: true
     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
+naligh:
+  apiUrl: http://ssltest.ngarihealth.com/openapi-prerelease/gateway
+  appKey: ngari5e48d9ec11dc3978
+  appSecret: 11dc397869c2d24a

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

@@ -110,3 +110,15 @@ mybatis-plus:
     map-underscore-to-camel-case: true
     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
+naligh:
+  apiUrl: http://ssltest.ngarihealth.com/openapi-prerelease/gateway
+  appKey: ngari5e48d9ec11dc3978
+  appSecret: 11dc397869c2d24a

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

@@ -110,3 +110,15 @@ mybatis-plus:
     map-underscore-to-camel-case: true
     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
+naligh:
+  apiUrl: http://ssltest.ngarihealth.com/openapi-prerelease/gateway
+  appKey: ngari5e48d9ec11dc3978
+  appSecret: 11dc397869c2d24a

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

@@ -110,3 +110,15 @@ mybatis-plus:
     map-underscore-to-camel-case: true
     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
+naligh:
+  apiUrl: http://ssltest.ngarihealth.com/openapi-prerelease/gateway
+  appKey: ngari5e48d9ec11dc3978
+  appSecret: 11dc397869c2d24a

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

@@ -110,3 +110,15 @@ mybatis-plus:
     map-underscore-to-camel-case: true
     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
+naligh:
+  apiUrl: http://ssltest.ngarihealth.com/openapi-prerelease/gateway
+  appKey: ngari5e48d9ec11dc3978
+  appSecret: 11dc397869c2d24a

+ 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;
+

File diff suppressed because it is too large
+ 1412 - 0
docs/031.2020-03-20智能分诊初始化脚本/init_tran.sql


+ 15 - 0
docs/033.20200330手术开单合理项映射脚本/init_tran.sql

@@ -0,0 +1,15 @@
+use `sys-tran`;
+
+DROP TABLE IF EXISTS `tran_operation_config`;
+CREATE TABLE `tran_operation_config` (
+  `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则表示纪录未修改',
+  `hospital_code` varchar(60) DEFAULT NULL COMMENT '医院编码',
+  `name` varchar(100) DEFAULT NULL COMMENT '外部名称',
+  `unique_name` varchar(100) DEFAULT NULL COMMENT '内部名称',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

File diff suppressed because it is too large
+ 48 - 0
docs/034.20200330官网知识平台二期/init_ltkg.sql


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

@@ -1,11 +1,11 @@
 package com.diagbot.dto;
 
-import java.util.List;
-
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.util.List;
+
 /**
  * @Description
  * @author rgb
@@ -68,5 +68,17 @@ public class GetConceptInfoDTO {
      */
     @ApiModelProperty(value="诊断类型")
     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.LibraryInfo;
 import com.diagbot.entity.Relation;
+import com.diagbot.entity.KlSymptom;
 import com.diagbot.entity.wrapper.ConceptWrapper;
 import com.diagbot.enums.DiseaseClassifyEnum;
 import com.diagbot.enums.IsDeleteEnum;
@@ -60,6 +61,7 @@ import com.diagbot.vo.IndexLexiconVO;
 import com.diagbot.vo.IndexVO;
 import com.diagbot.vo.KLQuestionVO;
 import com.diagbot.vo.RemoveConceptInfoVO;
+import com.diagbot.vo.SymptomExtVO;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import org.apache.commons.lang.time.DateFormatUtils;
@@ -122,6 +124,8 @@ public class ConceptFacade extends ConceptServiceImpl {
     private CryptConfiguer cryptConfiguer;
     @Autowired
     private IcssManRpcFacade icssManRpcFacade;
+    @Autowired
+    private KlSymptomFacade klSymptomFacade;
 
     /**
      * 获取所有化验公表项
@@ -548,6 +552,14 @@ public class ConceptFacade extends ConceptServiceImpl {
                 getConceptInfoDTO.setDeptId(disease.getDeptId());
                 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;
@@ -746,6 +758,7 @@ public class ConceptFacade extends ConceptServiceImpl {
             conceptCommonFacade.saveOrUpdate(conceptCommon);
         }
 
+        // 诊断扩展属性
         if (lexicon.getName().equals(LexiconTypeEnum.DIAGNOSIS.getName())) {
             QueryWrapper<Disease> diseaseQe = new QueryWrapper<>();
             diseaseQe.eq("concept_id", conceptId);
@@ -769,10 +782,28 @@ public class ConceptFacade extends ConceptServiceImpl {
             } else {
                 BeanUtil.copyProperties(addConceptInfoVO.getAddCptDiseaseExtVO(), 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;
     }
 

+ 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;
 
-import java.util.List;
-
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotEmpty;
-
 import com.diagbot.annotation.CryptField;
-import org.hibernate.validator.constraints.Range;
-
 import com.diagbot.entity.Concept;
 import com.diagbot.entity.ConceptCommon;
 import com.diagbot.entity.LibraryInfo;
-
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
 import lombok.Setter;
+import org.hibernate.validator.constraints.Range;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
 
 /**
  * @Description
@@ -58,6 +55,12 @@ public class AddConceptInfoVO {
 	 */
 	@ApiModelProperty(value="诊断类型术语扩展")
 	private AddCptDiseaseExtVO addCptDiseaseExtVO;
+
+	/**
+	 * 症状扩展属性
+	 */
+	@ApiModelProperty(value="症状扩展属性")
+	private SymptomExtVO symptomExtVO;
 	
 	/**
      * 性别: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.setDriverName("com.mysql.cj.jdbc.Driver");
         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);
 
         // 策略配置
         StrategyConfig strategy = new StrategyConfig();
-        strategy.setTablePrefix(new String[] { "kl_" });// 此处可以修改为您的表前缀
+        strategy.setTablePrefix(new String[] { "" });// 此处可以修改为您的表前缀
         strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略
-        strategy.setInclude(new String[] { "kl_diagnose_question"}); // 需要生成的表
+        strategy.setInclude(new String[] { "kl_symptom"}); // 需要生成的表
 
         strategy.setSuperServiceClass(null);
         strategy.setSuperServiceImplClass(null);

+ 40 - 0
ltkg-service/pom.xml

@@ -145,6 +145,46 @@
             <artifactId>caffeine</artifactId>
         </dependency>
 
+        <!-- mybatis-plus begin -->
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-boot-starter</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-generator</artifactId>
+        </dependency>
+        <!-- mybatis-plus end -->
+
+        <!--&lt;!&ndash; 阿里巴巴druid数据库连接池 &ndash;&gt;-->
+        <!--<dependency>-->
+            <!--<groupId>com.alibaba</groupId>-->
+            <!--<artifactId>druid-spring-boot-starter</artifactId>-->
+        <!--</dependency>-->
+
+        <!-- springboot整合mybatis(核心就这一个) -->
+        <!-- 注意顺序,这个一定要放在最下面 -->
+        <dependency>
+            <groupId>org.mybatis.spring.boot</groupId>
+            <artifactId>mybatis-spring-boot-starter</artifactId>
+            <version>${mybatis-spring-boot.version}</version>
+        </dependency>
+
+        <!--多数据源-->
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
+            <version>3.0.0</version>
+        </dependency>
+
+        <!--mysql-database-->
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+
     </dependencies>
 
     <build>

+ 1 - 1
ltkg-service/src/main/java/com/diagbot/LtkgServiceApplication.java

@@ -20,7 +20,7 @@ import org.springframework.cloud.openfeign.EnableFeignClients;
  * @author: gaodm
  * @time: 2018/8/7 9:26
  */
-@SpringBootApplication(exclude = { HibernateJpaAutoConfiguration.class,
+@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class,
         JmxAutoConfiguration.class, ThymeleafAutoConfiguration.class })
 @EnableEurekaClient
 @EnableFeignClients({ "com.diagbot.client" })

+ 33 - 0
ltkg-service/src/main/java/com/diagbot/config/MybatisPlusConfigurer.java

@@ -0,0 +1,33 @@
+package com.diagbot.config;
+
+import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+
+/**
+ * @Description: MybatisPlus配置类
+ * @author: gaodm
+ * @time: 2018/8/2 13:39
+ */
+@EnableTransactionManagement
+@Configuration
+@MapperScan("com.diagbot.mapper*")//这个注解,作用相当于下面的@Bean MapperScannerConfigurer,2者配置1份即可
+public class MybatisPlusConfigurer {
+
+    /**
+     * mybatis-plus分页插件<br>
+     * 文档:http://mp.baomidou.com<br>
+     */
+    @Bean
+    public PaginationInterceptor paginationInterceptor() {
+        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
+        // 设置请求的页面大于最大页后操作,true调回到首页,false继续请求,默认false
+        //paginationInterceptor.setOverflow(false);
+        // 设置最大单页限制数量,默认500条,-1不受限制
+        paginationInterceptor.setLimit(500L);
+        return paginationInterceptor;
+    }
+
+}

+ 23 - 0
ltkg-service/src/main/java/com/diagbot/dto/MrInfoDTO.java

@@ -0,0 +1,23 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/3/30 17:13
+ */
+@Getter
+@Setter
+public class MrInfoDTO {
+    /**
+     * 标题
+     */
+    private String title;
+
+    /**
+     * 内容
+     */
+    private String content;
+}

+ 159 - 0
ltkg-service/src/main/java/com/diagbot/entity/PresetInfo.java

@@ -0,0 +1,159 @@
+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;
+
+/**
+ * <p>
+ * 知识平台预设信息
+ * </p>
+ *
+ * @author gaodm
+ * @since 2020-03-31
+ */
+@TableName("ltkg_preset_info")
+public class PresetInfo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private LocalDateTime gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private LocalDateTime gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 类型 (0:默认,1:病历,20:疾病ICD10)
+     */
+    private Integer type;
+
+    /**
+     * 标题
+     */
+    private String title;
+
+    /**
+     * 内容
+     */
+    private String content;
+
+    /**
+     * 备注
+     */
+    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 LocalDateTime getGmtCreate() {
+        return gmtCreate;
+    }
+
+    public void setGmtCreate(LocalDateTime gmtCreate) {
+        this.gmtCreate = gmtCreate;
+    }
+    public LocalDateTime getGmtModified() {
+        return gmtModified;
+    }
+
+    public void setGmtModified(LocalDateTime 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 getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    @Override
+    public String toString() {
+        return "PresetInfo{" +
+            "id=" + id +
+            ", isDeleted=" + isDeleted +
+            ", gmtCreate=" + gmtCreate +
+            ", gmtModified=" + gmtModified +
+            ", creator=" + creator +
+            ", modifier=" + modifier +
+            ", type=" + type +
+            ", title=" + title +
+            ", content=" + content +
+            ", remark=" + remark +
+        "}";
+    }
+}

+ 31 - 16
ltkg-service/src/main/java/com/diagbot/facade/KgFacade.java

@@ -1,6 +1,6 @@
 package com.diagbot.facade;
 
-import com.diagbot.dto.BaseNodeDTO;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.diagbot.dto.BaseNodeRSDTO;
 import com.diagbot.dto.CategorieDTO;
 import com.diagbot.dto.Categories;
@@ -16,6 +16,8 @@ import com.diagbot.dto.Tree;
 import com.diagbot.dto.TreeDTO;
 import com.diagbot.dto.TreeNodeDTO;
 import com.diagbot.dto.Tu;
+import com.diagbot.entity.PresetInfo;
+import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
 import com.diagbot.service.impl.KgServiceImpl;
@@ -25,6 +27,7 @@ import com.diagbot.util.ListUtil;
 import com.diagbot.util.StringUtil;
 import com.diagbot.vo.KgQueryVO;
 import com.diagbot.vo.KgTreeVO;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import java.util.ArrayList;
@@ -40,6 +43,8 @@ import java.util.Map;
  */
 @Component
 public class KgFacade extends KgServiceImpl {
+    @Autowired
+    private PresetInfoFacade presetInfoFacade;
 
     public GraphLabelDTO getGraphFac(KgQueryVO kgQueryVO) {
         GraphLabelDTO graphLabelDTO = new GraphLabelDTO();
@@ -78,7 +83,7 @@ public class KgFacade extends KgServiceImpl {
                     if (ListUtil.isNotEmpty(baseNodeRSDTO.getENodeDTOS())) {
                         for (NextNodeDTO baseNodeDTO : baseNodeRSDTO.getENodeDTOS()) {
                             String symbol = "diamond";
-                            if (baseNodeDTO.getPCount() > 0){
+                            if (baseNodeDTO.getPCount() > 0) {
                                 symbol = "circle";
                             }
                             GNodeDTO eNodeDTO
@@ -99,23 +104,33 @@ public class KgFacade extends KgServiceImpl {
         return graphLabelDTO;
     }
 
-//    private String random() {
-//        //先随机产生一个下标再获取元素
-//        String random = "";
-//        String[] doc = { "circle", "diamond" };
-//        int index = (int) (Math.random() * doc.length);
-//        random = doc[index];
-//        return random;
-//    }
+    //    private String random() {
+    //        //先随机产生一个下标再获取元素
+    //        String random = "";
+    //        String[] doc = { "circle", "diamond" };
+    //        int index = (int) (Math.random() * doc.length);
+    //        random = doc[index];
+    //        return random;
+    //    }
 
     public TreeDTO getTreeFac(KgTreeVO kgTreeVO) {
         TreeDTO treeDTO = new TreeDTO();
-        if (kgTreeVO.getType() == 1
-                && kgTreeVO.getSubType() == 1) {
-            KgQueryVO kgQueryVO = new KgQueryVO();
-            kgQueryVO.setLabelName("诊断依据");
-            kgQueryVO.setInputStr("诊断依据");
-            String tree = this.getTree(kgQueryVO);
+        if ((kgTreeVO.getType() == 1
+                && (kgTreeVO.getSubType() == 1 || kgTreeVO.getSubType() == 2 || kgTreeVO.getSubType() == 3))
+                || (kgTreeVO.getType() == 2 && (kgTreeVO.getSubType() == 0))
+                || (kgTreeVO.getType() == 3 && (kgTreeVO.getSubType() == 0))
+                || (kgTreeVO.getType() == 4 && (kgTreeVO.getSubType() == 0))) {
+            // KgQueryVO kgQueryVO = new KgQueryVO();
+            // kgQueryVO.setLabelName("诊断依据");
+            // kgQueryVO.setInputStr("诊断依据");
+            // String tree = this.getTree(kgQueryVO);
+            PresetInfo presetInfo = presetInfoFacade.getOne(new QueryWrapper<PresetInfo>()
+                    .eq("is_deleted", IsDeleteEnum.N.getKey())
+                    .eq("type", (kgTreeVO.getType() * 10 + kgTreeVO.getSubType())), false);
+            String tree = "";
+            if (null != presetInfo){
+                tree = presetInfo.getContent();
+            }
             if (StringUtil.isBlank(tree)) {
                 throw new CommonException(CommonErrorCode.NOT_EXISTS);
             } else {

+ 29 - 0
ltkg-service/src/main/java/com/diagbot/facade/PresetInfoFacade.java

@@ -0,0 +1,29 @@
+package com.diagbot.facade;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.diagbot.dto.MrInfoDTO;
+import com.diagbot.entity.PresetInfo;
+import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.service.impl.PresetInfoServiceImpl;
+import com.diagbot.util.BeanUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/3/31 9:16
+ */
+@Component
+public class PresetInfoFacade extends PresetInfoServiceImpl {
+    public List<MrInfoDTO> getMrInfo() {
+        List<MrInfoDTO> mrInfoDTOList = new ArrayList<>();
+        List<PresetInfo> mrInfoList = this.list(new QueryWrapper<PresetInfo>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("type", 1));
+        mrInfoDTOList = BeanUtil.listCopyTo(mrInfoList, MrInfoDTO.class);
+        return mrInfoDTOList;
+    }
+}

+ 16 - 0
ltkg-service/src/main/java/com/diagbot/mapper/PresetInfoMapper.java

@@ -0,0 +1,16 @@
+package com.diagbot.mapper;
+
+import com.diagbot.entity.PresetInfo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 知识平台预设信息 Mapper 接口
+ * </p>
+ *
+ * @author gaodm
+ * @since 2020-03-31
+ */
+public interface PresetInfoMapper extends BaseMapper<PresetInfo> {
+
+}

+ 18 - 0
ltkg-service/src/main/java/com/diagbot/service/PresetInfoService.java

@@ -0,0 +1,18 @@
+package com.diagbot.service;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.diagbot.entity.PresetInfo;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 知识平台预设信息 服务类
+ * </p>
+ *
+ * @author gaodm
+ * @since 2020-03-31
+ */
+@DS("mysql")
+public interface PresetInfoService extends IService<PresetInfo> {
+
+}

+ 20 - 0
ltkg-service/src/main/java/com/diagbot/service/impl/PresetInfoServiceImpl.java

@@ -0,0 +1,20 @@
+package com.diagbot.service.impl;
+
+import com.diagbot.entity.PresetInfo;
+import com.diagbot.mapper.PresetInfoMapper;
+import com.diagbot.service.PresetInfoService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 知识平台预设信息 服务实现类
+ * </p>
+ *
+ * @author gaodm
+ * @since 2020-03-31
+ */
+@Service
+public class PresetInfoServiceImpl extends ServiceImpl<PresetInfoMapper, PresetInfo> implements PresetInfoService {
+
+}

+ 2 - 2
ltkg-service/src/main/java/com/diagbot/vo/KgTreeVO.java

@@ -14,10 +14,10 @@ import javax.validation.constraints.NotNull;
 @Getter
 @Setter
 public class KgTreeVO {
-    @ApiModelProperty(value = "类型 疾病:1")
+    @ApiModelProperty(value = "类型")
     @NotNull(message = "类型不能为空")
     private Integer type;
-    @ApiModelProperty(value = "子类型 默认:0 ICD10:1")
+    @ApiModelProperty(value = "子类型 默认:0")
     @NotNull(message = "子类型不能为空")
     private Integer subType;
 }

+ 3 - 1
ltkg-service/src/main/java/com/diagbot/web/KgController.java

@@ -56,7 +56,9 @@ public class KgController {
         return RespDTO.onSuc(kgFacade.getGraphFac(kgQueryVO));
     }
 
-    @ApiOperation(value = "获取树形分类", notes = "获取树形分类")
+    @ApiOperation(value = "获取树形分类",
+            notes = "获取树形分类(疾病ICD10:t:1,st:1)" +
+                    "(疾病科室:t:1,st:2)")
     @PostMapping("/getTree")
     @SysLogger("getTree")
     @Cacheable(value = KGTREECACHE, key = "'kgtree:t_' + #kgTreeVO.type + '_st_' + #kgTreeVO.subType")

+ 39 - 0
ltkg-service/src/main/java/com/diagbot/web/PresetInfoController.java

@@ -0,0 +1,39 @@
+package com.diagbot.web;
+
+
+import com.diagbot.annotation.SysLogger;
+import com.diagbot.dto.MrInfoDTO;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.facade.PresetInfoFacade;
+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.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 知识平台预设信息 前端控制器
+ * </p>
+ *
+ * @author gaodm
+ * @since 2020-03-31
+ */
+@RestController
+@RequestMapping("/presetInfo")
+@Api(value = "知识平台预设信息API", tags = { "知识平台预设信息API" })
+@SuppressWarnings("unchecked")
+public class PresetInfoController {
+    @Autowired
+    private PresetInfoFacade presetInfoFacade;
+
+    @ApiOperation(value = "获取所有预设病历", notes = "获取所有预设病历")
+    @PostMapping("/getMrInfo")
+    @SysLogger("getMrInfo")
+    public RespDTO<List<MrInfoDTO>> getMrInfo() {
+        return RespDTO.onSuc(presetInfoFacade.getMrInfo());
+    }
+}

+ 19 - 0
ltkg-service/src/main/resources/mapper/PresetInfoMapper.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.PresetInfoMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.diagbot.entity.PresetInfo">
+        <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="type" property="type" />
+        <result column="title" property="title" />
+        <result column="content" property="content" />
+        <result column="remark" property="remark" />
+    </resultMap>
+
+</mapper>

+ 83 - 83
ltkg-service/src/test/java/com/diagbot/CodeGeneration.java

@@ -1,83 +1,83 @@
-//package com.diagbot;
-//
-//import com.baomidou.mybatisplus.annotation.DbType;
-//import com.baomidou.mybatisplus.generator.AutoGenerator;
-//import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
-//import com.baomidou.mybatisplus.generator.config.GlobalConfig;
-//import com.baomidou.mybatisplus.generator.config.PackageConfig;
-//import com.baomidou.mybatisplus.generator.config.StrategyConfig;
-//import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
-//import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
-//
-///**
-// * @Description: 代码生成器
-// * @author: gaodm
-// * @time: 2018/8/2 10:15
-// */
-//public class CodeGeneration {
-//
-//    /**
-//     *
-//     * @Title: main
-//     * @Description: 生成
-//     * @param args
-//     */
-//    public static void main(String[] args) {
-//        AutoGenerator mpg = new AutoGenerator();
-//
-//        // 全局配置
-//        GlobalConfig gc = new GlobalConfig();
-//        gc.setOutputDir("E://code//feedbackservice");
-//        gc.setFileOverride(true);
-//        gc.setActiveRecord(false);// 不需要ActiveRecord特性的请改为false
-//        gc.setEnableCache(false);// XML 二级缓存
-//        gc.setBaseResultMap(true);// XML ResultMap
-//        gc.setBaseColumnList(false);// XML columList
-//        gc.setAuthor("gaodm");// 作者
-//
-//        // 自定义文件命名,注意 %s 会自动填充表实体属性!
-//        gc.setControllerName("%sController");
-//        gc.setServiceName("%sService");
-//        gc.setServiceImplName("%sServiceImpl");
-//        gc.setMapperName("%sMapper");
-//        gc.setXmlName("%sMapper");
-//        mpg.setGlobalConfig(gc);
-//
-//        // 数据源配置
-//        DataSourceConfig dsc = new DataSourceConfig();
-//        dsc.setDbType(DbType.MYSQL);
-//        dsc.setDriverName("com.mysql.cj.jdbc.Driver");
-//        dsc.setUsername("root");
-//        dsc.setPassword("root");
-//        dsc.setUrl("jdbc:mysql://127.0.0.1:3306/sys-log?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8");
-//        mpg.setDataSource(dsc);
-//
-//        // 策略配置
-//        StrategyConfig strategy = new StrategyConfig();
-////        strategy.setTablePrefix(new String[] { "sys_" });// 此处可以修改为您的表前缀
-//        strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略
-//        strategy.setInclude(new String[] { "sys_log" }); // 需要生成的表
-//
-//        strategy.setSuperServiceClass(null);
-//        strategy.setSuperServiceImplClass(null);
-//        strategy.setSuperMapperClass(null);
-//
-//        mpg.setStrategy(strategy);
-//
-//        // 包配置
-//        PackageConfig pc = new PackageConfig();
-//        pc.setParent("com.diagbot");
-//        pc.setController("web");
-//        pc.setService("service");
-//        pc.setServiceImpl("service.impl");
-//        pc.setMapper("mapper");
-//        pc.setEntity("entity");
-//        pc.setXml("resources.mapper");
-//        mpg.setPackageInfo(pc);
-//
-//        // 执行生成
-//        mpg.setTemplateEngine(new FreemarkerTemplateEngine());
-//        mpg.execute();
-//
-//    }
-//}
+package com.diagbot;
+
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.generator.AutoGenerator;
+import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
+import com.baomidou.mybatisplus.generator.config.GlobalConfig;
+import com.baomidou.mybatisplus.generator.config.PackageConfig;
+import com.baomidou.mybatisplus.generator.config.StrategyConfig;
+import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
+import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
+
+/**
+ * @Description: 代码生成器
+ * @author: gaodm
+ * @time: 2018/8/2 10:15
+ */
+public class CodeGeneration {
+
+    /**
+     *
+     * @Title: main
+     * @Description: 生成
+     * @param args
+     */
+    public static void main(String[] args) {
+        AutoGenerator mpg = new AutoGenerator();
+
+        // 全局配置
+        GlobalConfig gc = new GlobalConfig();
+        gc.setOutputDir("E://code//ltkgservice");
+        gc.setFileOverride(true);
+        gc.setActiveRecord(false);// 不需要ActiveRecord特性的请改为false
+        gc.setEnableCache(false);// XML 二级缓存
+        gc.setBaseResultMap(true);// XML ResultMap
+        gc.setBaseColumnList(false);// XML columList
+        gc.setAuthor("gaodm");// 作者
+
+        // 自定义文件命名,注意 %s 会自动填充表实体属性!
+        gc.setControllerName("%sController");
+        gc.setServiceName("%sService");
+        gc.setServiceImplName("%sServiceImpl");
+        gc.setMapperName("%sMapper");
+        gc.setXmlName("%sMapper");
+        mpg.setGlobalConfig(gc);
+
+        // 数据源配置
+        DataSourceConfig dsc = new DataSourceConfig();
+        dsc.setDbType(DbType.MYSQL);
+        dsc.setDriverName("com.mysql.cj.jdbc.Driver");
+        dsc.setUsername("root");
+        dsc.setPassword("lantone");
+        dsc.setUrl("jdbc:mysql://192.168.2.236:3306/sys-ltkg?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8");
+        mpg.setDataSource(dsc);
+
+        // 策略配置
+        StrategyConfig strategy = new StrategyConfig();
+        strategy.setTablePrefix(new String[] { "ltkg_" });// 此处可以修改为您的表前缀
+        strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略
+        strategy.setInclude(new String[] { "ltkg_preset_info" }); // 需要生成的表
+
+        strategy.setSuperServiceClass(null);
+        strategy.setSuperServiceImplClass(null);
+        strategy.setSuperMapperClass(null);
+
+        mpg.setStrategy(strategy);
+
+        // 包配置
+        PackageConfig pc = new PackageConfig();
+        pc.setParent("com.diagbot");
+        pc.setController("web");
+        pc.setService("service");
+        pc.setServiceImpl("service.impl");
+        pc.setMapper("mapper");
+        pc.setEntity("entity");
+        pc.setXml("resources.mapper");
+        mpg.setPackageInfo(pc);
+
+        // 执行生成
+        mpg.setTemplateEngine(new FreemarkerTemplateEngine());
+        mpg.execute();
+
+    }
+}

+ 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.dto.ConceptBaseDTO;
 import com.diagbot.dto.ConceptRetrievalDTO;
+import com.diagbot.dto.ConceptRetrievalExtDTO;
 import com.diagbot.dto.DisclaimerInformationDTO;
 import com.diagbot.dto.GetTopPatientInfoDjDTO;
 import com.diagbot.dto.PushDTO;
 import com.diagbot.dto.RespDTO;
+import com.diagbot.dto.UsualDTO;
 import com.diagbot.dto.VersionWrapperDTO;
 import com.diagbot.vo.ConceptSearchVO;
 import com.diagbot.vo.ConceptUsualVO;
@@ -57,6 +59,25 @@ public interface AiptServiceClient {
     @PostMapping(value = "/concept/getConceptUsual")
     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.dto.ConceptBaseDTO;
 import com.diagbot.dto.ConceptRetrievalDTO;
+import com.diagbot.dto.ConceptRetrievalExtDTO;
 import com.diagbot.dto.DisclaimerInformationDTO;
 import com.diagbot.dto.GetTopPatientInfoDjDTO;
 import com.diagbot.dto.PushDTO;
 import com.diagbot.dto.RespDTO;
+import com.diagbot.dto.UsualDTO;
 import com.diagbot.dto.VersionWrapperDTO;
 import com.diagbot.vo.ConceptSearchVO;
 import com.diagbot.vo.ConceptUsualVO;
@@ -55,6 +57,18 @@ public class AiptServiceHystrix implements AiptServiceClient {
         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
     public RespDTO<List<ConceptRetrievalDTO>> retrivelConceptInfo(@Valid RetrievalVO retrievalVO) {
         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;
 
 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.vo.SearchVO;
 import com.diagbot.client.AiptServiceClient;
 import com.diagbot.dto.ConceptPushDTO;
 import com.diagbot.dto.PushDTO;
@@ -12,7 +12,6 @@ import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.util.EntityUtil;
 import com.diagbot.util.ListUtil;
 import com.diagbot.util.RespDTOUtil;
-import com.diagbot.util.StringUtil;
 import com.diagbot.vo.PushVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
@@ -98,11 +97,6 @@ public class PushFacade {
                         QuestionInfo questionInfo = questionInfoMap.get(concept.getTagName());
                         concept.setId(questionInfo.getId());
                         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.diagbot.client.AiptServiceClient;
-import com.diagbot.dto.ConceptBaseDTO;
 import com.diagbot.dto.QuestionUsualDTO;
 import com.diagbot.dto.RespDTO;
+import com.diagbot.dto.UsualDTO;
 import com.diagbot.entity.QuestionInfo;
 import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.enums.QuestionTypeEnum;
@@ -49,18 +49,18 @@ public class QuestionUsualFacade {
         conceptUsualVO.setType(type);
         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)) {
             conceptUsualVO.setDeptName("全科");
-            conceptBaseDTORespDTO = aiptServiceClient.getConceptUsual(conceptUsualVO);
+            conceptBaseDTORespDTO = aiptServiceClient.getConceptExtUsual(conceptUsualVO);
         }
         RespDTOUtil.respNGDeal(conceptBaseDTORespDTO, "获取常用标签失败");
         if (conceptBaseDTORespDTO.data != null
                 && ListUtil.isNotEmpty(conceptBaseDTORespDTO.data)) {
             //提取标签名称
             List<String> conceptName = conceptBaseDTORespDTO.data.stream()
-                    .map(ConceptBaseDTO::getName)
+                    .map(r -> r.getName())
                     .collect(Collectors.toList());
             //与question标签匹配
             QueryWrapper<QuestionInfo> questionInfoQueryWrapper = new QueryWrapper<>();
@@ -73,10 +73,13 @@ public class QuestionUsualFacade {
             Map<String, QuestionInfo> questionInfoMap
                     = questionInfoList.stream()
                     .collect(Collectors.toMap(QuestionInfo::getTagName, questionInfo -> questionInfo));
-            for (ConceptBaseDTO conceptBaseDTO : conceptBaseDTORespDTO.data) {//将概念id和概念名称放入出参
+            for (UsualDTO conceptBaseDTO : conceptBaseDTORespDTO.data) {//将概念id和概念名称放入出参
                 QuestionUsualDTO questionUsualDTO = new QuestionUsualDTO();
+                BeanUtil.copyProperties(conceptBaseDTO, questionUsualDTO);
                 questionUsualDTO.setTagName(conceptBaseDTO.getName());
-                questionUsualDTO.setConceptId(conceptBaseDTO.getConceptId());
+                if (StringUtil.isNotBlank(questionUsualDTO.getExplains())) {
+                    questionUsualDTO.setHasExplain(1);
+                }
                 questionUsualDTOList.add(questionUsualDTO);
             }
             for (QuestionUsualDTO questionUsualDTO : questionUsualDTOList) {
@@ -84,11 +87,6 @@ public class QuestionUsualFacade {
                     questionUsualDTO.setTagName(questionInfoMap.get(questionUsualDTO.getTagName()).getTagName());
                     questionUsualDTO.setName(questionInfoMap.get(questionUsualDTO.getTagName()).getName());
                     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就移除

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

+ 4 - 1
tran-service/pom.xml

@@ -172,7 +172,10 @@
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-pool2</artifactId>
         </dependency>
-
+        <dependency>
+            <groupId>io.github.lvyahui8</groupId>
+            <artifactId>spring-boot-data-aggregator-starter</artifactId>
+        </dependency>
     </dependencies>
 
     <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);
+	}
+}

+ 146 - 0
tran-service/src/main/java/com/diagbot/entity/OperationConfig.java

@@ -0,0 +1,146 @@
+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;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author zhaops
+ * @since 2020-03-27
+ */
+@TableName("tran_operation_config")
+public class OperationConfig implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private LocalDateTime gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private LocalDateTime gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 医院编码
+     */
+    private String hospitalCode;
+
+    /**
+     * 外部名称
+     */
+    private String name;
+
+    /**
+     * 内部名称
+     */
+    private String uniqueName;
+
+    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 LocalDateTime getGmtCreate() {
+        return gmtCreate;
+    }
+
+    public void setGmtCreate(LocalDateTime gmtCreate) {
+        this.gmtCreate = gmtCreate;
+    }
+    public LocalDateTime getGmtModified() {
+        return gmtModified;
+    }
+
+    public void setGmtModified(LocalDateTime 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 getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+    public String getUniqueName() {
+        return uniqueName;
+    }
+
+    public void setUniqueName(String uniqueName) {
+        this.uniqueName = uniqueName;
+    }
+
+    @Override
+    public String toString() {
+        return "OperationConfig{" +
+            "id=" + id +
+            ", isDeleted=" + isDeleted +
+            ", gmtCreate=" + gmtCreate +
+            ", gmtModified=" + gmtModified +
+            ", creator=" + creator +
+            ", modifier=" + modifier +
+            ", hospitalCode=" + hospitalCode +
+            ", name=" + name +
+            ", uniqueName=" + uniqueName +
+        "}";
+    }
+}

+ 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;
+    }
+}

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


Some files were not shown because too many files changed in this diff