Bladeren bron

Merge remote-tracking branch 'origin/dev/precSR' into dev/precSR

zhoutg 6 jaren geleden
bovenliggende
commit
0e5caa832c
96 gewijzigde bestanden met toevoegingen van 2011 en 716 verwijderingen
  1. 7 15
      aipt-service/src/main/java/com/diagbot/client/TranServiceClient.java
  2. 7 18
      aipt-service/src/main/java/com/diagbot/client/hystrix/TranServiceHystrix.java
  3. 2 0
      aipt-service/src/main/java/com/diagbot/dto/ConceptRetrievalDTO.java
  4. 4 0
      aipt-service/src/main/java/com/diagbot/dto/RetrievalDTO.java
  5. 2 1
      aipt-service/src/main/java/com/diagbot/enums/LexiconRSTypeEnum.java
  6. 5 2
      aipt-service/src/main/java/com/diagbot/enums/LexiconTypeEnum.java
  7. 245 8
      aipt-service/src/main/java/com/diagbot/facade/ClinicalFacade.java
  8. 22 17
      aipt-service/src/main/java/com/diagbot/facade/ConceptDetailFacade.java
  9. 125 34
      aipt-service/src/main/java/com/diagbot/facade/ConceptFacade.java
  10. 16 17
      aipt-service/src/main/java/com/diagbot/facade/PushFacade.java
  11. 95 60
      aipt-service/src/main/java/com/diagbot/facade/TreatmentFacade.java
  12. 18 0
      aipt-service/src/main/java/com/diagbot/mapper/ConceptMapper.java
  13. 19 0
      aipt-service/src/main/java/com/diagbot/service/ConceptService.java
  14. 28 1
      aipt-service/src/main/java/com/diagbot/service/impl/ConceptServiceImpl.java
  15. 22 0
      aipt-service/src/main/java/com/diagbot/vo/ConceptFindVO.java
  16. 2 0
      aipt-service/src/main/java/com/diagbot/vo/GetStaticKnowledgeVO.java
  17. 19 0
      aipt-service/src/main/java/com/diagbot/vo/LisConfigVO.java
  18. 5 1
      aipt-service/src/main/java/com/diagbot/vo/RetrievalVO.java
  19. 18 1
      aipt-service/src/main/java/com/diagbot/web/ConceptController.java
  20. 367 40
      aipt-service/src/main/resources/mapper/ConceptMapper.xml
  21. 51 0
      aipt-service/src/main/resources/standword.txt
  22. BIN
      docs/009.20190425知识库标准化脚本/知识库标准化执行脚本_20190703.zip
  23. 11 0
      icss-service/src/main/java/com/diagbot/client/AiptServiceClient.java
  24. 17 43
      icss-service/src/main/java/com/diagbot/client/TranServiceClient.java
  25. 13 0
      icss-service/src/main/java/com/diagbot/client/hystrix/AiptServiceHystrix.java
  26. 45 84
      icss-service/src/main/java/com/diagbot/client/hystrix/TranServiceHystrix.java
  27. 4 2
      icss-service/src/main/java/com/diagbot/dto/LisConfigDTO.java
  28. 15 0
      icss-service/src/main/java/com/diagbot/dto/OrderRetrivevalDTO.java
  29. 1 3
      icss-service/src/main/java/com/diagbot/dto/PushDTO.java
  30. 2 0
      icss-service/src/main/java/com/diagbot/dto/RetrievalDTO.java
  31. 2 1
      icss-service/src/main/java/com/diagbot/enums/FeatureTypeEnum.java
  32. 9 9
      icss-service/src/main/java/com/diagbot/facade/AssembleFacade.java
  33. 25 15
      icss-service/src/main/java/com/diagbot/facade/LisExcelResFacade.java
  34. 17 71
      icss-service/src/main/java/com/diagbot/facade/LisMappingFacade.java
  35. 30 13
      icss-service/src/main/java/com/diagbot/facade/ModuleFacade.java
  36. 66 21
      icss-service/src/main/java/com/diagbot/facade/PushFacade.java
  37. 7 16
      icss-service/src/main/java/com/diagbot/facade/QuestionFacade.java
  38. 9 9
      icss-service/src/main/java/com/diagbot/facade/QuestionUsualFacade.java
  39. 32 7
      icss-service/src/main/java/com/diagbot/facade/RetrievalFacade.java
  40. 22 0
      icss-service/src/main/java/com/diagbot/vo/ConceptFindVO.java
  41. 2 0
      icss-service/src/main/java/com/diagbot/vo/GetStaticKnowledgeVO.java
  42. 20 0
      icss-service/src/main/java/com/diagbot/vo/GetStaticVO.java
  43. 6 0
      icss-service/src/main/java/com/diagbot/vo/LisHospitalCodeVO.java
  44. 1 1
      icss-service/src/main/java/com/diagbot/web/PushController.java
  45. 3 3
      icss-service/src/main/java/com/diagbot/web/RetrievalController.java
  46. 10 0
      icssman-service/src/main/java/com/diagbot/client/KnowledgemanServiceClient.java
  47. 7 0
      icssman-service/src/main/java/com/diagbot/client/hystrix/KnowledgemanServiceHystrix.java
  48. 1 0
      icssman-service/src/main/java/com/diagbot/config/ResourceServerConfigurer.java
  49. 1 0
      icssman-service/src/main/java/com/diagbot/config/security/UrlAccessDecisionManager.java
  50. 2 1
      icssman-service/src/main/java/com/diagbot/enums/QuestionTypeEnum.java
  51. 20 4
      icssman-service/src/main/java/com/diagbot/facade/LisMappingFacade.java
  52. 6 4
      icssman-service/src/main/java/com/diagbot/facade/ModuleInfoFacade.java
  53. 78 3
      icssman-service/src/main/java/com/diagbot/facade/QuestionFacade.java
  54. 2 0
      icssman-service/src/main/java/com/diagbot/vo/ConceptExistVO.java
  55. 16 0
      icssman-service/src/main/java/com/diagbot/vo/GetConceptPacInfosVO.java
  56. 24 0
      icssman-service/src/main/java/com/diagbot/vo/IndexIcssVO.java
  57. 1 0
      icssman-service/src/main/java/com/diagbot/vo/QuestionIndexVO.java
  58. 0 1
      icssman-service/src/main/java/com/diagbot/vo/QuestionPageVO.java
  59. 13 0
      icssman-service/src/main/java/com/diagbot/web/QuestionInfoController.java
  60. 3 0
      icssman-service/src/main/resources/mapper/QuestionInfoMapper.xml
  61. 1 0
      knowledgeman-service/src/main/java/com/diagbot/config/ResourceServerConfigurer.java
  62. 1 0
      knowledgeman-service/src/main/java/com/diagbot/config/security/UrlAccessDecisionManager.java
  63. 1 1
      knowledgeman-service/src/main/java/com/diagbot/dto/GetAllInformationDTO.java
  64. 1 1
      knowledgeman-service/src/main/java/com/diagbot/dto/GetConceptDetailListDTO.java
  65. 1 1
      knowledgeman-service/src/main/java/com/diagbot/dto/GetLexiconListDTO.java
  66. 1 1
      knowledgeman-service/src/main/java/com/diagbot/dto/GetMedicalInfoListDTO.java
  67. 1 1
      knowledgeman-service/src/main/java/com/diagbot/dto/GetRelationInfoListDTO.java
  68. 1 1
      knowledgeman-service/src/main/java/com/diagbot/dto/LisSonContactListDTO.java
  69. 1 1
      knowledgeman-service/src/main/java/com/diagbot/dto/MultContactListDTO.java
  70. 1 1
      knowledgeman-service/src/main/java/com/diagbot/dto/RelationContactListDTO.java
  71. 2 2
      knowledgeman-service/src/main/java/com/diagbot/enums/LexiconRSTypeEnum.java
  72. 5 2
      knowledgeman-service/src/main/java/com/diagbot/enums/LexiconTypeEnum.java
  73. 80 49
      knowledgeman-service/src/main/java/com/diagbot/facade/ConceptFacade.java
  74. 11 16
      knowledgeman-service/src/main/java/com/diagbot/facade/RelationFacade.java
  75. 1 1
      knowledgeman-service/src/main/java/com/diagbot/service/impl/EnumsDataServiceImpl.java
  76. 13 1
      knowledgeman-service/src/main/java/com/diagbot/util/ParamConvertUtil.java
  77. 2 0
      knowledgeman-service/src/main/java/com/diagbot/vo/ConceptExistVO.java
  78. 8 2
      knowledgeman-service/src/main/java/com/diagbot/vo/GetAllInformationVO.java
  79. 16 0
      knowledgeman-service/src/main/java/com/diagbot/vo/GetConceptPacInfosVO.java
  80. 28 16
      knowledgeman-service/src/main/java/com/diagbot/web/ConceptController.java
  81. 15 14
      knowledgeman-service/src/main/resources/mapper/RelationMapper.xml
  82. 10 2
      prec-service/src/main/java/com/diagbot/dto/FileDTO.java
  83. 4 2
      prec-service/src/main/java/com/diagbot/service/UploadService.java
  84. 10 7
      prec-service/src/main/java/com/diagbot/service/impl/UploadServiceImpl.java
  85. 2 2
      prec-service/src/main/java/com/diagbot/web/UploadController.java
  86. 8 0
      tran-service/pom.xml
  87. 50 0
      tran-service/src/main/java/com/diagbot/client/CxfClient.java
  88. 3 1
      tran-service/src/main/java/com/diagbot/dto/LisConfigDTO.java
  89. 19 22
      tran-service/src/main/java/com/diagbot/facade/TranLisConfigFacade.java
  90. 7 0
      tran-service/src/main/java/com/diagbot/mapper/TranLisConfigMapper.java
  91. 7 0
      tran-service/src/main/java/com/diagbot/service/TranLisConfigService.java
  92. 10 0
      tran-service/src/main/java/com/diagbot/service/impl/TranLisConfigServiceImpl.java
  93. 18 0
      tran-service/src/main/java/com/diagbot/vo/LisConfigVO.java
  94. 4 0
      tran-service/src/main/java/com/diagbot/vo/LisHospitalCodeVO.java
  95. 18 29
      tran-service/src/main/java/com/diagbot/web/TranLisConfigController.java
  96. 28 14
      tran-service/src/main/resources/mapper/TranLisConfigMapper.xml

+ 7 - 15
aipt-service/src/main/java/com/diagbot/client/TranServiceClient.java

@@ -14,6 +14,7 @@ import com.diagbot.vo.HospitalDeptInfoVO;
 import com.diagbot.vo.HospitalSetVO;
 import com.diagbot.vo.IndexDataSaveVO;
 import com.diagbot.vo.IndexDataiIds;
+import com.diagbot.vo.LisConfigVO;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -57,22 +58,13 @@ public interface TranServiceClient {
     RespDTO<GetTopPatientInfoDTO> getTopPatientInfo(@RequestBody GetTopPatientInfoVO getTopPatientInfoVO);
 
     /**
-     * 根据医院编码获取化验公表映射关系-itemName不为空
+     * 根据医院编码和套餐名称获取化验公表映射关系
      *
-     * @param hosCodeVO
-     * @return
-     */
-    @PostMapping("/tranLisConfig/getLisConfigByHosCode_NotEmptyItemName")
-    RespDTO<Map<String, Map<String, String>>> getLisConfigByHosCode_NotEmptyItemName(@RequestBody HosCodeVO hosCodeVO);
-
-    /**
-     * 根据医院编码获取化验公表映射关系-itemName为空
-     *
-     * @param hosCodeVO
+     * @param lisConfigVO
      * @return
      */
-    @PostMapping("/tranLisConfig/getLisConfigByHosCode_EmptyItemName")
-    RespDTO<Map<String, String>> getLisConfigByHosCode_EmptyItemName(@RequestBody HosCodeVO hosCodeVO);
+    @PostMapping("/tranLisConfig/getLisConfigByMealNameAndHosCode")
+    RespDTO<Map<String, Map<String, String>>> getLisConfigByMealNameAndHosCode(@RequestBody LisConfigVO lisConfigVO);
 
     /**
      * 根据医院编码获取辅检公表映射关系
@@ -113,11 +105,11 @@ public interface TranServiceClient {
     /**
      * 根据医院编码获取化验公表映射关系,公表项做key
      *
-     * @param hosCodeVO
+     * @param lisConfigVO
      * @return
      */
     @PostMapping("/tranLisConfig/getLisConfigByUniqueNameAndHosCode")
-    RespDTO<Map<String, List<String>>> getLisConfigByUniqueNameAndHosCode(@RequestBody HosCodeVO hosCodeVO);
+    RespDTO<Map<String, List<String>>> getLisConfigByUniqueNameAndHosCode(@RequestBody LisConfigVO lisConfigVO);
 
     /**
      * 根据医院编码查询辅检公表映射,公表项做key

+ 7 - 18
aipt-service/src/main/java/com/diagbot/client/hystrix/TranServiceHystrix.java

@@ -14,6 +14,7 @@ import com.diagbot.vo.HospitalDeptInfoVO;
 import com.diagbot.vo.HospitalSetVO;
 import com.diagbot.vo.IndexDataSaveVO;
 import com.diagbot.vo.IndexDataiIds;
+import com.diagbot.vo.LisConfigVO;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -49,26 +50,14 @@ public class TranServiceHystrix implements TranServiceClient {
     }
 
     /**
-     * 根据医院编码获取化验公表映射关系-itemName不为空
+     * 根据医院编码和套餐名称获取化验公表映射关系
      *
-     * @param hosCodeVO
+     * @param lisConfigVO
      * @return
      */
     @Override
-    public RespDTO<Map<String, Map<String, String>>> getLisConfigByHosCode_NotEmptyItemName(@RequestBody HosCodeVO hosCodeVO) {
-        log.error("【hystrix】调用{}异常", "getLisConfigByHosCode_NotEmptyItemName");
-        return null;
-    }
-
-    /**
-     * 根据医院编码获取化验公表映射关系-itemName为空
-     *
-     * @param hosCodeVO
-     * @return
-     */
-    @Override
-    public RespDTO<Map<String, String>> getLisConfigByHosCode_EmptyItemName(@RequestBody HosCodeVO hosCodeVO) {
-        log.error("【hystrix】调用{}异常", "getLisConfigByHosCode_EmptyItemName");
+    public RespDTO<Map<String, Map<String, String>>> getLisConfigByMealNameAndHosCode(@RequestBody LisConfigVO lisConfigVO) {
+        log.error("【hystrix】调用{}异常", "getLisConfigByMealNameAndHosCode");
         return null;
     }
 
@@ -123,11 +112,11 @@ public class TranServiceHystrix implements TranServiceClient {
     /**
      * 根据医院编码获取化验公表映射关系,公表项做key
      *
-     * @param hosCodeVO
+     * @param lisConfigVO
      * @return
      */
     @Override
-    public RespDTO<Map<String, List<String>>> getLisConfigByUniqueNameAndHosCode(@RequestBody HosCodeVO hosCodeVO) {
+    public RespDTO<Map<String, List<String>>> getLisConfigByUniqueNameAndHosCode(@RequestBody LisConfigVO lisConfigVO) {
         log.error("【hystrix】调用{}异常", "getLisConfigByUniqueNameAndHosCode");
         return null;
     }

+ 2 - 0
aipt-service/src/main/java/com/diagbot/dto/ConceptRetrievalDTO.java

@@ -20,4 +20,6 @@ public class ConceptRetrievalDTO {
     private Long libTypeId;//标签类型id
     private String libTypeName;//标签类型名称
     private Integer type;//questionType
+    private Long uniqueId;//公表id
+    private String uniqueName;//公表名称
 }

+ 4 - 0
aipt-service/src/main/java/com/diagbot/dto/RetrievalDTO.java

@@ -27,4 +27,8 @@ public class RetrievalDTO {
     private String libTypeName;
     //icss标签type
     private Integer type;
+    //公表名称
+    private String uniqueName;
+    //公表ID
+    private Long uniqueId;
 }

+ 2 - 1
aipt-service/src/main/java/com/diagbot/enums/LexiconRSTypeEnum.java

@@ -26,7 +26,8 @@ public enum LexiconRSTypeEnum implements KeyedNamed {
     SPEC(15,"规格"),
     HAS(16,"有"),
     ORDER_BY(17,"包含排列于"),
-    SUBITEM(18,"包含子项");
+    SUBITEM(18,"包含子项"),
+    PUSH(19,"推送");
 
     @Setter
     private Integer key;

+ 5 - 2
aipt-service/src/main/java/com/diagbot/enums/LexiconTypeEnum.java

@@ -18,7 +18,7 @@ public enum LexiconTypeEnum implements KeyedNamed {
     NEGATIVE(7,"阴性"),
     POSITIVE(8,"阳性"),
     COMPANY(9,"单位"),
-    DRUGS(10,"药品"),
+    DRUGS(10,"药品通用名"),
     TREATMENT(11,"治疗"),
     LIS_PACKAGE(12,"化验套餐"),
     LIS_DETAILS(13,"化验明细"),
@@ -76,7 +76,10 @@ public enum LexiconTypeEnum implements KeyedNamed {
     FAMILY_HISTORY(64,"家族史"),
     FOOD_ALLERGY_HISTORY(65,"食物过敏史"),
     HISTORY_OF_DRUG_ALLERGY(66,"药物过敏史"),
-    FAMILY_RELATED_INFECTIOUS_DISEASE_HISTORY(67,"家族相关传染病史");
+    FAMILY_RELATED_INFECTIOUS_DISEASE_HISTORY(67,"家族相关传染病史"),
+    FURTHER_CONSULTATION(68,"复诊"),
+    DIAGNOSTIC_CRITERIA(69,"诊断依据条件"),
+    OTHER_DIAGNOSTIC_CRITERIA(70,"诊断依据其他");
 
 
     @Setter

+ 245 - 8
aipt-service/src/main/java/com/diagbot/facade/ClinicalFacade.java

@@ -7,29 +7,37 @@ import com.diagbot.client.bean.CalculateData;
 import com.diagbot.client.bean.GdbResponse;
 import com.diagbot.client.bean.Response;
 import com.diagbot.client.bean.ResponseData;
-import com.diagbot.dto.FeatureConceptDTO;
 import com.diagbot.dto.Lexeme;
 import com.diagbot.dto.LisResult;
 import com.diagbot.entity.ScaleContent;
-import com.diagbot.entity.SysLog;
 import com.diagbot.enums.ScaleTypeEnum;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
 import com.diagbot.service.ScaleContentService;
-import com.diagbot.util.DateUtil;
 import com.diagbot.util.ListUtil;
 import com.diagbot.vo.SearchVo;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.Resource;
 import org.springframework.stereotype.Component;
 import org.springframework.web.bind.annotation.RequestBody;
 
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
  * <p>
- *  数据处理业务层
+ * 数据处理业务层
  * </p>
  *
  * @author Mark Huang
@@ -45,13 +53,18 @@ public class ClinicalFacade {
     @Autowired
     private NLPServiceClient nlpServiceClient;
 
-    private static String up = "增高";
+    @Autowired
+    private ConceptFacade conceptFacade;
+
+    private static String up = "升高";
     private static String down = "降低";
     private static String normal = "正常";
 
     private static String pos = "阳性";
     private static String neg = "阴性";
 
+    //    private static Map<String, List<Map<String, String>>> standWordObj = null;
+
     /**
      * 处理临床数据
      *
@@ -60,8 +73,12 @@ public class ClinicalFacade {
      */
     public ResponseData processClinicalData(@RequestBody SearchVo searchVo) {
         SearchVo sData = searchVo;
-
-        Response<List<Lexeme>> resp = nlpServiceClient.split(sData.getSymptom());
+//        Map<String, List<Map<String, String>>> standWord = getStandWord();
+//        //        standWordObj = getStandWord();
+//        Response<List<Lexeme>> resp = nlpServiceClient.split(sData.getSymptom());
+//        if (null != resp && null != resp.getData()) {
+//            addStandWord(resp.getData(), standWord, sData);
+//        }
 
         sData.setLisArr(processLis(sData.getLisArr()));
 
@@ -140,7 +157,6 @@ public class ClinicalFacade {
         return list;
     }
 
-
     public List<ScaleContent> getContent(String scaleName, String pushContent) {
         List<ScaleContent> list = scaleContentService.getContentByName(scaleName);
         for (ScaleContent scaleContent : list) {
@@ -180,4 +196,225 @@ public class ClinicalFacade {
         }
         return response;
     }
+
+    public SearchVo addStandWord(List<Lexeme> lexemes, Map<String, List<Map<String, String>>> standWords, SearchVo sData) {
+        List<Lexeme> feature = new ArrayList<>();
+        //收集分词结果中体征指标或体征指标值(数字)
+        for (int i = 0; i < lexemes.size(); i++) {
+            if (lexemes.get(i).getProperty().contains("33") || lexemes.get(i).getProperty().contains("28")
+                    || lexemes.get(i).getProperty().contains("2") || lexemes.get(i).getProperty().contains("9")
+                    ) {
+                feature.add(lexemes.get(i));
+            }
+        }
+        //根据收集到的分词结果把体征指标和对应体征指标值(数字)拼接
+        List<String> featureType = new ArrayList<>();
+        for (int i = 0; i < feature.size(); i++) {
+            boolean featureTypeState = true;
+            if (i < feature.size() - 2) {
+                if ((feature.get(i).getProperty().contains("33") && feature.get(i + 1).getProperty().contains("28")
+                        && feature.get(i + 2).getProperty().contains("2"))
+                        || (feature.get(i).getProperty().contains("33") && feature.get(i + 1).getProperty().contains("28")
+                        && feature.get(i + 2).getProperty().contains("9"))) {
+                    featureType.add(feature.get(i).getText() + "\t" + feature.get(i + 1).getText() + "\t"
+                            + feature.get(i + 2).getText());
+                    featureTypeState = false;
+                }
+            }
+            if (i < feature.size() - 1 && featureTypeState) {
+                if (feature.get(i).getProperty().contains("33") && feature.get(i + 1).getProperty().contains("28")) {
+                    featureType.add(feature.get(i).getText() + "\t" + feature.get(i + 1).getText());
+                }
+            }
+        }
+        //将标准词中体征指标值(数字)与分词结果中体征指标值(数字)比较
+        for (String f : featureType) {
+            String[] features = f.split("\t");
+            if (standWords.containsKey(features[0])) {
+                List<Map<String, String>> standWordList = standWords.get(features[0]);
+                for (Map<String, String> standWordMap : standWordList) {
+                    if (standWordMap.containsKey("op") && standWordMap.containsKey("unit")
+                            && standWordMap.containsKey("value")) {
+                        if (features.length == 2) {
+                            judgment(sData, features, features[0], standWordMap);
+                        } else {
+                            if (standWordMap.get("unit").equals(features[2])) {
+                                judgment(sData, features, features[0], standWordMap);
+                            }
+                        }
+                    } else if (standWordMap.containsKey("op") && standWordMap.containsKey("value")) {
+                        if (features.length == 2) {
+                            judgment(sData, features, features[0], standWordMap);
+                        }
+                    }
+                }
+            }
+        }
+        return sData;
+    }
+
+    //将标准词中体征指标值(数字)与分词结果中体征指标值(数字)比较
+    private void judgment(SearchVo sData, String[] features, String standWordKey, Map<String, String> standWordMap) {
+        if (standWordMap.get("op").contains(">=") || standWordMap.get("op").contains("≥")
+                || standWordMap.get("op").contains(">") || standWordMap.get("op").contains("大于")
+                || standWordMap.get("op").contains(">") || standWordMap.get("op").contains("大")) {
+            //单独处理  血压≥140/90mmHg   类似情况
+            if (features[1].contains("/")) {
+                if (standWordMap.get("value").contains("/")) {
+                    String[] feature = features[1].split("/");
+                    Integer featuresSBP = Integer.valueOf(feature[0]); //分词特征收缩压
+                    Integer featuresDBP = Integer.valueOf(feature[1]); //分词特征舒张压
+
+                    String[] values = standWordMap.get("value").split("/");
+                    Integer standWordSBP = Integer.valueOf(values[0]); //标准词收缩压
+                    Integer standWordDBP = Integer.valueOf(values[1]); //标准词舒张压
+                    if (featuresSBP > standWordSBP && featuresDBP > standWordDBP) {
+                        String standWord = standWordKey + standWordMap.get("op") + standWordMap.get("value") + standWordMap.get("unit") + "。";
+                        sData.setSymptom(sData.getSymptom() + standWord);
+                        System.out.println(sData.getSymptom());
+                    }
+                }
+            } else {
+                String num = getNum(standWordMap.get("value"));
+                if (Double.valueOf(getNum(features[1])) > Double.valueOf(num)) {
+                    String standWord = standWordKey + standWordMap.get("op") + standWordMap.get("value") + standWordMap.get("unit") + "。";
+                    sData.setSymptom(sData.getSymptom() + standWord);
+                    System.out.println(sData.getSymptom());
+
+                }
+            }
+        } else if (standWordMap.get("op").contains("<=") || standWordMap.get("op").contains("≤")
+                || standWordMap.get("op").contains("<") || standWordMap.get("op").contains("小于")
+                || standWordMap.get("op").contains("<") || standWordMap.get("op").contains("少于")
+                || standWordMap.get("op").contains("小")) {
+            //单独处理  血压小于90/60mmHg   类似情况
+            if (standWordMap.get("value").contains("/")) {
+                if (features[1].contains("/")) {
+                    String[] feature = features[1].split("/");
+                    Integer featuresSBP = Integer.valueOf(feature[0]); //收缩压
+                    Integer featuresDBP = Integer.valueOf(feature[1]); //舒张压
+
+                    String[] values = standWordMap.get("value").split("/");
+                    Integer standWordSBP = Integer.valueOf(values[0]); //收缩压
+                    Integer standWordDBP = Integer.valueOf(values[1]); //舒张压
+                    if (featuresSBP < standWordSBP && featuresDBP < standWordDBP) {
+                        String standWord = standWordKey + standWordMap.get("op") + standWordMap.get("value") + standWordMap.get("unit") + "。";
+                        sData.setSymptom(sData.getSymptom() + standWord);
+                        System.out.println(sData.getSymptom());
+                    }
+                }
+            } else {
+                String num = getNum(standWordMap.get("value"));
+                if (Double.valueOf(getNum(features[1])) < Double.valueOf(num)) {
+                    String standWord = standWordKey + standWordMap.get("op") + standWordMap.get("value") + standWordMap.get("unit") + "。";
+                    sData.setSymptom(sData.getSymptom() + standWord);
+                    System.out.println(sData.getSymptom());
+                }
+            }
+        }
+    }
+
+    private String getNum(String standWord) {
+        StringBuffer sb = new StringBuffer();
+        try {
+            for (String num : standWord.replaceAll("[^0-9]", ",").split(",")) {
+                if (num.length() > 0) {
+                    sb.append(num);
+                }
+            }
+        } catch (NumberFormatException e) {
+            e.printStackTrace();
+            System.out.println(e.getMessage() + "不是标准数字");
+        }
+        return sb.toString();
+    }
+
+    private Map<String, List<Map<String, String>>> getStandWord() {
+        Map<String, List<Map<String, String>>> standWordObj = new HashMap<>();
+        List<List<Lexeme>> splitStandWords = new ArrayList<>();
+        List<Lexeme> data = null;
+        /*BufferedReader reader = null;
+        InputStream inputStream = null;
+        String line = "";
+        try {
+            //file = ResourceUtils.getFile("classpath:standword.txt");
+            //            Resource resource = new ClassPathResource("standword.txt");
+            ClassPathResource classPathResource = new ClassPathResource("standword.txt");
+            inputStream = classPathResource.getInputStream();
+            //            file = resource.getFile();
+            reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
+            while ((line = reader.readLine()) != null) {
+                data = nlpServiceClient.split(line).getData();
+                splitStandWords.add(data);
+                //                standWord.add(line);
+            }
+        } catch (FileNotFoundException e) {
+            e.printStackTrace();
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                reader.close();
+                inputStream.close();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }*/
+        List<String> standWords = conceptFacade.getStandWord();
+        for (String standWord : standWords) {
+            data = nlpServiceClient.split(standWord).getData();
+            splitStandWords.add(data);
+        }
+
+        List<Map<String, String>> standWordObjValList = null;
+        Map<String, String> standWordObjVal = null;
+        for (List<Lexeme> splitStandWord : splitStandWords) {
+            standWordObjValList = new ArrayList<>();
+            standWordObjVal = new HashMap<>();
+            int i = 0;
+            String standWordObjKey = "";
+            for (Lexeme lexeme : splitStandWord) {
+                i++;
+                //                if ("\uFEFF".equals(lexeme.getText()) || lexeme.getText().length() <= 0) {
+                //                    continue;
+                //                }
+                if (lexeme.getProperty().contains("1") || lexeme.getProperty().contains("5")
+                        || lexeme.getProperty().contains("33")) {
+                    if (!standWordObj.containsKey(lexeme.getText())) {
+                        standWordObj.put(lexeme.getText(), standWordObjValList);
+                    } else {
+                        standWordObjKey = lexeme.getText();
+                    }
+                } else if (lexeme.getProperty().contains("44")) {
+
+                    if (standWordObjVal.containsKey("op")) {
+                        standWordObjVal.put("op", standWordObjVal.get("op") + "," + lexeme.getText());
+                    } else {
+                        standWordObjVal.put("op", lexeme.getText());
+                    }
+                } else if (lexeme.getProperty().contains("13") || lexeme.getProperty().contains("28")) {
+                    if (standWordObjVal.containsKey("value")) {
+                        standWordObjVal.put("value", standWordObjVal.get("value") + "," + lexeme.getText());
+                    } else {
+                        standWordObjVal.put("value", lexeme.getText());
+                    }
+                } else if (lexeme.getProperty().contains("2") || lexeme.getProperty().contains("9")) {
+                    if (standWordObjVal.containsKey("unit")) {
+                        standWordObjVal.put("unit", standWordObjVal.get("unit") + "," + lexeme.getText());
+                    } else {
+                        standWordObjVal.put("unit", lexeme.getText());
+                    }
+                }
+                if (splitStandWord.size() == i) {
+                    if (standWordObj.containsKey(standWordObjKey)) {
+                        standWordObj.get(standWordObjKey).add(standWordObjVal);
+                    } else {
+                        standWordObjValList.add(standWordObjVal);
+                    }
+                }
+            }
+        }
+        return standWordObj;
+    }
+
 }

+ 22 - 17
aipt-service/src/main/java/com/diagbot/facade/ConceptDetailFacade.java

@@ -66,7 +66,10 @@ public class ConceptDetailFacade extends ConceptDetailServiceImpl {
                 conceptIntroduceVO.setPosition(PositionTypeEnum.T2.getKey());
             }
         }
-        conceptDetailQueryWrapper.apply("find_in_set({0},position)", conceptIntroduceVO.getPosition());
+        //position=0,返回所有位置的内容
+        if (!conceptIntroduceVO.getPosition().equals(0)) {
+            conceptDetailQueryWrapper.apply("find_in_set({0},position)", conceptIntroduceVO.getPosition());
+        }
         if (ListUtil.isNotEmpty(conceptIntroduceVO.getTitles())) {
             conceptDetailQueryWrapper.in("title", conceptIntroduceVO.getTitles());
         }
@@ -108,27 +111,29 @@ public class ConceptDetailFacade extends ConceptDetailServiceImpl {
     /**
      * 是否存在提示信息-列表
      *
-     * @param nameList
-     * @param libType
+     * @param conceptList
      * @return
      */
-    public Map<String, Concept> existList(List<String> nameList, Integer libType) {
-        List<Concept> concepts = conceptFacade.getListByNamesAndType(nameList, libType);
-        Map<String, Concept> retMap = new LinkedHashMap<>();
-        if (ListUtil.isNotEmpty(concepts)) {
-            List<Long> conceptIds
-                    = concepts.stream().map(concept -> concept.getId()).collect(Collectors.toList());
+    public Map<String, Map<Long, List<ConceptDetail>>> hasConDetail(List<Concept> conceptList) {
+        Map<String, Map<Long, List<ConceptDetail>>> retMap = new LinkedHashMap<>();
+        Map<Long, List<ConceptDetail>> retSubMap = new LinkedHashMap<>();
+        if (ListUtil.isNotEmpty(conceptList)) {
+            List<Long> conceptIds = conceptList.stream().map(concept -> concept.getId()).collect(Collectors.toList());
             QueryWrapper<ConceptDetail> conceptDetailQueryWrapper = new QueryWrapper<>();
-            conceptDetailQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
-                    .in("concept_id", conceptIds);
+            conceptDetailQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey()).in("concept_id", conceptIds);
             List<ConceptDetail> conceptDetailList = this.list(conceptDetailQueryWrapper);
             if (ListUtil.isNotEmpty(conceptDetailList)) {
-                Map<Long, List<ConceptDetail>> conceptDetailMap
-                        = EntityUtil.makeEntityListMap(conceptDetailList, "conceptId");
-                for (Concept concept : concepts) {
-                    if (conceptDetailMap.containsKey(concept.getId())
-                            && ListUtil.isNotEmpty(conceptDetailMap.get(concept.getId()))) {
-                        retMap.put(concept.getLibName(), concept);
+                Map<Long, List<ConceptDetail>> conceptDetailMap = EntityUtil.makeEntityListMap(conceptDetailList, "conceptId");
+                for (Concept concept : conceptList) {
+                    if (retMap.containsKey(concept.getLibName())) {
+                        retSubMap = retMap.get(concept.getLibName());
+                    }
+                    if (retSubMap == null) {
+                        retSubMap = new LinkedHashMap<>();
+                    }
+                    if (conceptDetailMap.containsKey(concept.getId()) && ListUtil.isNotEmpty(conceptDetailMap.get(concept.getId()))) {
+                        retSubMap.put(concept.getLibType(), conceptDetailMap.get(concept.getId()));
+                        retMap.put(concept.getLibName(), retSubMap);
                     }
                 }
             }

+ 125 - 34
aipt-service/src/main/java/com/diagbot/facade/ConceptFacade.java

@@ -15,16 +15,18 @@ import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
 import com.diagbot.service.impl.ConceptServiceImpl;
 import com.diagbot.util.BeanUtil;
+import com.diagbot.util.IntegerUtil;
 import com.diagbot.util.ListUtil;
 import com.diagbot.util.ParamConvertUtil;
 import com.diagbot.util.StringUtil;
 import com.diagbot.vo.ConceptBaseVO;
 import com.diagbot.vo.ConceptExistVO;
+import com.diagbot.vo.ConceptFindVO;
 import com.diagbot.vo.ConceptSearchVO;
 import com.diagbot.vo.ConceptUsualVO;
-import com.diagbot.vo.ExistListByConceptIdsVO;
 import com.diagbot.vo.GetStaticKnowledgeVO;
 import com.diagbot.vo.RetrievalVO;
+import com.google.common.collect.Lists;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
@@ -101,6 +103,38 @@ public class ConceptFacade extends ConceptServiceImpl {
         return map;
     }
 
+    /**
+     * 根据概念Id列表获取概念列表Map
+     *
+     * @param conceptFindVO 搜索参数
+     * @return 术语id和术语 Map
+     */
+    public Map<Long, String> getConceptCondMap(ConceptFindVO conceptFindVO) {
+        //入参验证
+        if (ListUtil.isEmpty(conceptFindVO.getConceptIds())) {
+            throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "术语列表不能为空");
+        }
+
+        if (IntegerUtil.isNull(conceptFindVO.getAge())) {
+            throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "年龄不能为空");
+        }
+
+        if (IntegerUtil.isNull(conceptFindVO.getSexType())) {
+            throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "性别不能为空");
+        }
+
+        //获取结构
+        List<ConceptBaseDTO> concepts
+                = this.getConceptConMap(conceptFindVO);
+
+        //出参封装
+        Map<Long, String> map = new HashMap<>();
+        if (ListUtil.isNotEmpty(concepts)) {
+            map = concepts.stream().collect(Collectors.toMap(r -> r.getConceptId(), r -> r.getName()));
+        }
+        return map;
+    }
+
     /**
      * 根据概念Id列表获取概念列表
      *
@@ -133,6 +167,19 @@ public class ConceptFacade extends ConceptServiceImpl {
         return list;
     }
 
+    /**
+     * 根据名称获取概念list
+     *
+     * @param nameList
+     * @return
+     */
+    public List<Concept> getListByNames(List<String> nameList) {
+        QueryWrapper<Concept> conceptQueryWrapper = new QueryWrapper<>();
+        conceptQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
+                .in("lib_name", nameList);
+        List<Concept> list = this.list(conceptQueryWrapper);
+        return list;
+    }
 
     /**
      * 根据名称和类型获取概念列表Map
@@ -213,14 +260,14 @@ public class ConceptFacade extends ConceptServiceImpl {
      * @param retrievalVO
      * @return
      */
-    public List<ConceptRetrievalDTO> retrivelConceptInfo(RetrievalVO retrievalVO){
+    public List<ConceptRetrievalDTO> retrivelConceptInfo(RetrievalVO retrievalVO) {
         Boolean bla = true;
-        if (null != retrievalVO.getType()){
-            if(retrievalVO.getType().intValue() == ConceptTypeEnum.Lis.getKey()){//如果是化验,添加化验子项类型
-                retrievalVO.setDetilType(LexiconTypeEnum.LIS_DETAILS.getKey());
+        if (null != retrievalVO.getType()) {
+            if (retrievalVO.getType().intValue() == ConceptTypeEnum.Lis.getKey()) {//如果是化验,添加化验子项类型
+                retrievalVO.setDetailType(LexiconTypeEnum.LIS_DETAILS.getKey());
                 bla = true;
-            }else if(retrievalVO.getType().intValue() == ConceptTypeEnum.Past.getKey()
-                    || retrievalVO.getType().intValue() == ConceptTypeEnum.Other.getKey()){//如果是其他史设置其他史类型
+            } else if (retrievalVO.getType().intValue() == ConceptTypeEnum.Past.getKey()
+                    || retrievalVO.getType().intValue() == ConceptTypeEnum.Other.getKey()) {//如果是其他史设置其他史类型
                 List<Integer> typeList = new ArrayList<>();
                 typeList.add(LexiconTypeEnum.HISTORY_OF_PAST_DISEASES.getKey());
                 typeList.add(LexiconTypeEnum.HISTORY_OF_TRAUMA.getKey());
@@ -238,16 +285,24 @@ public class ConceptFacade extends ConceptServiceImpl {
                 retrievalVO.setOtherType(typeList);
                 bla = false;
             }
-            if(bla){
+            if (bla) {
                 retrievalVO.setType(ParamConvertUtil.conceptConvert2Lib(retrievalVO.getType()));
             }
         }
-        List<ConceptRetrievalDTO> conceptRetrievalDTOS = this.retrievalConcept(retrievalVO);
+        List<ConceptRetrievalDTO> conceptRetrievalDTOS = Lists.newArrayList();
+        if (retrievalVO.getIsStatic().equals(1)) {
+            conceptRetrievalDTOS = this.staticKnowledge(retrievalVO);
+        } else {
+            conceptRetrievalDTOS = this.retrievalConcept(retrievalVO);
+        }
+
         List<ConceptRetrievalDTO> res = new ArrayList<>();
         List<Long> selfList = new ArrayList<>(); // 本体
         List<Long> subList = new ArrayList<>(); // 子项
+        List<String> conceptNameList = new ArrayList<>();//名称结果集保证数据唯一
+        List<Long> uniqueIdList = new ArrayList<>();
         for (ConceptRetrievalDTO bean : conceptRetrievalDTOS) {
-            if(StringUtil.isNotEmpty(bean.getParentName())) { // 重置showType
+            if (StringUtil.isNotEmpty(bean.getParentName())) { // 重置showType
                 bean.setShowType(2L);
             }
             if (bean.getShowType().intValue() == 1) { // 本体
@@ -258,21 +313,54 @@ public class ConceptFacade extends ConceptServiceImpl {
         }
         // 有本体,过滤同义词和子项;无本体,有子项,过滤同义词
         for (ConceptRetrievalDTO bean : conceptRetrievalDTOS) {
-            if(bean.getShowType().intValue() == 1) {
-                res.add(bean);
-            } else if (bean.getShowType().intValue() == 2) {
-                if(!selfList.contains(bean.getParentId())) {
+            if (bean.getShowType().intValue() == 1) {
+                if(retrievalVO.getIsSonShow().intValue() == 0){//isSonShow为0执行检索去重逻辑
                     res.add(bean);
+                }else {//sSonShow不为0执行静态知识检索去重逻辑
+                    if(bean.getUniqueId() != null && bean.getUniqueId() != 0){
+                        if(!uniqueIdList.contains(bean.getUniqueId())){
+                            res.add(bean);
+                            uniqueIdList.add(bean.getUniqueId());
+                        }
+                    }else {
+                        res.add(bean);
+                    }
+                }
+            } else if (bean.getShowType().intValue() == 2) {
+                if(retrievalVO.getIsSonShow().intValue() == 0){//isSonShow为0执行检索去重逻辑
+                    if (!selfList.contains(bean.getParentId()) && !conceptNameList.contains(bean.getParentName()) ) {
+                        conceptNameList.add(bean.getParentName());
+                        res.add(bean);
+                    }
+                } else {//sSonShow不为0执行静态知识检索去重逻辑
+                    if(bean.getUniqueId() != null && bean.getUniqueId() != 0){
+                        if(!uniqueIdList.contains(bean.getUniqueId())){
+                            res.add(bean);
+                            uniqueIdList.add(bean.getUniqueId());
+                        }
+                    }
                 }
             } else if (bean.getShowType().intValue() == 0) {
-                if(!selfList.contains(bean.getSelfId()) && !subList.contains(bean.getSelfId())) {
-                    res.add(bean);
+                if(retrievalVO.getIsSonShow().intValue() == 0){//isSonShow为0执行检索去重逻辑
+                    if (!selfList.contains(bean.getSelfId()) && !subList.contains(bean.getSelfId()) && !conceptNameList.contains(bean.getSelfName())) {
+                        conceptNameList.add(bean.getSelfName());
+                        res.add(bean);
+                    }
+                }else {//SonShow不为0执行静态知识检索去重逻辑
+                    if(bean.getUniqueId() != null && bean.getUniqueId() != 0){
+                        if(!uniqueIdList.contains(bean.getUniqueId())){
+                            res.add(bean);
+                            uniqueIdList.add(bean.getUniqueId());
+                        }
+                    }else {
+                        res.add(bean);
+                    }
                 }
             }
         }
         //把本体的sameName过滤掉
         for (ConceptRetrievalDTO conceptRetrievalDTO : res) {
-            if(conceptRetrievalDTO.getSameName() != null && conceptRetrievalDTO.getSameName().equals(conceptRetrievalDTO.getSelfName())){
+            if (conceptRetrievalDTO.getSameName() != null && conceptRetrievalDTO.getSameName().equals(conceptRetrievalDTO.getSelfName())) {
                 conceptRetrievalDTO.setSameName(null);
             }
             conceptRetrievalDTO.setType(ParamConvertUtil.libConvert2Concept(conceptRetrievalDTO.getLibTypeId().intValue()));
@@ -287,11 +375,23 @@ public class ConceptFacade extends ConceptServiceImpl {
      * @param getStaticKnowledgeVO
      * @return
      */
-    public List<RetrievalDTO> getStaticKnowledge(GetStaticKnowledgeVO getStaticKnowledgeVO){
+    public List<RetrievalDTO> getStaticKnowledge(GetStaticKnowledgeVO getStaticKnowledgeVO) {
         List<RetrievalDTO> retrievalDTOS = new ArrayList<>();
         RetrievalVO retrievalVO = new RetrievalVO();
         RetrievalDTO retrievalDTO = new RetrievalDTO();
-        BeanUtil.copyProperties(getStaticKnowledgeVO,retrievalVO);
+        BeanUtil.copyProperties(getStaticKnowledgeVO, retrievalVO);
+        retrievalVO.setIsSonShow(1);
+        retrievalVO.setIsStatic(1);
+        List<Integer> types = new ArrayList<>();
+        for (Integer type : getStaticKnowledgeVO.getTypes()) {
+            if(type.intValue() == ConceptTypeEnum.Lis.getKey()){//单独设置化验类型
+                retrievalVO.setType(type);
+            }else {//查询时去掉化验
+                types.add(ParamConvertUtil.conceptConvert2Lib(type));
+            }
+        }
+        //设置类型为诊断、药品、辅检
+        retrievalVO.setOtherType(types);
         //获取标签信息
         List<ConceptRetrievalDTO> conceptRetrievalDTOList = this.retrivelConceptInfo(retrievalVO);
         List<RetrievalDTO> staticRetrievalList = new ArrayList<>();
@@ -301,7 +401,9 @@ public class ConceptFacade extends ConceptServiceImpl {
                 retrievalDTO = new RetrievalDTO();
                 retrievalDTO.setConceptId(conceptRetrievalDTO.getSelfId());
                 retrievalDTO.setName(conceptRetrievalDTO.getSelfName());
+                retrievalDTO.setUniqueName(conceptRetrievalDTO.getUniqueName());
                 if (StringUtil.isNotEmpty(conceptRetrievalDTO.getParentName())) {//parent不为空时说明有子项,返回父级id
+                    retrievalDTO.setConceptId(conceptRetrievalDTO.getParentId());
                     retrievalDTO.setName(conceptRetrievalDTO.getParentName());
                     retrievalDTO.setRetrievalName(conceptRetrievalDTO.getSelfName());
                 }
@@ -315,21 +417,10 @@ public class ConceptFacade extends ConceptServiceImpl {
                 retrievalDTOS.add(retrievalDTO);
             }
         }
-        //判断是否存在静态知识
-        List<Long> cenceptIdList = retrievalDTOS.stream().map(RetrievalDTO::getConceptId).collect(Collectors.toList());
-        ExistListByConceptIdsVO existListByConceptIdsVO = new ExistListByConceptIdsVO();
-        existListByConceptIdsVO.setConceptIds(cenceptIdList);
-        List<Long> existConceptIdList = conceptDetailFacade.existListByConceptIds(existListByConceptIdsVO);
-        if(ListUtil.isNotEmpty(existConceptIdList)){
-            for (RetrievalDTO retrievalDTOInfo : retrievalDTOS) {
-                for (Long concept : existConceptIdList) {
-                    if (retrievalDTOInfo.getConceptId().intValue() == concept.intValue()){
-                        retrievalDTO = new RetrievalDTO();
-                        BeanUtil.copyProperties(retrievalDTOInfo,retrievalDTO);
-                        staticRetrievalList.add(retrievalDTO);
-                    }
-                }
-            }
+        for (RetrievalDTO retrievalDTOInfo : retrievalDTOS) {
+            retrievalDTO = new RetrievalDTO();
+            BeanUtil.copyProperties(retrievalDTOInfo, retrievalDTO);
+            staticRetrievalList.add(retrievalDTO);
         }
         return staticRetrievalList;
     }

+ 16 - 17
aipt-service/src/main/java/com/diagbot/facade/PushFacade.java

@@ -29,6 +29,7 @@ import com.diagbot.util.RespDTOUtil;
 import com.diagbot.util.StringUtil;
 import com.diagbot.vo.ConceptBaseVO;
 import com.diagbot.vo.HospitalSetVO;
+import com.diagbot.vo.LisConfigVO;
 import com.diagbot.vo.SearchVo;
 import com.google.common.collect.Lists;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -379,32 +380,26 @@ public class PushFacade {
      * @return
      */
     public List<LisResult> addUniqueName(List<LisResult> lisResults, String hosCode) {
-        HosCodeVO hosCodeVO = new HosCodeVO();
-        hosCodeVO.setHosCode(hosCode);
         //化验项转公表内容,参数处理
         if (ListUtil.isNotEmpty(lisResults)) {
-            RespDTO<Map<String, Map<String, String>>> lisConfigRes = tranServiceClient.getLisConfigByHosCode_NotEmptyItemName(hosCodeVO);
-            RespDTO<Map<String, String>> lisConfigWithEmptyItemNameRes = tranServiceClient.getLisConfigByHosCode_EmptyItemName(hosCodeVO);
+            List<String> mealNameList = lisResults.stream().map(lisResult -> lisResult.getName()).collect(Collectors.toList());
+            LisConfigVO lisConfigVO = new LisConfigVO();
+            lisConfigVO.setHosCode(hosCode);
+            lisConfigVO.setMealNameList(mealNameList);
+            RespDTO<Map<String, Map<String, String>>> lisConfigRes = tranServiceClient.getLisConfigByMealNameAndHosCode(lisConfigVO);
             Map<String, Map<String, String>> lisConfigMap = new LinkedHashMap<>();
-            Map<String, String> lisConfigMap_emptyItemName = new LinkedHashMap<>();
             if (RespDTOUtil.respIsOK(lisConfigRes)) {
                 lisConfigMap = lisConfigRes.data;
             }
-            if (RespDTOUtil.respIsOK(lisConfigWithEmptyItemNameRes)) {
-                lisConfigMap_emptyItemName = lisConfigWithEmptyItemNameRes.data;
-            }
             for (LisResult lisResult : lisResults) {
                 if (!lisResult.getSource().equals(LisSourceEnum.Outer.getKey())) {
                     continue;
                 }
-                if (StringUtil.isNotBlank(lisResult.getName())) {
-                    if (StringUtil.isNotBlank(lisResult.getDetailName())) {
-                        if (lisConfigMap.get(lisResult.getName()) != null) {
-                            lisResult.setUniqueName(lisConfigMap.get(lisResult.getName()).get(lisResult.getDetailName()));
-                        }
-                    } else {
-                        lisResult.setUniqueName(lisConfigMap_emptyItemName.get(lisResult.getName()));
-                    }
+                if (lisResult.getDetailName() == null) {
+                    lisResult.setDetailName("");
+                }
+                if (lisConfigMap.get(lisResult.getName()) != null) {
+                    lisResult.setUniqueName(lisConfigMap.get(lisResult.getName()).get(lisResult.getDetailName()));
                 }
             }
         }
@@ -422,8 +417,12 @@ public class PushFacade {
     public List<ConceptPushDTO> addClientName(List<ConceptPushDTO> concepts, String hosCode, Integer type) {
         HosCodeVO hosCodeVO = new HosCodeVO();
         hosCodeVO.setHosCode(hosCode);
+        LisConfigVO lisConfigVO = new LisConfigVO();
+        lisConfigVO.setHosCode(hosCode);
+        List<String> uniqueNameList = concepts.stream().map(concept -> concept.getName()).collect(Collectors.toList());
+        lisConfigVO.setUniqueNameList(uniqueNameList);
         if (type.equals(ConceptTypeEnum.Lis.getKey())) {
-            RespDTO<Map<String, List<String>>> lisRes = tranServiceClient.getLisConfigByUniqueNameAndHosCode(hosCodeVO);
+            RespDTO<Map<String, List<String>>> lisRes = tranServiceClient.getLisConfigByUniqueNameAndHosCode(lisConfigVO);
             if (RespDTOUtil.respIsOK(lisRes)) {
                 Map<String, List<String>> lisMappingByUniqueName = lisRes.data;
                 for (ConceptPushDTO concept : concepts) {

+ 95 - 60
aipt-service/src/main/java/com/diagbot/facade/TreatmentFacade.java

@@ -4,9 +4,10 @@ import com.alibaba.fastjson.JSONObject;
 import com.diagbot.client.bean.AdverseReaction;
 import com.diagbot.client.bean.Medicition;
 import com.diagbot.client.bean.MedicitionClass;
-import com.diagbot.dto.ConceptIntroduceDTO;
+import com.diagbot.dto.ConceptDetailDTO;
 import com.diagbot.dto.ConceptRes;
 import com.diagbot.entity.Concept;
+import com.diagbot.entity.ConceptDetail;
 import com.diagbot.entity.wrapper.ConceptWrapper;
 import com.diagbot.enums.ConceptTypeEnum;
 import com.diagbot.enums.DisTypeEnum;
@@ -15,15 +16,15 @@ import com.diagbot.enums.LexiconTypeEnum;
 import com.diagbot.enums.PositionTypeEnum;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
-import com.diagbot.util.EntityUtil;
+import com.diagbot.util.BeanUtil;
 import com.diagbot.util.FastJsonUtils;
 import com.diagbot.util.ListUtil;
 import com.diagbot.vo.ConceptBaseVO;
-import com.diagbot.vo.ConceptIntroduceVO;
 import com.google.common.collect.Lists;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.util.Arrays;
 import java.util.LinkedHashMap;
 import java.util.LinkedList;
 import java.util.List;
@@ -50,6 +51,8 @@ public class TreatmentFacade {
      */
     public Map<String, Object> getTreatment(Map<String, JSONObject> treatmentMap, String diseaseName, Integer disType) {
         Map<String, Object> retMap = new LinkedHashMap<>();
+        List<String> conceptNameList = Lists.newLinkedList();
+        conceptNameList.add(diseaseName);
         ConceptBaseVO conceptBaseVO = new ConceptBaseVO();
         conceptBaseVO.setName(diseaseName);
         conceptBaseVO.setLibType(LexiconTypeEnum.DIAGNOSIS.getKey());
@@ -63,50 +66,26 @@ public class TreatmentFacade {
         if (!treatmentMap.containsKey(diseaseName)) {
             throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "诊断名不在诊断列表中");
         }
-
-        //一般治疗
-        ConceptIntroduceVO conceptIntroduceVO = new ConceptIntroduceVO();
-        conceptIntroduceVO.setName(diseaseName);
-        conceptIntroduceVO.setLibType(LexiconTypeEnum.DIAGNOSIS.getKey());
-        conceptIntroduceVO.setPosition(PositionTypeEnum.T3.getKey());
-        conceptIntroduceVO.setType(ConceptTypeEnum.Disease.getKey());
-        ConceptIntroduceDTO commonTreatmentDetail = conceptDetailFacade.getConceptDetail(conceptIntroduceVO);
-        if (commonTreatmentDetail != null && ListUtil.isNotEmpty(commonTreatmentDetail.getDetails())) {
-            retMap.put("commonTreatment", commonTreatmentDetail.getDetails().get(0));
-        } else {
-            retMap.put("commonTreatment", null);
-        }
-
-        //手术治疗
-        conceptIntroduceVO.setPosition(PositionTypeEnum.T4.getKey());
-        ConceptIntroduceDTO surgeryTreatmentDetail = conceptDetailFacade.getConceptDetail(conceptIntroduceVO);
-        if (surgeryTreatmentDetail != null && ListUtil.isNotEmpty(surgeryTreatmentDetail.getDetails())) {
-            retMap.put("surgeryTreatment", surgeryTreatmentDetail.getDetails().get(0));
-        } else {
-            retMap.put("surgeryTreatment", null);
-        }
+        //治疗方案对应诊断
+        retMap.put("diseaseName", diseaseName);
 
         //获取知识图谱治疗方案
         JSONObject treatmentJson = treatmentMap.get(diseaseName);
         if (treatmentJson == null || treatmentJson.isEmpty()) {
             return retMap;
         }
-
         //推荐药物
         List<MedicitionClass> drugsList = FastJsonUtils.getJsonToListByKey(treatmentJson.toString(), "treatment", MedicitionClass.class);
+        //不良反应
+        List<AdverseReaction> adverseReactionList = FastJsonUtils.getJsonToListByKey(treatmentJson.toString(), "adverseEvent", AdverseReaction.class);
         if (ListUtil.isNotEmpty(drugsList)) {
             //药品大类
             List<String> cateBigNameList = drugsList.stream().map(drugs -> drugs.getBigdrugsName()).collect(Collectors.toList());
-            List<Concept> cateBigConceptList = conceptFacade.getListByNamesAndType(cateBigNameList, LexiconTypeEnum.DRUG_CATEGORY_BIG.getKey());
-            Map<String, Concept> cateBigConceptMap = EntityUtil.makeEntityMap(cateBigConceptList, "libName");
-            Map<String, Concept> cateBigInfoExistMap = conceptDetailFacade.existList(cateBigNameList, LexiconTypeEnum.DRUG_CATEGORY_BIG.getKey());
+            conceptNameList.addAll(cateBigNameList);
             //药品小类
             List<String> cateSmallNameList = drugsList.stream().map(drugs -> drugs.getSubdrugsName()).collect(Collectors.toList());
-            List<Concept> cateSmallConceptList = conceptFacade.getListByNamesAndType(cateSmallNameList, LexiconTypeEnum.DRUG_CATEGORY_SMALL.getKey());
-            Map<String, Concept> cateSmallConceptMap = EntityUtil.makeEntityMap(cateSmallConceptList, "libName");
-            //Map<String, Concept> cateSmallInfoExistMap = conceptDetailFacade.existList(cateSmallNameList, LexiconTypeEnum.DRUG_CATEGORY_SMALL.getKey());
-
-            //药品说明信息
+            conceptNameList.addAll(cateSmallNameList);
+            //药品
             List<Medicition> medicitionTotalList = Lists.newLinkedList();
             for (MedicitionClass medicitionClass : drugsList) {
                 if (medicitionClass.getMedicitionsList() != null) {
@@ -114,38 +93,74 @@ public class TreatmentFacade {
                 }
             }
             List<String> drugNameList = medicitionTotalList.stream().map(m -> m.getMedicitionName()).collect(Collectors.toList());
-            List<Concept> drugList = conceptFacade.getListByNamesAndType(drugNameList, LexiconTypeEnum.DRUGS.getKey());
-            Map<String, Concept> drugMap = EntityUtil.makeEntityMap(drugList, "libName");
-            Map<String, Concept> drugDetailMap = conceptDetailFacade.existList(drugNameList, LexiconTypeEnum.DRUGS.getKey());
+            conceptNameList.addAll(drugNameList);
+        }
+        if (ListUtil.isNotEmpty(adverseReactionList)) {
+            List<String> adNameList = adverseReactionList.stream().map(a -> a.getName()).collect(Collectors.toList());
+            conceptNameList.addAll(adNameList);
+        }
+        //概念
+        List<Concept> conceptList=conceptFacade.getListByNames(conceptNameList);
+        //概念map
+        Map<String, Map<Long, Concept>> conceptMap = conceptList2Map(conceptList);
+        //说明信息是否存在
+        Map<String, Map<Long, List<ConceptDetail>>> hasConDetailMap = conceptDetailFacade.hasConDetail(conceptList);
 
+        //一般治疗&&手术治疗
+        if (hasConDetailMap != null && hasConDetailMap.get(diseaseName) != null && ListUtil.isNotEmpty(hasConDetailMap.get(diseaseName).get(Long.valueOf(LexiconTypeEnum.DIAGNOSIS.getKey())))) {
+            List<ConceptDetail> diseaseConDetailList = hasConDetailMap.get(diseaseName).get(Long.valueOf(LexiconTypeEnum.DIAGNOSIS.getKey()));
+            for (ConceptDetail conceptDetail : diseaseConDetailList) {
+                ConceptDetailDTO conceptDetailDTO = new ConceptDetailDTO();
+                List<String> positionList = Arrays.asList(conceptDetail.getPosition().split(",|,"));
+                if (positionList.contains(String.valueOf(PositionTypeEnum.T3.getKey())) && retMap.get("commonTreatment") == null) {
+                    BeanUtil.copyProperties(conceptDetail, conceptDetailDTO);
+                    retMap.put("commonTreatment", conceptDetailDTO);
+                }
+                if (positionList.contains(String.valueOf(PositionTypeEnum.T4.getKey())) && retMap.get("surgeryTreatment") == null) {
+                    BeanUtil.copyProperties(conceptDetail, conceptDetailDTO);
+                    retMap.put("surgeryTreatment", conceptDetailDTO);
+                }
+            }
+        } else {
+            retMap.put("commonTreatment", null);
+            retMap.put("surgeryTreatment", null);
+        }
+
+        if (ListUtil.isNotEmpty(drugsList)) {
             for (MedicitionClass medicitionClass : drugsList) {
-                Concept cateBigConcept = cateBigConceptMap.get(medicitionClass.getBigdrugsName());
-                if (cateBigConcept != null) {
-                    medicitionClass.setBigdrugsConceptId(cateBigConcept.getId());
-                    if (cateBigInfoExistMap.containsKey(cateBigConcept.getLibName())) {
-                        medicitionClass.setShowInfo("1");
-                    } else {
-                        medicitionClass.setShowInfo("0");
+                if (conceptMap != null  && conceptMap.get(medicitionClass.getBigdrugsName()) != null && conceptMap.get(medicitionClass.getBigdrugsName()).containsKey(Long.valueOf(LexiconTypeEnum.DRUG_CATEGORY_BIG.getKey()))) {
+                    Concept cateBigConcept = conceptMap.get(medicitionClass.getBigdrugsName()).get(Long.valueOf(LexiconTypeEnum.DRUG_CATEGORY_BIG.getKey()));
+                    if (cateBigConcept != null) {
+                        medicitionClass.setBigdrugsConceptId(cateBigConcept.getId());
+                        if (hasConDetailMap != null && hasConDetailMap.get(cateBigConcept.getLibName()) != null && hasConDetailMap.get(cateBigConcept.getLibName()).containsKey(Long.valueOf(LexiconTypeEnum.DRUG_CATEGORY_BIG.getKey()))) {
+                            medicitionClass.setShowInfo("1");
+                        } else {
+                            medicitionClass.setShowInfo("0");
+                        }
                     }
                 }
                 medicitionClass.setBigdrgusLibType(LexiconTypeEnum.DRUG_CATEGORY_BIG.getKey());
                 medicitionClass.setBigdrugsType(ConceptTypeEnum.Drug_Category_Big.getKey());
-                Concept cateSmallConcept = cateSmallConceptMap.get(medicitionClass.getSubdrugsName());
-                if (cateSmallConcept != null) {
-                    medicitionClass.setSubdrugsConceptId(cateSmallConcept.getId());
+                if (conceptMap != null && conceptMap.get(medicitionClass.getSubdrugsName()) != null && conceptMap.get(medicitionClass.getSubdrugsName()).containsKey(Long.valueOf(LexiconTypeEnum.DRUG_CATEGORY_SMALL.getKey()))) {
+                    Concept cateSmallConcept = conceptMap.get(medicitionClass.getSubdrugsName()).get(Long.valueOf(LexiconTypeEnum.DRUG_CATEGORY_SMALL.getKey()));
+                    if (cateSmallConcept != null) {
+                        medicitionClass.setSubdrugsConceptId(cateSmallConcept.getId());
+                    }
                 }
                 medicitionClass.setSubdrugsLibType(LexiconTypeEnum.DRUG_CATEGORY_SMALL.getKey());
                 medicitionClass.setSubdrugsType(ConceptTypeEnum.Drug_Category_Small.getKey());
 
                 LinkedList<Medicition> medicitionList = medicitionClass.getMedicitionsList();
                 for (Medicition medicition : medicitionList) {
-                    Concept drugConcept = drugMap.get(medicition.getMedicitionName());
-                    if (drugConcept != null) {
-                        medicition.setConceptId(drugConcept.getId());
+                    if (conceptMap != null && conceptMap.get(medicition.getMedicitionName()) != null && conceptMap.get(medicition.getMedicitionName()).containsKey(Long.valueOf(LexiconTypeEnum.DRUGS.getKey()))) {
+                        Concept drugConcept = conceptMap.get(medicition.getMedicitionName()).get(Long.valueOf(LexiconTypeEnum.DRUGS.getKey()));
+                        if (drugConcept != null) {
+                            medicition.setConceptId(drugConcept.getId());
+                        }
                     }
                     medicition.setLibType(LexiconTypeEnum.DRUGS.getKey());
                     medicition.setType(ConceptTypeEnum.Drug.getKey());
-                    if (drugDetailMap != null && drugDetailMap.containsKey(medicition.getMedicitionName())) {
+                    if (hasConDetailMap != null &&hasConDetailMap.get(medicition.getMedicitionName()) != null && hasConDetailMap.get(medicition.getMedicitionName()).containsKey(Long.valueOf(LexiconTypeEnum.DRUGS.getKey()))) {
                         medicition.setShowInfo("1");
                     } else {
                         medicition.setShowInfo("0");
@@ -178,19 +193,16 @@ public class TreatmentFacade {
                 //上次用药-icss层处理
                 retMap.put("drugHistory", null);
                 //不良反应
-                List<AdverseReaction> adverseReactionList = FastJsonUtils.getJsonToListByKey(treatmentJson.toString(), "adverseEvent", AdverseReaction.class);
-                List<String> adNameList = adverseReactionList.stream().map(a -> a.getName()).collect(Collectors.toList());
-                List<Concept> adConceptList = conceptFacade.getListByNamesAndType(adNameList, LexiconTypeEnum.SIDE_EFFECTS.getKey());
-                Map<String, Concept> adConceptMap = EntityUtil.makeEntityMap(adConceptList, "libName");
-                Map<String, Concept> adConceptDetailMap = conceptDetailFacade.existList(adNameList, LexiconTypeEnum.SIDE_EFFECTS.getKey());
                 for (AdverseReaction adverseReaction : adverseReactionList) {
-                    Concept adConcept = adConceptMap.get(adverseReaction.getName());
-                    if (adConcept != null) {
-                        adverseReaction.setConceptId(adConcept.getId());
+                    if (conceptMap != null && conceptMap.get(adverseReaction.getName()) != null && conceptMap.get(adverseReaction.getName()).containsKey(Long.valueOf(LexiconTypeEnum.SIDE_EFFECTS.getKey()))) {
+                        Concept adConcept = conceptMap.get(adverseReaction.getName()).get(Long.valueOf(LexiconTypeEnum.SIDE_EFFECTS.getKey()));
+                        if (adConcept != null) {
+                            adverseReaction.setConceptId(adConcept.getId());
+                        }
                     }
                     adverseReaction.setLibType(LexiconTypeEnum.SIDE_EFFECTS.getKey());
                     adverseReaction.setType(ConceptTypeEnum.SIDE_EFFECTS.getKey());
-                    if (adConceptDetailMap != null && adConceptDetailMap.containsKey(adverseReaction.getName())) {
+                    if (hasConDetailMap != null && hasConDetailMap.get(adverseReaction.getName()) != null && hasConDetailMap.get(adverseReaction.getName()).containsKey(Long.valueOf(LexiconTypeEnum.SIDE_EFFECTS.getKey()))) {
                         adverseReaction.setShowInfo("1");
                     } else {
                         adverseReaction.setShowInfo("0");
@@ -201,4 +213,27 @@ public class TreatmentFacade {
         }
         return retMap;
     }
+
+    /**
+     * 转换概念list到map  Map<概念名称,Map<词性,概念对象>>
+     *
+     * @param conceptList
+     * @return
+     */
+    public Map<String, Map<Long, Concept>> conceptList2Map(List<Concept> conceptList) {
+        Map<String, Map<Long, Concept>> retMap = new LinkedHashMap<>();
+        Map<Long, Concept> retSubMap = new LinkedHashMap<>();
+        for (Concept concept : conceptList) {
+            if (retMap.containsKey(concept.getLibName())) {
+                retSubMap = retMap.get(concept.getLibName());
+            }
+            if (retSubMap == null) {
+                retSubMap = new LinkedHashMap<>();
+            }
+            retSubMap.put(concept.getLibType(), concept);
+            retMap.put(concept.getLibName(), retSubMap);
+            retSubMap = new LinkedHashMap<>();
+        }
+        return retMap;
+    }
 }

+ 18 - 0
aipt-service/src/main/java/com/diagbot/mapper/ConceptMapper.java

@@ -1,11 +1,13 @@
 package com.diagbot.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.diagbot.dto.ConceptBaseDTO;
 import com.diagbot.dto.ConceptRes;
 import com.diagbot.dto.ConceptWithOrderRes;
 import com.diagbot.dto.ConceptRetrievalDTO;
 import com.diagbot.entity.Concept;
 import com.diagbot.entity.wrapper.ConceptWrapper;
+import com.diagbot.vo.ConceptFindVO;
 import com.diagbot.vo.RetrievalVO;
 
 import java.util.List;
@@ -43,4 +45,20 @@ public interface ConceptMapper extends BaseMapper<Concept> {
      * @return
      */
     List<ConceptRetrievalDTO> retrievalConcept(RetrievalVO retrievalVO);
+
+    /**
+     * 静态知识检索
+     *
+     * @param retrievalVO
+     * @return
+     */
+    List<ConceptRetrievalDTO> staticKnowledge(RetrievalVO retrievalVO);
+
+    List<ConceptBaseDTO> getConceptConMap(ConceptFindVO conceptFindVO);
+
+    /**
+     * 获得诊断依据问题词的标准词
+     * @return
+     */
+    List<String> getStandWord();
 }

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

@@ -1,11 +1,13 @@
 package com.diagbot.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.diagbot.dto.ConceptBaseDTO;
 import com.diagbot.dto.ConceptRes;
 import com.diagbot.dto.ConceptWithOrderRes;
 import com.diagbot.dto.ConceptRetrievalDTO;
 import com.diagbot.entity.Concept;
 import com.diagbot.entity.wrapper.ConceptWrapper;
+import com.diagbot.vo.ConceptFindVO;
 import com.diagbot.vo.RetrievalVO;
 
 import java.util.List;
@@ -43,4 +45,21 @@ public interface ConceptService extends IService<Concept> {
      * @return
      */
     List<ConceptRetrievalDTO> retrievalConcept(RetrievalVO retrievalVO);
+
+    /**
+     * 静态知识检索
+     *
+     * @param retrievalVO
+     * @return
+     */
+    List<ConceptRetrievalDTO> staticKnowledge(RetrievalVO retrievalVO);
+
+    List<ConceptBaseDTO> getConceptConMap(ConceptFindVO conceptFindVO);
+
+    /**
+     * 获得诊断依据问题词的标准词
+     *
+     * @return
+     */
+    List<String> getStandWord();
 }

+ 28 - 1
aipt-service/src/main/java/com/diagbot/service/impl/ConceptServiceImpl.java

@@ -1,13 +1,15 @@
 package com.diagbot.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.diagbot.dto.ConceptBaseDTO;
 import com.diagbot.dto.ConceptRes;
-import com.diagbot.dto.ConceptWithOrderRes;
 import com.diagbot.dto.ConceptRetrievalDTO;
+import com.diagbot.dto.ConceptWithOrderRes;
 import com.diagbot.entity.Concept;
 import com.diagbot.entity.wrapper.ConceptWrapper;
 import com.diagbot.mapper.ConceptMapper;
 import com.diagbot.service.ConceptService;
+import com.diagbot.vo.ConceptFindVO;
 import com.diagbot.vo.RetrievalVO;
 import org.springframework.stereotype.Service;
 
@@ -46,6 +48,17 @@ public class ConceptServiceImpl extends ServiceImpl<ConceptMapper, Concept> impl
         return baseMapper.retrievalConcept(retrievalVO);
     }
 
+    /**
+     * 静态知识检索
+     *
+     * @param retrievalVO
+     * @return
+     */
+    @Override
+    public List<ConceptRetrievalDTO> staticKnowledge(RetrievalVO retrievalVO){
+        return baseMapper.staticKnowledge(retrievalVO);
+    }
+
     /**
      * 获取带排序概念-关系-概念
      *
@@ -56,4 +69,18 @@ public class ConceptServiceImpl extends ServiceImpl<ConceptMapper, Concept> impl
     public List<ConceptWithOrderRes> getConceptWithOrder(ConceptWrapper conceptWrapper) {
         return baseMapper.getConceptWithOrder(conceptWrapper);
     }
+
+    @Override
+    public List<ConceptBaseDTO> getConceptConMap(ConceptFindVO conceptFindVO){
+        return baseMapper.getConceptConMap(conceptFindVO);
+    }
+    /**
+     * 获得诊断依据问题词的标准词
+     *
+     * @return
+     */
+    @Override
+    public List<String> getStandWord() {
+        return baseMapper.getStandWord();
+    }
 }

+ 22 - 0
aipt-service/src/main/java/com/diagbot/vo/ConceptFindVO.java

@@ -0,0 +1,22 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2019/5/6 18:50
+ */
+@Getter
+@Setter
+public class ConceptFindVO {
+    //术语Id列表
+    private List<Long> conceptIds;
+    //年龄
+    private Integer age;
+    //性别
+    private Integer sexType;
+}

+ 2 - 0
aipt-service/src/main/java/com/diagbot/vo/GetStaticKnowledgeVO.java

@@ -17,4 +17,6 @@ public class GetStaticKnowledgeVO {
     private String InputStr;
     //需要去重的id
     private List<Long> inputIds;
+    //指定类型
+    private List<Integer> types;
 }

+ 19 - 0
aipt-service/src/main/java/com/diagbot/vo/LisConfigVO.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: 2019/7/6 15:52
+ */
+@Getter
+@Setter
+public class LisConfigVO extends HosCodeVO {
+    List<String> mealNameList;
+    List<String> uniqueNameList;
+}

+ 5 - 1
aipt-service/src/main/java/com/diagbot/vo/RetrievalVO.java

@@ -22,7 +22,11 @@ public class RetrievalVO {
     //需要去重的id
     private List<Long> inputIds;
     //获取子项时需要用到的type类型
-    private Integer detilType;
+    private Integer detailType;
     //类型为其他史时用到的type类型
     private List<Integer> otherType;
+    //是否是静态搜索
+    private Integer isStatic = 0;
+    //是否显示子项(0.不显示,1.显示)
+    private Integer isSonShow = 0;
 }

+ 18 - 1
aipt-service/src/main/java/com/diagbot/web/ConceptController.java

@@ -11,6 +11,7 @@ import com.diagbot.facade.ConceptFacade;
 import com.diagbot.util.ParamConvertUtil;
 import com.diagbot.vo.ConceptBaseVO;
 import com.diagbot.vo.ConceptExistVO;
+import com.diagbot.vo.ConceptFindVO;
 import com.diagbot.vo.ConceptSearchVO;
 import com.diagbot.vo.ConceptUsualVO;
 import com.diagbot.vo.GetStaticKnowledgeVO;
@@ -70,6 +71,22 @@ public class ConceptController {
         return RespDTO.onSuc(conceptFacade.getConceptMap(conceptSearchVO));
     }
 
+    /**
+     * 根据概念Id列表获取概念列表Map
+     *
+     * @param conceptFindVO 搜索参数
+     * @return 术语id和术语 Map
+     */
+    @ApiOperation(value = "知识库标准化-根据概念Id,年龄,性别列表获取概念列表Map[by:gaodm]",
+            notes = "conceptIds: 术语Id列表" +
+                    "age:年龄<br>" +
+                    "sexType: 性别<br>")
+    @PostMapping("/getConceptCondMap")
+    @SysLogger("getConceptCondMap")
+    public RespDTO<Map<Long, String>> getConceptCondMap(@RequestBody ConceptFindVO conceptFindVO) {
+        return RespDTO.onSuc(conceptFacade.getConceptCondMap(conceptFindVO));
+    }
+
     /**
      * 验证存在并且获取概念基本信息
      *
@@ -116,7 +133,7 @@ public class ConceptController {
                     "type: 类型")
     @PostMapping("/getConceptMapByNameAndType")
     @SysLogger("getConceptMapByNameAndType")
-    public RespDTO<Map<String, Long>> getConceptMapByNameAndType(@RequestBody ConceptExistVO conceptExistVO){
+    public RespDTO<Map<String, Long>> getConceptMapByNameAndType(@RequestBody ConceptExistVO conceptExistVO) {
         return RespDTO.onSuc(conceptFacade.getConceptMap(conceptExistVO));
     }
 

+ 367 - 40
aipt-service/src/main/resources/mapper/ConceptMapper.xml

@@ -195,6 +195,7 @@
         WHERE
         t1.is_deleted = 'N'
         AND t2.is_deleted = 'N'
+        AND t3.is_deleted = 'N'
         AND t6.is_deleted = 'N'
         <if test="type != null">
             AND t1.lib_type = #{type}
@@ -206,15 +207,14 @@
             </foreach>
         </if>
         <if test="sexType == 3">
-            and (t3.sex_type in ('1','2','3') or t3.sex_type is null)
+            and t3.sex_type in ('1','2','3')
         </if>
         <if test="sexType != 3">
-            and (t3.sex_type in ('3',#{sexType}) or t3.sex_type is null)
+            and t3.sex_type in ('3',#{sexType})
         </if>
         <if test="age != null and age != ''">
-            AND (( <![CDATA[ t3.min_age <= #{age} ]]>
-            AND <![CDATA[ t3.max_age >= #{age} ]]>)
-            or (t3.min_age is null and t3.max_age is null))
+            AND <![CDATA[ t3.min_age <= #{age} ]]>
+            AND <![CDATA[ t3.max_age >= #{age} ]]>
         </if>
         <if test="inputIds != null and inputIds.size > 0">
             and t1.id not in
@@ -232,6 +232,7 @@
         WHERE
         t1.is_deleted = 'N'
         AND t2.is_deleted = 'N'
+        AND t3.is_deleted = 'N'
         AND t6.is_deleted = 'N'
         <if test="type != null">
             AND t1.lib_type = #{type}
@@ -243,15 +244,14 @@
             </foreach>
         </if>
         <if test="sexType == 3">
-            and (t3.sex_type in ('1','2','3') or t3.sex_type is null)
+            and t3.sex_type in ('1','2','3')
         </if>
         <if test="sexType != 3">
-            and (t3.sex_type in ('3',#{sexType}) or t3.sex_type is null)
+            and t3.sex_type in ('3',#{sexType})
         </if>
         <if test="age != null and age != ''">
-            AND (( <![CDATA[ t3.min_age <= #{age} ]]>
-            AND <![CDATA[ t3.max_age >= #{age} ]]>)
-            or (t3.min_age is null and t3.max_age is null))
+            AND <![CDATA[ t3.min_age <= #{age} ]]>
+            AND <![CDATA[ t3.max_age >= #{age} ]]>
         </if>
         <if test="inputIds != null and inputIds.size > 0">
             and t1.id not in
@@ -269,6 +269,7 @@
         WHERE
         t1.is_deleted = 'N'
         AND t2.is_deleted = 'N'
+        AND t3.is_deleted = 'N'
         AND t6.is_deleted = 'N'
         <if test="type != null">
             AND t1.lib_type = #{type}
@@ -280,15 +281,14 @@
             </foreach>
         </if>
         <if test="sexType == 3">
-            and (t3.sex_type in ('1','2','3') or t3.sex_type is null)
+            and t3.sex_type in ('1','2','3')
         </if>
         <if test="sexType != 3">
-            and (t3.sex_type in ('3',#{sexType}) or t3.sex_type is null)
+            and t3.sex_type in ('3',#{sexType})
         </if>
         <if test="age != null and age != ''">
-            AND (( <![CDATA[ t3.min_age <= #{age} ]]>
-            AND <![CDATA[ t3.max_age >= #{age} ]]>)
-            or (t3.min_age is null and t3.max_age is null))
+            AND <![CDATA[ t3.min_age <= #{age} ]]>
+            AND <![CDATA[ t3.max_age >= #{age} ]]>
         </if>
         <if test="inputIds != null and inputIds.size > 0">
             and t1.id not in
@@ -298,33 +298,33 @@
         </if>
         AND (t2.spell LIKE CONCAT('%',UPPER(#{InputStr}),'%') OR t2.name LIKE CONCAT('%',#{InputStr},'%'))
         LIMIT 100)
-        <if test="detilType != null and detilType != ''">
+        <if test="detailType != null and detailType != ''">
             UNION
             (SELECT t1.id selfId,t1.lib_name selfName,t5.id parentId,t5.lib_name parentName,null sameName,t2.is_concept showType,t5.lib_type libTypeId,t6.`name` libTypeName FROM kl_concept t1
             LEFT JOIN kl_library_info t2 ON t1.id = t2.concept_id
-            LEFT JOIN kl_concept_common t3 ON t1.id = t3.concept_id
             LEFT JOIN kl_relation t4 ON t4.end_id= t1.id
             LEFT JOIN kl_concept t5 on t5.id = t4.start_id
             LEFT JOIN kl_lexicon t6 ON t6.id = t5.lib_type
+            LEFT JOIN kl_concept_common t3 ON t5.id = t3.concept_id
             WHERE
             t1.is_deleted = 'N'
             AND t2.is_deleted = 'N'
+            AND t3.is_deleted = 'N'
             AND t4.is_deleted = 'N'
             AND t5.is_deleted = 'N'
             AND t6.is_deleted = 'N'
-            <if test="detilType != null">
-                AND t1.lib_type = #{detilType}
+            <if test="detailType != null">
+                AND t1.lib_type = #{detailType}
             </if>
             <if test="sexType == 3">
-                and (t3.sex_type in ('1','2','3') or t3.sex_type is null)
+                and t3.sex_type in ('1','2','3')
             </if>
             <if test="sexType != 3">
-                and (t3.sex_type in ('3',#{sexType}) or t3.sex_type is null)
+                and t3.sex_type in ('3',#{sexType})
             </if>
             <if test="age != null and age != ''">
-                AND (( <![CDATA[ t3.min_age <= #{age} ]]>
-                AND <![CDATA[ t3.max_age >= #{age} ]]>)
-                or (t3.min_age is null and t3.max_age is null))
+                AND <![CDATA[ t3.min_age <= #{age} ]]>
+                AND <![CDATA[ t3.max_age >= #{age} ]]>
             </if>
             AND (t2.spell =  UPPER(#{InputStr}) OR t2.name =  #{InputStr})
             <if test="inputIds != null and inputIds.size > 0">
@@ -338,29 +338,29 @@
             UNION
             (SELECT t1.id selfId,t1.lib_name selfName,t5.id parentId,t5.lib_name parentName,null sameName,t2.is_concept showType,t5.lib_type libTypeId,t6.`name` libTypeName FROM kl_concept t1
             LEFT JOIN kl_library_info t2 ON t1.id = t2.concept_id
-            LEFT JOIN kl_concept_common t3 ON t1.id = t3.concept_id
             LEFT JOIN kl_relation t4 ON t4.end_id= t1.id
             LEFT JOIN kl_concept t5 on t5.id = t4.start_id
             LEFT JOIN kl_lexicon t6 ON t6.id = t5.lib_type
+            LEFT JOIN kl_concept_common t3 ON t5.id = t3.concept_id
             WHERE
             t1.is_deleted = 'N'
             AND t2.is_deleted = 'N'
+            AND t3.is_deleted = 'N'
             AND t4.is_deleted = 'N'
             AND t5.is_deleted = 'N'
             AND t6.is_deleted = 'N'
-            <if test="detilType != null">
-                AND t1.lib_type = #{detilType}
+            <if test="detailType != null">
+                AND t1.lib_type = #{detailType}
             </if>
             <if test="sexType == 3">
-                and (t3.sex_type in ('1','2','3') or t3.sex_type is null)
+                and t3.sex_type in ('1','2','3')
             </if>
             <if test="sexType != 3">
-                and (t3.sex_type in ('3',#{sexType}) or t3.sex_type is null)
+                and t3.sex_type in ('3',#{sexType})
             </if>
             <if test="age != null and age != ''">
-                AND (( <![CDATA[ t3.min_age <= #{age} ]]>
-                AND <![CDATA[ t3.max_age >= #{age} ]]>)
-                or (t3.min_age is null and t3.max_age is null))
+                AND <![CDATA[ t3.min_age <= #{age} ]]>
+                AND <![CDATA[ t3.max_age >= #{age} ]]>
             </if>
             AND (t2.spell LIKE CONCAT(UPPER(#{InputStr}),'%') OR t2.name LIKE CONCAT( #{InputStr},'%'))
             <if test="inputIds != null and inputIds.size > 0">
@@ -369,34 +369,37 @@
                     #{id}
                 </foreach>
             </if>
+            <if test="isStatic != null and isStatic == 1">
+                GROUP BY t5.id
+            </if>
             AND t4.relation_id = 18
             LIMIT 100)
             UNION
             (SELECT t1.id selfId,t1.lib_name selfName,t5.id parentId,t5.lib_name parentName,null sameName,t2.is_concept showType,t5.lib_type libTypeId,t6.`name` libTypeName FROM kl_concept t1
             LEFT JOIN kl_library_info t2 ON t1.id = t2.concept_id
-            LEFT JOIN kl_concept_common t3 ON t1.id = t3.concept_id
             LEFT JOIN kl_relation t4 ON t4.end_id= t1.id
             LEFT JOIN kl_concept t5 on t5.id = t4.start_id
             LEFT JOIN kl_lexicon t6 ON t6.id = t5.lib_type
+            LEFT JOIN kl_concept_common t3 ON t5.id = t3.concept_id
             WHERE
             t1.is_deleted = 'N'
             AND t2.is_deleted = 'N'
+            AND t3.is_deleted = 'N'
             AND t4.is_deleted = 'N'
             AND t5.is_deleted = 'N'
             AND t6.is_deleted = 'N'
-            <if test="detilType != null">
-                AND t1.lib_type = #{detilType}
+            <if test="detailType != null">
+                AND t1.lib_type = #{detailType}
             </if>
             <if test="sexType == 3">
-                and (t3.sex_type in ('1','2','3') or t3.sex_type is null)
+                and t3.sex_type in ('1','2','3')
             </if>
             <if test="sexType != 3">
-                and (t3.sex_type in ('3',#{sexType}) or t3.sex_type is null)
+                and t3.sex_type in ('3',#{sexType})
             </if>
             <if test="age != null and age != ''">
-                AND (( <![CDATA[ t3.min_age <= #{age} ]]>
-                AND <![CDATA[ t3.max_age >= #{age} ]]>)
-                or (t3.min_age is null and t3.max_age is null))
+                AND <![CDATA[ t3.min_age <= #{age} ]]>
+                AND <![CDATA[ t3.max_age >= #{age} ]]>
             </if>
             AND (t2.spell LIKE CONCAT('%',UPPER(#{InputStr}),'%') OR t2.name LIKE CONCAT('%',#{InputStr},'%'))
             <if test="inputIds != null and inputIds.size > 0">
@@ -411,4 +414,328 @@
         ) a1
         LIMIT 100
     </select>
+
+    <select id="staticKnowledge" resultType="com.diagbot.dto.ConceptRetrievalDTO">
+        -- 除化验外其他类型标签
+        (SELECT b1.*,0 uniqueId,null uniqueName
+        FROM (SELECT t1.id selfId,t1.lib_name selfName,0 parentId,null parentName,t2.`name` sameName,t2.is_concept showType,t1.lib_type libTypeId,t6.`name` libTypeName FROM kl_concept t1
+        LEFT JOIN kl_library_info t2 ON t1.id = t2.concept_id
+        LEFT JOIN kl_concept_common t3 ON t1.id = t3.concept_id
+        LEFT JOIN kl_lexicon t6 ON t6.id = t1.lib_type
+        LEFT JOIN kl_concept_detail t7 ON t7.concept_id = t1.id
+        WHERE
+        t1.is_deleted = 'N'
+        AND t2.is_deleted = 'N'
+        AND t3.is_deleted = 'N'
+        AND t6.is_deleted = 'N'
+        AND t7.is_deleted = 'N'
+        <if test="otherType != null and otherType.size > 0">
+            AND t1.lib_type in
+            <foreach item="type" collection="otherType" open="(" separator="," close=")">
+                #{type}
+            </foreach>
+        </if>
+        AND (t2.spell = UPPER(#{InputStr}) OR t2.name = (#{InputStr}))
+        GROUP BY t1.id) b1)
+        UNION
+        (SELECT b1.*,0 uniqueId,null uniqueName
+        FROM (SELECT t1.id selfId,t1.lib_name selfName,0 parentId,null parentName,t2.`name` sameName,t2.is_concept showType,t1.lib_type libTypeId,t6.`name` libTypeName FROM kl_concept t1
+        LEFT JOIN kl_library_info t2 ON t1.id = t2.concept_id
+        LEFT JOIN kl_concept_common t3 ON t1.id = t3.concept_id
+        LEFT JOIN kl_lexicon t6 ON t6.id = t1.lib_type
+        LEFT JOIN kl_concept_detail t7 ON t7.concept_id = t1.id
+        WHERE
+        t1.is_deleted = 'N'
+        AND t2.is_deleted = 'N'
+        AND t3.is_deleted = 'N'
+        AND t6.is_deleted = 'N'
+        AND t7.is_deleted = 'N'
+        <if test="otherType != null and otherType.size > 0">
+            AND t1.lib_type in
+            <foreach item="type" collection="otherType" open="(" separator="," close=")">
+                #{type}
+            </foreach>
+        </if>
+        AND (t2.spell LIKE CONCAT(UPPER(#{InputStr}),'%') OR t2.name LIKE CONCAT((#{InputStr}),'%'))
+        GROUP BY t1.id) b1)
+        UNION
+        (SELECT b1.*,0 uniqueId,null uniqueName
+        FROM (SELECT t1.id selfId,t1.lib_name selfName,0 parentId,null parentName,t2.`name` sameName,t2.is_concept showType,t1.lib_type libTypeId,t6.`name` libTypeName FROM kl_concept t1
+                LEFT JOIN kl_library_info t2 ON t1.id = t2.concept_id
+                LEFT JOIN kl_concept_common t3 ON t1.id = t3.concept_id
+                LEFT JOIN kl_lexicon t6 ON t6.id = t1.lib_type
+                LEFT JOIN kl_concept_detail t7 ON t7.concept_id = t1.id
+                WHERE
+                t1.is_deleted = 'N'
+                AND t2.is_deleted = 'N'
+                AND t3.is_deleted = 'N'
+                AND t6.is_deleted = 'N'
+                AND t7.is_deleted = 'N'
+                <if test="otherType != null and otherType.size > 0">
+                    AND t1.lib_type in
+                    <foreach item="type" collection="otherType" open="(" separator="," close=")">
+                        #{type}
+                    </foreach>
+                </if>
+                AND (t2.spell LIKE CONCAT('%',UPPER(#{InputStr}),'%') OR t2.name LIKE CONCAT('%',(#{InputStr}),'%'))
+                GROUP BY t1.id) b1)
+
+        -- 化验本体标签公表项匹配静态知识
+        UNION
+        (SELECT b1.*,b2.id uniqueId,b2.lib_name uniqueName
+        FROM (SELECT t1.id selfId,t1.lib_name selfName,0 parentId,null parentName,t2.`name` sameName,t2.is_concept showType,t1.lib_type libTypeId,t6.`name` libTypeName FROM kl_concept t1
+        LEFT JOIN kl_library_info t2 ON t1.id = t2.concept_id
+        LEFT JOIN kl_concept_common t3 ON t1.id = t3.concept_id
+        LEFT JOIN kl_lexicon t6 ON t6.id = t1.lib_type
+        WHERE
+        t1.is_deleted = 'N'
+        AND t2.is_deleted = 'N'
+        AND t3.is_deleted = 'N'
+        AND t6.is_deleted = 'N'
+        AND t1.lib_type = #{type}
+        AND (t2.spell = UPPER(#{InputStr}) OR t2.name = (#{InputStr}))
+        GROUP BY t1.id) b1,
+        kl_concept b2,
+        kl_concept_detail b3
+        WHERE b2.is_deleted = 'N'
+        and b3.is_deleted = 'N'
+        and b1.selfName = b2.lib_name
+        and b2.lib_type = 46
+        and b2.id = b3.concept_id)
+        UNION
+        (SELECT b1.*,b2.id uniqueId,b2.lib_name uniqueName
+        FROM (SELECT t1.id selfId,t1.lib_name selfName,0 parentId,null parentName,t2.`name` sameName,t2.is_concept showType,t1.lib_type libTypeId,t6.`name` libTypeName FROM kl_concept t1
+        LEFT JOIN kl_library_info t2 ON t1.id = t2.concept_id
+        LEFT JOIN kl_concept_common t3 ON t1.id = t3.concept_id
+        LEFT JOIN kl_lexicon t6 ON t6.id = t1.lib_type
+        WHERE
+        t1.is_deleted = 'N'
+        AND t2.is_deleted = 'N'
+        AND t3.is_deleted = 'N'
+        AND t6.is_deleted = 'N'
+        AND t1.lib_type = #{type}
+        AND (t2.spell LIKE CONCAT(UPPER(#{InputStr}),'%') OR t2.name LIKE CONCAT((#{InputStr}),'%'))
+        GROUP BY t1.id) b1,
+        kl_concept b2,
+        kl_concept_detail b3
+        WHERE b2.is_deleted = 'N'
+        and b3.is_deleted = 'N'
+        and b1.selfName = b2.lib_name
+        and b2.lib_type = 46
+        and b2.id = b3.concept_id)
+        UNION
+        (SELECT b1.*,b2.id uniqueId,b2.lib_name uniqueName
+        FROM (SELECT t1.id selfId,t1.lib_name selfName,0 parentId,null parentName,t2.`name` sameName,t2.is_concept showType,t1.lib_type libTypeId,t6.`name` libTypeName FROM kl_concept t1
+                LEFT JOIN kl_library_info t2 ON t1.id = t2.concept_id
+                LEFT JOIN kl_concept_common t3 ON t1.id = t3.concept_id
+                LEFT JOIN kl_lexicon t6 ON t6.id = t1.lib_type
+                WHERE
+                t1.is_deleted = 'N'
+                AND t2.is_deleted = 'N'
+                AND t3.is_deleted = 'N'
+                AND t6.is_deleted = 'N'
+                AND t1.lib_type = #{type}
+                AND (t2.spell LIKE CONCAT('%',UPPER(#{InputStr}),'%') OR t2.name LIKE CONCAT('%',(#{InputStr}),'%'))
+                GROUP BY t1.id) b1,
+                        kl_concept b2,
+                        kl_concept_detail b3
+        WHERE b2.is_deleted = 'N'
+        and b3.is_deleted = 'N'
+        and b1.selfName = b2.lib_name
+        and b2.lib_type = 46
+        and b2.id = b3.concept_id)
+
+        -- 化验子项推父项,父项公表项匹配静态知识
+        UNION
+        (SELECT b1.*,b2.id uniqueId,b2.lib_name uniqueName
+        FROM (SELECT 0 selfId,null selfName,t5.id parentId,t5.lib_name parentName,null sameName,t2.is_concept showType,t5.lib_type libTypeId,t6.`name` libTypeName FROM kl_concept t1
+        LEFT JOIN kl_library_info t2 ON t1.id = t2.concept_id
+        LEFT JOIN kl_relation t4 ON t4.end_id= t1.id
+        LEFT JOIN kl_concept t5 on t5.id = t4.start_id
+        LEFT JOIN kl_lexicon t6 ON t6.id = t5.lib_type
+        LEFT JOIN kl_concept_common t3 ON t5.id = t3.concept_id
+        WHERE
+        t1.is_deleted = 'N'
+        AND t2.is_deleted = 'N'
+        AND t3.is_deleted = 'N'
+        AND t4.is_deleted = 'N'
+        AND t5.is_deleted = 'N'
+        AND t6.is_deleted = 'N'
+        AND t1.lib_type = #{detailType}
+        AND (t2.spell = UPPER(#{InputStr}) OR t2.name = #{InputStr})
+        AND t4.relation_id = 18
+        GROUP BY t5.id) b1,
+        kl_concept b2,
+        kl_concept_detail b3
+        WHERE b2.is_deleted = 'N'
+        and b3.is_deleted = 'N'
+        and b1.parentName = b2.lib_name
+        and b2.lib_type = 46
+        and b2.id = b3.concept_id)
+        UNION
+        (SELECT b1.*,b2.id uniqueId,b2.lib_name uniqueName
+        FROM (SELECT 0 selfId,null selfName,t5.id parentId,t5.lib_name parentName,null sameName,t2.is_concept showType,t5.lib_type libTypeId,t6.`name` libTypeName FROM kl_concept t1
+        LEFT JOIN kl_library_info t2 ON t1.id = t2.concept_id
+        LEFT JOIN kl_relation t4 ON t4.end_id= t1.id
+        LEFT JOIN kl_concept t5 on t5.id = t4.start_id
+        LEFT JOIN kl_lexicon t6 ON t6.id = t5.lib_type
+        LEFT JOIN kl_concept_common t3 ON t5.id = t3.concept_id
+        WHERE
+        t1.is_deleted = 'N'
+        AND t2.is_deleted = 'N'
+        AND t3.is_deleted = 'N'
+        AND t4.is_deleted = 'N'
+        AND t5.is_deleted = 'N'
+        AND t6.is_deleted = 'N'
+        AND t1.lib_type = #{detailType}
+        AND (t2.spell LIKE CONCAT(UPPER(#{InputStr}),'%') OR t2.name LIKE CONCAT(#{InputStr},'%'))
+        AND t4.relation_id = 18
+        GROUP BY t5.id) b1,
+        kl_concept b2,
+        kl_concept_detail b3
+        WHERE b2.is_deleted = 'N'
+        and b3.is_deleted = 'N'
+        and b1.parentName = b2.lib_name
+        and b2.lib_type = 46
+        and b2.id = b3.concept_id)
+        UNION
+        (SELECT b1.*,b2.id uniqueId,b2.lib_name uniqueName
+        FROM (SELECT 0 selfId,null selfName,t5.id parentId,t5.lib_name parentName,null sameName,t2.is_concept showType,t5.lib_type libTypeId,t6.`name` libTypeName FROM kl_concept t1
+                    LEFT JOIN kl_library_info t2 ON t1.id = t2.concept_id
+                    LEFT JOIN kl_relation t4 ON t4.end_id= t1.id
+                    LEFT JOIN kl_concept t5 on t5.id = t4.start_id
+                    LEFT JOIN kl_lexicon t6 ON t6.id = t5.lib_type
+                    LEFT JOIN kl_concept_common t3 ON t5.id = t3.concept_id
+                    WHERE
+                    t1.is_deleted = 'N'
+                    AND t2.is_deleted = 'N'
+                    AND t3.is_deleted = 'N'
+                    AND t4.is_deleted = 'N'
+                    AND t5.is_deleted = 'N'
+                    AND t6.is_deleted = 'N'
+                    AND t1.lib_type = #{detailType}
+                    AND (t2.spell LIKE CONCAT('%',UPPER(#{InputStr}),'%') OR t2.name LIKE CONCAT('%',#{InputStr},'%'))
+                    AND t4.relation_id = 18
+                    GROUP BY t5.id) b1,
+                        kl_concept b2,
+                        kl_concept_detail b3
+        WHERE b2.is_deleted = 'N'
+        and b3.is_deleted = 'N'
+        and b1.parentName = b2.lib_name
+        and b2.lib_type = 46
+        and b2.id = b3.concept_id)
+
+        -- 化验子项推父项,父项--子项组合公表项匹配静态知识
+        UNION
+        (SELECT b1.*,b2.id uniqueId,b2.lib_name uniqueName
+        FROM (SELECT t1.id selfId,t1.lib_name selfName,t5.id parentId,t5.lib_name parentName,null sameName,t2.is_concept showType,t1.lib_type libTypeId,t6.`name` libTypeName FROM kl_concept t1
+        LEFT JOIN kl_library_info t2 ON t1.id = t2.concept_id
+        LEFT JOIN kl_relation t4 ON t4.end_id= t1.id
+        LEFT JOIN kl_concept t5 on t5.id = t4.start_id
+        LEFT JOIN kl_lexicon t6 ON t6.id = t1.lib_type
+        LEFT JOIN kl_concept_common t3 ON t1.id = t3.concept_id
+        WHERE
+        t1.is_deleted = 'N'
+        AND t2.is_deleted = 'N'
+        AND t3.is_deleted = 'N'
+        AND t4.is_deleted = 'N'
+        AND t5.is_deleted = 'N'
+        AND t6.is_deleted = 'N'
+        AND t1.lib_type = #{detailType}
+        AND (t2.spell = UPPER(#{InputStr}) OR t2.name = #{InputStr})
+        AND t4.relation_id = 18
+        GROUP BY t5.id) b1,
+        kl_concept b2,
+        kl_concept_detail b3
+        WHERE b2.is_deleted = 'N'
+        and b3.is_deleted = 'N'
+        and CONCAT(b1.parentName,'--',b1.selfName) = b2.lib_name
+        and b2.lib_type = 46
+        and b2.id = b3.concept_id)
+        UNION
+        (SELECT b1.*,b2.id uniqueId,b2.lib_name uniqueName
+        FROM (SELECT t1.id selfId,t1.lib_name selfName,t5.id parentId,t5.lib_name parentName,null sameName,t2.is_concept showType,t1.lib_type libTypeId,t6.`name` libTypeName FROM kl_concept t1
+        LEFT JOIN kl_library_info t2 ON t1.id = t2.concept_id
+        LEFT JOIN kl_relation t4 ON t4.end_id= t1.id
+        LEFT JOIN kl_concept t5 on t5.id = t4.start_id
+        LEFT JOIN kl_lexicon t6 ON t6.id = t1.lib_type
+        LEFT JOIN kl_concept_common t3 ON t1.id = t3.concept_id
+        WHERE
+        t1.is_deleted = 'N'
+        AND t2.is_deleted = 'N'
+        AND t3.is_deleted = 'N'
+        AND t4.is_deleted = 'N'
+        AND t5.is_deleted = 'N'
+        AND t6.is_deleted = 'N'
+        AND t1.lib_type = #{detailType}
+        AND (t2.spell LIKE CONCAT(UPPER(#{InputStr}),'%') OR t2.name LIKE CONCAT(#{InputStr},'%'))
+        AND t4.relation_id = 18
+        GROUP BY t5.id) b1,
+        kl_concept b2,
+        kl_concept_detail b3
+        WHERE b2.is_deleted = 'N'
+        and b3.is_deleted = 'N'
+        and CONCAT(b1.parentName,'--',b1.selfName) = b2.lib_name
+        and b2.lib_type = 46
+        and b2.id = b3.concept_id)
+        UNION
+        (SELECT b1.*,b2.id uniqueId,b2.lib_name uniqueName
+        FROM (SELECT t1.id selfId,t1.lib_name selfName,t5.id parentId,t5.lib_name parentName,null sameName,t2.is_concept showType,t1.lib_type libTypeId,t6.`name` libTypeName FROM kl_concept t1
+                    LEFT JOIN kl_library_info t2 ON t1.id = t2.concept_id
+                    LEFT JOIN kl_relation t4 ON t4.end_id= t1.id
+                    LEFT JOIN kl_concept t5 on t5.id = t4.start_id
+                    LEFT JOIN kl_lexicon t6 ON t6.id = t1.lib_type
+                    LEFT JOIN kl_concept_common t3 ON t1.id = t3.concept_id
+                    WHERE
+                    t1.is_deleted = 'N'
+                    AND t2.is_deleted = 'N'
+                    AND t3.is_deleted = 'N'
+                    AND t4.is_deleted = 'N'
+                    AND t5.is_deleted = 'N'
+                    AND t6.is_deleted = 'N'
+                    AND t1.lib_type = #{detailType}
+                    AND (t2.spell LIKE CONCAT('%',UPPER(#{InputStr}),'%') OR t2.name LIKE CONCAT('%',#{InputStr},'%'))
+                    AND t4.relation_id = 18
+                    GROUP BY t5.id) b1,
+                        kl_concept b2,
+                        kl_concept_detail b3
+        WHERE b2.is_deleted = 'N'
+        and b3.is_deleted = 'N'
+        and CONCAT(b1.parentName,'--',b1.selfName) = b2.lib_name
+        and b2.lib_type = 46
+        and b2.id = b3.concept_id)
+    </select>
+
+    <select id="getConceptConMap" resultType="com.diagbot.dto.ConceptBaseDTO" parameterType="com.diagbot.vo.ConceptFindVO">
+        SELECT
+            t1.id as conceptId,
+            t1.lib_name as name
+        FROM
+            kl_concept t1,
+            kl_concept_common t2
+        WHERE
+            t1.id = t2.concept_id
+        AND t1.is_deleted = 'N'
+        AND t2.is_deleted = 'N'
+        <if test="conceptIds != null and conceptIds.size > 0">
+            and t1.id in
+            <foreach item="id" collection="conceptIds" open="(" separator="," close=")">
+                #{id}
+            </foreach>
+        </if>
+        <if test="sexType == 3">
+            AND t2.sex_type IN ('1','2','3')
+        </if>
+        <if test="sexType != 3">
+            AND t2.sex_type IN ('3',#{sexType})
+        </if>
+        <if test="age != null and age != ''">
+            AND <![CDATA[ t2.min_age <= #{age} ]]>
+            AND <![CDATA[ t2.max_age >= #{age} ]]>
+        </if>
+    </select>
+
+    <select id="getStandWord" resultType="java.lang.String">
+        SELECT lib_name FROM kl_concept WHERE is_deleted = 'N' AND lib_type = 33
+    </select>
 </mapper>

+ 51 - 0
aipt-service/src/main/resources/standword.txt

@@ -0,0 +1,51 @@
+排便少于每周3次
+布氏征阳性
+附件活动性包块
+收缩压≥140mmHg
+收缩压大于140mmHg
+舒张压≥90mmHg
+舒张压大于90mmHg
+血压大于140mmHg
+悬壅垂水肿
+腰/臀比例>0.85
+血压≥140/90mmHg
+胎体
+不规则阴道出血/阴道出血
+下腹肿块/腹块
+心率大于100次/分
+口咽黏膜弥漫性充血肿胀
+悬壅垂水肿
+悬壅垂水肿
+血压小于90/60mmHg
+胸痛持续时间大于10分钟
+悬壅垂水肿
+电解质检查
+肺功能检查
+淋巴结细胞学检查
+腹部彩超
+膝关节痛风石
+触觉语颤增强
+晨僵≥30分钟
+BMI小于21
+体重指数小于21
+右上腹部饱满
+胃脱落细胞学检查
+肢体活动受限
+DBP>90mmHg
+SBP>140mmHg
+收缩压>140mmHg
+舒张压>90mmHg
+血压>140/90mmHg
+心率>90次/分
+R>20次/分
+体温<36℃
+体温>38℃
+R≥24次/分钟
+呼吸频率大于24次/分钟
+Hachinski缺血积分<4分
+Hachinski评分<4分
+HIS缺血指数<4分
+HIS评分<4分
+关节僵硬<30min
+晨僵<30min
+肢体苍白

BIN
docs/009.20190425知识库标准化脚本/知识库标准化执行脚本_20190703.zip


+ 11 - 0
icss-service/src/main/java/com/diagbot/client/AiptServiceClient.java

@@ -24,6 +24,7 @@ import com.diagbot.dto.PushDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.dto.RetrievalDTO;
 import com.diagbot.entity.ScaleContent;
+import com.diagbot.vo.ConceptFindVO;
 import com.diagbot.vo.ConceptIntroduceVO;
 import com.diagbot.vo.ConceptSearchVO;
 import com.diagbot.vo.ConceptUsualVO;
@@ -132,6 +133,16 @@ public interface AiptServiceClient {
     @PostMapping("/concept/getConceptMap")
     RespDTO<Map<Long, String>> getConceptMap(@RequestBody ConceptSearchVO conceptSearchVO);
 
+
+    /**
+     * 根据概念Id,年龄,性别列表获取概念列表Map
+     *
+     * @param conceptFindVO 搜索参数
+     * @return 术语id和术语 Map
+     */
+    @PostMapping("/concept/getConceptCondMap")
+    RespDTO<Map<Long, String>> getConceptCondMap(@RequestBody ConceptFindVO conceptFindVO);
+
     /**
      * 获取治疗方案
      *

+ 17 - 43
icss-service/src/main/java/com/diagbot/client/TranServiceClient.java

@@ -1,14 +1,5 @@
 package com.diagbot.client;
 
-import java.util.List;
-import java.util.Map;
-
-import javax.validation.Valid;
-
-import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-
 import com.diagbot.client.hystrix.TranServiceHystrix;
 import com.diagbot.dto.DoctorInfoDTO;
 import com.diagbot.dto.GetExportInquirysDTO;
@@ -40,6 +31,13 @@ import com.diagbot.vo.PacsCheckItemVO;
 import com.diagbot.vo.PatientInfoVO;
 import com.diagbot.vo.SaveInquiryToHisVO;
 import com.diagbot.vo.TranFieldInfoVO;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import javax.validation.Valid;
+import java.util.List;
+import java.util.Map;
 
 /**
  * @Description: 调用信息对接层服务
@@ -129,17 +127,19 @@ public interface TranServiceClient {
      */
     @PostMapping("/inquiryInfo/saveInquiryToHis")
     RespDTO<Boolean> saveInquiryToHis(@RequestBody SaveInquiryToHisVO saveInquiryToHisVO);
-    
+
     /**
      * 急诊-历史病历列表
+     *
      * @param hisInquirysForJzVO
      * @return
      */
     @PostMapping("/inquiryInfo/hisInquirysForJz")
     RespDTO<HisInquirysForJzDTO> hisInquirysForJz(@RequestBody HisInquirysForJzVO hisInquirysForJzVO);
-    
+
     /**
      * 急诊-添加二次诊断
+     *
      * @param addDiagnoseSecondVO
      * @return
      */
@@ -148,30 +148,13 @@ public interface TranServiceClient {
 
     /**
      * 急诊-获取需要导出的问诊数据
+     *
      * @param inquiryIds
      * @return
      */
     @PostMapping("/inquiryInfo/getExportInquirys")
     RespDTO<List<GetExportInquirysDTO>> getExportInquirys(@RequestBody List<Long> inquiryIds);
 
-    /**
-     * 根据医院编码获取化验公表映射关系-itemName不为空
-     *
-     * @param hosCodeVO
-     * @return
-     */
-    @PostMapping("/tranLisConfig/getLisConfigByHosCode_NotEmptyItemName")
-    RespDTO<Map<String, Map<String, String>>> getLisConfigByHosCode_NotEmptyItemName(@RequestBody HosCodeVO hosCodeVO);
-
-    /**
-     * 根据医院编码获取化验公表映射关系-itemName为空
-     *
-     * @param hosCodeVO
-     * @return
-     */
-    @PostMapping("/tranLisConfig/getLisConfigByHosCode_EmptyItemName")
-    RespDTO<Map<String, String>> getLisConfigByHosCode_EmptyItemName(@RequestBody HosCodeVO hosCodeVO);
-
     /**
      * 根据医院编码获取辅检公表映射关系
      *
@@ -199,15 +182,6 @@ public interface TranServiceClient {
     @PostMapping("/diseaseIcd/getDiseaseIcdByHosCode")
     RespDTO<Map<String, String>> getDiseaseIcdByHosCode(@RequestBody HosCodeVO hosCodeVO);
 
-    /**
-     * 根据医院编码获取化验公表映射关系,公表项做key
-     *
-     * @param hosCodeVO
-     * @return
-     */
-    @PostMapping("/tranLisConfig/getLisConfigByUniqueNameAndHosCode")
-    RespDTO<Map<String, List<String>>> getLisConfigByUniqueNameAndHosCode(@RequestBody HosCodeVO hosCodeVO);
-
     /**
      * 根据医院编码查询辅检公表映射,公表项做key
      *
@@ -216,19 +190,19 @@ public interface TranServiceClient {
      */
     @PostMapping("/pacsConfig/getPacsConfigByUniqueNameAndHosCode")
     RespDTO<Map<String, List<String>>> getPacsConfigByUniqueNameAndHosCode(@RequestBody HosCodeVO hosCodeVO);
-    
+
     @PostMapping("/lisDockingImports/lisDockingImports")
     public RespDTO<LisRetrieveListAllDTO> getLisDatas(@RequestBody @Valid LisArgumentsVO lisArgumentsVO);
 
     @PostMapping("/lisDockingImports/getByGroupNameLisData")
-	public RespDTO<LisDataDTO> getByGroupNameLisData(@RequestBody @Valid LisGroupNameVO lisGroupNameVO);
+    public RespDTO<LisDataDTO> getByGroupNameLisData(@RequestBody @Valid LisGroupNameVO lisGroupNameVO);
 
     @PostMapping("/lisDockingImports/pacsDockingImport")
-	RespDTO<PacsRetrieveListAllDTO> pacsDockingImports(@RequestBody @Valid PacsArgumentsVO pacsArgumentsVO);
+    RespDTO<PacsRetrieveListAllDTO> pacsDockingImports(@RequestBody @Valid PacsArgumentsVO pacsArgumentsVO);
 
     @PostMapping("/lisDockingImports/getByCheckItemPacsData")
-	RespDTO<PacsDataDTO> getByCheckItemPacsDatas(@RequestBody @Valid PacsCheckItemVO pacsGroupNameVO);
-    
+    RespDTO<PacsDataDTO> getByCheckItemPacsDatas(@RequestBody @Valid PacsCheckItemVO pacsGroupNameVO);
+
     @PostMapping("/sysSet/getSysSetInfoDatas")
     RespDTO<List<SysSetInfoDTO>> getSysSetInfoDatas(@Valid @RequestBody HospitalSetVO hospitalSetVO);
 }

+ 13 - 0
icss-service/src/main/java/com/diagbot/client/hystrix/AiptServiceHystrix.java

@@ -24,6 +24,7 @@ import com.diagbot.dto.PushDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.dto.RetrievalDTO;
 import com.diagbot.entity.ScaleContent;
+import com.diagbot.vo.ConceptFindVO;
 import com.diagbot.vo.ConceptIntroduceVO;
 import com.diagbot.vo.ConceptSearchVO;
 import com.diagbot.vo.ConceptUsualVO;
@@ -164,6 +165,18 @@ public class AiptServiceHystrix implements AiptServiceClient {
         return null;
     }
 
+    /**
+     * 根据概念Id,年龄,性别列表获取概念列表Map
+     *
+     * @param conceptFindVO 搜索参数
+     * @return 术语id和术语 Map
+     */
+    @Override
+    public RespDTO<Map<Long, String>> getConceptCondMap(@RequestBody ConceptFindVO conceptFindVO){
+        log.error("【hystrix】调用{}异常", "getConceptMap");
+        return null;
+    }
+
     /**
      * 获取治疗方案
      *

+ 45 - 84
icss-service/src/main/java/com/diagbot/client/hystrix/TranServiceHystrix.java

@@ -1,13 +1,5 @@
 package com.diagbot.client.hystrix;
 
-import java.util.List;
-import java.util.Map;
-
-import javax.validation.Valid;
-
-import org.springframework.stereotype.Component;
-import org.springframework.web.bind.annotation.RequestBody;
-
 import com.diagbot.client.TranServiceClient;
 import com.diagbot.dto.DoctorInfoDTO;
 import com.diagbot.dto.GetExportInquirysDTO;
@@ -39,8 +31,13 @@ import com.diagbot.vo.PacsCheckItemVO;
 import com.diagbot.vo.PatientInfoVO;
 import com.diagbot.vo.SaveInquiryToHisVO;
 import com.diagbot.vo.TranFieldInfoVO;
-
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import javax.validation.Valid;
+import java.util.List;
+import java.util.Map;
 
 /**
  * @Description: 调用信息对接层服务
@@ -103,46 +100,22 @@ public class TranServiceHystrix implements TranServiceClient {
         log.error("【hystrix】调用{}异常", "saveInquiryToHis");
         return null;
     }
-    
-    @Override
-	public RespDTO<HisInquirysForJzDTO> hisInquirysForJz(HisInquirysForJzVO hisInquirysForJzVO) {
-    	log.error("【hystrix】调用{}异常", "hisInquirysForJz");
-		return null;
-	}
-
-	@Override
-	public RespDTO<Boolean> addDiagnoseSecond(AddDiagnoseSecondVO addDiagnoseSecondVO) {
-    	log.error("【hystrix】调用{}异常", "addDiagnoseSecond");
-		return null;
-	}
-	
-	@Override
-	public RespDTO<List<GetExportInquirysDTO>> getExportInquirys(List<Long> inquiryIds) {
-		log.error("【hystrix】调用{}异常", "getExportInquirys");
-		return null;
-	}
-	
-	/**
-     * 根据医院编码获取化验公表映射关系-itemName不为空
-     *
-     * @param hosCodeVO
-     * @return
-     */
+
     @Override
-    public RespDTO<Map<String, Map<String, String>>> getLisConfigByHosCode_NotEmptyItemName(@RequestBody HosCodeVO hosCodeVO) {
-        log.error("【hystrix】调用{}异常", "getLisConfigByHosCode_NotEmptyItemName");
+    public RespDTO<HisInquirysForJzDTO> hisInquirysForJz(HisInquirysForJzVO hisInquirysForJzVO) {
+        log.error("【hystrix】调用{}异常", "hisInquirysForJz");
         return null;
     }
 
-    /**
-     * 根据医院编码获取化验公表映射关系-itemName为空
-     *
-     * @param hosCodeVO
-     * @return
-     */
     @Override
-    public RespDTO<Map<String, String>> getLisConfigByHosCode_EmptyItemName(@RequestBody HosCodeVO hosCodeVO) {
-        log.error("【hystrix】调用{}异常", "getLisConfigByHosCode_EmptyItemName");
+    public RespDTO<Boolean> addDiagnoseSecond(AddDiagnoseSecondVO addDiagnoseSecondVO) {
+        log.error("【hystrix】调用{}异常", "addDiagnoseSecond");
+        return null;
+    }
+
+    @Override
+    public RespDTO<List<GetExportInquirysDTO>> getExportInquirys(List<Long> inquiryIds) {
+        log.error("【hystrix】调用{}异常", "getExportInquirys");
         return null;
     }
 
@@ -183,56 +156,44 @@ public class TranServiceHystrix implements TranServiceClient {
     }
 
     /**
-     * 根据医院编码获取化验公表映射关系,公表项做key
+     * 根据医院编码查询辅检公表映射,公表项做key
      *
      * @param hosCodeVO
      * @return
      */
     @Override
-    public RespDTO<Map<String, List<String>>> getLisConfigByUniqueNameAndHosCode(@RequestBody HosCodeVO hosCodeVO) {
-        log.error("【hystrix】调用{}异常", "getLisConfigByUniqueNameAndHosCode");
+    public RespDTO<Map<String, List<String>>> getPacsConfigByUniqueNameAndHosCode(@RequestBody HosCodeVO hosCodeVO) {
+        log.error("【hystrix】调用{}异常", "getPacsConfigByUniqueNameAndHosCode");
         return null;
     }
 
-    /**
-     * 根据医院编码查询辅检公表映射,公表项做key
-     *
-     * @param hosCodeVO
-     * @return
-     */
     @Override
-    public RespDTO<Map<String, List<String>>> getPacsConfigByUniqueNameAndHosCode(@RequestBody HosCodeVO hosCodeVO) {
-        log.error("【hystrix】调用{}异常", "getPacsConfigByUniqueNameAndHosCode");
+    public RespDTO<LisRetrieveListAllDTO> getLisDatas(@RequestBody @Valid LisArgumentsVO lisArgumentsVO) {
+        log.error("【hystrix】调用{}异常", "getLisDatas");
         return null;
     }
 
-	@Override
-	public RespDTO<LisRetrieveListAllDTO> getLisDatas(@RequestBody @Valid LisArgumentsVO lisArgumentsVO) {
-		log.error("【hystrix】调用{}异常", "getLisDatas");
-		return null;
-	}
-
-	@Override
-	public RespDTO<LisDataDTO> getByGroupNameLisData(@RequestBody @Valid LisGroupNameVO lisGroupNameVO) {
-		log.error("【hystrix】调用{}异常", "getByGroupNameLisData");
-		return null;
-	}
-
-	@Override
-	public RespDTO<PacsRetrieveListAllDTO> pacsDockingImports(@RequestBody @Valid PacsArgumentsVO pacsArgumentsVO) {
-		log.error("【hystrix】调用{}异常", "pacsDockingImports");
-		return null;
-	}
-
-	@Override
-	public RespDTO<PacsDataDTO> getByCheckItemPacsDatas(@RequestBody @Valid PacsCheckItemVO pacsGroupNameVO) {
-		log.error("【hystrix】调用{}异常", "getByCheckItemPacsDatas");
-		return null;
-	}
-
-	@Override
-	public RespDTO<List<SysSetInfoDTO>> getSysSetInfoDatas(@Valid HospitalSetVO hospitalSetVO) {
-		log.error("【hystrix】调用{}异常", "getSysSetInfoDatas");
-		return null;
-	}
+    @Override
+    public RespDTO<LisDataDTO> getByGroupNameLisData(@RequestBody @Valid LisGroupNameVO lisGroupNameVO) {
+        log.error("【hystrix】调用{}异常", "getByGroupNameLisData");
+        return null;
+    }
+
+    @Override
+    public RespDTO<PacsRetrieveListAllDTO> pacsDockingImports(@RequestBody @Valid PacsArgumentsVO pacsArgumentsVO) {
+        log.error("【hystrix】调用{}异常", "pacsDockingImports");
+        return null;
+    }
+
+    @Override
+    public RespDTO<PacsDataDTO> getByCheckItemPacsDatas(@RequestBody @Valid PacsCheckItemVO pacsGroupNameVO) {
+        log.error("【hystrix】调用{}异常", "getByCheckItemPacsDatas");
+        return null;
+    }
+
+    @Override
+    public RespDTO<List<SysSetInfoDTO>> getSysSetInfoDatas(@Valid HospitalSetVO hospitalSetVO) {
+        log.error("【hystrix】调用{}异常", "getSysSetInfoDatas");
+        return null;
+    }
 }

+ 4 - 2
icss-service/src/main/java/com/diagbot/dto/LisConfigDTO.java

@@ -12,8 +12,10 @@ import lombok.Setter;
 @Setter
 @Getter
 public class LisConfigDTO {
-	 private Long id;
-	 /**
+	private Long id;
+	 
+	private String assembly;
+	/**
      * 医院id
      */
     private String hospitalId;

+ 15 - 0
icss-service/src/main/java/com/diagbot/dto/OrderRetrivevalDTO.java

@@ -0,0 +1,15 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: wangyu
+ * @time: 2019/6/27 13:23
+ */
+@Getter
+@Setter
+public class OrderRetrivevalDTO extends RetrievalDTO {
+    private Integer orderNo;//排序号
+}

+ 1 - 3
icss-service/src/main/java/com/diagbot/dto/PushDTO.java

@@ -20,11 +20,9 @@ public class PushDTO {
     private List<ConceptPushDTO> vital;
     private List<Long> vitalIds;
     private List<QuestionPushDTO> moduleVital;
-    private List<ConceptPushDTO> lab;
+    private List<QuestionPushDTO> lab;
     private List<ConceptPushDTO> pacs;
     private Map<String, List<ConceptPushDTO>> dis;
     private ConceptPushDTO dept;
     private List<MedicalIndication> medicalIndications;
-    /*private List<ScaleContent> scale;
-    private List<EvaluationDTO> evaluationModule;*/
 }

+ 2 - 0
icss-service/src/main/java/com/diagbot/dto/RetrievalDTO.java

@@ -27,4 +27,6 @@ public class RetrievalDTO {
     private String libTypeName;
     //icss标签type
     private Integer type;
+    //公表名称
+    private String uniqueName;
 }

+ 2 - 1
icss-service/src/main/java/com/diagbot/enums/FeatureTypeEnum.java

@@ -12,6 +12,7 @@ public enum FeatureTypeEnum implements KeyedNamed {
     Symptom(1, "症状"),
     Other(3, "其他史"),
     Vital(4, "查体"),
+    ModuleVital(41, "查体模板"),
     Lis(5, "化验"),
     Pacs(6, "辅检"),
     Disease(7, "诊断"),
@@ -54,4 +55,4 @@ public enum FeatureTypeEnum implements KeyedNamed {
     public String getName() {
         return name;
     }
-}
+}

+ 9 - 9
icss-service/src/main/java/com/diagbot/facade/AssembleFacade.java

@@ -13,6 +13,7 @@ import org.springframework.stereotype.Component;
 
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @Description:
@@ -64,21 +65,20 @@ public class AssembleFacade {
 
         //化验项映射,转公表
         if (ListUtil.isNotEmpty(pushVO.getLis())) {
-            Map<String, Map<String, String>> lisConfigMap = lisMappingFacade.getLisMapping_NotEmptyItemName();
-            Map<String, String> lisConfigWithEmptyItemNameMap = lisMappingFacade.getLisConfig_EmptyItemName();
+            List<String> mealNameList = pushVO.getLis().stream().map(lisResult -> lisResult.getName()).collect(Collectors.toList());
+            Map<String, Map<String, String>> lisConfigMap = lisMappingFacade.getLisMappingByMealName(mealNameList);
             for (LisResult lisResult : pushVO.getLis()) {
                 //source=0 icss页面数据,source=1 外部导入数据,外部导入数据不处理
                 if (!lisResult.getSource().equals(LisSourceEnum.Inner.getKey())) {
                     continue;
                 }
                 if (StringUtil.isNotBlank(lisResult.getName())) {
-                    if (StringUtil.isNotBlank(lisResult.getDetailName())) {
-                        Map<String, String> detailMap = lisConfigMap.get(lisResult.getName());
-                        if (null != detailMap && detailMap.size() > 0 && StringUtil.isNotBlank(detailMap.get(lisResult.getDetailName()))) {
-                            lisResult.setUniqueName(detailMap.get(lisResult.getDetailName()));
-                        }
-                    } else {
-                        lisResult.setUniqueName(lisConfigWithEmptyItemNameMap.get(lisResult.getName()));
+                    if (lisResult.getDetailName() == null) {
+                        lisResult.setDetailName("");
+                    }
+                    Map<String, String> detailMap = lisConfigMap.get(lisResult.getName());
+                    if (null != detailMap && detailMap.size() > 0 && StringUtil.isNotBlank(detailMap.get(lisResult.getDetailName()))) {
+                        lisResult.setUniqueName(detailMap.get(lisResult.getDetailName()));
                     }
                 }
             }

+ 25 - 15
icss-service/src/main/java/com/diagbot/facade/LisExcelResFacade.java

@@ -5,6 +5,7 @@ import com.diagbot.dto.LisConfigDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
+import com.diagbot.util.ListUtil;
 import com.diagbot.util.StringUtil;
 import com.diagbot.vo.LisExcelResVO;
 import com.diagbot.vo.LisExcelWrapperVO;
@@ -44,11 +45,13 @@ public class LisExcelResFacade {
     @Autowired
     TranServiceClient tranServiceClient;
 
-    public RespDTO<LitAssayVO> lisExcelAnalysis(MultipartFile file, LisHospitalCodeVO lisHospitalCodeVO, HttpServletRequest request) {
+    @SuppressWarnings("null")
+	public RespDTO<LitAssayVO> lisExcelAnalysis(MultipartFile file, LisHospitalCodeVO lisHospitalCodeVO, HttpServletRequest request) {
 
         List<String> messages = new ArrayList<>();
         List<LisExcelWrapperVO> lisExcelWrapperList = new ArrayList<>();
         InputStream inputStream = null;
+        List<String> assemblys = new ArrayList<String>();
         Workbook wb = null;
         try {
             if (!file.isEmpty()) {
@@ -107,8 +110,17 @@ public class LisExcelResFacade {
                                     }
                                     LisExcelWrapperVO lisExcelWrapper = new LisExcelWrapperVO();
 
+                                    
                                     lisExcelWrapper.setMealName(mealName);
                                     lisExcelWrapper.setItemName(itemName);
+                                    String assembly = mealName+"--";
+                                    if (!assemblys.contains(assembly)){
+                                        assemblys.add(assembly);
+                                    }
+                                    assembly = mealName+"--"+itemName;
+                                    if (!assemblys.contains(assembly)){
+                                        assemblys.add(assembly);
+                                    }
                                     //  lisExcelWrapper.setUniqueName(uniqueName);
                                     lisExcelWrapper.setUnit(unit);
                                     lisExcelWrapper.setValue(value);
@@ -141,29 +153,27 @@ public class LisExcelResFacade {
                 messages.add("无文件上传!");
             }
             //匹配公表名
+            lisHospitalCodeVO.setAssemblys(assemblys);
             RespDTO<List<LisConfigDTO>> litDatas = tranServiceClient.getLisConfigByhospitalId(lisHospitalCodeVO);
             if (litDatas == null || !"0".equals(litDatas.code)) {
                 throw new CommonException(CommonErrorCode.SERVER_IS_ERROR,
                         "获取匹配公表名信息失败");
             }
             List<LisConfigDTO> litData = litDatas.data;
+
             //导入的数据跟公表数据进行配对
-            if (litData.size() > 0) {
+            if (ListUtil.isNotEmpty(litData)) {
+                Map<String, String> listMap = litData.stream()
+                        .collect(Collectors.toMap(LisConfigDTO::getAssembly, LisConfigDTO::getUniqueName));
                 List<LisExcelWrapperVO> lisExcelWrapperListNew = new ArrayList<>();
                 for (LisExcelWrapperVO lisExcelWrapperNew : lisExcelWrapperList) {
-
-                    for (LisConfigDTO LisNew : litData) {
-                        if (LisNew.getItemName() != null) {
-                            if (LisNew.getMealName().equals(lisExcelWrapperNew.getMealName())
-                                    && LisNew.getItemName().equals(lisExcelWrapperNew.getItemName())) {
-                                lisExcelWrapperNew.setUniqueName(LisNew.getUniqueName());
-                            }
-                        } else {
-                            if (LisNew.getMealName().equals(lisExcelWrapperNew.getMealName())) {
-                                lisExcelWrapperNew.setUniquemealName(LisNew.getUniqueName());
-                            }
-                        }
-
+                    String assemblymeal = lisExcelWrapperNew.getMealName()+"--";
+                    if(null != listMap.get(assemblymeal)){
+                        lisExcelWrapperNew.setUniquemealName(listMap.get(assemblymeal));
+                    }
+                    String item = lisExcelWrapperNew.getMealName()+"--"+lisExcelWrapperNew.getItemName();
+                    if(null != listMap.get(item)){
+                        lisExcelWrapperNew.setUniqueName(listMap.get(item));
                     }
                     lisExcelWrapperListNew.add(lisExcelWrapperNew);
                 }

+ 17 - 71
icss-service/src/main/java/com/diagbot/facade/LisMappingFacade.java

@@ -7,6 +7,7 @@ import com.diagbot.service.impl.LisMappingServiceImpl;
 import com.diagbot.util.EntityUtil;
 import com.diagbot.util.ListUtil;
 import com.diagbot.util.StringUtil;
+import com.google.common.collect.Lists;
 import org.springframework.stereotype.Component;
 
 import java.util.LinkedHashMap;
@@ -23,13 +24,16 @@ public class LisMappingFacade extends LisMappingServiceImpl {
 
     /**
      * 获取化验公表映射关系 Map<mealName,Map<itemName,uniqueName>> itemName 不为空
-     *
+     * @param mealNameList
      * @return
      */
-    public Map<String, Map<String, String>> getLisMapping_NotEmptyItemName() {
+    public Map<String, Map<String, String>> getLisMappingByMealName(List<String> mealNameList) {
         Map<String, Map<String, String>> retMap = new LinkedHashMap<>();
         QueryWrapper<LisMapping> lisMappingQueryWrapper = new QueryWrapper<>();
-        lisMappingQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey()).isNotNull("item_name").ne("item_name", "");
+        lisMappingQueryWrapper.select("meal_name,ifnull(item_name,'') as item_name,unique_name").eq("is_deleted", IsDeleteEnum.N.getKey());
+        if (ListUtil.isNotEmpty(mealNameList)) {
+            lisMappingQueryWrapper.in("meal_name", mealNameList);
+        }
         List<LisMapping> lisMappingList = this.list(lisMappingQueryWrapper);
         Map<String, List<LisMapping>> lisMappingMap = EntityUtil.makeEntityListMap(lisMappingList, "mealName");
         for (Map.Entry<String, List<LisMapping>> entry : lisMappingMap.entrySet()) {
@@ -42,42 +46,18 @@ public class LisMappingFacade extends LisMappingServiceImpl {
         return retMap;
     }
 
-    /**
-     * 根据医院编码获取化验公表映射关系-itemName为空 Map<mealName,uniqueName>
-     *
-     * @return
-     */
-    public Map<String, String> getLisConfig_EmptyItemName() {
-        QueryWrapper<LisMapping> lisMappingQueryWrapper = new QueryWrapper<>();
-        lisMappingQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey()).
-                isNull("item_name").or(i -> i.eq("item_name", ""));
-        List<LisMapping> lisMappingList = this.list(lisMappingQueryWrapper);
-        Map<String, String> retMap = EntityUtil.makeMapWithKeyValue(lisMappingList, "mealName", "uniqueName");
-        return retMap;
-    }
-
-    /**
-     * 获取化验公表映射关系 Map<mealName,uniqueName> itemName 为空
-     *
-     * @return
-     */
-    public Map<String, String> getLisMappingWithoutItemName() {
-        QueryWrapper<LisMapping> lisMappingQueryWrapper = new QueryWrapper<>();
-        lisMappingQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey()).isNull("item_name").or(i -> i.eq("item_name", ""));
-        List<LisMapping> lisMappingList = this.list(lisMappingQueryWrapper);
-        Map<String, String> retMap = EntityUtil.makeMapWithKeyValue(lisMappingList, "mealName", "uniqueName");
-        return retMap;
-    }
-
     /**
      * 化验公表映射关系  Map<uniqueName,List<mealName>>
-     *
+     * @param uniqueNameList
      * @return
      */
-    public Map<String, List<String>> getLisMappingByUniqueName() {
+    public Map<String, List<String>> getLisMappingByUniqueName(List<String> uniqueNameList) {
         Map<String, List<String>> retMap = new LinkedHashMap<>();
         QueryWrapper<LisMapping> lisMappingQueryWrapper = new QueryWrapper<>();
         lisMappingQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey());
+        if (ListUtil.isNotEmpty(uniqueNameList)) {
+            lisMappingQueryWrapper.in("unique_name", uniqueNameList);
+        }
         List<LisMapping> lisMappingList = this.list(lisMappingQueryWrapper);
         Map<String, List<LisMapping>> lisMappingMap = EntityUtil.makeEntityListMap(lisMappingList, "uniqueName");
         for (Map.Entry<String, List<LisMapping>> entry : lisMappingMap.entrySet()) {
@@ -93,51 +73,17 @@ public class LisMappingFacade extends LisMappingServiceImpl {
      * @return
      */
     public Map<String, Map<String, String>> getLisMappingByQuestion(String project, List<String> details) {
-        Map<String, Map<String, String>> lisWithItemNamMap = getLisMapping_NotEmptyItemName();
-        Map<String, String> lisWithoutItemNameMap = getLisMappingWithoutItemName();
-
         if (StringUtil.isBlank(project)) {
             return null;
         }
 
-        Map<String, Map<String, String>> retMap = new LinkedHashMap<>();
-        Map<String, String> projectMap = new LinkedHashMap<>();
-        projectMap.put(project, lisWithoutItemNameMap.get(project));
-        retMap.put("project", projectMap);
-
-        if (ListUtil.isEmpty(details)) {
-            return retMap;
-        }
-
-        Map<String, String> detailMap = new LinkedHashMap<>();
-        Map<String, String> projectDetailMap = lisWithItemNamMap.get(project);
-        if (projectDetailMap != null) {
-            for (String detail : details) {
-                detailMap.put(detail, projectDetailMap.get(detail));
-            }
-        }
-        retMap.put("details", detailMap);
-        return retMap;
-    }
-
-
-    /**
-     * 获取对应关系
-     *
-     * @param project 套餐
-     * @param details 明细
-     * @param lisWithItemNamMap
-     * @param lisWithoutItemNameMap
-     * @return
-     */
-    public Map<String, Map<String, String>> getLisMappingByQuestion(String project, List<String> details, Map<String, String> lisWithoutItemNameMap, Map<String, Map<String, String>> lisWithItemNamMap) {
-        if (StringUtil.isBlank(project)) {
-            return null;
-        }
+        List<String> mealNameList= Lists.newLinkedList();
+        mealNameList.add(project);
+        Map<String, Map<String, String>> lisMappingMap = getLisMappingByMealName(mealNameList);
 
         Map<String, Map<String, String>> retMap = new LinkedHashMap<>();
         Map<String, String> projectMap = new LinkedHashMap<>();
-        projectMap.put(project, lisWithoutItemNameMap.get(project));
+        projectMap.put(project, lisMappingMap.get(project).get(""));
         retMap.put("project", projectMap);
 
         if (ListUtil.isEmpty(details)) {
@@ -145,7 +91,7 @@ public class LisMappingFacade extends LisMappingServiceImpl {
         }
 
         Map<String, String> detailMap = new LinkedHashMap<>();
-        Map<String, String> projectDetailMap = lisWithItemNamMap.get(project);
+        Map<String, String> projectDetailMap = lisMappingMap.get(project);
         if (projectDetailMap != null) {
             for (String detail : details) {
                 detailMap.put(detail, projectDetailMap.get(detail));

+ 30 - 13
icss-service/src/main/java/com/diagbot/facade/ModuleFacade.java

@@ -15,6 +15,7 @@ import com.diagbot.util.BeanUtil;
 import com.diagbot.util.EntityUtil;
 import com.diagbot.util.ListUtil;
 import com.diagbot.util.RespDTOUtil;
+import com.diagbot.vo.ConceptFindVO;
 import com.diagbot.vo.ConceptSearchVO;
 import com.diagbot.vo.ModuleVO;
 import com.diagbot.vo.QuestionVO;
@@ -49,40 +50,45 @@ public class ModuleFacade extends ModuleInfoServiceImpl {
      * @return 模型结构
      */
     public List<ModuleInfoDTO> getAll(ModuleVO moduleVO) {
+        ConceptFindVO conceptFindVO = new ConceptFindVO();
         ConceptSearchVO conceptSearchVO = new ConceptSearchVO();
         List<ModuleInfoDTO> data = new ArrayList<>();
         //取到所有模板信息
         List<ModuleInfo> list = new ArrayList<>();
         List<Long> ids = new ArrayList<>();
         List<Long> pacsConceptIds = new ArrayList<>();//辅检名称列表
+        List<Long> pacModuleIds = new ArrayList<>();//模板中辅检id
         Boolean isDefault = false;
+        Boolean isPacs = false;
         if (moduleVO.getMouduleType().intValue() == 1) {
             //根据科室筛选如果没有,返回通用模板
             list = getModuleInfoByDisType(moduleVO.getMouduleType(), moduleVO.getRelationId());
             if (ListUtil.isNotEmpty(list)) {
-                ids = list.stream()
-                        .map(moduleInfo -> moduleInfo.getId())
-                        .collect(Collectors.toList());
+                isPacs = true;
             } else {
                 isDefault = true;
             }
         } else if (moduleVO.getMouduleType().intValue() == 2) {
             //根据慢病筛选
             list = getModuleInfoByDisType(moduleVO.getMouduleType(), moduleVO.getRelationId());
-                ids = list.stream()
-                        .map(moduleDeptMapping -> moduleDeptMapping.getId())
-                        .collect(Collectors.toList());
+            isPacs = true;
         } else {
             isDefault = true;
         }
-
         //科室没有内容,或者默认情况下,需要推测出默认模板
         if (isDefault) {
             //默认
             list = getModuleInfoByDisType(0, 0L);
-            ids = list.stream()
-                    .map(moduleInfo -> moduleInfo.getId())
-                    .collect(Collectors.toList());
+            isPacs = true;
+        }
+        if(isPacs){
+            for (ModuleInfo moduleInfo : list) {
+                if (Integer.parseInt(moduleInfo.getType()) == QuestionTypeEnum.Pacs.getKey()){
+                    pacModuleIds.add(moduleInfo.getId());
+                }else {
+                    ids.add(moduleInfo.getId());
+                }
+            }
         }
         data = BeanUtil.listCopyTo(list, ModuleInfoDTO.class);
         Map<Long, ModuleInfo> moduleInfoMap
@@ -95,6 +101,15 @@ public class ModuleFacade extends ModuleInfoServiceImpl {
             paramMap.put("sexType", moduleVO.getSexType());
             paramMap.put("age", moduleVO.getAge());
             List<ModuleDetail> moduleDetailList = moduleDetailFacade.getDetailByModuleFac(paramMap);
+            if(ListUtil.isNotEmpty(pacModuleIds)){//获取类型是化验的标签id
+                QueryWrapper<ModuleDetail> moduleDetailQueryWrapper = new QueryWrapper<>();
+                moduleDetailQueryWrapper.eq("is_deleted",IsDeleteEnum.N.getKey())
+                        .in("module_id",pacModuleIds);
+               List<ModuleDetail> moduleDetails = moduleDetailFacade.list(moduleDetailQueryWrapper);
+                for (ModuleDetail moduleDetail : moduleDetails) {
+                    moduleDetailList.add(moduleDetail);
+                }
+            }
             if (ListUtil.isNotEmpty(moduleDetailList)) {
                 moduleDetailMap = EntityUtil.makeEntityListMap(moduleDetailList, "moduleId");
             }
@@ -127,9 +142,11 @@ public class ModuleFacade extends ModuleInfoServiceImpl {
         RespDTO<Map<Long,String>> pacsRespDTO = null;
         //辅检
         if(ListUtil.isNotEmpty(pacsConceptIds)){
-            conceptSearchVO =  new ConceptSearchVO();
-            conceptSearchVO.setConceptIds(pacsConceptIds);
-            pacsRespDTO = aiptServiceClient.getConceptMap(conceptSearchVO);
+            conceptFindVO = new ConceptFindVO();
+            conceptFindVO.setConceptIds(pacsConceptIds);
+            conceptFindVO.setAge(moduleVO.getAge());
+            conceptFindVO.setSexType(moduleVO.getSexType());
+            pacsRespDTO = aiptServiceClient.getConceptCondMap(conceptFindVO);
             RespDTOUtil.respNGDeal(pacsRespDTO,"获取辅检标签失败");
         }
         if(ListUtil.isNotEmpty(pacsConceptIds)){//如果存在辅检相关信息添加数据返回

+ 66 - 21
icss-service/src/main/java/com/diagbot/facade/PushFacade.java

@@ -20,6 +20,7 @@ import com.diagbot.enums.FeatureTypeEnum;
 import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.enums.LisSourceEnum;
 import com.diagbot.enums.QuestionTypeEnum;
+import com.diagbot.enums.TagTypeEnum;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
 import com.diagbot.util.BeanUtil;
@@ -29,8 +30,10 @@ import com.diagbot.util.RespDTOUtil;
 import com.diagbot.vo.LisResult;
 import com.diagbot.vo.PushKYJVO;
 import com.diagbot.vo.PushVO;
+import com.diagbot.vo.QuestionIds2VO;
 import com.diagbot.vo.QuestionVO;
 import com.google.common.collect.Lists;
+import org.aspectj.weaver.patterns.TypePatternQuestions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
@@ -125,14 +128,9 @@ public class PushFacade {
         //其他史 概念+标签id
         if (featureTypeSet.contains(String.valueOf(FeatureTypeEnum.Other.getKey()))) {
         }
-        //查体 返回模板(标签列表)+标记标签
+        //查体标记项
         if (featureTypeSet.contains(String.valueOf(FeatureTypeEnum.Vital.getKey()))) {
-            //查体模板
             List<ConceptPushDTO> vitals = data.getVital();
-            ConceptPushDTO dept = data.getDept();
-            List<QuestionPushDTO> moduleVitalDTO = getVitalModule(dept, pushVO);
-            pushDTO.setModuleVital(moduleVitalDTO);
-            //查体标记项
             if (ListUtil.isNotEmpty(vitals)) {
                 List<ConceptPushDTO> vitalDTOList = addQuestionId(vitals, QuestionTypeEnum.Vital.getKey());
                 pushDTO.setVital(vitalDTOList);
@@ -142,16 +140,23 @@ public class PushFacade {
                 }
             }
         }
+        //查体模板
+        if (featureTypeSet.contains(String.valueOf(FeatureTypeEnum.ModuleVital.getKey()))) {
+            ConceptPushDTO dept = data.getDept();
+            List<QuestionPushDTO> moduleVitalDTO = getVitalModule(dept, pushVO);
+            pushDTO.setModuleVital(moduleVitalDTO);
+        }
         //化验  标签列表
         if (featureTypeSet.contains(String.valueOf(FeatureTypeEnum.Lis.getKey()))) {
-            List<ConceptPushDTO> labs = data.getLab();
+            List<QuestionPushDTO> labs = data.getLab();
             if (ListUtil.isNotEmpty(labs)) {
+                List<String> uniqueNameList = labs.stream().map(lab -> lab.getName()).collect(Collectors.toList());
                 //公表项转套餐项
-                Map<String, List<String>> lisMapping = lisMappingFacade.getLisMappingByUniqueName();
+                Map<String, List<String>> lisMapping = lisMappingFacade.getLisMappingByUniqueName(uniqueNameList);
                 List<String> nameList = Lists.newLinkedList();
                 Map<String, Long> lisMap = new LinkedHashMap<>();
-                List<ConceptPushDTO> lisDTO = Lists.newLinkedList();
-                for (ConceptPushDTO lab : labs) {
+                List<QuestionPushDTO> lisDTO = Lists.newLinkedList();
+                for (QuestionPushDTO lab : labs) {
                     if (ListUtil.isNotEmpty(lisMapping.get(lab.getName()))) {
                         //匹配出多个套餐项默认取第一个
                         String name = lisMapping.get(lab.getName()).get(0);
@@ -170,18 +175,21 @@ public class PushFacade {
                         lisMap = respDTO.data;
                     }
                 }
+                Map<String, QuestionDTO> questionDTOMap = addLisQuestion(nameList, pushVO.getAge(), pushVO.getSex());
                 for (String name : nameList) {
-                    ConceptPushDTO conceptPushDTO = new ConceptPushDTO();
-                    conceptPushDTO.setName(name);
-                    conceptPushDTO.setType(ConceptTypeEnum.Lis.getKey());
-                    conceptPushDTO.setLibType(12);
+                    QuestionPushDTO questionPushDTO = new QuestionPushDTO();
+                    QuestionDTO questionDTO = questionDTOMap.get(name);
+                    if (questionDTO != null) {
+                        BeanUtil.copyProperties(questionDTO, questionPushDTO);
+                    } else {
+                        questionPushDTO.setName(name);
+                        questionPushDTO.setType(ConceptTypeEnum.Lis.getKey());
+                    }
+                    questionPushDTO.setLibType(12);
                     if (lisMap.containsKey(name) && lisMap.get(name) != null) {
-                        conceptPushDTO.setConceptId(lisMap.get(name));
+                        questionPushDTO.setConceptId(lisMap.get(name));
                     }
-                    lisDTO.add(conceptPushDTO);
-                }
-                if (ListUtil.isNotEmpty(lisDTO)) {
-                    lisDTO = addQuestionId(lisDTO, ConceptTypeEnum.Lis.getKey());
+                    lisDTO.add(questionPushDTO);
                 }
                 pushDTO.setLab(lisDTO);
             }
@@ -307,7 +315,7 @@ public class PushFacade {
 
 
     /**
-     * 概念关联标签,添加标签id ——症状,化验
+     * 概念关联标签,添加标签id ——症状
      *
      * @param concepts
      * @param type
@@ -316,7 +324,13 @@ public class PushFacade {
     public List<ConceptPushDTO> addQuestionId(List<ConceptPushDTO> concepts, Integer type) {
         QueryWrapper<QuestionInfo> questionInfoQueryWrapper = new QueryWrapper<>();
         List<String> nameList = concepts.stream().map(concept -> concept.getName()).collect(Collectors.toList());
-        questionInfoQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey()).in("tag_name", nameList).eq("type", type);
+        questionInfoQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey()).eq("type", type);
+        //化验填写单匹配name
+        if (type.equals(ConceptTypeEnum.Lis.getKey())) {
+            questionInfoQueryWrapper.in("name", nameList);
+        } else {
+            questionInfoQueryWrapper.in("tag_name", nameList);
+        }
         List<QuestionInfo> questionInfoList = questionFacade.list(questionInfoQueryWrapper);
         if (ListUtil.isNotEmpty(questionInfoList)) {
             Map<String, QuestionInfo> questionInfoMap = EntityUtil.makeEntityMap(questionInfoList, "tagName");
@@ -328,4 +342,35 @@ public class PushFacade {
         }
         return concepts;
     }
+
+    /**
+     * 获取化验填写单
+     *
+     * @param nameList
+     * @param age
+     * @param sex
+     * @return
+     */
+    public Map<String, QuestionDTO> addLisQuestion(List<String> nameList, Integer age, Integer sex) {
+        Map<String, QuestionDTO> mapDTO = new LinkedHashMap<>();
+        QueryWrapper<QuestionInfo> questionInfoQueryWrapper = new QueryWrapper<>();
+        questionInfoQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey()).
+                in("name", nameList).
+                eq("tag_type", TagTypeEnum.T7.getKey());
+        List<QuestionInfo> lisList = questionFacade.list(questionInfoQueryWrapper);
+        if (ListUtil.isNotEmpty(lisList)) {
+            List<Long> lisIds = lisList.stream().map(lis -> lis.getId()).collect(Collectors.toList());
+            QuestionIds2VO questionIds2VO = new QuestionIds2VO();
+            questionIds2VO.setAge(age);
+            questionIds2VO.setSexType(sex);
+            questionIds2VO.setIds(lisIds);
+            Map<Long, Object> questionDTOMap = questionFacade.getByIds(questionIds2VO);
+            for (Map.Entry<Long, Object> entry : questionDTOMap.entrySet()) {
+                QuestionDTO questionDTO = new QuestionDTO();
+                BeanUtil.copyProperties(entry.getValue(), questionDTO);
+                mapDTO.put(questionDTO.getName(), questionDTO);
+            }
+        }
+        return mapDTO;
+    }
 }

+ 7 - 16
icss-service/src/main/java/com/diagbot/facade/QuestionFacade.java

@@ -128,15 +128,6 @@ public class QuestionFacade extends QuestionInfoServiceImpl {
         List<QuestionInfo> questionInfoList = this.getByParam2(paramMap);
         List<Long> questionId = questionInfoList.stream().map(r -> r.getId()).collect(Collectors.toList());
 
-        //获取uniqueName
-        List<QuestionInfo> lisQuestion = questionInfoList.stream().filter(r -> r.getType() == QuestionTypeEnum.Lis.getKey()).collect(Collectors.toList());
-        Map<String, String> proMap = new LinkedHashMap<>();
-        Map<String, Map<String, String>> proDetailMap = new LinkedHashMap<>();
-        if (ListUtil.isNotEmpty(lisQuestion)) {
-             proMap = lisMappingFacade.getLisConfig_EmptyItemName();
-             proDetailMap = lisMappingFacade.getLisMapping_NotEmptyItemName();
-        }
-
         // 获取第一层明细项
         Map<Long, List<QuestionDetail>> detailMap = getQuestionDetailWithMap(questionInfoList.stream().filter(r -> r.getTagType() == 1).map(r -> r.getId()).collect(Collectors.toList()));
 
@@ -165,9 +156,9 @@ public class QuestionFacade extends QuestionInfoServiceImpl {
             // 设置第二层mapping
             List<QuestionInfoWrapper> w2 = mapping2.get(res.getId());
             if (ListUtil.isNotEmpty(w2)) {
-                List<QuestionDTO> m2 =  BeanUtil.listCopyTo(w2, QuestionDTO.class);
+                List<QuestionDTO> m2 = BeanUtil.listCopyTo(w2, QuestionDTO.class);
                 res.setQuestionMapping(m2);
-                for (QuestionDTO q2: m2) {
+                for (QuestionDTO q2 : m2) {
                     // 设置第二层明细
                     if (detailMap2.get(q2.getId()) != null) {
                         q2.setQuestionDetailList(detailMap2.get(q2.getId()));
@@ -175,9 +166,9 @@ public class QuestionFacade extends QuestionInfoServiceImpl {
                     List<QuestionInfoWrapper> w3 = mapping3.get(q2.getId());
                     if (ListUtil.isNotEmpty(w3)) {
                         // 设置第三层mapping
-                        List<QuestionDTO> m3 =  BeanUtil.listCopyTo(w3, QuestionDTO.class);
+                        List<QuestionDTO> m3 = BeanUtil.listCopyTo(w3, QuestionDTO.class);
                         q2.setQuestionMapping(m3);
-                        for (QuestionDTO q3: m3) {
+                        for (QuestionDTO q3 : m3) {
                             // 设置第三层明细
                             if (detailMap3.get(q3.getId()) != null) {
                                 q3.setQuestionDetailList(detailMap3.get(q3.getId()));
@@ -195,7 +186,7 @@ public class QuestionFacade extends QuestionInfoServiceImpl {
                 if (ListUtil.isNotEmpty(res.getQuestionMapping())) {
                     details = res.getQuestionMapping().stream().map(row -> row.getName()).collect(Collectors.toList());
                 }
-                Map<String, Map<String, String>> map = lisMappingFacade.getLisMappingByQuestion(project, details, proMap, proDetailMap);
+                Map<String, Map<String, String>> map = lisMappingFacade.getLisMappingByQuestion(project, details);
                 if (map != null) {
                     if (map.get("project") != null) {
                         res.setUniqueName(map.get("project").get(res.getName()));
@@ -234,8 +225,8 @@ public class QuestionFacade extends QuestionInfoServiceImpl {
      * 获取下级question
      *
      * @param sexType 性别
-     * @param age 年龄
-     * @param ids 列表
+     * @param age     年龄
+     * @param ids     列表
      * @return
      */
     public Map getQuestionMappingWithMap(Integer sexType, Integer age, List<Long> ids, List<Long> mappIds) {

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

@@ -75,16 +75,16 @@ public class QuestionUsualFacade extends QuestionUsualServiceImpl {
                     questionUsualDTO.setQuestionId(questionInfoMap.get(questionUsualDTO.getName()).getId());
                 }
             }
-            return questionUsualDTOList;
-        }
-        //如何没有匹配到questionId就移除
-        Iterator<QuestionUsualDTO> questionUsualDTOIterator = questionUsualDTOList.iterator();
-        while (questionUsualDTOIterator.hasNext()){
-            if(questionUsualDTOIterator.next().getQuestionId() == null
-                    && questionUsualVO.getType().intValue() != QuestionTypeEnum.Pacs.getKey()
-                    && questionUsualVO.getType().intValue() != QuestionTypeEnum.Disease.getKey()){
-                questionUsualDTOIterator.remove();
+            //如何没有匹配到questionId就移除
+            Iterator<QuestionUsualDTO> questionUsualDTOIterator = questionUsualDTOList.iterator();
+            while (questionUsualDTOIterator.hasNext()){
+                if(questionUsualDTOIterator.next().getQuestionId() == null
+                        && questionUsualVO.getType().intValue() != QuestionTypeEnum.Pacs.getKey()
+                        && questionUsualVO.getType().intValue() != QuestionTypeEnum.Disease.getKey()){
+                    questionUsualDTOIterator.remove();
+                }
             }
+            return questionUsualDTOList;
         }
         return questionUsualDTOList;
     }

+ 32 - 7
icss-service/src/main/java/com/diagbot/facade/RetrievalFacade.java

@@ -3,15 +3,18 @@ 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.OrderRetrivevalDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.dto.RetrievalDTO;
 import com.diagbot.entity.QuestionInfo;
 import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.enums.QuestionTypeEnum;
+import com.diagbot.util.BeanUtil;
 import com.diagbot.util.ListUtil;
 import com.diagbot.util.RespDTOUtil;
 import com.diagbot.util.StringUtil;
 import com.diagbot.vo.GetStaticKnowledgeVO;
+import com.diagbot.vo.GetStaticVO;
 import com.diagbot.vo.RetrievalVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
@@ -112,20 +115,25 @@ public class RetrievalFacade {
     /**
      * 静态知识标签检索
      *
-     * @param getStaticKnowledgeVO
+     * @param getStaticVO
      * @return
      */
-    public List<RetrievalDTO> getStaticKnowledge(GetStaticKnowledgeVO getStaticKnowledgeVO){
+    public List<RetrievalDTO> getStaticKnowledge(GetStaticVO getStaticVO){
+        GetStaticKnowledgeVO getStaticKnowledgeVO = new GetStaticKnowledgeVO();
+        BeanUtil.copyProperties(getStaticVO,getStaticKnowledgeVO);
+        //标签类型
+        List<Integer> typeList = new ArrayList<>();//规定标签类型,只取诊断,化验,辅检,药品类型
+        typeList.add(QuestionTypeEnum.Disease.getKey());
+        typeList.add(QuestionTypeEnum.Drug.getKey());
+        typeList.add(QuestionTypeEnum.Lis.getKey());
+        typeList.add(QuestionTypeEnum.Pacs.getKey());
+        getStaticKnowledgeVO.setTypes(typeList);
         //调用aipt-service获取有静态知识的标签
         RespDTO<List<RetrievalDTO>> retrievalDTOList = aiptServiceClient.getStaticKnowledge(getStaticKnowledgeVO);
         RespDTOUtil.respNGDeal(retrievalDTOList,"获取静态知识失败");
+        List<OrderRetrivevalDTO> orderRetrivevalDTOS  = new ArrayList<>();
         if(ListUtil.isNotEmpty(retrievalDTOList.data)){
             List<String> questionNames = new ArrayList<>();
-            List<Integer> typeList = new ArrayList<>();//规定标签类型,只取诊断,化验,辅检,药品类型
-            typeList.add(QuestionTypeEnum.Disease.getKey());
-            typeList.add(QuestionTypeEnum.Pacs.getKey());
-            typeList.add(QuestionTypeEnum.Lis.getKey());
-            typeList.add(QuestionTypeEnum.Drug.getKey());
             for (RetrievalDTO retrievalDTOInfo : retrievalDTOList.data) {
                 if(typeList.contains(retrievalDTOInfo.getType())){
                     questionNames.add(retrievalDTOInfo.getName());
@@ -144,8 +152,25 @@ public class RetrievalFacade {
                 if(null != questionInfoMap.get(retrievalDTOInfo.getName())){//设置questionId
                     retrievalDTOInfo.setQuestionId(questionInfoMap.get(retrievalDTOInfo.getName()).getId());
                 }
+                OrderRetrivevalDTO orderRetrivevalDTO = new OrderRetrivevalDTO();
+                BeanUtil.copyProperties(retrievalDTOInfo, orderRetrivevalDTO);
+                //排序号设定
+                if(orderRetrivevalDTO.getType().intValue() == QuestionTypeEnum.Disease.getKey()){//诊断
+                    orderRetrivevalDTO.setOrderNo(1);
+                }else if(orderRetrivevalDTO.getType().intValue() == QuestionTypeEnum.Drug.getKey()){//药品
+                    orderRetrivevalDTO.setOrderNo(2);
+                }else if(orderRetrivevalDTO.getType().intValue() == QuestionTypeEnum.Lis.getKey()){//化验
+                    orderRetrivevalDTO.setOrderNo(3);
+                }else {//辅检
+                    orderRetrivevalDTO.setOrderNo(4);
+                }
+                orderRetrivevalDTOS.add(orderRetrivevalDTO);
             }
+
+            //给结果排序:诊断 > 药品 > 化验 > 辅检
+            orderRetrivevalDTOS.sort((OrderRetrivevalDTO o1, OrderRetrivevalDTO o2) -> o1.getOrderNo().compareTo(o2.getOrderNo()));
         }
+        retrievalDTOList.data = BeanUtil.listCopyTo(orderRetrivevalDTOS,RetrievalDTO.class);
         return retrievalDTOList.data;
     }
 }

+ 22 - 0
icss-service/src/main/java/com/diagbot/vo/ConceptFindVO.java

@@ -0,0 +1,22 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2019/5/6 18:50
+ */
+@Getter
+@Setter
+public class ConceptFindVO {
+    //术语Id列表
+    private List<Long> conceptIds;
+    //年龄
+    private Integer age;
+    //性别
+    private Integer sexType;
+}

+ 2 - 0
icss-service/src/main/java/com/diagbot/vo/GetStaticKnowledgeVO.java

@@ -17,4 +17,6 @@ public class GetStaticKnowledgeVO {
     private String InputStr;
     //需要去重的id
     private List<Long> inputIds;
+    //指定类型
+    private List<Integer> types;
 }

+ 20 - 0
icss-service/src/main/java/com/diagbot/vo/GetStaticVO.java

@@ -0,0 +1,20 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * @Description:
+ * @author: wangyu
+ * @time: 2019/6/27 13:35
+ */
+@Getter
+@Setter
+public class GetStaticVO {
+    //检索内容
+    private String InputStr;
+    //需要去重的id
+    private List<Long> inputIds;
+}

+ 6 - 0
icss-service/src/main/java/com/diagbot/vo/LisHospitalCodeVO.java

@@ -1,5 +1,8 @@
 package com.diagbot.vo;
 
+import java.util.List;
+
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -17,4 +20,7 @@ public class LisHospitalCodeVO {
 	 * 医院编码
 	 */
 	String hospitalCode;
+
+	@ApiModelProperty(hidden = true)
+	List<String> assemblys;
 }

+ 1 - 1
icss-service/src/main/java/com/diagbot/web/PushController.java

@@ -54,7 +54,7 @@ public class PushController {
                     "lis:source:数据来源(必填),Integer<br>" +
                     "pacs:辅检,String<br>" +
                     "diag:诊断,String<br>" +
-                    "featureType:类型(必填),1:症状,3:其他史,4:查体,5:化验,6:辅检,7:诊断,22-指标,String<br>" +
+                    "featureType:类型(必填),1:症状,3:其他史,4:查体,41:查体模板,5:化验,6:辅检,7:诊断,22-指标,String<br>" +
                     "patientId:病人id,Long<br>" +
                     "disType:诊断类型,1-慢病,2-急诊,普通病不填,Integer<br>" +
                     "indications:指标结果(预留字段,暂不用),String<br>" +

+ 3 - 3
icss-service/src/main/java/com/diagbot/web/RetrievalController.java

@@ -5,7 +5,7 @@ import com.diagbot.annotation.SysLogger;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.dto.RetrievalDTO;
 import com.diagbot.facade.RetrievalFacade;
-import com.diagbot.vo.GetStaticKnowledgeVO;
+import com.diagbot.vo.GetStaticVO;
 import com.diagbot.vo.RetrievalVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -54,8 +54,8 @@ public class RetrievalController {
                     "inputIds:需要去重的id<br>")
     @PostMapping("/getStaticKnowledge")
     @SysLogger("getStaticKnowledge")
-    public RespDTO<List<RetrievalDTO>> getStaticKnowledge(@Valid @RequestBody GetStaticKnowledgeVO getStaticKnowledgeVO) {
-        List<RetrievalDTO> data = retrievalFacade.getStaticKnowledge(getStaticKnowledgeVO);
+    public RespDTO<List<RetrievalDTO>> getStaticKnowledge(@Valid @RequestBody GetStaticVO getStaticVO) {
+        List<RetrievalDTO> data = retrievalFacade.getStaticKnowledge(getStaticVO);
         return RespDTO.onSuc(data);
     }
 }

+ 10 - 0
icssman-service/src/main/java/com/diagbot/client/KnowledgemanServiceClient.java

@@ -6,6 +6,7 @@ import com.diagbot.dto.RespDTO;
 import com.diagbot.vo.ConceptExistVO;
 import com.diagbot.vo.ConceptSearchVO;
 import com.diagbot.vo.ConceptTypeVO;
+import com.diagbot.vo.GetConceptPacInfosVO;
 import com.diagbot.vo.IndexLexiconVO;
 import com.diagbot.vo.IndexVO;
 import org.springframework.cloud.openfeign.FeignClient;
@@ -49,4 +50,13 @@ public interface KnowledgemanServiceClient {
      */
     @PostMapping("/concept/getConceptListByType")
     RespDTO<List<ConceptBaseDTO>> getConceptListByType(@RequestBody ConceptTypeVO conceptTypeVO);
+
+    /**
+     * 模板维护获取辅检标签
+     *
+     * @param getConceptPacInfosVO
+     * @return
+     */
+    @PostMapping("/concept/getConceptPacInfos")
+    RespDTO<List<ConceptBaseDTO>> getConceptPacInfos(@RequestBody GetConceptPacInfosVO getConceptPacInfosVO);
 }

+ 7 - 0
icssman-service/src/main/java/com/diagbot/client/hystrix/KnowledgemanServiceHystrix.java

@@ -6,6 +6,7 @@ import com.diagbot.dto.RespDTO;
 import com.diagbot.vo.ConceptExistVO;
 import com.diagbot.vo.ConceptSearchVO;
 import com.diagbot.vo.ConceptTypeVO;
+import com.diagbot.vo.GetConceptPacInfosVO;
 import com.diagbot.vo.IndexLexiconVO;
 import com.diagbot.vo.IndexVO;
 import lombok.extern.slf4j.Slf4j;
@@ -65,4 +66,10 @@ public class KnowledgemanServiceHystrix implements KnowledgemanServiceClient {
         return null;
     }
 
+    @Override
+    public RespDTO<List<ConceptBaseDTO>> getConceptPacInfos(GetConceptPacInfosVO getConceptPacInfosVO) {
+        log.error("【hystrix】调用{}异常", "getConceptPacInfos");
+        return null;
+    }
+
 }

+ 1 - 0
icssman-service/src/main/java/com/diagbot/config/ResourceServerConfigurer.java

@@ -32,6 +32,7 @@ public class ResourceServerConfigurer extends ResourceServerConfigurerAdapter {
                 .antMatchers("/introduceInfo/saveIntroduce").permitAll()
                 .antMatchers("/dictionaryInfo/getList").permitAll()
                 .antMatchers("/getIcssEnumsData").permitAll()
+                .antMatchers("/questionInfo/indexByLexicon").permitAll()
                 .antMatchers("/**").authenticated();
 //                        .antMatchers("/**").permitAll();
 

+ 1 - 0
icssman-service/src/main/java/com/diagbot/config/security/UrlAccessDecisionManager.java

@@ -93,6 +93,7 @@ public class UrlAccessDecisionManager implements AccessDecisionManager {
 //                || matchers("/icssfile/uploadImage", request)
                 || matchers("/getIcssEnumsData", request)
                 || matchers("/dictionaryInfo/getList", request)
+                || matchers("/questionInfo/indexByLexicon", request)
                 || matchers("/", request)) {
             return true;
         }

+ 2 - 1
icssman-service/src/main/java/com/diagbot/enums/QuestionTypeEnum.java

@@ -18,7 +18,8 @@ public enum QuestionTypeEnum implements KeyedNamed {
     Drug(8, "药品"),
     DrugClass(9, "药品分类"),
     Scale(21, "量表"),
-    Index(22, "核心指标");
+    Index(22, "核心指标"),
+    LisDetail(51, "化验明细");
 
     @Setter
     private Integer key;

+ 20 - 4
icssman-service/src/main/java/com/diagbot/facade/LisMappingFacade.java

@@ -14,6 +14,7 @@ import com.diagbot.service.LisMappingService;
 import com.diagbot.service.impl.LisMappingServiceImpl;
 import com.diagbot.util.DateUtil;
 import com.diagbot.util.ListUtil;
+import com.diagbot.util.StringUtil;
 import com.diagbot.util.UserUtils;
 import com.diagbot.vo.IdListVO;
 import com.diagbot.vo.IdVO;
@@ -77,8 +78,19 @@ public class LisMappingFacade extends LisMappingServiceImpl {
 
         QueryWrapper<LisMapping> lisMappingQueryWrapper = new QueryWrapper<>();
         lisMappingQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
-                .eq("meal_name", lisMappingVO.getMealName())
-                .eq("item_name", lisMappingVO.getItemName());
+                .eq("meal_name", lisMappingVO.getMealName());
+        if (StringUtil.isBlank(lisMappingVO.getItemName())) {
+            if (!lisMappingVO.getMealName().equals(lisMappingVO.getUniqueName())) {
+                throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "化验公表名称不匹配");
+            }
+            lisMappingQueryWrapper.and(i -> i.isNull("item_name").or(j -> j.eq("item_name", "")));
+        } else {
+            String uniqueName = lisMappingVO.getMealName() + "--" + lisMappingVO.getItemName();
+            if (!uniqueName.equals(lisMappingVO.getUniqueName())) {
+                throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "化验公表名称不匹配");
+            }
+            lisMappingQueryWrapper.eq("item_name", lisMappingVO.getItemName());
+        }
         List<LisMapping> lisMappingList = this.list(lisMappingQueryWrapper);
         if (lisMappingList.size() > 1) {
             throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "存在多条映射关系,请删除重复映射");
@@ -104,8 +116,12 @@ public class LisMappingFacade extends LisMappingServiceImpl {
     public Boolean hasLisMapping(LisMappingVO lisMappingVO) {
         QueryWrapper<LisMapping> lisMappingQueryWrapper = new QueryWrapper<>();
         lisMappingQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
-                .eq("meal_name", lisMappingVO.getMealName())
-                .eq("item_name", lisMappingVO.getItemName());
+                .eq("meal_name", lisMappingVO.getMealName());
+        if (StringUtil.isBlank(lisMappingVO.getItemName())) {
+            lisMappingQueryWrapper.and(i -> i.isNull("item_name").or(j -> j.eq("item_name", "")));
+        } else {
+            lisMappingQueryWrapper.eq("item_name", lisMappingVO.getItemName());
+        }
         List<LisMapping> lisMappingList = this.list(lisMappingQueryWrapper);
         if (ListUtil.isNotEmpty(lisMappingList)) {
             return true;

+ 6 - 4
icssman-service/src/main/java/com/diagbot/facade/ModuleInfoFacade.java

@@ -35,6 +35,7 @@ import com.diagbot.util.UserUtils;
 import com.diagbot.vo.AddModuleInfoVO;
 import com.diagbot.vo.ConceptTypeVO;
 import com.diagbot.vo.GetAllDeptAndDisInfoVO;
+import com.diagbot.vo.GetConceptPacInfosVO;
 import com.diagbot.vo.GetModuleDetailInfoVO;
 import com.diagbot.vo.GetModuleInfoOneVO;
 import com.diagbot.vo.GetModuleInfoVO;
@@ -180,9 +181,9 @@ public class ModuleInfoFacade extends ModuleInfoServiceImpl {
         //如果是辅检,调用aipt-获取概念信息
         if(moduleGetQuestionInfoVO.getType().intValue() == QuestionTypeEnum.Pacs.getKey()){
             getQuestionInfoDTOS = new ArrayList<>();
-            ConceptTypeVO conceptTypeVO = new ConceptTypeVO();
-            conceptTypeVO.setType(2);
-            RespDTO<List<ConceptBaseDTO>> conceptBaseDTOS = knowledgemanServiceClient.getConceptListByType(conceptTypeVO);
+            GetConceptPacInfosVO getConceptPacInfosVO = new GetConceptPacInfosVO();
+            getConceptPacInfosVO.setInputStr(moduleGetQuestionInfoVO.getTagName());
+            RespDTO<List<ConceptBaseDTO>> conceptBaseDTOS = knowledgemanServiceClient.getConceptPacInfos(getConceptPacInfosVO);
             RespDTOUtil.respNGDeal(conceptBaseDTOS,"获取辅检标签失败");
             if(ListUtil.isNotEmpty(moduleGetQuestionInfoVO.getNoIds())){
                 Iterator<ConceptBaseDTO> conceptBaseDTOIterator = conceptBaseDTOS.data.iterator();
@@ -369,7 +370,8 @@ public class ModuleInfoFacade extends ModuleInfoServiceImpl {
             for (ModuleDetail moduleDetail : moduleDetailList) {
                 getModuleDetailInfoDTO = new GetModuleDetailInfoDTO();
                 BeanUtil.copyProperties(moduleDetail, getModuleDetailInfoDTO);
-                getModuleDetailInfoDTO.setTagName(pacsCeptMap.get(moduleDetail.getQuestionId()).getName());
+                getModuleDetailInfoDTO.setTagName(pacsCeptMap.get(getModuleDetailInfoDTO.getQuestionId()).getName());
+                getModuleDetailInfoDTOList.add(getModuleDetailInfoDTO);
             }
         }else {
             //获取标签信息

+ 78 - 3
icssman-service/src/main/java/com/diagbot/facade/QuestionFacade.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.diagbot.client.KnowledgemanServiceClient;
 import com.diagbot.client.UserServiceClient;
+import com.diagbot.dto.ConceptBaseDTO;
 import com.diagbot.dto.GetQuestionInfoDTO;
 import com.diagbot.dto.QuestionDTO;
 import com.diagbot.dto.QuestionPageDTO;
@@ -19,6 +20,7 @@ import com.diagbot.entity.wrapper.QuestionMappingWrapper;
 import com.diagbot.entity.wrapper.QuestionWrapper;
 import com.diagbot.enums.InsertOrUpdateEnum;
 import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.enums.QuestionTypeEnum;
 import com.diagbot.enums.TagTypeEnum;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
@@ -37,6 +39,8 @@ import com.diagbot.vo.ConceptExistVO;
 import com.diagbot.vo.DeleteQuestionVO;
 import com.diagbot.vo.GetQuestionIdsByTypeVO;
 import com.diagbot.vo.GetQuestionInfoVO;
+import com.diagbot.vo.IndexIcssVO;
+import com.diagbot.vo.IndexLexiconVO;
 import com.diagbot.vo.QuestionIdsVO;
 import com.diagbot.vo.QuestionIndexSubVO;
 import com.diagbot.vo.QuestionIndexVO;
@@ -90,6 +94,8 @@ public class QuestionFacade extends QuestionInfoServiceImpl {
     @Autowired
     CacheFacade cacheFacade;
 
+
+
     /**
      * 标签保存
      *
@@ -385,6 +391,7 @@ public class QuestionFacade extends QuestionInfoServiceImpl {
                 .eq("tag_name", questionInfo.getTagName())
                 .eq("is_deleted", IsDeleteEnum.N.getKey())
                 .eq("type", questionInfo.getType())
+                .ne("tag_type", TagTypeEnum.T8.getKey())
                 .ne("id", questionInfo.getId() == null ? -1 : questionInfo.getId()));
         if (ListUtil.isNotEmpty(questionInfoList)) { //标签type、tagName唯一
             throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "标签系统名称已重复,无法建立");
@@ -420,17 +427,35 @@ public class QuestionFacade extends QuestionInfoServiceImpl {
             bean.setModifier(mapRespDTO.data.get(bean.getModifier()));
         }
 
-        List<String> nameList = res.getRecords().stream().map(row -> row.getTagName()).collect(Collectors.toList());
+        // 如果是化验明细项,获取name字段和术语库对应,其他用tagName
+        List<String> nameList = new ArrayList<>();
         ConceptExistVO conceptExistVO = new ConceptExistVO();
+        for (QuestionPageDTO bean : res.getRecords()) {
+            if (QuestionTypeEnum.Lis.getKey() == bean.getType() && TagTypeEnum.T7.getKey() != bean.getTagType().intValue()) {
+                nameList.add(bean.getName());
+            } else {
+                nameList.add(bean.getTagName());
+            }
+        }
         conceptExistVO.setNameList(nameList);
         try {
             RespDTO<Map<String, List<Integer>>> resMap = knowledgemanServiceClient.getConceptMap(conceptExistVO);
             RespDTOUtil.respNGDeal(resMap, "远程调用根据名称和类型获取概念列表失败");
             Map<String, List<Integer>> map = resMap.data;
             for (QuestionPageDTO bean : res.getRecords()) {
-                List<Integer> list = map.get(bean.getTagName());
+                List<Integer> list = new ArrayList<>();
+                Boolean isLisDetail = false;
+                if (QuestionTypeEnum.Lis.getKey() == bean.getType() && TagTypeEnum.T7.getKey() != bean.getTagType().intValue()) {
+                    isLisDetail = true;
+                }
+                if (isLisDetail) {
+                    list = map.get(bean.getName());
+                } else {
+                    list = map.get(bean.getTagName());
+                }
+                // 化验明细需要特殊处理,类型转换为明细
                 if (ListUtil.isNotEmpty(list)) {
-                    if (list.contains(bean.getType())) {
+                    if (list.contains(bean.getType()) || (isLisDetail && list.contains(QuestionTypeEnum.LisDetail.getKey())) ) {
                         bean.setExist(true);
                     }
                 }
@@ -466,6 +491,31 @@ public class QuestionFacade extends QuestionInfoServiceImpl {
             paramMap.put("ids", Arrays.asList(ids.split(",")));
             paramMap.put("gmtModified", now);
             paramMap.put("modifier", person);
+
+            // 映射关系删除校验,如果有父项关联,不能删除
+            List<QuestionInfo> questionInfoList = getParentQuestion(Long.parseLong(id));
+            for (QuestionInfo questionInfo : questionInfoList) {
+                if (questionInfo.getTagType().equals(TagTypeEnum.T10.getKey())) {
+
+                }
+            }
+            if (ListUtil.isNotEmpty(questionInfoList)) {
+                StringBuffer sb = new StringBuffer();
+                sb.append("请先删除上级关联:");
+                for (QuestionInfo ques : questionInfoList) {
+                    if (ques.getTagType().equals(TagTypeEnum.T10.getKey())) {  // 既往史下特殊类型
+                        List<QuestionInfo> question2 = getParentQuestion(ques.getId());
+                        if (ListUtil.isNotEmpty(question2)) {
+                            sb.append("【" + question2.get(0).getTagName() + "】"); // 有且只有一个
+                        }
+                    } else {
+                        sb.append("【" + ques.getTagName() + "】");
+                    }
+                }
+                throw new CommonException(CommonErrorCode.SERVER_IS_ERROR,
+                        sb.toString());
+            }
+
             //删除自身
             this.deleteByIds(paramMap);
             //删除明细
@@ -505,6 +555,7 @@ public class QuestionFacade extends QuestionInfoServiceImpl {
         paramMap.put("existName", questionIndexVO.getExistName());
         paramMap.put("notTagType", questionIndexVO.getNotTagType());
         paramMap.put("notControlType", questionIndexVO.getNotControlType());
+        paramMap.put("name", questionIndexVO.getName());
         List<QuestionInfo> res = this.index(paramMap);
         return res;
     }
@@ -699,4 +750,28 @@ public class QuestionFacade extends QuestionInfoServiceImpl {
             }
         }
     }
+
+
+    public List<ConceptBaseDTO> indexByLexiconFac(IndexIcssVO indexIcssVO) {
+        IndexLexiconVO vo = new IndexLexiconVO();
+        BeanUtil.copyProperties(indexIcssVO, vo);
+        RespDTO<List<ConceptBaseDTO>> res = knowledgemanServiceClient.indexByLexiconFac(vo);
+        RespDTOUtil.respNGDeal(res, "【远程调用】搜索概念失败");
+
+        // 过滤已添加的标签
+        List<QuestionInfo> questionInfoList = this.list(new QueryWrapper<QuestionInfo>()
+                .in("tag_name", res.data.stream().map(row -> row.getName()).collect(Collectors.toList()))
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("type", indexIcssVO.getType())
+                .ne("tag_type", TagTypeEnum.T8.getKey()));
+        List<String> nameExist = questionInfoList.stream().map(row -> row.getTagName()).collect(Collectors.toList());
+        if (ListUtil.isNotEmpty(nameExist)) {
+            for (int i = 0; i < res.data.size(); i++) {
+                if (nameExist.contains(res.data.get(i).getName())) {
+                    res.data.remove(i--);
+                }
+            }
+        }
+        return res.data;
+    }
 }

+ 2 - 0
icssman-service/src/main/java/com/diagbot/vo/ConceptExistVO.java

@@ -18,4 +18,6 @@ public class ConceptExistVO {
     private List<String> nameList;
     @ApiModelProperty(value = "类型")
     private Integer type;
+    @ApiModelProperty(hidden = true)
+    private Boolean isLisDetail = false;
 }

+ 16 - 0
icssman-service/src/main/java/com/diagbot/vo/GetConceptPacInfosVO.java

@@ -0,0 +1,16 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: wangyu
+ * @time: 2019/7/1 19:59
+ */
+@Getter
+@Setter
+public class GetConceptPacInfosVO {
+    //输入内容
+    private String inputStr;
+}

+ 24 - 0
icssman-service/src/main/java/com/diagbot/vo/IndexIcssVO.java

@@ -0,0 +1,24 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+ * @description:
+ * @author: zhoutg
+ * @date: 2019/5/10 10:47
+ */
+@Getter
+@Setter
+public class IndexIcssVO {
+    @NotBlank(message = "名称不能为空")
+    private String name;
+    @NotNull(message = "词性类型不能为空")
+    private List<Integer> libType;
+    @NotNull(message = "标签所属不能为空")
+    private Integer type;
+}

+ 1 - 0
icssman-service/src/main/java/com/diagbot/vo/QuestionIndexVO.java

@@ -14,6 +14,7 @@ import java.util.List;
 @Setter
 public class QuestionIndexVO {
     private String tagName;
+    private String name;
     private Integer sexType;
     private Integer age;
     private Integer type;

+ 0 - 1
icssman-service/src/main/java/com/diagbot/vo/QuestionPageVO.java

@@ -19,6 +19,5 @@ public class QuestionPageVO extends Page {
     private String tagName;
     private List<Integer> tagTypeList;
     private List<Integer> controlTypeList;
-    private Integer disType;
     private List<Integer> notTypeList;
 }

+ 13 - 0
icssman-service/src/main/java/com/diagbot/web/QuestionInfoController.java

@@ -3,12 +3,14 @@ package com.diagbot.web;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.diagbot.annotation.SysLogger;
+import com.diagbot.dto.ConceptBaseDTO;
 import com.diagbot.dto.QuestionDTO;
 import com.diagbot.dto.QuestionPageDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.entity.QuestionInfo;
 import com.diagbot.facade.QuestionFacade;
 import com.diagbot.vo.DeleteQuestionVO;
+import com.diagbot.vo.IndexIcssVO;
 import com.diagbot.vo.QuestionIdsVO;
 import com.diagbot.vo.QuestionIndexSubVO;
 import com.diagbot.vo.QuestionIndexVO;
@@ -141,4 +143,15 @@ public class QuestionInfoController {
         questionFacade.clearAllCacheByIds(id);
         return RespDTO.onSuc(true);
     }
+
+
+    @ApiOperation(value = "根据名称和术语库词性类型搜索,过滤已添加的标签[by:zhoutg]",
+            notes = "name: 搜索内容,必填<br>" +
+                    "libType:术语库词性类型,必填<br>" +
+                    "type: 标签归属,必填<br>")
+    @PostMapping("/indexByLexicon")
+    @SysLogger("indexByLexicon")
+    public RespDTO<List<ConceptBaseDTO>> indexByLexicon(@RequestBody IndexIcssVO indexIcssVO){
+        return RespDTO.onSuc(questionFacade.indexByLexiconFac(indexIcssVO));
+    }
 }

+ 3 - 0
icssman-service/src/main/resources/mapper/QuestionInfoMapper.xml

@@ -48,6 +48,9 @@
     <select id="index" parameterType="java.util.Map" resultType="com.diagbot.entity.QuestionInfo">
         select * from `icss_question_info`
         where is_deleted = 'N'
+        <if test="name != null and name != ''">
+            and name like concat("%", #{name}, "%")
+        </if>
         <if test="tagName != null and tagName != ''">
             and tag_name like concat("%", #{tagName}, "%")
         </if>

+ 1 - 0
knowledgeman-service/src/main/java/com/diagbot/config/ResourceServerConfigurer.java

@@ -29,6 +29,7 @@ public class ResourceServerConfigurer extends ResourceServerConfigurerAdapter {
                 .antMatchers("/getKlmEnumsData").permitAll()
                 .antMatchers("/concept/getConceptMap").permitAll()
                 .antMatchers("/concept/getConceptListByType").permitAll()
+                .antMatchers("/concept/getConceptPacInfos").permitAll()
                 .antMatchers("/concept/piyinUp").permitAll()
                 .antMatchers("/file/uploadImage").permitAll()
                 .antMatchers("/dictionaryInfo/getList").permitAll()

+ 1 - 0
knowledgeman-service/src/main/java/com/diagbot/config/security/UrlAccessDecisionManager.java

@@ -92,6 +92,7 @@ public class UrlAccessDecisionManager implements AccessDecisionManager {
                 || matchers("/getKlmEnumsData", request)
                 || matchers("/concept/getConceptMap", request)
                 || matchers("/concept/getConceptListByType", request)
+                || matchers("/concept/getConceptPacInfos", request)
                 || matchers("/concept/piyinUp", request)
                 || matchers("/file/uploadImage", request)
                 || matchers("/dictionaryInfo/getList", request)

+ 1 - 1
knowledgeman-service/src/main/java/com/diagbot/dto/GetAllInformationDTO.java

@@ -51,7 +51,7 @@ public class GetAllInformationDTO {
     /**
      * 操作时间
      */
-	@JsonFormat(timezone="GMT+8",pattern ="yyyy-MM-dd HH:mm")
+	@JsonFormat(timezone="GMT+8",pattern ="yyyy-MM-dd HH:mm:ss")
 	@ApiModelProperty(value="操作时间")
     private Date operTime;
     

+ 1 - 1
knowledgeman-service/src/main/java/com/diagbot/dto/GetConceptDetailListDTO.java

@@ -19,7 +19,7 @@ public class GetConceptDetailListDTO {
     /**
      * 操作时间
      */
-    @JsonFormat(timezone="GMT+8",pattern ="yyyy-MM-dd HH:mm")
+    @JsonFormat(timezone="GMT+8",pattern ="yyyy-MM-dd HH:mm:ss")
     @ApiModelProperty(value="操作时间")
     private Date gmtModified;
 

+ 1 - 1
knowledgeman-service/src/main/java/com/diagbot/dto/GetLexiconListDTO.java

@@ -20,7 +20,7 @@ public class GetLexiconListDTO {
     /**
      * 操作时间
      */
-	@JsonFormat(timezone="GMT+8",pattern ="yyyy-MM-dd HH:mm")
+	@JsonFormat(timezone="GMT+8",pattern ="yyyy-MM-dd HH:mm:ss")
 	@ApiModelProperty(value="操作时间")
     private Date gmtModified;
 	

+ 1 - 1
knowledgeman-service/src/main/java/com/diagbot/dto/GetMedicalInfoListDTO.java

@@ -56,7 +56,7 @@ public class GetMedicalInfoListDTO {
     /**
      * 操作时间
      */
-	@JsonFormat(timezone="GMT+8",pattern ="yyyy-MM-dd HH:mm")
+	@JsonFormat(timezone="GMT+8",pattern ="yyyy-MM-dd HH:mm:ss")
 	@ApiModelProperty(value="操作时间")
     private Date operTime;
     

+ 1 - 1
knowledgeman-service/src/main/java/com/diagbot/dto/GetRelationInfoListDTO.java

@@ -80,7 +80,7 @@ public class GetRelationInfoListDTO {
     /**
      * 操作时间
      */
-	@JsonFormat(timezone="GMT+8",pattern ="yyyy-MM-dd HH:mm")
+	@JsonFormat(timezone="GMT+8",pattern ="yyyy-MM-dd HH:mm:ss")
 	@ApiModelProperty(value="操作时间")
     private Date operTime;
     

+ 1 - 1
knowledgeman-service/src/main/java/com/diagbot/dto/LisSonContactListDTO.java

@@ -55,7 +55,7 @@ public class LisSonContactListDTO {
     /**
      * 操作时间
      */
-	@JsonFormat(timezone="GMT+8",pattern ="yyyy-MM-dd HH:mm")
+	@JsonFormat(timezone="GMT+8",pattern ="yyyy-MM-dd HH:mm:ss")
 	@ApiModelProperty(value="操作时间")
     private Date operTime;
     

+ 1 - 1
knowledgeman-service/src/main/java/com/diagbot/dto/MultContactListDTO.java

@@ -60,7 +60,7 @@ public class MultContactListDTO {
     /**
      * 操作时间
      */
-	@JsonFormat(timezone="GMT+8",pattern ="yyyy-MM-dd HH:mm")
+	@JsonFormat(timezone="GMT+8",pattern ="yyyy-MM-dd HH:mm:ss")
 	@ApiModelProperty(value="操作时间")
     private Date operTime;
     

+ 1 - 1
knowledgeman-service/src/main/java/com/diagbot/dto/RelationContactListDTO.java

@@ -55,7 +55,7 @@ public class RelationContactListDTO {
     /**
      * 操作时间
      */
-	@JsonFormat(timezone="GMT+8",pattern ="yyyy-MM-dd HH:mm")
+	@JsonFormat(timezone="GMT+8",pattern ="yyyy-MM-dd HH:mm:ss")
 	@ApiModelProperty(value="操作时间")
     private Date operTime;
     

+ 2 - 2
knowledgeman-service/src/main/java/com/diagbot/enums/LexiconRSTypeEnum.java

@@ -26,7 +26,8 @@ public enum LexiconRSTypeEnum implements KeyedNamed {
     SPEC(15,"规格"),
     HAS(16,"有"),
     ORDER_BY(17,"包含排列于"),
-    SUBITEM(18,"包含子项");
+    SUBITEM(18,"包含子项"),
+    PUSH(19,"推送");
 
     @Setter
     private Integer key;
@@ -63,4 +64,3 @@ public enum LexiconRSTypeEnum implements KeyedNamed {
         return name;
     }
 }
-

+ 5 - 2
knowledgeman-service/src/main/java/com/diagbot/enums/LexiconTypeEnum.java

@@ -18,7 +18,7 @@ public enum LexiconTypeEnum implements KeyedNamed {
     NEGATIVE(7,"阴性"),
     POSITIVE(8,"阳性"),
     COMPANY(9,"单位"),
-    DRUGS(10,"药品"),
+    DRUGS(10,"药品通用名"),
     TREATMENT(11,"治疗"),
     LIS_PACKAGE(12,"化验套餐"),
     LIS_DETAILS(13,"化验明细"),
@@ -76,7 +76,10 @@ public enum LexiconTypeEnum implements KeyedNamed {
     FAMILY_HISTORY(64,"家族史"),
     FOOD_ALLERGY_HISTORY(65,"食物过敏史"),
     HISTORY_OF_DRUG_ALLERGY(66,"药物过敏史"),
-    FAMILY_RELATED_INFECTIOUS_DISEASE_HISTORY(67,"家族相关传染病史");
+    FAMILY_RELATED_INFECTIOUS_DISEASE_HISTORY(67,"家族相关传染病史"),
+    FURTHER_CONSULTATION(68,"复诊"),
+    DIAGNOSTIC_CRITERIA(69,"诊断依据条件"),
+    OTHER_DIAGNOSTIC_CRITERIA(70,"诊断依据其他");
 
 
     @Setter

+ 80 - 49
knowledgeman-service/src/main/java/com/diagbot/facade/ConceptFacade.java

@@ -1,27 +1,5 @@
 package com.diagbot.facade;
 
-import java.io.InputStream;
-import java.text.DecimalFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-import org.apache.commons.lang.time.DateFormatUtils;
-import org.apache.poi.hssf.usermodel.HSSFDateUtil;
-import org.apache.poi.hssf.usermodel.HSSFWorkbook;
-import org.apache.poi.ss.usermodel.Cell;
-import org.apache.poi.ss.usermodel.Row;
-import org.apache.poi.ss.usermodel.Sheet;
-import org.apache.poi.ss.usermodel.Workbook;
-import org.apache.poi.xssf.usermodel.XSSFWorkbook;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.stereotype.Component;
-import org.springframework.web.multipart.MultipartFile;
-
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -69,10 +47,32 @@ import com.diagbot.vo.GetAllForRelationVO;
 import com.diagbot.vo.GetAllInformationVO;
 import com.diagbot.vo.GetAllLisConceptVO;
 import com.diagbot.vo.GetConceptInfoDetailVO;
+import com.diagbot.vo.GetConceptPacInfosVO;
 import com.diagbot.vo.IndexLexiconVO;
 import com.diagbot.vo.IndexVO;
 import com.diagbot.vo.RemoveConceptInfoVO;
 import com.google.common.collect.Lists;
+import org.apache.commons.lang.time.DateFormatUtils;
+import org.apache.poi.hssf.usermodel.HSSFDateUtil;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Component;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.InputStream;
+import java.text.DecimalFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @Description: 术语查询业务层
@@ -203,8 +203,8 @@ public class ConceptFacade extends ConceptServiceImpl {
             QueryWrapper<Relation> relationQe = new QueryWrapper<>();
             relationQe.eq("relation_id", getAllForRelationVO.getRelationId());
             if (getAllForRelationVO.getRelationPosition() == 1) {
-                relationQe.in("start_id", conceptIdList);
-                relationQe.eq(getAllForRelationVO.getRelationConceptId() != null, "end_id", getAllForRelationVO.getRelationConceptId());
+            	relationQe.eq(getAllForRelationVO.getRelationConceptId() != null, "end_id", getAllForRelationVO.getRelationConceptId());
+            	relationQe.and(wrapper->wrapper.in("start_id", conceptIdList).or(getAllForRelationVO.getRelationConceptId() == null).in("end_id", conceptIdList));
                 reCouMap = relationFacade.list(relationQe).stream().collect(Collectors.groupingBy(Relation::getStartId, Collectors.counting()));
             } else if(getAllForRelationVO.getRelationConceptId() != null) {
                 relationQe.in("end_id", conceptIdList);
@@ -238,11 +238,25 @@ public class ConceptFacade extends ConceptServiceImpl {
     public IPage<GetAllInformationDTO> getAllInformation(GetAllInformationVO getAllInformationVO) {
     	Page<GetAllInformationDTO> getAllInformationDTOPage = new Page<>();
     	
+    	List<Long> conceptIdList = null;
+    	if(StringUtil.isBlank(getAllInformationVO.getLibName())&&StringUtil.isNotBlank(getAllInformationVO.getName())){
+    		getAllInformationVO.setLibName(getAllInformationVO.getName());
+    	}
+    	if(StringUtil.isNotBlank(getAllInformationVO.getLibName())){
+    		QueryWrapper<LibraryInfo> libraryInfoQe = new QueryWrapper<>();
+    		libraryInfoQe.eq("is_deleted", IsDeleteEnum.N.getKey());
+    		libraryInfoQe.like("name", getAllInformationVO.getLibName());
+    		libraryInfoQe.eq(StringUtil.isNotBlank(getAllInformationVO.getType()),"type_id", LexiconTypeEnum.getKey(getAllInformationVO.getType()));
+    		conceptIdList = libraryinfoFacade.list(libraryInfoQe).stream().map(i->i.getConceptId()).distinct().collect(Collectors.toList());
+    	}
+    	
     	Page<Concept> conceptPage = new Page<>(getAllInformationVO.getCurrent(),getAllInformationVO.getSize());
     	QueryWrapper<Concept> conceptQe = new QueryWrapper<>();
+    	conceptQe.in(ListUtil.isNotEmpty(conceptIdList), "id", conceptIdList);
     	conceptQe.like(StringUtil.isNotBlank(getAllInformationVO.getName()),"lib_name", getAllInformationVO.getName());
     	conceptQe.eq(StringUtil.isNotBlank(getAllInformationVO.getType()),"lib_type", LexiconTypeEnum.getKey(getAllInformationVO.getType()));
     	conceptQe.eq(StringUtil.isNotBlank(getAllInformationVO.getIsDeleted()),"is_deleted", getAllInformationVO.getIsDeleted());
+    	conceptQe.orderByAsc("is_deleted");
     	conceptQe.orderByDesc("gmt_modified");
     	IPage<Concept> iPage = this.page(conceptPage, conceptQe);
     	BeanUtil.copyProperties(iPage, getAllInformationDTOPage);
@@ -279,25 +293,6 @@ public class ConceptFacade extends ConceptServiceImpl {
         return getAllInformationDTOPage;
     }
     
-    
-    public static void main(String[] args){
-    	LibraryInfo libraryInfo1 = new LibraryInfo();
-    	libraryInfo1.setIsConcept(1);
-    	libraryInfo1.setName("rgb");
-    	
-    	LibraryInfo libraryInfo2 = new LibraryInfo();
-    	libraryInfo2.setIsConcept(0);
-    	libraryInfo2.setName("zsj");
-    	
-    	List<LibraryInfo> list = Lists.newArrayList();
-    	list.add(libraryInfo1);
-    	list.add(libraryInfo2);
-    	
-    	String ss = list.stream().sorted((a,b)->b.getIsConcept()-a.getIsConcept()).map(k->k.getName()).collect(Collectors.joining("、"));
-    
-    	System.out.println(ss);
-    }
-
     /**
      * 医学术语命名删除或者恢复
      *
@@ -577,10 +572,14 @@ public class ConceptFacade extends ConceptServiceImpl {
             ConceptCommon conceptCommon = conceptCommonFacade.getOne(conceptCommonQe);
             if (conceptCommon == null) {
                 conceptCommon = new ConceptCommon();
+                conceptCommon.setGmtCreate(now);
+                conceptCommon.setCreator(currentUser);
             }
-
+            
             BeanUtil.copyProperties(addConceptInfoVO, conceptCommon);
             conceptCommon.setConceptId(conceptId);
+            conceptCommon.setGmtModified(now);
+            conceptCommon.setModifier(currentUser);
 
             conceptCommonFacade.saveOrUpdate(conceptCommon);
         }
@@ -956,11 +955,16 @@ public class ConceptFacade extends ConceptServiceImpl {
         }
 
         if (conceptExistVO.getType() != null) {
-            Integer libType = ParamConvertUtil.conceptConvert2Lib(conceptExistVO.getType());
-            if (libType == null) {
-                throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "类型不匹配");
+            // 如果是化验明细项,直接赋值
+            if (conceptExistVO.getIsLisDetail() == true) {
+                conceptExistVO.setLibType(LexiconTypeEnum.LIS_DETAILS.getKey());
+            } else {
+                Integer libType = ParamConvertUtil.conceptConvert2Lib(conceptExistVO.getType());
+                if (libType == null) {
+                    throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "类型不匹配");
+                }
+                conceptExistVO.setLibType(libType);
             }
-            conceptExistVO.setLibType(libType);
         }
 
         //获取结构
@@ -973,7 +977,10 @@ public class ConceptFacade extends ConceptServiceImpl {
             List<Integer> typeList = new ArrayList<>();
             if (ListUtil.isNotEmpty(list)) {
                 for (Concept c : list) {
-                    typeList.add(ParamConvertUtil.libConvert2Concept(c.getLibType().intValue()));
+                    Integer type = ParamConvertUtil.libConvert2Concept(c.getLibType().intValue());
+                    if (type != null) {
+                        typeList.add(type);
+                    }
                 }
                 typeMap.put(key, typeList);
             }
@@ -1063,4 +1070,28 @@ public class ConceptFacade extends ConceptServiceImpl {
         }
         return res;
     }
+
+    /**
+     * 模板维护辅检检索
+     *
+     * @param getConceptPacInfosVO
+     * @return
+     */
+    public List<ConceptBaseDTO> getConceptPacInfos(GetConceptPacInfosVO getConceptPacInfosVO){
+        QueryWrapper<Concept> conceptQueryWrapper = new QueryWrapper<>();
+        conceptQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("lib_type", LexiconTypeEnum.PACS_ITEMS.getKey())
+                .like("lib_name", getConceptPacInfosVO.getInputStr());
+        List<Concept> list = this.list(conceptQueryWrapper);
+        List<ConceptBaseDTO> res = ListUtil.newArrayList();
+        if (ListUtil.isNotEmpty(list)) {
+            for (Concept concept : list) {
+                ConceptBaseDTO conceptBaseDTO = new ConceptBaseDTO();
+                conceptBaseDTO.setConceptId(concept.getId());
+                conceptBaseDTO.setName(concept.getLibName());
+                res.add(conceptBaseDTO);
+            }
+        }
+        return res;
+    }
 }

+ 11 - 16
knowledgeman-service/src/main/java/com/diagbot/facade/RelationFacade.java

@@ -38,6 +38,8 @@ import com.diagbot.exception.CommonException;
 import com.diagbot.service.RelationService;
 import com.diagbot.service.impl.RelationServiceImpl;
 import com.diagbot.util.DateUtil;
+import com.diagbot.util.ListUtil;
+import com.diagbot.util.RespDTOUtil;
 import com.diagbot.util.StringUtil;
 import com.diagbot.util.UserUtils;
 import com.diagbot.vo.AddRelationInfoVO;
@@ -72,12 +74,10 @@ public class RelationFacade extends RelationServiceImpl {
      */
     public IPage<GetRelationInfoListDTO> getRelationInfoList(GetRelationInfoListVO getRelationInfoListVO) {
     	IPage<GetRelationInfoListDTO> ipage = this.baseMapper.getRelationInfoList(getRelationInfoListVO);
-    	List<String> ids = ipage.getRecords().stream().map(i->i.getOperName()).distinct().collect(Collectors.toList());
-    	if(ids.size()>0){
+    	if(ListUtil.isNotEmpty(ipage.getRecords())){
+    		List<String> ids = ipage.getRecords().stream().map(i->i.getOperName()).distinct().collect(Collectors.toList());
     		RespDTO<Map<String, String>> respDTO = userServiceClient.getUserInfoByIds(ids);
-        	if (respDTO == null || !CommonErrorCode.OK.getCode().equals(respDTO.code)) {
-                throw new CommonException(CommonErrorCode.RPC_ERROR,"获取用户信息失败");
-            }
+        	RespDTOUtil.respNGDealCover(respDTO, "获取用户信息失败");
         	ipage.getRecords().forEach(i->{
         		i.setOperName(respDTO.data.get(i.getOperName()));
         	});
@@ -282,7 +282,7 @@ public class RelationFacade extends RelationServiceImpl {
         StringBuffer sbf = new StringBuffer();
         InputStream inputStream = null;
         Workbook wb = null;
-        String title_1="",title_2="",title_3="",title_4="",title_5="";
+        String title_1="",title_2="",title_3="",title_4="";
         try {
             if (!file.isEmpty()) {
                 inputStream = file.getInputStream();
@@ -301,7 +301,7 @@ public class RelationFacade extends RelationServiceImpl {
                             
                             Sheet sheet = wb.getSheetAt(0);
                             int count = 0;
-                            String startName, startType, endName, endType, relationName;
+                            String startName, startType, endName, endType;
                             for (Row row : sheet) {
                                 count++;
                                 if(row == null){
@@ -312,27 +312,23 @@ public class RelationFacade extends RelationServiceImpl {
                                 	title_2 = getValue(row.getCell(1)).trim().replace(" ", "");
                                 	title_3 = getValue(row.getCell(2)).trim().replace(" ", "");
                                 	title_4 = getValue(row.getCell(3)).trim().replace(" ", "");
-                                	title_5 = getValue(row.getCell(4)).trim().replace(" ", "");
                                     continue;
                                 }
                                 startName = getValue(row.getCell(0)).trim().replace(" ", "");
                                 startType = getValue(row.getCell(1)).trim().replace(" ", "");
                                 endName = getValue(row.getCell(2)).trim().replace(" ", "");
                                 endType = getValue(row.getCell(3)).trim().replace(" ", "");
-                                relationName = getValue(row.getCell(4)).trim().replace(" ", "");
                                 if(StringUtil.isEmpty(startName) && StringUtil.isEmpty(startType)
-                                        && StringUtil.isEmpty(endName) && StringUtil.isEmpty(endType)
-                                        && StringUtil.isEmpty(relationName)){
+                                        && StringUtil.isEmpty(endName) && StringUtil.isEmpty(endType)){
                                 	continue;
                                 }
                                 if (StringUtil.isEmpty(startName) || StringUtil.isEmpty(startType)
-                                        || StringUtil.isEmpty(endName) || StringUtil.isEmpty(endType)
-                                        || StringUtil.isEmpty(relationName)) {
+                                        || StringUtil.isEmpty(endName) || StringUtil.isEmpty(endType)) {
                                     sbf.append("第" + count + "行数据不完整;").append("<br/>");
                                     continue;
                                 }
                                 
-                                addRelationInfoVOList.add(new AddRelationInfoVO(startName,startType,endName,endType,relationName,count));
+                                addRelationInfoVOList.add(new AddRelationInfoVO(startName,startType,endName,endType,"包含于",count));
                             }
                         } else {
                             sbf.append("非excel文件无法解析!").append("<br/>");
@@ -367,8 +363,7 @@ public class RelationFacade extends RelationServiceImpl {
         if(title_1.indexOf("关系起点术语名称")==-1
         		||title_2.indexOf("关系起点术语类型")==-1
         		||title_3.indexOf("关系终点术语名称")==-1
-        		||title_4.indexOf("关系终点术语类型")==-1
-        		||title_5.indexOf("关系类型名称")==-1){
+        		||title_4.indexOf("关系终点术语类型")==-1){
         	throw new CommonException(CommonErrorCode.RPC_ERROR,"导入数据不正确,请选择正确数据导入!");
         }
         

+ 1 - 1
knowledgeman-service/src/main/java/com/diagbot/service/impl/EnumsDataServiceImpl.java

@@ -30,7 +30,7 @@ public class EnumsDataServiceImpl implements EnumsDataService {
         Map<String, List<EnumEntriesBuilder.Entry>> enumMap = new EnumEntriesBuilder()
                 .addEnums("disclaimerCodeEnum", DisclaimerCodeEnum.values())
                 .addEnums("positionTypeEnum", PositionTypeEnum.values())
-                .addEnums("lexiconRSTypeEnum", LexiconRSTypeEnum.INCLUDE_OF)
+                .addEnums("lexiconRSTypeEnum", LexiconRSTypeEnum.INCLUDE_OF, LexiconRSTypeEnum.PUSH)
                 .addEnums("lexiconTypeEnum", LexiconTypeEnum.values())
                 .build();
         return enumMap;

+ 13 - 1
knowledgeman-service/src/main/java/com/diagbot/util/ParamConvertUtil.java

@@ -83,7 +83,19 @@ public class ParamConvertUtil {
             case SYMPTOM:
                 type = ConceptTypeEnum.Symptom.getKey();
                 break;
-            case HISTORY:
+            case HISTORY_OF_PAST_DISEASES:
+            case HISTORY_OF_TRAUMA:
+            case HISTORY_OF_SURGERY:
+            case HISTORY_OF_BLOOD_TRANSFUSION:
+            case INFECTIOUS_DISEASE_HISTORY:
+            case BAD_HABITS:
+            case MARITAL_HISTORY:
+            case HISTORY_OF_MARRIAGE_AND_CHILDBEARING:
+            case BIRTH_HISTORY:
+            case FAMILY_HISTORY:
+            case FOOD_ALLERGY_HISTORY:
+            case HISTORY_OF_DRUG_ALLERGY:
+            case FAMILY_RELATED_INFECTIOUS_DISEASE_HISTORY:
                 type = ConceptTypeEnum.Other.getKey();
                 break;
             case VITAL_INDEX:

+ 2 - 0
knowledgeman-service/src/main/java/com/diagbot/vo/ConceptExistVO.java

@@ -20,4 +20,6 @@ public class ConceptExistVO {
     private Integer type;
     @ApiModelProperty(hidden = true)
     private Integer libType;
+    @ApiModelProperty(hidden = true)
+    private Boolean isLisDetail;
 }

+ 8 - 2
knowledgeman-service/src/main/java/com/diagbot/vo/GetAllInformationVO.java

@@ -24,10 +24,16 @@ public class GetAllInformationVO {
     private long current = 1;
     
     /**
-     * 术语名称
+     * 标准术语名称
      */
-    @ApiModelProperty(value="术语名称")
+    @ApiModelProperty(value="标准术语名称")
     private String name;
+    
+    /**
+     * 同义词名称
+     */
+    @ApiModelProperty(value="同义词名称")
+    private String libName;
 
     /**
      * 术语类型

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

@@ -0,0 +1,16 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: wangyu
+ * @time: 2019/7/1 19:59
+ */
+@Getter
+@Setter
+public class GetConceptPacInfosVO {
+    //输入内容
+    private String inputStr;
+}

+ 28 - 16
knowledgeman-service/src/main/java/com/diagbot/web/ConceptController.java

@@ -1,20 +1,5 @@
 package com.diagbot.web;
 
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.validation.Valid;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-import org.springframework.web.multipart.MultipartFile;
-
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.diagbot.annotation.SysLogger;
 import com.diagbot.dto.ConceptBaseDTO;
@@ -33,12 +18,25 @@ import com.diagbot.vo.GetAllForRelationVO;
 import com.diagbot.vo.GetAllInformationVO;
 import com.diagbot.vo.GetAllLisConceptVO;
 import com.diagbot.vo.GetConceptInfoDetailVO;
+import com.diagbot.vo.GetConceptPacInfosVO;
 import com.diagbot.vo.RemoveConceptInfoVO;
-
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
 import springfox.documentation.annotations.ApiIgnore;
 
+import javax.servlet.http.HttpServletRequest;
+import javax.validation.Valid;
+import java.util.List;
+import java.util.Map;
+
 /**
  * <p>
  * 前端控制器
@@ -152,4 +150,18 @@ public class ConceptController {
         return RespDTO.onSuc(conceptFacade.piyinUp());
     }
 
+    /**
+     * 根据概念Id列表获取概念列表Map
+     *
+     * @param getConceptPacInfosVO 搜索参数
+     * @return 术语id和术语 name
+     */
+    @ApiOperation(value = "知识库标准化-获取辅检概念[by:wangyu]",
+            notes = "inputStr: 输入内容")
+    @PostMapping("/getConceptPacInfos")
+    @SysLogger("getConceptPacInfos")
+    @ApiIgnore
+    public RespDTO<List<ConceptBaseDTO>> getConceptPacInfos(@RequestBody GetConceptPacInfosVO getConceptPacInfosVO) {
+        return RespDTO.onSuc(conceptFacade.getConceptPacInfos(getConceptPacInfosVO));
+    }
 }

+ 15 - 14
knowledgeman-service/src/main/resources/mapper/RelationMapper.xml

@@ -33,7 +33,9 @@
 		FROM kl_relation a 
 		JOIN kl_concept b on a.start_id=b.id
 		JOIN kl_concept c on a.end_id=c.id
-		WHERE a.relation_id NOT IN(17,18)) t
+		WHERE a.relation_id NOT IN(17,18)
+		and b.is_deleted='N'
+		and c.is_deleted='N') t
 		where 1=1 
 		<if test="isDeleted!=null and isDeleted!=''">
 			and isDeleted=#{isDeleted}
@@ -148,15 +150,13 @@
     </select> -->
     
     <select id="multContactList" resultType="com.diagbot.dto.MultContactListDTO">
-    	SELECT
-		t1.start_id AS conceptId,
-		t1.modifier AS operName,
-		t1.gmt_modified AS operTime,
-		t1.is_deleted AS isDeleted,
-		GROUP_CONCAT(t1.end_id ORDER BY t2.order_no ASC) AS otherIds
-		FROM
-		(SELECT 
-		DISTINCT a.*
+    	SELECT 
+		a.start_id AS conceptId,
+		a.modifier AS operName,
+		a.gmt_modified AS operTime,
+		a.is_deleted AS isDeleted,
+		GROUP_CONCAT(DISTINCT a.end_id ORDER BY d.order_no ASC) AS otherIds,
+		SUM(CASE WHEN b.start_id IS NULL THEN 0 ELSE 1 END) AS notnullcou
 		FROM
 		(SELECT * FROM kl_relation WHERE relation_id=17
 		<choose>
@@ -172,11 +172,12 @@
 			</otherwise>
 		</choose>
 		) a
-		JOIN (SELECT start_id FROM kl_relation WHERE relation_id=17) b ON a.end_id=b.start_id
+		LEFT JOIN (SELECT start_id FROM kl_relation WHERE relation_id=17) b ON a.end_id=b.start_id
 		LEFT JOIN (SELECT end_id FROM kl_relation WHERE relation_id=17) c ON a.start_id=c.end_id
-		WHERE c.end_id IS NULL) t1
-		LEFT JOIN kl_relation_order t2 ON t1.id=t2.t_relation_id
-		GROUP BY start_id
+		LEFT JOIN kl_relation_order d ON a.id=d.t_relation_id
+		WHERE c.end_id IS NULL 
+		GROUP BY a.start_id
+		HAVING notnullcou>0
 		ORDER BY operTime DESC
     </select>
     

+ 10 - 2
prec-service/src/main/java/com/diagbot/dto/FileDTO.java

@@ -16,12 +16,20 @@ public class FileDTO {
     private String title;
     private String url;
     private String info;
+    private Integer type;
+
+    public FileDTO(String state, String info, Integer type) {
+        this.state = state;
+        this.info = info;
+        this.type = type;
+    }
 
     public FileDTO(String state, String info) {
         this.state = state;
         this.info = info;
     }
-    public FileDTO(){
+
+    public FileDTO() {
 
     }
-}
+}

+ 4 - 2
prec-service/src/main/java/com/diagbot/service/UploadService.java

@@ -14,8 +14,10 @@ import java.util.List;
 public interface UploadService {
     //单文件上传
     FileDTO singleFileUpload(MultipartFile file);
+
     //多文件上传
     List<FileDTO> multiFileUpload(MultipartFile[] mpfs);
+
     //多文件上传同时生成缩略图
-    List<FileThumDTO> multiFileThumUpload(MultipartFile[] mpfs);
-}
+    List<FileThumDTO> multiFileThumUpload(MultipartFile[] mpfs, Integer[] type);
+}

+ 10 - 7
prec-service/src/main/java/com/diagbot/service/impl/UploadServiceImpl.java

@@ -37,7 +37,7 @@ public class UploadServiceImpl implements UploadService {
             return new FileDTO("FAILURE", "文件上传失败,超出大小限制4MB");
         }
         try {
-            FileDTO fileDTO = saveFile(file);
+            FileDTO fileDTO = saveFile(file, null);
             return fileDTO;
         } catch (Exception e) {
             log.error("文件上传失败", e);
@@ -65,7 +65,7 @@ public class UploadServiceImpl implements UploadService {
             }
 
             try {
-                FileDTO fileDTO = saveFile(file);
+                FileDTO fileDTO = saveFile(file, null);
                 fileDTOS.add(fileDTO);
             } catch (Exception e) {
                 log.error("文件上传失败", e);
@@ -77,7 +77,7 @@ public class UploadServiceImpl implements UploadService {
 
 
     @Override
-    public List<FileThumDTO> multiFileThumUpload(MultipartFile[] mpfs) {
+    public List<FileThumDTO> multiFileThumUpload(MultipartFile[] mpfs, Integer[] type) {
         // 上传文件返回的路径集合
         List<FileThumDTO> fileDTOS = new ArrayList<>();
         if (null == mpfs) {
@@ -85,28 +85,31 @@ public class UploadServiceImpl implements UploadService {
         }
 
         FileThumDTO fileThumDTO = null;
-        for (MultipartFile file : mpfs) {
+        for (int i = 0; i < mpfs.length; i++) {
+            MultipartFile file = mpfs[i];
             if (file.isEmpty()) {
                 fileThumDTO = new FileThumDTO();
-                fileThumDTO.setSource(new FileDTO("FAILURE", "文件不能为空"));
+                fileThumDTO.setSource(new FileDTO("FAILURE", "文件不能为空", type[i]));
                 fileDTOS.add(fileThumDTO);
                 continue;
             }
             //文件大小上限4M
             if (file.getSize() > 4 * 1024 * 1024) {
                 fileThumDTO = new FileThumDTO();
-                fileThumDTO.setSource(new FileDTO("FAILURE", "文件上传失败,超出大小限制4MB"));
+                fileThumDTO.setSource(new FileDTO("FAILURE", "文件上传失败,超出大小限制4MB", type[i]));
                 fileDTOS.add(fileThumDTO);
                 continue;
             }
 
             try {
                 fileThumDTO = saveFileWithThum(file);
+                fileThumDTO.getSource().setType(type[i]);
+                fileThumDTO.getThumbnail().setType(type[i]);
                 fileDTOS.add(fileThumDTO);
             } catch (Exception e) {
                 log.error("文件上传失败", e);
                 fileThumDTO = new FileThumDTO();
-                fileThumDTO.setSource(new FileDTO("FAILURE", "文件上传失败,请重新上传"));
+                fileThumDTO.setSource(new FileDTO("FAILURE", "文件上传失败,请重新上传", type[i]));
                 fileDTOS.add(fileThumDTO);
             }
         }

+ 2 - 2
prec-service/src/main/java/com/diagbot/web/UploadController.java

@@ -62,8 +62,8 @@ public class UploadController {
     @ApiOperation(value = "智能预问诊-多个文件上传同时生成缩略图")
     @CrossOrigin(allowCredentials = "true", allowedHeaders = "*", methods = { RequestMethod.POST }, origins = "*")
     @PostMapping(value = "/uploadImageThums", produces = MediaType.MULTIPART_FORM_DATA_VALUE)
-    public String multiFileThumUpload(@RequestParam("upfiles") MultipartFile[] file, HttpServletRequest request, HttpServletResponse response) {
-        List<FileThumDTO> fileDTO = uploadFacade.multiFileThumUpload(file);
+    public String multiFileThumUpload(@RequestParam("upfiles") MultipartFile[] file, @RequestParam("type") Integer[] type, HttpServletRequest request, HttpServletResponse response) {
+        List<FileThumDTO> fileDTO = uploadFacade.multiFileThumUpload(file, type);
         String data = FastJsonUtils.getBeanToJson(fileDTO);
         response.setContentType("text/plain;charset=UTF-8");
 

+ 8 - 0
tran-service/pom.xml

@@ -154,6 +154,14 @@
             <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
         </dependency>
 
+        <!--&lt;!&ndash; CXF webservice &ndash;&gt;-->
+        <!--<dependency>-->
+            <!--<groupId>org.apache.cxf</groupId>-->
+            <!--<artifactId>cxf-spring-boot-starter-jaxws</artifactId>-->
+            <!--<version>3.3.2</version>-->
+        <!--</dependency>-->
+        <!--&lt;!&ndash; CXF webservice &ndash;&gt;-->
+
     </dependencies>
 
     <build>

+ 50 - 0
tran-service/src/main/java/com/diagbot/client/CxfClient.java

@@ -0,0 +1,50 @@
+//package com.diagbot.client;
+//
+//import org.apache.cxf.endpoint.Client;
+//import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
+//
+///**
+// * @Description:
+// * @author: gaodm
+// * @time: 2019/7/2 10:43
+// */
+//public class CxfClient {
+//
+//    public static void main(String[] args) {
+//        cl2();
+//    }
+//
+//    /**
+//     * 动态调用方式
+//     */
+//    public static void cl2() {
+//        // 创建动态客户端
+//        JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
+//        Client client = dcf.createClient("http://116.62.126.198:8089/APP_Webservicesfuzl/service/WebServices?wsdl");
+//        // 需要密码的情况需要加上用户名和密码
+//        // client.getOutInterceptors().add(new ClientLoginInterceptor(USER_NAME,
+//        // PASS_WORD));
+//        Object[] objects = new Object[0];
+//        try {
+//            // invoke("方法名",参数1,参数2,参数3....);
+//            String in0  = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n" +
+//                    "<ROOT>\n" +
+//                    "    <HEAD>\n" +
+//                    "        <tranKey>ICSS_GET_PATIENT</tranKey>\n" +
+//                    "        <tranType>ICSS_GET_PATIENT</tranType>\n" +
+//                    "        <stffNo></stffNo>\n" +
+//                    "        <hospitalId></hospitalId>\n" +
+//                    "        <departId></departId>\n" +
+//                    "        <tranData></tranData>\n" +
+//                    "    </HEAD>\n" +
+//                    "    <BODY xsi:type=\"patientInfoRequest\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n" +
+//                    "        <PATIENTID>1</PATIENTID>\n" +
+//                    "    </BODY>\n" +
+//                    "</ROOT>\n";
+//            objects = client.invoke("ICSS_GET_PATIENT", in0);
+//            System.out.println("返回数据:" + objects[0]);
+//        } catch (java.lang.Exception e) {
+//            e.printStackTrace();
+//        }
+//    }
+//}

+ 3 - 1
tran-service/src/main/java/com/diagbot/dto/LisConfigDTO.java

@@ -13,10 +13,12 @@ import lombok.Setter;
 @Getter
 public class LisConfigDTO {
 
-	 private Long id;
+	private Long id;
 	 /**
      * 医院id
      */
+	private String assembly;
+	 
     private String hospitalId;
 
     /**

+ 19 - 22
tran-service/src/main/java/com/diagbot/facade/TranLisConfigFacade.java

@@ -5,8 +5,10 @@ import com.diagbot.dto.LisConfigDTO;
 import com.diagbot.entity.TranLisConfig;
 import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.service.impl.TranLisConfigServiceImpl;
-import com.diagbot.util.BeanUtil;
 import com.diagbot.util.EntityUtil;
+import com.diagbot.util.ListUtil;
+import com.diagbot.vo.LisConfigVO;
+import com.diagbot.vo.LisHospitalCodeVO;
 import org.springframework.stereotype.Component;
 
 import java.util.LinkedHashMap;
@@ -24,17 +26,19 @@ public class TranLisConfigFacade extends TranLisConfigServiceImpl{
 	/**
 	 * 根据医院编码查询公表映射配置
 	 *
-	 * @param hospitalCode
+	 * @param lisHospitalCodeVO
 	 * @return
 	 */
-	public List<LisConfigDTO> getLisConfigByhospitalIds(String hospitalCode) {
+	public List<LisConfigDTO> getLisConfigByhospitalIds(LisHospitalCodeVO lisHospitalCodeVO) {
 
-		QueryWrapper<TranLisConfig> lisConfig = new QueryWrapper<>();
+		/*QueryWrapper<TranLisConfig> lisConfig = new QueryWrapper<>();
 	    //System.out.println("hospitalCode==="+hospitalCode);
 		lisConfig.eq("is_deleted", IsDeleteEnum.N.getKey()).eq("hospital_code", hospitalCode);
 		List<TranLisConfig> data = list(lisConfig);
 		List<LisConfigDTO> datas = BeanUtil.listCopyTo(data, LisConfigDTO.class);
 		//System.out.println("json=="+GsonUtil.toJson(datas));
+		return datas;*/
+		List<LisConfigDTO> datas = getLisConfigByhospitalId(lisHospitalCodeVO);
 		return datas;
 	}
 
@@ -43,11 +47,14 @@ public class TranLisConfigFacade extends TranLisConfigServiceImpl{
 	 *
 	 * @return
 	 */
-	public Map<String, Map<String, String>> getLisConfigByHosCode_NotEmptyItemName(String hosCode) {
+	public Map<String, Map<String, String>> getLisConfigByMealNameAndHosCode(LisConfigVO lisConfigVO) {
 		Map<String, Map<String, String>> retMap = new LinkedHashMap<>();
 		QueryWrapper<TranLisConfig> lisConfigQueryWrapper = new QueryWrapper<>();
-		lisConfigQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey()).eq("hospital_code",hosCode).
-				isNotNull("item_name").and(i->i.ne("item_name",""));
+		lisConfigQueryWrapper.select("hospital_code,meal_name,ifnull(item_name,'') as item_name,unique_name,unique_id").
+				eq("is_deleted", IsDeleteEnum.N.getKey()).eq("hospital_code", lisConfigVO.getHosCode());
+		if (ListUtil.isNotEmpty(lisConfigVO.getMealNameList())) {
+			lisConfigQueryWrapper.in("meal_name", lisConfigVO.getMealNameList());
+		}
 		List<TranLisConfig> lisConfigList = this.list(lisConfigQueryWrapper);
 		Map<String, List<TranLisConfig>> lisConfigMap = EntityUtil.makeEntityListMap(lisConfigList, "mealName");
 		for (Map.Entry<String, List<TranLisConfig>> entry : lisConfigMap.entrySet()) {
@@ -60,29 +67,19 @@ public class TranLisConfigFacade extends TranLisConfigServiceImpl{
 		return retMap;
 	}
 
-	/**
-	 * 根据医院编码获取化验公表映射关系-itemName为空 Map<mealName,uniqueName>
-	 *
-	 * @return
-	 */
-	public Map<String, String> getLisConfigByHosCode_EmptyItemName(String hosCode) {
-		QueryWrapper<TranLisConfig> lisConfigQueryWrapper = new QueryWrapper<>();
-		lisConfigQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey()).eq("hospital_code",hosCode).
-				isNull("item_name").or(i->i.eq("item_name",""));
-		List<TranLisConfig> lisConfigList = this.list(lisConfigQueryWrapper);
-		Map<String, String> retMap = EntityUtil.makeMapWithKeyValue(lisConfigList, "mealName", "uniqueName");
-		return retMap;
-	}
 
 	/**
 	 * 根据医院编码获取化验公表映射关系,公表项做key  Map<uniqueName,List<mealName>>
 	 *
 	 * @return
 	 */
-	public Map<String, List<String>> getLisConfigByUniqueNameAndHosCode(String hosCode) {
+	public Map<String, List<String>> getLisConfigByUniqueNameAndHosCode(LisConfigVO lisConfigVO) {
 		Map<String, List<String>> retMap = new LinkedHashMap<>();
 		QueryWrapper<TranLisConfig> tranLisConfigQueryWrapper = new QueryWrapper<>();
-		tranLisConfigQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey()).eq("hospital_code",hosCode);
+		tranLisConfigQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey()).eq("hospital_code",lisConfigVO.getHosCode());
+		if(ListUtil.isNotEmpty(lisConfigVO.getUniqueNameList())){
+			tranLisConfigQueryWrapper.in("unique_name",lisConfigVO.getUniqueNameList());
+		}
 		List<TranLisConfig> tranLisConfigList = this.list(tranLisConfigQueryWrapper);
 		Map<String, List<TranLisConfig>> lisConfigMap = EntityUtil.makeEntityListMap(tranLisConfigList, "uniqueName");
 		for (Map.Entry<String, List<TranLisConfig>> entry : lisConfigMap.entrySet()) {

+ 7 - 0
tran-service/src/main/java/com/diagbot/mapper/TranLisConfigMapper.java

@@ -1,6 +1,11 @@
 package com.diagbot.mapper;
 
+import com.diagbot.dto.LisConfigDTO;
 import com.diagbot.entity.TranLisConfig;
+import com.diagbot.vo.LisHospitalCodeVO;
+
+import java.util.List;
+
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
 /**
@@ -13,4 +18,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface TranLisConfigMapper extends BaseMapper<TranLisConfig> {
 
+	List<LisConfigDTO> getLisConfigByhospitalIds(LisHospitalCodeVO lisHospitalCodeVO);
+
 }

+ 7 - 0
tran-service/src/main/java/com/diagbot/service/TranLisConfigService.java

@@ -1,6 +1,11 @@
 package com.diagbot.service;
 
+import com.diagbot.dto.LisConfigDTO;
 import com.diagbot.entity.TranLisConfig;
+import com.diagbot.vo.LisHospitalCodeVO;
+
+import java.util.List;
+
 import com.baomidou.mybatisplus.extension.service.IService;
 
 /**
@@ -12,5 +17,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
  * @since 2019-02-13
  */
 public interface TranLisConfigService extends IService<TranLisConfig> {
+	
+	public List<LisConfigDTO> getLisConfigByhospitalId(LisHospitalCodeVO lisHospitalCodeVO);
 
 }

+ 10 - 0
tran-service/src/main/java/com/diagbot/service/impl/TranLisConfigServiceImpl.java

@@ -1,9 +1,14 @@
 package com.diagbot.service.impl;
 
+import com.diagbot.dto.LisConfigDTO;
 import com.diagbot.entity.TranLisConfig;
 import com.diagbot.mapper.TranLisConfigMapper;
 import com.diagbot.service.TranLisConfigService;
+import com.diagbot.vo.LisHospitalCodeVO;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+import java.util.List;
+
 import org.springframework.stereotype.Service;
 
 /**
@@ -17,4 +22,9 @@ import org.springframework.stereotype.Service;
 @Service
 public class TranLisConfigServiceImpl extends ServiceImpl<TranLisConfigMapper, TranLisConfig> implements TranLisConfigService {
 
+	@Override
+	public List<LisConfigDTO> getLisConfigByhospitalId(LisHospitalCodeVO lisHospitalCodeVO) {
+		return baseMapper.getLisConfigByhospitalIds(lisHospitalCodeVO);
+	}
+
 }

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

@@ -0,0 +1,18 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * @Description: 化验公表映射检索入参
+ * @Author:zhaops
+ * @time: 2019/7/6 15:52
+ */
+@Getter
+@Setter
+public class LisConfigVO extends HosCodeVO {
+    List<String> mealNameList;
+    List<String> uniqueNameList;
+}

+ 4 - 0
tran-service/src/main/java/com/diagbot/vo/LisHospitalCodeVO.java

@@ -1,5 +1,7 @@
 package com.diagbot.vo;
 
+import java.util.List;
+
 import lombok.Getter;
 import lombok.Setter;
 
@@ -17,4 +19,6 @@ public class LisHospitalCodeVO {
 	 * 医院编码
 	 */
 	String hospitalCode;
+	
+	List<String> assemblys;
 }

+ 18 - 29
tran-service/src/main/java/com/diagbot/web/TranLisConfigController.java

@@ -1,23 +1,21 @@
 package com.diagbot.web;
 
-import java.util.List;
-import java.util.Map;
-
-import com.diagbot.vo.HosCodeVO;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
 import com.diagbot.annotation.SysLogger;
 import com.diagbot.dto.LisConfigDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.facade.TranLisConfigFacade;
+import com.diagbot.vo.LisConfigVO;
 import com.diagbot.vo.LisHospitalCodeVO;
-
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+import java.util.Map;
 
 /**
  * 
@@ -38,31 +36,22 @@ public class TranLisConfigController {
 	@PostMapping("/getLisConfigByhospitalId")
 	@SysLogger("getLisConfigByhospitalId")
 	public RespDTO<List<LisConfigDTO>> getLisConfigByhospitalId(@RequestBody LisHospitalCodeVO lisHospitalCodeVO) {
-		return RespDTO.onSuc(tranLisConfigFacade.getLisConfigByhospitalIds(lisHospitalCodeVO.getHospitalCode()));
+		return RespDTO.onSuc(tranLisConfigFacade.getLisConfigByhospitalIds(lisHospitalCodeVO));
 	}
 
-	@ApiOperation(value = "根据医院编码获取化验公表映射关系-itemName不为空:[by:zhaops]",
+	@ApiOperation(value = "根据医院编码和套餐名称获取化验公表映射关系:[by:zhaops]",
 			notes = "hosCode: 医院编码,必填<br>")
-	@PostMapping("/getLisConfigByHosCode_NotEmptyItemName")
-	@SysLogger("getLisConfigByHosCode_NotEmptyItemName")
-	public RespDTO<Map<String, Map<String, String>>> getLisConfigByHosCode_NotEmptyItemName(@RequestBody HosCodeVO hosCodeVO) {
-		return RespDTO.onSuc(tranLisConfigFacade.getLisConfigByHosCode_NotEmptyItemName(hosCodeVO.getHosCode()));
-	}
-
-	@ApiOperation(value = "根据医院编码获取化验公表映射关系-itemName为空 :[by:zhaops]",
-			notes = "hosCode: 医院编码,必填<br>")
-	@PostMapping("/getLisConfigByHosCode_EmptyItemName")
-	@SysLogger("getLisConfigByHosCode_EmptyItemName")
-	public RespDTO<Map<String, String>> getLisConfigByHosCode_EmptyItemName(@RequestBody HosCodeVO hosCodeVO) {
-		return RespDTO.onSuc(tranLisConfigFacade.getLisConfigByHosCode_EmptyItemName(hosCodeVO.getHosCode()));
+	@PostMapping("/getLisConfigByMealNameAndHosCode")
+	@SysLogger("getLisConfigByMealNameAndHosCode")
+	public RespDTO<Map<String, Map<String, String>>> getLisConfigByMealNameAndHosCode(@RequestBody LisConfigVO lisConfigVO) {
+		return RespDTO.onSuc(tranLisConfigFacade.getLisConfigByMealNameAndHosCode(lisConfigVO));
 	}
 
 	@ApiOperation(value = "根据医院编码获取化验公表映射关系,公表项做key :[by:zhaops]",
 			notes = "hosCode: 医院编码,必填<br>")
 	@PostMapping("/getLisConfigByUniqueNameAndHosCode")
 	@SysLogger("getLisConfigByUniqueNameAndHosCode")
-	public RespDTO<Map<String, List<String>>> getLisConfigByUniqueNameAndHosCode(@RequestBody HosCodeVO hosCodeVO) {
-		return RespDTO.onSuc(tranLisConfigFacade.getLisConfigByUniqueNameAndHosCode(hosCodeVO.getHosCode()));
+	public RespDTO<Map<String, List<String>>> getLisConfigByUniqueNameAndHosCode(@RequestBody LisConfigVO lisConfigVO) {
+		return RespDTO.onSuc(tranLisConfigFacade.getLisConfigByUniqueNameAndHosCode(lisConfigVO));
 	}
-}
-
+}

+ 28 - 14
tran-service/src/main/resources/mapper/TranLisConfigMapper.xml

@@ -2,19 +2,33 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.diagbot.mapper.TranLisConfigMapper">
 
-    <!-- 通用查询映射结果 -->
-    <resultMap id="BaseResultMap" type="com.diagbot.entity.TranLisConfig">
-        <id column="id" property="id" />
-        <result column="is_deleted" property="isDeleted" />
-        <result column="gmt_create" property="gmtCreate" />
-        <result column="gmt_modified" property="gmtModified" />
-        <result column="creator" property="creator" />
-        <result column="modifier" property="modifier" />
-        <result column="hospital_code" property="hospitalCode" />
-        <result column="meal_name" property="mealName" />
-        <result column="item_name" property="itemName" />
-        <result column="unique_id" property="uniqueId" />
-        <result column="unique_name" property="uniqueName" />
-    </resultMap>
+	<!-- 通用查询映射结果 -->
+	<resultMap id="BaseResultMap" type="com.diagbot.entity.TranLisConfig">
+		<id column="id" property="id" />
+		<result column="is_deleted" property="isDeleted" />
+		<result column="gmt_create" property="gmtCreate" />
+		<result column="gmt_modified" property="gmtModified" />
+		<result column="creator" property="creator" />
+		<result column="modifier" property="modifier" />
+		<result column="hospital_code" property="hospitalCode" />
+		<result column="meal_name" property="mealName" />
+		<result column="item_name" property="itemName" />
+		<result column="unique_id" property="uniqueId" />
+		<result column="unique_name" property="uniqueName" />
+	</resultMap>
 
+	<select id="getLisConfigByhospitalIds" resultType="com.diagbot.dto.LisConfigDTO">
+		SELECT CONCAT(IFNULL(meal_name,""),"--",IFNULL(item_name,"")) AS
+		assembly ,a.*
+		FROM tran_lis_config a WHERE a.is_deleted = 'N'
+		<if test="hospitalCode!=null">
+			AND hospital_code = #{hospitalCode}
+		</if>
+		<if test="assemblys!=null">
+			AND CONCAT(IFNULL(meal_name,""),"--",IFNULL(item_name,"")) IN
+			<foreach collection="assemblys" item="assemblys"  open="(" close=")" separator=",">
+				#{assemblys}
+			</foreach>
+		</if>
+	</select>
 </mapper>