Browse Source

1、推理结果标志是否有静态知识

zhaops 4 years ago
parent
commit
8e931d9f0b

+ 1 - 0
src/main/java/com/diagbot/config/ResourceServerConfigurer.java

@@ -103,6 +103,7 @@ public class ResourceServerConfigurer extends ResourceServerConfigurerAdapter {
                 .antMatchers("/sys/tokenPermission/delPermission").permitAll()
                 .antMatchers("/sys/tokenPermission/getPermission").permitAll()
                 .antMatchers("/sys/push/push").permitAll()
+                .antMatchers("/sys/push/pushApi").permitAll()
                 .antMatchers("/sys/push/indicationPush").permitAll()
                 .antMatchers("/demo/templateInfo/updateByIdUsNames").permitAll()
                 .antMatchers("/demo/templateInfo/saveTemplateInfo").permitAll()

+ 1 - 0
src/main/java/com/diagbot/config/security/UrlAccessDecisionManager.java

@@ -146,6 +146,7 @@ public class UrlAccessDecisionManager implements AccessDecisionManager {
                 || matchers("/sys/tokenPermission/delPermission", request)
                 || matchers("/sys/tokenPermission/getPermission", request)
                 || matchers("/sys/push/push", request)
+                || matchers("/sys/push/pushApi", request)
                 || matchers("/sys/push/indicationPush", request)
                 || matchers("/demo/templateInfo/updateByIdUsNames", request)
                 || matchers("/demo/templateInfo/saveTemplateInfo", request)

+ 4 - 0
src/main/java/com/diagbot/dto/PushBaseDTO.java

@@ -17,4 +17,8 @@ public class PushBaseDTO {
     private String name;
     //医院端名称
     private List<String> hisNameList;
+    /**
+     * 是否有静态知识
+     */
+    private Integer hasInfo = 0;
 }

+ 2 - 2
src/main/java/com/diagbot/enums/ConceptTypeEnum.java

@@ -12,8 +12,8 @@ public enum ConceptTypeEnum implements KeyedNamed {
     All(0, "全部"),
     Disease(1, "诊断"),
     Drug(2, "药品"),
-    Lis(3, "检验套餐"),
-    LisPack(4, "检验明细"),
+    LisPack(3, "检验套餐"),
+    Lis(4, "检验明细"),
     Pacs(5, "检查"),
     Opeartion(6, "手术和操作");
 

+ 38 - 0
src/main/java/com/diagbot/facade/ConceptInfoFacade.java

@@ -649,4 +649,42 @@ public class ConceptInfoFacade extends ConceptInfoServiceImpl {
         }
         return conceptInfoDTO;
     }
+
+    /**
+     * 获取静态知识map Map<name_type,List<ConceptDetail>>
+     *
+     * @param nameList
+     * @return
+     */
+    public Map<String, List<ConceptDetail>> getDetailByConcept(List<String> nameList) {
+        Map<String, List<ConceptDetail>> retMap = new HashMap<>();
+        List<DictionaryInfoDTO> dicList = dictionaryFacade.getListByGroupType(8);
+        QueryWrapper<ConceptInfo> conceptInfoQueryWrapper = new QueryWrapper<>();
+        conceptInfoQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey());
+        if (ListUtil.isNotEmpty(nameList)) {
+            conceptInfoQueryWrapper.in("name", nameList);
+        }
+        List<ConceptInfo> conceptInfoList = this.list(conceptInfoQueryWrapper);
+        Map<Long, ConceptInfo> conceptMap = EntityUtil.makeEntityMap(conceptInfoList, "id");
+
+        if (ListUtil.isNotEmpty(conceptInfoList)) {
+            List<Long> conceptIds = conceptInfoList.stream()
+                    .map(i -> i.getId())
+                    .collect(Collectors.toList());
+
+            QueryWrapper<ConceptDetail> conceptDetailQueryWrapper = new QueryWrapper<>();
+            conceptDetailQueryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
+                    .in("concept_id", conceptIds);
+            List<ConceptDetail> conceptDetailList = conceptDetailFacade.list(conceptDetailQueryWrapper);
+            Map<Long, List<ConceptDetail>> detailMap
+                    = EntityUtil.makeEntityListMap(conceptDetailList, "conceptId");
+
+            for (Map.Entry<Long, ConceptInfo> entry : conceptMap.entrySet()) {
+                if (detailMap.containsKey(entry.getKey())) {
+                    retMap.put(entry.getValue().getName() + "_" + convertTypeName(entry.getValue().getType(), 2, dicList), detailMap.get(entry.getKey()));
+                }
+            }
+        }
+        return retMap;
+    }
 }

+ 89 - 1
src/main/java/com/diagbot/facade/PushFacade.java

@@ -5,7 +5,10 @@ import com.diagbot.dto.IndicationDTO;
 import com.diagbot.dto.PushBaseDTO;
 import com.diagbot.dto.PushDTO;
 import com.diagbot.dto.RespDTO;
+import com.diagbot.entity.ConceptDetail;
+import com.diagbot.enums.ConceptTypeEnum;
 import com.diagbot.util.BeanUtil;
+import com.diagbot.util.ListUtil;
 import com.diagbot.util.RespDTOUtil;
 import com.diagbot.vo.IndicationPushVO;
 import com.diagbot.vo.PushVO;
@@ -17,6 +20,7 @@ import org.springframework.stereotype.Component;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @Description:
@@ -29,6 +33,8 @@ public class PushFacade {
     private AssembleFacade assembleFacade;
     @Autowired
     private CdssCoreClient cdssCoreClient;
+    @Autowired
+    private ConceptInfoFacade conceptInfoFacade;
 
     /**
      * 基础推理-症状、查体、化验、辅检、诊断
@@ -105,13 +111,18 @@ public class PushFacade {
         disItem1.setName("急性胰腺炎");
         dis.add(disItem1);
         PushBaseDTO disItem2 = new PushBaseDTO();
-        disItem2.setName("咳嗽");
+        disItem2.setName("无晶状体眼");
         dis.add(disItem2);
         Map<String, List<PushBaseDTO>> disMap = new HashMap<>();
         disMap.put("可能诊断", dis);
         data.setDis(disMap);
         //TODO 出参映射
         data = assembleFacade.assemblePushDTO(data, pushVO.getHospitalId());
+        //TODO 是否有静态信息
+        if (pushVO.getGetStaticKnowledge() != null
+                && pushVO.getGetStaticKnowledge().equals(1)) {
+            data = getStaticKnoledge(data);
+        }
         return data;
     }
 
@@ -159,4 +170,81 @@ public class PushFacade {
         IndicationDTO indicationDTO = resp.data;
         return indicationDTO;
     }
+
+    /**
+     * 推理结果标志是否包含静态知识
+     *
+     * @param pushDTO
+     * @return
+     */
+    public PushDTO getStaticKnoledge(PushDTO pushDTO) {
+        List<String> conceptNameList = Lists.newLinkedList();
+        List<PushBaseDTO> conceptBaseList = Lists.newArrayList();
+        if (ListUtil.isNotEmpty(pushDTO.getLis())) {
+            conceptBaseList.addAll(pushDTO.getLis());
+        }
+        if (ListUtil.isNotEmpty(pushDTO.getPacs())) {
+            conceptBaseList.addAll(pushDTO.getPacs());
+        }
+        if (pushDTO.getDis() != null) {
+            for (Map.Entry<String, List<PushBaseDTO>> entry : pushDTO.getDis().entrySet()) {
+                if (ListUtil.isNotEmpty(entry.getValue())) {
+                    conceptBaseList.addAll(entry.getValue());
+                }
+            }
+        }
+        if (ListUtil.isNotEmpty(pushDTO.getMedicines())) {
+            conceptBaseList.addAll(pushDTO.getMedicines());
+        }
+        if (ListUtil.isNotEmpty(pushDTO.getOperations())) {
+            conceptBaseList.addAll(pushDTO.getOperations());
+        }
+        if (ListUtil.isNotEmpty(conceptBaseList)) {
+            conceptNameList = conceptBaseList.stream()
+                    .map(i -> i.getName())
+                    .collect(Collectors.toList());
+
+            Map<String, List<ConceptDetail>> conceptDetailMap = conceptInfoFacade.getDetailByConcept(conceptNameList);
+            if (pushDTO.getDis() != null) {
+                for (Map.Entry<String, List<PushBaseDTO>> entry : pushDTO.getDis().entrySet()) {
+                    if (ListUtil.isNotEmpty(entry.getValue())) {
+                        entry.getValue().forEach(item -> {
+                            if (conceptDetailMap.containsKey(item.getName() + "_" + ConceptTypeEnum.getName(1))) {
+                                item.setHasInfo(1);
+                            }
+                        });
+                    }
+                }
+            }
+            if (ListUtil.isNotEmpty(pushDTO.getLis())) {
+                pushDTO.getLis().forEach(item -> {
+                    if (conceptDetailMap.containsKey(item.getName() + "_" + ConceptTypeEnum.getName(3))) {
+                        item.setHasInfo(1);
+                    }
+                });
+            }
+            if (ListUtil.isNotEmpty(pushDTO.getPacs())) {
+                pushDTO.getPacs().forEach(item -> {
+                    if (conceptDetailMap.containsKey(item.getName() + "_" + ConceptTypeEnum.getName(5))) {
+                        item.setHasInfo(1);
+                    }
+                });
+            }
+            if (ListUtil.isNotEmpty(pushDTO.getMedicines())) {
+                pushDTO.getMedicines().forEach(item -> {
+                    if (conceptDetailMap.containsKey(item.getName() + "_" + ConceptTypeEnum.getName(2))) {
+                        item.setHasInfo(1);
+                    }
+                });
+            }
+            if (ListUtil.isNotEmpty(pushDTO.getOperations())) {
+                pushDTO.getOperations().forEach(item -> {
+                    if (conceptDetailMap.containsKey(item.getName() + "_" + ConceptTypeEnum.getName(6))) {
+                        item.setHasInfo(1);
+                    }
+                });
+            }
+        }
+        return pushDTO;
+    }
 }

+ 6 - 0
src/main/java/com/diagbot/vo/PushVO.java

@@ -1,5 +1,6 @@
 package com.diagbot.vo;
 
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -15,4 +16,9 @@ public class PushVO extends SearchData {
      * 推理类型(1:症状,4:查体结果,5:检验,6:检查,7:诊断,8:药品,9:手术)
      */
     private String featureType = "";
+    /**
+     * 是否获取静态知识(0:不获取,1:获取)
+     */
+    @ApiModelProperty(hidden = true)
+    private Integer getStaticKnowledge = 0;
 }

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

@@ -31,7 +31,9 @@ public class PushController {
     @Autowired
     private PushFacade pushFacade;
 
-    @ApiOperation(value = "基础推理[by:zhaops]", notes = "featureType 类型(多选必填),1:症状,4:查体结果,5:检验,6:检查,7:诊断,8:药品,9:手术")
+    @ApiOperation(value = "基础推理[by:zhaops]",
+            notes = "featureType 类型(多选必填),1:症状,4:查体结果,5:检验,6:检查,7:诊断,8:药品,9:手术<br>" +
+                    "getStaticKnowledge 是否获取静态知识 0:不获取,1:获取")
     @PostMapping("/push")
     @SysLogger("push")
     @TokenAuth
@@ -40,6 +42,16 @@ public class PushController {
         return RespDTO.onSuc(data);
     }
 
+    @ApiOperation(value = "基础推理-接口模式[by:zhaops]",
+            notes = "featureType 类型(多选必填),1:症状,4:查体结果,5:检验,6:检查,7:诊断,8:药品,9:手术")
+    @PostMapping("/pushApi")
+    @SysLogger("pushApi")
+    @TokenAuth
+    public RespDTO<PushDTO> pushApi(@RequestBody @Valid PushVO pushVO) {
+        PushDTO data = pushFacade.push(pushVO);
+        return RespDTO.onSuc(data);
+    }
+
     @ApiOperation(value = "开单合理项推理[by:zhaops]", notes = "ruleType(1:危急值提醒,2:开单合理项,3:高危药品、手术)")
     @PostMapping("/indicationPush")
     @SysLogger("indicationPush")