瀏覽代碼

Merge branch 'dev/KLBstand' into dev/precSR

gaodm 6 年之前
父節點
當前提交
33d3174bf4
共有 48 個文件被更改,包括 827 次插入255 次删除
  1. 1 1
      aipt-service/src/main/java/com/diagbot/enums/LexiconTypeEnum.java
  2. 21 9
      aipt-service/src/main/java/com/diagbot/facade/ClinicalFacade.java
  3. 22 17
      aipt-service/src/main/java/com/diagbot/facade/ConceptDetailFacade.java
  4. 50 0
      aipt-service/src/main/java/com/diagbot/facade/ConceptFacade.java
  5. 94 60
      aipt-service/src/main/java/com/diagbot/facade/TreatmentFacade.java
  6. 10 0
      aipt-service/src/main/java/com/diagbot/mapper/ConceptMapper.java
  7. 11 0
      aipt-service/src/main/java/com/diagbot/service/ConceptService.java
  8. 17 1
      aipt-service/src/main/java/com/diagbot/service/impl/ConceptServiceImpl.java
  9. 22 0
      aipt-service/src/main/java/com/diagbot/vo/ConceptFindVO.java
  10. 2 0
      aipt-service/src/main/java/com/diagbot/vo/RetrievalVO.java
  11. 18 1
      aipt-service/src/main/java/com/diagbot/web/ConceptController.java
  12. 141 40
      aipt-service/src/main/resources/mapper/ConceptMapper.xml
  13. 二進制
      docs/009.20190425知识库标准化脚本/知识库标准化执行脚本_20190703.zip
  14. 11 0
      icss-service/src/main/java/com/diagbot/client/AiptServiceClient.java
  15. 13 0
      icss-service/src/main/java/com/diagbot/client/hystrix/AiptServiceHystrix.java
  16. 30 13
      icss-service/src/main/java/com/diagbot/facade/ModuleFacade.java
  17. 6 1
      icss-service/src/main/java/com/diagbot/facade/PushFacade.java
  18. 9 9
      icss-service/src/main/java/com/diagbot/facade/QuestionUsualFacade.java
  19. 18 16
      icss-service/src/main/java/com/diagbot/facade/RetrievalFacade.java
  20. 22 0
      icss-service/src/main/java/com/diagbot/vo/ConceptFindVO.java
  21. 10 0
      icssman-service/src/main/java/com/diagbot/client/KnowledgemanServiceClient.java
  22. 7 0
      icssman-service/src/main/java/com/diagbot/client/hystrix/KnowledgemanServiceHystrix.java
  23. 1 0
      icssman-service/src/main/java/com/diagbot/config/ResourceServerConfigurer.java
  24. 1 0
      icssman-service/src/main/java/com/diagbot/config/security/UrlAccessDecisionManager.java
  25. 13 4
      icssman-service/src/main/java/com/diagbot/facade/LisMappingFacade.java
  26. 6 4
      icssman-service/src/main/java/com/diagbot/facade/ModuleInfoFacade.java
  27. 30 0
      icssman-service/src/main/java/com/diagbot/facade/QuestionFacade.java
  28. 16 0
      icssman-service/src/main/java/com/diagbot/vo/GetConceptPacInfosVO.java
  29. 24 0
      icssman-service/src/main/java/com/diagbot/vo/IndexIcssVO.java
  30. 13 0
      icssman-service/src/main/java/com/diagbot/web/QuestionInfoController.java
  31. 1 0
      knowledgeman-service/src/main/java/com/diagbot/config/ResourceServerConfigurer.java
  32. 1 0
      knowledgeman-service/src/main/java/com/diagbot/config/security/UrlAccessDecisionManager.java
  33. 1 1
      knowledgeman-service/src/main/java/com/diagbot/dto/GetAllInformationDTO.java
  34. 1 1
      knowledgeman-service/src/main/java/com/diagbot/dto/GetConceptDetailListDTO.java
  35. 1 1
      knowledgeman-service/src/main/java/com/diagbot/dto/GetLexiconListDTO.java
  36. 1 1
      knowledgeman-service/src/main/java/com/diagbot/dto/GetMedicalInfoListDTO.java
  37. 1 1
      knowledgeman-service/src/main/java/com/diagbot/dto/GetRelationInfoListDTO.java
  38. 1 1
      knowledgeman-service/src/main/java/com/diagbot/dto/LisSonContactListDTO.java
  39. 1 1
      knowledgeman-service/src/main/java/com/diagbot/dto/MultContactListDTO.java
  40. 1 1
      knowledgeman-service/src/main/java/com/diagbot/dto/RelationContactListDTO.java
  41. 1 1
      knowledgeman-service/src/main/java/com/diagbot/enums/LexiconTypeEnum.java
  42. 49 24
      knowledgeman-service/src/main/java/com/diagbot/facade/ConceptFacade.java
  43. 11 16
      knowledgeman-service/src/main/java/com/diagbot/facade/RelationFacade.java
  44. 16 0
      knowledgeman-service/src/main/java/com/diagbot/vo/GetConceptPacInfosVO.java
  45. 28 16
      knowledgeman-service/src/main/java/com/diagbot/web/ConceptController.java
  46. 15 14
      knowledgeman-service/src/main/resources/mapper/RelationMapper.xml
  47. 8 0
      tran-service/pom.xml
  48. 50 0
      tran-service/src/main/java/com/diagbot/client/CxfClient.java

+ 1 - 1
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,"化验明细"),

+ 21 - 9
aipt-service/src/main/java/com/diagbot/facade/ClinicalFacade.java

@@ -53,6 +53,9 @@ public class ClinicalFacade {
     @Autowired
     private NLPServiceClient nlpServiceClient;
 
+    @Autowired
+    private ConceptFacade conceptFacade;
+
     private static String up = "增高";
     private static String down = "降低";
     private static String normal = "正常";
@@ -60,6 +63,8 @@ public class ClinicalFacade {
     private static String pos = "阳性";
     private static String neg = "阴性";
 
+    //    private static Map<String, List<Map<String, String>>> standWordObj = null;
+
     /**
      * 处理临床数据
      *
@@ -68,11 +73,12 @@ public class ClinicalFacade {
      */
     public ResponseData processClinicalData(@RequestBody SearchVo searchVo) {
         SearchVo sData = searchVo;
-        Map<String, List<Map<String, String>>> standWord = getStandWord();
-        Response<List<Lexeme>> resp = nlpServiceClient.split(sData.getSymptom());
-        if (null != resp && null != resp.getData()) {
-            addStandWord(resp.getData(), standWord, sData);
-        }
+//        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()));
 
@@ -327,7 +333,7 @@ public class ClinicalFacade {
         Map<String, List<Map<String, String>>> standWordObj = new HashMap<>();
         List<List<Lexeme>> splitStandWords = new ArrayList<>();
         List<Lexeme> data = null;
-        BufferedReader reader = null;
+        /*BufferedReader reader = null;
         InputStream inputStream = null;
         String line = "";
         try {
@@ -353,7 +359,13 @@ public class ClinicalFacade {
             } 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) {
@@ -363,9 +375,9 @@ public class ClinicalFacade {
             String standWordObjKey = "";
             for (Lexeme lexeme : splitStandWord) {
                 i++;
-                if ("\uFEFF".equals(lexeme.getText()) || lexeme.getText().length() <= 0) {
-                    continue;
-                }
+                //                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())) {

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

+ 50 - 0
aipt-service/src/main/java/com/diagbot/facade/ConceptFacade.java

@@ -15,11 +15,13 @@ 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;
@@ -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
@@ -295,7 +342,9 @@ public class ConceptFacade extends ConceptServiceImpl {
         RetrievalVO retrievalVO = new RetrievalVO();
         RetrievalDTO retrievalDTO = new RetrievalDTO();
         BeanUtil.copyProperties(getStaticKnowledgeVO,retrievalVO);
+        retrievalVO.setIsStatic(1);
         List<Integer> types = new ArrayList<>();
+        types.add(LexiconTypeEnum.LIS_TABLES.getKey());//添加化验公表项类型
         for (Integer type : getStaticKnowledgeVO.getTypes()) {
             types.add(ParamConvertUtil.conceptConvert2Lib(type));
         }
@@ -313,6 +362,7 @@ public class ConceptFacade extends ConceptServiceImpl {
                 retrievalDTO.setConceptId(conceptRetrievalDTO.getSelfId());
                 retrievalDTO.setName(conceptRetrievalDTO.getSelfName());
                 if (StringUtil.isNotEmpty(conceptRetrievalDTO.getParentName())) {//parent不为空时说明有子项,返回父级id
+                    retrievalDTO.setConceptId(conceptRetrievalDTO.getParentId());
                     retrievalDTO.setName(conceptRetrievalDTO.getParentName());
                     retrievalDTO.setRetrievalName(conceptRetrievalDTO.getSelfName());
                 }

+ 94 - 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,26 @@ 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);
+        }
+        return retMap;
+    }
 }

+ 10 - 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,12 @@ public interface ConceptMapper extends BaseMapper<Concept> {
      * @return
      */
     List<ConceptRetrievalDTO> retrievalConcept(RetrievalVO retrievalVO);
+
+    List<ConceptBaseDTO> getConceptConMap(ConceptFindVO conceptFindVO);
+
+    /**
+     * 获得诊断依据问题词的标准词
+     * @return
+     */
+    List<String> getStandWord();
 }

+ 11 - 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,13 @@ public interface ConceptService extends IService<Concept> {
      * @return
      */
     List<ConceptRetrievalDTO> retrievalConcept(RetrievalVO retrievalVO);
+
+    List<ConceptBaseDTO> getConceptConMap(ConceptFindVO conceptFindVO);
+
+    /**
+     * 获得诊断依据问题词的标准词
+     *
+     * @return
+     */
+    List<String> getStandWord();
 }

+ 17 - 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;
 
@@ -56,4 +58,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/RetrievalVO.java

@@ -25,4 +25,6 @@ public class RetrievalVO {
     private Integer detilType;
     //类型为其他史时用到的type类型
     private List<Integer> otherType;
+    //是否是静态搜索
+    private Integer isStatic;
 }

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

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

@@ -192,10 +192,17 @@
         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
+        <if test="isStatic != null and isStatic == 1">
+            LEFT JOIN kl_concept_detail t7 ON t7.concept_id = t1.id
+        </if>
         WHERE
         t1.is_deleted = 'N'
         AND t2.is_deleted = 'N'
+        AND t3.is_deleted = 'N'
         AND t6.is_deleted = 'N'
+        <if test="isStatic != null and isStatic == 1">
+            AND t7.is_deleted = 'N'
+        </if>
         <if test="type != null">
             AND t1.lib_type = #{type}
         </if>
@@ -206,15 +213,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
@@ -223,16 +229,28 @@
             </foreach>
         </if>
         AND (t2.spell =  UPPER(#{InputStr}) OR t2.name =  #{InputStr})
-        LIMIT 100)
+        <if test="isStatic != null and isStatic == 1">
+            GROUP BY t1.id
+        </if>
+        <if test="isStatic == null or isStatic != 1">
+            LIMIT 100
+        </if>)
         UNION
         (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
+        <if test="isStatic != null and isStatic == 1">
+            LEFT JOIN kl_concept_detail t7 ON t7.concept_id = t1.id
+        </if>
         WHERE
         t1.is_deleted = 'N'
         AND t2.is_deleted = 'N'
+        AND t3.is_deleted = 'N'
         AND t6.is_deleted = 'N'
+        <if test="isStatic != null and isStatic == 1">
+            AND t7.is_deleted = 'N'
+        </if>
         <if test="type != null">
             AND t1.lib_type = #{type}
         </if>
@@ -243,15 +261,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
@@ -260,16 +277,28 @@
             </foreach>
         </if>
         AND (t2.spell LIKE CONCAT( UPPER(#{InputStr}),'%') OR t2.name LIKE CONCAT( #{InputStr},'%'))
-        LIMIT 100)
+        <if test="isStatic != null and isStatic == 1">
+            GROUP BY t1.id
+        </if>
+        <if test="isStatic == null or isStatic != 1">
+            LIMIT 100
+        </if>)
         UNION
         (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
+        <if test="isStatic != null and isStatic == 1">
+            LEFT JOIN kl_concept_detail t7 ON t7.concept_id = t1.id
+        </if>
         WHERE
         t1.is_deleted = 'N'
         AND t2.is_deleted = 'N'
+        AND t3.is_deleted = 'N'
         AND t6.is_deleted = 'N'
+        <if test="isStatic != null and isStatic == 1">
+            AND t7.is_deleted = 'N'
+        </if>
         <if test="type != null">
             AND t1.lib_type = #{type}
         </if>
@@ -280,15 +309,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
@@ -297,34 +325,45 @@
             </foreach>
         </if>
         AND (t2.spell LIKE CONCAT('%',UPPER(#{InputStr}),'%') OR t2.name LIKE CONCAT('%',#{InputStr},'%'))
-        LIMIT 100)
+        <if test="isStatic != null and isStatic == 1">
+            GROUP BY t1.id
+        </if>
+        <if test="isStatic == null or isStatic != 1">
+            LIMIT 100
+        </if>)
         <if test="detilType != null and detilType != ''">
             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
+            <if test="isStatic != null and isStatic == 1">
+                LEFT JOIN kl_concept_detail t7 ON t7.concept_id = t5.id
+            </if>
             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="isStatic != null and isStatic == 1">
+                AND t7.is_deleted = 'N'
+            </if>
             <if test="detilType != null">
                 AND t1.lib_type = #{detilType}
             </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">
@@ -334,33 +373,44 @@
                 </foreach>
             </if>
             AND t4.relation_id = 18
-            LIMIT 100)
+            <if test="isStatic != null and isStatic == 1">
+                GROUP BY t5.id
+            </if>
+            <if test="isStatic == null or isStatic != 1">
+                LIMIT 100
+            </if>)
             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
+            <if test="isStatic != null and isStatic == 1">
+                LEFT JOIN kl_concept_detail t7 ON t7.concept_id = t5.id
+            </if>
             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="isStatic != null and isStatic == 1">
+                AND t7.is_deleted = 'N'
+            </if>
             <if test="detilType != null">
                 AND t1.lib_type = #{detilType}
             </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 +419,45 @@
                     #{id}
                 </foreach>
             </if>
+            <if test="isStatic != null and isStatic == 1">
+                GROUP BY t5.id
+            </if>
             AND t4.relation_id = 18
-            LIMIT 100)
+            <if test="isStatic == null or isStatic != 1">
+                LIMIT 100
+            </if>)
             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
+            <if test="isStatic != null and isStatic == 1">
+                LEFT JOIN kl_concept_detail t7 ON t7.concept_id = t5.id
+            </if>
             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="isStatic != null and isStatic == 1">
+                AND t7.is_deleted = 'N'
+            </if>
             <if test="detilType != null">
                 AND t1.lib_type = #{detilType}
             </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">
@@ -405,10 +466,50 @@
                     #{id}
                 </foreach>
             </if>
+            <if test="isStatic != null and isStatic == 1">
+                GROUP BY t5.id
+            </if>
             AND t4.relation_id = 18
-            LIMIT 100)
+            <if test="isStatic == null or isStatic != 1">
+                LIMIT 100
+            </if>)
         </if>
         ) a1
-        LIMIT 100
+        <if test="isStatic == null or isStatic != 1">
+            LIMIT 100
+        </if>
+    </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>

二進制
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);
+
     /**
      * 获取治疗方案
      *

+ 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;
+    }
+
     /**
      * 获取治疗方案
      *

+ 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)){//如果存在辅检相关信息添加数据返回

+ 6 - 1
icss-service/src/main/java/com/diagbot/facade/PushFacade.java

@@ -177,7 +177,12 @@ public class PushFacade {
                 for (String name : nameList) {
                     QuestionPushDTO questionPushDTO = new QuestionPushDTO();
                     QuestionDTO questionDTO = questionDTOMap.get(name);
-                    BeanUtil.copyProperties(questionDTO, questionPushDTO);
+                    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) {
                         questionPushDTO.setConceptId(lisMap.get(name));

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

+ 18 - 16
icss-service/src/main/java/com/diagbot/facade/RetrievalFacade.java

@@ -122,7 +122,6 @@ public class RetrievalFacade {
         GetStaticKnowledgeVO getStaticKnowledgeVO = new GetStaticKnowledgeVO();
         BeanUtil.copyProperties(getStaticVO,getStaticKnowledgeVO);
         //标签类型
-        List<String> questionNames = new ArrayList<>();
         List<Integer> typeList = new ArrayList<>();//规定标签类型,只取诊断,化验,辅检,药品类型
         typeList.add(QuestionTypeEnum.Disease.getKey());
         typeList.add(QuestionTypeEnum.Drug.getKey());
@@ -132,7 +131,9 @@ public class RetrievalFacade {
         //调用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<>();
             for (RetrievalDTO retrievalDTOInfo : retrievalDTOList.data) {
                 if(typeList.contains(retrievalDTOInfo.getType())){
                     questionNames.add(retrievalDTOInfo.getName());
@@ -151,23 +152,24 @@ 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()));
         }
-        List<OrderRetrivevalDTO> orderRetrivevalDTOS = BeanUtil.listCopyTo(retrievalDTOList.data,OrderRetrivevalDTO.class);
-        //设置排序编号
-        for (OrderRetrivevalDTO orderRetrivevalDTO : orderRetrivevalDTOS) {
-            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.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;
+}

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

+ 13 - 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,12 @@ 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())) {
+            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 (lisMappingList.size() > 1) {
             throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "存在多条映射关系,请删除重复映射");
@@ -104,8 +109,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 {
             //获取标签信息

+ 30 - 0
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;
@@ -37,6 +38,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 +93,8 @@ public class QuestionFacade extends QuestionInfoServiceImpl {
     @Autowired
     CacheFacade cacheFacade;
 
+
+
     /**
      * 标签保存
      *
@@ -385,6 +390,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, "标签系统名称已重复,无法建立");
@@ -724,4 +730,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;
+    }
 }

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

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

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

+ 1 - 1
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,"化验明细"),

+ 49 - 24
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);
@@ -243,6 +243,7 @@ public class ConceptFacade extends ConceptServiceImpl {
     	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);
@@ -1063,4 +1064,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,"导入数据不正确,请选择正确数据导入!");
         }
         

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

+ 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();
+//        }
+//    }
+//}