Bläddra i källkod

Merge branch 'master' into innerDevelop

gaodm 4 år sedan
förälder
incheckning
b245674708
38 ändrade filer med 583 tillägg och 371 borttagningar
  1. 3 0
      src/main/java/com/diagbot/dto/BillNeoMaxDTO.java
  2. 4 1
      src/main/java/com/diagbot/dto/PacsBillNeoDTO.java
  3. 4 2
      src/main/java/com/diagbot/dto/WordCrfDTO.java
  4. 7 0
      src/main/java/com/diagbot/entity/node/PacsName.java
  5. 2 6
      src/main/java/com/diagbot/entity/node/PacsRemind.java
  6. 22 0
      src/main/java/com/diagbot/entity/node/PacsResult.java
  7. 2 1
      src/main/java/com/diagbot/enums/NeoEnum.java
  8. 16 7
      src/main/java/com/diagbot/facade/BillFacade.java
  9. 9 12
      src/main/java/com/diagbot/facade/CommonFacade.java
  10. 1 1
      src/main/java/com/diagbot/facade/CriticalFacade.java
  11. 58 104
      src/main/java/com/diagbot/facade/NeoFacade.java
  12. 26 11
      src/main/java/com/diagbot/facade/TestFacade.java
  13. 14 1
      src/main/java/com/diagbot/process/BillProcess.java
  14. 6 5
      src/main/java/com/diagbot/process/OtherTipProcess.java
  15. 57 60
      src/main/java/com/diagbot/process/PushProcess.java
  16. 13 11
      src/main/java/com/diagbot/repository/CombiOperationNode.java
  17. 22 22
      src/main/java/com/diagbot/repository/LisNameNode.java
  18. 15 13
      src/main/java/com/diagbot/repository/LisSetNode.java
  19. 19 17
      src/main/java/com/diagbot/repository/MedicineNode.java
  20. 5 8
      src/main/java/com/diagbot/repository/PacsCriticalNode.java
  21. 26 13
      src/main/java/com/diagbot/repository/PacsNameNode.java
  22. 5 5
      src/main/java/com/diagbot/repository/PacsRemindNode.java
  23. 52 0
      src/main/java/com/diagbot/repository/PacsResultRepository.java
  24. 14 11
      src/main/java/com/diagbot/repository/TransfusionRemindNode.java
  25. 1 1
      src/main/java/com/diagbot/repository/YiBaoDiseaseNode.java
  26. 14 12
      src/main/java/com/diagbot/repository/YiBaoOperationNameNode.java
  27. 2 2
      src/main/java/com/diagbot/rule/AgeRule.java
  28. 39 1
      src/main/java/com/diagbot/rule/CommonRule.java
  29. 64 13
      src/main/java/com/diagbot/util/CoreUtil.java
  30. 19 0
      src/main/java/com/diagbot/util/MsgUtil.java
  31. 4 5
      src/main/java/com/diagbot/util/NeoUtil.java
  32. 10 8
      src/main/java/com/diagbot/vo/BillNeoVO.java
  33. 1 1
      src/main/java/com/diagbot/vo/CriticalNeoVO.java
  34. 4 1
      src/main/java/com/diagbot/vo/NeoPushVO.java
  35. 8 8
      src/main/java/com/diagbot/vo/RetrievalVO.java
  36. 8 2
      src/main/java/com/diagbot/vo/SearchData.java
  37. 4 4
      src/main/java/com/diagbot/vo/TestIndicationVO.java
  38. 3 2
      src/main/java/com/diagbot/vo/neoPushEntity/PacsPushVo.java

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

@@ -66,4 +66,7 @@ public class BillNeoMaxDTO {
     // 禁用辅助检查描述
     private List<NodeNeoDTO> pacsDesc = new ArrayList<>();
 
+    // 互斥开单辅助检查
+    private List<NodeNeoDTO> pacsOrder = new ArrayList<>();
+
 }

+ 4 - 1
src/main/java/com/diagbot/dto/PacsBillNeoDTO.java

@@ -39,9 +39,12 @@ public class PacsBillNeoDTO {
     // 禁忌实验室检查
     private List<NodeNeoDTO> lis = new ArrayList<>();
 
-    // 禁忌实验室检查
+    // 禁忌辅助检查
     private List<NodeNeoDTO> pacs = new ArrayList<>();
 
+    // 互斥开单辅助检查
+    private List<NodeNeoDTO> pacsOrder = new ArrayList<>();
+
     // 禁忌疾病
     private List<NodeNeoDTO> disease = new ArrayList<>();
 

+ 4 - 2
src/main/java/com/diagbot/dto/WordCrfDTO.java

@@ -30,8 +30,10 @@ import java.util.List;
 @Data
 public class WordCrfDTO {
     private Long hospitalId;
-    // 年龄
-    private Integer age;
+    // 年龄(字符串,如:3月)
+    private String age;
+    // 年龄数字数据
+    private Double ageNum;
     // 性别(1:男,2:女)
     private Integer sex;
     // 化验项目和结果

+ 7 - 0
src/main/java/com/diagbot/entity/node/PacsName.java

@@ -53,4 +53,11 @@ public class PacsName extends BaseNode  {
 
 	@Relationship(type = "辅助检查名称相关医保疾病名称", direction = Relationship.OUTGOING)
 	private Set<YiBaoDiseaseName> disease = new HashSet<>();
+
+	@Relationship(type = "辅助检查名称开单互斥辅助检查名称", direction = Relationship.OUTGOING)
+	private Set<PacsName> conflictpacs_out = new HashSet<>();
+
+	@Relationship(type = "辅助检查名称开单互斥辅助检查名称", direction = Relationship.INCOMING)
+	private Set<PacsName> conflictpacs_in = new HashSet<>();
+
 }

+ 2 - 6
src/main/java/com/diagbot/entity/node/PacsRemind.java

@@ -5,10 +5,6 @@ import lombok.Getter;
 import lombok.Setter;
 import org.neo4j.ogm.annotation.NodeEntity;
 import org.neo4j.ogm.annotation.Property;
-import org.neo4j.ogm.annotation.Relationship;
-
-import java.util.HashSet;
-import java.util.Set;
 
 @Setter
 @Getter
@@ -16,10 +12,10 @@ import java.util.Set;
 public class PacsRemind extends BaseNode  {
 
 	@Property(name = "年龄最小值")
-	private Integer minval;
+	private Double minval;
 
 	@Property(name = "年龄最大值")
-	private Integer maxval;
+	private Double maxval;
 
 	@Property(name = "年龄范围")
 	private Integer range=0;

+ 22 - 0
src/main/java/com/diagbot/entity/node/PacsResult.java

@@ -0,0 +1,22 @@
+package com.diagbot.entity.node;
+
+import com.diagbot.entity.node.base.BaseNode;
+import lombok.Getter;
+import lombok.Setter;
+import org.neo4j.ogm.annotation.NodeEntity;
+import org.neo4j.ogm.annotation.Relationship;
+
+import java.util.HashSet;
+import java.util.Set;
+
+@Setter
+@Getter
+@NodeEntity(label = "辅助检查名称结果")
+public class PacsResult extends BaseNode  {
+
+
+	@Relationship(type = "辅助检查名称结果相关医保疾病名称", direction = Relationship.OUTGOING)
+	private Set<YiBaoDiseaseName> disease = new HashSet<>();
+
+
+}

+ 2 - 1
src/main/java/com/diagbot/enums/NeoEnum.java

@@ -25,7 +25,8 @@ public enum NeoEnum implements KeyedNamed {
     conflictmeds(12, "配伍禁忌"),
     vitals(13, "禁忌查体"),
     pacsDesc(14, "禁忌辅助检查描述"),
-    medEqu(15, "禁忌医疗器械及物品");
+    medEqu(15, "禁忌医疗器械及物品"),
+    exclusion(16, "开单项互斥");
 
     @Setter
     private int key;

+ 16 - 7
src/main/java/com/diagbot/facade/BillFacade.java

@@ -15,7 +15,9 @@ import com.diagbot.vo.ItemExt;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @Description: 开单合理性facade
@@ -55,37 +57,44 @@ public class BillFacade {
         List<Drug> drugs = wordCrfDTO.getDrugOrder();
 
         for (Drug item : drugs) {
-            billNeoVO.getDrugList().put(item.getName(), item.getUniqueName());
+            billNeoVO.getDrugList().add(new HashMap<String, String>()
+                        {{put(item.getName(), item.getUniqueName());}});
         }
 
         List<Pacs> pacslist = wordCrfDTO.getPacsOrder();
         for (Pacs pacs : pacslist) {
-            billNeoVO.getPacsList().put(pacs.getName(), pacs.getUniqueName());
+            billNeoVO.getPacsList().add(new HashMap<String, String>()
+                        {{put(pacs.getName(), pacs.getUniqueName());}});
         }
 
         List<Lis> lislist = wordCrfDTO.getLisOrder();
         for (Lis lis : lislist) {
             if (StringUtil.isBlank(lis.getDetailName())) {
-                billNeoVO.getLisList().put(lis.getName(), lis.getUniqueName());
+                billNeoVO.getLisList().add(new HashMap<String, String>()
+                        {{put(lis.getName(), lis.getUniqueName());}});
             }
             else {
-                billNeoVO.getLisDetailList().put(lis.getDetailName(), lis.getUniqueName());
+                billNeoVO.getLisDetailList().add(new HashMap<String, String>()
+                        {{put(lis.getName(), lis.getUniqueName());}});
             }
         }
 
         List<Item> operations = wordCrfDTO.getOperationOrder();
         for (Item item : operations) {
-            billNeoVO.getOperationList().put(item.getName(), item.getUniqueName());
+            billNeoVO.getOperationList().add(new HashMap<String, String>()
+                        {{put(item.getName(), item.getUniqueName());}});
         }
 
         List<Item> diags = wordCrfDTO.getDiagOrder();
         for (Item item : diags) {
-            billNeoVO.getDiagList().put(item.getName(), item.getUniqueName());
+            billNeoVO.getDiagList().add(new HashMap<String, String>()
+                        {{put(item.getName(), item.getUniqueName());}});
         }
 
         List<ItemExt> transfusions = wordCrfDTO.getTransfusionOrder();
         for (ItemExt item : transfusions) {
-            billNeoVO.getTransfusionList().put(item.getName(), item.getUniqueName());
+            billNeoVO.getTransfusionList().add(new HashMap<String, String>()
+                        {{put(item.getName(), item.getUniqueName());}});
         }
         return billNeoVO;
     }

+ 9 - 12
src/main/java/com/diagbot/facade/CommonFacade.java

@@ -22,13 +22,7 @@ import com.diagbot.util.StringUtil;
 import com.diagbot.vo.NeoPushVO;
 import com.diagbot.vo.SearchData;
 import com.diagbot.vo.StandConvert;
-import com.diagbot.vo.neoPushEntity.ChiefPushVo;
-import com.diagbot.vo.neoPushEntity.Diag;
-import com.diagbot.vo.neoPushEntity.DiagVo;
-import com.diagbot.vo.neoPushEntity.Drug;
-import com.diagbot.vo.neoPushEntity.LisPushVo;
-import com.diagbot.vo.neoPushEntity.PresentPushVo;
-import com.diagbot.vo.neoPushEntity.Symptom;
+import com.diagbot.vo.neoPushEntity.*;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
@@ -59,6 +53,7 @@ public class CommonFacade {
         AIAnalyze aiAnalyze = new AIAnalyze(crfServiceClient);
         WordCrfDTO wordCrfDTO = new WordCrfDTO();
         wordCrfDTO.setHospitalId(searchData.getHospitalId());
+        wordCrfDTO.setAgeNum(searchData.getAgeNum());
         wordCrfDTO.setAge(searchData.getAge());
         wordCrfDTO.setSex(searchData.getSex());
         if (searchData.getDiseaseName() != null && StringUtils.isNotBlank(searchData.getDiseaseName().getName())) {
@@ -289,9 +284,11 @@ public class CommonFacade {
         List<Lis> lis = wordCrfDTO.getLis();
 //        List<Pacs> pacs = wordCrfDTO.getPacs();
         // TODO 辅检
+        PacsLabel pacsLabel = wordCrfDTO.getPacsLabel();
         // List<PacsNew> pacsNewList = wordCrfDTO.getPacsLabel().getPacsNewList();
         pushVO.setAge(wordCrfDTO.getAge());
         pushVO.setSex(wordCrfDTO.getSex());
+        pushVO.setAgeNum(wordCrfDTO.getAgeNum());
         pushVO.setDiaeaseName(diseaseName);
         if (chiefLabel != null) {
             if(ListUtil.isNotEmpty(chiefLabel.getClinicals())){
@@ -345,11 +342,11 @@ public class CommonFacade {
             pushVO.setLisPushVo(lisPushVo);
         }
         // TODO 辅检
-        // if(ListUtil.isNotEmpty(pacsNewList)){
-        //     PacsPushVo pacsPushVo = new PacsPushVo();
-        //     pacsPushVo.setPacs(pacsNewList);
-        //     pushVO.setPacsPushVo(pacsPushVo);
-        // }
+        if(pacsLabel != null){
+            PacsPushVo pacsPushVo = new PacsPushVo();
+            pacsPushVo.setPacs(pacsLabel.getRes());
+            pushVO.setPacsPushVo(pacsPushVo);
+        }
         if(ListUtil.isNotEmpty(diags)){
             DiagVo diagVo = new DiagVo();
             List<Diag> diseases = diags.stream().map(x -> {

+ 1 - 1
src/main/java/com/diagbot/facade/CriticalFacade.java

@@ -60,7 +60,7 @@ public class CriticalFacade {
     public CriticalNeoVO fillCriticalNeo(WordCrfDTO wordCrfDTO) {
         CriticalNeoVO criticalNeoVO = new CriticalNeoVO();
 
-        criticalNeoVO.setAge(wordCrfDTO.getAge());
+        criticalNeoVO.setAge(wordCrfDTO.getAgeNum());
         criticalNeoVO.setSex(wordCrfDTO.getSex());
         criticalNeoVO.setVitalLabel(wordCrfDTO.getVitalLabel());
         criticalNeoVO.setLis(wordCrfDTO.getLis());

+ 58 - 104
src/main/java/com/diagbot/facade/NeoFacade.java

@@ -1,25 +1,12 @@
 package com.diagbot.facade;
 
 import com.alibaba.fastjson.JSONArray;
+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.PushBaseDTO;
-import com.diagbot.dto.StandConvertCrfBatchDTO;
-import com.diagbot.dto.StandConvertCrfDTO;
-import com.diagbot.dto.WordCrfDTO;
-import com.diagbot.entity.node.LisRemind;
-import com.diagbot.entity.node.Medicine;
-import com.diagbot.entity.node.Symptom;
-import com.diagbot.entity.node.YiBaoDiseaseName;
+import com.diagbot.dto.*;
+import com.diagbot.entity.node.*;
 import com.diagbot.enums.RedisEnum;
 import com.diagbot.enums.StandConvertEnum;
 import com.diagbot.exception.CommonErrorCode;
@@ -29,14 +16,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.*;
 import com.diagbot.vo.neoPushEntity.ChiefPushVo;
-import com.diagbot.vo.neoPushEntity.Diag;
+import com.diagbot.vo.neoPushEntity.PacsPushVo;
 import com.diagbot.vo.neoPushEntity.PresentPushVo;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
@@ -50,14 +32,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.Iterator;
-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;
@@ -117,6 +92,8 @@ public class NeoFacade {
     TransfusionSuggestRepository transfusionSuggestRepository;
     @Autowired
     PacsRemindRepository pacsRemindRepository;
+    @Autowired
+    PacsResultRepository pacsResultRepository;
 
     /**
      * 返回药品缓存信息
@@ -225,14 +202,14 @@ public class NeoFacade {
      * @param pushVO
      * @return
      */
-    public List<NeoPushDTO> getReversePush(NeoPushVO pushVO) {
-        List<NeoPushDTO> neoPushDTOS = new ArrayList<>();
+    public NeoPushDTO getReversePush(NeoPushVO pushVO) {
+        NeoPushDTO neoPushDTO = new NeoPushDTO();
         // 如果有诊断名称,则通过诊断反推
         if (null != pushVO.getDiagVo() && pushVO.getDiagVo().getDiags().size() > 0) {
-            neoPushDTOS = getDiagInfo(pushVO);
+            neoPushDTO = getDiagInfo(pushVO);
         }
 
-        return neoPushDTOS;
+        return neoPushDTO;
     }
 
 
@@ -243,7 +220,7 @@ public class NeoFacade {
      * @return
      */
     public List<NeoPushDTO> getPush(NeoPushVO pushVO) {
-        Integer age = pushVO.getAge();
+        Double age = pushVO.getAgeNum();
         Integer sex = pushVO.getSex();
         List<NeoPushDTO> neoPushDTOS = new ArrayList<>();
         List<String> allDis = Lists.newArrayList();
@@ -264,34 +241,22 @@ public class NeoFacade {
             }
         }
         symptoms = Stream.of(symptom_chief,symptom_present).flatMap(Collection::stream).distinct().collect(Collectors.toList());
-        //症状推疾病
+        //症状、体征推疾病
         List<String> allDis_bySymptom = getDisBySymptom(symptoms,age,sex);
         allDis.addAll(allDis_bySymptom);
-        //体征推出的疾病
-        //化验推出的疾病辅检
+        //化验推出的疾病
         //辅检推出的疾病
-        //推送出的所有疾病进行性别和年龄的过滤
-        Map<String, String> disSexCache = getDisSexCache();
-        Map<String, String> disAgeCache = getDisAgeCache();
-        Iterator<String> iterator_dis = allDis.iterator();
-        while (iterator_dis.hasNext()){
-            String disease = iterator_dis.next();
-            if(disSexCache.containsKey(disease)){
-                if((disSexCache.get(disease) == "男" && sex != 1) ||
-                        (disSexCache.get(disease) == "女" && sex != 2)){
-                    iterator_dis.remove();
-                    continue;
-                }
-            }
-            if(disAgeCache.containsKey(disease)){
-                String[] betweenAge = disAgeCache.get(disease).split("-");
-                if(betweenAge.length == 2 && (age < Integer.parseInt(betweenAge[0])
-                        || age > Integer.parseInt(betweenAge[1]))){
-                    iterator_dis.remove();
-                }
+        PacsPushVo pacsPushVo = pushVO.getPacsPushVo();
+        if(pacsPushVo !=null){
+            List<Item> pacs = pacsPushVo.getPacs();
+            if(ListUtil.isNotEmpty(pacs)){
+                List<String> pacsNames = pacs.stream().map(x -> x.getUniqueName()).collect(Collectors.toList());
+                List<String> allDis_byPacsResult = getDisByPacsResult(pacsNames, age, sex);
+                allDis.addAll(allDis_byPacsResult);
             }
         }
 
+        //推送出的所有疾病进行性别和年龄的过滤
         Map<Long,List<String>> numberDiseasesMap = disCountSort(allDis);
         //根据发病率排序
         Map<String, Double> disdistributionCache = self.getDisdistributionCache();
@@ -310,10 +275,10 @@ public class NeoFacade {
             y.forEach(dis -> dis_dbt.put(dis,disdistributionCache.get(dis)));
             disPack.put(x,dis_dbt);
         });
-        Map<Long,List<String>> num_sortDiseases = new HashMap<>();
-
         disPack.forEach((x,y)->{
-            Map<String, Double> collect = y.entrySet().stream().sorted(Collections.reverseOrder(Map.Entry.comparingByValue())).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e2,LinkedHashMap::new));
+            Map<String, Double> collect = y.entrySet().stream()
+                    .sorted(Collections.reverseOrder(Map.Entry.comparingByValue()))
+                    .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e2,LinkedHashMap::new));
             disPack.put(x,collect);
             collect.forEach((k,n)->{
                 NeoPushDTO neoPushDTO = new NeoPushDTO();
@@ -322,23 +287,29 @@ public class NeoFacade {
                 neoPushDTO.setDisease(pushBaseDTO);
                 neoPushDTOS.add(neoPushDTO);
             });
-
         });
 
-
         return neoPushDTOS;
     }
 
-    public List<String> getDisBySymptom(List<String> symptoms,Integer age,Integer sex){
+    public List<String> getDisBySymptom(List<String> symptoms,Double age,Integer sex){
         List<String> symptomCache = getSymptomCache();
         //取交集
         symptoms.retainAll(symptomCache);
         long start = System.currentTimeMillis();
-        List<String> allDis_bySymptom = pushDis(symptomNameRepository, symptoms,age,sex);
+        List<String> allDis_bySymptom = pushDisBySymptom(symptomNameRepository, symptoms,age,sex);
         long end = System.currentTimeMillis();
         return allDis_bySymptom;
         }
 
+    public List<String> getDisByPacsResult(List<String> pacsResult,Double age,Integer sex){
+        List<PacsResult> byNameIn = pacsResultRepository.findByNameIn(pacsResult);
+        List<String> allDis = byNameIn.stream()
+                .map(z -> z.getDisease().stream().filter(o -> NeoUtil.matchBasic(o,sex,age)).map(y -> y.getName()).collect(Collectors.toList())).flatMap(List::stream)
+                .collect(Collectors.toList());
+        return allDis;
+    }
+
 
 
     /**
@@ -347,31 +318,16 @@ public class NeoFacade {
      * @param symptoms
      * @return
      */
-    public List<String> pushDis(SymptomNameRepository symptomNameRepository,List<String> symptoms,Integer age,Integer sex){
+    public List<String> pushDisBySymptom(SymptomNameRepository symptomNameRepository,List<String> symptoms,Double age,Integer sex){
         List<String> allDis = Lists.newArrayList();
-
-        /*if(ListUtil.isNotEmpty(symptoms)){
-            symptoms.parallelStream().forEach(x ->{
-                List<Symptom> byNameIs = symptomNameRepository.findByNameIs(x);
-                if(ListUtil.isNotEmpty(byNameIs)){
-                    List<String> diseases = byNameIs.stream().filter(z -> z.getDisease() != null && z.getDisease().size() > 0)
-                            .map(z -> z.getDisease().stream().map(y -> y.getName()).collect(Collectors.toList())).flatMap(List::stream)
-                            .collect(Collectors.toList());
-                    allDis.addAll(diseases);
-                }
-            });
-        }*/
         List<Symptom> byNameIn = symptomNameRepository.findByNameIn(symptoms);
-        /*List<YiBaoDiseaseName> collect = byNameIn.stream()
-                .map(x -> x.getDisease().stream().filter(z -> NeoUtil.matchBasic(z,sex,age)).collect(Collectors.toList()))
-                .flatMap(List::stream).collect(Collectors.toList());*/
-
-        allDis = byNameIn.stream()
+        allDis = byNameIn.parallelStream()
                 .map(z -> z.getDisease().stream().filter(o -> NeoUtil.matchBasic(o,sex,age)).map(y -> y.getName()).collect(Collectors.toList())).flatMap(List::stream)
                 .collect(Collectors.toList());
         return allDis;
     }
 
+
     /**
      * 推送的疾病计数排序
      * @param allDis
@@ -597,7 +553,7 @@ public class NeoFacade {
     /**
      * 处理处方开单合理性
      */
-    public List<BillNeoDTO> getDrugBill(Map<String, String> medsterm) {
+    public List<BillNeoDTO> getDrugBill(List<Map<String, String>> medsterm) {
 
         MedicineNode medicineNode = new MedicineNode();
         List<BillNeoDTO> billNeoDTOs = medicineNode.getMedicineBill(medsterm, medicineRepository, medRegNameRepository);
@@ -609,7 +565,7 @@ public class NeoFacade {
     /**
      * 处理辅检开单合理性
      */
-    public List<BillNeoDTO> getPacsBill(Map<String, String> pacsterm) {
+    public List<BillNeoDTO> getPacsBill(List<Map<String, String>> pacsterm) {
 
         PacsNameNode pacsNode = new PacsNameNode();
         List<BillNeoDTO> billNeoDTOs = pacsNode.getPacsBill(pacsterm, pacsNameRepository);
@@ -621,10 +577,10 @@ public class NeoFacade {
     /**
      * 处理化验套餐开单合理性
      */
-    public List<BillNeoDTO> getLisBill(Map<String, String> lissetterm) {
+    public List<BillNeoDTO> getLisBill(List<Map<String, String>> lissetterms) {
 
         LisSetNode lisSetNode = new LisSetNode();
-        List<BillNeoDTO> billNeoDTOs = lisSetNode.getLisBill(lissetterm, lisSetRepository);
+        List<BillNeoDTO> billNeoDTOs = lisSetNode.getLisBill(lissetterms, lisSetRepository);
 
         return billNeoDTOs;
     }
@@ -633,7 +589,7 @@ public class NeoFacade {
     /**
      * 处理化验开单合理性
      */
-    public List<BillNeoDTO> getLisDetailBill(Map<String, String> listerm) {
+    public List<BillNeoDTO> getLisDetailBill(List<Map<String, String>> listerm) {
 
         LisNameNode lisNode = new LisNameNode();
         List<BillNeoDTO> billNeoDTOs = lisNode.getLisDetailBill(listerm, lisNameRepository);
@@ -646,10 +602,10 @@ public class NeoFacade {
     /**
      * 处理手术开单合理性
      */
-    public List<BillNeoDTO> getOperationBill(Map<String, String> opterm) {
+    public List<BillNeoDTO> getOperationBill(List<Map<String, String>> opterms) {
 
         YiBaoOperationNameNode yiBaoOpNode = new YiBaoOperationNameNode();
-        List<BillNeoDTO> billNeoDTOs = yiBaoOpNode.getOperationBill(opterm, yiBaoOperationRepository);
+        List<BillNeoDTO> billNeoDTOs = yiBaoOpNode.getOperationBill(opterms, yiBaoOperationRepository);
 
         return billNeoDTOs;
     }
@@ -658,10 +614,10 @@ public class NeoFacade {
     /**
      * 处理联合项目开单合理性
      */
-    public List<BillNeoDTO> getCombiOpBill(Map<String, String> combiterm) {
+    public List<BillNeoDTO> getCombiOpBill(List<Map<String, String>> combiterms) {
 
         CombiOperationNode combiNode = new CombiOperationNode();
-        List<BillNeoDTO> billNeoDTOS = combiNode.getCombiOpBill(combiterm, combiOperationRepository);
+        List<BillNeoDTO> billNeoDTOS = combiNode.getCombiOpBill(combiterms, combiOperationRepository);
 
         return billNeoDTOS;
     }
@@ -670,9 +626,9 @@ public class NeoFacade {
     /**
      * 处理输血开单合理性
      */
-    public List<BillNeoDTO> getTransfusionBill(Map<String, String> term) {
+    public List<BillNeoDTO> getTransfusionBill(List<Map<String, String>> termlist) {
         TransfusionRemindNode transfusionRemindNode = new TransfusionRemindNode();
-        List<BillNeoDTO> billNeoDTOS = transfusionRemindNode.getTransfusionBill(term, transfusionRemindRepository);
+        List<BillNeoDTO> billNeoDTOS = transfusionRemindNode.getTransfusionBill(termlist, transfusionRemindRepository);
 
         return billNeoDTOS;
     }
@@ -684,16 +640,14 @@ public class NeoFacade {
      * @param neoPushVO
      * @return
      */
-    public List<NeoPushDTO> getDiagInfo(NeoPushVO neoPushVO) {
-
-        List<NeoPushDTO> neoPushDTOs = new ArrayList<>();
-        NeoPushDTO pushDTO;
+    public NeoPushDTO getDiagInfo(NeoPushVO neoPushVO) {
+        NeoPushDTO pushDTO = new NeoPushDTO();
 
         YiBaoDiseaseNode icdDiseaseNode = new YiBaoDiseaseNode();
         String term;
 
-        for (Diag diag : neoPushVO.getDiagVo().getDiags()) {
-            term = diag.getName();
+//        for (Diag diag : neoPushVO.getDiagVo().getDiags()) {
+        term = neoPushVO.getDiagVo().getDiags().get(0).getName();
             List<YiBaoDiseaseName> yiBaoName = yiBaoDiseaseRepository.findByNameIs(term);
             YiBaoDiseaseName icdDisease = null;
             if(ListUtil.isNotEmpty(yiBaoName)){
@@ -702,13 +656,13 @@ public class NeoFacade {
             if (icdDisease != null) {
                 pushDTO = icdDiseaseNode.YiBaoDiseasetoDiseaseDTO(icdDisease, neoPushVO);
 
-                if (null != pushDTO) {
+                /*if (null != pushDTO) {
                     neoPushDTOs.add(pushDTO);
-                }
+                }*/
             }
-        }
+//        }
 
-        return neoPushDTOs;
+        return pushDTO;
     }
 
 

+ 26 - 11
src/main/java/com/diagbot/facade/TestFacade.java

@@ -168,8 +168,8 @@ public class TestFacade {
                         indicationPushVO.setDiag(diag);
                         break;
                     case "6": // 服用药品
-                        StringBuffer symptom = new StringBuffer("发病来,神志清,精神可,胃纳一般,睡眠可,二便无殊。一直服用");
-                        symptom.append(bean.getNeoName()).append("。");
+                        StringBuffer symptom = new StringBuffer("发病来,神志清,精神可,胃纳一般,睡眠可,二便无殊。一直服用");
+                        symptom.append(bean.getNeoName()).append("。");
                         indicationPushVO.setSymptom(symptom.toString());
                         break;
                     case "7" : // 药品过敏原
@@ -256,7 +256,22 @@ public class TestFacade {
                         break;
                     case "14": // 年龄
                         String[] splitAge = bean.getNeoName().split(",|,");
-                        indicationPushVO.setAge((int) getValueNum(splitAge));
+                        indicationPushVO.setAgeNum(getValueNum(splitAge));
+                        break;
+                    case "16": // 开单项互斥
+                        if ("辅助检查名称".equals(bean.getOrderType())) {
+                            List<Pacs> pacsOrder = new ArrayList<>();
+                            Pacs pacs = new Pacs();
+                            pacs.setUniqueName(bean.getStandName());
+                            pacs.setName(bean.getStandName());
+                            pacsOrder.add(pacs);
+
+                            Pacs pacs1 = new Pacs();
+                            pacs1.setUniqueName(bean.getNeoName());
+                            pacs1.setName(bean.getNeoName());
+                            pacsOrder.add(pacs1);
+                            indicationPushVO.setPacsOrder(pacsOrder);
+                        }
                         break;
                     default:
                         continue;
@@ -451,15 +466,15 @@ public class TestFacade {
             if (bean.getAgeRange() != null) {
                 if (bean.getAgeRange() == 0) {
                     if (bean.getAgeMin() != null) {
-                        indicationPushVO.setAge(bean.getAgeMin() + 1);
+                        indicationPushVO.setAgeNum(bean.getAgeMin() + 1);
                     } else if (bean.getAgeMax() != null) {
-                        indicationPushVO.setAge(bean.getAgeMin() - 1);
+                        indicationPushVO.setAgeNum(bean.getAgeMin() - 1);
                     }
                 } else if (bean.getAgeRange() == 1) {
                     if (bean.getAgeMin() != null) {
-                        indicationPushVO.setAge(bean.getAgeMin() - 1);
+                        indicationPushVO.setAgeNum(bean.getAgeMin() - 1);
                     } else if (bean.getAgeMax() != null) {
-                        indicationPushVO.setAge(bean.getAgeMax() + 1);
+                        indicationPushVO.setAgeNum(bean.getAgeMax() + 1);
                     }
                 }
             }
@@ -586,11 +601,11 @@ public class TestFacade {
             IndicationPushVO indicationPushVO = new IndicationPushVO();
             indicationPushVO.setRuleType("1");
             if (StringUtil.isNotBlank(bean.getCriticalAge()) && "成人".equals(bean.getCriticalAge())) {
-                indicationPushVO.setAge(20);
+                indicationPushVO.setAgeNum(20.0D);
             } else if (StringUtil.isNotBlank(bean.getCriticalAge()) && "新生儿".equals(bean.getCriticalAge())) {
-                indicationPushVO.setAge(1);
+                indicationPushVO.setAgeNum(1.0D);
             } else {
-                indicationPushVO.setAge(20);
+                indicationPushVO.setAgeNum(20.0D);
             }
             indicationPushVO.setSex(1);
             indicationPushVO.setIdNum(bean.getIdNum());
@@ -757,7 +772,7 @@ public class TestFacade {
             IndicationPushVO indicationPushVOAge = new IndicationPushVO();
             String[] split = bean.getAgeAll().split(",");
             setname(indicationPushVOAge,bean);
-            indicationPushVOAge.setAge((int) getValueNum(split));
+            indicationPushVOAge.setAgeNum(getValueNum(split));
             indicationPushVOAge.setMsg("年龄:"+(int) getValueNum(split)+operationNameMsg);
             indicationPushVOAge.setRuleType("3");
             indicationPushVOAge.setIdNum(bean.getIdNum());

+ 14 - 1
src/main/java/com/diagbot/process/BillProcess.java

@@ -91,7 +91,17 @@ public class BillProcess {
             }
             billNeoMaxDTO.setOrderName(billNeoDTO.getName()); // 开单名称
             billNeoMaxDTO.setOrderStandName(billNeoDTO.getStandname()); // 开单标准名称
-            // TODO 测试数据开始
+            // // TODO 测试数据开始
+            // if (billNeoDTO.getStandname().equals("胸部CT")) {
+            //     NodeNeoDTO nodeNeoDTO = new NodeNeoDTO();
+            //     nodeNeoDTO.setName("心电图");
+            //     billNeoMaxDTO.getPacsOrder().add(nodeNeoDTO);
+            // }
+            // if (billNeoDTO.getStandname().equals("心电图")) {
+            //     NodeNeoDTO nodeNeoDTO = new NodeNeoDTO();
+            //     nodeNeoDTO.setName("胸部CT");
+            //     billNeoMaxDTO.getPacsOrder().add(nodeNeoDTO);
+            // }
             // if (billNeoDTO.getName().equals("普通胃镜检查")) {
             //     NodeNeoDTO sexNeo = new NodeNeoDTO();
             //     sexNeo.setName("男");
@@ -266,6 +276,9 @@ public class BillProcess {
 
         // 24小时重复开单项
         commonRule.repeat24Bill(wordCrfDTO, billMsgList);
+
+        // 互斥开单项
+        commonRule.exclusionBill(billNeoMaxDTOList, wordCrfDTO, billMsgList);
         indicationDTO.setBillMsgList(billMsgList);
     }
 

+ 6 - 5
src/main/java/com/diagbot/process/OtherTipProcess.java

@@ -17,6 +17,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
 
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 import java.util.stream.Collectors;
 
@@ -42,20 +43,20 @@ public class OtherTipProcess {
 
             if (ListUtil.isNotEmpty(factor)) {
                 for (NodeNeoDTO nodeNeoDTO : factor) {
-                    Boolean flag = false;
+                    Map map = null;
                     if (TypeEnum.disease.getName().equals(nodeNeoDTO.getTermtype())) { // 诊断
-                        flag = CoreUtil.compareNameWithNodeNeoDTO(nodeNeoDTO, wordCrfDTO.getDiag());
+                        map = CoreUtil.compareNameWithNode(nodeNeoDTO, wordCrfDTO.getDiag());
                     } else if (TypeEnum.drug.getName().equals(nodeNeoDTO.getTermtype())) { // 药品
-                        flag = CoreUtil.compareNameWithNodeNeoDTO(nodeNeoDTO, wordCrfDTO.getDrug());
+                        map = CoreUtil.compareNameWithNode(nodeNeoDTO, wordCrfDTO.getDrug());
                     }
-                    if (flag) {
+                    if (map != null && (Boolean)map.get("flag") == true) {
                         String content = otherTipNeoDTO.getName() + otherTipNeoDTO.getDetailName();
                         if (StringUtil.isNotBlank(otherTipNeoDTO.getOtherValue())) {
                             content += otherTipNeoDTO.getOtherValue();
                         } else {
                             content += CoreUtil.subZeroAndDot(otherTipNeoDTO.getValue().toString());
                         }
-                        BillMsg billMsg = MsgUtil.getCommonOtherTipLisMsg(content, nodeNeoDTO.getName(), nodeNeoDTO.getTermtype());
+                        BillMsg billMsg = MsgUtil.getCommonOtherTipLisMsg(content, (String)map.get("msg"), nodeNeoDTO.getTermtype());
                         res.getOtherList().add(billMsg);
                     }
                 }

+ 57 - 60
src/main/java/com/diagbot/process/PushProcess.java

@@ -89,102 +89,99 @@ public class PushProcess {
     }
 
     private void reversePushPackage(int length, PushDTO pushDTO, List<String> ruleTypeList, Map<String, List<String>> typeWords, NeoPushVO pushVO, Map<String, List<PushBaseDTO>> dis) {
-        List<NeoPushDTO> reversePush = neoFacade.getReversePush(pushVO);
-        if(ListUtil.isNotEmpty(reversePush)){
+        NeoPushDTO reversePush = neoFacade.getReversePush(pushVO);
+//        if(ListUtil.isNotEmpty(reversePush)){
             // 症状
             if (ruleTypeList.contains("1")) {
-                 List<String> symptoms = new ArrayList<>();
-                reversePush.stream().filter(x -> ListUtil.isNotEmpty(x.getSymptoms())).forEach(x -> {
+                if(ListUtil.isNotEmpty(reversePush.getSymptoms())){
+                    List<String> symptoms = reversePush.getSymptoms().stream().map(x->x.getName()).collect(Collectors.toList());
+                /*reversePush.stream().filter(x -> ListUtil.isNotEmpty(x.getSymptoms())).forEach(x -> {
                     List<String> symptomList = x.getSymptoms().stream().map(y -> y.getName()).collect(Collectors.toList());
                     symptoms.removeAll(symptomList);
                     symptoms.addAll(symptomList);
-                });
-                if (symptoms.size() > 0) {
-                    List<PushBaseDTO> filtervitals = getPackagePushBaseDTO(typeWords, symptoms, StandConvertEnum.symptom);
-                    pushDTO.setSymptom(filtervitals.subList(0, filtervitals.size() >= length ? length : filtervitals.size()));
+                });*/
+                    if (symptoms.size() > 0) {
+                        List<PushBaseDTO> filtervitals = getPackagePushBaseDTO(typeWords, symptoms, StandConvertEnum.symptom);
+                        pushDTO.setSymptom(filtervitals.subList(0, filtervitals.size() >= length ? length : filtervitals.size()));
+                    }
                 }
+
             }
             // 查体
             if (ruleTypeList.contains("4")) {
-                List<String> vitals = new ArrayList<>();
-                reversePush.stream().filter(x -> ListUtil.isNotEmpty(x.getVitals())).forEach(x -> {
-                    List<String> vitalList = x.getVitals().stream().map(y -> y.getName()).collect(Collectors.toList());
-                    vitals.removeAll(vitalList);
-                    vitals.addAll(vitalList);
-                });
-                if (vitals.size() > 0) {
-                    List<PushBaseDTO> filtervitals = getPackagePushBaseDTO(typeWords, vitals, StandConvertEnum.vital);
-                    pushDTO.setVital(filtervitals.subList(0, filtervitals.size() >= length ? length : filtervitals.size()));
+                if(ListUtil.isNotEmpty(reversePush.getVitals())){
+                    List<String> vitals = reversePush.getVitals().stream().map(x->x.getName()).collect(Collectors.toList());
+                    if (vitals.size() > 0) {
+                        List<PushBaseDTO> filtervitals = getPackagePushBaseDTO(typeWords, vitals, StandConvertEnum.vital);
+                        pushDTO.setVital(filtervitals.subList(0, filtervitals.size() >= length ? length : filtervitals.size()));
+                    }
                 }
+
             }
             // 化验
             if (ruleTypeList.contains("5")) {
-                List<String> lises = new ArrayList<>();
-                reversePush.stream().filter(x -> ListUtil.isNotEmpty(x.getLis())).forEach(x -> {
-                    List<String> lisList = x.getLis().stream().map(y -> y.getName()).collect(Collectors.toList());
-                    lises.removeAll(lisList);
-                    lises.addAll(lisList);
-                });
-                if (lises.size() > 0) {
-                    List<PushBaseDTO> filterlis = getPackagePushBaseDTO(typeWords, lises, StandConvertEnum.lis);
-                    pushDTO.setLis(filterlis.subList(0, filterlis.size() >= length ? length : filterlis.size()));
+                if(ListUtil.isNotEmpty(reversePush.getLis())){
+                    List<String> lises = reversePush.getLis().stream().map(x->x.getName()).collect(Collectors.toList());
+                    if (lises.size() > 0) {
+                        List<PushBaseDTO> filterlis = getPackagePushBaseDTO(typeWords, lises, StandConvertEnum.lis);
+                        pushDTO.setLis(filterlis.subList(0, filterlis.size() >= length ? length : filterlis.size()));
+                    }
                 }
+
             }
             // 辅检
             if (ruleTypeList.contains("6")) {
-                List<String> pacses = new ArrayList<>();
-                reversePush.stream().filter(x -> ListUtil.isNotEmpty(x.getPacs())).forEach(x -> {
-                    List<String> pacsList = x.getPacs().stream().map(y -> y.getName()).collect(Collectors.toList());
-                    pacses.removeAll(pacsList);
-                    pacses.addAll(pacsList);
-                });
-                if (pacses.size() > 0) {
-                    List<PushBaseDTO> filterpacs = getPackagePushBaseDTO(typeWords, pacses, StandConvertEnum.pacs);
-                    pushDTO.setPacs(filterpacs.subList(0, filterpacs.size() >= length ? length : filterpacs.size()));
+                if(ListUtil.isNotEmpty(reversePush.getPacs())){
+                    List<String> pacses = reversePush.getPacs().stream().map(x->x.getName()).collect(Collectors.toList());
+                    if (pacses.size() > 0) {
+                        List<PushBaseDTO> filterpacs = getPackagePushBaseDTO(typeWords, pacses, StandConvertEnum.pacs);
+                        pushDTO.setPacs(filterpacs.subList(0, filterpacs.size() >= length ? length : filterpacs.size()));
+                    }
                 }
+
             }
             // 药品
             if (ruleTypeList.contains("8")) {
-                List<String> drugs = new ArrayList<>();
-                reversePush.stream().filter(x ->x.getTreat() != null && ListUtil.isNotEmpty(x.getTreat().get(MedicalAdviceEnum.drug.getName())))
+                if(reversePush.getTreat() != null && ListUtil.isNotEmpty(reversePush.getTreat().get(MedicalAdviceEnum.drug.getName()))){
+
+                List<String> drugs = reversePush.getTreat().get(MedicalAdviceEnum.drug.getName()).stream().map(x->x.getName()).collect(Collectors.toList());
+                /*reversePush.stream().filter(x ->x.getTreat() != null && ListUtil.isNotEmpty(x.getTreat().get(MedicalAdviceEnum.drug.getName())))
                         .forEach(x -> {
                             List<String> drugList = x.getTreat().get(MedicalAdviceEnum.drug.getName()).stream().map(y -> y.getName()).collect(Collectors.toList());
                             drugs.removeAll(drugList);
                             drugs.addAll(drugList);
-                        });
+                        });*/
                 if (drugs.size() > 0) {
                     List<PushBaseDTO> filterdrugs = getPackagePushBaseDTO(typeWords, drugs, StandConvertEnum.drug);
                     pushDTO.setMedicines(filterdrugs.subList(0, filterdrugs.size() >= length ? length : filterdrugs.size()));
                 }
+                }
+
             }
             // 手术
             if (ruleTypeList.contains("9")) {
-                List<String> operations = new ArrayList<>();
-                reversePush.stream().filter(x ->x.getTreat() != null && ListUtil.isNotEmpty(x.getTreat().get(MedicalAdviceEnum.operation.getName())))
-                        .forEach(x -> {
-                            List<String> operationList = x.getTreat().get(MedicalAdviceEnum.operation.getName()).stream().map(y -> y.getName()).collect(Collectors.toList());
-                            operations.removeAll(operationList);
-                            operations.addAll(operationList);
-                        });
-                if (operations.size() > 0) {
-                    List<PushBaseDTO> filteroperations = getPackagePushBaseDTO(typeWords, operations, StandConvertEnum.operation);
-                    pushDTO.setOperations(filteroperations.subList(0, filteroperations.size() >= length ? length : filteroperations.size()));
+                if(reversePush.getTreat() != null && ListUtil.isNotEmpty(reversePush.getTreat().get(MedicalAdviceEnum.operation.getName())))
+                {
+
+                    List<String> operations = reversePush.getTreat().get(MedicalAdviceEnum.operation.getName()).stream().map(x -> x.getName()).collect(Collectors.toList());
+                    if (operations.size() > 0) {
+                        List<PushBaseDTO> filteroperations = getPackagePushBaseDTO(typeWords, operations, StandConvertEnum.operation);
+                        pushDTO.setOperations(filteroperations.subList(0, filteroperations.size() >= length ? length : filteroperations.size()));
+                    }
                 }
             }
             //反推,推鉴别诊断
             if (ruleTypeList.contains("7")) {
-                List<String> differentDis = new ArrayList<>();
-                reversePush.stream().filter(x -> ListUtil.isNotEmpty(x.getDifferentialDis())).forEach(x -> {
-                    List<String> differentList = x.getDifferentialDis().stream().map(y -> y.getName()).collect(Collectors.toList());
-                    differentDis.removeAll(differentList);
-                    differentDis.addAll(differentList);
-                });
-                if (differentDis.size() > 0) {
-                    List<PushBaseDTO> filterpacs = getPackagePushBaseDTO(typeWords, differentDis, StandConvertEnum.disease);
-                    List<PushBaseDTO> pushDiffBaseDTOS = filterpacs.subList(0, filterpacs.size() >= length ? length : filterpacs.size());
-                    dis.put(DiseaseTypeEnum.identify.getName(),pushDiffBaseDTOS);
-                    pushDTO.setDis(dis);
+                if(ListUtil.isNotEmpty(reversePush.getDifferentialDis())){
+                    List<String> differentDis = reversePush.getDifferentialDis().stream().map(x->x.getName()).collect(Collectors.toList());
+                    if (differentDis.size() > 0) {
+                        List<PushBaseDTO> filterpacs = getPackagePushBaseDTO(typeWords, differentDis, StandConvertEnum.disease);
+                        List<PushBaseDTO> pushDiffBaseDTOS = filterpacs.subList(0, filterpacs.size() >= length ? length : filterpacs.size());
+                        dis.put(DiseaseTypeEnum.identify.getName(),pushDiffBaseDTOS);
+                        pushDTO.setDis(dis);
+                    }
                 }
+
             }
             if (ruleTypeList.contains("10") && pushVO.getDiaeaseName() != null) {
                 List<TreatDTO> collect = new ArrayList<>();
@@ -195,7 +192,7 @@ public class PushProcess {
                 collect.add(treatDTO);
                 pushDTO.setTreat(collect);
             }
-        }
+//        }
 //            return pushDTO;
     }
 

+ 13 - 11
src/main/java/com/diagbot/repository/CombiOperationNode.java

@@ -78,7 +78,7 @@ public class CombiOperationNode {
 	/**
 	 * 获取联合项目开单合理性
 	 */
-	public List<BillNeoDTO> getCombiOpBill(Map<String, String> combiterm, CombiOperationRepository combiRepository) {
+	public List<BillNeoDTO> getCombiOpBill(List<Map<String, String>> combitermlist, CombiOperationRepository combiRepository) {
 
 		List<BillNeoDTO> billNeoDTOs = new ArrayList<>();
 		BillNeoDTO billNeoDTO;
@@ -88,20 +88,22 @@ public class CombiOperationNode {
 		List<CombiOperation> oplist;
 		String opname;
 
-		for (String term : combiterm.keySet()) {
-			billNeoDTO = new BillNeoDTO();
-			opname = combiterm.get(term);
-			billNeoDTO.setName(term);
-			billNeoDTO.setStandname(opname);
+		for (Map<String, String> combiterm : combitermlist) {
+			for (String term : combiterm.keySet()) {
+				billNeoDTO = new BillNeoDTO();
+				opname = combiterm.get(term);
+				billNeoDTO.setName(term);
+				billNeoDTO.setStandname(opname);
 
-			oplist = combiRepository.findByNameIs(opname);
+				oplist = combiRepository.findByNameIs(opname);
 
-			if (ListUtil.isNotEmpty(oplist)) {
-				combiOpBillNeoDTO = CombiOptoCombiOpDTO(oplist.get(0));
+				if (ListUtil.isNotEmpty(oplist)) {
+					combiOpBillNeoDTO = CombiOptoCombiOpDTO(oplist.get(0));
 
-				billNeoDTO.setCombiOpBillNeoDTO(combiOpBillNeoDTO);
+					billNeoDTO.setCombiOpBillNeoDTO(combiOpBillNeoDTO);
 
-				billNeoDTOs.add(billNeoDTO);
+					billNeoDTOs.add(billNeoDTO);
+				}
 			}
 		}
 

+ 22 - 22
src/main/java/com/diagbot/repository/LisNameNode.java

@@ -16,8 +16,6 @@ import com.diagbot.util.ListUtil;
 import com.diagbot.util.NeoUtil;
 import com.diagbot.util.StringUtil;
 import com.diagbot.vo.CriticalNeoVO;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageRequest;
 
 import java.math.BigDecimal;
 import java.util.ArrayList;
@@ -140,32 +138,34 @@ public class LisNameNode {
 	/**
 	 * 处理化验开单合理性
 	 */
-	public List<BillNeoDTO> getLisDetailBill(Map<String, String> listerm, LisNameRepository lisRepository) {
+	public List<BillNeoDTO> getLisDetailBill(List<Map<String, String>> listermlist, LisNameRepository lisRepository) {
 		List<BillNeoDTO> billNeoDTOs = new ArrayList<>();
 		BillNeoDTO billNeoDTO;
 
 		LisBillNeoDTO lisBillNeoDTO;
 
-		LisName lis;
+		List<LisName> lislist;
 		String lisname;
 
-		for (String term : listerm.keySet()) {
-			billNeoDTO = new BillNeoDTO();
-			lisname = listerm.get(term);
-			billNeoDTO.setName(term);
-			billNeoDTO.setStandname(lisname);
+		for (Map<String, String> listerm : listermlist) {
+			for (String term : listerm.keySet()) {
+				billNeoDTO = new BillNeoDTO();
+				lisname = listerm.get(term);
+				billNeoDTO.setName(term);
+				billNeoDTO.setStandname(lisname);
 
-			lisBillNeoDTO = new LisBillNeoDTO();
+				lisBillNeoDTO = new LisBillNeoDTO();
 
-			lis = lisRepository.findByNameIs(lisname).get(0);
+				lislist = lisRepository.findByNameIs(lisname);
 
-			if (lis != null) {
-				lisBillNeoDTO = ListoLISDTO(lis);
-			}
+				if (ListUtil.isNotEmpty(lislist)) {
+					lisBillNeoDTO = ListoLISDTO(lislist.get(0));
+				}
 
-			billNeoDTO.setLisBillNeoDTO(lisBillNeoDTO);
+				billNeoDTO.setLisBillNeoDTO(lisBillNeoDTO);
 
-			billNeoDTOs.add(billNeoDTO);
+				billNeoDTOs.add(billNeoDTO);
+			}
 		}
 
 		return billNeoDTOs;
@@ -234,13 +234,13 @@ public class LisNameNode {
 	 */
 	public List<CriticalNeoDTO> getLisCritialList(CriticalNeoVO criticalNeoVO, LisNameRepository lisRepository) {
 		String nodename;
-		Integer agemin, agemax;
+		Double agemin, agemax;
 
 		List<CriticalNeoDTO> lislist = new ArrayList<>();
 		CriticalNeoDTO criticalNeoDTO;
 
 		Integer gender = criticalNeoVO.getSex();
-		Integer age = criticalNeoVO.getAge();
+		Double age = criticalNeoVO.getAge();
 		List<Lis> lisVO = criticalNeoVO.getLis();
 
 		try {
@@ -261,12 +261,12 @@ public class LisNameNode {
 						List<LisCritical> lisCriticals = new ArrayList<>(lis.getLiscritials());
 
 						for (LisCritical lisCritical : lisCriticals) {
-							agemin = 0;
-							agemax = 0;
+							agemin = 0.0D;
+							agemax = 0.0D;
 							if (lisCritical.getAge().contains(":")) {
 								String[] agerange = lisCritical.getAge().split(":");
-								agemin = Integer.parseInt(agerange[0]);
-								agemax = Integer.parseInt(agerange[1]);
+								agemin = Double.parseDouble(agerange[0]);
+								agemax = Double.parseDouble(agerange[1]);
 							}
 
 							if (age >= agemin && age <= agemax) {

+ 15 - 13
src/main/java/com/diagbot/repository/LisSetNode.java

@@ -108,7 +108,7 @@ public class LisSetNode {
 	/**
 	 * 处理化验套餐开单合理性
 	 */
-	public List<BillNeoDTO> getLisBill(Map<String, String> lispackterm, LisSetRepository lisSetRepository) {
+	public List<BillNeoDTO> getLisBill(List<Map<String, String>> lispacktermlist, LisSetRepository lisSetRepository) {
 		List<BillNeoDTO> billNeoDTOs = new ArrayList<>();
 		BillNeoDTO billNeoDTO;
 
@@ -117,23 +117,25 @@ public class LisSetNode {
 		List<LisSet> lisSetlist;
 		String lissetname;
 
-		for (String term : lispackterm.keySet()) {
-			billNeoDTO = new BillNeoDTO();
-			lissetname = lispackterm.get(term);
-			billNeoDTO.setName(term);
-			billNeoDTO.setStandname(lissetname);
+		for (Map<String, String> lispackterm : lispacktermlist) {
+			for (String term : lispackterm.keySet()) {
+				billNeoDTO = new BillNeoDTO();
+				lissetname = lispackterm.get(term);
+				billNeoDTO.setName(term);
+				billNeoDTO.setStandname(lissetname);
 
-			lisBillNeoDTO = new LisBillNeoDTO();
+				lisBillNeoDTO = new LisBillNeoDTO();
 
-			lisSetlist = lisSetRepository.findByNameIs(lissetname);
+				lisSetlist = lisSetRepository.findByNameIs(lissetname);
 
-			if (lisSetlist != null && lisSetlist.size() > 0) {
-				lisBillNeoDTO = LisPacktoLISDTO(lisSetlist.get(0));
-			}
+				if (ListUtil.isNotEmpty(lisSetlist)) {
+					lisBillNeoDTO = LisPacktoLISDTO(lisSetlist.get(0));
+				}
 
-			billNeoDTO.setLisBillNeoDTO(lisBillNeoDTO);
+				billNeoDTO.setLisBillNeoDTO(lisBillNeoDTO);
 
-			billNeoDTOs.add(billNeoDTO);
+				billNeoDTOs.add(billNeoDTO);
+			}
 		}
 
 		return billNeoDTOs;

+ 19 - 17
src/main/java/com/diagbot/repository/MedicineNode.java

@@ -87,7 +87,7 @@ public class MedicineNode {
     /**
      * 处理处方开单合理性
      */
-    public List<BillNeoDTO> getMedicineBill(Map<String, String> medsterm, MedicineRepository medicineRepository,
+    public List<BillNeoDTO> getMedicineBill(List<Map<String, String>> medslist, MedicineRepository medicineRepository,
                                             MedRegNameRepository medRegNameRepository) {
         List<BillNeoDTO> billNeoDTOs = new ArrayList<>();
         BillNeoDTO billNeoDTO;
@@ -97,31 +97,33 @@ public class MedicineNode {
         List<MedRegName> medRegNames;
         String medname;
 
-        for (String term : medsterm.keySet()) {
-            billNeoDTO = new BillNeoDTO();
-            medname = medsterm.get(term);
-            billNeoDTO.setName(term);
-            billNeoDTO.setStandname(medname);
+        for (Map<String, String> medsterm : medslist) {
+            for (String term : medsterm.keySet()) {
+                billNeoDTO = new BillNeoDTO();
+                medname = medsterm.get(term);
+                billNeoDTO.setName(term);
+                billNeoDTO.setStandname(medname);
 
-            drugBillNeoDTO = new DrugBillNeoDTO();
+                drugBillNeoDTO = new DrugBillNeoDTO();
 
-            List<String> medRegNamels = medicineRepository.findMedRegNamebyMedicine(medname);
+                List<String> medRegNamels = medicineRepository.findMedRegNamebyMedicine(medname);
 
-            for (String mrnames : medRegNamels) {
-                medRegNames = medRegNameRepository.findByNameIs(mrnames);
+                for (String mrnames : medRegNamels) {
+                    medRegNames = medRegNameRepository.findByNameIs(mrnames);
 
-                if (medRegNames != null && medRegNames.size() > 0) {
-                    MedRegNameNode medRegNameNode = new MedRegNameNode();
-                    for (MedRegName medrn : medRegNames) {
-                        drugBillNeoDTO = medRegNameNode.MedRegNametoDrugDTO(medrn, drugBillNeoDTO);
+                    if (ListUtil.isNotEmpty(medRegNames)) {
+                        MedRegNameNode medRegNameNode = new MedRegNameNode();
+                        for (MedRegName medrn : medRegNames) {
+                            drugBillNeoDTO = medRegNameNode.MedRegNametoDrugDTO(medrn, drugBillNeoDTO);
+                        }
                     }
                 }
-            }
 
-            billNeoDTO.setDrugBillNeoDTO(drugBillNeoDTO);
+                billNeoDTO.setDrugBillNeoDTO(drugBillNeoDTO);
 
-            billNeoDTOs.add(billNeoDTO);
+                billNeoDTOs.add(billNeoDTO);
 
+            }
         }
 
 

+ 5 - 8
src/main/java/com/diagbot/repository/PacsCriticalNode.java

@@ -1,16 +1,13 @@
 package com.diagbot.repository;
 
 import com.diagbot.biz.push.entity.Item;
-import com.diagbot.biz.push.entity.Lis;
-import com.diagbot.dto.*;
-import com.diagbot.entity.node.*;
-import com.diagbot.model.label.PacsLabel;
-import com.diagbot.util.NeoUtil;
+import com.diagbot.dto.CriticalNeoDTO;
+import com.diagbot.entity.node.PacsCritical;
 import com.diagbot.util.StringUtil;
 import com.diagbot.vo.CriticalNeoVO;
 
-import java.math.BigDecimal;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.List;
 
 public class PacsCriticalNode {
 
@@ -26,7 +23,7 @@ public class PacsCriticalNode {
 		CriticalNeoDTO criticalNeoDTO;
 
 		Integer gender = criticalNeoVO.getSex();
-		Integer age = criticalNeoVO.getAge();
+		Double age = criticalNeoVO.getAge();
 		List<Item> pacsres = criticalNeoVO.getPacsLabel().getRes();
 
 		try {

+ 26 - 13
src/main/java/com/diagbot/repository/PacsNameNode.java

@@ -1,5 +1,6 @@
 package com.diagbot.repository;
 
+import ch.qos.logback.core.util.StringCollectionUtil;
 import com.diagbot.dto.BillNeoDTO;
 import com.diagbot.dto.PacsBillNeoDTO;
 import com.diagbot.entity.node.Allergen;
@@ -14,6 +15,7 @@ import com.diagbot.entity.node.OralMedicine;
 import com.diagbot.entity.node.PacsDescribe;
 import com.diagbot.entity.node.PacsName;
 import com.diagbot.entity.node.Vital;
+import com.diagbot.util.CoreUtil;
 import com.diagbot.util.ListUtil;
 import com.diagbot.util.NeoUtil;
 
@@ -141,6 +143,15 @@ public class PacsNameNode {
             pacsBillNeoDTO.getMeddevice().add(NeoUtil.updateNodeInfo(nodeInfo));
         }
 
+
+        Set<PacsName> pacsNames = pacs.getConflictpacs_out();
+        for (PacsName pacsName : pacsNames) {
+            nodeInfo = new NodeInfo();
+            nodeInfo.setName(pacsName.getName());
+            nodeInfo.setTypeval(Constants.fujian);
+            pacsBillNeoDTO.getPacsOrder().add(NeoUtil.updateNodeInfo(nodeInfo));
+        }
+
         return pacsBillNeoDTO;
     }
 
@@ -148,7 +159,7 @@ public class PacsNameNode {
     /**
      * 处理辅检开单合理性
      */
-    public List<BillNeoDTO> getPacsBill(Map<String, String> pacsterm, PacsNameRepository pacsRepository) {
+    public List<BillNeoDTO> getPacsBill(List<Map<String, String>> pacslist, PacsNameRepository pacsRepository) {
         List<BillNeoDTO> billNeoDTOs = new ArrayList<>();
         BillNeoDTO billNeoDTO;
 
@@ -157,23 +168,25 @@ public class PacsNameNode {
         List<PacsName> pacslt;
         String pacsname;
 
-        for (String term : pacsterm.keySet()) {
-            billNeoDTO = new BillNeoDTO();
-            pacsname = pacsterm.get(term);
-            billNeoDTO.setName(term);
-            billNeoDTO.setStandname(pacsname);
+        for (Map<String, String> pacsterm : pacslist) {
+            for (String term : pacsterm.keySet()) {
+                billNeoDTO = new BillNeoDTO();
+                pacsname = pacsterm.get(term);
+                billNeoDTO.setName(term);
+                billNeoDTO.setStandname(pacsname);
 
-            pacsBillNeoDTO = new PacsBillNeoDTO();
+                pacsBillNeoDTO = new PacsBillNeoDTO();
 
-            pacslt = pacsRepository.findByNameIs(pacsname);
+                pacslt = pacsRepository.findByNameIs(pacsname);
 
-            if (pacslt != null && pacslt.size() > 0) {
-                pacsBillNeoDTO = PacstoPACSDTO(pacslt.get(0));
-            }
+                if (ListUtil.isNotEmpty(pacslt)) {
+                    pacsBillNeoDTO = PacstoPACSDTO(pacslt.get(0));
+                }
 
-            billNeoDTO.setPacsBillNeoDTO(pacsBillNeoDTO);
+                billNeoDTO.setPacsBillNeoDTO(pacsBillNeoDTO);
 
-            billNeoDTOs.add(billNeoDTO);
+                billNeoDTOs.add(billNeoDTO);
+            }
         }
 
         return billNeoDTOs;

+ 5 - 5
src/main/java/com/diagbot/repository/PacsRemindNode.java

@@ -25,7 +25,7 @@ public class PacsRemindNode {
 		List<String> pacsresultdisease = new ArrayList<>();
 		String pacsgender = "";
 		String disname, gender, psresult, posres, negres, msg;
-		Integer age= null;
+		Double age= null;
 		Integer agerange = null;
 
 		for (Item dg : wordCrfDTO.getDiag()) {
@@ -44,13 +44,13 @@ public class PacsRemindNode {
             }
         }
 
-		if (null!=wordCrfDTO.getAge()) {
-            age = wordCrfDTO.getAge();
+		if (null!=wordCrfDTO.getAgeNum()) {
+            age = wordCrfDTO.getAgeNum();
         }
 
 		for (PacsRemind pr : pacsReminds) {
-			Integer minage = null;
-			Integer maxage = null;
+			Double minage = null;
+			Double maxage = null;
 			disname = "";
 			gender = "";
 			agerange = 0;

+ 52 - 0
src/main/java/com/diagbot/repository/PacsResultRepository.java

@@ -0,0 +1,52 @@
+package com.diagbot.repository;
+
+import com.diagbot.entity.node.PacsResult;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.neo4j.annotation.Query;
+import org.springframework.data.neo4j.repository.Neo4jRepository;
+import org.springframework.data.repository.query.Param;
+
+import java.util.List;
+
+
+public interface PacsResultRepository extends Neo4jRepository<PacsResult, Long> {
+
+    List<PacsResult> findByNameIs(String name);
+
+    List<PacsResult> findByNameContaining(String name);
+
+    List<PacsResult> findByNameIn(List<String> names);
+
+    Page<PacsResult> findByNameContainingIgnoreCaseOrPycodeContainingIgnoreCase(String name, String pycode, Pageable pageable);
+
+    @Query("MATCH (n:`辅助检查名称`) WHERE n.`静态知识标识` = $isKL \n" +
+            "AND (toLower(n.`name`) = toLower($name)  OR  toLower(n.`拼音编码`) = toLower($pycode))\n" +
+            "RETURN n,[ (n)-[r]->(m) | [ r, m ] ], ID(n)\n" +
+            "UNION\n" +
+            "MATCH (n:`辅助检查名称`) WHERE n.`静态知识标识` = $isKL \n" +
+            "AND (toLower(n.`name`) STARTS WITH toLower($name) OR toLower(n.`拼音编码`) STARTS WITH toLower($pycode))\n" +
+            "WITH n SKIP 0 LIMIT $size\n" +
+            "RETURN n,[ (n)-[r]->(m) | [ r, m ] ], ID(n)\n" +
+            "UNION \n" +
+            "MATCH (n:`辅助检查名称`) WHERE n.`静态知识标识` = $isKL  \n" +
+            "AND (toLower(n.`name`) CONTAINS toLower($name) OR toLower(n.`拼音编码`) CONTAINS toLower($pycode))  \n" +
+            "WITH n SKIP 0 LIMIT $size\n" +
+            "RETURN n,[ (n)-[r]->(m) | [ r, m ] ], ID(n)\n")
+    List<PacsResult> staticKnowledgeIndex(@Param("isKL") Integer isKL, @Param("name") String name, @Param("pycode") String pycode, @Param("size") Integer size);
+
+    @Query("MATCH (n:`辅助检查名称`) WHERE toLower(n.`name`) = toLower($name) \n" +
+            "OR toLower(n.`拼音编码`) = toLower($pycode)  \n" +
+            "RETURN n,[ (n)-[r]->(m) | [ r, m ] ], ID(n)\n" +
+            "union\n" +
+            "MATCH (n:`辅助检查名称`) WHERE toLower(n.`name`) starts with toLower($name) \n" +
+            "OR toLower(n.`拼音编码`) starts with toLower($pycode)  \n" +
+            "WITH n SKIP 0 LIMIT $size\n" +
+            "RETURN n,[ (n)-[r]->(m) | [ r, m ] ], ID(n)\n" +
+            "union\n" +
+            "MATCH (n:`辅助检查名称`) WHERE toLower(n.`name`) CONTAINS toLower($name) \n" +
+            "OR toLower(n.`拼音编码`) CONTAINS toLower($pycode)  \n" +
+            "WITH n SKIP 0 LIMIT $size\n" +
+            "RETURN n,[ (n)-[r]->(m) | [ r, m ] ], ID(n)\n")
+    List<PacsResult> index(@Param("name") String name, @Param("pycode") String pycode, @Param("size") Integer size);
+}

+ 14 - 11
src/main/java/com/diagbot/repository/TransfusionRemindNode.java

@@ -63,7 +63,8 @@ public class TransfusionRemindNode {
 	/**
 	 * 获取输血开单合理性
 	 */
-	public List<BillNeoDTO> getTransfusionBill(Map<String, String> transfusion, TransfusionRemindRepository transfusionRepository) {
+	public List<BillNeoDTO> getTransfusionBill(List<Map<String, String>> transfusionlist,
+											   TransfusionRemindRepository transfusionRepository) {
 
 		List<BillNeoDTO> billNeoDTOs = new ArrayList<>();
 		BillNeoDTO billNeoDTO;
@@ -73,20 +74,22 @@ public class TransfusionRemindNode {
 		List<TransfusionRemind> trlist;
 		String transfsname;
 
-		for (String term : transfusion.keySet()) {
-			billNeoDTO = new BillNeoDTO();
-			transfsname = transfusion.get(term);
-			billNeoDTO.setName(term);
-			billNeoDTO.setStandname(transfsname);
+		for (Map<String, String> transfusion : transfusionlist) {
+			for (String term : transfusion.keySet()) {
+				billNeoDTO = new BillNeoDTO();
+				transfsname = transfusion.get(term);
+				billNeoDTO.setName(term);
+				billNeoDTO.setStandname(transfsname);
 
-			trlist = transfusionRepository.findByTransfusionName(transfsname);
+				trlist = transfusionRepository.findByTransfusionName(transfsname);
 
-			if (ListUtil.isNotEmpty(trlist)) {
-				transfusionBillNeoDTO = TransfusionRemindtoTransfusionDTO(trlist);
+				if (ListUtil.isNotEmpty(trlist)) {
+					transfusionBillNeoDTO = TransfusionRemindtoTransfusionDTO(trlist);
 
-				billNeoDTO.setTransfusionBillNeoDTO(transfusionBillNeoDTO);
+					billNeoDTO.setTransfusionBillNeoDTO(transfusionBillNeoDTO);
 
-				billNeoDTOs.add(billNeoDTO);
+					billNeoDTOs.add(billNeoDTO);
+				}
 			}
 		}
 

+ 1 - 1
src/main/java/com/diagbot/repository/YiBaoDiseaseNode.java

@@ -21,7 +21,7 @@ public class YiBaoDiseaseNode {
 		PushBaseDTO pushBaseDTO;
 
 		int gender = neoPushVO.getSex();
-		int age = neoPushVO.getAge();
+		double age = neoPushVO.getAgeNum();
 
 		if (NeoUtil.matchBasic(disease, gender, age)) {
 

+ 14 - 12
src/main/java/com/diagbot/repository/YiBaoOperationNameNode.java

@@ -139,7 +139,7 @@ public class YiBaoOperationNameNode {
     /**
      * 处理手术开单合理性
      */
-    public List<BillNeoDTO> getOperationBill(Map<String, String> opterm, YiBaoOperationNameRepository opRepository) {
+    public List<BillNeoDTO> getOperationBill(List<Map<String, String>> optermlist, YiBaoOperationNameRepository opRepository) {
         List<BillNeoDTO> billNeoDTOs = new ArrayList<>();
         BillNeoDTO billNeoDTO;
 
@@ -147,19 +147,21 @@ public class YiBaoOperationNameNode {
 
         String opname;
 
-        for (String term : opterm.keySet()) {
-            billNeoDTO = new BillNeoDTO();
-            opname = opterm.get(term);
-            billNeoDTO.setName(opname);
+        for (Map<String, String> opterm : optermlist) {
+            for (String term : opterm.keySet()) {
+                billNeoDTO = new BillNeoDTO();
+                opname = opterm.get(term);
+                billNeoDTO.setName(opname);
 
-            List<YiBaoOperationName> operations = opRepository.findByNameIs(opname);
+                List<YiBaoOperationName> operations = opRepository.findByNameIs(opname);
 
-            if (null != operations && operations.size() > 0) {
-                opBillNeoDTO = YiBaoOperationtoOperationDTO(operations.get(0));
-                billNeoDTO.setOperationBillNeoDTO(opBillNeoDTO);
-            }
+                if (ListUtil.isNotEmpty(operations)) {
+                    opBillNeoDTO = YiBaoOperationtoOperationDTO(operations.get(0));
+                    billNeoDTO.setOperationBillNeoDTO(opBillNeoDTO);
+                }
 
-            billNeoDTOs.add(billNeoDTO);
+                billNeoDTOs.add(billNeoDTO);
+            }
         }
 
         return billNeoDTOs;
@@ -250,7 +252,7 @@ public class YiBaoOperationNameNode {
 
                 nodeNeoDTO = NeoUtil.jsontoNodeNeoDTO("年龄", ageobj);
                 if (null != wordCrfDTO.getAge()) {
-                    int age = wordCrfDTO.getAge();
+                    double age = wordCrfDTO.getAgeNum();
                     match = CoreUtil.compareNum(nodeNeoDTO, age);
                     if (match) {
                         nodeNeoDTO.setName("年龄:" + age);

+ 2 - 2
src/main/java/com/diagbot/rule/AgeRule.java

@@ -28,8 +28,8 @@ public class AgeRule {
     public void bill(WordCrfDTO wordCrfDTO, BillNeoMaxDTO billNeoMaxDTO, List<BillMsg> billMsgList, String type) {
         NodeNeoDTO ageNeoDTO = billNeoMaxDTO.getAgeNeoDTO();
         Boolean flag = false;
-        if (ageNeoDTO != null && wordCrfDTO.getAge() != null) {
-            Integer age = wordCrfDTO.getAge();
+        if (ageNeoDTO != null && wordCrfDTO.getAgeNum() != null) {
+            Double age = wordCrfDTO.getAgeNum();
             flag = CoreUtil.compareNum(ageNeoDTO, age);
         }
         if (flag) {

+ 39 - 1
src/main/java/com/diagbot/rule/CommonRule.java

@@ -1,10 +1,12 @@
 package com.diagbot.rule;
 
+import com.diagbot.biz.push.entity.Pacs;
 import com.diagbot.dto.BillMsg;
 import com.diagbot.dto.BillNeoMaxDTO;
 import com.diagbot.dto.HighRiskNeoDTO;
 import com.diagbot.dto.NodeNeoDTO;
 import com.diagbot.dto.WordCrfDTO;
+import com.diagbot.enums.NeoEnum;
 import com.diagbot.enums.TypeEnum;
 import com.diagbot.model.entity.Negative;
 import com.diagbot.util.CatalogueUtil;
@@ -21,8 +23,10 @@ import java.util.Collections;
 import java.util.Comparator;
 import java.util.Date;
 import java.util.HashMap;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.stream.Collectors;
 
 /**
@@ -110,6 +114,40 @@ public class CommonRule {
         repeat24BillWithType(billMsgList, wordCrfDTO.getTransfusionOrder(), TypeEnum.transfusion.getName()); // 输血重复开单
     }
 
+    /**
+     * 互斥开单项
+     *
+     * @param wordCrfDTO
+     * @param billMsgList
+     */
+    public void exclusionBill(List<BillNeoMaxDTO> billNeoMaxDTOList, WordCrfDTO wordCrfDTO, List<BillMsg> billMsgList) {
+        // 辅检开单项互斥
+        List<Pacs> pacsOrder = wordCrfDTO.getPacsOrder();
+        Set<String> set = new LinkedHashSet<>();    // A与B不宜同时进行, B与A不宜同时进行 只能提示一个
+        if (ListUtil.isNotEmpty(pacsOrder) && pacsOrder.size() > 1) {
+            Map<String, String> map = pacsOrder.stream().collect(Collectors.toMap(k -> k.getUniqueName(), v -> v.getName()));
+            for (BillNeoMaxDTO billNeoMaxDTO : billNeoMaxDTOList) {
+                List<NodeNeoDTO> nodeList = billNeoMaxDTO.getPacsOrder();
+                if (ListUtil.isNotEmpty(nodeList)) {
+                    for (NodeNeoDTO nodeNeoDTO : nodeList) {
+                        String orginName = map.get(nodeNeoDTO.getName());
+                        if (map.get(nodeNeoDTO.getName()) != null) {
+                            if (!set.contains(billNeoMaxDTO.getOrderName() + "******" + orginName)) {
+                                set.add(billNeoMaxDTO.getOrderName() + "******" + orginName);
+                                set.add(orginName + "******" + billNeoMaxDTO.getOrderName());
+                                BillMsg commonBillMsg = MsgUtil.getBillExclusionMsg(
+                                        billNeoMaxDTO.getOrderName(), orginName,
+                                        billNeoMaxDTO.getOrderName() + "," + orginName,
+                                        NeoEnum.exclusion.getName());
+                                billMsgList.add(commonBillMsg);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+
     /**
      * 24小时重复开单入口
      *
@@ -187,7 +225,7 @@ public class CommonRule {
      * @param highRiskNeoDTO
      * @param highRiskList
      */
-    public void highRiskComplex(NodeNeoDTO nodeNeoDTO, List<BillMsg> highRiskList,HighRiskNeoDTO highRiskNeoDTO) {
+    public void highRiskComplex(NodeNeoDTO nodeNeoDTO, List<BillMsg> highRiskList, HighRiskNeoDTO highRiskNeoDTO) {
         BillMsg billMsg = MsgUtil.getComplexOperationMsg( nodeNeoDTO.getVal(), highRiskNeoDTO.getName(),nodeNeoDTO.getTermtype());
         highRiskList.add(billMsg);
     }

+ 64 - 13
src/main/java/com/diagbot/util/CoreUtil.java

@@ -264,16 +264,20 @@ public class CoreUtil {
      * @param item
      * @return
      */
-    public static Boolean compareNameWithNodeNeoDTO(NodeNeoDTO nodeNeoDTO,  List<? extends Item> item) {
-        if (ListUtil.isEmpty(item) || nodeNeoDTO == null) {
-            return false;
-        }
-        for (Item it : item) {
-            if (it.getUniqueName().equals(nodeNeoDTO.getName())) {
-                return true;
+    public static Map compareNameWithNode(NodeNeoDTO nodeNeoDTO,  List<? extends Item> item) {
+        Map<String, Object> map = new LinkedHashMap<>();
+        boolean flag = false;
+        if (ListUtil.isNotEmpty(item) && nodeNeoDTO != null) {
+            for (Item it : item) {
+                if (it.getUniqueName().equals(nodeNeoDTO.getName())) {
+                    flag = true;
+                    map.put("msg", it.getName());
+                    break;
+                }
             }
         }
-        return  false;
+        map.put("flag", flag);
+        return map;
     }
 
     /**
@@ -634,11 +638,12 @@ public class CoreUtil {
      */
     public static Double convertAge(String ageStr) {
         try {
+            // 防止程序出错
             if (StringUtil.isEmpty(ageStr)) {
-                return 0.0;
+                return 20.0;
             }
             // 全是整形数字,当成年龄处理
-            if (CatalogueUtil.numbersOnly(ageStr)) {
+            if (numbersOnly(ageStr)) {
                 return Double.parseDouble(ageStr);
             }
             // 20日
@@ -649,8 +654,16 @@ public class CoreUtil {
             if (ageStr.endsWith("岁")) {
                 return Double.parseDouble(ageStr.substring(0, ageStr.length() - 1));
             }
+            // 3岁7个月
+            if (ageSuiYue(ageStr)) {
+                String[] ageArr = new String[2];
+                int indexSui = ageStr.indexOf("岁");
+                ageArr[0] = ageStr.substring(0, indexSui);
+                ageArr[1] = ageStr.substring(indexSui + 1,ageStr.indexOf("个月"));
+                return Double.parseDouble(ageArr[0]) + getHalfUp(Double.parseDouble(ageArr[1]) / 12);
+            }
             // 1.08月 | .11月 | 3月
-            if (ageStr.endsWith("月")) {
+            if (ageYue(ageStr)) {
                 String noUnit = ageStr.substring(0, ageStr.length() - 1);
                 String[] ageArr = new String[2];
                 String[] splitArr = noUnit.split("\\.");
@@ -671,9 +684,42 @@ public class CoreUtil {
             }
         } catch (Exception e) {
             e.printStackTrace();
-            return 0.0;
+            return 20.0;
         }
-        return 0.0;
+        return 20.0;
+    }
+
+    /**
+     * 判断字符串是否 仅 包含数字
+     *
+     * @param str
+     * @return
+     */
+    public static boolean numbersOnly(String str) {
+        String regex = "^[0-9]+$";
+        return str.matches(regex);
+    }
+
+    /**
+     * 判断年龄字符串:xx月
+     *
+     * @param str
+     * @return
+     */
+    public static boolean ageYue(String str) {
+        String regex = "^[0-9]*[\\.]*[0-9]{1,2}月$";
+        return str.matches(regex);
+    }
+
+    /**
+     * 判断年龄字符串:3岁7个月
+     *
+     * @param str
+     * @return
+     */
+    public static boolean ageSuiYue(String str) {
+        String regex = "^[0-9]{1,3}岁[0-9]{1,2}个月$";
+        return str.matches(regex);
     }
 
     /**
@@ -699,4 +745,9 @@ public class CoreUtil {
         }
         return str;
     }
+
+    public static void main(String[] args) {
+        String ageStr = "3月";
+        System.out.println(convertAge(ageStr));
+    }
 }

+ 19 - 0
src/main/java/com/diagbot/util/MsgUtil.java

@@ -92,6 +92,25 @@ public class MsgUtil {
         return billMsg;
     }
 
+    /**
+     * 开单合理性——互斥提示信息
+     *
+     * @param complexOrderName 多个开单项
+     * @param orderName 原开单项
+     * @param content 匹配内容
+     * @param type 类型
+     * @return
+     */
+    public static BillMsg getBillExclusionMsg(String orderName, String content, String complexOrderName, String type) {
+        BillMsg billMsg = new BillMsg();
+        String msg = String.format("检查项目互斥:%s与%s不宜同时进行", orderName, content);
+        billMsg.setMsg(msg);
+        billMsg.setOrderName(complexOrderName);
+        billMsg.setContent(content);
+        billMsg.setType(type);
+        return billMsg;
+    }
+
     /**
      * 复杂情况高危手术提示
      *

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

@@ -3,7 +3,6 @@ package com.diagbot.util;
 import com.alibaba.fastjson.JSONObject;
 import com.diagbot.dto.NodeNeoDTO;
 import com.diagbot.dto.PushBaseDTO;
-import com.diagbot.entity.node.Age;
 import com.diagbot.entity.node.Vital;
 import com.diagbot.entity.node.YiBaoDiseaseName;
 import com.diagbot.repository.Constants;
@@ -126,17 +125,17 @@ public class NeoUtil {
         return medtype;
     }
 
-    public static boolean matchBasic(YiBaoDiseaseName disease, int gender_code, int age){
+    public static boolean matchBasic(YiBaoDiseaseName disease, int gender_code, double age){
         boolean match = true;
         String gender_neo4j = disease.getGender();
         String age_neo4j = disease.getAge();
         if((gender_neo4j != null && gender_neo4j.equals("男") && gender_code != 1) ||
                 (gender_neo4j != null && gender_neo4j.equals("女") && gender_code != 2)){
             match = false;
-        }else if(age_neo4j != null){
+        }else if(age_neo4j != null ){
             String[] betweenAge = age_neo4j.split("-");
-            if(betweenAge.length == 2 && (age < Integer.parseInt(betweenAge[0])
-                    || age > Integer.parseInt(betweenAge[1]))){
+            if(betweenAge.length == 2 && (age < Double.parseDouble(betweenAge[0])
+                    || age > Double.parseDouble(betweenAge[1]))){
                 match = false;
             }
         }

+ 10 - 8
src/main/java/com/diagbot/vo/BillNeoVO.java

@@ -2,33 +2,35 @@ package com.diagbot.vo;
 
 import lombok.Data;
 
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 @Data
 public class BillNeoVO {
 
     // 化验入参
-    private Map<String, String> lisList = new HashMap<>();
+    private List<Map<String, String>> lisList = new ArrayList();
 
     // 化验细项入参
-    private Map<String, String> lisDetailList = new HashMap<>();
+    private List<Map<String, String>> lisDetailList = new ArrayList();
 
     // 辅检入参
-    private Map<String, String> pacsList = new HashMap<>();
+    private List<Map<String, String>> pacsList = new ArrayList();
 
     // 药品入参
-    private Map<String, String> drugList = new HashMap<>();
+    private List<Map<String, String>> drugList = new ArrayList();
 
     // 诊断入参
-    private Map<String, String> diagList = new HashMap<>();
+    private List<Map<String, String>> diagList = new ArrayList();
 
     // 手术和操作入参
-    private Map<String, String> operationList = new HashMap<>();
+    private List<Map<String, String>> operationList = new ArrayList();
 
     // 联合项目入参
-    private Map<String, String> combiopList = new HashMap<>();
+    private List<Map<String, String>> combiopList = new ArrayList();
 
     // 输血开单项
-    private Map<String, String> transfusionList = new HashMap<>();
+    private List<Map<String, String>> transfusionList = new ArrayList();
 }

+ 1 - 1
src/main/java/com/diagbot/vo/CriticalNeoVO.java

@@ -12,7 +12,7 @@ import java.util.List;
 public class CriticalNeoVO {
 
     // 年龄
-    private Integer age;
+    private Double age;
 
     // 性别(1:男,2:女)
     private Integer sex;

+ 4 - 1
src/main/java/com/diagbot/vo/NeoPushVO.java

@@ -12,7 +12,10 @@ import lombok.Data;
  */
 @Data
 public class NeoPushVO {
-    private Integer age;
+    // 年龄(字符串)
+    private String age;
+    // 年龄数字数据
+    private Double ageNum;
     // 性别(1:男,2:女)
     private Integer sex;
     //选中的诊断

+ 8 - 8
src/main/java/com/diagbot/vo/RetrievalVO.java

@@ -19,12 +19,12 @@ public class RetrievalVO {
      * 检索内容
      */
     private String inputStr;
-    /**
-     * 性别:1-男、2-女、3-通用
-     */
-    private Integer sex;
-    /**
-     * 年龄
-     */
-    private Integer age;
+//    /**
+//     * 性别:1-男、2-女、3-通用
+//     */
+//    private Integer sex;
+//    /**
+//     * 年龄
+//     */
+//    private Integer age;
 }

+ 8 - 2
src/main/java/com/diagbot/vo/SearchData.java

@@ -3,6 +3,7 @@ package com.diagbot.vo;
 import com.diagbot.biz.push.entity.Item;
 import com.diagbot.biz.push.entity.Lis;
 import com.diagbot.biz.push.entity.Pacs;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -22,9 +23,14 @@ public class SearchData extends HospitalBaseVO {
      */
     private Integer length = 10;
     /**
-     * 年龄
+     * 年龄文本数据
      */
-    private Integer age;
+    private String age;
+    /**
+     * 年龄数字数据
+     */
+    @ApiModelProperty(hidden = true)
+    private Double ageNum;
     /**
      * 性别(1:男,2:女,3:通用)
      */

+ 4 - 4
src/main/java/com/diagbot/vo/TestIndicationVO.java

@@ -38,7 +38,7 @@ public class TestIndicationVO implements Serializable {
      * 年龄
      */
     @Excel(name="年龄")
-    private Integer age;
+    private Double age;
     /**
      * 性别(1:男,2:女,3:通用)
      */
@@ -221,11 +221,11 @@ public class TestIndicationVO implements Serializable {
     @Excel(name="指标标签")
     private String itemNodeName;
     @Excel(name="年龄最大值")
-    private Integer ageMax;
+    private Double ageMax;
     @Excel(name="年龄最小值")
-    private Integer ageMin;
+    private Double ageMin;
     @Excel(name="年龄范围")
-    private Integer ageRange;
+    private Double ageRange;
     @Excel(name="检查结果")
     private String pacsDesc;
     @Excel(name="检查结论有")

+ 3 - 2
src/main/java/com/diagbot/vo/neoPushEntity/PacsPushVo.java

@@ -1,6 +1,6 @@
 package com.diagbot.vo.neoPushEntity;
 
-import com.diagbot.model.entity.PacsNew;
+import com.diagbot.biz.push.entity.Item;
 import lombok.Data;
 
 import java.util.List;
@@ -12,5 +12,6 @@ import java.util.List;
  */
 @Data
 public class PacsPushVo {
-    private List<PacsNew> pacs;
+//    private List<PacsNew> pacs;
+    private List<Item> pacs;
 }