Browse Source

Merge remote-tracking branch 'remotes/origin/master' into his/shaoyifu

lipc 6 years ago
parent
commit
bc975e98ac
29 changed files with 391 additions and 171 deletions
  1. 0 9
      aipt-service/src/main/java/com/diagbot/client/AIServiceClient.java
  2. 1 13
      aipt-service/src/main/java/com/diagbot/client/hystrix/AIServiceHystrix.java
  3. 4 3
      aipt-service/src/main/java/com/diagbot/enums/FeatureTypeEnum.java
  4. 0 15
      aipt-service/src/main/java/com/diagbot/facade/ClinicalFacade.java
  5. 8 0
      aipt-service/src/main/java/com/diagbot/facade/ConceptFacade.java
  6. 13 27
      aipt-service/src/main/java/com/diagbot/facade/PushFacade.java
  7. 21 0
      aipt-service/src/main/java/com/diagbot/util/ParamConvertUtil.java
  8. 1 11
      aipt-service/src/main/java/com/diagbot/web/ClinicalController.java
  9. 1 1
      aipt-service/src/main/java/com/diagbot/web/PushController.java
  10. 0 2
      aipt-service/src/main/resources/mapper/ConceptMapper.xml
  11. 2 1
      data-service/src/main/java/com/diagbot/enums/FeatureTypeEnum.java
  12. 4 5
      data-service/src/main/java/com/diagbot/facade/PushFacade.java
  13. 1 1
      data-service/src/main/java/com/diagbot/web/PushController.java
  14. 3 2
      icss-service/src/main/java/com/diagbot/enums/FeatureTypeEnum.java
  15. 6 4
      icss-service/src/main/java/com/diagbot/facade/LisMappingFacade.java
  16. 4 4
      icss-service/src/main/java/com/diagbot/facade/PushFacade.java
  17. 1 1
      icss-service/src/main/java/com/diagbot/web/PushController.java
  18. 17 0
      icssman-service/src/main/java/com/diagbot/facade/LisMappingFacade.java
  19. 7 12
      icssman-service/src/main/java/com/diagbot/facade/ModuleInfoFacade.java
  20. 1 1
      knowledgeman-service/src/main/java/com/diagbot/enums/LexiconTypeEnum.java
  21. 227 32
      knowledgeman-service/src/main/java/com/diagbot/facade/ConceptFacade.java
  22. 11 6
      knowledgeman-service/src/main/java/com/diagbot/facade/RelationFacade.java
  23. 7 0
      knowledgeman-service/src/main/java/com/diagbot/util/ParamConvertUtil.java
  24. 27 0
      knowledgeman-service/src/main/java/com/diagbot/vo/AddConceptInfoVO.java
  25. 15 12
      knowledgeman-service/src/main/java/com/diagbot/web/UploadController.java
  26. 3 2
      ltapi-service/src/main/java/com/diagbot/enums/FeatureTypeEnum.java
  27. 4 5
      ltapi-service/src/main/java/com/diagbot/facade/PushFacade.java
  28. 1 1
      ltapi-service/src/main/java/com/diagbot/web/PushController.java
  29. 1 1
      triage-service/src/main/java/com/diagbot/facade/AIFacade.java

+ 0 - 9
aipt-service/src/main/java/com/diagbot/client/AIServiceClient.java

@@ -37,15 +37,6 @@ public interface AIServiceClient {
     @PostMapping(value = "/push-web/graph/scale")
     Map<String, Object> scale(@RequestBody SearchVo searchVo);
 
-    /**
-     * 高危诊断
-     *
-     * @param searchVo
-     * @return
-     */
-    @PostMapping(value = "/push-web/graph/highRisk")
-    Response<GdbResponse> highRiskPageData(@RequestBody SearchVo searchVo);
-
     /**
      * 计算接口
      *

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

@@ -44,18 +44,6 @@ public class AIServiceHystrix implements AIServiceClient {
         return null;
     }
 
-    /**
-     * 高危诊断
-     *
-     * @param searchVo
-     * @return
-     */
-    @Override
-    public Response<GdbResponse> highRiskPageData(@RequestBody SearchVo searchVo) {
-        log.error("【hystrix】调用{}异常", "highRiskPageData");
-        return null;
-    }
-
     /**
      * 计算接口
      *
@@ -67,4 +55,4 @@ public class AIServiceHystrix implements AIServiceClient {
         log.error("【hystrix】调用{}异常", "scaleCalc");
         return null;
     }
-}
+}

+ 4 - 3
aipt-service/src/main/java/com/diagbot/enums/FeatureTypeEnum.java

@@ -10,9 +10,10 @@ import lombok.Setter;
  */
 public enum FeatureTypeEnum implements KeyedNamed {
     Feature_Type_Symptom(1, "症状"),
-    Feature_Type_Past(1,"既往史"),
+    Feature_Type_Past(1, "既往史"),
     Feature_Type_Other(3, "其他史"),
-    Feature_Type_Vital(4, "查体"),
+    Feature_Type_Vital_Result(4, "查体结果"),
+    Feature_Type_Vital_Index(42, "查体指标"),
     Feature_Type_Lis(5, "化验"),
     Feature_Type_Pacs(6, "辅检"),
     Feature_Type_Disease(7, "诊断"),
@@ -55,4 +56,4 @@ public enum FeatureTypeEnum implements KeyedNamed {
     public String getName() {
         return name;
     }
-}
+}

+ 0 - 15
aipt-service/src/main/java/com/diagbot/facade/ClinicalFacade.java

@@ -168,21 +168,6 @@ public class ClinicalFacade {
         return list;
     }
 
-    /**
-     * 高危诊断
-     *
-     * @param searchVo
-     * @return
-     */
-    public GdbResponse highRiskPageData(SearchVo searchVo) {
-        Response<GdbResponse> response = aiServiceClient.highRiskPageData(searchVo);
-        if (response == null || response.getData() == null) {
-            return null;
-            //throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "高危没有返回结果");
-        }
-        return response.getData();
-    }
-
     /**
      * 计算接口
      *

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

@@ -282,7 +282,15 @@ public class ConceptFacade extends ConceptServiceImpl {
                 typeList.add(LexiconTypeEnum.FOOD_ALLERGY_HISTORY.getKey());
                 typeList.add(LexiconTypeEnum.HISTORY_OF_DRUG_ALLERGY.getKey());
                 typeList.add(LexiconTypeEnum.FAMILY_RELATED_INFECTIOUS_DISEASE_HISTORY.getKey());
+                typeList.add(LexiconTypeEnum.RELATIVES.getKey());
+                typeList.add(LexiconTypeEnum.MARRIAGE.getKey());
+                typeList.add(LexiconTypeEnum.FOOD.getKey());
+                typeList.add(LexiconTypeEnum.HISTORY.getKey());
+                typeList.add(LexiconTypeEnum.OPERATION.getKey());
+                typeList.add(LexiconTypeEnum.PERSONAL_HISTORY.getKey());
+                typeList.add(LexiconTypeEnum.PERSONAL_HISTORY_DESCRIPTION.getKey());
                 retrievalVO.setOtherType(typeList);
+                retrievalVO.setType(null);
                 bla = false;
             }
             if (bla) {

+ 13 - 27
aipt-service/src/main/java/com/diagbot/facade/PushFacade.java

@@ -123,8 +123,18 @@ public class PushFacade {
                 }
             }
         }
-        //查体 概念列表
-        if (featureTypeSet.contains(String.valueOf(FeatureTypeEnum.Feature_Type_Vital.getKey()))) {
+        //查体 查体结果
+        if (featureTypeSet.contains(String.valueOf(FeatureTypeEnum.Feature_Type_Vital_Result.getKey()))) {
+            List<FeatureRate> vital = data.getVitals();
+            if (ListUtil.isNotEmpty(vital)) {
+                List<String> nameList = vital.stream().map(featureRate -> featureRate.getFeatureName()).collect(Collectors.toList());
+                if (ListUtil.isNotEmpty(nameList)) {
+                    pushDTO.setVital(getConceptDTOList(nameList, LexiconTypeEnum.VITAL_RESULT.getKey()));
+                }
+            }
+        }
+        //查体 查体指标
+        if (featureTypeSet.contains(String.valueOf(FeatureTypeEnum.Feature_Type_Vital_Index.getKey()))) {
             List<FeatureRate> vital = data.getVitals();
             if (ListUtil.isNotEmpty(vital)) {
                 List<String> nameList = vital.stream().map(featureRate -> featureRate.getFeatureName()).collect(Collectors.toList());
@@ -133,6 +143,7 @@ public class PushFacade {
                 }
             }
         }
+
         //化验 概念列表-公表项
         if (featureTypeSet.contains(String.valueOf(FeatureTypeEnum.Feature_Type_Lis.getKey()))) {
             List<FeatureRate> lis = data.getLabs();
@@ -165,33 +176,8 @@ public class PushFacade {
         //诊断 map
         if (featureTypeSet.contains(String.valueOf(FeatureTypeEnum.Feature_Type_Disease.getKey()))) {
             if (ListUtil.isNotEmpty(dis)) {
-                List<String> nameList = dis.stream().map(featureRate -> featureRate.getFeatureName()).distinct().collect(Collectors.toList());
                 Map<String, List<ConceptPushDTO>> disMapDTO = new LinkedHashMap<>();
                 Map<String, List<FeatureRate>> disFeatureMap = new LinkedHashMap<>();
-                //警惕
-                Map<String, String> highRiskMap = new HashMap<>();
-                highRiskMap.put("disease", String.join(",", nameList));
-                SearchVo hrSearchVo = new SearchVo();
-                hrSearchVo.setDiag(String.join(",", nameList));
-                GdbResponse graphRes = clinicalFacade.highRiskPageData(hrSearchVo);
-                if (graphRes != null) {
-                    Map<String, String> graphResult = graphRes.getResult();
-                    if (graphResult.size() > 0) {
-                        List<String> hrNameList = Lists.newLinkedList();
-                        for (Map.Entry<String, String> entry : graphResult.entrySet()) {
-                            if (entry.getValue().equals("1")) {
-                                hrNameList.add(entry.getKey());
-                            }
-                        }
-                        if (ListUtil.isNotEmpty(hrNameList)) {
-                            List<ConceptPushDTO> hrDisDTO = getConceptDTOList(hrNameList, LexiconTypeEnum.DIAGNOSIS.getKey());
-                            if (isConnect) {
-                                hrDisDTO = addClientName(hrDisDTO, searchVo.getHosCode(), ConceptTypeEnum.Disease.getKey());
-                            }
-                            disMapDTO.put("警惕", hrDisDTO);
-                        }
-                    }
-                }
                 //诊断分类
                 for (FeatureRate featureRate : dis) {
                     if (StringUtil.isBlank(featureRate.getDesc())) {

+ 21 - 0
aipt-service/src/main/java/com/diagbot/util/ParamConvertUtil.java

@@ -83,10 +83,30 @@ public class ParamConvertUtil {
             case SYMPTOM:
                 type = ConceptTypeEnum.Symptom.getKey();
                 break;
+            case HISTORY_OF_PAST_DISEASES:
+            case HISTORY_OF_TRAUMA:
+            case HISTORY_OF_SURGERY:
+            case HISTORY_OF_BLOOD_TRANSFUSION:
+            case INFECTIOUS_DISEASE_HISTORY:
+            case BAD_HABITS:
+            case MARITAL_HISTORY:
+            case HISTORY_OF_MARRIAGE_AND_CHILDBEARING:
+            case BIRTH_HISTORY:
+            case FAMILY_HISTORY:
+            case FOOD_ALLERGY_HISTORY:
+            case HISTORY_OF_DRUG_ALLERGY:
+            case FAMILY_RELATED_INFECTIOUS_DISEASE_HISTORY:
+            case RELATIVES:
+            case MARRIAGE:
+            case FOOD:
             case HISTORY:
+            case OPERATION:
+            case PERSONAL_HISTORY:
+            case PERSONAL_HISTORY_DESCRIPTION:
                 type = ConceptTypeEnum.Other.getKey();
                 break;
             case VITAL_INDEX:
+            case VITAL_RESULT:
                 type = ConceptTypeEnum.Vital.getKey();
                 break;
             case LIS_PACKAGE:
@@ -125,6 +145,7 @@ public class ParamConvertUtil {
             case DEPARTMENT:
                 type = ConceptTypeEnum.DEPARTMENT.getKey();
                 break;
+
             default:
                 break;
         }

+ 1 - 11
aipt-service/src/main/java/com/diagbot/web/ClinicalController.java

@@ -3,7 +3,6 @@ package com.diagbot.web;
 
 import com.diagbot.annotation.SysLogger;
 import com.diagbot.client.bean.CalculateData;
-import com.diagbot.client.bean.GdbResponse;
 import com.diagbot.client.bean.ResponseData;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.entity.ScaleContent;
@@ -63,15 +62,6 @@ public class ClinicalController {
         return RespDTO.onSuc(data);
     }
 
-    @ApiOperation(value = "高危诊断", notes = "")
-    @PostMapping("/highRisk")
-    @SysLogger("highRisk")
-    @ApiIgnore
-    public RespDTO<GdbResponse> highRisk(@RequestBody SearchVo searchVo) {
-        GdbResponse data = clinicalFacade.highRiskPageData(searchVo);
-        return RespDTO.onSuc(data);
-    }
-
     @ApiOperation(value = "知识库标准化-计算接口", notes = "")
     @PostMapping("/scaleCalc")
     @SysLogger("scaleCalc")
@@ -79,4 +69,4 @@ public class ClinicalController {
         Map<String, Object> data = clinicalFacade.scaleCalc(calculateData);
         return RespDTO.onSuc(data);
     }
-}
+}

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

@@ -77,7 +77,7 @@ public class PushController {
                     "lis:source:数据来源(必填),Integer<br>" +
                     "pacs:辅检,String<br>" +
                     "diag:诊断,String<br>" +
-                    "featureType:类型(必填),1:症状,3:其他史,4:查体,5:化验,6:辅检,7:诊断,22-指标,String<br>" +
+                    "featureType:类型(必填),1:症状,3:其他史,4:查体结果,42:查体指标,5:化验,6:辅检,7:诊断,22-指标,String<br>" +
                     "disType:诊断类型,1-慢病,2-急诊,普通病不填,Integer<br>" +
                     "indications:指标结果,String<br>" +
                     "adverseReactions:不良反应,List<不良反应明细><br>")

+ 0 - 2
aipt-service/src/main/resources/mapper/ConceptMapper.xml

@@ -836,8 +836,6 @@
                                     OR t2. NAME LIKE CONCAT('%', #{InputStr}, '%')
                                 )
                                 AND t4.relation_id = 18
-                                GROUP BY
-                                    t5.id
                             ) b1,
                             kl_concept b2,
                             kl_concept_detail b3

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

@@ -11,7 +11,8 @@ import lombok.Setter;
 public enum FeatureTypeEnum implements KeyedNamed {
     Symptom(1, "症状"),
     Other(3, "其他史"),
-    Vital(4, "查体"),
+    VitalResult(4, "查体结果"),
+    VitalIndex(42, "查体指标"),
     Lis(5, "化验"),
     Pacs(6, "辅检"),
     Disease(7, "诊断"),

+ 4 - 5
data-service/src/main/java/com/diagbot/facade/PushFacade.java

@@ -40,10 +40,8 @@ public class PushFacade {
         PushDTO pushDTO = new PushDTO();
         SearchData searchData = assembleFacade.assembleData(pushVO);
         RespDTO<PushDTO> respDTO = aiptServiceClient.pushInner(searchData);
-        PushDTO data = new PushDTO();
-        if (RespDTOUtil.respIsOK(respDTO)) {
-            data = respDTO.data;
-        }
+        RespDTOUtil.respNGDeal(respDTO, "中间层没有返回结果");
+        PushDTO data = respDTO.data;
 
         String featureType = searchData.getFeatureType();
         String[] featureTypes = featureType.split(",|,");
@@ -58,7 +56,8 @@ public class PushFacade {
         if (featureTypeSet.contains(String.valueOf(FeatureTypeEnum.Other.getKey()))) {
         }
         //查体
-        if (featureTypeSet.contains(String.valueOf(FeatureTypeEnum.Vital.getKey()))) {
+        if (featureTypeSet.contains(String.valueOf(FeatureTypeEnum.VitalResult.getKey())) ||
+                featureTypeSet.contains(String.valueOf(FeatureTypeEnum.VitalIndex.getKey()))) {
             List<ConceptPushDTO> vitals = data.getVital();
             pushDTO.setVital(vitals);
         }

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

@@ -47,7 +47,7 @@ public class PushController {
                     "lis:source:数据来源(必填),Integer<br>" +
                     "pacs:辅检,String<br>" +
                     "diag:诊断,String<br>" +
-                    "featureType:类型(必填),1:症状,3:其他史,4:查体,5:化验,6:辅检,7:诊断,22-指标,String<br>" +
+                    "featureType:类型(必填),1:症状,3:其他史,4:查体结果,42:查体指标,5:化验,6:辅检,7:诊断,22-指标,String<br>" +
                     "diseaseName:取治疗方案的诊断,String<br>" +
                     "scaleName:量表名称,String<br>" +
                     "disType:诊断类型,1-慢病,2-急诊,普通病不填,Integer<br>" +

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

@@ -11,8 +11,9 @@ import lombok.Setter;
 public enum FeatureTypeEnum implements KeyedNamed {
     Symptom(1, "症状"),
     Other(3, "其他史"),
-    Vital(4, "查体"),
-    ModuleVital(41, "查体模板"),
+    VitalResult(4, "查体结果"),
+    VitalModule(41, "查体模板"),
+    VitalIndex(42, "查体指标"),
     Lis(5, "化验"),
     Pacs(6, "辅检"),
     Disease(7, "诊断"),

+ 6 - 4
icss-service/src/main/java/com/diagbot/facade/LisMappingFacade.java

@@ -77,14 +77,16 @@ public class LisMappingFacade extends LisMappingServiceImpl {
             return null;
         }
 
-        List<String> mealNameList= Lists.newLinkedList();
+        List<String> mealNameList = Lists.newLinkedList();
         mealNameList.add(project);
         Map<String, Map<String, String>> lisMappingMap = getLisMappingByMealName(mealNameList);
 
         Map<String, Map<String, String>> retMap = new LinkedHashMap<>();
-        Map<String, String> projectMap = new LinkedHashMap<>();
-        projectMap.put(project, lisMappingMap.get(project).get(""));
-        retMap.put("project", projectMap);
+        if (lisMappingMap != null && lisMappingMap.get(project) != null) {
+            Map<String, String> projectMap = new LinkedHashMap<>();
+            projectMap.put(project, lisMappingMap.get(project).get(""));
+            retMap.put("project", projectMap);
+        }
 
         if (ListUtil.isEmpty(details)) {
             return retMap;

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

@@ -33,7 +33,6 @@ import com.diagbot.vo.PushVO;
 import com.diagbot.vo.QuestionIds2VO;
 import com.diagbot.vo.QuestionVO;
 import com.google.common.collect.Lists;
-import org.aspectj.weaver.patterns.TypePatternQuestions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
@@ -129,7 +128,8 @@ public class PushFacade {
         if (featureTypeSet.contains(String.valueOf(FeatureTypeEnum.Other.getKey()))) {
         }
         //查体标记项
-        if (featureTypeSet.contains(String.valueOf(FeatureTypeEnum.Vital.getKey()))) {
+        if (featureTypeSet.contains(String.valueOf(FeatureTypeEnum.VitalResult.getKey())) ||
+                featureTypeSet.contains(String.valueOf(FeatureTypeEnum.VitalIndex.getKey()))) {
             List<ConceptPushDTO> vitals = data.getVital();
             if (ListUtil.isNotEmpty(vitals)) {
                 List<ConceptPushDTO> vitalDTOList = addQuestionId(vitals, QuestionTypeEnum.Vital.getKey());
@@ -141,7 +141,7 @@ public class PushFacade {
             }
         }
         //查体模板
-        if (featureTypeSet.contains(String.valueOf(FeatureTypeEnum.ModuleVital.getKey()))) {
+        if (featureTypeSet.contains(String.valueOf(FeatureTypeEnum.VitalModule.getKey()))) {
             ConceptPushDTO dept = data.getDept();
             List<QuestionPushDTO> moduleVitalDTO = getVitalModule(dept, pushVO);
             pushDTO.setModuleVital(moduleVitalDTO);
@@ -324,7 +324,7 @@ public class PushFacade {
     public List<ConceptPushDTO> addQuestionId(List<ConceptPushDTO> concepts, Integer type) {
         QueryWrapper<QuestionInfo> questionInfoQueryWrapper = new QueryWrapper<>();
         List<String> nameList = concepts.stream().map(concept -> concept.getName()).collect(Collectors.toList());
-        questionInfoQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey()).eq("type", type);
+        questionInfoQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey()).eq("type", type).ne("tag_type", TagTypeEnum.T8.getKey());
         //化验填写单匹配name
         if (type.equals(ConceptTypeEnum.Lis.getKey())) {
             questionInfoQueryWrapper.in("name", nameList);

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

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

+ 17 - 0
icssman-service/src/main/java/com/diagbot/facade/LisMappingFacade.java

@@ -7,7 +7,9 @@ import com.diagbot.client.UserServiceClient;
 import com.diagbot.dto.LisMappingPageDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.entity.LisMapping;
+import com.diagbot.entity.QuestionInfo;
 import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.enums.QuestionTypeEnum;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
 import com.diagbot.service.LisMappingService;
@@ -41,6 +43,10 @@ public class LisMappingFacade extends LisMappingServiceImpl {
     @Autowired
     @Qualifier("lisMappingServiceImpl")
     private LisMappingService lisMappingService;
+    @Autowired
+    private CacheFacade cacheFacade;
+    @Autowired
+    private QuestionFacade questionFacade;
 
     /**
      * 化验公表映射分页信息
@@ -104,6 +110,17 @@ public class LisMappingFacade extends LisMappingServiceImpl {
         lisMapping.setGmtModified(now);
         lisMapping.setIsDeleted(IsDeleteEnum.N.getKey());
         Boolean state = this.saveOrUpdate(lisMapping);
+
+        //清除缓存
+        QueryWrapper<QuestionInfo> questionInfoQueryWrapper = new QueryWrapper<>();
+        questionInfoQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey()).
+                eq("type", QuestionTypeEnum.Lis.getKey()).
+                eq("tag_type", 7).
+                eq("name", lisMappingVO.getMealName());
+        QuestionInfo lisQuestion = questionFacade.getOne(questionInfoQueryWrapper);
+        if (lisQuestion != null) {
+            cacheFacade.clearCache(lisQuestion.getId());
+        }
         return state;
     }
 

+ 7 - 12
icssman-service/src/main/java/com/diagbot/facade/ModuleInfoFacade.java

@@ -296,11 +296,6 @@ public class ModuleInfoFacade extends ModuleInfoServiceImpl {
         RespDTO<List<ConceptBaseDTO>> disInfoList = knowledgemanServiceClient.getConceptListByType(conceptTypeVO);
         RespDTOUtil.respNGDeal(disInfoList,"获取疾病信息失败");
         Map<Long, ConceptBaseDTO> disInfoMap = disInfoList.data.stream().collect(Collectors.toMap(ConceptBaseDTO::getConceptId,conceptBaseDTO -> conceptBaseDTO));
-        /*QueryWrapper<QuestionInfo> questionInfoQueryWrapper = new QueryWrapper<>();
-        questionInfoQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
-                .in("id", disId);
-        List<QuestionInfo> questionInfoList = questionFacade.list(questionInfoQueryWrapper);
-        Map<Long, QuestionInfo> questionInfoMap = questionInfoList.stream().collect(Collectors.toMap(QuestionInfo::getId,questionInfo -> questionInfo));*/
         //获取模板类型名称
         QueryWrapper<DictionaryInfo> dictionaryInfoQueryWrapper = new QueryWrapper<>();
         dictionaryInfoQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
@@ -431,11 +426,11 @@ public class ModuleInfoFacade extends ModuleInfoServiceImpl {
         RespDTOUtil.respNGDeal(deptInfoList,"获取科室信息失败");
         Map<Long, ConceptBaseDTO> deptInfoMap = deptInfoList.data.stream().collect(Collectors.toMap(ConceptBaseDTO::getConceptId,conceptBaseDTO -> conceptBaseDTO));
         //获取疾病名称
-        QueryWrapper<QuestionInfo> questionInfoQueryWrapper = new QueryWrapper<>();
-        questionInfoQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
-                .in("id", disId);
-        List<QuestionInfo> questionInfoList = questionFacade.list(questionInfoQueryWrapper);
-        Map<Long, QuestionInfo> questionInfoMap = questionInfoList.stream().collect(Collectors.toMap(QuestionInfo::getId,questionInfo -> questionInfo));
+        conceptTypeVO = new ConceptTypeVO();
+        conceptTypeVO.setType(3);
+        RespDTO<List<ConceptBaseDTO>> disInfoList = knowledgemanServiceClient.getConceptListByType(conceptTypeVO);
+        RespDTOUtil.respNGDeal(disInfoList,"获取疾病信息失败");
+        Map<Long, ConceptBaseDTO> disInfoMap = disInfoList.data.stream().collect(Collectors.toMap(ConceptBaseDTO::getConceptId,conceptBaseDTO -> conceptBaseDTO));
         //获取模板类型
         QueryWrapper<DictionaryInfo> dictionaryInfoQueryWrapper = new QueryWrapper<>();
         dictionaryInfoQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
@@ -453,8 +448,8 @@ public class ModuleInfoFacade extends ModuleInfoServiceImpl {
             }
         }
         if(getModuleInfoOneDTO.getModuleType().intValue() == 2){
-            if(null != questionInfoMap.get(getModuleInfoOneDTO.getRelationId())){
-                getModuleInfoOneDTO.setRelationName(questionInfoMap.get(getModuleInfoOneDTO.getRelationId()).getName());
+            if(null != disInfoMap.get(getModuleInfoOneDTO.getRelationId())){
+                getModuleInfoOneDTO.setRelationName(disInfoMap.get(getModuleInfoOneDTO.getRelationId()).getName());
             }
         }
         return getModuleInfoOneDTO;

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

@@ -50,7 +50,7 @@ public enum LexiconTypeEnum implements KeyedNamed {
     PERSONAL_HISTORY_DESCRIPTION(39,"个人史描述"),
     TIME_DESCRIPTION(40,"时间描述"),
     SYMPTOM_INDEX(41,"症状指标"),
-    MEDICAL_SUPPLIES(42,"医用耗材 "),
+    MEDICAL_SUPPLIES(42,"医用耗材"),
     DEGREE_CLASSIFIER(43,"程度量词"),
     OTHER(44,"其他"),
     DELETE(45,"删除"),

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

@@ -1,5 +1,27 @@
 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;
@@ -24,6 +46,8 @@ import com.diagbot.enums.LexiconRSTypeEnum;
 import com.diagbot.enums.LexiconTypeEnum;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
+import com.diagbot.service.ConceptCommonService;
+import com.diagbot.service.ConceptService;
 import com.diagbot.service.LibraryInfoService;
 import com.diagbot.service.impl.ConceptServiceImpl;
 import com.diagbot.util.BeanUtil;
@@ -52,27 +76,6 @@ 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: 术语查询业务层
@@ -90,6 +93,12 @@ public class ConceptFacade extends ConceptServiceImpl {
     @Qualifier("libraryInfoServiceImpl")
     private LibraryInfoService libraryInfoService;
     @Autowired
+    @Qualifier("conceptServiceImpl")
+    private ConceptService conceptService;
+    @Autowired
+    @Qualifier("conceptCommonServiceImpl")
+    private ConceptCommonService conceptCommonService;
+    @Autowired
     private UserServiceClient userServiceClient;
     @Autowired
     private LexiconFacade lexiconFacade;
@@ -238,26 +247,26 @@ public class ConceptFacade extends ConceptServiceImpl {
     public IPage<GetAllInformationDTO> getAllInformation(GetAllInformationVO getAllInformationVO) {
     	Page<GetAllInformationDTO> getAllInformationDTOPage = new Page<>();
     	
-    	List<Long> conceptIdList = null;
-    	if(StringUtil.isBlank(getAllInformationVO.getLibName())&&StringUtil.isNotBlank(getAllInformationVO.getName())){
-    		getAllInformationVO.setLibName(getAllInformationVO.getName());
-    	}
+    	Page<Concept> conceptPage = new Page<>(getAllInformationVO.getCurrent(),getAllInformationVO.getSize());
+    	QueryWrapper<Concept> conceptQe = new QueryWrapper<>();
     	if(StringUtil.isNotBlank(getAllInformationVO.getLibName())){
     		QueryWrapper<LibraryInfo> libraryInfoQe = new QueryWrapper<>();
     		libraryInfoQe.eq("is_deleted", IsDeleteEnum.N.getKey());
     		libraryInfoQe.like("name", getAllInformationVO.getLibName());
     		libraryInfoQe.eq(StringUtil.isNotBlank(getAllInformationVO.getType()),"type_id", LexiconTypeEnum.getKey(getAllInformationVO.getType()));
-    		conceptIdList = libraryinfoFacade.list(libraryInfoQe).stream().map(i->i.getConceptId()).distinct().collect(Collectors.toList());
+    		List<Long> conceptIdList = libraryinfoFacade.list(libraryInfoQe).stream().map(i->i.getConceptId()).distinct().collect(Collectors.toList());
+    		if(ListUtil.isNotEmpty(conceptIdList)){
+    			conceptQe.in("id", conceptIdList);
+    		}else{
+    			conceptQe.eq("id", -999999999);
+    		}
     	}
-    	
-    	Page<Concept> conceptPage = new Page<>(getAllInformationVO.getCurrent(),getAllInformationVO.getSize());
-    	QueryWrapper<Concept> conceptQe = new QueryWrapper<>();
-    	conceptQe.in(ListUtil.isNotEmpty(conceptIdList), "id", conceptIdList);
     	conceptQe.like(StringUtil.isNotBlank(getAllInformationVO.getName()),"lib_name", getAllInformationVO.getName());
     	conceptQe.eq(StringUtil.isNotBlank(getAllInformationVO.getType()),"lib_type", LexiconTypeEnum.getKey(getAllInformationVO.getType()));
     	conceptQe.eq(StringUtil.isNotBlank(getAllInformationVO.getIsDeleted()),"is_deleted", getAllInformationVO.getIsDeleted());
     	conceptQe.orderByAsc("is_deleted");
     	conceptQe.orderByDesc("gmt_modified");
+    	conceptQe.orderByDesc("id");
     	IPage<Concept> iPage = this.page(conceptPage, conceptQe);
     	BeanUtil.copyProperties(iPage, getAllInformationDTOPage);
     	
@@ -785,14 +794,200 @@ public class ConceptFacade extends ConceptServiceImpl {
             sbf.append("数据重复,请修改导入数据!");
             throw new CommonException(CommonErrorCode.RPC_ERROR, sbf.toString());
         }
-
-        addConceptInfoVOList.forEach(i -> {
+        
+        /*
+         * 原来的
+         * addConceptInfoVOList.forEach(i -> {
             addConceptInfo(i);
+        });*/
+        
+        ////优化后
+        QueryWrapper<LibraryInfo> libraryInfoQe = new QueryWrapper<>();
+        libraryInfoQe.in("name", addConceptInfoDetailVOList.stream().map(i->i.getName()).distinct().collect(Collectors.toList()));
+        Map<String,List<LibraryInfo>> libraryInfoListMap = libraryinfoFacade.list(libraryInfoQe).stream().collect(Collectors.groupingBy(LibraryInfo::getName));
+        
+        Map<String,Lexicon> lexiconMap = lexiconFacade.list().stream().collect(Collectors.toMap(Lexicon::getName, i->i));
+        
+        addConceptInfoVOList.forEach(i -> {
+        	i = checkImConceptInfo(i,libraryInfoListMap,lexiconMap);
         });
+        
+        saveAddConceptInfoVOList(addConceptInfoVOList);
 
         return true;
     }
+    
+    /**
+     * 导入数据插入更新前校验
+     * @param addConceptInfoVO
+     * @param libraryInfoListAllMap
+     * @param lexiconMap
+     * @return
+     */
+    public AddConceptInfoVO checkImConceptInfo(AddConceptInfoVO addConceptInfoVO,Map<String,List<LibraryInfo>> libraryInfoListAllMap,Map<String,Lexicon> lexiconMap) {
+    	String currentUser = UserUtils.getCurrentPrincipleID();
+        Date now = DateUtil.now();
+    	
+    	Concept concept = new Concept();
+    	ConceptCommon conceptCommon = null;
+    	List<LibraryInfo> libraryInfoList = Lists.newArrayList();
+    	
+        String lineNumStr = "第" + addConceptInfoVO.getLineNum() + "行";
+
+        List<AddConceptInfoDetailVO> addConceptInfoDetailVOMainList = addConceptInfoVO.getDetailList().stream().filter(i -> i.getIsConcept() == 1).collect(Collectors.toList());
+        if (addConceptInfoDetailVOMainList.size() == 0) {
+            throw new CommonException(CommonErrorCode.PARAM_IS_NULL, lineNumStr + "同义词中缺少标准词本体!");
+        }
+        if (addConceptInfoDetailVOMainList.size() > 1) {
+            throw new CommonException(CommonErrorCode.PARAM_IS_ERROR, lineNumStr + "标准术语只能有一个!");
+        }
+        
+        Lexicon lexicon = lexiconMap.get(addConceptInfoVO.getType());
+        if (lexicon == null) {
+            throw new CommonException(CommonErrorCode.NOT_EXISTS, lineNumStr + "数据有误,该类型信息在数据库中不存在!");
+        }
+        Long typeId = lexicon.getId();
+        concept.setLibType(typeId);
+        concept.setGmtModified(now);
+    	concept.setModifier(currentUser);
+    	if(lexicon.getIsHasCommon()==1){
+    		conceptCommon = new ConceptCommon();
+    		conceptCommon.setSexType(addConceptInfoVO.getSexType());
+        	conceptCommon.setMinAge(addConceptInfoVO.getMinAge());
+        	conceptCommon.setMaxAge(addConceptInfoVO.getMaxAge());
+        	conceptCommon.setGmtModified(now);
+        	conceptCommon.setModifier(currentUser);
+    	}
+    	
+        List<LibraryInfo> extLibraryInfoList = Lists.newArrayList();
+        addConceptInfoVO.getDetailList().forEach(a->{
+        	List<LibraryInfo> libraryInfoListAll = libraryInfoListAllMap.get(a.getName());
+        	if(ListUtil.isNotEmpty(libraryInfoListAll)){
+        		libraryInfoListAll = libraryInfoListAll.stream().filter(b->b.getTypeId().intValue()==typeId.intValue()).collect(Collectors.toList());
+        		if(ListUtil.isNotEmpty(libraryInfoListAll)){
+        			extLibraryInfoList.add(libraryInfoListAll.get(0));
+        		}
+        	}
+        });
+        Map<String, LibraryInfo> extLibraryInfoMap = extLibraryInfoList.stream().collect(Collectors.toMap(LibraryInfo::getName, i -> i));
+        
+        LibraryInfo libraryInfoMain = extLibraryInfoMap.get(addConceptInfoDetailVOMainList.get(0).getName());
+        Long conceptId = null;
+        if (libraryInfoMain == null) {
+        	conceptId = -9999l;
+        	concept.setGmtCreate(now);
+        	concept.setCreator(currentUser);
+        	if(conceptCommon!=null){
+        		conceptCommon.setGmtCreate(now);
+            	conceptCommon.setCreator(currentUser);
+        	}
+        } else {
+            conceptId = libraryInfoMain.getConceptId();
+            concept.setId(conceptId);
+            addConceptInfoVO.setConceptId(conceptId);
 
+            if (libraryInfoMain.getIsConcept()!=1&&extLibraryInfoList.stream().filter(i -> i.getConceptId().intValue() == libraryInfoMain.getConceptId().intValue()).count() == 1) {
+            	throw new CommonException(CommonErrorCode.RPC_ERROR, lineNumStr + "标准术语已作为同义词被占用!");
+            }
+        }
+
+        StringBuffer sbf = new StringBuffer();
+        for (AddConceptInfoDetailVO i : addConceptInfoVO.getDetailList()) {
+            LibraryInfo libraryInfo = extLibraryInfoMap.get(i.getName());
+            if (libraryInfo == null) {
+            	libraryInfo = new LibraryInfo();
+            	libraryInfo.setTypeId(typeId);
+            	libraryInfo.setGmtCreate(now);
+            	libraryInfo.setCreator(currentUser);
+            } else if (libraryInfo.getConceptId().intValue() != conceptId.intValue()) {
+                sbf.append(i.getName()).append(" ");
+                continue;
+            }
+
+            BeanUtil.copyProperties(i, libraryInfo);
+            libraryInfo.setId(null);
+            libraryInfo.setConceptId(conceptId);
+            libraryInfo.setGmtModified(now);
+            libraryInfo.setModifier(currentUser);
+            if(i.getIsConcept()==1){
+            	libraryInfoList.add(0,libraryInfo);
+            }else{
+            	libraryInfoList.add(libraryInfo);
+            }
+        }
+
+        if (sbf.length() > 0) {
+            sbf.append("已被占用");
+            throw new CommonException(CommonErrorCode.RPC_ERROR, sbf.toString());
+        }
+        
+        addConceptInfoVO.setConcept(concept);
+        addConceptInfoVO.setConceptCommon(conceptCommon);
+        addConceptInfoVO.setLibraryInfoList(libraryInfoList);
+
+        return addConceptInfoVO;
+    }
+    
+    /**
+     * 导入数据插入更新
+     * @param addConceptInfoVOList
+     */
+    private void saveAddConceptInfoVOList(List<AddConceptInfoVO> addConceptInfoVOList){
+    	List<Long> conceptIds = addConceptInfoVOList.stream().filter(i->i.getConceptId()!=null).map(i->i.getConceptId()).collect(Collectors.toList());
+    	if(ListUtil.isNotEmpty(conceptIds)){
+    		QueryWrapper<LibraryInfo> libraryInfoQe = new QueryWrapper<>();
+            libraryInfoQe.in("concept_id", conceptIds);
+            libraryinfoFacade.remove(libraryInfoQe);
+    	}
+        
+        List<LibraryInfo> saveLibraryInfoList = Lists.newArrayList();
+        addConceptInfoVOList.forEach(i->{
+        	saveLibraryInfoList.addAll(i.getLibraryInfoList());
+        });
+        libraryInfoService.saveBatch(saveLibraryInfoList);
+        
+        List<Concept> saveOrUpdateConceptList = Lists.newArrayList();
+        addConceptInfoVOList.forEach(i->{
+        	i.getConcept().setLibId(i.getLibraryInfoList().get(0).getId());
+        	i.getConcept().setLibName(i.getLibraryInfoList().get(0).getName());
+        	saveOrUpdateConceptList.add(i.getConcept());
+        });
+        conceptService.saveOrUpdateBatch(saveOrUpdateConceptList);
+        
+        List<LibraryInfo> updateLibraryInfoList = Lists.newArrayList();
+        addConceptInfoVOList.forEach(i->{
+        	if(i.getConceptId()==null){
+        		i.getLibraryInfoList().forEach(j->{
+        			j.setConceptId(i.getConcept().getId());
+        		});
+        		updateLibraryInfoList.addAll(i.getLibraryInfoList());
+        	}
+        });
+        if(ListUtil.isNotEmpty(updateLibraryInfoList)){
+        	libraryInfoService.updateBatchById(updateLibraryInfoList);
+        }
+        
+        List<ConceptCommon> saveOrUpdateConceptCommonList = Lists.newArrayList();
+        Map<Long,ConceptCommon> conceptCommonMap = null;
+        if(ListUtil.isNotEmpty(conceptIds)){
+        	QueryWrapper<ConceptCommon> conceptCommonQe = new QueryWrapper<>();
+            conceptCommonQe.in("concept_id", conceptIds);
+            conceptCommonMap = conceptCommonFacade.list(conceptCommonQe).stream().collect(Collectors.toMap(ConceptCommon::getConceptId, i->i));
+        }
+        for(AddConceptInfoVO i : addConceptInfoVOList){
+        	if(i.getConceptCommon()!=null){
+        		if(i.getConceptId()!=null&&conceptCommonMap!=null){
+            		i.getConceptCommon().setId(conceptCommonMap.get(i.getConceptId()).getId());
+            	}
+            	i.getConceptCommon().setConceptId(i.getConcept().getId());
+            	saveOrUpdateConceptCommonList.add(i.getConceptCommon());
+        	}
+        }
+        if(ListUtil.isNotEmpty(saveOrUpdateConceptCommonList)){
+        	conceptCommonService.saveOrUpdateBatch(saveOrUpdateConceptCommonList);
+        }
+    }
+    
     @SuppressWarnings("deprecation")
     private String getValue(Cell cell) {
         try {

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

@@ -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="";
+        String title_1="",title_2="",title_3="",title_4="",title_5="";
         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;
+                            String startName, startType, endName, endType, relationName;
                             for (Row row : sheet) {
                                 count++;
                                 if(row == null){
@@ -312,23 +312,27 @@ 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(endName) && StringUtil.isEmpty(endType)
+                                        && StringUtil.isEmpty(relationName)){
                                 	continue;
                                 }
                                 if (StringUtil.isEmpty(startName) || StringUtil.isEmpty(startType)
-                                        || StringUtil.isEmpty(endName) || StringUtil.isEmpty(endType)) {
+                                        || StringUtil.isEmpty(endName) || StringUtil.isEmpty(endType)
+                                        || StringUtil.isEmpty(relationName)) {
                                     sbf.append("第" + count + "行数据不完整;").append("<br/>");
                                     continue;
                                 }
                                 
-                                addRelationInfoVOList.add(new AddRelationInfoVO(startName,startType,endName,endType,"包含于",count));
+                                addRelationInfoVOList.add(new AddRelationInfoVO(startName,startType,endName,endType,relationName,count));
                             }
                         } else {
                             sbf.append("非excel文件无法解析!").append("<br/>");
@@ -363,7 +367,8 @@ public class RelationFacade extends RelationServiceImpl {
         if(title_1.indexOf("关系起点术语名称")==-1
         		||title_2.indexOf("关系起点术语类型")==-1
         		||title_3.indexOf("关系终点术语名称")==-1
-        		||title_4.indexOf("关系终点术语类型")==-1){
+        		||title_4.indexOf("关系终点术语类型")==-1
+        		||title_5.indexOf("关系类型名称")==-1){
         	throw new CommonException(CommonErrorCode.RPC_ERROR,"导入数据不正确,请选择正确数据导入!");
         }
         

+ 7 - 0
knowledgeman-service/src/main/java/com/diagbot/util/ParamConvertUtil.java

@@ -96,6 +96,13 @@ public class ParamConvertUtil {
             case FOOD_ALLERGY_HISTORY:
             case HISTORY_OF_DRUG_ALLERGY:
             case FAMILY_RELATED_INFECTIOUS_DISEASE_HISTORY:
+            case RELATIVES:
+            case MARRIAGE:
+            case FOOD:
+            case HISTORY:
+            case OPERATION:
+            case PERSONAL_HISTORY:
+            case PERSONAL_HISTORY_DESCRIPTION:
                 type = ConceptTypeEnum.Other.getKey();
                 break;
             case VITAL_INDEX:

+ 27 - 0
knowledgeman-service/src/main/java/com/diagbot/vo/AddConceptInfoVO.java

@@ -7,6 +7,10 @@ import javax.validation.constraints.NotEmpty;
 
 import org.hibernate.validator.constraints.Range;
 
+import com.diagbot.entity.Concept;
+import com.diagbot.entity.ConceptCommon;
+import com.diagbot.entity.LibraryInfo;
+
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
 import lombok.Setter;
@@ -74,8 +78,31 @@ public class AddConceptInfoVO {
 	@ApiModelProperty(value="是否推送:0-不推送;1-推送")
     private String isPush="0";
 	
+	/**
+	 * 后端业务字段,前端不用
+	 */
 	private Integer lineNum;
 	
+	/**
+	 * 后端业务字段,前端不用
+	 */
+	private Integer typeId;
+	
+	/**
+	 * 后端业务字段,前端不用
+	 */
+	private Concept concept;
+	
+	/**
+	 * 后端业务字段,前端不用
+	 */
+	private ConceptCommon conceptCommon;
+	
+	/**
+	 * 后端业务字段,前端不用
+	 */
+	private List<LibraryInfo> libraryInfoList;
+	
 	
 
 }

+ 15 - 12
knowledgeman-service/src/main/java/com/diagbot/web/UploadController.java

@@ -1,6 +1,7 @@
 package com.diagbot.web;
 
 import com.diagbot.dto.FileDTO;
+import com.diagbot.dto.RespDTO;
 import com.diagbot.facade.UploadFacade;
 import com.diagbot.util.FastJsonUtils;
 import com.diagbot.util.StringUtil;
@@ -18,6 +19,7 @@ import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.io.File;
 
 @RestController
 @Api(value = "文件上传API", tags = { "知识库标准化-文件上传API" })
@@ -30,22 +32,23 @@ public class UploadController {
     @ApiOperation(value = "知识库标准化-文件上传")
     @CrossOrigin(allowCredentials = "true", allowedHeaders = "*", methods = { RequestMethod.POST }, origins = "*")
     @PostMapping(value = "/uploadImage", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
-    public String singleFileUpload(@RequestParam("upfile") MultipartFile file, HttpServletRequest request, HttpServletResponse response) {
-        FileDTO fileDTO = uploadFacade.singleFileUpload(file);
-        String data = FastJsonUtils.getBeanToJson(fileDTO);
-        response.setContentType("text/plain;charset=UTF-8");
-
-        String callback = request.getParameter("callback");//客户端请求参数
-        if (callback != null && StringUtil.isNotBlank(callback)) {
-            data = callback + "(" + data + ")";
+    public RespDTO<FileDTO> singleFileUpload(@RequestParam("upfile") MultipartFile file) {
+        FileDTO data = uploadFacade.singleFileUpload(file);
+        if (data.getState().equals("FAILURE")) {
+            return RespDTO.onError(data.getInfo());
+        } else {
+            return RespDTO.onSuc(data);
         }
-        return data;
     }
 
     @PostMapping("/deleteRemoteFile")
     @ApiOperation(value = "知识库标准化-文件删除")
-    public String deleteRemoteFile(@RequestParam("path") String path) {
-        String data = FastJsonUtils.getBeanToJson(uploadFacade.deleteRemoteFile(path));
-        return data;
+    public RespDTO<FileDTO> deleteRemoteFile(@RequestParam("path") String path) {
+        FileDTO data = uploadFacade.deleteRemoteFile(path);
+        if (data.getState().equals("FAILURE")) {
+            return RespDTO.onError(data.getInfo());
+        } else {
+            return RespDTO.onSuc(data);
+        }
     }
 }

+ 3 - 2
ltapi-service/src/main/java/com/diagbot/enums/FeatureTypeEnum.java

@@ -11,7 +11,8 @@ import lombok.Setter;
 public enum FeatureTypeEnum implements KeyedNamed {
     Symptom(1, "症状"),
     Other(3, "其他史"),
-    Vital(4, "查体"),
+    VitalResult(4, "查体结果"),
+    VitalIndex(42, "查体指标"),
     Lis(5, "化验"),
     Pacs(6, "辅检"),
     Disease(7, "诊断"),
@@ -54,4 +55,4 @@ public enum FeatureTypeEnum implements KeyedNamed {
     public String getName() {
         return name;
     }
-}
+}

+ 4 - 5
ltapi-service/src/main/java/com/diagbot/facade/PushFacade.java

@@ -40,10 +40,8 @@ public class PushFacade {
         PushDTO pushDTO = new PushDTO();
         SearchData searchData = assembleFacade.assembleData(pushVO);
         RespDTO<PushDTO> respDTO = aiptServiceClient.pushInner(searchData);
-        PushDTO data = new PushDTO();
-        if (RespDTOUtil.respIsOK(respDTO)) {
-            data = respDTO.data;
-        }
+        RespDTOUtil.respNGDeal(respDTO, "中间层没有返回结果");
+        PushDTO data = respDTO.data;
 
         String featureType = searchData.getFeatureType();
         String[] featureTypes = featureType.split(",|,");
@@ -58,7 +56,8 @@ public class PushFacade {
         if (featureTypeSet.contains(String.valueOf(FeatureTypeEnum.Other.getKey()))) {
         }
         //查体
-        if (featureTypeSet.contains(String.valueOf(FeatureTypeEnum.Vital.getKey()))) {
+        if (featureTypeSet.contains(String.valueOf(FeatureTypeEnum.VitalResult.getKey())) ||
+                featureTypeSet.contains(String.valueOf(FeatureTypeEnum.VitalIndex.getKey()))) {
             List<ConceptPushDTO> vitals = data.getVital();
             pushDTO.setVital(vitals);
         }

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

@@ -47,7 +47,7 @@ public class PushController {
                     "lis:source:数据来源(必填),Integer<br>" +
                     "pacs:辅检,String<br>" +
                     "diag:诊断,String<br>" +
-                    "featureType:类型(必填),1:症状,3:其他史,4:查体,5:化验,6:辅检,7:诊断,22-指标,String<br>" +
+                    "featureType:类型(必填),1:症状,3:其他史,4:查体结果,42:查体指标,5:化验,6:辅检,7:诊断,22-指标,String<br>" +
                     "diseaseName:取治疗方案的诊断,String<br>" +
                     "scaleName:量表名称,String<br>" +
                     "disType:诊断类型,1-慢病,2-急诊,普通病不填,Integer<br>" +

+ 1 - 1
triage-service/src/main/java/com/diagbot/facade/AIFacade.java

@@ -75,7 +75,7 @@ public class AIFacade {
                     Double rate;
                     Map<String, Double> map = new HashMap<>();
                     for (FeatureRate featureRate : res.data.getDis()) {
-                        if (Double.valueOf(featureRate.getRate()) > 0.1d) {
+                        if (featureRate.getRate() != null && Double.valueOf(featureRate.getRate()) > 0.1d) {
                             if (StringUtil.isNotBlank(featureRate.getExtraProperty())) {
                                 if (null != map.get(featureRate.getExtraProperty())) {
                                     rate = map.get(featureRate.getExtraProperty())