浏览代码

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

# Conflicts:
#	aipt-service/src/main/java/com/diagbot/facade/ConceptFacade.java
wangyu 6 年之前
父节点
当前提交
63975969bc
共有 28 个文件被更改,包括 631 次插入266 次删除
  1. 19 0
      aipt-service/src/main/java/com/diagbot/dto/PartDTO.java
  2. 18 0
      aipt-service/src/main/java/com/diagbot/dto/PartSymptomDTO.java
  3. 28 0
      aipt-service/src/main/java/com/diagbot/dto/PushDTO.java
  4. 22 0
      aipt-service/src/main/java/com/diagbot/entity/Symptom.java
  5. 7 0
      aipt-service/src/main/java/com/diagbot/entity/wrapper/ConceptWrapper.java
  6. 4 1
      aipt-service/src/main/java/com/diagbot/facade/ConceptFacade.java
  7. 140 0
      aipt-service/src/main/java/com/diagbot/facade/PartFacade.java
  8. 70 0
      aipt-service/src/main/java/com/diagbot/facade/PushFacade.java
  9. 34 0
      aipt-service/src/main/java/com/diagbot/service/PartService.java
  10. 31 0
      aipt-service/src/main/java/com/diagbot/service/impl/PartServiceImpl.java
  11. 20 0
      aipt-service/src/main/java/com/diagbot/vo/PartSymptomVO.java
  12. 12 42
      aipt-service/src/main/java/com/diagbot/vo/SearchVo.java
  13. 3 0
      aipt-service/src/main/java/com/diagbot/web/ConceptController.java
  14. 43 0
      aipt-service/src/main/java/com/diagbot/web/PartController.java
  15. 69 81
      aipt-service/src/main/resources/mapper/ConceptMapper.xml
  16. 7 7
      icss-service/src/main/java/com/diagbot/dto/ReadInquiryDrugDTO.java
  17. 0 1
      icss-service/src/main/java/com/diagbot/facade/CalculateFacade.java
  18. 1 1
      icss-service/src/main/java/com/diagbot/facade/InquiryInfoFacade.java
  19. 10 0
      triage-service/src/main/java/com/diagbot/client/AiptServiceClient.java
  20. 10 0
      triage-service/src/main/java/com/diagbot/client/hystrix/AiptServiceHystrix.java
  21. 16 0
      triage-service/src/main/java/com/diagbot/dto/ConceptBaseDTO.java
  22. 3 7
      triage-service/src/main/java/com/diagbot/dto/PartDTO.java
  23. 1 5
      triage-service/src/main/java/com/diagbot/dto/PartSymptomDTO.java
  24. 6 64
      triage-service/src/main/java/com/diagbot/entity/Symptom.java
  25. 34 0
      triage-service/src/main/java/com/diagbot/enums/FixPartEnum.java
  26. 18 52
      triage-service/src/main/java/com/diagbot/facade/PartFacade.java
  27. 1 1
      triage-service/src/main/java/com/diagbot/vo/PartSymptomVO.java
  28. 4 4
      triage-service/src/main/java/com/diagbot/web/PartController.java

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

@@ -0,0 +1,19 @@
+package com.diagbot.dto;
+
+import com.diagbot.entity.Symptom;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Description: 部位症状关联信息
+ * @Author: ztg
+ * @Date: 2018/10/24 16:11
+ */
+@Getter
+@Setter
+public class PartDTO extends ConceptBaseDTO{
+    private List<Symptom> symptomList = new ArrayList<>(); //症状列表
+}

+ 18 - 0
aipt-service/src/main/java/com/diagbot/dto/PartSymptomDTO.java

@@ -0,0 +1,18 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Description: 部位症状关联信息
+ * @Author: ztg
+ * @Date: 2018/10/24 16:11
+ */
+@Getter
+@Setter
+public class PartSymptomDTO extends ConceptBaseDTO{
+    private List<PartDTO> partDTO = new ArrayList<>(); //部位信息
+}

+ 28 - 0
aipt-service/src/main/java/com/diagbot/dto/PushDTO.java

@@ -0,0 +1,28 @@
+package com.diagbot.dto;
+
+import com.diagbot.entity.ScaleContent;
+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<ConceptBaseDTO> symptom;
+    private List<ConceptBaseDTO> other;
+    private List<ConceptBaseDTO> vital;
+    private List<Long> markedVitalIds;
+    private List<ConceptBaseDTO> lab;
+    private List<ConceptBaseDTO> pacs;
+    private Map<String, List<ConceptBaseDTO>> dis;
+    private Map<String, Object> treat;
+    //private List<MedicalIndicationDTO> medicalIndications;
+    //private List<EvaluationModuleMappingDTO> evaluationModule;
+}

+ 22 - 0
aipt-service/src/main/java/com/diagbot/entity/Symptom.java

@@ -0,0 +1,22 @@
+package com.diagbot.entity;
+
+import com.diagbot.dto.ConceptBaseDTO;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 症状信息扩展表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2018-09-17
+ */
+@Getter
+@Setter
+public class Symptom extends ConceptBaseDTO {
+
+    @JsonIgnore
+    private Long partConceptId;
+}

+ 7 - 0
aipt-service/src/main/java/com/diagbot/entity/wrapper/ConceptWrapper.java

@@ -3,6 +3,8 @@ package com.diagbot.entity.wrapper;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.util.List;
+
 /**
  * @Description: 概念查询参数
  * @author: gaodm
@@ -33,4 +35,9 @@ public class ConceptWrapper {
     private Integer endAge;
     //关系终点术语类型
     private Integer endType;
+    //关系起点术语名称列表
+    private List<String> startNameList;
+    //关系终点术语名称列表
+    private List<String> endNameList;
+
 }

+ 4 - 1
aipt-service/src/main/java/com/diagbot/facade/ConceptFacade.java

@@ -6,6 +6,7 @@ import com.diagbot.dto.ConceptWithOrderRes;
 import com.diagbot.entity.Concept;
 import com.diagbot.entity.wrapper.ConceptWrapper;
 import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.enums.LexiconRSTypeEnum;
 import com.diagbot.enums.LexiconTypeEnum;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
@@ -52,8 +53,10 @@ public class ConceptFacade extends ConceptServiceImpl {
     public List<ConceptBaseDTO> getConceptUsual(ConceptUsualVO conceptUsualVO){
         //获取标签内容
         ConceptWrapper conceptWrapper = new ConceptWrapper();
-        conceptWrapper.setEndAge(conceptUsualVO.getAge());//年龄
         conceptWrapper.setStartId(conceptUsualVO.getDeptId());//科室概念id
+        conceptWrapper.setStartType(LexiconTypeEnum.DEPARTMENT.getKey());
+        conceptWrapper.setRelationType(LexiconRSTypeEnum.ORDER_BY.getKey());
+        conceptWrapper.setEndAge(conceptUsualVO.getAge());//年龄
         conceptWrapper.setEndSex(conceptUsualVO.getSexType());//性别
         //找出标签类型对应的类型id
         conceptWrapper.setEndType(getLibType(conceptUsualVO.getType()));//标签类型

+ 140 - 0
aipt-service/src/main/java/com/diagbot/facade/PartFacade.java

@@ -0,0 +1,140 @@
+package com.diagbot.facade;
+
+import com.diagbot.dto.ConceptWithOrderRes;
+import com.diagbot.dto.PartDTO;
+import com.diagbot.dto.PartSymptomDTO;
+import com.diagbot.entity.Symptom;
+import com.diagbot.entity.wrapper.ConceptWrapper;
+import com.diagbot.enums.LexiconRSTypeEnum;
+import com.diagbot.enums.LexiconTypeEnum;
+import com.diagbot.exception.CommonErrorCode;
+import com.diagbot.exception.CommonException;
+import com.diagbot.util.EntityUtil;
+import com.diagbot.util.ListUtil;
+import com.diagbot.vo.PartSymptomVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 部位facade
+ * @Author: ztg
+ * @Date: 2018/10/23 16:33
+ */
+@Component
+public class PartFacade {
+
+    @Autowired
+    ConceptFacade conceptFacade;
+
+    /**
+     * 根据已选部位返回对应的症状
+     *
+     * @param partSymptomVO 参数
+     * @return 部位症状关联信息
+     */
+    public List<PartSymptomDTO> getSymptomByPartName(PartSymptomVO partSymptomVO) {
+        List<String> partList = partSymptomVO.getPartList();
+        if (ListUtil.isEmpty(partList)) {
+            throw new CommonException(CommonErrorCode.PARAM_IS_NULL,
+                    "请选择部位");
+        }
+        if (partSymptomVO.getSexType() == null) {
+            throw new CommonException(CommonErrorCode.PARAM_IS_NULL,
+                    "请选择性别");
+        }
+        if (partSymptomVO.getAge() == null) {
+            throw new CommonException(CommonErrorCode.PARAM_IS_NULL,
+                    "请选择年龄");
+        }
+        if (partSymptomVO.getAge().intValue() < 0 || partSymptomVO.getAge().intValue() > 200) {
+            throw new CommonException(CommonErrorCode.PARAM_IS_ERROR,
+                    "超出年龄范围【0 — 200】");
+        }
+        List<PartSymptomDTO> res = new ArrayList<>();
+
+        // 获取部位信息
+        ConceptWrapper conceptWrapper = new ConceptWrapper();
+        conceptWrapper.setStartNameList(partList);
+        conceptWrapper.setStartType(LexiconTypeEnum.BODYPART.getKey());
+        conceptWrapper.setEndType(LexiconTypeEnum.BODYPART.getKey());
+        conceptWrapper.setEndSex(partSymptomVO.getSexType());
+        conceptWrapper.setEndAge(partSymptomVO.getAge());
+        List<ConceptWithOrderRes> list = conceptFacade.getConceptWithOrder(conceptWrapper);
+        // 设置一级部位
+        for (ConceptWithOrderRes concept : list) {
+            if (concept.getStartId().equals(concept.getEndId())) { //startId 和 endId相同标识一级部位
+                PartSymptomDTO dto = new PartSymptomDTO();
+                dto.setName(concept.getStartName());
+                dto.setConceptId(concept.getStartId());
+                res.add(dto);
+            }
+        }
+
+        // 设置二级部位
+        List<String> secPart = new ArrayList<>();
+        for (PartSymptomDTO dto : res) {
+            List<PartDTO> partDTO = new ArrayList<>();
+            for (ConceptWithOrderRes concept : list) {
+                if (dto.getName().equals(concept.getStartName())
+                        && !concept.getStartName().equals(concept.getEndName())) {
+                    PartDTO dto1 = new PartDTO();
+                    dto1.setName(concept.getEndName());
+                    dto1.setConceptId(concept.getEndId());
+                    secPart.add(concept.getEndName());
+                    partDTO.add(dto1);
+                }
+            }
+            dto.setPartDTO(partDTO);
+        }
+
+        // 获取二级部位下症状信息
+        ConceptWrapper wrapper = new ConceptWrapper();
+        wrapper.setStartNameList(secPart);
+        wrapper.setStartType(LexiconTypeEnum.BODYPART.getKey());
+        wrapper.setRelationType(LexiconRSTypeEnum.ORDER_BY.getKey());
+        wrapper.setEndType(LexiconTypeEnum.SYMPTOM.getKey());
+        wrapper.setEndSex(partSymptomVO.getSexType());
+        wrapper.setEndAge(partSymptomVO.getAge());
+        List<ConceptWithOrderRes> sympton = conceptFacade.getConceptWithOrder(wrapper);
+
+        // 出参转化
+        List<Symptom> symptomList = new ArrayList<>();
+        for (ConceptWithOrderRes conceptWithOrderRes : sympton) {
+            Symptom bean = new Symptom();
+            bean.setName(conceptWithOrderRes.getEndName());
+            bean.setConceptId(conceptWithOrderRes.getEndId());
+            bean.setPartConceptId(conceptWithOrderRes.getStartId());
+            symptomList.add(bean);
+        }
+        Map<Long, List<Symptom>> keyMap = EntityUtil.makeEntityListMap(symptomList, "partConceptId");
+
+        // 设置二级部位对应的症状
+        for (PartSymptomDTO dto : res) {
+            for (PartDTO partDTO : dto.getPartDTO()) {
+                if (keyMap.get(partDTO.getConceptId()) != null) { // 去除null数据
+                    partDTO.setSymptomList(keyMap.get(partDTO.getConceptId()));
+                }
+            }
+        }
+
+        // 如二级部位无关联的症状,则删除二级部位
+        for (PartSymptomDTO dto : res) {
+            for (int i = 0; i < dto.getPartDTO().size(); i++) {
+                PartDTO partDTO = dto.getPartDTO().get(i);
+                if (keyMap.get(partDTO.getConceptId()) != null) { // 去除null数据
+                    partDTO.setSymptomList(keyMap.get(partDTO.getConceptId()));
+                }
+                if (ListUtil.isEmpty(partDTO.getSymptomList())) {
+                    dto.getPartDTO().remove(i--);
+                }
+            }
+        }
+        return res;
+    }
+
+
+}

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

@@ -0,0 +1,70 @@
+package com.diagbot.facade;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.diagbot.client.bean.FeatureRate;
+import com.diagbot.client.bean.GdbResponse;
+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.RespDTO;
+import com.diagbot.entity.ScaleContent;
+import com.diagbot.enums.DisTypeEnum;
+import com.diagbot.enums.FeatureTypeEnum;
+import com.diagbot.exception.CommonErrorCode;
+import com.diagbot.exception.CommonException;
+import com.diagbot.util.BeanUtil;
+import com.diagbot.util.FastJsonUtils;
+import com.diagbot.util.ListUtil;
+import com.diagbot.util.RespDTOUtil;
+import com.diagbot.util.StringUtil;
+import com.diagbot.vo.SearchVo;
+import com.google.common.collect.Lists;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2019/5/7 16:12
+ */
+@Component
+public class PushFacade {
+    @Autowired
+    private ClinicalFacade clinicalFacade;
+
+    /**
+     * 推理接口
+     *
+     * @param searchVo
+     * @return ResponseData
+     */
+    public void pushInner(SearchVo searchVo) {
+        ResponseData data = clinicalFacade.processClinicalData(searchVo);
+        //大数据返回内容
+        List<FeatureRate> dis = data.getDis();
+
+        String featureType = searchVo.getFeatureType();
+        String[] featureTypes = featureType.split(",|,");
+        Set<String> featureTypeSet = new HashSet(Arrays.asList(featureTypes));
+
+        //症状 标签列表
+        if (featureTypeSet.contains(String.valueOf(FeatureTypeEnum.Feature_Type_Symptom.getKey()))) {
+            List<FeatureRate> symptom = data.getSymptom();
+            if (ListUtil.isNotEmpty(symptom)) {
+                List<String> nameList = symptom.stream().map(featureRate -> featureRate.getFeatureName()).collect(Collectors.toList());
+            }
+        }
+    }
+}

+ 34 - 0
aipt-service/src/main/java/com/diagbot/service/PartService.java

@@ -0,0 +1,34 @@
+//package com.diagbot.service;
+//
+//import com.baomidou.mybatisplus.extension.service.IService;
+//import com.diagbot.dto.PartDTO;
+//import com.diagbot.dto.PartSymptomDTO;
+//import com.diagbot.entity.Part;
+//
+//import java.util.List;
+//import java.util.Map;
+//
+///**
+// * @Description: 服务类
+// * @Author: ztg
+// * @Date: 2018/10/24 16:03
+// */
+//public interface PartService extends IService<Part> {
+//
+//    /**
+//     * 根据部位ids获取部位信息
+//     * @param map
+//     * @return
+//     */
+//    public List<PartSymptomDTO> getByPartId(Map map);
+//
+//    /**
+//     * 根据部位parentIds获取部位信息
+//     * @param map
+//     * @return
+//     */
+//    public List<PartDTO> getByParentId(Map map);
+//
+//
+//
+//}

+ 31 - 0
aipt-service/src/main/java/com/diagbot/service/impl/PartServiceImpl.java

@@ -0,0 +1,31 @@
+//package com.diagbot.service.impl;
+//
+//import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+//import com.diagbot.dto.PartDTO;
+//import com.diagbot.dto.PartSymptomDTO;
+//import com.diagbot.entity.Part;
+//import com.diagbot.mapper.PartMapper;
+//import com.diagbot.service.PartService;
+//import org.springframework.stereotype.Service;
+//
+//import java.util.List;
+//import java.util.Map;
+//
+///**
+// * @Description: 服务实现类
+// * @Author: ztg
+// * @Date: 2018/10/24 16:02
+// */
+//@Service
+//public class PartServiceImpl extends ServiceImpl<PartMapper, Part> implements PartService {
+//
+//    @Override
+//    public List<PartSymptomDTO> getByPartId(Map map) {
+//        return baseMapper.getByPartId(map);
+//    }
+//
+//    @Override
+//    public List<PartDTO> getByParentId(Map map) {
+//        return baseMapper.getByParentId(map);
+//    }
+//}

+ 20 - 0
aipt-service/src/main/java/com/diagbot/vo/PartSymptomVO.java

@@ -0,0 +1,20 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * @Description: 部位症状参数
+ * @Author: ztg
+ * @Date: 2018/10/10 13:17
+ */
+@Getter
+@Setter
+public class PartSymptomVO {
+
+    private List<String> partList;
+    private Integer sexType;
+    private Integer age;
+}

+ 12 - 42
aipt-service/src/main/java/com/diagbot/vo/SearchVo.java

@@ -4,10 +4,7 @@ import com.diagbot.dto.LisResult;
 import lombok.Getter;
 import lombok.Setter;
 
-import com.diagbot.client.bean.Feature;
-
 import java.util.List;
-import java.util.Map;
 
 /**
  * @Description:
@@ -18,50 +15,23 @@ import java.util.Map;
 @Setter
 public class SearchVo {
     private int length;
-
-    private int age_start;
-    private int age_end;
     private int age;
     private String sex;
-
-    // 搜索结果的贝叶斯阈值
-    private String threshold;
-
+    //特征类别
+    private String featureType;
+    //外部系统编码 用于返回映射数据,如果sysCode为空或null,则返回kl_standard_info标准名称
+    private String sysCode;
     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 past;
-    private String other;
-    private List<LisResult> lisArr;
-
-    //特征类别
-    private String featureType;
-    private Integer disType;
-    /*
-    //特征类别对","进行分割后数据
-    private String[] featureTypes;
-    //门诊 住院分类
-    private String resourceType;
-    //模型
-//    private AlgorithmClassify algorithmClassify[];
-    //模型
-    private String algorithmClassifyValue;
-    */
-    //外部系统编码 用于返回映射数据,如果sysCode为空或null,则返回kl_standard_info标准名称
-    private String sysCode;
-
-
-    private List<Feature> symptomFeatureList;
-    private List<Feature> lisFeatureList;
-    private List<Feature> pacsFeatureList;
-    private List<Feature> vitalFeatureList;
-    private List<Feature> symptompropertyFeatureList;
-
-    private List<Feature> diagFeatureList;
-    private Map<String, Map<String, String>> inputs;
-
-    private String scaleName;
-    private String indications;
+    private String diseaseName; //指定诊断,例如取治疗方案
+    private String scaleName;   //量表名称
+    private String indications; //指标结果
+    private String adverseReactions; //不良反应
+    private Integer disType;    //诊断类型
 }

+ 3 - 0
aipt-service/src/main/java/com/diagbot/web/ConceptController.java

@@ -6,6 +6,7 @@ import com.diagbot.dto.ConceptBaseDTO;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.facade.ConceptFacade;
 import com.diagbot.vo.ConceptUsualVO;
+import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -26,6 +27,8 @@ import java.util.List;
  */
 @RestController
 @RequestMapping("/concept")
+@Api(value = "常用标签API", tags = { "知识库标准化-常用标签API" })
+@SuppressWarnings("unchecked")
 public class ConceptController {
     @Autowired
     ConceptFacade conceptFacade;

+ 43 - 0
aipt-service/src/main/java/com/diagbot/web/PartController.java

@@ -0,0 +1,43 @@
+package com.diagbot.web;
+
+
+import com.diagbot.dto.PartSymptomDTO;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.facade.PartFacade;
+import com.diagbot.vo.PartSymptomVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * @Description: 分诊部位Controller
+ * @Author: ztg
+ * @Date: 2018/10/23 15:09
+ */
+@RestController
+@RequestMapping("/part")
+@Api(value = "部位API", tags = { "知识库标准化-部位API" })
+@SuppressWarnings("unchecked")
+public class PartController {
+
+    @Autowired
+    PartFacade partFacade;
+
+
+    @ApiOperation(value = "知识库标准化-根据已选部位返回对应的症状[by:zhoutg]",
+            notes = "partList: 部位列表,数组<br>" +
+                    "sexType:性别,1:男,2:女<br>" +
+                    "age:年龄")
+    @PostMapping("/getSymptomByPartName")
+    public RespDTO<List<PartSymptomDTO>> getSymptomByPartName(@RequestBody PartSymptomVO partSymptomVO) {
+        return RespDTO.onSuc(partFacade.getSymptomByPartName(partSymptomVO));
+    }
+
+}
+

+ 69 - 81
aipt-service/src/main/resources/mapper/ConceptMapper.xml

@@ -25,48 +25,10 @@
             `kl_concept` t1,
             `kl_relation` t2,
             <if test="startSex != null or startAge != null">
-                (
-                SELECT
-                concept_id
-                FROM
-                kl_concept_common
-                WHERE
-                is_deleted = 'N'
-                <if test="startSex != null">
-                    <if test="startSex == 3">
-                        and sex_type in ('1','2','3')
-                    </if>
-                    <if test="startSex != 3">
-                        and sex_type in ('3',#{startSex})
-                    </if>
-                </if>
-                <if test="startAge != null">
-                    <![CDATA[ AND min_age <= #{startAge} ]]>
-                    <![CDATA[ AND max_age >= #{startAge} ]]>
-                </if>
-                ) c1,
+                kl_concept_common c1,
             </if>
             <if test="endSex != null or endAge != null">
-                (
-                SELECT
-                concept_id
-                FROM
-                kl_concept_common
-                WHERE
-                is_deleted = 'N'
-                <if test="endSex != null">
-                    <if test="endSex == 3">
-                        and sex_type in ('1','2','3')
-                    </if>
-                    <if test="endSex != 3">
-                        and sex_type in ('3',#{endSex})
-                    </if>
-                </if>
-                <if test="endAge != null">
-                    <![CDATA[ AND min_age <= #{endAge} ]]>
-                    <![CDATA[ AND max_age >= #{endAge} ]]>
-                </if>
-                ) c2,
+                kl_concept_common c2,
             </if>
             `kl_concept` t3
         WHERE
@@ -82,6 +44,19 @@
             AND t1.lib_name = #{startName}
         </if>
         <if test="startSex != null or startAge != null">
+            AND c1.is_deleted = 'N'
+            <if test="startSex != null">
+                <if test="startSex == 3">
+                    and c1.sex_type in ('1','2','3')
+                </if>
+                <if test="startSex != 3">
+                    and c1.sex_type in ('3',#{startSex})
+                </if>
+            </if>
+            <if test="startAge != null">
+                <![CDATA[ AND c1.min_age <= #{startAge} ]]>
+                <![CDATA[ AND c1.max_age >= #{startAge} ]]>
+            </if>
             AND t2.start_id = c1.concept_id
         </if>
         <if test="startType != null">
@@ -97,6 +72,19 @@
             AND t3.lib_name = #{endName}
         </if>
         <if test="endSex != null or endAge != null">
+            AND c2.is_deleted = 'N'
+            <if test="endSex != null">
+                <if test="endSex == 3">
+                    and c2.sex_type in ('1','2','3')
+                </if>
+                <if test="endSex != 3">
+                    and c2.sex_type in ('3',#{endSex})
+                </if>
+            </if>
+            <if test="endAge != null">
+                <![CDATA[ AND c2.min_age <= #{endAge} ]]>
+                <![CDATA[ AND c2.max_age >= #{endAge} ]]>
+            </if>
             AND t2.end_id = c2.concept_id
         </if>
         <if test="endType != null">
@@ -115,53 +103,15 @@
             `kl_concept` t1,
             `kl_relation` t2,
             <if test="startSex != null or startAge != null">
-                (
-                SELECT
-                concept_id
-                FROM
-                kl_concept_common
-                WHERE
-                is_deleted = 'N'
-                <if test="startSex != null">
-                    <if test="startSex == 3">
-                        and sex_type in ('1','2','3')
-                    </if>
-                    <if test="startSex != 3">
-                        and sex_type in ('3',#{startSex})
-                    </if>
-                </if>
-                <if test="startAge != null">
-                    <![CDATA[ AND min_age <= #{startAge} ]]>
-                    <![CDATA[ AND max_age >= #{startAge} ]]>
-                </if>
-                ) c1,
+                kl_concept_common c1,
             </if>
             <if test="endSex != null or endAge != null">
-                (
-                SELECT
-                concept_id
-                FROM
-                kl_concept_common
-                WHERE
-                is_deleted = 'N'
-                <if test="endSex != null">
-                    <if test="endSex == 3">
-                        and sex_type in ('1','2','3')
-                    </if>
-                    <if test="endSex != 3">
-                        and sex_type in ('3',#{endSex})
-                    </if>
-                </if>
-                <if test="endAge != null">
-                    <![CDATA[ AND min_age <= #{endAge} ]]>
-                    <![CDATA[ AND max_age >= #{endAge} ]]>
-                </if>
-                ) c2,
+                kl_concept_common c2,
             </if>
             `kl_concept` t3,
             `kl_relation_order` t4
         WHERE
-            t1.is_deleted = 'N'
+        t1.is_deleted = 'N'
         AND t2.is_deleted = 'N'
         AND t3.is_deleted = 'N'
         AND t4.is_deleted = 'N'
@@ -175,8 +125,27 @@
             AND t1.lib_name = #{startName}
         </if>
         <if test="startSex != null or startAge != null">
+            AND c1.is_deleted = 'N'
+            <if test="startSex != null">
+                <if test="startSex == 3">
+                    and c1.sex_type in ('1','2','3')
+                </if>
+                <if test="startSex != 3">
+                    and c1.sex_type in ('3',#{startSex})
+                </if>
+            </if>
+            <if test="startAge != null">
+                <![CDATA[ AND c1.min_age <= #{startAge} ]]>
+                <![CDATA[ AND c1.max_age >= #{startAge} ]]>
+            </if>
             AND t2.start_id = c1.concept_id
         </if>
+        <if test="startNameList != null and startNameList.size() > 0">
+            AND t1.lib_name in
+            <foreach collection="startNameList" item="item" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+        </if>
         <if test="startType != null">
             AND t1.lib_type = #{startType}
         </if>
@@ -190,8 +159,27 @@
             AND t3.lib_name = #{endName}
         </if>
         <if test="endSex != null or endAge != null">
+            AND c2.is_deleted = 'N'
+            <if test="endSex != null">
+                <if test="endSex == 3">
+                    and c2.sex_type in ('1','2','3')
+                </if>
+                <if test="endSex != 3">
+                    and c2.sex_type in ('3',#{endSex})
+                </if>
+            </if>
+            <if test="endAge != null">
+                <![CDATA[ AND c2.min_age <= #{endAge} ]]>
+                <![CDATA[ AND c2.max_age >= #{endAge} ]]>
+            </if>
             AND t2.end_id = c2.concept_id
         </if>
+        <if test="endNameList != null and endNameList.size() > 0">
+            AND t3.lib_name in
+            <foreach collection="endNameList" item="item" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+        </if>
         <if test="endType != null">
             AND t3.lib_type = #{endType}
         </if>

+ 7 - 7
icss-service/src/main/java/com/diagbot/dto/ReadInquiryDrugDTO.java

@@ -15,15 +15,15 @@ public class ReadInquiryDrugDTO{
 	
 	
 	/**
-     * 药品标签id
-     */
-	@ApiModelProperty(value="药品标签id")
-    private Long questionId;
+	 * 药品概念id
+	 */
+    @ApiModelProperty(value="药品概念id")
+    private Long conceptId;
 
     /**
-     * 药品标签名
+     * 药品概念名称
      */
-	@ApiModelProperty(value="药品标签名")
-    private String tagName;
+    @ApiModelProperty(value="药品概念名称")
+    private String conceptName;
 	
 }

+ 0 - 1
icss-service/src/main/java/com/diagbot/facade/CalculateFacade.java

@@ -1,7 +1,6 @@
 package com.diagbot.facade;
 
 import com.diagbot.client.AiptServiceClient;
-import com.diagbot.client.bean.Response;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;

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

@@ -217,7 +217,7 @@ public class InquiryInfoFacade extends InquiryInfoServiceImpl {
         InquiryInfo inquiryInfo = this.getOne(queryWrapper);
 
         if (inquiryInfo != null) {
-            readInquiryDTO.setDataJson(inquiryInfo.getDataJson());
+            //readInquiryDTO.setDataJson(inquiryInfo.getDataJson());
             BeanUtil.copyProperties(inquiryInfo, readInquiryDTO);
 
             QueryWrapper<InquiryDetail> inquiryDetailQe = new QueryWrapper<>();

+ 10 - 0
triage-service/src/main/java/com/diagbot/client/AiptServiceClient.java

@@ -1,7 +1,14 @@
 package com.diagbot.client;
 
 import com.diagbot.client.hystrix.AiptServiceHystrix;
+import com.diagbot.dto.PartSymptomDTO;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.vo.PartSymptomVO;
 import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import java.util.List;
 
 /**
  * @Description: 调用知识库服务
@@ -11,4 +18,7 @@ import org.springframework.cloud.openfeign.FeignClient;
 @FeignClient(value = "aipt-service", fallback = AiptServiceHystrix.class)
 public interface AiptServiceClient {
 
+    @PostMapping(value = "/part/getSymptomByPartName")
+    RespDTO<List<PartSymptomDTO>> getSymptomByPartName(@RequestBody PartSymptomVO partSymptomVO);
+
 }

+ 10 - 0
triage-service/src/main/java/com/diagbot/client/hystrix/AiptServiceHystrix.java

@@ -1,9 +1,14 @@
 package com.diagbot.client.hystrix;
 
 import com.diagbot.client.AiptServiceClient;
+import com.diagbot.dto.PartSymptomDTO;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.vo.PartSymptomVO;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
 
+import java.util.List;
+
 /**
  * @Description: 调用知识库服务
  * @author: gaodm
@@ -12,4 +17,9 @@ import org.springframework.stereotype.Component;
 @Component
 @Slf4j
 public class AiptServiceHystrix implements AiptServiceClient {
+    @Override
+    public RespDTO<List<PartSymptomDTO>> getSymptomByPartName(PartSymptomVO partSymptomVO) {
+        log.error("【hystrix】调用{}异常", "getSymptomByPartName");
+        return null;
+    }
 }

+ 16 - 0
triage-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;    //概念名称
+}

+ 3 - 7
triage-service/src/main/java/com/diagbot/dto/PartDTO.java

@@ -1,6 +1,6 @@
 package com.diagbot.dto;
 
-import com.diagbot.entity.SymptomWrapper;
+import com.diagbot.entity.Symptom;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -14,10 +14,6 @@ import java.util.List;
  */
 @Getter
 @Setter
-public class PartDTO {
-
-    private Long id;// 部位id
-    private String name;//部位名称
-    private Long parentId;// 上级id
-    private List<SymptomWrapper> symptomList = new ArrayList<>(); //症状列表
+public class PartDTO extends ConceptBaseDTO{
+    private List<Symptom> symptomList = new ArrayList<>(); //症状列表
 }

+ 1 - 5
triage-service/src/main/java/com/diagbot/dto/PartSymptomDTO.java

@@ -13,10 +13,6 @@ import java.util.List;
  */
 @Getter
 @Setter
-public class PartSymptomDTO {
-
-    private Long id;// 部位id
-    private String name;//部位名称
-    private Long parentId;// 上级id
+public class PartSymptomDTO extends ConceptBaseDTO{
     private List<PartDTO> partDTO = new ArrayList<>(); //部位信息
 }

+ 6 - 64
triage-service/src/main/java/com/diagbot/entity/Symptom.java

@@ -1,80 +1,22 @@
 package com.diagbot.entity;
 
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
+import com.diagbot.dto.ConceptBaseDTO;
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import lombok.Getter;
 import lombok.Setter;
 
-import java.io.Serializable;
-import java.util.Date;
-
 /**
  * <p>
- * 症状信息表
+ * 症状信息扩展表
  * </p>
  *
  * @author zhoutg
  * @since 2018-09-17
  */
-@TableName("triage_symptom")
 @Getter
 @Setter
-public class Symptom implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    @TableId(value = "id", type = IdType.AUTO)
-    private Long id;
-
-    /**
-     * 是否删除 N:未删除,Y:删除
-     */
-    private String isDeleted;
-
-    /**
-     * 记录创建时间
-     */
-    private Date gmtCreate;
-
-    /**
-     * 记录修改时间
-     */
-    private Date gmtModified;
-
-    /**
-     * 创建人,0表示无创建人值
-     */
-    private String creator;
-
-    /**
-     * 修改人,如果为0则表示纪录未修改
-     */
-    private String modifier;
-
-    /**
-     * 名称
-     */
-    private String name;
-
-    /**
-     * 性别(1:男,2:女,3:共用)
-     */
-    private Integer sexType;
-
-    /**
-     * 最小年龄
-     */
-    private Integer ageBegin;
-
-    /**
-     * 最大年龄
-     */
-    private Integer ageEnd;
-
-    /**
-     * 备注
-     */
-    private String remark;
+public class Symptom extends ConceptBaseDTO {
 
+    @JsonIgnore
+    private Long partConceptId;
 }

+ 34 - 0
triage-service/src/main/java/com/diagbot/enums/FixPartEnum.java

@@ -0,0 +1,34 @@
+package com.diagbot.enums;
+
+import lombok.Setter;
+
+/**
+ * 
+ * @author zhoutg
+ * @Description: 诊断类型
+ * @date 2018年11月21日 下午2:31:42
+ */
+public enum FixPartEnum {
+    PART("全身");
+
+    @Setter
+    private String partName;
+
+    FixPartEnum(String partName) {
+        this.partName = partName;
+    }
+
+    public static FixPartEnum getEnum(String partName) {
+        for (FixPartEnum item : FixPartEnum.values()) {
+            if (item.partName.equals(partName)) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public String getPartName() {
+        return this.partName;
+    }
+}
+

+ 18 - 52
triage-service/src/main/java/com/diagbot/facade/PartFacade.java

@@ -1,23 +1,19 @@
 package com.diagbot.facade;
 
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.diagbot.dto.PartDTO;
+import com.diagbot.client.AiptServiceClient;
 import com.diagbot.dto.PartSymptomDTO;
-import com.diagbot.entity.Part;
-import com.diagbot.entity.SymptomWrapper;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.enums.FixPartEnum;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
 import com.diagbot.service.impl.PartServiceImpl;
-import com.diagbot.util.EntityUtil;
 import com.diagbot.util.ListUtil;
+import com.diagbot.util.RespDTOUtil;
 import com.diagbot.vo.PartSymptomVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
-import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 /**
  * @Description: 部位facade
@@ -29,6 +25,8 @@ public class PartFacade extends PartServiceImpl {
 
     @Autowired
     SymptomFacade symptomFacade;
+    @Autowired
+    AiptServiceClient aiptServiceClient;
 
     /**
      * 根据已选部位返回对应的症状
@@ -36,65 +34,33 @@ public class PartFacade extends PartServiceImpl {
      * @param partSymptomVO 参数
      * @return 部位症状关联信息
      */
-    public List<PartSymptomDTO> getSymptomByPartIds(PartSymptomVO partSymptomVO) {
-        List<Long> partIds = partSymptomVO.getPartIds();
-        if(ListUtil.isEmpty(partIds)) {
+    public List<PartSymptomDTO> getSymptomByPartName(PartSymptomVO partSymptomVO) {
+        List<String> partList = partSymptomVO.getPartList();
+        if (ListUtil.isEmpty(partList)) {
             throw new CommonException(CommonErrorCode.PARAM_IS_NULL,
                     "请选择部位");
         }
-        if(partSymptomVO.getSexType() == null) {
+        if (partSymptomVO.getSexType() == null) {
             throw new CommonException(CommonErrorCode.PARAM_IS_NULL,
                     "请选择性别");
         }
-        if(partSymptomVO.getAge() == null) {
+        if (partSymptomVO.getAge() == null) {
             throw new CommonException(CommonErrorCode.PARAM_IS_NULL,
                     "请选择年龄");
         }
-        if(partSymptomVO.getAge().intValue() < 0 || partSymptomVO.getAge().intValue() > 200) {
+        if (partSymptomVO.getAge().intValue() < 0 || partSymptomVO.getAge().intValue() > 200) {
             throw new CommonException(CommonErrorCode.PARAM_IS_ERROR,
                     "超出年龄范围【0 — 200】");
         }
-        //添加默认部位-全身
-        QueryWrapper wrapper = new QueryWrapper();
-        wrapper.eq("name", "全身");
-        Part part = this.getOne(wrapper);
-        partIds.add(part.getId());
-        Map paramMap = new HashMap<>();
-        paramMap.put("ids", partIds);
-        List<PartSymptomDTO> res = this.getByPartId(paramMap);
-        List<PartDTO> partList = this.getByParentId(paramMap);
-
-        //添加二级部位信息
-        Map<Long, List<PartDTO>> keyMap = EntityUtil.makeEntityListMap(partList, "parentId");
-        for(PartSymptomDTO bean : res) {
-            bean.setPartDTO(keyMap.get(bean.getId()));
+        if (!partList.contains(FixPartEnum.PART.getPartName())) {
+            partList.add(FixPartEnum.PART.getPartName());
         }
-
-        //添加部位和症状的关联信息
-        List<Long> idList = new ArrayList<>();
-        for(PartDTO bean : partList) {
-            idList.add(bean.getId());
-        }
-        Map paramMap1 = new HashMap<>();
-        paramMap1.put("ids", idList);
-        paramMap1.put("sexType", partSymptomVO.getSexType());
-        paramMap1.put("age", partSymptomVO.getAge());
-        List<SymptomWrapper> symptomList = symptomFacade.getByPartIdsFac(paramMap1);
-        Map<Long, List<SymptomWrapper>> partSymptomMap = EntityUtil.makeEntityListMap(symptomList, "partId");
-        for(PartDTO bean : partList) {
-            bean.setSymptomList(partSymptomMap.get(bean.getId()));
+        RespDTO<List<PartSymptomDTO>> res = aiptServiceClient.getSymptomByPartName(partSymptomVO);
+        if (RespDTOUtil.respIsNG(res)) {
+            throw new CommonException(CommonErrorCode.RPC_ERROR, "远程调用部位关联的症状失败");
         }
 
-        // 如二级部位无关联的症状,删除二级部位
-        for(int i = 0; i < res.size(); i++) {
-            List<PartDTO> partDTO = res.get(i).getPartDTO();
-            for(int j = 0; j < partDTO.size(); j++) {
-                if(ListUtil.isEmpty(partDTO.get(j).getSymptomList())) {
-                    partDTO.remove(j--);
-                }
-            }
-        }
-        return res;
+        return res.data;
     }
 
 

+ 1 - 1
triage-service/src/main/java/com/diagbot/vo/PartSymptomVO.java

@@ -14,7 +14,7 @@ import java.util.List;
 @Setter
 public class PartSymptomVO {
 
-    private List<Long> partIds;
+    private List<String> partList;
     private Integer sexType;
     private Integer age;
 }

+ 4 - 4
triage-service/src/main/java/com/diagbot/web/PartController.java

@@ -31,12 +31,12 @@ public class PartController {
 
 
     @ApiOperation(value = "知识库标准化-根据已选部位返回对应的症状[by:zhoutg]",
-            notes = "partIds: 部位的id,数组<br>" +
+            notes = "partIds: 部位列表,数组<br>" +
                     "sexType:性别,1:男,2:女<br>" +
                     "age:年龄")
-    @PostMapping("/getSymptomByPartIds")
-    public RespDTO<List<PartSymptomDTO>> getSymptomByPartIds(@RequestBody PartSymptomVO partSymptomVO) {
-        return RespDTO.onSuc(partFacade.getSymptomByPartIds(partSymptomVO));
+    @PostMapping("/getSymptomByPartName")
+    public RespDTO<List<PartSymptomDTO>> getSymptomByPartName(@RequestBody PartSymptomVO partSymptomVO) {
+        return RespDTO.onSuc(partFacade.getSymptomByPartName(partSymptomVO));
     }
 
 }