Browse Source

智能预问诊常用症状

wangyu 6 years ago
parent
commit
0743904e72

+ 3 - 4
icss-service/src/main/java/com/diagbot/vo/TemplateInfoVO.java

@@ -1,11 +1,10 @@
 package com.diagbot.vo;
 
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
-
 import lombok.Getter;
 import lombok.Setter;
 
+import javax.validation.constraints.NotNull;
+
 @Getter
 @Setter
 public class TemplateInfoVO {
@@ -27,7 +26,7 @@ public class TemplateInfoVO {
 	@NotNull(message = "请输入部门id")
 	private Long hospitalDeptId;//部门id
 	
-	@NotBlank(message = "请输入模板类型")
+	@NotNull(message = "请输入模板类型")
 	private String type;//模板类型
 	
 	private Integer sex;//性别

+ 14 - 1
prec-service/src/main/java/com/diagbot/client/AiptServiceClient.java

@@ -2,15 +2,19 @@ package com.diagbot.client;
 
 import com.diagbot.client.bean.SearchData;
 import com.diagbot.client.hystrix.AiptServiceHystrix;
+import com.diagbot.dto.ConceptBaseDTO;
 import com.diagbot.dto.GetTopPatientInfoDTO;
 import com.diagbot.dto.PushDTO;
 import com.diagbot.dto.RespDTO;
+import com.diagbot.vo.ConceptUsualVO;
 import com.diagbot.vo.GetTopPatientInfoVO;
-
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 
+import javax.validation.Valid;
+import java.util.List;
+
 /**
  * @Description:调用中间层服务
  * @Author: Mark Huang
@@ -35,4 +39,13 @@ public interface AiptServiceClient {
      */
     @PostMapping("/patientInfo/getTopPatientInfo")
     RespDTO<GetTopPatientInfoDTO> getTopPatientInfo(@RequestBody GetTopPatientInfoVO getTopPatientInfoVO);
+
+    /**
+     * 常见症状
+     *
+     * @param conceptUsualVO
+     * @return
+     */
+    @PostMapping(value = "/concept/getConceptUsual")
+    RespDTO<List<ConceptBaseDTO>> getConceptUsual(@RequestBody @Valid ConceptUsualVO conceptUsualVO);
 }

+ 11 - 0
prec-service/src/main/java/com/diagbot/client/hystrix/AiptServiceHystrix.java

@@ -2,15 +2,20 @@ package com.diagbot.client.hystrix;
 
 import com.diagbot.client.AiptServiceClient;
 import com.diagbot.client.bean.SearchData;
+import com.diagbot.dto.ConceptBaseDTO;
 import com.diagbot.dto.GetTopPatientInfoDTO;
 import com.diagbot.dto.PushDTO;
 import com.diagbot.dto.RespDTO;
+import com.diagbot.vo.ConceptUsualVO;
 import com.diagbot.vo.GetTopPatientInfoVO;
 
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
 import org.springframework.web.bind.annotation.RequestBody;
 
+import javax.validation.Valid;
+import java.util.List;
+
 /**
  * @Description:调用中间层服务
  * @Author: Mark Huang
@@ -36,4 +41,10 @@ public class AiptServiceHystrix implements AiptServiceClient {
         log.error("【hystrix】调用{}异常", "getTopPatientInfo");
         return null;
     }
+
+    @Override
+    public RespDTO<List<ConceptBaseDTO>> getConceptUsual(@Valid ConceptUsualVO conceptUsualVO) {
+        log.error("【hystrix】调用{}异常", "getConceptUsual");
+        return null;
+    }
 }

+ 15 - 0
prec-service/src/main/java/com/diagbot/dto/QuestionUsualDTO.java

@@ -0,0 +1,15 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: wangyu
+ * @time: 2018/11/22 16:14
+ */
+@Getter
+@Setter
+public class QuestionUsualDTO extends ConceptBaseDTO{
+    private Long questionId;
+}

+ 58 - 0
prec-service/src/main/java/com/diagbot/enums/QuestionTypeEnum.java

@@ -0,0 +1,58 @@
+package com.diagbot.enums;
+
+import com.diagbot.core.KeyedNamed;
+import lombok.Setter;
+
+/**
+ * @Description:标签类型
+ * @Author:zhaops
+ * @time: 2018/11/21 11:39
+ */
+public enum QuestionTypeEnum implements KeyedNamed {
+    Symptom(1, "症状"),
+    Other(3, "其他史"),
+    Vital(4, "查体"),
+    Lis(5, "化验"),
+    Pacs(6, "辅检"),
+    Disease(7, "诊断"),
+    Drug(8, "药品"),
+    DrugClass(9, "药品分类"),
+    AdverseReaction(10,"不良反应"),
+    Scale(21, "量表"),
+    MedicalIndication(22, "推送指标");
+
+    @Setter
+    private Integer key;
+
+    @Setter
+    private String name;
+
+    QuestionTypeEnum(Integer key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static QuestionTypeEnum getEnum(Integer key) {
+        for (QuestionTypeEnum item : QuestionTypeEnum.values()) {
+            if (item.key == key) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(Integer key) {
+        QuestionTypeEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+
+    @Override
+    public int getKey() {
+        return key;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+}

+ 92 - 0
prec-service/src/main/java/com/diagbot/facade/QuestionUsualFacade.java

@@ -0,0 +1,92 @@
+package com.diagbot.facade;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.diagbot.client.AiptServiceClient;
+import com.diagbot.dto.ConceptBaseDTO;
+import com.diagbot.dto.QuestionUsualDTO;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.entity.QuestionInfo;
+import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.enums.QuestionTypeEnum;
+import com.diagbot.util.BeanUtil;
+import com.diagbot.util.ListUtil;
+import com.diagbot.util.RespDTOUtil;
+import com.diagbot.vo.ConceptUsualVO;
+import com.diagbot.vo.QuestionUsualVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @Description:
+ * @author: wangyu
+ * @time: 2018/11/22 16:16
+ */
+@Component
+public class QuestionUsualFacade {
+
+    @Autowired
+    AiptServiceClient aiptServiceClient;
+    @Autowired
+    QuestionFacade questionFacade;
+
+    /**
+     * 获取常用标签
+     *
+     * @param questionUsualVO
+     * @return
+     */
+    public List<QuestionUsualDTO> getQuestionUsual(QuestionUsualVO questionUsualVO) {
+        ConceptUsualVO conceptUsualVO = new ConceptUsualVO();
+        BeanUtil.copyProperties(questionUsualVO,conceptUsualVO);
+        Integer type = QuestionTypeEnum.Symptom.getKey();
+        conceptUsualVO.setType(type);
+        List<QuestionUsualDTO> questionUsualDTOList = new ArrayList<>();
+        //从知识库获取常用标签
+        RespDTO<List<ConceptBaseDTO>> conceptBaseDTORespDTO = aiptServiceClient.getConceptUsual(conceptUsualVO);
+        //如果该科室没有常用,返回全科常用
+        if( conceptBaseDTORespDTO != null && ListUtil.isEmpty(conceptBaseDTORespDTO.data)){
+            conceptUsualVO.setDeptName("全科");
+            conceptBaseDTORespDTO = aiptServiceClient.getConceptUsual(conceptUsualVO);
+        }
+        RespDTOUtil.respNGDeal(conceptBaseDTORespDTO,"获取常用标签失败");
+        if( conceptBaseDTORespDTO.data != null
+                && ListUtil.isNotEmpty(conceptBaseDTORespDTO.data)){
+            //提取标签名称
+            List<String> conceptName = conceptBaseDTORespDTO.data.stream()
+                    .map(ConceptBaseDTO::getName)
+                    .collect(Collectors.toList());
+            //与question标签匹配
+            QueryWrapper<QuestionInfo> questionInfoQueryWrapper = new QueryWrapper<>();
+            questionInfoQueryWrapper.eq("is_deleted",IsDeleteEnum.N.getKey())
+                    .in("tag_name",conceptName)
+                    .ne("tag_type",8)
+                    .eq("item_type",0)
+                    .eq("type",type);
+            List<QuestionInfo> questionInfoList = questionFacade.list(questionInfoQueryWrapper);
+            Map<String,QuestionInfo> questionInfoMap
+                    = questionInfoList.stream()
+                    .collect(Collectors.toMap(QuestionInfo::getTagName,questionInfo -> questionInfo));
+            questionUsualDTOList = BeanUtil.listCopyTo(conceptBaseDTORespDTO.data,QuestionUsualDTO.class);
+            for (QuestionUsualDTO questionUsualDTO: questionUsualDTOList) {
+                if(null != questionInfoMap.get(questionUsualDTO.getName())){
+                    questionUsualDTO.setQuestionId(questionInfoMap.get(questionUsualDTO.getName()).getId());
+                }
+            }
+            //如何没有匹配到questionId就移除
+            Iterator<QuestionUsualDTO> questionUsualDTOIterator = questionUsualDTOList.iterator();
+            while (questionUsualDTOIterator.hasNext()){
+                if(questionUsualDTOIterator.next().getQuestionId() == null){
+                    questionUsualDTOIterator.remove();
+                }
+            }
+            return questionUsualDTOList;
+        }
+        return questionUsualDTOList;
+    }
+}

+ 25 - 0
prec-service/src/main/java/com/diagbot/vo/ConceptUsualVO.java

@@ -0,0 +1,25 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @Description:
+ * @author: wangyu
+ * @time: 2019/5/7 10:00
+ */
+@Getter
+@Setter
+public class ConceptUsualVO {
+
+    @NotNull(message = "请输入科室名称")
+    private String deptName;
+    @NotNull(message = "请输入病人年龄")
+    private Integer age;
+    @NotNull(message = "请输入病人性别")
+    private Integer sexType;
+    @NotNull(message = "请输入标签类型")
+    private Integer type;
+}

+ 23 - 0
prec-service/src/main/java/com/diagbot/vo/QuestionUsualVO.java

@@ -0,0 +1,23 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @Description:
+ * @author: wangyu
+ * @time: 2018/11/22 16:15
+ */
+@Getter
+@Setter
+public class QuestionUsualVO {
+
+    @NotNull(message = "请输入科室名称")
+    private String deptName;
+    @NotNull(message = "请输入病人年龄")
+    private Integer age;
+    @NotNull(message = "请输入病人性别")
+    private Integer sexType;
+}

+ 48 - 0
prec-service/src/main/java/com/diagbot/web/QuestionUsualController.java

@@ -0,0 +1,48 @@
+package com.diagbot.web;
+
+
+import com.diagbot.annotation.SysLogger;
+import com.diagbot.dto.QuestionUsualDTO;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.facade.QuestionUsualFacade;
+import com.diagbot.vo.QuestionUsualVO;
+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.List;
+
+/**
+ * <p>
+ * 常用标签表 前端控制器
+ * </p>
+ *
+ * @author wangyu
+ * @since 2018-11-16
+ */
+@RestController
+@RequestMapping("/questionUsual")
+@Api(value = "常用标签检索API", tags = { "智能预问诊-常用标签API" })
+@SuppressWarnings("unchecked")
+public class QuestionUsualController {
+
+    @Autowired
+    private QuestionUsualFacade questionUsualFacade;
+
+    @ApiOperation(value = "知识库标准化-常用标签——根据科室获取常用标签[by:wangyu]",
+            notes = "deptName:科室名称<br>" +
+                    "age:年龄<br>" +
+                    "sexType: 性别<br>" +
+                    "<br>")
+    @PostMapping("/getQuestionUsual")
+    @SysLogger("getQuestionUsual")
+    public RespDTO<List<QuestionUsualDTO>> getQuestionUsual(@RequestBody @Valid QuestionUsualVO questionUsualVO) {
+        List<QuestionUsualDTO> data = questionUsualFacade.getQuestionUsual(questionUsualVO);
+        return RespDTO.onSuc(data);
+    }
+}