ソースを参照

Merge branch 'master' into innerDevelop

gaodm 4 年 前
コミット
a5a00b5aa7
59 ファイル変更988 行追加262 行削除
  1. 2 2
      src/main/java/com/diagbot/dto/BillNeoMaxDTO.java
  2. 0 3
      src/main/java/com/diagbot/dto/CombiOpBillNeoDTO.java
  3. 0 3
      src/main/java/com/diagbot/dto/DiseaseNeoDTO.java
  4. 6 3
      src/main/java/com/diagbot/dto/DrugBillNeoDTO.java
  5. 0 3
      src/main/java/com/diagbot/dto/LisBillNeoDTO.java
  6. 1 4
      src/main/java/com/diagbot/dto/OperationBillNeoDTO.java
  7. 2 2
      src/main/java/com/diagbot/dto/PacsBillNeoDTO.java
  8. 0 3
      src/main/java/com/diagbot/dto/TransfusionBillNeoDTO.java
  9. 2 0
      src/main/java/com/diagbot/dto/WordCrfDTO.java
  10. 3 0
      src/main/java/com/diagbot/entity/node/Age.java
  11. 3 0
      src/main/java/com/diagbot/entity/node/Group.java
  12. 5 0
      src/main/java/com/diagbot/entity/node/MedAllergen.java
  13. 20 0
      src/main/java/com/diagbot/entity/node/MedRegName.java
  14. 2 2
      src/main/java/com/diagbot/entity/node/Medicine.java
  15. 6 0
      src/main/java/com/diagbot/entity/node/Vital.java
  16. 2 2
      src/main/java/com/diagbot/entity/node/YiBaoDiseaseName.java
  17. 2 1
      src/main/java/com/diagbot/enums/NeoEnum.java
  18. 8 1
      src/main/java/com/diagbot/facade/CacheFacade.java
  19. 49 23
      src/main/java/com/diagbot/facade/CommonFacade.java
  20. 12 0
      src/main/java/com/diagbot/facade/ConceptFacade.java
  21. 53 42
      src/main/java/com/diagbot/facade/NeoFacade.java
  22. 6 6
      src/main/java/com/diagbot/facade/RetrievalFacade.java
  23. 61 35
      src/main/java/com/diagbot/facade/TestFacade.java
  24. 22 1
      src/main/java/com/diagbot/model/ai/process/EntityProcessClinic.java
  25. 5 4
      src/main/java/com/diagbot/model/ai/process/EntityProcessPast.java
  26. 96 0
      src/main/java/com/diagbot/model/ai/process/EntityProcessVital.java
  27. 2 0
      src/main/java/com/diagbot/model/label/PresentLabel.java
  28. 8 2
      src/main/java/com/diagbot/process/BillProcess.java
  29. 7 6
      src/main/java/com/diagbot/process/PushProcess.java
  30. 1 1
      src/main/java/com/diagbot/repository/Constants.java
  31. 7 4
      src/main/java/com/diagbot/repository/DeptNode.java
  32. 19 0
      src/main/java/com/diagbot/repository/DeptRepository.java
  33. 6 2
      src/main/java/com/diagbot/repository/LisNameNode.java
  34. 30 5
      src/main/java/com/diagbot/repository/LisNameRepository.java
  35. 6 4
      src/main/java/com/diagbot/repository/LisSetNode.java
  36. 29 2
      src/main/java/com/diagbot/repository/LisSetRepository.java
  37. 62 0
      src/main/java/com/diagbot/repository/MedRegNameNode.java
  38. 1 1
      src/main/java/com/diagbot/repository/MedicineCodeNode.java
  39. 50 37
      src/main/java/com/diagbot/repository/MedicineNode.java
  40. 34 4
      src/main/java/com/diagbot/repository/MedicineRepository.java
  41. 8 7
      src/main/java/com/diagbot/repository/PacsNameNode.java
  42. 30 6
      src/main/java/com/diagbot/repository/PacsNameRepository.java
  43. 22 11
      src/main/java/com/diagbot/repository/YiBaoDiseaseNode.java
  44. 29 3
      src/main/java/com/diagbot/repository/YiBaoDiseaseRepository.java
  45. 5 5
      src/main/java/com/diagbot/repository/YiBaoOperationNameNode.java
  46. 30 4
      src/main/java/com/diagbot/repository/YiBaoOperationNameRepository.java
  47. 31 6
      src/main/java/com/diagbot/rule/GroupRule.java
  48. 44 0
      src/main/java/com/diagbot/rule/MedEquRule.java
  49. 6 6
      src/main/java/com/diagbot/rule/SexRule.java
  50. 76 0
      src/main/java/com/diagbot/util/CoreUtil.java
  51. 27 0
      src/main/java/com/diagbot/util/MsgUtil.java
  52. 42 0
      src/main/java/com/diagbot/util/NeoUtil.java
  53. 2 0
      src/main/java/com/diagbot/vo/TestLineVO.java
  54. 1 1
      src/main/java/com/diagbot/web/TestController.java
  55. 1 1
      src/main/resources/application-dev.yml
  56. 1 1
      src/main/resources/application-local.yml
  57. 1 1
      src/main/resources/application-pre.yml
  58. 1 1
      src/main/resources/application-pro.yml
  59. 1 1
      src/main/resources/application-test.yml

+ 2 - 2
src/main/java/com/diagbot/dto/BillNeoMaxDTO.java

@@ -42,8 +42,8 @@ public class BillNeoMaxDTO {
     // 禁忌手术
     private List<NodeNeoDTO> operations = new ArrayList<>();
 
-    // 禁忌操作
-    private List<NodeNeoDTO> procedures = new ArrayList<>();
+    // 禁忌医疗器械及物品
+    private List<NodeNeoDTO> meddevice = new ArrayList<>();
 
     // 禁忌实验室检查
     private List<NodeNeoDTO> lis = new ArrayList<>();

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

@@ -33,9 +33,6 @@ public class CombiOpBillNeoDTO {
     // 禁忌实验室检查
     private List<NodeNeoDTO> lis = new ArrayList<>();
 
-    // 禁忌操作
-    private List<NodeNeoDTO> procedures = new ArrayList<>();
-
     // 禁忌辅助检查
     private List<NodeNeoDTO> pacs = new ArrayList<>();
 

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

@@ -30,9 +30,6 @@ public class DiseaseNeoDTO {
     // 手术
     private List<NodeNeoDTO> operations = new ArrayList<>();
 
-    // 操作
-//    private List<NodeNeoDTO> procedures = new ArrayList<>();
-
     // 化验
     private List<NodeNeoDTO> lis = new ArrayList<>();
 

+ 6 - 3
src/main/java/com/diagbot/dto/DrugBillNeoDTO.java

@@ -18,6 +18,9 @@ public class DrugBillNeoDTO {
     // 禁忌年龄
     private NodeNeoDTO ageNeoDTO;
 
+    // 禁忌给药途径
+    private NodeNeoDTO geiyaoNeoDTO;
+
     // 临床表现
     private List<NodeNeoDTO> clinicfindings = new ArrayList<>();
 
@@ -27,9 +30,6 @@ public class DrugBillNeoDTO {
     // 禁忌手术
     private List<NodeNeoDTO> operations = new ArrayList<>();
 
-    // 禁忌操作
-    private List<NodeNeoDTO> procedures = new ArrayList<>();
-
     // 禁忌实验室检查
     private List<NodeNeoDTO> lis = new ArrayList<>();
 
@@ -50,4 +50,7 @@ public class DrugBillNeoDTO {
 
     // 禁用辅助检查描述
     private List<NodeNeoDTO> pacsDesc = new ArrayList<>();
+
+    // 禁忌医疗器械及物品
+    private List<NodeNeoDTO> meddevice = new ArrayList<>();
 }

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

@@ -33,9 +33,6 @@ public class LisBillNeoDTO {
     // 禁忌手术
     private List<NodeNeoDTO> operations = new ArrayList<>();
 
-    // 禁忌操作
-    private List<NodeNeoDTO> procedures = new ArrayList<>();
-
     // 禁忌辅助检查
     private List<NodeNeoDTO> pacs = new ArrayList<>();
 

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

@@ -24,9 +24,6 @@ public class OperationBillNeoDTO {
     // 体征
     private List<NodeNeoDTO> vitals = new ArrayList<>();
 
-    // 禁忌操作
-    private List<NodeNeoDTO> procedures = new ArrayList<>();
-
     // 禁忌实验室检查
     private List<NodeNeoDTO> lis = new ArrayList<>();
 
@@ -54,7 +51,7 @@ public class OperationBillNeoDTO {
     // 禁忌药物过敏原
     private List<NodeNeoDTO> medallegen = new ArrayList<>();
 
-    // 禁忌禁忌医疗器械及物品
+    // 禁忌医疗器械及物品
     private List<NodeNeoDTO> meddevice = new ArrayList<>();
 
 }

+ 2 - 2
src/main/java/com/diagbot/dto/PacsBillNeoDTO.java

@@ -33,8 +33,8 @@ public class PacsBillNeoDTO {
     // 禁忌手术
     private List<NodeNeoDTO> operations = new ArrayList<>();
 
-    // 禁忌操作
-    private List<NodeNeoDTO> procedures = new ArrayList<>();
+    // 禁忌禁忌医疗器械及物品
+    private List<NodeNeoDTO> meddevice = new ArrayList<>();
 
     // 禁忌实验室检查
     private List<NodeNeoDTO> lis = new ArrayList<>();

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

@@ -24,9 +24,6 @@ public class TransfusionBillNeoDTO {
     // 体征
     private List<NodeNeoDTO> vitals = new ArrayList<>();
 
-    // 禁忌操作
-    private List<NodeNeoDTO> procedures = new ArrayList<>();
-
     // 禁忌实验室检查
     private List<NodeNeoDTO> lis = new ArrayList<>();
 

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

@@ -90,4 +90,6 @@ public class WordCrfDTO {
     // 辅检
     private PacsLabel pacsLabel = new PacsLabel();
 
+    // 现病史
+    private String symptom = "";
 }

+ 3 - 0
src/main/java/com/diagbot/entity/node/Age.java

@@ -31,4 +31,7 @@ public class Age extends BaseNode  {
 	@Relationship(type = "药品通用名称禁忌年龄", direction = Relationship.INCOMING)
 	private Set<Medicine> medicines = new HashSet<>();
 
+	@Relationship(type = "药品注册名称禁忌体征", direction = Relationship.INCOMING)
+	private Set<MedRegName> medRegNames = new HashSet<>();
+
 }

+ 3 - 0
src/main/java/com/diagbot/entity/node/Group.java

@@ -37,4 +37,7 @@ public class Group extends BaseNode  {
 	@Relationship(type = "药品通用名称禁忌禁忌人群", direction = Relationship.INCOMING)
 	private Set<Medicine> medicines = new HashSet<>();
 
+	@Relationship(type = "药品注册名称禁忌禁忌人群", direction = Relationship.INCOMING)
+	private Set<MedRegName> medRegNames = new HashSet<>();
+
 }

+ 5 - 0
src/main/java/com/diagbot/entity/node/MedAllergen.java

@@ -5,6 +5,7 @@ import com.diagbot.entity.node.base.BaseNode;
 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;
@@ -15,6 +16,8 @@ import java.util.Set;
 @NodeEntity(label = "药物过敏原")
 public class MedAllergen extends BaseNode  {
 
+	@Property(name = "药品类型")
+	private String medtype;
 
 	@Relationship(type = "辅助检查名称禁忌药物过敏原", direction = Relationship.INCOMING)
 	private Set<Pacs> pacss = new HashSet<>();
@@ -34,4 +37,6 @@ public class MedAllergen extends BaseNode  {
 	@Relationship(type = "药品通用名称禁忌药物过敏原", direction = Relationship.INCOMING)
 	private Set<Medicine> medicines = new HashSet<>();
 
+	@Relationship(type = "药品注册名称禁忌药物过敏原", direction = Relationship.INCOMING)
+	private Set<MedRegName> medRegNames = new HashSet<>();
 }

+ 20 - 0
src/main/java/com/diagbot/entity/node/MedRegName.java

@@ -18,8 +18,28 @@ public class MedRegName extends BaseNode  {
 	@Property(name = "药品高危级别")
 	private String risklevel;
 
+	@Property(name = "禁忌性别")
+	private String conflict_gender;
+
+	@Property(name = "禁忌给药途径")
+	private String conflict_geiyao;
+
+	@Relationship(type = "药品注册名称禁忌体征", direction = Relationship.OUTGOING)
+	private Set<Vital> vital = new HashSet<>();
+
+	@Relationship(type = "药品注册名称禁忌禁忌人群", direction = Relationship.OUTGOING)
+	private Set<Group> group = new HashSet<>();
+
+	@Relationship(type = "药品注册名称禁忌药物过敏原", direction = Relationship.OUTGOING)
+	private Set<MedAllergen> medAllergens = new HashSet<>();
+
+	@Relationship(type = "药品注册名称禁忌药品注册名称", direction = Relationship.OUTGOING)
+	private Set<MedRegName> medregnames_out = new HashSet<>();
+
 	@Relationship(type = "药品相关药品注册名称", direction = Relationship.INCOMING)
 	private Set<MedCodeName> medcodenames = new HashSet<>();
 
+	@Relationship(type = "药品注册名称禁忌药品注册名称", direction = Relationship.INCOMING)
+	private Set<MedRegName> medregnames_in = new HashSet<>();
 
 }

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

@@ -24,8 +24,8 @@ public class Medicine extends BaseNode  {
 	@Relationship(type = "药品通用名称禁忌禁忌人群", direction = Relationship.OUTGOING)
 	private Set<Group> group = new HashSet<>();
 
-	@Relationship(type = "药品通用名称禁忌年龄", direction = Relationship.OUTGOING)
-	private Set<Age> age = new HashSet<>();
+	@Relationship(type = "药品通用名称禁忌体征", direction = Relationship.OUTGOING)
+	private Set<Vital> vital = new HashSet<>();
 
 	@Relationship(type = "药品通用名称禁忌疾病", direction = Relationship.OUTGOING)
 	private Set<Disease> disease = new HashSet<>();

+ 6 - 0
src/main/java/com/diagbot/entity/node/Vital.java

@@ -29,6 +29,9 @@ public class Vital extends BaseNode  {
 	@Property(name = "范围")
 	private Integer range;
 
+	@Property(name = "体征指标")
+	private String vitalname;
+
 	@Relationship(type = "辅助检查名称禁忌体征", direction = Relationship.INCOMING)
 	private Set<Pacs> pacss = new HashSet<>();
 
@@ -38,4 +41,7 @@ public class Vital extends BaseNode  {
 	@Relationship(type = "体征相关医保疾病名称", direction = Relationship.OUTGOING)
 	private Set<YiBaoDiseaseName> disease = new HashSet<>();
 
+	@Relationship(type = "药品注册名称禁忌体征", direction = Relationship.INCOMING)
+	private Set<MedRegName> medRegNames = new HashSet<>();
+
 }

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

@@ -38,10 +38,10 @@ public class YiBaoDiseaseName extends BaseNode  {
 	@Relationship(type = "医保疾病名称相关体征", direction = Relationship.OUTGOING)
 	private Set<Vital> vitals = new HashSet<>();
 
-	@Relationship(type = "实验室检查相关医保疾病名称", direction = Relationship.INCOMING)
+	@Relationship(type = "医保疾病名称相关实验室检查名称", direction = Relationship.OUTGOING)
 	private Set<LisName> lisnames = new HashSet<>();
 
-	@Relationship(type = "辅助检查名称相关医保疾病名称", direction = Relationship.INCOMING)
+	@Relationship(type = "医保疾病名称相关辅助检查名称", direction = Relationship.OUTGOING)
 	private Set<PacsName> pacsnames = new HashSet<>();
 
 	@Relationship(type = "实验室检查结果相关医保疾病名称", direction = Relationship.INCOMING)

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

@@ -24,7 +24,8 @@ public enum NeoEnum implements KeyedNamed {
     group(11, "禁用人群"),
     conflictmeds(12, "配伍禁忌"),
     vitals(13, "禁忌查体"),
-    pacsDesc(14, "禁忌辅助检查描述");
+    pacsDesc(14, "禁忌辅助检查描述"),
+    medEqu(15, "禁忌医疗器械及物品");
 
     @Setter
     private int key;

+ 8 - 1
src/main/java/com/diagbot/facade/CacheFacade.java

@@ -53,8 +53,15 @@ public class CacheFacade {
      */
     public void loadDrugTypeCache() {
         redisUtil.deleteByPrex(RedisEnum.drugType.getName());
-        // redisUtil.deleteByPrex("");
         // redisUtil.deleteByPrex("药品分类_");
+        // redisUtil.delete("lis");
+        // redisUtil.delete("pacs");
+        // redisUtil.delete("disease");
+        // redisUtil.delete("drug");
+        // redisUtil.delete("symptom");
+        // redisUtil.delete("operation");
+        // redisUtil.delete("vital");
+        // redisUtil.delete("transfusion");
         neoFacade.getDrugCache();
 
     }

+ 49 - 23
src/main/java/com/diagbot/facade/CommonFacade.java

@@ -18,6 +18,7 @@ import com.diagbot.model.label.PresentLabel;
 import com.diagbot.model.label.VitalLabel;
 import com.diagbot.util.CoreUtil;
 import com.diagbot.util.ListUtil;
+import com.diagbot.util.StringUtil;
 import com.diagbot.vo.NeoPushVO;
 import com.diagbot.vo.SearchData;
 import com.diagbot.vo.StandConvert;
@@ -99,11 +100,18 @@ public class CommonFacade {
         if (ListUtil.isNotEmpty(searchData.getTransfusionOrder())) {
             wordCrfDTO.setTransfusionOrder(searchData.getTransfusionOrder());
         }
+        if (StringUtil.isNotBlank(searchData.getSymptom())) {
+            wordCrfDTO.setSymptom(searchData.getSymptom());
+        }
+
         //模型处理数据
         aiAnalyze.aiProcess(searchData, wordCrfDTO);
 
         // 处理现病史中的化验和辅检,放入结构化
         processPresentLisPacs(wordCrfDTO);
+
+        // 现病史中体征内容放入体征标签
+        processPresentVital(wordCrfDTO);
         return wordCrfDTO;
     }
 
@@ -211,6 +219,7 @@ public class CommonFacade {
         List<String> vitalList = new ArrayList<>();
         VitalLabel vitalLabel = wordCrfDTO.getVitalLabel();
         vitalList.addAll(CoreUtil.getPropertyList(vitalLabel.getVitals()));
+        vitalList.addAll(CoreUtil.getPropertyList(vitalLabel.getClinicals()));
         standConvert.setVitalList(vitalList);
 
         // 输血
@@ -234,36 +243,37 @@ public class CommonFacade {
         VitalLabel vitalLabel = wordCrfDTO.getVitalLabel();
 
         //症状回填
-        CoreUtil.setPropertyList(chiefLabel.getClinicals(), map.get(StandConvertEnum.symptom.getName()));
-        CoreUtil.setPropertyList(presentLabel.getClinicals(), map.get(StandConvertEnum.symptom.getName()));
+        CoreUtil.setPropertyList(chiefLabel.getClinicals(), map.get(StandConvertEnum.symptom.toString()));
+        CoreUtil.setPropertyList(presentLabel.getClinicals(), map.get(StandConvertEnum.symptom.toString()));
         //诊断回填
-        CoreUtil.setPropertyList(diagLabel.getDiags(), map.get(StandConvertEnum.disease.getName()));
-        CoreUtil.setPropertyList(wordCrfDTO.getDiagOrder(),"name", "uniqueName", map.get(StandConvertEnum.disease.getName()));
-        CoreUtil.setPropertyList(wordCrfDTO.getDiag(),"name", "uniqueName", map.get(StandConvertEnum.disease.getName()));
-        CoreUtil.setPropertyList(wordCrfDTO.getDiseaseName(),"name", "uniqueName", map.get(StandConvertEnum.disease.getName()));
+        CoreUtil.setPropertyList(diagLabel.getDiags(), map.get(StandConvertEnum.disease.toString()));
+        CoreUtil.setPropertyList(wordCrfDTO.getDiagOrder(),"name", "uniqueName", map.get(StandConvertEnum.disease.toString()));
+        CoreUtil.setPropertyList(wordCrfDTO.getDiag(),"name", "uniqueName", map.get(StandConvertEnum.disease.toString()));
+        CoreUtil.setPropertyList(wordCrfDTO.getDiseaseName(),"name", "uniqueName", map.get(StandConvertEnum.disease.toString()));
         //药品回填
-        CoreUtil.setPropertyList(presentLabel.getMedicines(), map.get(StandConvertEnum.drug.getName()));
-        CoreUtil.setPropertyList(presentLabel.getTakeMedicine(), map.get(StandConvertEnum.drug.getName()));
-        CoreUtil.setPropertyList(pastLabel.getAllergyMedicines(), map.get(StandConvertEnum.drug.getName()));
-        CoreUtil.setPropertyList(wordCrfDTO.getDrugOrder(),"name", "uniqueName", map.get(StandConvertEnum.drug.getName()));
-        CoreUtil.setPropertyList(wordCrfDTO.getDrug(),"name", "uniqueName", map.get(StandConvertEnum.drug.getName()));
+        CoreUtil.setPropertyList(presentLabel.getMedicines(), map.get(StandConvertEnum.drug.toString()));
+        CoreUtil.setPropertyList(presentLabel.getTakeMedicine(), map.get(StandConvertEnum.drug.toString()));
+        CoreUtil.setPropertyList(pastLabel.getAllergyMedicines(), map.get(StandConvertEnum.drug.toString()));
+        CoreUtil.setPropertyList(wordCrfDTO.getDrugOrder(),"name", "uniqueName", map.get(StandConvertEnum.drug.toString()));
+        CoreUtil.setPropertyList(wordCrfDTO.getDrug(),"name", "uniqueName", map.get(StandConvertEnum.drug.toString()));
         //化验回填
-        CoreUtil.setPropertyList(lis, "name", "detailName", "uniqueName", map.get(StandConvertEnum.lis.getName()));
-        CoreUtil.setPropertyList(wordCrfDTO.getLisOrder(), "name", "detailName", "uniqueName", map.get(StandConvertEnum.lis.getName()));
+        CoreUtil.setPropertyList(lis, "name", "detailName", "uniqueName", map.get(StandConvertEnum.lis.toString()));
+        CoreUtil.setPropertyList(wordCrfDTO.getLisOrder(), "name", "detailName", "uniqueName", map.get(StandConvertEnum.lis.toString()));
         //辅助检查回填
-        CoreUtil.setPropertyList(pacsList, "name", "uniqueName", map.get(StandConvertEnum.pacs.getName()));
-        CoreUtil.setPropertyList(wordCrfDTO.getPacs(), "name", "uniqueName", map.get(StandConvertEnum.pacs.getName()));
-        CoreUtil.setPropertyList(wordCrfDTO.getPacsOrder(), "name", "uniqueName", map.get(StandConvertEnum.pacs.getName()));
+        CoreUtil.setPropertyList(pacsList, "name", "uniqueName", map.get(StandConvertEnum.pacs.toString()));
+        CoreUtil.setPropertyList(wordCrfDTO.getPacs(), "name", "uniqueName", map.get(StandConvertEnum.pacs.toString()));
+        CoreUtil.setPropertyList(wordCrfDTO.getPacsOrder(), "name", "uniqueName", map.get(StandConvertEnum.pacs.toString()));
         //体征回填
-        CoreUtil.setPropertyList(vitalLabel.getVitals(), map.get(StandConvertEnum.vital.getName()));
+        CoreUtil.setPropertyList(vitalLabel.getVitals(), map.get(StandConvertEnum.vital.toString()));
+        CoreUtil.setPropertyList(vitalLabel.getClinicals(), map.get(StandConvertEnum.vital.toString()));
         //手术回填
-        CoreUtil.setPropertyList(presentLabel.getOperations(), map.get(StandConvertEnum.operation.getName()));
-        CoreUtil.setPropertyList(pastLabel.getOperations(), map.get(StandConvertEnum.operation.getName()));
-        CoreUtil.setPropertyList(wordCrfDTO.getOperationOrder(), "name", "uniqueName",map.get(StandConvertEnum.operation.getName()));
-        CoreUtil.setPropertyList(wordCrfDTO.getOperation(), "name", "uniqueName",map.get(StandConvertEnum.operation.getName()));
-        CoreUtil.setPropertyList(wordCrfDTO.getOperationName(), "name", "uniqueName",map.get(StandConvertEnum.operation.getName()));
+        CoreUtil.setPropertyList(presentLabel.getOperations(), map.get(StandConvertEnum.operation.toString()));
+        CoreUtil.setPropertyList(pastLabel.getOperations(), map.get(StandConvertEnum.operation.toString()));
+        CoreUtil.setPropertyList(wordCrfDTO.getOperationOrder(), "name", "uniqueName",map.get(StandConvertEnum.operation.toString()));
+        CoreUtil.setPropertyList(wordCrfDTO.getOperation(), "name", "uniqueName",map.get(StandConvertEnum.operation.toString()));
+        CoreUtil.setPropertyList(wordCrfDTO.getOperationName(), "name", "uniqueName",map.get(StandConvertEnum.operation.toString()));
         //输血回填
-        CoreUtil.setPropertyList(wordCrfDTO.getTransfusionOrder(), "name", "uniqueName",map.get(StandConvertEnum.transfusion.getName()));
+        CoreUtil.setPropertyList(wordCrfDTO.getTransfusionOrder(), "name", "uniqueName",map.get(StandConvertEnum.transfusion.toString()));
     }
 
     /**
@@ -354,6 +364,22 @@ public class CommonFacade {
         return pushVO;
     }
 
+    /**
+     * 将现病史中提取的体征内容放入体征标签中
+     *
+     * @param wordCrfDTO
+     */
+    public void processPresentVital(WordCrfDTO wordCrfDTO){
+        PresentLabel presentLabel = wordCrfDTO.getPresentLabel();
+        VitalLabel vitalLabel = wordCrfDTO.getVitalLabel();
+        if (ListUtil.isNotEmpty(presentLabel.getVitals())) {
+            vitalLabel.getVitals().addAll(presentLabel.getVitals());
+        }
+        if (ListUtil.isNotEmpty(presentLabel.getClinicals())) {
+            vitalLabel.getClinicals().addAll(presentLabel.getClinicals());
+        }
+    }
+
     public void processPresentLisPacs(WordCrfDTO wordCrfDTO){
         PresentLabel presentLabel = wordCrfDTO.getPresentLabel();
         List<com.diagbot.model.entity.Lis> lises = presentLabel.getLises();

+ 12 - 0
src/main/java/com/diagbot/facade/ConceptFacade.java

@@ -1,11 +1,13 @@
 package com.diagbot.facade;
 
+import com.diagbot.entity.node.Dept;
 import com.diagbot.entity.node.LisName;
 import com.diagbot.entity.node.LisSet;
 import com.diagbot.entity.node.Medicine;
 import com.diagbot.entity.node.PacsName;
 import com.diagbot.entity.node.YiBaoDiseaseName;
 import com.diagbot.entity.node.YiBaoOperationName;
+import com.diagbot.repository.DeptRepository;
 import com.diagbot.repository.LisNameRepository;
 import com.diagbot.repository.LisSetRepository;
 import com.diagbot.repository.MedicineRepository;
@@ -48,6 +50,9 @@ public class ConceptFacade {
     @Autowired
     YiBaoOperationNameRepository yiBaoOperationNameRepository;
 
+    @Autowired
+    DeptRepository deptRepository;
+
     @Autowired
     TransfusionRemindRepository transfusionRemindRepository;
 
@@ -113,6 +118,13 @@ public class ConceptFacade {
                 }
                 break;
             case 7:
+                List<Dept> deptList = deptRepository.findByNameIn(conceptVO.getNames());
+                if (ListUtil.isNotEmpty(deptList)) {
+                    retList = deptList.stream()
+                            .map(i -> i.getName())
+                            .distinct()
+                            .collect(Collectors.toList());
+                }
                 break;
             case 8:
                 List<String> transfusionNames = transfusionRemindRepository.findTransfusionByTypeIn(conceptVO.getNames());

+ 53 - 42
src/main/java/com/diagbot/facade/NeoFacade.java

@@ -87,6 +87,8 @@ public class NeoFacade {
     @Autowired
     MedicineCodeRepository medicineCodeRepository;
     @Autowired
+    MedRegNameRepository medRegNameRepository;
+    @Autowired
     PacsCriticalRepository pacsCriticalRepository;
     @Autowired
     YiBaoDiseaseRepository yiBaoDiseaseRepository;
@@ -225,13 +227,8 @@ public class NeoFacade {
      */
     public List<NeoPushDTO> getReversePush(NeoPushVO pushVO) {
         List<NeoPushDTO> neoPushDTOS = new ArrayList<>();
-        List<String> diags = new ArrayList<>();
         // 如果有诊断名称,则通过诊断反推
         if (null != pushVO.getDiagVo() && pushVO.getDiagVo().getDiags().size() > 0) {
-            for (Diag diag : pushVO.getDiagVo().getDiags()) {
-                diags.add(diag.getName());
-            }
-
             neoPushDTOS = getDiagInfo(pushVO);
         }
 
@@ -603,7 +600,7 @@ public class NeoFacade {
     public List<BillNeoDTO> getDrugBill(Map<String, String> medsterm) {
 
         MedicineNode medicineNode = new MedicineNode();
-        List<BillNeoDTO> billNeoDTOs = medicineNode.getMedicineBill(medsterm, medicineRepository);
+        List<BillNeoDTO> billNeoDTOs = medicineNode.getMedicineBill(medsterm, medicineRepository, medRegNameRepository);
 
         return billNeoDTOs;
     }
@@ -811,21 +808,26 @@ public class NeoFacade {
         List<String> lisConList = getConvertList(standConvert.getLisList(), StandConvertEnum.lis.toString(), standConvertCrfVOList);
         List<String> transfusionConList = getConvertList(standConvert.getTransfusionList(), StandConvertEnum.transfusion.toString(), standConvertCrfVOList);
 
-        StandConvertCrfBatchDTO standConvertCrfBatchDTO = null;
-        try {
-            standConvertCrfBatchDTO = standConvertServiceClient.similarityBatch(standConvertCrfVOList);
-        } catch (Exception e) {
-            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "标准词转换【服务器】挂了!" + e.getMessage());
+        StandConvertCrfBatchDTO standConvertCrfBatchDTO = new StandConvertCrfBatchDTO();
+        if (!(ListUtil.isEmpty(clinicalConList) && ListUtil.isEmpty(operationConList) && ListUtil.isEmpty(drugConList)
+                && ListUtil.isEmpty(vitallConList) && ListUtil.isEmpty(diseaseConList) && ListUtil.isEmpty(pacsConList)
+                && ListUtil.isEmpty(lisConList) && ListUtil.isEmpty(transfusionConList))) {
+            try {
+                standConvertCrfBatchDTO = standConvertServiceClient.similarityBatch(standConvertCrfVOList);
+            } catch (Exception e) {
+                throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "标准词转换【服务器】挂了!" + e.getMessage());
+            }
         }
+
         Map<String, Map<String, StandConvertCrfDTO>> crfMap = standConvertCrfBatchDTO.getData();
-        getConvertMap(crfMap, StandConvertEnum.symptom.toString(), clinicalConList, map);
-        getConvertMap(crfMap, StandConvertEnum.operation.toString(), operationConList, map);
-        getConvertMap(crfMap, StandConvertEnum.drug.toString(), drugConList, map);
-        getConvertMap(crfMap, StandConvertEnum.vital.toString(), vitallConList, map);
-        getConvertMap(crfMap, StandConvertEnum.disease.toString(), diseaseConList, map);
-        getConvertMap(crfMap, StandConvertEnum.pacs.toString(), pacsConList, map);
-        getConvertMap(crfMap, StandConvertEnum.lis.toString(), lisConList, map);
-        getConvertMap(crfMap, StandConvertEnum.transfusion.toString(), transfusionConList, map);
+        getConvertMap(crfMap, StandConvertEnum.symptom.toString(), clinicalConList, standConvert.getClinicalList(), map);
+        getConvertMap(crfMap, StandConvertEnum.operation.toString(), operationConList, standConvert.getOperationList(), map);
+        getConvertMap(crfMap, StandConvertEnum.drug.toString(), drugConList, standConvert.getDrugList(), map);
+        getConvertMap(crfMap, StandConvertEnum.vital.toString(), vitallConList, standConvert.getVitalList(), map);
+        getConvertMap(crfMap, StandConvertEnum.disease.toString(), diseaseConList, standConvert.getDiaglList(), map);
+        getConvertMap(crfMap, StandConvertEnum.pacs.toString(), pacsConList, standConvert.getPacsList(), map);
+        getConvertMap(crfMap, StandConvertEnum.lis.toString(), lisConList, standConvert.getLisList(), map);
+        getConvertMap(crfMap, StandConvertEnum.transfusion.toString(), transfusionConList, standConvert.getTransfusionList(), map);
 
         return map;
     }
@@ -869,37 +871,46 @@ public class NeoFacade {
      * @param map
      */
     public void getConvertMap(Map<String, Map<String, StandConvertCrfDTO>> crfDTO, String type, List<String> convertList,
-                              Map<String, Map<String, String>> map) {
-        if (ListUtil.isEmpty(convertList)) {
-            return ;
-        }
-        Map<String, StandConvertCrfDTO> crfMap = crfDTO.get(type);
+                              List<String> originList, Map<String, Map<String, String>> map) {
         Map<String, String> typeMap = new LinkedHashMap<>();
 
-        for (String s : convertList) {
-            String lastS = s;
-            if (crfMap != null) {
-                StandConvertCrfDTO standConvertCrfDTO = crfMap.get(s);
-                if (standConvertCrfDTO != null) {
-                    List<Map<String, String>> list = standConvertCrfDTO.getStandard_words();
-                    if (ListUtil.isEmpty(list)) {
-                        redisUtil.updateValue(type + "Conv:" + s, s);
-                    } else {
-                        String rateStr = standConvertCrfDTO.getStandard_words().get(0).get("rate");
-                        BigDecimal rate = new BigDecimal(rateStr);
-                        int flag = rate.compareTo(new BigDecimal(standConvertRate));
-                        if (flag < 0) {
+        if (ListUtil.isNotEmpty(convertList)) {
+            Map<String, StandConvertCrfDTO> crfMap = crfDTO.get(type);
+            for (String s : convertList) {
+                String lastS = s;
+                if (crfMap != null) {
+                    StandConvertCrfDTO standConvertCrfDTO = crfMap.get(s);
+                    if (standConvertCrfDTO != null) {
+                        List<Map<String, String>> list = standConvertCrfDTO.getStandard_words();
+                        if (ListUtil.isEmpty(list)) {
                             redisUtil.updateValue(type + "Conv:" + s, s);
                         } else {
-                            redisUtil.updateValue(type + "Conv:" + s, standConvertCrfDTO.getStandard_words().get(0).get("standard_word"));
-                            lastS = standConvertCrfDTO.getStandard_words().get(0).get("standard_word");
+                            String rateStr = standConvertCrfDTO.getStandard_words().get(0).get("rate");
+                            if (StringUtil.isBlank(rateStr)) {
+                                redisUtil.updateValue(type + "Conv:" + s, s);
+                            } else {
+                                BigDecimal rate = new BigDecimal(rateStr);
+                                int flag = rate.compareTo(new BigDecimal(standConvertRate));
+                                if (flag < 0) {
+                                    redisUtil.updateValue(type + "Conv:" + s, s);
+                                } else {
+                                    redisUtil.updateValue(type + "Conv:" + s, standConvertCrfDTO.getStandard_words().get(0).get("standard_word"));
+                                    lastS = standConvertCrfDTO.getStandard_words().get(0).get("standard_word");
+                                }
+                            }
                         }
+                    } else {
+                        redisUtil.updateValue(type + "Conv:" + s, s);
                     }
-                } else {
-                    redisUtil.updateValue(type + "Conv:" + s, s);
                 }
+                typeMap.put(s, lastS);
+            }
+        }
+        // 将所有的词放入typeMap中
+        for (String s : originList) {
+            if (!typeMap.containsKey(s)) {
+                typeMap.put(s, s);
             }
-            typeMap.put(s, lastS);
         }
         map.put(type, typeMap);
     }

+ 6 - 6
src/main/java/com/diagbot/facade/RetrievalFacade.java

@@ -220,7 +220,7 @@ public class RetrievalFacade {
         List<Integer> types = staticKnowledgeIndexVO.getTypes();
 
         //TODO 诊断
-        List<YiBaoDiseaseName> icdDiseaseList = icdDiseaseRepository.findByIsKLAndNameContainingIgnoreCaseOrPycodeContainingIgnoreCase(staticKnowledgeIndexVO.getHasInfo(), inputStr, inputStr, 100);
+        List<YiBaoDiseaseName> icdDiseaseList = icdDiseaseRepository.staticKnowledgeIndex(staticKnowledgeIndexVO.getHasInfo(), inputStr, inputStr, 100);
         List<StaticKnowledgeIndexDTO> disRetList = Lists.newLinkedList();
         for (YiBaoDiseaseName icdDisease : icdDiseaseList) {
             StaticKnowledgeIndexDTO staticDTO = new StaticKnowledgeIndexDTO();
@@ -230,7 +230,7 @@ public class RetrievalFacade {
             disRetList.add(staticDTO);
         }
         //TODO 药品
-        List<Medicine> medicineList = medicineRepository.findByIsKLAndNameContainingIgnoreCaseOrPycodeContainingIgnoreCase(staticKnowledgeIndexVO.getHasInfo(), inputStr, inputStr, 100);
+        List<Medicine> medicineList = medicineRepository.staticKnowledgeIndex(staticKnowledgeIndexVO.getHasInfo(), inputStr, inputStr, 100);
 
         List<StaticKnowledgeIndexDTO> drugRetList = Lists.newLinkedList();
         for (Medicine medicine : medicineList) {
@@ -241,7 +241,7 @@ public class RetrievalFacade {
             drugRetList.add(staticDTO);
         }
         //TODO 检验套餐
-        List<LisSet> lisSetList = lisSetRepository.findByIsKLAndNameContainingIgnoreCaseOrPycodeContainingIgnoreCase(staticKnowledgeIndexVO.getHasInfo(), inputStr, inputStr, 100);
+        List<LisSet> lisSetList = lisSetRepository.staticKnowledgeIndex(staticKnowledgeIndexVO.getHasInfo(), inputStr, inputStr, 100);
 
         List<StaticKnowledgeIndexDTO> lisSetRetList = Lists.newLinkedList();
         for (LisSet lisSet : lisSetList) {
@@ -252,7 +252,7 @@ public class RetrievalFacade {
             lisSetRetList.add(staticDTO);
         }
         //TODO 检验明细关联出检验套餐
-        List<LisName> lisList = lisRepository.findByIsKLAndNameContainingIgnoreCaseOrPycodeContainingIgnoreCase(staticKnowledgeIndexVO.getHasInfo(), inputStr, inputStr, 100);
+        List<LisName> lisList = lisRepository.staticKnowledgeIndex(staticKnowledgeIndexVO.getHasInfo(), inputStr, inputStr, 100);
 
         List<StaticKnowledgeIndexDTO> lisSetRelatecLisRetList = Lists.newLinkedList();
         for (LisName lis : lisList) {
@@ -291,7 +291,7 @@ public class RetrievalFacade {
             lisRetList.add(staticDTO);
         }
         //TODO 检查
-        List<PacsName> pacsList = pacsRepository.findByIsKLAndNameContainingIgnoreCaseOrPycodeContainingIgnoreCase(staticKnowledgeIndexVO.getHasInfo(), inputStr, inputStr, 100);
+        List<PacsName> pacsList = pacsRepository.staticKnowledgeIndex(staticKnowledgeIndexVO.getHasInfo(), inputStr, inputStr, 100);
 
         List<StaticKnowledgeIndexDTO> pacsRetList = Lists.newLinkedList();
         for (PacsName pacs : pacsList) {
@@ -303,7 +303,7 @@ public class RetrievalFacade {
         }
 
         //TODO 手术和操作
-        List<YiBaoOperationName> operationList = operationRepository.findByIsKLAndNameContainingIgnoreCaseOrPycodeContainingIgnoreCase(staticKnowledgeIndexVO.getHasInfo(), inputStr, inputStr, 100);
+        List<YiBaoOperationName> operationList = operationRepository.staticKnowledgeIndex(staticKnowledgeIndexVO.getHasInfo(), inputStr, inputStr, 100);
 
         List<StaticKnowledgeIndexDTO> operationRetList = Lists.newLinkedList();
 

+ 61 - 35
src/main/java/com/diagbot/facade/TestFacade.java

@@ -36,6 +36,7 @@ import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
@@ -77,6 +78,9 @@ public class TestFacade {
             IndicationPushVO indicationPushVO = new IndicationPushVO();
             indicationPushVO.setRuleType("2");
             indicationPushVO.setIdNum(bean.getIdNum());
+            if (StringUtil.isBlank(bean.getStandName()) || bean.getNeoName().contains("本品")) {
+                continue;
+            }
             if (StringUtil.isNotBlank(bean.getOrderType())) {
                 switch (bean.getOrderType()) {
                     case "实验室检查名称": // 细项
@@ -130,9 +134,9 @@ public class TestFacade {
             if (StringUtil.isNotEmpty(bean.getNeoType())) {
                 switch (bean.getNeoType()) {
                     case "1": // 性别
-                        if ("男".equals(bean.getNeoName())) {
+                        if ("男".equals(bean.getNeoName())) {
                             indicationPushVO.setSex(1);
-                        } else if ("女".equals(bean.getNeoName())) {
+                        } else if ("女".equals(bean.getNeoName())) {
                             indicationPushVO.setSex(2);
                         }
                         break;
@@ -168,42 +172,58 @@ public class TestFacade {
                         symptom.append(bean.getNeoName()).append("。");
                         indicationPushVO.setSymptom(symptom.toString());
                         break;
-                    case "10": // 禁忌人群
-                        if ("妊娠".equals(bean.getNeoName())) {
-                            List<Item> groupList = new ArrayList<>();
-                            Item group = new Item();
-                            group.setName(bean.getNeoName());
-                            group.setUniqueName(bean.getNeoName());
-                            groupList.add(group);
-                            indicationPushVO.setDiag(groupList);
-                        } else {
-                            continue;
-                        }
                     case "7" : // 药品过敏原
                         StringBuffer pastStr = new StringBuffer("");
+                        String name = bean.getNeoName();
+                        List<String> drugAll = new ArrayList<>();
+                        // 分号表示有多条
+                        List<String> drugList = Arrays.asList(name.split(";|;"));
                         if ("药品通用名称".equals(bean.getDrugType())) {
-                            pastStr.append("有“").append(bean.getNeoName()).append("”过敏。");
-                            indicationPushVO.setPasts(pastStr.toString());
+                            drugAll.addAll(drugList);
                         } else if ("药品类别".equals(bean.getDrugType())) {
-                            List<String> drugList = (List<String>)redisUtil.get(RedisEnum.drugType.getName() + bean.getNeoName());
-                            if (ListUtil.isNotEmpty(drugList)) {
-                                if (testLineVO.isGetOne()) {
-                                    pastStr.append("有“").append(drugList.get(getRandomNum(drugList.size()))).append("”过敏。");
-                                    indicationPushVO.setPasts(pastStr.toString());
-                                } else {
-                                    for (String s : drugList) {
-                                        pastStr = new StringBuffer("");
-                                        IndicationPushVO indicationPushCopy = new IndicationPushVO();
-                                        BeanUtil.copyProperties(indicationPushVO, indicationPushCopy);
-                                        pastStr.append("有“").append(s).append("”过敏。");
-                                        indicationPushCopy.setPasts(pastStr.toString());
-                                        indicationPushCopy.setMsg("过敏药品【" + s + "】");
-                                        indicationPushVOList.add(indicationPushCopy);
-                                    }
-                                    continue;
+                            for (String s : drugList) {
+                                List<String> drugRedis = (List<String>)redisUtil.get(RedisEnum.drugType.getName() + s);
+                                if (ListUtil.isNotEmpty(drugRedis)) {
+                                    drugAll.addAll(drugRedis);
                                 }
                             }
                         }
+
+                        if (testLineVO.isGetOne()) { // 随机取一条
+                            pastStr.append("对“").append(drugAll.get(getRandomNum(drugAll.size()))).append("”过敏。");
+                            indicationPushVO.setPasts(pastStr.toString());
+                        } else { // 遍历
+                            for (String s : drugAll) {
+                                pastStr = new StringBuffer("");
+                                IndicationPushVO indicationPushCopy = new IndicationPushVO();
+                                BeanUtil.copyProperties(indicationPushVO, indicationPushCopy);
+                                pastStr.append("对“").append(s).append("”过敏。");
+                                indicationPushCopy.setPasts(pastStr.toString());
+                                indicationPushCopy.setMsg("过敏药品【" + s + "】");
+                                indicationPushVOList.add(indicationPushCopy);
+                            }
+                            continue;
+                        }
+                        break;
+                    case "10": // 禁忌人群
+                        switch (bean.getNeoName()) {
+                            case "妊娠":
+                                List<Item> groupList = new ArrayList<>();
+                                Item group = new Item();
+                                group.setName(bean.getNeoName());
+                                group.setUniqueName(bean.getNeoName());
+                                groupList.add(group);
+                                indicationPushVO.setDiag(groupList);
+                                break;
+                            case "月经期":
+                                indicationPushVO.setSymptom("月经第" +(int)(Math.random() * 30) + "天");
+                                break;
+                            default:
+                                continue;
+                        }
+                        break;
+                    case "11": // 过敏原
+                        indicationPushVO.setPasts("有“" + bean.getNeoName() + "”过敏史");
                         break;
                     case "12": // 体征
                         StringBuffer sbVital = new StringBuffer();
@@ -231,8 +251,11 @@ public class TestFacade {
                             indicationPushVO.setVital(sbVital.toString());
                         }
                         break;
+                    case "13": // 禁忌医疗器械及物品
+                        indicationPushVO.setPasts(bean.getNeoName());
+                        break;
                     case "14": // 年龄
-                        String[] splitAge = bean.getNeoName().split(",");
+                        String[] splitAge = bean.getNeoName().split(",|,");
                         indicationPushVO.setAge((int) getValueNum(splitAge));
                         break;
                     default:
@@ -412,9 +435,9 @@ public class TestFacade {
             indicationPushVO.setRuleType("4");
             indicationPushVO.setIdNum(bean.getIdNum());
 
-            if ("男".equals(bean.getSexStr())) {
+            if ("男".equals(bean.getSexStr())) {
                 indicationPushVO.setSex(1);
-            } else if ("女".equals(bean.getSexStr())) {
+            } else if ("女".equals(bean.getSexStr())) {
                 indicationPushVO.setSex(2);
             }
             if (StringUtil.isNotBlank(bean.getDisName())) {
@@ -980,6 +1003,9 @@ public class TestFacade {
     public Map getDebugMapMulti(List<IndicationPushVO> indicationPushVOList, String ruleType, long start) {
         Map<String, Object> map = new LinkedHashMap<>();
         List<String> errMsg = new ArrayList<>();
+        if (ListUtil.isEmpty(indicationPushVOList)) {
+            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "无测试数据");
+        }
         try {
             int threadNum = 8; // 推荐的总线程数 = cpu个数 * 每个cpu的核数
             List<List<IndicationPushVO>> threadData = divideByCopies(indicationPushVOList, threadNum);
@@ -1015,7 +1041,7 @@ public class TestFacade {
             Long t2 = System.currentTimeMillis();
             map.put("执行时间", (t2 - start) / 1000.0 + "秒");
         } catch (Exception e) {
-            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "多线程执行高风险手术复杂情况失败:" + e.getMessage());
+            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "多线程执行失败:" + e.getMessage());
         }
         return map;
     }

+ 22 - 1
src/main/java/com/diagbot/model/ai/process/EntityProcessClinic.java

@@ -4,7 +4,24 @@ package com.diagbot.model.ai.process;
 import com.alibaba.fastjson.JSONObject;
 import com.diagbot.model.ai.model.EntityEnum;
 import com.diagbot.model.ai.model.Lemma;
-import com.diagbot.model.entity.*;
+import com.diagbot.model.entity.Aggravate;
+import com.diagbot.model.entity.BeHospitalizedWay;
+import com.diagbot.model.entity.BodyPart;
+import com.diagbot.model.entity.Cause;
+import com.diagbot.model.entity.Clinical;
+import com.diagbot.model.entity.Degree;
+import com.diagbot.model.entity.Diag;
+import com.diagbot.model.entity.General;
+import com.diagbot.model.entity.GeneralDesc;
+import com.diagbot.model.entity.Medicine;
+import com.diagbot.model.entity.Modification;
+import com.diagbot.model.entity.Operation;
+import com.diagbot.model.entity.PD;
+import com.diagbot.model.entity.Property;
+import com.diagbot.model.entity.Relief;
+import com.diagbot.model.entity.Treat;
+import com.diagbot.model.entity.Trend;
+import com.diagbot.model.entity.Vital;
 import com.diagbot.model.label.PresentLabel;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -157,6 +174,10 @@ public class EntityProcessClinic extends EntityProcess {
             }
             presentLabel.setPds(pds);
 
+            EntityProcessVital vital = new EntityProcessVital();
+            List<Vital> vitals = vital.extractEntityClinic(aiOut);
+            presentLabel.setVitals(vitals);
+
         } catch (Exception e) {
             e.printStackTrace();
             logger.error(e.getMessage(), e);

+ 5 - 4
src/main/java/com/diagbot/model/ai/process/EntityProcessPast.java

@@ -5,6 +5,7 @@ import com.diagbot.model.ai.model.EntityEnum;
 import com.diagbot.model.ai.model.Lemma;
 import com.diagbot.model.entity.*;
 import com.diagbot.model.label.PastLabel;
+import com.diagbot.util.CoreUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
@@ -124,8 +125,8 @@ public class EntityProcessPast extends EntityProcess {
                     //药物过敏史
                     if (relationLemma.getProperty().equals(EntityEnum.DRUG_ALLERGY.toString())) {
                         AllergyMedicine allergyMedicine = new AllergyMedicine();
-                        allergyMedicine.setName(relationLemma.getText());
-                        allergyMedicine.setStandName(relationLemma.getText());
+                        allergyMedicine.setName(CoreUtil.replaceStartPunctuation(relationLemma.getText()));
+                        allergyMedicine.setStandName(CoreUtil.replaceStartPunctuation(relationLemma.getText()));
                         allergyMedicine.setNegative(findNegative(relationLemma));//阴性
                         allergyMedicine.setPd(findPD(relationLemma));//时间
                         allergyMedicine.setDegree(findT(relationLemma, new Degree(), EntityEnum.TREND.toString()));//程度
@@ -151,8 +152,8 @@ public class EntityProcessPast extends EntityProcess {
             List<Lemma> allergyMedicineLemmas = createEntityTree(aiOut, EntityEnum.DRUG_ALLERGY.toString());
             for (Lemma lemma : allergyMedicineLemmas) {
                 AllergyMedicine allergyMedicine = new AllergyMedicine();
-                allergyMedicine.setName(lemma.getText());
-                allergyMedicine.setStandName(lemma.getText());
+                allergyMedicine.setName(CoreUtil.replaceStartPunctuation(lemma.getText()));
+                allergyMedicine.setStandName(CoreUtil.replaceStartPunctuation(lemma.getText()));
                 if (lemma.isHaveChildren()) {
                     allergyMedicine.setNegative(findNegative(lemma));
                     allergyMedicine.setPd(findPD(lemma));//时间

+ 96 - 0
src/main/java/com/diagbot/model/ai/process/EntityProcessVital.java

@@ -12,6 +12,8 @@ import java.util.ArrayList;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 public class EntityProcessVital extends EntityProcess {
     public VitalLabel extractEntity(JSONObject outputs) {
@@ -108,4 +110,98 @@ public class EntityProcessVital extends EntityProcess {
         }
         return vitalLabel;
     }
+
+
+    /**
+     * 只获取体征内容
+     * @param outputs
+     * @return
+     */
+    public List<Vital> extractEntityClinic(JSONObject outputs) {
+        List<Vital> vitals = new ArrayList<>();
+        Vital vital =null;
+        List<Map<String, String>> vitalEntityList = processJson(outputs, EntityEnum.SIGN.toString());
+        for (Map<String, String> vitalEntityMap : vitalEntityList) {
+            if (StringUtils.isEmpty(vitalEntityMap.get(EntityEnum.SIGN.toString()))) {
+                continue;
+            }
+            vital = new Vital();
+            for (String key:vitalEntityMap.keySet()) {
+                String entity = vitalEntityMap.get(key);
+                switch (EntityEnum.parseOfValue(key)) {
+                    case SIGN:
+                        vital.setName(entity);
+                        vital.setStandName(entity);
+                        break;
+                    case NEGATIVE:
+                        Negative negative = new Negative();
+                        negative.setName(entity);
+                        vital.setNegative(negative);
+                        break;
+                    case BODY:
+                        BodyPart bodyPart = new BodyPart();
+                        bodyPart.setName(entity);
+                        vital.setBodyPart(bodyPart);
+                        break;
+                    case INDEX_VALUE:
+                        PD pd = new PD();
+                        String[] val_unit = new String[2];
+                        if (StringUtil.isNotBlank(entity)) {
+                            val_unit = extract_digit_new(entity);
+                            pd.setValue(val_unit[0]);
+                            pd.setUnit(val_unit[1]);
+                        }
+                        pd.setName(entity);
+                        vital.setPd(pd);
+                        break;
+                    case MODIFICATION:
+                        if(entity.contains("度")){
+                            Degree degree = new Degree();
+                            degree.setName(entity);
+                            vital.setDegree(degree);
+                        }
+                        break;
+                }
+            }
+            vitals.add(vital);
+        }
+
+        // 生命体征特殊处理
+        for (Vital vi : vitals) {
+            if ("T".equals(vi.getName().toUpperCase())) {
+                vi.setStandName("体温");
+            } else if ("P".equals(vi.getName().toUpperCase())) {
+                vi.setStandName("脉搏");
+            } else if ("R".equals(vi.getName().toUpperCase())) {
+                vi.setStandName("呼吸");
+            } else if ("血压".equals(vi.getName()) || "BP".equals(vi.getName().toUpperCase())) {
+                String bpName = vi.getPd().getName();
+                Pattern pattern = Pattern.compile("\\d+/\\d+"); // 示例:血压80/44mmHg
+                Matcher matcher = pattern.matcher(bpName);
+
+                if (matcher.find()) {
+                    String val = matcher.group();
+                    vi.getPd().setValue(val);  // 重新赋值血压的数值
+                    vi.getPd().setUnit(bpName.substring(bpName.indexOf(val) + 1));   // 重新赋值血压的单位
+
+                    String[] bp = val.split("/");
+
+                    List<Usual> usualList = new ArrayList<>();
+                    Usual usualSbp = new Usual();
+                    usualSbp.setName(vi.getName());
+                    usualSbp.setStandName("收缩压");
+                    usualSbp.setValue(bp[0]);
+                    usualList.add(usualSbp);
+                    vi.setUsualList(usualList);
+
+                    Usual usualDbp = new Usual();
+                    usualDbp.setName(vi.getName());
+                    usualDbp.setStandName("舒张压");
+                    usualDbp.setValue(bp[1]);
+                    usualList.add(usualDbp);
+                }
+            }
+        }
+        return vitals;
+    }
 }

+ 2 - 0
src/main/java/com/diagbot/model/label/PresentLabel.java

@@ -42,6 +42,8 @@ public class PresentLabel extends GeneralLabel {
     private List<PD> pds = new ArrayList<>();
     //现病史一般情况之后的服用药品
     List<Medicine> takeMedicine = new ArrayList<>();
+    //体征内容
+    private List<Vital> vitals = new ArrayList<>();
 
     public <T> void add(List<T> list, T obj) {
         list.add(obj);

+ 8 - 2
src/main/java/com/diagbot/process/BillProcess.java

@@ -22,6 +22,7 @@ import com.diagbot.rule.CommonRule;
 import com.diagbot.rule.DrugRule;
 import com.diagbot.rule.GroupRule;
 import com.diagbot.rule.LisRule;
+import com.diagbot.rule.MedEquRule;
 import com.diagbot.rule.PacsRule;
 import com.diagbot.rule.SexRule;
 import com.diagbot.rule.VitalRule;
@@ -60,6 +61,8 @@ public class BillProcess {
     VitalRule vitalRule;
     @Autowired
     GroupRule groupRule;
+    @Autowired
+    MedEquRule medEquRule;
 
 
     public void process(List<BillNeoDTO> billNeoDTOList, WordCrfDTO wordCrfDTO, IndicationDTO res) {
@@ -91,7 +94,7 @@ public class BillProcess {
             // TODO 测试数据开始
             // if (billNeoDTO.getName().equals("普通胃镜检查")) {
             //     NodeNeoDTO sexNeo = new NodeNeoDTO();
-            //     sexNeo.setName("男");
+            //     sexNeo.setName("男");
             //     billNeoMaxDTO.setGender(sexNeo);
             //
             //     NodeNeoDTO nodeNeoDTO = new NodeNeoDTO();
@@ -242,7 +245,7 @@ public class BillProcess {
             // 临床表现
             commonRule.compareNameWithBill(bill.getClinicfindings(), clinicals, bill, billMsgList, NeoEnum.clinicfindings.getName());
 
-            // 手术(既往史、现病史)
+            // 手术(既往史、现病史、医嘱手术)
             commonRule.compareNameWithBill(bill.getOperations(), operations_all, bill, billMsgList, NeoEnum.operations.getName());
 
             // 禁忌过敏药品(既往史)
@@ -256,6 +259,9 @@ public class BillProcess {
 
             // 禁用辅助检查描述
             commonRule.compareItemWithBill(bill.getPacsDesc(), pacsDescList, bill, billMsgList, NeoEnum.pacsDesc.getName());
+
+            // 禁忌医疗器械及物品
+            medEquRule.bill(wordCrfDTO.getPastLabel().getText(), bill, billMsgList, NeoEnum.medEqu.getName());
         }
 
         // 24小时重复开单项

+ 7 - 6
src/main/java/com/diagbot/process/PushProcess.java

@@ -40,7 +40,7 @@ public class PushProcess {
         Map<String, List<PushBaseDTO>> dis = new HashMap<>();
         //如果下的诊断有数据就反推
         if(pushVO.getDiagVo() != null && pushVO.getDiagVo().getDiags().size() > 0){
-            reversePushPackage(length, pushDTO, ruleTypeList, typeWords, pushVO,dis,wordCrfDTO.getDiag());
+            reversePushPackage(length, pushDTO, ruleTypeList, typeWords, pushVO,dis);
         }else {
             //正推
             List<NeoPushDTO> push = neoFacade.getPush(pushVO);
@@ -55,7 +55,7 @@ public class PushProcess {
                 //把第一个推送出来的诊断set到diagOrder中,再反推
                 setPushVo(pushVO, push);
                 //调用反推
-                reversePushPackage(length, pushDTO, ruleTypeList, typeWords, pushVO,dis,wordCrfDTO.getDiag());
+                reversePushPackage(length, pushDTO, ruleTypeList, typeWords, pushVO,dis);
             }
         }
         return pushDTO;
@@ -88,7 +88,7 @@ public class PushProcess {
         return typeWordsMap;
     }
 
-    private void reversePushPackage(int length, PushDTO pushDTO, List<String> ruleTypeList, Map<String, List<String>> typeWords, NeoPushVO pushVO, Map<String, List<PushBaseDTO>> dis, List<Item> diags) {
+    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)){
             // 症状
@@ -200,13 +200,14 @@ public class PushProcess {
     }
 
     private List<PushBaseDTO> getPackagePushBaseDTO(Map<String, List<String>> typeWords, List<String> symptoms, StandConvertEnum symptom) {
-
-        List<PushBaseDTO> symptomPush = symptoms.stream().map(x -> {
+        List<PushBaseDTO> symptomPush = symptoms.stream()
+                .filter(x -> !typeWords.get(symptom.toString()).contains(x))
+                .map(x -> {
             PushBaseDTO pushBaseDTO = new PushBaseDTO();
             pushBaseDTO.setName(x);
             return pushBaseDTO;
         }).collect(Collectors.toList());
-        return symptomPush.stream().filter(x -> !typeWords.get(symptom.getName()).contains(x.getName())).collect(Collectors.toList());
+        return symptomPush;
     }
 }
 

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

@@ -12,7 +12,7 @@ public class Constants {
     public static String conflict = "禁忌";
     public static String age = "年龄";
     public static String allergicmed = "过敏药品";
-//    public static String clinicalfinding = "临床表现";
+    public static String geiyao = "给药途径";
     public static String complication = "并发症";
     public static String conflictmed = "配伍";
 //    public static String lis = "实验室检查";

+ 7 - 4
src/main/java/com/diagbot/repository/DeptNode.java

@@ -1,8 +1,7 @@
 package com.diagbot.repository;
 
 import com.diagbot.entity.node.Dept;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageRequest;
+import com.diagbot.util.ListUtil;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -14,8 +13,12 @@ public class DeptNode {
      */
     public List<String> getDeptNameList(String name, DeptRepository deptRepository, BaseNodeRepository baseNodeRepository) {
         List<String> deptlt = new ArrayList<>();
-        Page<Dept> deptPage = deptRepository.findByNameContainingIgnoreCaseOrPycodeContainingIgnoreCase(name, name, PageRequest.of(0, 100));
-        List<Dept> deptlist = deptPage.getContent();
+        List<Dept> deptlist = deptRepository.index(name, name, 100);
+
+        if (ListUtil.isNotEmpty(deptlist) && deptlist.size() > 100) {
+            deptlist = deptlist.subList(0, 100);
+        }
+
         for (Dept dept : deptlist) {
             deptlt.add(dept.getName());
         }

+ 19 - 0
src/main/java/com/diagbot/repository/DeptRepository.java

@@ -3,7 +3,9 @@ package com.diagbot.repository;
 import com.diagbot.entity.node.Dept;
 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;
 
@@ -14,5 +16,22 @@ public interface DeptRepository extends Neo4jRepository<Dept, Long> {
 
     List<Dept> findByNameIs(String name);
 
+    List<Dept> findByNameIn(List<String> names);
+
     Page<Dept> findByNameContainingIgnoreCaseOrPycodeContainingIgnoreCase(String name, String pycode, Pageable pageable);
+
+    @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<Dept> index(@Param("name") String name, @Param("pycode") String pycode, @Param("size") Integer size);
 }

+ 6 - 2
src/main/java/com/diagbot/repository/LisNameNode.java

@@ -12,6 +12,7 @@ import com.diagbot.entity.node.Group;
 import com.diagbot.entity.node.LisCritical;
 import com.diagbot.entity.node.LisName;
 import com.diagbot.entity.node.LisSet;
+import com.diagbot.util.ListUtil;
 import com.diagbot.util.NeoUtil;
 import com.diagbot.util.StringUtil;
 import com.diagbot.vo.CriticalNeoVO;
@@ -181,8 +182,11 @@ public class LisNameNode {
 		List<LisDetailDTO> lislist = new ArrayList<>();
 		LisDetailDTO lisDetailDTO;
 
-		Page<LisName> lisPage = lisRepository.findByNameContainingIgnoreCaseOrPycodeContainingIgnoreCase(name, name, PageRequest.of(0, 100));
-		List<LisName> lislt = lisPage.getContent();
+		List<LisName> lislt = lisRepository.index(name, name,100);
+
+		if (ListUtil.isNotEmpty(lislt) && lislt.size() > 100) {
+			lislt = lislt.subList(0, 100);
+		}
 
 		for (LisName lis : lislt) {
 			lisDetailDTO = new LisDetailDTO();

+ 30 - 5
src/main/java/com/diagbot/repository/LisNameRepository.java

@@ -20,8 +20,33 @@ public interface LisNameRepository extends Neo4jRepository<LisName, Long> {
 
     Page<LisName> findByNameContainingIgnoreCaseOrPycodeContainingIgnoreCase(String name, String pycode, Pageable pageable);
 
-    @Query("MATCH (n:`实验室检查名称`)-[r]-(m) WHERE n.`静态知识标识` = $isKL  AND (toLower(n.`name`) CONTAINS toLower($name) OR toLower(n.`拼音编码`) CONTAINS toLower($pycode))  RETURN n, collect(r), collect(m) limit $size")
-    List<LisName> findByIsKLAndNameContainingIgnoreCaseOrPycodeContainingIgnoreCase(@Param("isKL") Integer isKL, @Param("name") String name, @Param("pycode") String pycode, @Param("size") Integer size);
-
-}
-
+    @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<LisName> 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<LisName> index(@Param("name") String name, @Param("pycode") String pycode, @Param("size") Integer size);
+}

+ 6 - 4
src/main/java/com/diagbot/repository/LisSetNode.java

@@ -5,9 +5,8 @@ import com.diagbot.dto.LisBillNeoDTO;
 import com.diagbot.dto.NeoEntityDTO;
 import com.diagbot.entity.node.Gender;
 import com.diagbot.entity.node.LisSet;
+import com.diagbot.util.ListUtil;
 import com.diagbot.util.NeoUtil;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageRequest;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -149,8 +148,11 @@ public class LisSetNode {
 
 		List<String> lispacklist = new ArrayList<>();
 
-		Page<LisSet> lisPackPage = lisPackRepository.findByNameContainingIgnoreCaseOrPycodeContainingIgnoreCase(name, name, PageRequest.of(0, 100));
-		List<LisSet> lisSetlist = lisPackPage.getContent();
+		List<LisSet> lisSetlist = lisPackRepository.index(name, name, 100);
+
+		if (ListUtil.isNotEmpty(lisSetlist) && lisSetlist.size() > 100) {
+			lisSetlist = lisSetlist.subList(0, 100);
+		}
 
 		for (LisSet lisSet : lisSetlist) {
 			nodename = lisSet.getName();

+ 29 - 2
src/main/java/com/diagbot/repository/LisSetRepository.java

@@ -20,7 +20,34 @@ public interface LisSetRepository extends Neo4jRepository<LisSet, Long> {
 
     Page<LisSet> findByNameContainingIgnoreCaseOrPycodeContainingIgnoreCase(String name, String pycode, Pageable pageable);
 
-    @Query("MATCH (n:`实验室检查套餐名`)-[r]-(m) WHERE n.`静态知识标识` = $isKL  AND (toLower(n.`name`) CONTAINS toLower($name) OR toLower(n.`拼音编码`) CONTAINS toLower($pycode))  RETURN n, collect(r), collect(m) limit $size")
-    List<LisSet> findByIsKLAndNameContainingIgnoreCaseOrPycodeContainingIgnoreCase(@Param("isKL") Integer isKL, @Param("name") String name, @Param("pycode") String pycode, @Param("size") Integer size);
+    @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<LisSet> 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<LisSet> index(@Param("name") String name, @Param("pycode") String pycode, @Param("size") Integer size);
 }
 

+ 62 - 0
src/main/java/com/diagbot/repository/MedRegNameNode.java

@@ -5,6 +5,7 @@ import com.diagbot.dto.DrugBillNeoDTO;
 import com.diagbot.dto.HighRiskNeoDTO;
 import com.diagbot.dto.NodeNeoDTO;
 import com.diagbot.entity.node.*;
+import com.diagbot.util.NeoUtil;
 import com.diagbot.vo.Drug;
 
 import java.math.BigDecimal;
@@ -74,5 +75,66 @@ public class MedRegNameNode {
     }
 
 
+    public DrugBillNeoDTO MedRegNametoDrugDTO(MedRegName medRegName, DrugBillNeoDTO drugBillNeoDTO) {
+
+        Set<Vital> vitals = medRegName.getVital();
+        for (Vital vital : vitals) {
+            NodeNeoDTO nodeNeoDTO = NeoUtil.fillNodeNeoDTO(vital);
+            drugBillNeoDTO.setAgeNeoDTO(nodeNeoDTO);
+        }
+
+        Set<Group> groups = medRegName.getGroup();
+        for (Group group : groups) {
+            if (!NeoUtil.inlist(group.getName(),drugBillNeoDTO.getGroup())) {
+                NodeNeoDTO nodeNeoDTO = new NodeNeoDTO();
+                nodeNeoDTO.setName(group.getName());
+                nodeNeoDTO.setTermtype(Constants.group);
+                drugBillNeoDTO.getGroup().add(nodeNeoDTO);
+            }
+        }
+
+
+        Set<MedAllergen> medAllergens = medRegName.getMedAllergens();
+        for (MedAllergen medAllergen : medAllergens) {
+            if (!NeoUtil.inlist(medAllergen.getName(), drugBillNeoDTO.getAllergicmeds())) {
+                NodeNeoDTO nodeNeoDTO = new NodeNeoDTO();
+                nodeNeoDTO.setName(medAllergen.getName());
+                nodeNeoDTO.setTermtype(medAllergen.getMedtype());
+                drugBillNeoDTO.getAllergicmeds().add(nodeNeoDTO);
+            }
+        }
+
+
+        Set<MedRegName> medRegNames = medRegName.getMedregnames_out();
+        for (MedRegName medRegnm : medRegNames) {
+            if (!NeoUtil.inlist(medRegnm.getName(), drugBillNeoDTO.getAllergicmeds())) {
+                NodeNeoDTO nodeNeoDTO = new NodeNeoDTO();
+                nodeNeoDTO.setName(medRegnm.getName());
+                nodeNeoDTO.setTermtype(Constants.yaoping);
+                drugBillNeoDTO.getAllergicmeds().add(nodeNeoDTO);
+            }
+        }
+
+
+        String conflict_gender = medRegName.getConflict_gender();
+        if (null!=conflict_gender) {
+            NodeNeoDTO nodeNeoDTO = new NodeNeoDTO();
+            nodeNeoDTO.setName(conflict_gender);
+            nodeNeoDTO.setTermtype(Constants.gender);
+            drugBillNeoDTO.setGender(nodeNeoDTO);
+        }
+
+
+        String conflict_geiyao = medRegName.getConflict_geiyao();
+        if (null!=conflict_geiyao) {
+            NodeNeoDTO nodeNeoDTO = new NodeNeoDTO();
+            nodeNeoDTO.setName(conflict_geiyao);
+            nodeNeoDTO.setTermtype(Constants.geiyao);
+            drugBillNeoDTO.setGeiyaoNeoDTO(nodeNeoDTO);
+        }
+
+
+        return drugBillNeoDTO;
+    }
 }
 

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

@@ -106,7 +106,7 @@ public class MedicineCodeNode {
             nodeInfo = new NodeInfo();
             nodeInfo.setName(medCode.getName());
             nodeInfo.setTypeval(Constants.medcode);
-            drugBillNeoDTO.getProcedures().add(NeoUtil.updateNodeInfo(nodeInfo));
+            drugBillNeoDTO.getMeddevice().add(NeoUtil.updateNodeInfo(nodeInfo));
         }
 
 

+ 50 - 37
src/main/java/com/diagbot/repository/MedicineNode.java

@@ -4,16 +4,10 @@ import com.diagbot.dto.BillNeoDTO;
 import com.diagbot.dto.DrugBillNeoDTO;
 import com.diagbot.dto.DrugInfoDTO;
 import com.diagbot.dto.NodeNeoDTO;
-import com.diagbot.entity.node.Age;
-import com.diagbot.entity.node.Disease;
-import com.diagbot.entity.node.Group;
-import com.diagbot.entity.node.MedAllergen;
-import com.diagbot.entity.node.Medicine;
+import com.diagbot.entity.node.*;
 import com.diagbot.util.ListUtil;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageRequest;
+import com.diagbot.util.NeoUtil;
 
-import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -25,42 +19,48 @@ public class MedicineNode {
     public DrugBillNeoDTO MedicinetoDrugDTO(Medicine medicine) {
         DrugBillNeoDTO drugBillNeoDTO = new DrugBillNeoDTO();
 
-        Set<Age> ages = medicine.getAge();
-        for (Age age : ages) {
-            NodeNeoDTO nodeNeoDTO = fillNodeNeoDTO(age);
+        Set<Vital> vitals = medicine.getVital();
+        for (Vital vital : vitals) {
+            NodeNeoDTO nodeNeoDTO = NeoUtil.fillNodeNeoDTO(vital);
             drugBillNeoDTO.setAgeNeoDTO(nodeNeoDTO);
         }
 
         Set<Group> groups = medicine.getGroup();
         for (Group group : groups) {
-            NodeNeoDTO nodeNeoDTO = new NodeNeoDTO();
-            nodeNeoDTO.setName(group.getName());
-            nodeNeoDTO.setTermtype(Constants.group);
-            drugBillNeoDTO.getGroup().add(nodeNeoDTO);
+            if (!NeoUtil.inlist(group.getName(),drugBillNeoDTO.getGroup())) {
+                NodeNeoDTO nodeNeoDTO = new NodeNeoDTO();
+                nodeNeoDTO.setName(group.getName());
+                nodeNeoDTO.setTermtype(Constants.group);
+                drugBillNeoDTO.getGroup().add(nodeNeoDTO);
+            }
         }
 
 
         Set<MedAllergen> medAllergens = medicine.getMedAllergens();
         for (MedAllergen medAllergen : medAllergens) {
-            NodeNeoDTO nodeNeoDTO = new NodeNeoDTO();
-            nodeNeoDTO.setName(medAllergen.getName());
-            nodeNeoDTO.setTermtype(Constants.yaoping);
-            drugBillNeoDTO.getAllergicmeds().add(nodeNeoDTO);
+            if (!NeoUtil.inlist(medAllergen.getName(), drugBillNeoDTO.getAllergicmeds())) {
+                NodeNeoDTO nodeNeoDTO = new NodeNeoDTO();
+                nodeNeoDTO.setName(medAllergen.getName());
+                nodeNeoDTO.setTermtype(Constants.yaoping);
+                drugBillNeoDTO.getAllergicmeds().add(nodeNeoDTO);
+            }
         }
 
 
         Set<Disease> diseases = medicine.getDisease();
         for (Disease disease : diseases) {
-            NodeNeoDTO nodeNeoDTO = new NodeNeoDTO();
-            nodeNeoDTO.setName(disease.getName());
-            nodeNeoDTO.setTermtype(Constants.disease);
-            drugBillNeoDTO.getDisease().add(nodeNeoDTO);
+            if (!NeoUtil.inlist(disease.getName(), drugBillNeoDTO.getDisease())) {
+                NodeNeoDTO nodeNeoDTO = new NodeNeoDTO();
+                nodeNeoDTO.setName(disease.getName());
+                nodeNeoDTO.setTermtype(Constants.disease);
+                drugBillNeoDTO.getDisease().add(nodeNeoDTO);
+            }
         }
 
         return drugBillNeoDTO;
     }
 
-
+/*
     public NodeNeoDTO fillNodeNeoDTO(Age age) {
         NodeNeoDTO nodeNeoDTO = new NodeNeoDTO();
         Integer range;
@@ -68,31 +68,33 @@ public class MedicineNode {
 
         nodeNeoDTO.setName(age.getName());
 
-        max = (age.getMaxval() == null) ? null : new BigDecimal(age.getMaxval());
+        max = (age.getMaxval()==null)?null:new BigDecimal(age.getMaxval());
         nodeNeoDTO.setMax(max);
 
-        min = (age.getMinval() == null) ? null : new BigDecimal(age.getMinval());
+        min = (age.getMinval()==null)?null:new BigDecimal(age.getMinval());
         nodeNeoDTO.setMin(min);
 
-        range = (age.getRange() == null) ? 0 : age.getRange();
+        range = (age.getRange()==null)?0:age.getRange();
         nodeNeoDTO.setValType(range);
 
         nodeNeoDTO.setName(age.getTermname());
 
         return nodeNeoDTO;
     }
+*/
 
 
     /**
      * 处理处方开单合理性
      */
-    public List<BillNeoDTO> getMedicineBill(Map<String, String> medsterm, MedicineRepository medicineRepository) {
+    public List<BillNeoDTO> getMedicineBill(Map<String, String> medsterm, MedicineRepository medicineRepository,
+                                            MedRegNameRepository medRegNameRepository) {
         List<BillNeoDTO> billNeoDTOs = new ArrayList<>();
         BillNeoDTO billNeoDTO;
 
         DrugBillNeoDTO drugBillNeoDTO;
 
-        List<Medicine> medicine;
+        List<MedRegName> medRegNames;
         String medname;
 
         for (String term : medsterm.keySet()) {
@@ -103,15 +105,23 @@ public class MedicineNode {
 
             drugBillNeoDTO = new DrugBillNeoDTO();
 
-            medicine = medicineRepository.findByNameIs(medname);
-
-            if (medicine != null && medicine.size() > 0) {
-                drugBillNeoDTO = MedicinetoDrugDTO(medicine.get(0));
+            List<String> medRegNamels = medicineRepository.findMedRegNamebyMedicine(medname);
 
-                billNeoDTO.setDrugBillNeoDTO(drugBillNeoDTO);
+            for (String mrnames : medRegNamels) {
+                medRegNames = medRegNameRepository.findByNameIs(mrnames);
 
-                billNeoDTOs.add(billNeoDTO);
+                if (medRegNames != null && medRegNames.size() > 0) {
+                    MedRegNameNode medRegNameNode = new MedRegNameNode();
+                    for (MedRegName medrn : medRegNames) {
+                        drugBillNeoDTO = medRegNameNode.MedRegNametoDrugDTO(medrn, drugBillNeoDTO);
+                    }
+                }
             }
+
+            billNeoDTO.setDrugBillNeoDTO(drugBillNeoDTO);
+
+            billNeoDTOs.add(billNeoDTO);
+
         }
 
 
@@ -128,8 +138,11 @@ public class MedicineNode {
         List<DrugInfoDTO> medslist = new ArrayList<>();
         DrugInfoDTO drugInfoDTO;
 
-        Page<Medicine> medicinePage = medicineRepository.findByNameContainingIgnoreCaseOrPycodeContainingIgnoreCase(name, name, PageRequest.of(0, 100));
-        List<Medicine> medicines = medicinePage.getContent();
+        List<Medicine> medicines = medicineRepository.index(name, name, 100);
+
+        if (ListUtil.isNotEmpty(medicines) && medicines.size() > 100) {
+            medicines = medicines.subList(0, 100);
+        }
 
         for (Medicine med : medicines) {
             drugInfoDTO = new DrugInfoDTO();

+ 34 - 4
src/main/java/com/diagbot/repository/MedicineRepository.java

@@ -18,10 +18,40 @@ public interface MedicineRepository extends Neo4jRepository<Medicine, Long> {
 
     List<Medicine> findByNameIn(List<String> names);
 
-    Page<Medicine> findByNameContainingIgnoreCaseOrPycodeContainingIgnoreCase(String name, String pycode, Pageable pageable);
+    List<Medicine> findByNameContainingOrPycodeContaining(String name, String pycode);
 
-    @Query("MATCH (n:`药品通用名称`)-[r]-(m) WHERE n.`静态知识标识` = $isKL  AND (toLower(n.`name`) CONTAINS toLower($name) OR toLower(n.`拼音编码`) CONTAINS toLower($pycode))  RETURN n, collect(r), collect(m) limit $size")
-    List<Medicine> findByIsKLAndNameContainingIgnoreCaseOrPycodeContainingIgnoreCase(@Param("isKL") Integer isKL, @Param("name") String name, @Param("pycode") String pycode, @Param("size") Integer size);
+    @Query("match (n:药品通用名称)<-[r1:药品相关药品通用名称]-(m:药品代码通用名)-[r2:药品相关药品注册名称]->(o:药品注册名称) where n.name={name} return distinct o.name")
+    List<String> findMedRegNamebyMedicine(@Param("name") String name);
 
-}
+    Page<Medicine> 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<Medicine> 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<Medicine> index(@Param("name") String name, @Param("pycode") String pycode, @Param("size") Integer size);
+}

+ 8 - 7
src/main/java/com/diagbot/repository/PacsNameNode.java

@@ -14,9 +14,8 @@ 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.ListUtil;
 import com.diagbot.util.NeoUtil;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageRequest;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -129,8 +128,8 @@ public class PacsNameNode {
         for (Allergen allergen : allergens) {
             nodeInfo = new NodeInfo();
             nodeInfo.setName(allergen.getName());
-            nodeInfo.setTypeval(Constants.allergen);
-            pacsBillNeoDTO.getOperations().add(NeoUtil.updateNodeInfo(nodeInfo));
+            nodeInfo.setTypeval(Constants.yaoping); // 过敏原归类成药物过敏原,与模型提取匹配
+            pacsBillNeoDTO.getAllergicmeds().add(NeoUtil.updateNodeInfo(nodeInfo));
         }
 
 
@@ -139,7 +138,7 @@ public class PacsNameNode {
             nodeInfo = new NodeInfo();
             nodeInfo.setName(conflictDevice.getName());
             nodeInfo.setTypeval(Constants.conflictdevice);
-            pacsBillNeoDTO.getProcedures().add(NeoUtil.updateNodeInfo(nodeInfo));
+            pacsBillNeoDTO.getMeddevice().add(NeoUtil.updateNodeInfo(nodeInfo));
         }
 
         return pacsBillNeoDTO;
@@ -189,9 +188,11 @@ public class PacsNameNode {
 
         List<String> pacslist = new ArrayList<>();
 
-        Page<PacsName> pacsPage = pacsRepository.findByNameContainingIgnoreCaseOrPycodeContainingIgnoreCase(name, name, PageRequest.of(0, 100));
+        List<PacsName> pacslt = pacsRepository.index(name, name, 100);
 
-        List<PacsName> pacslt = pacsPage.getContent();
+        if (ListUtil.isNotEmpty(pacslt) && pacslt.size() > 100) {
+            pacslt = pacslt.subList(0, 100);
+        }
 
         for (PacsName pacs : pacslt) {
             pacsname = pacs.getName();

+ 30 - 6
src/main/java/com/diagbot/repository/PacsNameRepository.java

@@ -20,9 +20,33 @@ public interface PacsNameRepository extends Neo4jRepository<PacsName, Long> {
 
     Page<PacsName> findByNameContainingIgnoreCaseOrPycodeContainingIgnoreCase(String name, String pycode, Pageable pageable);
 
-    @Query("MATCH (n:`辅助检查名称`)-[r]-(m) WHERE n.`静态知识标识` = $isKL  AND (toLower(n.`name`) CONTAINS toLower($name) OR toLower(n.`拼音编码`) CONTAINS toLower($pycode))  RETURN n, collect(r), collect(m) limit $size")
-    List<PacsName> findByIsKLAndNameContainingIgnoreCaseOrPycodeContainingIgnoreCase(@Param("isKL") Integer isKL, @Param("name") String name, @Param("pycode") String pycode, @Param("size") Integer size);
-
-
-}
-
+    @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<PacsName> 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<PacsName> index(@Param("name") String name, @Param("pycode") String pycode, @Param("size") Integer size);
+}

+ 22 - 11
src/main/java/com/diagbot/repository/YiBaoDiseaseNode.java

@@ -3,18 +3,15 @@ package com.diagbot.repository;
 import com.diagbot.dto.DiseaseInfoDTO;
 import com.diagbot.dto.NeoPushDTO;
 import com.diagbot.dto.PushBaseDTO;
-import com.diagbot.entity.node.GuoLinDiseaseName;
-import com.diagbot.entity.node.GuoLinICD_10Code;
-import com.diagbot.entity.node.PathwayName;
-import com.diagbot.entity.node.YiBaoDiseaseName;
-import com.diagbot.entity.node.YiBaoICD_10Code;
+import com.diagbot.entity.node.*;
+import com.diagbot.util.ListUtil;
+import com.diagbot.util.NeoUtil;
 import com.diagbot.vo.NeoPushVO;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageRequest;
 
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
+import java.util.stream.Collectors;
 
 public class YiBaoDiseaseNode {
 
@@ -26,11 +23,23 @@ public class YiBaoDiseaseNode {
 		int gender = neoPushVO.getSex();
 		int age = neoPushVO.getAge();
 
-		if (matchBasic(disease, gender, age)) {
+		if (NeoUtil.matchBasic(disease, gender, age)) {
 
 			pushBaseDTO = new PushBaseDTO();
 			pushBaseDTO.setName(disease.getName());
 			pushDTO.setDisease(pushBaseDTO);
+
+			pushDTO.setSymptoms(disease.getSymptoms().stream().map(x ->NeoUtil.updatePushInfo(x.getName())).collect(Collectors.toList()));
+
+			pushDTO.setVitals(disease.getVitals().stream().map(x ->NeoUtil.updatePushInfo(x.getName())).collect(Collectors.toList()));
+
+			pushDTO.setLis(disease.getLisnames().stream().map(x ->NeoUtil.updatePushInfo(x.getName())).collect(Collectors.toList()));
+
+			pushDTO.setPacs(disease.getPacsnames().stream().map(x ->NeoUtil.updatePushInfo(x.getName())).collect(Collectors.toList()));
+
+
+
+
 		/*
 		CureRate curerate = disease.getCurerate();
 		if (null != curerate) {
@@ -253,9 +262,11 @@ public class YiBaoDiseaseNode {
 		List<String> dislist = new ArrayList<>();
 		List<DiseaseInfoDTO> diseaseInfoDTOList = new ArrayList<>();
 
-		Page<YiBaoDiseaseName> diseasesPage
-				= diseaseRepository.findByNameContainingIgnoreCaseOrPycodeContainingIgnoreCase(name, name, PageRequest.of(0, 100));
-		List<YiBaoDiseaseName> diseases = diseasesPage.getContent();
+		List<YiBaoDiseaseName> diseases = diseaseRepository.index(name, name, 100);
+
+		if (ListUtil.isNotEmpty(diseases) && diseases.size() > 100) {
+			diseases = diseases.subList(0, 100);
+		}
 
 		for (YiBaoDiseaseName dis : diseases) {
 			icdname = dis.getName();

+ 29 - 3
src/main/java/com/diagbot/repository/YiBaoDiseaseRepository.java

@@ -20,8 +20,34 @@ public interface YiBaoDiseaseRepository extends Neo4jRepository<YiBaoDiseaseName
 
     Page<YiBaoDiseaseName> findByNameContainingIgnoreCaseOrPycodeContainingIgnoreCase(String name, String pycode, Pageable pageable);
 
-    @Query("MATCH (n:`医保疾病名称`)-[r]-(m) WHERE n.`静态知识标识` = $isKL  AND (toLower(n.`name`) CONTAINS toLower($name) OR toLower(n.`拼音编码`) CONTAINS toLower($pycode))  RETURN n, collect(r), collect(m) limit $size")
-    List<YiBaoDiseaseName> findByIsKLAndNameContainingIgnoreCaseOrPycodeContainingIgnoreCase(@Param("isKL") Integer isKL, @Param("name") String name, @Param("pycode") String pycode, @Param("size") Integer size);
-
+    @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<YiBaoDiseaseName> 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<YiBaoDiseaseName> index(@Param("name") String name, @Param("pycode") String pycode, @Param("size") Integer size);
 }
 

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

@@ -27,8 +27,6 @@ import com.diagbot.util.CoreUtil;
 import com.diagbot.util.ListUtil;
 import com.diagbot.util.NeoUtil;
 import com.diagbot.util.StringUtil;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageRequest;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -132,7 +130,7 @@ public class YiBaoOperationNameNode {
             nodeInfo = new NodeInfo();
             nodeInfo.setName(device.getName());
             nodeInfo.setTypeval(Constants.conflictdevice);
-            opBillNeoDTO.getMedallegen().add(NeoUtil.updateNodeInfo(nodeInfo));
+            opBillNeoDTO.getMeddevice().add(NeoUtil.updateNodeInfo(nodeInfo));
         }
 
         return opBillNeoDTO;
@@ -176,9 +174,11 @@ public class YiBaoOperationNameNode {
         List<OperationInfoDTO> opslist = new ArrayList<>();
         OperationInfoDTO opInfoDTO;
 
-        Page<YiBaoOperationName> operationPage = operationRepository.findByNameContainingIgnoreCaseOrPycodeContainingIgnoreCase(name, name, PageRequest.of(0, 100));
+        List<YiBaoOperationName> operations = operationRepository.index(name, name, 100);
 
-        List<YiBaoOperationName> operations = operationPage.getContent();
+        if (ListUtil.isNotEmpty(operations) && operations.size() > 100) {
+            operations = operations.subList(0, 100);
+        }
 
         for (YiBaoOperationName op : operations) {
             opInfoDTO = new OperationInfoDTO();

+ 30 - 4
src/main/java/com/diagbot/repository/YiBaoOperationNameRepository.java

@@ -20,7 +20,33 @@ public interface YiBaoOperationNameRepository extends Neo4jRepository<YiBaoOpera
 
     Page<YiBaoOperationName> findByNameContainingIgnoreCaseOrPycodeContainingIgnoreCase(String name, String pycode, Pageable pageable);
 
-    @Query("MATCH (n:`医保手术和操作名称`)-[r]-(m) WHERE n.`静态知识标识` = $isKL  AND (toLower(n.`name`) CONTAINS toLower($name) OR toLower(n.`拼音编码`) CONTAINS toLower($pycode))  RETURN n, collect(r), collect(m) limit $size")
-    List<YiBaoOperationName> findByIsKLAndNameContainingIgnoreCaseOrPycodeContainingIgnoreCase(@Param("isKL") Integer isKL, @Param("name") String name, @Param("pycode") String pycode, @Param("size") Integer size);
-
-}
+    @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<YiBaoOperationName> 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<YiBaoOperationName> index(@Param("name") String name, @Param("pycode") String pycode, @Param("size") Integer size);
+}

+ 31 - 6
src/main/java/com/diagbot/rule/GroupRule.java

@@ -9,6 +9,8 @@ import com.diagbot.util.MsgUtil;
 import org.springframework.stereotype.Component;
 
 import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 /**
  * @description: 人群规则
@@ -29,16 +31,39 @@ public class GroupRule {
         List<NodeNeoDTO> group = billNeoMaxDTO.getGroup();
         for (NodeNeoDTO node : group) {
             // 妊娠目前从诊断里判断,包含“妊娠”
-            if ("妊娠".equals(node.getName())) {
-                List<Item> diag = wordCrfDTO.getDiag();
-                for (Item item : diag) {
-                    if (item.getUniqueName().contains("妊娠")) {
+            String symptom = wordCrfDTO.getSymptom(); // 现病史内容
+            switch (node.getName()) {
+                case "妊娠":
+                    // 现病史包含“孕妇”
+                    if (symptom.contains("孕妇")) {
                         BillMsg commonBillMsg = MsgUtil.getCommonBillMsg(
                                 billNeoMaxDTO.getOrderName(), billNeoMaxDTO.getOrderStandName(),
-                                item.getUniqueName(), type, billNeoMaxDTO.getType());
+                                "妊娠", type, billNeoMaxDTO.getType());
                         billMsgList.add(commonBillMsg);
                     }
-                }
+                    // 诊断里包含“妊娠”
+                    List<Item> diag = wordCrfDTO.getDiag();
+                    for (Item item : diag) {
+                        if (item.getUniqueName().contains("妊娠")) {
+                            BillMsg commonBillMsg = MsgUtil.getCommonBillMsg(
+                                    billNeoMaxDTO.getOrderName(), billNeoMaxDTO.getOrderStandName(),
+                                    item.getUniqueName(), type, billNeoMaxDTO.getType());
+                            billMsgList.add(commonBillMsg);
+                        }
+                    }
+                    break;
+                case "月经期":
+                    String regex = "月经第(([零一二三四五六七八九十]{0,3})||([0-9]{0,2}))天";
+                    Pattern pattern = Pattern.compile(regex);
+                    Matcher matcher = pattern.matcher(symptom);
+                    boolean rs = matcher.find();
+                    if (rs) {
+                        BillMsg commonBillMsg = MsgUtil.getCommonBillMsg(
+                                billNeoMaxDTO.getOrderName(), billNeoMaxDTO.getOrderStandName(),
+                                "月经期", type, billNeoMaxDTO.getType());
+                        billMsgList.add(commonBillMsg);
+                    }
+                    break;
             }
         }
     }

+ 44 - 0
src/main/java/com/diagbot/rule/MedEquRule.java

@@ -0,0 +1,44 @@
+package com.diagbot.rule;
+
+import com.diagbot.dto.BillMsg;
+import com.diagbot.dto.BillNeoMaxDTO;
+import com.diagbot.dto.NodeNeoDTO;
+import com.diagbot.util.ListUtil;
+import com.diagbot.util.MsgUtil;
+import com.diagbot.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @description: 禁忌医疗器械及物品规则
+ * @author: zhoutg
+ * @time: 2020/8/3 14:47
+ */
+@Component
+public class MedEquRule {
+
+    /**
+     * 比较文本内容是否存在
+     *
+     * @param text
+     * @param billNeoMaxDTO
+     * @param billMsgList
+     * @param type
+     */
+    public void bill(String text, BillNeoMaxDTO billNeoMaxDTO, List<BillMsg> billMsgList, String type) {
+        if (StringUtil.isNotBlank(text)) {
+            List<NodeNeoDTO> medEquList = billNeoMaxDTO.getMeddevice();
+            if (ListUtil.isNotEmpty(medEquList)) {
+                for (NodeNeoDTO node : medEquList) {
+                    if (text.contains(node.getName())) {
+                        BillMsg billMsg = MsgUtil.getBillMedEquMsg(billNeoMaxDTO.getOrderName(), billNeoMaxDTO.getOrderStandName(),
+                                node.getName(), type, billNeoMaxDTO.getType());
+                        billMsgList.add(billMsg);
+                    }
+                }
+            }
+        }
+    }
+
+}

+ 6 - 6
src/main/java/com/diagbot/rule/SexRule.java

@@ -31,18 +31,18 @@ public class SexRule {
             String sex = nodeNeoDTO.getName();
             String sexStr = "";
             if (1 == wordCrfDTO.getSex()) {
-                sexStr = "男";
+                sexStr = "男";
             } else if (2 == wordCrfDTO.getSex()) {
-                sexStr = "女";
+                sexStr = "女";
             }
             if (sex.equals(sexStr)) {
-                if ("男".equals(sexStr)) {
+                if ("男".equals(sexStr)) {
                     BillMsg billMsg = MsgUtil.getCommonBillMsg(billNeoMaxDTO.getOrderName(), billNeoMaxDTO.getOrderStandName(),
-                            "男", type, billNeoMaxDTO.getType());
+                            "男", type, billNeoMaxDTO.getType());
                     billMsgList.add(billMsg);
-                } else if ("女".equals(sexStr)) {
+                } else if ("女".equals(sexStr)) {
                     BillMsg billMsg = MsgUtil.getCommonBillMsg(billNeoMaxDTO.getOrderName(), billNeoMaxDTO.getOrderStandName(),
-                            "女", type, billNeoMaxDTO.getType());
+                            "女", type, billNeoMaxDTO.getType());
                     billMsgList.add(billMsg);
                 }
             }

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

@@ -329,6 +329,7 @@ public class CoreUtil {
                 if (nodeNeoDTO.getName().contains(clinical.getStandName())) {
                     map.put("msg", clinical.getName());
                     flag = true;
+                    break;
                 }
             }
         } else {
@@ -340,6 +341,7 @@ public class CoreUtil {
                     flag = compareNum(nodeNeoDTO, Double.parseDouble(vital.getPd().getValue()));
                     if (flag) {
                         map.put("msg", vital.getName() + subZeroAndDot(String.valueOf(vital.getPd().getValue())));
+                        break;
                     }
                 } else if (ListUtil.isNotEmpty(usualList)) {
                     for (Usual usual : usualList) {
@@ -623,4 +625,78 @@ public class CoreUtil {
     public static void getDebugStr(String msg, Object error, Map<String, Object> debugMap) {
         debugMap.put(msg,  error);
     }
+
+    /**
+     * 年龄字符串转换成double类型
+     *
+     * @param ageStr
+     * @return
+     */
+    public static Double convertAge(String ageStr) {
+        try {
+            if (StringUtil.isEmpty(ageStr)) {
+                return 0.0;
+            }
+            // 全是整形数字,当成年龄处理
+            if (CatalogueUtil.numbersOnly(ageStr)) {
+                return Double.parseDouble(ageStr);
+            }
+            // 20日
+            if (ageStr.endsWith("日")) {
+                return getHalfUp((Double.parseDouble(ageStr.substring(0, ageStr.length() - 1))) / 365);
+            }
+            // 3岁
+            if (ageStr.endsWith("岁")) {
+                return Double.parseDouble(ageStr.substring(0, ageStr.length() - 1));
+            }
+            // 1.08月 | .11月 | 3月
+            if (ageStr.endsWith("月")) {
+                String noUnit = ageStr.substring(0, ageStr.length() - 1);
+                String[] ageArr = new String[2];
+                String[] splitArr = noUnit.split("\\.");
+                if (splitArr.length == 1) {
+                    ageArr[0] = splitArr[0];
+                } else if (splitArr.length == 2) {
+                    ageArr[0] = splitArr[0];
+                    ageArr[1] = splitArr[1];
+                }
+                Double daySum = 0.0D;
+                if (StringUtil.isNotBlank(ageArr[0])) {
+                    daySum += Double.parseDouble(ageArr[0]) * 30;
+                }
+                if (StringUtil.isNotBlank(ageArr[1])) {
+                    daySum += Double.parseDouble(ageArr[1]);
+                }
+                return getHalfUp(daySum / 365);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            return 0.0;
+        }
+        return 0.0;
+    }
+
+    /**
+     * 四舍五入保留2位小数
+     *
+     * @param ageStr
+     * @return
+     */
+    public static Double getHalfUp(Double ageStr) {
+        BigDecimal bg = new BigDecimal(String.valueOf(ageStr));
+        return bg.setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue();
+    }
+
+    /**
+     * 替换首位的标点符号(例如:既往史提取“铁)
+     *
+     * @param str
+     * @return
+     */
+    public static String replaceStartPunctuation(String str) {
+        if (str.startsWith("“")) {
+            return str.replaceFirst("“", "");
+        }
+        return str;
+    }
 }

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

@@ -179,6 +179,33 @@ public class MsgUtil {
         return billMsg;
     }
 
+    /**
+     * 开单合理性禁忌医疗器械及物品提示信息
+     *
+     * @param orderName 原开单项
+     * @param orderStandName 标准开单项
+     * @param content 匹配内容
+     * @param type 类型
+     * @return
+     */
+    public static BillMsg getBillMedEquMsg(String orderName, String orderStandName, String content, String type, String orderType) {
+        BillMsg billMsg = new BillMsg();
+        if (content.startsWith("具有")) {
+            content = content.replaceFirst("具有", ""); // 将“具有”替换成空
+        }
+        String msg = String.format("该患者具有%s,不宜开%s", content, orderName);
+        // 输血提示语是另一种写法
+        if (TypeEnum.transfusion.getName().equals(orderType)) {
+            msg = String.format("该患者具有%s,谨慎输注%s", content, orderName);
+        }
+        billMsg.setMsg(msg);
+        billMsg.setOrderName(orderName);
+        billMsg.setOrderStandName(orderStandName);
+        billMsg.setContent(content);
+        billMsg.setType(type);
+        return billMsg;
+    }
+
     /**
      * 开单合理性手术提示信息
      *

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

@@ -3,12 +3,15 @@ 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;
 import com.diagbot.repository.NodeInfo;
 import com.diagbot.repository.datautil;
 
 import java.math.BigDecimal;
+import java.util.List;
 
 public class NeoUtil {
 
@@ -139,4 +142,43 @@ public class NeoUtil {
         }
         return match;
     }
+
+
+    public static NodeNeoDTO fillNodeNeoDTO(Vital vital) {
+        NodeNeoDTO nodeNeoDTO = new NodeNeoDTO();
+        Integer range;
+        BigDecimal max, min;
+
+        nodeNeoDTO.setName(vital.getName());
+
+        max = (vital.getMaxval()==null)?null:new BigDecimal(vital.getMaxval());
+        nodeNeoDTO.setMax(max);
+
+        min = (vital.getMinval()==null)?null:new BigDecimal(vital.getMinval());
+        nodeNeoDTO.setMin(min);
+
+        range = (vital.getRange()==null)?0:vital.getRange();
+        nodeNeoDTO.setValType(range);
+
+        nodeNeoDTO.setUnit(vital.getUnit());
+
+        nodeNeoDTO.setTermtype(vital.getVitalname());
+
+        return nodeNeoDTO;
+    }
+
+
+    public static boolean inlist(String name, List<NodeNeoDTO> NodeNeoDTOs) {
+        boolean isin = false;
+
+        for (NodeNeoDTO node : NodeNeoDTOs) {
+            if (node.getName().equals(name)) {
+                isin = true;
+                break;
+            }
+        }
+
+        return isin;
+    }
+
 }

+ 2 - 0
src/main/java/com/diagbot/vo/TestLineVO.java

@@ -1,5 +1,6 @@
 package com.diagbot.vo;
 
+import io.swagger.annotations.ApiParam;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -23,5 +24,6 @@ public class TestLineVO implements Serializable {
     private int sheetIndex = 0;
 
     // true 表示随机取一条,false表示取全部
+    @ApiParam(defaultValue = "true")
     private boolean getOne = false;
 }

+ 1 - 1
src/main/java/com/diagbot/web/TestController.java

@@ -112,7 +112,7 @@ public class TestController {
         return RespDTO.onSuc(testFacade.testStandConvert(standConvertCrfVO));
     }
 
-    @ApiOperation(value = "标准词批量转换API[zhoutg]", notes = "类型,疾病: disease,症状: symptom,手术和操作:operation,药品: drug,实验室检查:lis,辅助检查:pacs, 辅助检查:vital")
+    @ApiOperation(value = "标准词批量转换API[zhoutg]", notes = "类型,疾病: disease,症状: symptom,手术和操作:operation,药品: drug,实验室检查:lis,辅助检查:pacs, 查:vital")
     @PostMapping("/testStandConvertBatch")
     public RespDTO<StandConvertCrfBatchDTO> testStandConvertBatch(@RequestBody List<StandConvertCrfVO> standConvertCrfVOList) {
         return RespDTO.onSuc(testFacade.testStandConvertBatch(standConvertCrfVOList));

+ 1 - 1
src/main/resources/application-dev.yml

@@ -153,7 +153,7 @@ ChiefPresentSimilarity:
   url: http://192.168.2.234:3456
 
 StandConvert:
-  url: http://192.168.3.150:23232
+  url: http://192.168.2.234:23232
   rate: 0.9
 
 debugFlag: true

+ 1 - 1
src/main/resources/application-local.yml

@@ -153,7 +153,7 @@ ChiefPresentSimilarity:
   url: http://192.168.2.234:3456
 
 StandConvert:
-  url: http://192.168.3.150:23232
+  url: http://192.168.2.234:23232
   rate: 0.9
 
 debugFlag: true

+ 1 - 1
src/main/resources/application-pre.yml

@@ -153,7 +153,7 @@ ChiefPresentSimilarity:
   url: http://192.168.2.234:3456
 
 StandConvert:
-  url: http://192.168.3.150:23232
+  url: http://192.168.2.234:23232
   rate: 0.9
 
 debugFlag: true

+ 1 - 1
src/main/resources/application-pro.yml

@@ -155,7 +155,7 @@ ChiefPresentSimilarity:
   url: http://192.168.2.234:3456
 
 StandConvert:
-  url: http://192.168.3.150:23232
+  url: http://192.168.2.234:23232
   rate: 0.9
 
 debugFlag: true

+ 1 - 1
src/main/resources/application-test.yml

@@ -153,7 +153,7 @@ ChiefPresentSimilarity:
   url: http://192.168.2.234:3456
 
 StandConvert:
-  url: http://192.168.3.150:23232
+  url: http://192.168.2.234:23232
   rate: 0.9
 
 debugFlag: true