Browse Source

治疗方案

Zhaops 6 years ago
parent
commit
ecd0d89ba0
20 changed files with 477 additions and 364 deletions
  1. 1 0
      aipt-service/src/main/java/com/diagbot/client/bean/Medicition.java
  2. 34 2
      aipt-service/src/main/java/com/diagbot/facade/DisTypeFacade.java
  3. 0 1
      aipt-service/src/main/java/com/diagbot/facade/PushFacade.java
  4. 25 7
      aipt-service/src/main/java/com/diagbot/facade/TreatmentFacade.java
  5. 21 0
      aipt-service/src/main/java/com/diagbot/vo/DisTypeVO.java
  6. 12 0
      aipt-service/src/main/java/com/diagbot/web/ConceptDetailController.java
  7. 13 0
      aipt-service/src/main/java/com/diagbot/web/DisTypeController.java
  8. 40 0
      aipt-service/src/main/java/com/diagbot/web/PushController.java
  9. 30 1
      icss-service/src/main/java/com/diagbot/client/AiptServiceClient.java
  10. 21 0
      icss-service/src/main/java/com/diagbot/client/bean/ConceptBaseVO.java
  11. 21 0
      icss-service/src/main/java/com/diagbot/client/bean/DisTypeVO.java
  12. 2 1
      icss-service/src/main/java/com/diagbot/client/bean/Medicition.java
  13. 16 40
      icss-service/src/main/java/com/diagbot/client/bean/SearchData.java
  14. 38 0
      icss-service/src/main/java/com/diagbot/client/hystrix/AiptServiceHystrix.java
  15. 89 0
      icss-service/src/main/java/com/diagbot/facade/AssembleFacade.java
  16. 38 123
      icss-service/src/main/java/com/diagbot/facade/PushFacade.java
  17. 3 1
      icss-service/src/main/java/com/diagbot/facade/ScaleContentFacade.java
  18. 36 164
      icss-service/src/main/java/com/diagbot/facade/TreatmentFacade.java
  19. 2 2
      icss-service/src/main/java/com/diagbot/vo/PushVO.java
  20. 35 22
      icss-service/src/main/java/com/diagbot/web/PushController.java

+ 1 - 0
aipt-service/src/main/java/com/diagbot/client/bean/Medicition.java

@@ -13,6 +13,7 @@ import lombok.Setter;
 public class Medicition {
     private Long conceptId;
     private String medicitionName;
+    private Integer libType;
     /**
      * 1-显示,0-隐藏
      */

+ 34 - 2
aipt-service/src/main/java/com/diagbot/facade/DisTypeFacade.java

@@ -3,6 +3,7 @@ package com.diagbot.facade;
 import com.diagbot.dto.ConceptRes;
 import com.diagbot.dto.DisDTO;
 import com.diagbot.dto.DisTypeDTO;
+import com.diagbot.entity.Concept;
 import com.diagbot.entity.wrapper.ConceptWrapper;
 import com.diagbot.enums.DisTypeEnum;
 import com.diagbot.enums.LexiconRSTypeEnum;
@@ -10,6 +11,8 @@ import com.diagbot.enums.LexiconTypeEnum;
 import com.diagbot.service.impl.DisTypeServiceImpl;
 import com.diagbot.util.EntityUtil;
 import com.diagbot.util.ListUtil;
+import com.diagbot.vo.ConceptBaseVO;
+import com.diagbot.vo.DisTypeVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
@@ -66,5 +69,34 @@ public class DisTypeFacade extends DisTypeServiceImpl {
         return res;
     }
 
-
-}
+    /**
+     * 诊断类型验证
+     *
+     * @param disTypeVO
+     * @return
+     */
+    public Boolean verifyDisType(DisTypeVO disTypeVO) {
+        ConceptBaseVO conceptBaseVO = new ConceptBaseVO();
+        conceptBaseVO.setName(disTypeVO.getName());
+        conceptBaseVO.setLibType(LexiconTypeEnum.DIAGNOSIS.getKey());
+        Concept disease = conceptFacade.exist(conceptBaseVO);
+        String disTypeName = DisTypeEnum.getName(disTypeVO.getDisType());
+        conceptBaseVO.setName(disTypeName);
+        conceptBaseVO.setLibType(LexiconTypeEnum.TYPES_OF_DISEASE.getKey());
+        Concept disTypeConcept = conceptFacade.exist(conceptBaseVO);
+        ConceptWrapper conceptWrapper = new ConceptWrapper();
+        conceptWrapper.setStartId(disease.getId());
+        conceptWrapper.setStartName(disease.getLibName());
+        conceptWrapper.setStartType(LexiconTypeEnum.DIAGNOSIS.getKey());
+        conceptWrapper.setEndId(disTypeConcept.getId());
+        conceptWrapper.setEndName(disTypeName);
+        conceptWrapper.setEndType(LexiconTypeEnum.TYPES_OF_DISEASE.getKey());
+        conceptWrapper.setRelationType(LexiconRSTypeEnum.BELONG_TO.getKey());
+        List<ConceptRes> conceptResList = conceptFacade.getConcept(conceptWrapper);
+        if (ListUtil.isNotEmpty(conceptResList)) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+}

+ 0 - 1
aipt-service/src/main/java/com/diagbot/facade/PushFacade.java

@@ -181,7 +181,6 @@ public class PushFacade {
      * @return
      */
     public Map<String, Object> getTreatment(SearchVo searchVo) {
-        Map<String, Object> treatDTO = new LinkedHashMap<>();
         ResponseData data = clinicalFacade.processClinicalData(searchVo);
         Map<String, JSONObject> treat = data.getTreat();
         if (StringUtil.isBlank(searchVo.getDiseaseName())) {

+ 25 - 7
aipt-service/src/main/java/com/diagbot/facade/TreatmentFacade.java

@@ -73,20 +73,24 @@ public class TreatmentFacade {
         conceptIntroduceVO.setLibType(LexiconTypeEnum.DIAGNOSIS.getKey());
         conceptIntroduceVO.setPosition(IntroducePositionEnum.CommonTreatment.getKey());
         List<ConceptDetail> commonTreatmentDetailList = conceptDetailFacade.getConceptDetailList(conceptIntroduceVO);
-        ConceptDetailDTO commonDetailDTO = new ConceptDetailDTO();
         if (ListUtil.isNotEmpty(commonTreatmentDetailList)) {
+            ConceptDetailDTO commonDetailDTO = new ConceptDetailDTO();
             BeanUtil.copyProperties(commonTreatmentDetailList.get(0), commonDetailDTO);
+            retMap.put("commonTreatment", commonDetailDTO);
+        } else {
+            retMap.put("commonTreatment", null);
         }
-        retMap.put("commonTreatment", commonDetailDTO);
 
         //手术治疗
         conceptIntroduceVO.setPosition(IntroducePositionEnum.SurgeryTreatment.getKey());
         List<ConceptDetail> surgeryTreatmentDetailList = conceptDetailFacade.getConceptDetailList(conceptIntroduceVO);
-        ConceptDetailDTO surgeryDetailDTO = new ConceptDetailDTO();
         if (ListUtil.isNotEmpty(surgeryTreatmentDetailList)) {
+            ConceptDetailDTO surgeryDetailDTO = new ConceptDetailDTO();
             BeanUtil.copyProperties(surgeryTreatmentDetailList.get(0), surgeryDetailDTO);
+            retMap.put("surgeryTreatment", surgeryDetailDTO);
+        } else {
+            retMap.put("surgeryTreatment", null);
         }
-        retMap.put("surgeryTreatment", surgeryDetailDTO);
 
 
         //获取知识图谱治疗方案
@@ -105,10 +109,14 @@ public class TreatmentFacade {
 
         for (MedicitionClass medicitionClass : drugsList) {
             Concept cateBigConcept = cateBigConceptMap.get(medicitionClass.getBigdrugsName());
-            medicitionClass.setBigdrugsConceptId(cateBigConcept.getId());
+            if (cateBigConcept != null) {
+                medicitionClass.setBigdrugsConceptId(cateBigConcept.getId());
+            }
             medicitionClass.setBigdrgusLibType(ConceptTypeEnum.Drug_Category_Big.getKey());
             Concept cateSmallConcept = cateSmallConceptMap.get(medicitionClass.getSubdrugsName());
-            medicitionClass.setSubdrugsConceptId(cateSmallConcept.getId());
+            if (cateSmallConcept != null) {
+                medicitionClass.setSubdrugsConceptId(cateSmallConcept.getId());
+            }
             medicitionClass.setSubdrugsLibType(ConceptTypeEnum.Drug_Category_Small.getKey());
 
             if (cateBigConcept != null) {
@@ -116,6 +124,8 @@ public class TreatmentFacade {
                 conceptBaseVO.setName(cateBigConcept.getLibName());
                 if (conceptDetailFacade.exist(conceptBaseVO)) {
                     medicitionClass.setShowInfo("1");
+                } else {
+                    medicitionClass.setShowInfo("0");
                 }
             }
             LinkedList<Medicition> medicitionList = medicitionClass.getMedicitionsList();
@@ -128,8 +138,11 @@ public class TreatmentFacade {
                 if (drugConcept != null) {
                     medicition.setConceptId(drugConcept.getId());
                 }
+                medicition.setLibType(ConceptTypeEnum.Drug.getKey());
                 if (drugDetailMap != null && drugDetailMap.containsKey(medicition.getMedicitionName())) {
                     medicition.setShowInfo("1");
+                } else {
+                    medicition.setShowInfo("0");
                 }
             }
             medicitionClass.setMedicitionsList(medicitionList);
@@ -165,9 +178,14 @@ public class TreatmentFacade {
                 Map<String, Concept> adConceptDetailMap = conceptDetailFacade.existList(adNameList, LexiconTypeEnum.SIDE_EFFECTS.getKey());
                 for (AdverseReaction adverseReaction : adverseReactionList) {
                     Concept adConcept = adConceptMap.get(adverseReaction.getName());
-                    adverseReaction.setConceptId(adConcept.getId());
+                    if (adConcept != null) {
+                        adverseReaction.setConceptId(adConcept.getId());
+                    }
+                    adverseReaction.setLibType(ConceptTypeEnum.SIDE_EFFECTS.getKey());
                     if (adConceptDetailMap != null && adConceptDetailMap.containsKey(adverseReaction.getName())) {
                         adverseReaction.setShowInfo("1");
+                    } else {
+                        adverseReaction.setShowInfo("0");
                     }
                 }
                 retMap.put("adverseReactions", adverseReactionList);

+ 21 - 0
aipt-service/src/main/java/com/diagbot/vo/DisTypeVO.java

@@ -0,0 +1,21 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2019/5/9 16:11
+ */
+@Getter
+@Setter
+public class DisTypeVO {
+    @NotBlank(message = "请输入诊断名称")
+    private String name;
+    @NotNull(message = "请输入诊断类型")
+    private Integer disType;
+}

+ 12 - 0
aipt-service/src/main/java/com/diagbot/web/ConceptDetailController.java

@@ -5,7 +5,10 @@ import com.diagbot.annotation.SysLogger;
 import com.diagbot.dto.ConceptIntroduceDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.facade.ConceptDetailFacade;
+import com.diagbot.util.ParamConvertUtil;
+import com.diagbot.vo.ConceptBaseVO;
 import com.diagbot.vo.ConceptIntroduceVO;
+import com.sun.org.apache.xpath.internal.operations.Bool;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -39,4 +42,13 @@ public class ConceptDetailController {
         ConceptIntroduceDTO data = conceptDetailFacade.getConceptDetail(conceptIntroduceVO);
         return RespDTO.onSuc(data);
     }
+
+    @ApiOperation(value = "知识库标准化-获取提示信息[by:zhaops]", notes = "")
+    @PostMapping("/exist")
+    @SysLogger("exist")
+    public RespDTO<Bool> exist(@Valid @RequestBody ConceptBaseVO conceptBaseVO) {
+        conceptBaseVO.setLibType(ParamConvertUtil.conceptConvert2Lib(conceptBaseVO.getLibType()));
+        Boolean data = conceptDetailFacade.exist(conceptBaseVO);
+        return RespDTO.onSuc(data);
+    }
 }

+ 13 - 0
aipt-service/src/main/java/com/diagbot/web/DisTypeController.java

@@ -4,13 +4,18 @@ package com.diagbot.web;
 import com.diagbot.dto.DisTypeDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.facade.DisTypeFacade;
+import com.diagbot.vo.DisTypeVO;
+import com.sun.org.apache.xpath.internal.operations.Bool;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.validation.Valid;
+
 /**
  * <p>
  * 诊断类型表 前端控制器
@@ -36,4 +41,12 @@ public class DisTypeController {
         DisTypeDTO data = disTypeFacade.getDisTypeFac();
         return RespDTO.onSuc(data);
     }
+
+    @ApiOperation(value = "知识化标准化-判断诊断类型[by:zhaops]",
+            notes = "")
+    @PostMapping("/verifyDisType")
+    public RespDTO<Boolean> verifyDisType(@Valid @RequestBody DisTypeVO disTypeVO) {
+        Boolean data = disTypeFacade.verifyDisType(disTypeVO);
+        return RespDTO.onSuc(data);
+    }
 }

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

@@ -0,0 +1,40 @@
+package com.diagbot.web;
+
+import com.diagbot.annotation.SysLogger;
+import com.diagbot.client.bean.ResponseData;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.facade.PushFacade;
+import com.diagbot.facade.TreatmentFacade;
+import com.diagbot.vo.SearchVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.Valid;
+import java.util.Map;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2019/5/9 15:10
+ */
+@RestController
+@RequestMapping("/push")
+@Api(value = "治疗方案API", tags = { "治疗方案API" })
+@SuppressWarnings("unchecked")
+public class PushController {
+    @Autowired
+    private PushFacade pushFacade;
+
+    @ApiOperation(value = "临床数据处理", notes = "")
+    @PostMapping("/treatment")
+    @SysLogger("treatment")
+    public RespDTO<ResponseData> processData(@Valid @RequestBody SearchVo searchVo) {
+        Map<String, Object> data = pushFacade.getTreatment((searchVo));
+        return RespDTO.onSuc(data);
+    }
+}

+ 30 - 1
icss-service/src/main/java/com/diagbot/client/AiptServiceClient.java

@@ -1,6 +1,8 @@
 package com.diagbot.client;
 
 import com.diagbot.client.bean.CalculateData;
+import com.diagbot.client.bean.ConceptBaseVO;
+import com.diagbot.client.bean.DisTypeVO;
 import com.diagbot.client.bean.GdbResponse;
 import com.diagbot.client.bean.ResponseData;
 import com.diagbot.client.bean.SearchData;
@@ -118,4 +120,31 @@ public interface AiptServiceClient {
      */
     @PostMapping("/concept/getConceptMap")
     RespDTO<Map<String, Long>> getConceptMap(@RequestBody ConceptSearchVO conceptSearchVO);
-}
+
+    /**
+     * 获取治疗方案
+     *
+     * @param searchData
+     * @return
+     */
+    @PostMapping("/push/treatment")
+    RespDTO<Map<String, Object>> getTreatment(@RequestBody SearchData searchData);
+
+    /**
+     * 是否有提示信息
+     *
+     * @param conceptBaseVO
+     * @return
+     */
+    @PostMapping("/conceptDetail/exist")
+    RespDTO<Boolean> existConceptDetail(@Valid @RequestBody ConceptBaseVO conceptBaseVO);
+
+    /**
+     * 验证诊断类型
+     *
+     * @param disTypeVO
+     * @return
+     */
+    @PostMapping("/disType/verifyDisType")
+    RespDTO<Boolean> verifyDisType(@Valid @RequestBody DisTypeVO disTypeVO);
+}

+ 21 - 0
icss-service/src/main/java/com/diagbot/client/bean/ConceptBaseVO.java

@@ -0,0 +1,21 @@
+package com.diagbot.client.bean;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2019/5/6 18:50
+ */
+@Getter
+@Setter
+public class ConceptBaseVO {
+    @NotBlank(message = "概念名称不能为空")
+    private String name;
+    @NotNull(message = "词性不能为空")
+    private Integer libType;
+}

+ 21 - 0
icss-service/src/main/java/com/diagbot/client/bean/DisTypeVO.java

@@ -0,0 +1,21 @@
+package com.diagbot.client.bean;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2019/5/9 16:11
+ */
+@Getter
+@Setter
+public class DisTypeVO {
+    @NotBlank(message = "请输入诊断名称")
+    private String name;
+    @NotNull(message = "请输入诊断类型")
+    private Integer disType;
+}

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

@@ -11,8 +11,9 @@ import lombok.Setter;
 @Getter
 @Setter
 public class Medicition {
-    private Long id;
+    private Long conceptId;
     private String medicitionName;
+    private Integer libType;
     /**
      * 1-显示,0-隐藏
      */

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

@@ -4,10 +4,7 @@ import com.diagbot.vo.LisResult;
 import lombok.Getter;
 import lombok.Setter;
 
-import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 /**
  * Created by fyeman on 2018/1/31.
@@ -15,46 +12,25 @@ import java.util.Map;
 @Getter
 @Setter
 public class SearchData {
-    private int length = 10;
-    private int age_start = 0;
-    private int age_end = 200;
-    private int age = 0;
+    private int length;
+    private int age;
     private String sex;
-    // 搜索结果的贝叶斯阈值
-    private String threshold = "0";
-
-    private String symptom = "";
-    private String vital = "";
-    private String lis = "";
-    private String pacs = "";
-    private String diag = "";
-    private String past = "";
-    private String other = "";
-    private List<LisResult> lisArr;
-    private Integer disType; //0-普通病(默认不填),1-慢病,2-急诊
-    private String scaleName;
-    private List<AdverseReaction> adverseEvent;
-    private String indications;
-
     //特征类别
     private String featureType;
-    //特征类别对","进行分割后数据
-    private String[] featureTypes;
-    //门诊 住院分类
-    private String resourceType;
-    //模型
-    private AlgorithmClassify algorithmClassify[];
-    //模型
-    private String algorithmClassifyValue;
     //外部系统编码 用于返回映射数据,如果sysCode为空或null,则返回kl_standard_info标准名称
     private String sysCode;
-
-    private Map<String, Map<String, String>> inputs = new HashMap<>(10, 0.8f);
-
-    private List<Feature> symptomFeatureList = new ArrayList<>();
-    private List<Feature> vitalFeatureList = new ArrayList<>();
-    private List<Feature> lisFeatureList = new ArrayList<>();
-    private List<Feature> pacsFeatureList = new ArrayList<>();
-    private List<Feature> diagFeatureList = new ArrayList<>();
-    private List<Feature> symptompropertyFeatureList = new ArrayList<>();
+    private String symptom;
+    private String past;
+    private String other;
+    private String vital;
+    private String lis;
+    private List<LisResult> lisArr;
+    private String pacs;
+    private String diag;
+    private String diseaseName; //指定诊断,例如取治疗方案
+    private String scaleName;   //量表名称
+    private String indications; //指标结果
+    private String adverseReactions; //不良反应
+    private Integer disType;    //诊断类型
+    private List<AdverseReaction> adverseEvent;
 }

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

@@ -2,6 +2,8 @@ package com.diagbot.client.hystrix;
 
 import com.diagbot.client.AiptServiceClient;
 import com.diagbot.client.bean.CalculateData;
+import com.diagbot.client.bean.ConceptBaseVO;
+import com.diagbot.client.bean.DisTypeVO;
 import com.diagbot.client.bean.GdbResponse;
 import com.diagbot.client.bean.ResponseData;
 import com.diagbot.client.bean.SearchData;
@@ -149,4 +151,40 @@ public class AiptServiceHystrix implements AiptServiceClient {
         log.error("【hystrix】调用{}异常", "getConceptMap");
         return null;
     }
+
+    /**
+     * 获取治疗方案
+     *
+     * @param searchData
+     * @return
+     */
+    @Override
+    public RespDTO<Map<String, Object>> getTreatment(@RequestBody SearchData searchData) {
+        log.error("【hystrix】调用{}异常", "getTreatment");
+        return null;
+    }
+
+    /**
+     * 是否有提示信息
+     *
+     * @param conceptBaseVO
+     * @return
+     */
+    @Override
+    public RespDTO<Boolean> existConceptDetail(@Valid @RequestBody ConceptBaseVO conceptBaseVO) {
+        log.error("【hystrix】调用{}异常", "existConceptDetail");
+        return null;
+    }
+
+    /**
+     * 验证诊断类型
+     *
+     * @param disTypeVO
+     * @return
+     */
+    @Override
+    public RespDTO<Boolean> verifyDisType(@Valid @RequestBody DisTypeVO disTypeVO) {
+        log.error("【hystrix】调用{}异常", "verifyDisType");
+        return null;
+    }
 }

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

@@ -0,0 +1,89 @@
+package com.diagbot.facade;
+
+import com.diagbot.client.bean.SearchData;
+import com.diagbot.enums.LisSourceEnum;
+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;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2019/5/9 15:40
+ */
+@Component
+public class AssembleFacade {
+    @Autowired
+    private LisMappingFacade lisMappingFacade;
+
+    /**
+     * 拼装数据
+     *
+     * @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;
+        }
+
+        //化验项映射,转公表
+        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()) {
+                //source=0 icss页面数据,source=1 外部导入数据,外部导入数据不处理
+                if (!lisResultVO.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()));
+                        }
+                    } else {
+                        lisResultVO.setUniqueName(lisConfigWithEmptyItemNameMap.get(lisResultVO.getName()));
+                    }
+                }
+            }
+            List<LisResult> lisResultList = BeanUtil.listCopyTo(pushVO.getLis(), LisResult.class);
+            searchData.setLisArr(lisResultList);
+        }
+        return searchData;
+    }
+}

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


+ 3 - 1
icss-service/src/main/java/com/diagbot/facade/ScaleContentFacade.java

@@ -27,6 +27,8 @@ public class ScaleContentFacade extends ScaleContentServiceImpl {
     PushFacade pushFacade;
     @Autowired
     AiptServiceClient aiptServiceClient;
+    @Autowired
+    AssembleFacade assembleFacade;
 
     /**
      * 返回量表内容
@@ -34,7 +36,7 @@ public class ScaleContentFacade extends ScaleContentServiceImpl {
      * @return
      */
     public List<ScaleContent> getContent(PushVO pushVO) {
-        SearchData searchData = pushFacade.assembleData(pushVO);
+        SearchData searchData = assembleFacade.assembleData(pushVO);
         RespDTO<List<ScaleContent>> res = aiptServiceClient.getScale(searchData);
         RespDTOUtil.respNGDeal(res, "远程调用量表内容失败");
         return res.data;

+ 36 - 164
icss-service/src/main/java/com/diagbot/facade/TreatmentFacade.java

@@ -2,10 +2,14 @@ package com.diagbot.facade;
 
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.diagbot.client.AiptServiceClient;
 import com.diagbot.client.bean.AdverseReaction;
+import com.diagbot.client.bean.ConceptBaseVO;
+import com.diagbot.client.bean.DisTypeVO;
 import com.diagbot.client.bean.Medicition;
 import com.diagbot.client.bean.MedicitionClass;
 import com.diagbot.dto.IntroduceDetailDTO;
+import com.diagbot.dto.RespDTO;
 import com.diagbot.entity.InquiryDrug;
 import com.diagbot.entity.InquiryInfo;
 import com.diagbot.entity.IntroduceDetail;
@@ -21,7 +25,9 @@ import com.diagbot.util.BeanUtil;
 import com.diagbot.util.EntityUtil;
 import com.diagbot.util.FastJsonUtils;
 import com.diagbot.util.ListUtil;
+import com.diagbot.util.RespDTOUtil;
 import com.google.common.collect.Lists;
+import com.sun.org.apache.xpath.internal.operations.Bool;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
@@ -50,6 +56,8 @@ public class TreatmentFacade {
     InquiryInfoFacade inquiryInfoFacade;
     @Autowired
     InquiryDrugFacade inquiryDrugFacade;
+    @Autowired
+    AiptServiceClient aiptServiceClient;
 
     /**
      * 获取治疗方案
@@ -57,169 +65,20 @@ public class TreatmentFacade {
      * @param
      * @return
      */
-    public Map<String, Object> getTreatment(Map<String, JSONObject> treatmentMap, Long diseaseId, Long patientId) {
-        Map<String, Object> retMap = new LinkedHashMap<>();
-        QuestionInfo disease = questionFacade.getById(diseaseId);
-        if (disease == null) {
-            throw new CommonException(CommonErrorCode.NOT_EXISTS, "诊断不存在");
-        }
-        if (treatmentMap.size() == 0) {
-            throw new CommonException(CommonErrorCode.NOT_EXISTS, "未找到治疗方案");
-        }
-        if (!treatmentMap.containsKey(disease.getTagName())) {
-            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "诊断名称和id不匹配");
-        }
-
-        //一般治疗
-        List<IntroduceDetail> commonTreatmentDetailList = getIntroduceDetailList(diseaseId, IntroducePositionEnum.CommonTreatment.getKey());
-        IntroduceDetailDTO commonDetailDTO = new IntroduceDetailDTO();
-        if (ListUtil.isNotEmpty(commonTreatmentDetailList)) {
-            BeanUtil.copyProperties(commonTreatmentDetailList.get(0), commonDetailDTO);
-        }
-        retMap.put("commonTreatment", commonDetailDTO);
-
-        //手术治疗
-        List<IntroduceDetail> surgeryTreatmentDetailList = getIntroduceDetailList(diseaseId, IntroducePositionEnum.SurgeryTreatment.getKey());
-        IntroduceDetailDTO surgeryDetailDTO = new IntroduceDetailDTO();
-        if (ListUtil.isNotEmpty(surgeryTreatmentDetailList)) {
-            BeanUtil.copyProperties(surgeryTreatmentDetailList.get(0), surgeryDetailDTO);
-        }
-        retMap.put("surgeryTreatment", surgeryDetailDTO);
-
-
-        //获取知识图谱治疗方案
-        JSONObject treatmentJson = treatmentMap.get(disease.getTagName());
-        if (treatmentJson == null || treatmentJson.isEmpty()) {
-            return retMap;
-        }
-
-        List<MedicitionClass> drugsList = FastJsonUtils.getJsonToListByKey(treatmentJson.toString(), "treatment", MedicitionClass.class);
-
-        List<String> classNameList = drugsList.stream().map(drugs -> drugs.getBigdrugsName()).collect(Collectors.toList());
-        List<QuestionInfo> drugClassList = getTopQuestionList(classNameList, QuestionTypeEnum.DrugClass.getKey());
-        Map<String, QuestionInfo> drugClassMap = EntityUtil.makeEntityMap(drugClassList, "tagName");
-        List<Long> drugClassIds = drugClassList.stream().map(drugClass -> drugClass.getId()).collect(Collectors.toList());
-        List<IntroduceMap> introduceMapList = getIntroduceMapList(drugClassIds, QuestionTypeEnum.DrugClass.getKey());
-        Map<Long, IntroduceMap> introduceMapMap = EntityUtil.makeEntityMap(introduceMapList, "questionId");
-
-        for (MedicitionClass medicitionClass : drugsList) {
-            QuestionInfo drugClass = drugClassMap.get(medicitionClass.getBigdrugsName());
-            if (drugClass != null) {
-                medicitionClass.setId(drugClass.getId());
-                if (introduceMapMap.get(drugClass.getId()) != null) {
-                    medicitionClass.setShowInfo("1");
-                }
-            }
-            LinkedList<Medicition> medicitionList = medicitionClass.getMedicitionsList();
-            List<String> drugNameList = medicitionList.stream().map(medicition -> medicition.getMedicitionName()).collect(Collectors.toList());
-            List<QuestionInfo> drugList = getTopQuestionList(drugNameList, QuestionTypeEnum.Drug.getKey());
-            Map<String, QuestionInfo> drugMap = EntityUtil.makeEntityMap(drugList, "tagName");
-            List<Long> drugIds = drugList.stream().map(drug -> drug.getId()).collect(Collectors.toList());
-            List<IntroduceMap> drugIntroduceMapList = getIntroduceMapList(drugIds, QuestionTypeEnum.Drug.getKey());
-            Map<Long, IntroduceMap> drugIntroduceMapMap = EntityUtil.makeEntityMap(drugIntroduceMapList, "questionId");
-            for (Medicition medicition : medicitionList) {
-                QuestionInfo drug = drugMap.get(medicition.getMedicitionName());
-                if (drug != null) {
-                    medicition.setId(drug.getId());
-                    if (drugIntroduceMapMap.get(drug.getId()) != null) {
-                        medicition.setShowInfo("1");
-                    }
-                }
-            }
-            medicitionClass.setMedicitionsList(medicitionList);
-        }
-
-        retMap.put("treatment", drugsList);
-
-        //判断是否慢病,慢病增加回访时间,上次用药,不良反应
-        Boolean isChronic = disTypeFacade.judgeByDisId(diseaseId, DisTypeEnum.CHRONIC.getKey());
-        if (isChronic) {
-            //慢病,增加回访时间,暂时前端写死, 以后由只是图谱返回
-            retMap.put("followUp", null);
-
+    public Map<String, Object> getTreatment(Map<String, Object> map, Long patientId) {
+        Map<String, Object> retMap = map;
+        //慢病 上次用药处理
+        if (map.containsKey("drugHistory")) {
             //上次用药
             if (patientId == null) {
                 retMap.put("drugHistory", null);
             } else {
                 retMap.put("drugHistory", getDrugHistory(patientId));
             }
-
-            //不良反应
-            List<AdverseReaction> adverseReactionList = FastJsonUtils.getJsonToListByKey(treatmentJson.toString(), "adverseEvent", AdverseReaction.class);
-            List<String> adNameList = adverseReactionList.stream().map(adverseReaction -> adverseReaction.getName()).collect(Collectors.toList());
-            List<QuestionInfo> adList = getTopQuestionList(adNameList, QuestionTypeEnum.AdverseReaction.getKey());
-            Map<String, QuestionInfo> adMap = EntityUtil.makeEntityMap(adList, "tagName");
-            List<Long> adIds = adList.stream().map(ad -> ad.getId()).collect(Collectors.toList());
-            List<IntroduceMap> adIntroduceMapList = getIntroduceMapList(adIds, QuestionTypeEnum.AdverseReaction.getKey());
-            Map<Long, IntroduceMap> adIntroduceMapMap = EntityUtil.makeEntityMap(adIntroduceMapList, "questionId");
-            for (AdverseReaction adverseReaction : adverseReactionList) {
-                adverseReaction.setTagName(adverseReaction.getName());
-                if (null != adMap && adMap.size() > 0) {
-                    QuestionInfo adInfo = adMap.get(adverseReaction.getName());
-                    if (adInfo != null) {
-                        adverseReaction.setId(adInfo.getId());
-                    }
-                    IntroduceMap adIntorduceMap = adIntroduceMapMap.get(adInfo.getId());
-                    if (adIntorduceMap != null) {
-                        adverseReaction.setShowInfo("1");
-                    }
-                }
-            }
-            retMap.put("adverseReactions", adverseReactionList);
         }
         return retMap;
     }
 
-    /**
-     * 根据展示位置获取提示信息明细列表
-     *
-     * @param diseaseId
-     * @param position
-     * @return
-     */
-    public List<IntroduceDetail> getIntroduceDetailList(Long diseaseId, Integer position) {
-        QueryWrapper<IntroduceDetail> introduceDetailQueryWrapper = new QueryWrapper<>();
-        String sql = "select introduce_id from icss_introduce_map where question_id=" + diseaseId + " and type=" + QuestionTypeEnum.Disease.getKey();
-        introduceDetailQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
-                .apply("find_in_set({0},position)", position)
-                .inSql("introduce_id", sql)
-                .orderByAsc("introduce_id", "order_no");
-        List<IntroduceDetail> introduceDetailList = introduceDetailFacade.list(introduceDetailQueryWrapper);
-        return introduceDetailList;
-    }
-
-    /**
-     * 获取顶级标签
-     *
-     * @param tagNameList
-     * @param type
-     * @return
-     */
-    public List<QuestionInfo> getTopQuestionList(List<String> tagNameList, Integer type) {
-        QueryWrapper<QuestionInfo> questionInfoQueryWrapper = new QueryWrapper<>();
-        questionInfoQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
-                .in("tag_name", tagNameList)
-                //.eq("sub_type", 0)
-                .eq("type", type);
-        List<QuestionInfo> questionInfoList = questionFacade.list(questionInfoQueryWrapper);
-        return questionInfoList;
-    }
-
-    /**
-     * 获取标签提示信息映射
-     *
-     * @param questionIdList
-     * @param type
-     * @return
-     */
-    public List<IntroduceMap> getIntroduceMapList(List<Long> questionIdList, Integer type) {
-        QueryWrapper<IntroduceMap> introduceMapQueryWrapper = new QueryWrapper<>();
-        introduceMapQueryWrapper.in("question_id", questionIdList)
-                .eq("type", type)
-                .eq("is_deleted", IsDeleteEnum.N.getKey());
-        List<IntroduceMap> introduceMapList = introduceMapFacade.list(introduceMapQueryWrapper);
-        return introduceMapList;
-    }
 
     /**
      * 根据病人id获取历史用药内容
@@ -237,6 +96,10 @@ public class TreatmentFacade {
         Boolean chronicHistroy = false;
         Boolean not_chronicHistory = false;
         for (InquiryInfo inquiryInfo : inquiryInfoList) {
+            //慢病和普通病都取到上次用药之后不再遍历
+            if (chronicHistroy && not_chronicHistory) {
+                break;
+            }
             String[] diseases = inquiryInfo.getDiagnose().split(",|,");
             if (diseases.length > 0) {
                 QueryWrapper<InquiryDrug> inquiryDrugQueryWrapper = new QueryWrapper<>();
@@ -245,26 +108,35 @@ public class TreatmentFacade {
                 List<Medicition> medicitionList = Lists.newLinkedList();
                 for (InquiryDrug inquiryDrug : inquiryDrugList) {
                     Medicition medicition = new Medicition();
-                    medicition.setId(inquiryDrug.getConceptId());
+                    medicition.setConceptId(inquiryDrug.getConceptId());
                     medicition.setMedicitionName(inquiryDrug.getConceptName());
+                    medicition.setLibType(8);
                     medicition.setIsShow("1");
-                    Boolean hasIntroduce = introduceMapFacade.hasIntroduceByQuestionName(inquiryDrug.getConceptName(), QuestionTypeEnum.Drug.getKey());
-                    if (hasIntroduce) {
+                    ConceptBaseVO conceptBaseVO = new ConceptBaseVO();
+                    conceptBaseVO.setName(medicition.getMedicitionName());
+                    conceptBaseVO.setLibType(8);
+                    RespDTO<Boolean> res = aiptServiceClient.existConceptDetail(conceptBaseVO);
+                    if (RespDTOUtil.respIsOK(res) && res.data == true) {
                         medicition.setShowInfo("1");
                     } else {
                         medicition.setShowInfo("0");
                     }
                     medicitionList.add(medicition);
                 }
-                Boolean isChronic = disTypeFacade.judgeByDisName(diseases[0], DisTypeEnum.CHRONIC.getKey());
-                if (isChronic) {
-                    if (!chronicHistroy)
+
+                DisTypeVO disTypeVO = new DisTypeVO();
+                disTypeVO.setName(diseases[0]);
+                disTypeVO.setDisType(DisTypeEnum.CHRONIC.getKey());
+                RespDTO<Boolean> resDisType = aiptServiceClient.verifyDisType(disTypeVO);
+                if (RespDTOUtil.respIsOK(resDisType) && resDisType.data == true) {
+                    if (!chronicHistroy) {
                         drugHistoryMap.put("慢病用药内容", medicitionList);
-                    chronicHistroy = true;
-                } else {
-                    if (!not_chronicHistory) {
-                        drugHistoryMap.put("普通病用药内容", medicitionList);
-                        not_chronicHistory = true;
+                        chronicHistroy = true;
+                    } else {
+                        if (!not_chronicHistory) {
+                            drugHistoryMap.put("普通病用药内容", medicitionList);
+                            not_chronicHistory = true;
+                        }
                     }
                 }
             }

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

@@ -15,10 +15,10 @@ import java.util.List;
 @Getter
 @Setter
 public class PushVO  extends PushBaseVO {
-    private Long diseaseId;
+    private String diseaseName;
     private Long patientId;   //病人id
     private String scaleName; //量表名称
-    private Long scaleId;     //量表id
+    //private Long scaleId;     //量表id
     private Integer disType;  //0-普通病(默认不填),1-慢病,2-急诊
     private List<AdverseReaction> adverseReactions; //不良反应
     private String indications;   //推理指标

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

@@ -1,6 +1,5 @@
 package com.diagbot.web;
 
-import com.alibaba.fastjson.JSONObject;
 import com.diagbot.annotation.SysLogger;
 import com.diagbot.client.bean.ResponseData;
 import com.diagbot.client.bean.SearchData;
@@ -8,10 +7,10 @@ import com.diagbot.dto.PushDTO;
 import com.diagbot.dto.PushKYJDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.enums.InputModeEnum;
+import com.diagbot.facade.AssembleFacade;
 import com.diagbot.facade.PushFacade;
 import com.diagbot.vo.PushKYJVO;
 import com.diagbot.vo.PushVO;
-import com.google.common.collect.Lists;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -19,10 +18,8 @@ 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 springfox.documentation.annotations.ApiIgnore;
 
 import javax.validation.Valid;
-import java.util.List;
 import java.util.Map;
 
 /**
@@ -38,6 +35,8 @@ public class PushController {
 
     @Autowired
     PushFacade pushFacade;
+    @Autowired
+    AssembleFacade assembleFacade;
 
     @ApiOperation(value = "知识库标准化-推理接口(半结构化)[by:zhaops]",
             notes = "age: 年龄(必填)<br>" +
@@ -57,7 +56,7 @@ public class PushController {
                     "lis:source:数据来源(必填),Integer<br>" +
                     "pacs:辅检,String<br>" +
                     "diag:诊断,String<br>" +
-                    "featureType:类型(必填),1:症状,3:其他史,4:查体,5:化验,6:辅检,7:诊断,8:治疗方案,11-管理评估,21-量表内容,22-指标,String<br>" +
+                    "featureType:类型(必填),1:症状,3:其他史,4:查体,5:化验,6:辅检,7:诊断,11-管理评估,21-量表内容,22-指标,String<br>" +
                     "diseaeId:取治疗方案的诊断,Long<br>" +
                     "scaleName:量表名称,String<br>" +
                     "scaleId:量表id,Long<br>" +
@@ -71,6 +70,36 @@ public class PushController {
         return RespDTO.onSuc(pushFacade.pushInner(pushVO, InputModeEnum.Structured.getKey()));
     }
 
+    @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:取治疗方案的诊断,Long<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));
+    }
+
     @ApiOperation(value = "推理接口(文本模式)[by:zhaops]",
             notes = "age: 年龄(必填)<br>" +
                     "sex:性别(必填),1:男,2:女<br>" +
@@ -126,7 +155,7 @@ public class PushController {
     @PostMapping("/pushAI")
     @SysLogger("pushAI")
     public RespDTO<ResponseData> pushAI(@RequestBody @Valid PushVO pushVO) {
-        SearchData searchData = pushFacade.assembleData(pushVO);
+        SearchData searchData = assembleFacade.assembleData(pushVO);
         return RespDTO.onSuc(pushFacade.pushAipt(searchData));
     }
 
@@ -140,20 +169,4 @@ public class PushController {
     public RespDTO<PushKYJDTO> pushKYJ(@RequestBody @Valid PushKYJVO pushKYJVO) {
         return RespDTO.onSuc(pushFacade.pushKYJ(pushKYJVO));
     }
-
-    @PostMapping("/getScaleContent")
-    @SysLogger("getScaleContent")
-    @ApiIgnore
-    public RespDTO<String> getScaleContent(@RequestBody @Valid PushVO pushVO) {
-        return RespDTO.onSuc(pushFacade.getScaleContent(pushVO));
-    }
-
-    @PostMapping("/getManagementEvaluationContent")
-    @SysLogger("getManagementEvaluationContent")
-    @ApiIgnore
-    public RespDTO<Map<String, JSONObject>> getManagementEvaluationContent(@RequestBody @Valid PushVO pushVO) {
-        List<String> titles = Lists.newLinkedList();
-        titles.add("疗效评估");
-        return RespDTO.onSuc(pushFacade.getManagementEvaluationContent(pushVO, titles));
-    }
 }