Jelajahi Sumber

Merge branch 'master' into innerDevelop

zhoutg 4 tahun lalu
induk
melakukan
05a5fa73fa

+ 67 - 0
src/main/java/com/diagbot/aggregate/PushDisAggregate.java

@@ -0,0 +1,67 @@
+package com.diagbot.aggregate;
+
+import com.diagbot.biz.push.entity.Lis;
+import com.diagbot.facade.NeoFacade;
+import com.diagbot.util.ListUtil;
+import com.diagbot.vo.NeoPushVO;
+import io.github.lvyahui8.spring.annotation.DataConsumer;
+import io.github.lvyahui8.spring.annotation.DataProvider;
+import io.github.lvyahui8.spring.annotation.InvokeParameter;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Description:
+ * @author: kwz
+ * @time: 2020/10/22 15:24
+ */
+@Component
+@Slf4j
+public class PushDisAggregate {
+    @Autowired
+    private NeoFacade neoFacade;
+    @DataProvider("pushAll")
+    public List<String> getDis(
+            @InvokeParameter("allDis") List<String> allDis,
+            @InvokeParameter("pushVo") NeoPushVO pushVO,
+            @InvokeParameter("lis") List<Lis> lises,
+            @DataConsumer("pushDisBySymptomOrVital") List<String> disBySv,
+            @DataConsumer("pushDisByLis") List<String> disByLis,
+            @DataConsumer("pushDisByPr") List<String> disByPr
+    ){
+        List<String> allPushDis = new ArrayList<>();
+        addDis(allPushDis,disBySv);
+        addDis(allPushDis,disByLis);
+        addDis(allPushDis,disByPr);
+        return allPushDis;
+    }
+
+    private void addDis(List<String> allPushDis, List<String> disByLis) {
+        if (ListUtil.isNotEmpty(disByLis)) {
+            allPushDis.addAll(disByLis);
+        }
+    }
+
+    @DataProvider("pushDisBySymptomOrVital")
+    public List<String> pushDisBySym(@InvokeParameter("pushVo") NeoPushVO pushVO,@InvokeParameter("allDis") List<String> allDis) {
+        neoFacade.pushDisBySymptomOrVital(pushVO,allDis);
+        return allDis;
+    }
+
+    @DataProvider("pushDisByLis")
+    public List<String> pushDisByL(@InvokeParameter("allDis") List<String> allDis,@InvokeParameter("lis") List<Lis> lises) {
+        neoFacade.pushDisByLis(allDis,lises);
+        return allDis;
+    }
+
+    @DataProvider("pushDisByPr")
+    public List<String> pushDisByPacsRes(@InvokeParameter("pushVo") NeoPushVO pushVO,@InvokeParameter("allDis") List<String> allDis) {
+        neoFacade.pushDisByPacs(pushVO,allDis);
+        return allDis;
+    }
+
+}

+ 3 - 0
src/main/java/com/diagbot/dto/NodeNeoDTO.java

@@ -28,4 +28,7 @@ public class NodeNeoDTO {
 
     // 取值类型(0:正常取区间,1:取两头)
     private Integer valType = 0;
+
+    // 匹配方式 0:精确匹配,1:包含匹配
+    private int exactMatch = 0;
 }

+ 0 - 18
src/main/java/com/diagbot/entity/relationship/PacsAllergen.java

@@ -1,18 +0,0 @@
-package com.diagbot.entity.relationship;
-
-import com.diagbot.entity.node.PacsName;
-import com.diagbot.entity.node.Allergen;
-import com.diagbot.entity.relationship.base.BaseRelation;
-import lombok.Getter;
-import lombok.Setter;
-import org.neo4j.ogm.annotation.*;
-
-@Getter
-@Setter@RelationshipEntity(type = "辅助检查名称禁忌过敏原")
-public class PacsAllergen extends BaseRelation {
-    @StartNode
-    private PacsName pacsName;
-
-    @EndNode
-    private Allergen allergen;
-}

+ 0 - 18
src/main/java/com/diagbot/entity/relationship/PacsClinicalFinding.java

@@ -1,18 +0,0 @@
-package com.diagbot.entity.relationship;
-
-import com.diagbot.entity.node.PacsName;
-import com.diagbot.entity.node.ClinicalFinding;
-import com.diagbot.entity.relationship.base.BaseRelation;
-import lombok.Getter;
-import lombok.Setter;
-import org.neo4j.ogm.annotation.*;
-
-@Getter
-@Setter@RelationshipEntity(type = "辅助检查名称禁忌临床表现")
-public class PacsClinicalFinding extends BaseRelation {
-    @StartNode
-    private PacsName pacsName;
-
-    @EndNode
-    private ClinicalFinding clinicalFinding;
-}

+ 0 - 18
src/main/java/com/diagbot/entity/relationship/PacsConflictDevice.java

@@ -1,18 +0,0 @@
-package com.diagbot.entity.relationship;
-
-import com.diagbot.entity.node.PacsName;
-import com.diagbot.entity.node.ConflictDevice;
-import com.diagbot.entity.relationship.base.BaseRelation;
-import lombok.Getter;
-import lombok.Setter;
-import org.neo4j.ogm.annotation.*;
-
-@Getter
-@Setter@RelationshipEntity(type = "辅助检查名称禁忌禁忌医疗器械及物品")
-public class PacsConflictDevice extends BaseRelation {
-    @StartNode
-    private PacsName pacsName;
-
-    @EndNode
-    private ConflictDevice conflictDevice;
-}

+ 3 - 0
src/main/java/com/diagbot/entity/relationship/PacsNameDisease.java

@@ -13,6 +13,9 @@ public class PacsNameDisease extends BaseRelation {
     @StartNode
     private PacsName pacsName;
 
+    @Property(name = "匹配")
+    private Integer exactMatch;
+
     @EndNode
     private Disease disease;
 }

+ 4 - 0
src/main/java/com/diagbot/entity/relationship/YiBaoDiseaseNameSymptom.java

@@ -14,6 +14,10 @@ public class YiBaoDiseaseNameSymptom extends BaseRelation {
     @StartNode
     private YiBaoDiseaseName yiBaoDiseaseName;
 
+    // 症状与疾病相关性 0:非典型, 1:典型
+    @Property(name = "典型")
+    private Integer type;
+
     @EndNode
     private Symptom symptom;
 }

+ 23 - 36
src/main/java/com/diagbot/facade/NeoFacade.java

@@ -5,17 +5,7 @@ import com.diagbot.biz.push.entity.Item;
 import com.diagbot.biz.push.entity.Lis;
 import com.diagbot.client.ChiefPresentSimilarityServiceClient;
 import com.diagbot.client.StandConvertServiceClient;
-import com.diagbot.dto.BillNeoDTO;
-import com.diagbot.dto.CriticalNeoDTO;
-import com.diagbot.dto.HighRiskNeoDTO;
-import com.diagbot.dto.NeoPushDTO;
-import com.diagbot.dto.NodeNeoDTO;
-import com.diagbot.dto.OtherTipNeoDTO;
-import com.diagbot.dto.OtherTipPacsNeoDTO;
-import com.diagbot.dto.OtherTipTransfusionNeoDTO;
-import com.diagbot.dto.StandConvertCrfBatchDTO;
-import com.diagbot.dto.StandConvertCrfDTO;
-import com.diagbot.dto.WordCrfDTO;
+import com.diagbot.dto.*;
 import com.diagbot.entity.DiseaseInfo;
 import com.diagbot.entity.DiseaseProperty;
 import com.diagbot.entity.node.LisRemind;
@@ -31,17 +21,9 @@ import com.diagbot.util.ListUtil;
 import com.diagbot.util.NeoUtil;
 import com.diagbot.util.RedisUtil;
 import com.diagbot.util.StringUtil;
-import com.diagbot.vo.BillNeoVO;
-import com.diagbot.vo.CriticalNeoVO;
 import com.diagbot.vo.Drug;
-import com.diagbot.vo.NeoPushVO;
-import com.diagbot.vo.StandConvert;
-import com.diagbot.vo.StandConvertCrfVO;
-import com.diagbot.vo.neoPushEntity.ChiefPushVo;
-import com.diagbot.vo.neoPushEntity.Diag;
-import com.diagbot.vo.neoPushEntity.LisPushVo;
-import com.diagbot.vo.neoPushEntity.PacsPushVo;
-import com.diagbot.vo.neoPushEntity.PresentPushVo;
+import com.diagbot.vo.*;
+import com.diagbot.vo.neoPushEntity.*;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import io.github.lvyahui8.spring.facade.DataFacade;
@@ -55,13 +37,7 @@ import org.springframework.stereotype.Component;
 
 import java.math.BigDecimal;
 import java.text.DecimalFormat;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
@@ -318,12 +294,23 @@ public class NeoFacade {
         }
 
 
-        // 症状、体征推送出的疾病
+        /*// 症状、体征推送出的疾病
         pushDisBySymptomOrVital(pushVO, allDis);
         //化验推出的疾病
         pushDisByLis(allDis, lises);
         //辅检推出的疾病
-        pushDisByPacs(pushVO, allDis);
+        pushDisByPacs(pushVO, allDis);*/
+
+        try {
+            Map<String, Object> invokeParams = new HashMap<>();
+            invokeParams.put("allDis", allDis);
+            invokeParams.put("pushVo", pushVO);
+            invokeParams.put("lis", lises);
+            allDis = DataFacade.get("pushAll", invokeParams, List.class);
+        } catch (Exception e) {
+            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "并行推送疾病出错" + e.getMessage());
+        }
+
         filterAndSort(pushDis, allDis, sex, age, pd,depts);
         pushDis = addDiagFromPresent(pushDis, presentDiags);
 
@@ -339,7 +326,7 @@ public class NeoFacade {
      * @param lises
      * @return
      */
-    private List<String> pushDisBySpecialLis(List<String> depts, Double age, Integer sex, PD pd, List<Lis> lises, List<String> presentDiags) {
+    public List<String> pushDisBySpecialLis(List<String> depts, Double age, Integer sex, PD pd, List<Lis> lises, List<String> presentDiags) {
         List<String> neoPushDTOS = new ArrayList<>();
         if (ListUtil.isNotEmpty(lises)) {
             List<String> lis_dis = lises.parallelStream()
@@ -359,7 +346,7 @@ public class NeoFacade {
      * @param lis_dis
      * @param presentDiags
      */
-    private List<String> addDiagFromPresent(List<String> lis_dis, List<String> presentDiags) {
+    public List<String> addDiagFromPresent(List<String> lis_dis, List<String> presentDiags) {
         List<String> lis_dis_new = Lists.newArrayList();
         if (ListUtil.isNotEmpty(lis_dis) && ListUtil.isNotEmpty(presentDiags)) {
             if (lis_dis.size() >= 10) {
@@ -393,7 +380,7 @@ public class NeoFacade {
      * @param pushVO
      * @param allDis
      */
-    private void pushDisByPacs(NeoPushVO pushVO, List<String> allDis) {
+    public void pushDisByPacs(NeoPushVO pushVO, List<String> allDis) {
         PacsPushVo pacsPushVo = pushVO.getPacsPushVo();
         if (pacsPushVo != null) {
             List<Item> pacs = pacsPushVo.getPacs();
@@ -411,7 +398,7 @@ public class NeoFacade {
      * @param allDis
      * @param lises
      */
-    private void pushDisByLis(List<String> allDis, List<Lis> lises) {
+    public void pushDisByLis(List<String> allDis, List<Lis> lises) {
         if (ListUtil.isNotEmpty(lises)) {
             List<String> lis_dis = lises.parallelStream()
                     .map(x -> nodeRepository.getDisByLis(x.getName(), x.getUniqueName() + x.getResult()))
@@ -426,7 +413,7 @@ public class NeoFacade {
      * @param pushVO
      * @param allDis
      */
-    private void pushDisBySymptomOrVital(NeoPushVO pushVO, List<String> allDis) {
+    public void pushDisBySymptomOrVital(NeoPushVO pushVO, List<String> allDis) {
         ChiefPushVo chiefPushVo = pushVO.getChiefPushVo();
         PresentPushVo presentPushVo = pushVO.getPresentPushVo();
         List<String> symptoms = new ArrayList<>();
@@ -448,7 +435,7 @@ public class NeoFacade {
         allDis.addAll(allDis_bySymptom);
     }
 
-    private void filterAndSort(List<String> dises, List<String> allDis, int gender_code, double age, PD pd, List<String> depts) {
+    public void filterAndSort(List<String> dises, List<String> allDis, int gender_code, double age, PD pd, List<String> depts) {
         //推送出的所有疾病进行性别和年龄的过滤
         List<Map<String, String>> diseases = null;
         Map<String, Double> dis_fbl = new HashMap<>();

+ 4 - 4
src/main/java/com/diagbot/process/BillProcess.java

@@ -69,7 +69,7 @@ public class BillProcess {
         // 合并图谱数据到同一个对象中
         List<BillNeoMaxDTO> billNeoMaxDTOList = new ArrayList<>();
         for (BillNeoDTO billNeoDTO : billNeoDTOList) {
-            BillNeoMaxDTO billNeoMaxDTO =  new BillNeoMaxDTO();
+            BillNeoMaxDTO billNeoMaxDTO = new BillNeoMaxDTO();
             if (billNeoDTO.getDrugBillNeoDTO() != null) {
                 BeanUtil.copyProperties(billNeoDTO.getDrugBillNeoDTO(), billNeoMaxDTO);
                 billNeoMaxDTO.setType(TypeEnum.drug.getName());
@@ -175,7 +175,7 @@ public class BillProcess {
         List<Medicine> takeMedicine = presentLabel.getTakeMedicine();
         List<Medicine> allergyDrug = new ArrayList<>();
         List<Drug> drug = wordCrfDTO.getDrug();
-        for(Item item:drug){
+        for (Item item : drug) {
             Medicine operaData = new Medicine();
             operaData.setName(item.getName());
             operaData.setStandName(item.getUniqueName());
@@ -217,7 +217,7 @@ public class BillProcess {
         List<Operation> operations_past = pastLabel.getOperations();
         List<Item> operation = wordCrfDTO.getOperation();
         List<Operation> operationsItem = new ArrayList<>();
-        for(Item item:operation){
+        for (Item item : operation) {
             Operation operaData = new Operation();
             operaData.setName(item.getName());
             operaData.setStandName(item.getUniqueName());
@@ -229,7 +229,7 @@ public class BillProcess {
 
         // 临床表现数据
         List<Clinical> clinicals = new ArrayList<>();
-        if(chiefLabel != null && ListUtil.isNotEmpty(chiefLabel.getClinicals())){
+        if (chiefLabel != null && ListUtil.isNotEmpty(chiefLabel.getClinicals())) {
             clinicals.addAll(chiefLabel.getClinicals());
         }
         // 现病史临床表现数据先不用

+ 2 - 0
src/main/java/com/diagbot/repository/NodeInfo.java

@@ -18,4 +18,6 @@ public class NodeInfo {
     Integer range;
     // 类型
     String typeval;
+    // 匹配类型
+    Integer matchtype;
 }

+ 1 - 0
src/main/java/com/diagbot/repository/PacsNameNode.java

@@ -138,6 +138,7 @@ public class PacsNameNode {
                 nodeInfo = new NodeInfo();
                 nodeInfo.setName(disease.getDisease().getName());
                 nodeInfo.setTypeval(Constants.disease);
+                nodeInfo.setMatchtype(disease.getExactMatch());
                 pacsBillNeoDTO.getDisease().add(NeoUtil.updateNodeInfo(nodeInfo));
             }
         }

+ 1 - 0
src/main/java/com/diagbot/repository/SymptomNameRepository.java

@@ -16,6 +16,7 @@ public interface SymptomNameRepository extends Neo4jRepository<Symptom, Long> {
 
     List<Symptom> findByNameContaining(String name);
 
+//    @Query("match(d:医保疾病名称)-[r{典型:1}]->(s) where any(label in labels(s) WHERE label in ['症状', '体征']) and s.name in {py} return d.name")
     @Query("match(d:医保疾病名称)-[r]->(s) where any(label in labels(s) WHERE label in ['症状', '体征']) and s.name in {py} return d.name")
     List<String> getDisBySymptoms(@Param("py")List<String> symptoms);
 }

+ 28 - 18
src/main/java/com/diagbot/rule/CommonRule.java

@@ -40,8 +40,8 @@ public class CommonRule {
     /**
      * 比较界面元素是否在图谱中存在(匹配名称)
      *
-     * @param neoList 图谱结构
-     * @param inputLises 界面元素
+     * @param neoList       图谱结构
+     * @param inputLises    界面元素
      * @param billNeoMaxDTO 开单项名称,开单项标准名称
      * @return
      */
@@ -61,10 +61,17 @@ public class CommonRule {
             }
             if (old_stand.size() > 0) {
                 for (Map.Entry<String, String> d : old_stand.entrySet()) {
-                    BillMsg commonBillMsg = MsgUtil.getCommonSurgeryMsg(
-                            billNeoMaxDTO.getOrderName(), billNeoMaxDTO.getOrderStandName(),
-                            d.getKey(), type, billNeoMaxDTO.getType());
-                    billMsgList.add(commonBillMsg);
+                    if ("禁忌手术".equals(type)) {
+                        BillMsg commonBillMsg = MsgUtil.getCommonSurgeryMsg(
+                                billNeoMaxDTO.getOrderName(), billNeoMaxDTO.getOrderStandName(),
+                                d.getKey(), type, billNeoMaxDTO.getType());
+                        billMsgList.add(commonBillMsg);
+                    } else {
+                        BillMsg commonBillMsg = MsgUtil.getCommonBillMsg(
+                                billNeoMaxDTO.getOrderName(), billNeoMaxDTO.getOrderStandName(),
+                                d.getKey(), type, billNeoMaxDTO.getType());
+                        billMsgList.add(commonBillMsg);
+                    }
                 }
             }
         }
@@ -73,20 +80,21 @@ public class CommonRule {
     /**
      * 比较界面元素是否在图谱中存在(匹配名称)
      *
-     * @param neoList 图谱结构
-     * @param input 界面元素
+     * @param neoList       图谱结构
+     * @param input         界面元素
      * @param billNeoMaxDTO 开单项名称,开单项标准名称
      * @return
      */
     public <T> void compareItemWithBill(List<NodeNeoDTO> neoList, List<T> input, BillNeoMaxDTO billNeoMaxDTO, List<BillMsg> billMsgList, String type) {
         Map<String, String> old_stand = new HashMap<>();
         if (ListUtil.isNotEmpty(neoList) && ListUtil.isNotEmpty(input)) {
-            List<String> neoName = neoList.stream().map(x -> x.getName()).collect(Collectors.toList());
             for (T d : input) {
                 String c = (String) CoreUtil.getFieldValue(d, "uniqueName");
                 String c_name = (String) CoreUtil.getFieldValue(d, "name");
-                if (StringUtils.isNotBlank(c) && neoName.contains(c)) {
-                    old_stand.put(c_name, c);
+                for (NodeNeoDTO nodeNeoDTO : neoList) {
+                    if (CoreUtil.compareNodeName(nodeNeoDTO, c)) {
+                        old_stand.put(c_name, c);
+                    }
                 }
             }
             if (old_stand.size() > 0) {
@@ -161,7 +169,7 @@ public class CommonRule {
      */
     public <T> void repeat24BillWithType(List<BillMsg> billMsgList, List<T> itemList, String type) {
         if (ListUtil.isEmpty(itemList)) {
-            return ;
+            return;
         }
         Map<String, List<T>> map = EntityUtil.makeEntityListMap(itemList, "name");
         for (String key : map.keySet()) {
@@ -173,8 +181,8 @@ public class CommonRule {
                 Collections.sort(items, new Comparator<T>() {
                     @Override
                     public int compare(T o1, T o2) {
-                        String o1Str = (String)CoreUtil.getFieldValue(o1, "dateValue");
-                        String o2Str = (String)CoreUtil.getFieldValue(o2, "dateValue");
+                        String o1Str = (String) CoreUtil.getFieldValue(o1, "dateValue");
+                        String o2Str = (String) CoreUtil.getFieldValue(o2, "dateValue");
                         if (StringUtil.isBlank(o1Str) || StringUtil.isBlank(o2Str)) {
                             return -1;
                         } else {
@@ -186,7 +194,7 @@ public class CommonRule {
                 // 比较时间是否在24小时内
                 List<Date> dateList = new ArrayList<>();
                 for (T it : items) {
-                    String dateValue = (String)CoreUtil.getFieldValue(it, "dateValue");
+                    String dateValue = (String) CoreUtil.getFieldValue(it, "dateValue");
                     if (StringUtil.isNotBlank(dateValue)) {
                         Date cur = CatalogueUtil.parseStringDate(dateValue);
                         // 如果为null,说明日期格式出错,不比较
@@ -194,8 +202,8 @@ public class CommonRule {
                             if (ListUtil.isNotEmpty(dateList)) {
                                 Date last = dateList.get(dateList.size() - 1);
                                 if (!CatalogueUtil.compareTime(last, cur, 60L * 24)) {
-                                    String name = (String)CoreUtil.getFieldValue(it, "name");
-                                    String uniqueName = (String)CoreUtil.getFieldValue(it, "uniqueName");
+                                    String name = (String) CoreUtil.getFieldValue(it, "name");
+                                    String uniqueName = (String) CoreUtil.getFieldValue(it, "uniqueName");
                                     BillMsg commonBillMsg = MsgUtil.getBillMsg24Repeat(
                                             name, uniqueName, name, type);
                                     billMsgList.add(commonBillMsg);
@@ -215,6 +223,7 @@ public class CommonRule {
 
     /**
      * 高风险药品、手术
+     *
      * @param highRiskNeoDTO
      * @param highRiskList
      */
@@ -226,11 +235,12 @@ public class CommonRule {
 
     /**
      * fa'zha
+     *
      * @param highRiskNeoDTO
      * @param highRiskList
      */
     public void highRiskComplex(NodeNeoDTO nodeNeoDTO, List<BillMsg> highRiskList, HighRiskNeoDTO highRiskNeoDTO) {
-        BillMsg billMsg = MsgUtil.getComplexOperationMsg( nodeNeoDTO.getVal(), highRiskNeoDTO.getName(),nodeNeoDTO.getTermtype());
+        BillMsg billMsg = MsgUtil.getComplexOperationMsg(nodeNeoDTO.getVal(), highRiskNeoDTO.getName(), nodeNeoDTO.getTermtype());
         highRiskList.add(billMsg);
     }
 }

+ 23 - 0
src/main/java/com/diagbot/util/CoreUtil.java

@@ -759,6 +759,29 @@ public class CoreUtil {
         return str;
     }
 
+    /**
+     * 比较node名称是否匹配
+     *
+     * @param nodeNeoDTO
+     * @param input
+     * @return
+     */
+    public static Boolean compareNodeName(NodeNeoDTO nodeNeoDTO, String input) {
+        if (StringUtil.isBlank(input) || nodeNeoDTO == null || StringUtil.isBlank(nodeNeoDTO.getName())) {
+            return false;
+        }
+        if (nodeNeoDTO.getExactMatch() == 0) { // 精确匹配
+            if (input.equals(nodeNeoDTO.getName())) {
+                return true;
+            }
+        } else { // 模糊匹配
+            if (input.contains(nodeNeoDTO.getName())) {
+                return true;
+            }
+        }
+        return false;
+    }
+
     public static void main(String[] args) {
         String ageStr = ".545458";
         System.out.println(Double.parseDouble(ageStr));

+ 4 - 0
src/main/java/com/diagbot/util/NeoUtil.java

@@ -54,6 +54,10 @@ public class NeoUtil {
         type = (null==type)?"":type;
         nodeNeoDTO.setTermtype(type);
 
+        if (nodeInfo.getMatchtype()!=null && nodeInfo.getMatchtype()==1) {
+            nodeNeoDTO.setExactMatch(1);
+        }
+
         return nodeNeoDTO;
     }