Browse Source

数据服务模式推理和治疗方案

Zhaops 6 years ago
parent
commit
8138355d39
24 changed files with 766 additions and 95 deletions
  1. 73 0
      aipt-service/src/main/java/com/diagbot/client/TranServiceClient.java
  2. 15 0
      aipt-service/src/main/java/com/diagbot/client/bean/HosCodeVO.java
  3. 98 0
      aipt-service/src/main/java/com/diagbot/client/hystrix/TranServiceHystrix.java
  4. 2 0
      aipt-service/src/main/java/com/diagbot/dto/ConceptPushDTO.java
  5. 5 1
      aipt-service/src/main/java/com/diagbot/dto/LisResult.java
  6. 134 3
      aipt-service/src/main/java/com/diagbot/facade/PushFacade.java
  7. 1 0
      aipt-service/src/main/java/com/diagbot/vo/SearchVo.java
  8. 6 5
      data-service/src/main/java/com/diagbot/client/hystrix/AiptServiceHystrix.java
  9. 16 0
      data-service/src/main/java/com/diagbot/dto/ConceptBaseDTO.java
  10. 16 0
      data-service/src/main/java/com/diagbot/dto/ConceptPushDTO.java
  11. 25 0
      data-service/src/main/java/com/diagbot/dto/PushDTO.java
  12. 57 0
      data-service/src/main/java/com/diagbot/enums/FeatureTypeEnum.java
  13. 52 0
      data-service/src/main/java/com/diagbot/facade/AssembleFacade.java
  14. 97 0
      data-service/src/main/java/com/diagbot/facade/PushFacade.java
  15. 32 0
      data-service/src/main/java/com/diagbot/vo/PushBaseVO.java
  16. 20 0
      data-service/src/main/java/com/diagbot/vo/PushVO.java
  17. 90 0
      data-service/src/main/java/com/diagbot/web/PushController.java
  18. 1 1
      icss-service/src/main/java/com/diagbot/client/bean/SearchData.java
  19. 8 10
      icss-service/src/main/java/com/diagbot/facade/AssembleFacade.java
  20. 12 54
      icss-service/src/main/java/com/diagbot/facade/PushFacade.java
  21. 4 0
      icss-service/src/main/java/com/diagbot/vo/LisResult.java
  22. 0 19
      icss-service/src/main/java/com/diagbot/vo/LisResultVO.java
  23. 1 1
      icss-service/src/main/java/com/diagbot/vo/PushBaseVO.java
  24. 1 1
      icss-service/src/main/java/com/diagbot/vo/PushVO.java

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

@@ -1,5 +1,6 @@
 package com.diagbot.client;
 
+import com.diagbot.client.bean.HosCodeVO;
 import com.diagbot.client.hystrix.TranServiceHystrix;
 import com.diagbot.dto.GetDiseaseIcdDTO;
 import com.diagbot.dto.GetTopPatientInfoDTO;
@@ -14,6 +15,7 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * @Description: 调用信息对接层服务
@@ -48,4 +50,75 @@ public interface TranServiceClient {
      */
     @PostMapping("/patientInfo/getTopPatientInfo")
     RespDTO<GetTopPatientInfoDTO> getTopPatientInfo(@RequestBody GetTopPatientInfoVO getTopPatientInfoVO);
+
+    /**
+     * 根据医院编码获取化验公表映射关系-itemName不为空
+     *
+     * @param hosCodeVO
+     * @return
+     */
+    @PostMapping("/tranLisConfig/getLisConfigByHosCode_NotEmptyItemName")
+    RespDTO<Map<String, Map<String, String>>> getLisConfigByHosCode_NotEmptyItemName(@RequestBody HosCodeVO hosCodeVO);
+
+    /**
+     * 根据医院编码获取化验公表映射关系-itemName为空
+     *
+     * @param hosCodeVO
+     * @return
+     */
+    @PostMapping("/tranLisConfig/getLisConfigByHosCode_EmptyItemName")
+    RespDTO<Map<String, String>> getLisConfigByHosCode_EmptyItemName(@RequestBody HosCodeVO hosCodeVO);
+
+    /**
+     * 根据医院编码获取辅检公表映射关系
+     *
+     * @param hosCodeVO
+     * @return
+     */
+    @PostMapping("/pacsConfig/getPacsConfigByHosCode")
+    RespDTO<Map<String, String>> getPacsConfigByHosCode(@RequestBody HosCodeVO hosCodeVO);
+
+    /**
+     * 根据医院编码获取提示信息标题映射关系
+     *
+     * @param hosCodeVO
+     * @return
+     */
+    @PostMapping("/introduceTitleConfig/getTitleMappingHosCode")
+    RespDTO<Map<String, String>> getTitleMappingHosCode(@RequestBody HosCodeVO hosCodeVO);
+
+    /**
+     * 根据医院编码查询诊断icd映射
+     *
+     * @param hosCodeVO
+     * @return
+     */
+    @PostMapping("/diseaseIcd/getDiseaseIcdByHosCode")
+    RespDTO<Map<String, String>> getDiseaseIcdByHosCode(@RequestBody HosCodeVO hosCodeVO);
+
+    /**
+     * 数据服务模式是否对外对接
+     *
+     * @return
+     */
+    @PostMapping("/dataService/isDocking")
+    RespDTO<Boolean> isDocking();
+
+    /**
+     * 根据医院编码获取化验公表映射关系,公表项做key
+     *
+     * @param hosCodeVO
+     * @return
+     */
+    @PostMapping("/tranLisConfig/getLisConfigByUniqueNameAndHosCode")
+    RespDTO<Map<String, List<String>>> getLisConfigByUniqueNameAndHosCode(@RequestBody HosCodeVO hosCodeVO);
+
+    /**
+     * 根据医院编码查询辅检公表映射,公表项做key
+     *
+     * @param hosCodeVO
+     * @return
+     */
+    @PostMapping("/pacsConfig/getPacsConfigByUniqueNameAndHosCode")
+    RespDTO<Map<String, List<String>>> getPacsConfigByUniqueNameAndHosCode(@RequestBody HosCodeVO hosCodeVO);
 }

+ 15 - 0
aipt-service/src/main/java/com/diagbot/client/bean/HosCodeVO.java

@@ -0,0 +1,15 @@
+package com.diagbot.client.bean;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2019/3/12 11:05
+ */
+@Getter
+@Setter
+public class HosCodeVO {
+    private String hosCode;
+}

+ 98 - 0
aipt-service/src/main/java/com/diagbot/client/hystrix/TranServiceHystrix.java

@@ -1,6 +1,7 @@
 package com.diagbot.client.hystrix;
 
 import com.diagbot.client.TranServiceClient;
+import com.diagbot.client.bean.HosCodeVO;
 import com.diagbot.dto.GetDiseaseIcdDTO;
 import com.diagbot.dto.GetTopPatientInfoDTO;
 import com.diagbot.dto.HospitalDeptInfoDTO;
@@ -11,8 +12,10 @@ import com.diagbot.vo.GetTopPatientInfoVO;
 
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.RequestBody;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * @Description: 调用信息对接层服务
@@ -39,4 +42,99 @@ public class TranServiceHystrix implements TranServiceClient {
         log.error("【hystrix】调用{}异常", "getTopPatientInfo");
         return null;
     }
+
+    /**
+     * 根据医院编码获取化验公表映射关系-itemName不为空
+     *
+     * @param hosCodeVO
+     * @return
+     */
+    @Override
+    public RespDTO<Map<String, Map<String, String>>> getLisConfigByHosCode_NotEmptyItemName(@RequestBody HosCodeVO hosCodeVO) {
+        log.error("【hystrix】调用{}异常", "getLisConfigByHosCode_NotEmptyItemName");
+        return null;
+    }
+
+    /**
+     * 根据医院编码获取化验公表映射关系-itemName为空
+     *
+     * @param hosCodeVO
+     * @return
+     */
+    @Override
+    public RespDTO<Map<String, String>> getLisConfigByHosCode_EmptyItemName(@RequestBody HosCodeVO hosCodeVO) {
+        log.error("【hystrix】调用{}异常", "getLisConfigByHosCode_EmptyItemName");
+        return null;
+    }
+
+    /**
+     * 根据医院编码获取辅检公表映射关系
+     *
+     * @param hosCodeVO
+     * @return
+     */
+    @Override
+    public RespDTO<Map<String, String>> getPacsConfigByHosCode(@RequestBody HosCodeVO hosCodeVO) {
+        log.error("【hystrix】调用{}异常", "getPacsConfigByHosCode");
+        return null;
+    }
+
+    /**
+     * 根据医院编码获取提示信息标题映射关系
+     *
+     * @param hosCodeVO
+     * @return
+     */
+    @Override
+    public RespDTO<Map<String, String>> getTitleMappingHosCode(@RequestBody HosCodeVO hosCodeVO) {
+        log.error("【hystrix】调用{}异常", "getTitleMappingHosCode");
+        return null;
+    }
+
+    /**
+     * 根据医院编码查询诊断icd映射
+     *
+     * @param hosCodeVO
+     * @return
+     */
+    @Override
+    public RespDTO<Map<String, String>> getDiseaseIcdByHosCode(@RequestBody HosCodeVO hosCodeVO) {
+        log.error("【hystrix】调用{}异常", "getDiseaseIcdByHosCode");
+        return null;
+    }
+
+    /**
+     * 数据服务模式是否对外对接
+     *
+     * @return
+     */
+    @Override
+    public RespDTO<Boolean> isDocking() {
+        log.error("【hystrix】调用{}异常", "isDocking");
+        return null;
+    }
+
+    /**
+     * 根据医院编码获取化验公表映射关系,公表项做key
+     *
+     * @param hosCodeVO
+     * @return
+     */
+    @Override
+    public RespDTO<Map<String, List<String>>> getLisConfigByUniqueNameAndHosCode(@RequestBody HosCodeVO hosCodeVO) {
+        log.error("【hystrix】调用{}异常", "getLisConfigByUniqueNameAndHosCode");
+        return null;
+    }
+
+    /**
+     * 根据医院编码查询辅检公表映射,公表项做key
+     *
+     * @param hosCodeVO
+     * @return
+     */
+    @Override
+    public RespDTO<Map<String, List<String>>> getPacsConfigByUniqueNameAndHosCode(@RequestBody HosCodeVO hosCodeVO) {
+        log.error("【hystrix】调用{}异常", "getPacsConfigByUniqueNameAndHosCode");
+        return null;
+    }
 }

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

@@ -12,4 +12,6 @@ import lombok.Setter;
 @Setter
 public class ConceptPushDTO extends ConceptBaseDTO {
     private Integer libType;
+    //数据服务模式调用方名称
+    private String clientName;
 }

+ 5 - 1
aipt-service/src/main/java/com/diagbot/dto/LisResult.java

@@ -3,6 +3,8 @@ package com.diagbot.dto;
 import lombok.Getter;
 import lombok.Setter;
 
+import javax.validation.constraints.NotNull;
+
 /**
  * @Description:化验信息
  * @Author:zhaops
@@ -19,4 +21,6 @@ public class LisResult {
     private Double minValue;//最小值
     private String units;//单位
     private String otherValue;//其他结果,包括阴性阳性,文字描述等
-}
+    @NotNull(message = "请输入数据来源")
+    private Integer source;
+}

+ 134 - 3
aipt-service/src/main/java/com/diagbot/facade/PushFacade.java

@@ -4,12 +4,14 @@ import com.alibaba.fastjson.JSONObject;
 import com.diagbot.client.TranServiceClient;
 import com.diagbot.client.bean.FeatureRate;
 import com.diagbot.client.bean.GdbResponse;
+import com.diagbot.client.bean.HosCodeVO;
 import com.diagbot.client.bean.MedicalIndication;
 import com.diagbot.client.bean.MedicalIndicationDetail;
 import com.diagbot.client.bean.ResponseData;
-import com.diagbot.client.bean.SearchData;
 import com.diagbot.dto.ConceptPushDTO;
+import com.diagbot.dto.LisResult;
 import com.diagbot.dto.PushDTO;
+import com.diagbot.dto.RespDTO;
 import com.diagbot.entity.Concept;
 import com.diagbot.enums.ConceptTypeEnum;
 import com.diagbot.enums.FeatureTypeEnum;
@@ -20,6 +22,7 @@ import com.diagbot.util.EntityUtil;
 import com.diagbot.util.FastJsonUtils;
 import com.diagbot.util.ListUtil;
 import com.diagbot.util.ParamConvertUtil;
+import com.diagbot.util.RespDTOUtil;
 import com.diagbot.util.StringUtil;
 import com.diagbot.vo.ConceptBaseVO;
 import com.diagbot.vo.SearchVo;
@@ -60,12 +63,30 @@ public class PushFacade {
      */
     public PushDTO pushInner(SearchVo searchVo) {
         PushDTO pushDTO = new PushDTO();
+        //是否对接
+        RespDTO<Boolean> dockingRes = tranServiceClient.isDocking();
+        Boolean isDocking = false;
+        if (RespDTOUtil.respIsOK(dockingRes)) {
+            isDocking = dockingRes.data;
+            if (isDocking) {
+                if (StringUtil.isBlank(searchVo.getHosCode())) {
+                    throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "请输入医院编码");
+                }
+            }
+        }
+        //化验转公表项处理
+        if (isDocking) {
+            List<LisResult> lisArr = searchVo.getLisArr();
+            lisArr = addUniqueName(lisArr, searchVo.getHosCode());
+            searchVo.setLisArr(lisArr);
+        }
         ResponseData data = clinicalFacade.processClinicalData(searchVo);
 
         String featureType = searchVo.getFeatureType();
         String[] featureTypes = featureType.split(",|,");
         Set<String> featureTypeSet = new HashSet(Arrays.asList(featureTypes));
 
+
         //确定推送科室
         List<FeatureRate> dis = data.getDis();
         pushDTO.setDept(getDept(dis));
@@ -96,7 +117,11 @@ public class PushFacade {
             if (ListUtil.isNotEmpty(lis)) {
                 List<String> nameList = lis.stream().map(featureRate -> featureRate.getFeatureName()).collect(Collectors.toList());
                 if (ListUtil.isNotEmpty(nameList)) {
-                    pushDTO.setLab(getConceptDTOList(nameList, LexiconTypeEnum.LIS_TABLES.getKey()));
+                    List<ConceptPushDTO> lisDTO = getConceptDTOList(nameList, LexiconTypeEnum.LIS_TABLES.getKey());
+                    if (isDocking) {
+                        lisDTO = addClientName(lisDTO, searchVo.getHosCode(), ConceptTypeEnum.Lis.getKey());
+                    }
+                    pushDTO.setLab(lisDTO);
                 }
             }
         }
@@ -106,7 +131,11 @@ public class PushFacade {
             if (ListUtil.isNotEmpty(pacs)) {
                 List<String> nameList = pacs.stream().map(featureRate -> featureRate.getFeatureName()).collect(Collectors.toList());
                 if (ListUtil.isNotEmpty(nameList)) {
-                    pushDTO.setPacs(getConceptDTOList(nameList, LexiconTypeEnum.PACS_ITEMS.getKey()));
+                    List<ConceptPushDTO> pacsDTO = getConceptDTOList(nameList, LexiconTypeEnum.PACS_ITEMS.getKey());
+                    if (isDocking) {
+                        pacsDTO = addClientName(pacsDTO, searchVo.getHosCode(), ConceptTypeEnum.Pacs.getKey());
+                    }
+                    pushDTO.setPacs(pacsDTO);
                 }
             }
         }
@@ -133,6 +162,9 @@ public class PushFacade {
                         }
                         if (ListUtil.isNotEmpty(hrNameList)) {
                             List<ConceptPushDTO> hrDisDTO = getConceptDTOList(hrNameList, LexiconTypeEnum.DIAGNOSIS.getKey());
+                            if (isDocking) {
+                                hrDisDTO = addClientName(hrDisDTO, searchVo.getHosCode(), ConceptTypeEnum.Disease.getKey());
+                            }
                             disMapDTO.put("警惕", hrDisDTO);
                         }
                     }
@@ -156,6 +188,9 @@ public class PushFacade {
                     List<String> nameListByDisClass = entry.getValue().stream().map(featureRate -> featureRate.getFeatureName()).collect(Collectors.toList());
                     if (ListUtil.isNotEmpty(nameListByDisClass)) {
                         List<ConceptPushDTO> disDTO = getConceptDTOList(nameListByDisClass, LexiconTypeEnum.DIAGNOSIS.getKey());
+                        if (isDocking) {
+                            disDTO = addClientName(disDTO, searchVo.getHosCode(), ConceptTypeEnum.Disease.getKey());
+                        }
                         disMapDTO.put(entry.getKey(), disDTO);
                     }
                 }
@@ -221,6 +256,16 @@ public class PushFacade {
         }
     }
 
+    /**
+     * 获取量表推理内容
+     *
+     * @param searchVo
+     * @return
+     */
+    public Map<String, Object> scale(SearchVo searchVo) {
+        Map<String, Object> data = clinicalFacade.scale(searchVo);
+        return data;
+    }
 
     /**
      * 获取治疗方案
@@ -299,4 +344,90 @@ public class PushFacade {
         }
         return deptDTO;
     }
+
+    /**
+     * 增加化验公表项
+     *
+     * @param lisResults
+     * @param hosCode
+     * @return
+     */
+    public List<LisResult> addUniqueName(List<LisResult> lisResults, String hosCode) {
+        HosCodeVO hosCodeVO = new HosCodeVO();
+        hosCodeVO.setHosCode(hosCode);
+        //化验项转公表内容,参数处理
+        if (ListUtil.isNotEmpty(lisResults)) {
+            RespDTO<Map<String, Map<String, String>>> lisConfigRes = tranServiceClient.getLisConfigByHosCode_NotEmptyItemName(hosCodeVO);
+            RespDTO<Map<String, String>> lisConfigWithEmptyItemNameRes = tranServiceClient.getLisConfigByHosCode_EmptyItemName(hosCodeVO);
+            Map<String, Map<String, String>> lisConfigMap = new LinkedHashMap<>();
+            Map<String, String> lisConfigMap_emptyItemName = new LinkedHashMap<>();
+            if (RespDTOUtil.respIsOK(lisConfigRes)) {
+                lisConfigMap = lisConfigRes.data;
+            }
+            if (RespDTOUtil.respIsOK(lisConfigWithEmptyItemNameRes)) {
+                lisConfigMap_emptyItemName = lisConfigWithEmptyItemNameRes.data;
+            }
+
+            for (LisResult lisResult : lisResults) {
+                if (StringUtil.isNotBlank(lisResult.getName())) {
+                    if (StringUtil.isNotBlank(lisResult.getDetailName())) {
+                        if (lisConfigMap.get(lisResult.getName()) != null) {
+                            lisResult.setUniqueName(lisConfigMap.get(lisResult.getName()).get(lisResult.getDetailName()));
+                        }
+                    } else {
+                        lisResult.setUniqueName(lisConfigMap_emptyItemName.get(lisResult.getName()));
+                    }
+                }
+            }
+        }
+        return lisResults;
+    }
+
+    /**
+     * 添加外部名称(调用方)
+     *
+     * @param concepts
+     * @param hosCode
+     * @param type
+     * @return
+     */
+    public List<ConceptPushDTO> addClientName(List<ConceptPushDTO> concepts, String hosCode, Integer type) {
+        HosCodeVO hosCodeVO = new HosCodeVO();
+        hosCodeVO.setHosCode(hosCode);
+        if (type.equals(ConceptTypeEnum.Lis.getKey())) {
+            RespDTO<Map<String, List<String>>> lisRes = tranServiceClient.getLisConfigByUniqueNameAndHosCode(hosCodeVO);
+            if (RespDTOUtil.respIsOK(lisRes)) {
+                Map<String, List<String>> lisMappingByUniqueName = lisRes.data;
+                for (ConceptPushDTO concept : concepts) {
+                    List<String> clientNames = lisMappingByUniqueName.get(concept.getName());
+                    if (ListUtil.isNotEmpty(clientNames)) {
+                        concept.setClientName(clientNames.get(0));
+                    }
+                }
+            }
+        } else if (type.equals(ConceptTypeEnum.Pacs.getKey())) {
+            RespDTO<Map<String, List<String>>> pacsRes = tranServiceClient.getLisConfigByUniqueNameAndHosCode(hosCodeVO);
+            if (RespDTOUtil.respIsOK(pacsRes)) {
+                Map<String, List<String>> pacsConfigMapByUniqueName = pacsRes.data;
+                for (ConceptPushDTO concept : concepts) {
+                    List<String> clientNames = pacsConfigMapByUniqueName.get(concept.getName());
+                    if (ListUtil.isNotEmpty(clientNames)) {
+                        concept.setClientName(clientNames.get(0));
+                    }
+                }
+            }
+        } else if (type.equals(ConceptTypeEnum.Disease.getKey())) {
+            RespDTO<Map<String, String>> disRes = tranServiceClient.getDiseaseIcdByHosCode(hosCodeVO);
+            if (RespDTOUtil.respIsOK(disRes)) {
+                Map<String, String> disMap = disRes.data;
+                for (ConceptPushDTO concept : concepts) {
+                    String clientName = disMap.get(concept.getName());
+                    if (StringUtil.isNotBlank(clientName)) {
+                        concept.setClientName(disMap.get(concept.getName()));
+                    }
+                }
+            }
+        }
+        return concepts;
+    }
 }

+ 1 - 0
aipt-service/src/main/java/com/diagbot/vo/SearchVo.java

@@ -34,4 +34,5 @@ public class SearchVo {
     private String indications; //指标结果
     private String adverseReactions; //不良反应
     private Integer disType;    //诊断类型
+    private String hosCode;  // 对接时,hosCode必填
 }

+ 6 - 5
data-service/src/main/java/com/diagbot/client/hystrix/AiptServiceHystrix.java

@@ -22,11 +22,6 @@ import java.util.List;
 @Component
 @Slf4j
 public class AiptServiceHystrix implements AiptServiceClient {
-    @Override
-    public RespDTO<List<DisclaimerInformationDTO>> getDisclaimerInformations(){
-        log.error("【hystrix】调用{}异常", "getDisclaimerInformations");
-        return null;
-    }
     /**
      * 推理
      *
@@ -50,4 +45,10 @@ public class AiptServiceHystrix implements AiptServiceClient {
         log.error("【hystrix】调用{}异常", "getTreatment");
         return null;
     }
+
+    @Override
+    public RespDTO<List<DisclaimerInformationDTO>> getDisclaimerInformations() {
+        log.error("【hystrix】调用{}异常", "getDisclaimerInformations");
+        return null;
+    }
 }

+ 16 - 0
data-service/src/main/java/com/diagbot/dto/ConceptBaseDTO.java

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

+ 16 - 0
data-service/src/main/java/com/diagbot/dto/ConceptPushDTO.java

@@ -0,0 +1,16 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:推理返回标签(概念)
+ * @Author:zhaops
+ * @time: 2019/5/7 20:06
+ */
+@Getter
+@Setter
+public class ConceptPushDTO extends ConceptBaseDTO {
+    private Integer libType;  //词性
+    private String clientName;//数据服务模式调用方名称
+}

+ 25 - 0
data-service/src/main/java/com/diagbot/dto/PushDTO.java

@@ -0,0 +1,25 @@
+package com.diagbot.dto;
+
+import com.diagbot.client.bean.MedicalIndication;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 推理出参
+ * @Author:zhaops
+ * @time: 2018/11/20 13:44
+ */
+@Getter
+@Setter
+public class PushDTO {
+    private List<ConceptPushDTO> symptom;
+    private List<ConceptPushDTO> other;
+    private List<ConceptPushDTO> vital;
+    private List<ConceptPushDTO> lab;
+    private List<ConceptPushDTO> pacs;
+    private Map<String, List<ConceptPushDTO>> dis;
+    private List<MedicalIndication> medicalIndications;
+}

+ 57 - 0
data-service/src/main/java/com/diagbot/enums/FeatureTypeEnum.java

@@ -0,0 +1,57 @@
+package com.diagbot.enums;
+
+import com.diagbot.core.KeyedNamed;
+import lombok.Setter;
+
+/**
+ * @Description: 推送类型
+ * @Author:zhaops
+ * @time: 2019/3/14 11:28
+ */
+public enum FeatureTypeEnum implements KeyedNamed {
+    Symptom(1, "症状"),
+    Other(3, "其他史"),
+    Vital(4, "查体"),
+    Lis(5, "化验"),
+    Pacs(6, "辅检"),
+    Disease(7, "诊断"),
+    Treat(8, "治疗"),
+    Scale(21, "量表内容"),
+    MedicalIndication(22, "指标"),
+    ManagementEvaluation(11, "管理评估");
+
+    @Setter
+    private Integer key;
+
+    @Setter
+    private String name;
+
+    FeatureTypeEnum(Integer key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static FeatureTypeEnum getEnum(Integer key) {
+        for (FeatureTypeEnum item : FeatureTypeEnum.values()) {
+            if (item.key == key) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(Integer key) {
+        FeatureTypeEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+
+    @Override
+    public int getKey() {
+        return key;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+}

+ 52 - 0
data-service/src/main/java/com/diagbot/facade/AssembleFacade.java

@@ -0,0 +1,52 @@
+package com.diagbot.facade;
+
+import com.diagbot.client.bean.SearchData;
+import com.diagbot.vo.PushVO;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2019/5/9 15:40
+ */
+@Component
+public class AssembleFacade {
+
+    /**
+     * 拼装数据
+     *
+     * @param pushVO
+     * @return SearchData
+     */
+    public SearchData assembleData(PushVO pushVO) {
+        SearchData searchData = new SearchData();
+        searchData.setAge(pushVO.getAge());
+        searchData.setSymptom(pushVO.getSymptom());
+        searchData.setVital(pushVO.getVital());
+        searchData.setPacs(pushVO.getPacs());
+        searchData.setPast(pushVO.getPast());
+        searchData.setOther(pushVO.getOther());
+        searchData.setDiag(pushVO.getDiag());
+        searchData.setDisType(pushVO.getDisType());
+        searchData.setAdverseEvent(pushVO.getAdverseReactions());
+        searchData.setScaleName(pushVO.getScaleName());
+        searchData.setDiseaseName(pushVO.getDiseaseName());
+        searchData.setIndications(pushVO.getIndications());
+        searchData.setFeatureType(pushVO.getFeatureType());
+        searchData.setSysCode("1");
+        searchData.setLength(10);
+
+        switch (pushVO.getSex()) {
+            case 1:
+                searchData.setSex("M");
+                break;
+            case 2:
+                searchData.setSex("F");
+                break;
+            default:
+                searchData.setSex("A");
+                break;
+        }
+        return searchData;
+    }
+}

+ 97 - 0
data-service/src/main/java/com/diagbot/facade/PushFacade.java

@@ -0,0 +1,97 @@
+package com.diagbot.facade;
+
+import com.diagbot.client.AiptServiceClient;
+import com.diagbot.client.bean.SearchData;
+import com.diagbot.dto.ConceptPushDTO;
+import com.diagbot.dto.PushDTO;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.enums.FeatureTypeEnum;
+import com.diagbot.util.RespDTOUtil;
+import com.diagbot.vo.PushVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2019/5/13 17:47
+ */
+@Component
+public class PushFacade {
+    @Autowired
+    AiptServiceClient aiptServiceClient;
+    @Autowired
+    AssembleFacade assembleFacade;
+
+    /**
+     * 推理接口
+     *
+     * @param pushVO
+     * @return
+     */
+    public PushDTO push(PushVO pushVO) {
+        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;
+        }
+
+        String featureType = searchData.getFeatureType();
+        String[] featureTypes = featureType.split(",|,");
+        Set<String> featureTypeSet = new HashSet(Arrays.asList(featureTypes));
+
+        //症状
+        if (featureTypeSet.contains(String.valueOf(FeatureTypeEnum.Symptom.getKey()))) {
+            List<ConceptPushDTO> symptom = data.getSymptom();
+            pushDTO.setSymptom(symptom);
+        }
+        //其他史
+        if (featureTypeSet.contains(String.valueOf(FeatureTypeEnum.Other.getKey()))) {
+        }
+        //查体
+        if (featureTypeSet.contains(String.valueOf(FeatureTypeEnum.Vital.getKey()))) {
+            List<ConceptPushDTO> vitals = data.getVital();
+            pushDTO.setVital(vitals);
+        }
+        //化验
+        if (featureTypeSet.contains(String.valueOf(FeatureTypeEnum.Lis.getKey()))) {
+            List<ConceptPushDTO> labs = data.getLab();
+            pushDTO.setLab(labs);
+        }
+        //辅检
+        if (featureTypeSet.contains(String.valueOf(FeatureTypeEnum.Pacs.getKey()))) {
+            pushDTO.setPacs(data.getPacs());
+        }
+        //诊断
+        if (featureTypeSet.contains(String.valueOf(FeatureTypeEnum.Disease.getKey()))) {
+            pushDTO.setDis(data.getDis());
+        }
+        //推送指标
+        if (featureTypeSet.contains(String.valueOf(FeatureTypeEnum.MedicalIndication.getKey()))) {
+            pushDTO.setMedicalIndications(data.getMedicalIndications());
+        }
+        return pushDTO;
+    }
+
+    /**
+     * 治疗方案推送-不包含慢病内容
+     *
+     * @param pushVO
+     * @return
+     */
+    public Map<String, Object> pushTreatment(PushVO pushVO) {
+        SearchData searchData = assembleFacade.assembleData(pushVO);
+        RespDTO<Map<String, Object>> res = aiptServiceClient.getTreatment(searchData);
+        RespDTOUtil.respNGDealCover(res, "中间层没有返回治疗方案");
+        Map<String, Object> data = res.data;
+        return data;
+    }
+}

+ 32 - 0
data-service/src/main/java/com/diagbot/vo/PushBaseVO.java

@@ -0,0 +1,32 @@
+package com.diagbot.vo;
+
+import com.diagbot.client.bean.LisResult;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+ * @Description: 推理参数
+ * @Author:zhaops
+ * @time: 2019/4/17 14:42
+ */
+@Getter
+@Setter
+public class PushBaseVO {
+    @NotNull(message = "请输入年龄")
+    private Integer age;
+    @NotNull(message = "请输入性别")
+    private Integer sex;
+    @NotBlank(message = "请输入推送类型")
+    private String featureType;
+    private String symptom;
+    private String diag;
+    private String vital;
+    private List<LisResult> lis;
+    private String pacs;
+    private String past;
+    private String other;
+}

+ 20 - 0
data-service/src/main/java/com/diagbot/vo/PushVO.java

@@ -0,0 +1,20 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2018/11/20 13:38
+ */
+@Getter
+@Setter
+public class PushVO  extends PushBaseVO {
+    private String diseaseName;
+    private String scaleName; //量表名称
+    private Integer disType;  //0-普通病(默认不填),1-慢病,2-急诊
+    private String adverseReactions; //不良反应
+    private String indications;   //推理指标
+    private String hosCode;   //医院编码
+}

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

@@ -0,0 +1,90 @@
+package com.diagbot.web;
+
+import com.diagbot.annotation.SysLogger;
+import com.diagbot.dto.PushDTO;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.facade.PushFacade;
+import com.diagbot.vo.PushVO;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.Valid;
+import java.util.Map;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2019/5/13 18:00
+ */
+@RestController
+@RequestMapping("/push")
+public class PushController {
+    @Autowired
+    PushFacade pushFacade;
+
+    @ApiOperation(value = "知识库标准化-推理接口(半结构化)[by:zhaops]",
+            notes = "age: 年龄(必填)<br>" +
+                    "sex:性别(必填) 1:男,2:女<br>" +
+                    "symptom:症状,String<br>" +
+                    "other:其它史,String<br>" +
+                    "vital:查体,String<br>" +
+                    "lis:化验,Array<br>" +
+                    "lis:name:套餐名称(必填),String<br>" +
+                    "lis:detailName:化验项名称(必填),String<br>" +
+                    "lis:uniqueName:公表名称,String<br>" +
+                    "lis:value:值,Double<br>" +
+                    "lis:maxValue:最大值,Double<br>" +
+                    "lis:minValue:最小值,Double<br>" +
+                    "lis:units:单位,String<br>" +
+                    "lis:otherValue:其他结果,包括阴性阳性,文字描述等,String<br>" +
+                    "lis:source:数据来源(必填),Integer<br>" +
+                    "pacs:辅检,String<br>" +
+                    "diag:诊断,String<br>" +
+                    "featureType:类型(必填),1:症状,3:其他史,4:查体,5:化验,6:辅检,7:诊断,22-指标,String<br>" +
+                    "diseaeId:取治疗方案的诊断,Long<br>" +
+                    "scaleName:量表名称,String<br>" +
+                    "scaleId:量表id,Long<br>" +
+                    "patientId:病人id,Long<br>" +
+                    "disType:诊断类型,1-慢病,2-急诊,普通病不填,Integer<br>" +
+                    "indications:指标结果,String<br>" +
+                    "adverseReactions:不良反应,List<不良反应明细><br>")
+    @PostMapping("/pushInner")
+    @SysLogger("pushInner")
+    public RespDTO<PushDTO> push(@RequestBody @Valid PushVO pushVO) {
+        return RespDTO.onSuc(pushFacade.push(pushVO));
+    }
+
+    @ApiOperation(value = "知识库标准化-治疗方案[by:zhaops]",
+            notes = "age: 年龄(必填)<br>" +
+                    "sex:性别(必填),1:男,2:女<br>" +
+                    "symptom:症状,String<br>" +
+                    "other:其它史,String<br>" +
+                    "vital:查体,String<br>" +
+                    "lis:化验,Array<br>" +
+                    "lis:name:套餐名称(必填),String<br>" +
+                    "lis:detailName:化验项名称(必填),String<br>" +
+                    "lis:uniqueName:公表名称,String<br>" +
+                    "lis:value:值,Double<br>" +
+                    "lis:maxValue:最大值,Double<br>" +
+                    "lis:minValue:最小值,Double<br>" +
+                    "lis:units:单位,String<br>" +
+                    "lis:otherValue:其他结果,包括阴性阳性,文字描述等,String<br>" +
+                    "lis:source:数据来源(必填),Integer<br>" +
+                    "pacs:辅检,String<br>" +
+                    "diag:诊断,String<br>" +
+                    "featureType:类型(必填),8:治疗方案,String<br>" +
+                    "diseaeName:取治疗方案的诊断,String<br>" +
+                    "patientId:病人id,Long<br>" +
+                    "disType:诊断类型,1-慢病,2-急诊,普通病不填,Integer<br>" +
+                    "indications:指标结果,String<br>" +
+                    "adverseReactions:不良反应,List<不良反应明细><br>")
+    @PostMapping("/pushTreatment")
+    @SysLogger("pushTreatment")
+    public RespDTO<Map<String, Object>> pushTreatment(@RequestBody @Valid PushVO pushVO) {
+        return RespDTO.onSuc(pushFacade.pushTreatment(pushVO));
+    }
+}

+ 1 - 1
icss-service/src/main/java/com/diagbot/client/bean/SearchData.java

@@ -32,5 +32,5 @@ public class SearchData {
     private String indications; //指标结果
     private String adverseReactions; //不良反应
     private Integer disType;    //诊断类型
-    private List<AdverseReaction> adverseEvent;
+    private String adverseEvent;
 }

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

@@ -6,9 +6,7 @@ import com.diagbot.util.BeanUtil;
 import com.diagbot.util.ListUtil;
 import com.diagbot.util.StringUtil;
 import com.diagbot.vo.LisResult;
-import com.diagbot.vo.LisResultVO;
 import com.diagbot.vo.PushVO;
-import net.bytebuddy.asm.Advice;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
@@ -65,19 +63,19 @@ public class AssembleFacade {
         if (ListUtil.isNotEmpty(pushVO.getLis())) {
             Map<String, Map<String, String>> lisConfigMap = lisMappingFacade.getLisMapping_NotEmptyItemName();
             Map<String, String> lisConfigWithEmptyItemNameMap = lisMappingFacade.getLisConfig_EmptyItemName();
-            for (LisResultVO lisResultVO : pushVO.getLis()) {
+            for (LisResult lisResult : pushVO.getLis()) {
                 //source=0 icss页面数据,source=1 外部导入数据,外部导入数据不处理
-                if (!lisResultVO.getSource().equals(LisSourceEnum.Inner.getKey())) {
+                if (!lisResult.getSource().equals(LisSourceEnum.Inner.getKey())) {
                     continue;
                 }
-                if (StringUtil.isNotBlank(lisResultVO.getName())) {
-                    if (StringUtil.isNotBlank(lisResultVO.getDetailName())) {
-                        Map<String, String> detailMap = lisConfigMap.get(lisResultVO.getName());
-                        if (null != detailMap && detailMap.size() > 0 && StringUtil.isNotBlank(detailMap.get(lisResultVO.getDetailName()))) {
-                            lisResultVO.setUniqueName(detailMap.get(lisResultVO.getDetailName()));
+                if (StringUtil.isNotBlank(lisResult.getName())) {
+                    if (StringUtil.isNotBlank(lisResult.getDetailName())) {
+                        Map<String, String> detailMap = lisConfigMap.get(lisResult.getName());
+                        if (null != detailMap && detailMap.size() > 0 && StringUtil.isNotBlank(detailMap.get(lisResult.getDetailName()))) {
+                            lisResult.setUniqueName(detailMap.get(lisResult.getDetailName()));
                         }
                     } else {
-                        lisResultVO.setUniqueName(lisConfigWithEmptyItemNameMap.get(lisResultVO.getName()));
+                        lisResult.setUniqueName(lisConfigWithEmptyItemNameMap.get(lisResult.getName()));
                     }
                 }
             }

File diff suppressed because it is too large
+ 12 - 54
icss-service/src/main/java/com/diagbot/facade/PushFacade.java


+ 4 - 0
icss-service/src/main/java/com/diagbot/vo/LisResult.java

@@ -3,6 +3,8 @@ package com.diagbot.vo;
 import lombok.Getter;
 import lombok.Setter;
 
+import javax.validation.constraints.NotNull;
+
 /**
  * @Description:化验信息
  * @Author:zhaops
@@ -19,4 +21,6 @@ public class LisResult {
     private Double minValue;//最小值
     private String units;//单位
     private String otherValue;//其他结果,包括阴性阳性,文字描述等
+    @NotNull(message = "请输入数据来源")
+    private Integer source;
 }

+ 0 - 19
icss-service/src/main/java/com/diagbot/vo/LisResultVO.java

@@ -1,19 +0,0 @@
-package com.diagbot.vo;
-
-import lombok.Getter;
-import lombok.Setter;
-
-import javax.validation.constraints.NotNull;
-
-/**
- * @Description:
- * @Author:zhaops
- * @time: 2018/12/26 16:29
- */
-@Getter
-@Setter
-public class LisResultVO extends LisResult {
-    //数据来源
-    @NotNull(message = "请输入数据来源")
-    private Integer source;
-}

+ 1 - 1
icss-service/src/main/java/com/diagbot/vo/PushBaseVO.java

@@ -24,7 +24,7 @@ public class PushBaseVO {
     private String symptom;
     private String diag;
     private String vital;
-    private List<LisResultVO> lis;
+    private List<LisResult> lis;
     private String pacs;
     private String past;
     private String other;

+ 1 - 1
icss-service/src/main/java/com/diagbot/vo/PushVO.java

@@ -19,6 +19,6 @@ public class PushVO  extends PushBaseVO {
     private Long patientId;   //病人id
     private String scaleName; //量表名称
     private Integer disType;  //0-普通病(默认不填),1-慢病,2-急诊
-    private List<AdverseReaction> adverseReactions; //不良反应
+    private String adverseReactions; //不良反应
     private String indications;   //推理指标
 }