Explorar o código

Merge remote-tracking branch 'origin/master'

MarkHuang %!s(int64=4) %!d(string=hai) anos
pai
achega
c1eb2371aa

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

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

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

@@ -83,7 +83,7 @@ public class ConceptFacade {
                 }
                 break;
             case 3:
-                List<BaseNodeInfo> pacsNameList = pacsNameRepository.findByNameInIgnoreLabel(conceptVO.getNames());
+                List<BaseNodeInfo> pacsNameList = pacsNameRepository.findByNameInMultipleLabel(conceptVO.getNames());
                 if (ListUtil.isNotEmpty(pacsNameList)) {
                     retList = pacsNameList.stream()
                             .map(i -> i.getName())

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

@@ -141,21 +141,19 @@ public class NeoFacade {
     public void diseasePropertyCache() {
         List<DiseaseProperty> diseaseProperty = nodeRepository.getDiseaseProperty();
         if (ListUtil.isNotEmpty(diseaseProperty)) {
-            diseaseProperty.parallelStream().forEach(
-                    x -> {
-                        String name = x.getName();
-                        String sex = x.getSex();
-                        String age = x.getAge();
-                        String fbl = x.getFbl();
+            Map map = diseaseProperty.stream().collect(Collectors.toMap(
+                    k -> RedisEnum.diseaseType.getName() + k.getName(),
+                    v -> {
                         Map<String, String> desc = new HashMap<>();
-                        desc.put("name", name);
-                        desc.put("sex", sex);
-                        desc.put("age", age);
-                        desc.put("fbl", fbl);
-                        redisUtil.updateValue(desc, RedisEnum.diseaseType.getName() + name);
-                    }
-            );
-
+                        desc.put("name", v.getName());
+                        desc.put("sex", v.getSex());
+                        desc.put("age", v.getAge());
+                        desc.put("fbl", v.getFbl());
+                        return desc;
+                    },
+                    (v1, v2) -> (v2)
+            ));
+            redisTemplate.opsForValue().multiSet(map);
         }
     }
 
@@ -262,6 +260,29 @@ public class NeoFacade {
         if (lisPushVo != null) {
             lises = lisPushVo.getLises();
         }
+
+        if (pushDisBySpecialLis(age, sex, neoPushDTOS, lises)) return neoPushDTOS;
+
+        // 症状、体征推送出的疾病
+        pushDisBySymptomOrVital(pushVO, allDis);
+        //化验推出的疾病
+        pushDisByLis(allDis, lises);
+        //辅检推出的疾病
+        pushDisByPacs(pushVO, allDis);
+        filterAndSort(neoPushDTOS, allDis, sex, age);
+
+        return neoPushDTOS;
+    }
+
+    /**
+     * 化验特异性推送疾病
+     * @param age
+     * @param sex
+     * @param neoPushDTOS
+     * @param lises
+     * @return
+     */
+    private boolean pushDisBySpecialLis(Double age, Integer sex, List<NeoPushDTO> neoPushDTOS, List<Lis> lises) {
         if (ListUtil.isNotEmpty(lises)) {
             List<String> lis_dis = lises.parallelStream()
                     .map(x -> nodeRepository.getDisByLis_Special(x.getName(), x.getUniqueName() + x.getResult()))
@@ -269,12 +290,50 @@ public class NeoFacade {
             if (ListUtil.isNotEmpty(lis_dis)) {
                 filterAndSort(neoPushDTOS, lis_dis, sex, age);
                 if (ListUtil.isNotEmpty(neoPushDTOS)) {
-                    return neoPushDTOS;
+                    return true;
                 }
             }
         }
+        return false;
+    }
+
+    /**
+     * 辅检推送疾病
+     * @param pushVO
+     * @param allDis
+     */
+    private void pushDisByPacs(NeoPushVO pushVO, List<String> allDis) {
+        PacsPushVo pacsPushVo = pushVO.getPacsPushVo();
+        if (pacsPushVo != null) {
+            List<Item> pacs = pacsPushVo.getPacs();
+            if (ListUtil.isNotEmpty(pacs)) {
+                List<String> pacsNames = pacs.stream().map(x -> x.getUniqueName()).collect(Collectors.toList());
+                List<String> allDis_byPacsResult = getDisByPacsResult(pacsNames);
+                allDis.addAll(allDis_byPacsResult);
+            }
+        }
+    }
+
+    /**
+     * 化验推送疾病
+     * @param allDis
+     * @param lises
+     */
+    private void pushDisByLis(List<String> allDis, List<Lis> lises) {
+        if (ListUtil.isNotEmpty(lises)) {
+            List<String> lis_dis = lises.parallelStream()
+                    .map(x -> nodeRepository.getDisByLis(x.getName(), x.getUniqueName() + x.getResult()))
+                    .flatMap(List::stream).collect(Collectors.toList());
+            allDis.addAll(lis_dis);
+        }
+    }
 
-        // 如果没有诊断名称,则通过其它信息推送诊断
+    /**
+     * 症状和体征推送疾病
+     * @param pushVO
+     * @param allDis
+     */
+    private void pushDisBySymptomOrVital(NeoPushVO pushVO, List<String> allDis) {
         ChiefPushVo chiefPushVo = pushVO.getChiefPushVo();
         PresentPushVo presentPushVo = pushVO.getPresentPushVo();
         List<String> symptoms = new ArrayList<>();
@@ -292,29 +351,8 @@ public class NeoFacade {
         }
         symptoms = Stream.of(symptom_chief, symptom_present).flatMap(Collection::stream).distinct().collect(Collectors.toList());
         //症状、体征推疾病
-        List<String> allDis_bySymptom = getDisBySymptom(symptoms, age, sex);
+        List<String> allDis_bySymptom = getDisBySymptom(symptoms);
         allDis.addAll(allDis_bySymptom);
-        //化验推出的疾病
-        if (ListUtil.isNotEmpty(lises)) {
-            List<String> lis_dis = lises.parallelStream()
-                    .map(x -> nodeRepository.getDisByLis(x.getName(), x.getUniqueName() + x.getResult()))
-                    .flatMap(List::stream).collect(Collectors.toList());
-            allDis.addAll(lis_dis);
-        }
-
-        //辅检推出的疾病
-        PacsPushVo pacsPushVo = pushVO.getPacsPushVo();
-        if (pacsPushVo != null) {
-            List<Item> pacs = pacsPushVo.getPacs();
-            if (ListUtil.isNotEmpty(pacs)) {
-                List<String> pacsNames = pacs.stream().map(x -> x.getUniqueName()).collect(Collectors.toList());
-                List<String> allDis_byPacsResult = getDisByPacsResult(pacsNames, age, sex);
-                allDis.addAll(allDis_byPacsResult);
-            }
-        }
-        filterAndSort(neoPushDTOS, allDis, sex, age);
-
-        return neoPushDTOS;
     }
 
     private void filterAndSort(List<NeoPushDTO> neoPushDTOS, List<String> allDis, int gender_code, double age) {
@@ -352,17 +390,17 @@ public class NeoFacade {
         });
     }
 
-    public List<String> getDisBySymptom(List<String> symptoms, Double age, Integer sex) {
+    public List<String> getDisBySymptom(List<String> symptoms) {
         List<String> symptomCache = getSymptomCache();
         //取交集
         symptoms.retainAll(symptomCache);
         long start = System.currentTimeMillis();
-        List<String> allDis_bySymptom = pushDisBySymptom(symptomNameRepository, symptoms, age, sex);
+        List<String> allDis_bySymptom = pushDisBySymptom(symptomNameRepository, symptoms);
         long end = System.currentTimeMillis();
         return allDis_bySymptom;
     }
 
-    public List<String> getDisByPacsResult(List<String> pacsResult, Double age, Integer sex) {
+    public List<String> getDisByPacsResult(List<String> pacsResult) {
 
         /*List<PacsResult> byNameIn = pacsResultRepository.findByNameIn(pacsResult);
         List<String> allDis = byNameIn.stream()
@@ -380,7 +418,7 @@ public class NeoFacade {
      * @param symptoms
      * @return
      */
-    public List<String> pushDisBySymptom(SymptomNameRepository symptomNameRepository, List<String> symptoms, Double age, Integer sex) {
+    public List<String> pushDisBySymptom(SymptomNameRepository symptomNameRepository, List<String> symptoms) {
         List<String> allDis = Lists.newArrayList();
         /*List<Symptom> byNameIn = symptomNameRepository.findByNameIn(symptoms);
         allDis = byNameIn.parallelStream()

+ 8 - 3
src/main/java/com/diagbot/facade/RetrievalFacade.java

@@ -248,7 +248,7 @@ public class RetrievalFacade {
                 size -= lisList.size();
             }
             if (size > 0) {
-                pacsList = pacsRepository.staticKnowledgeIndexIgnoreLabel(staticKnowledgeIndexVO.getHasInfo(), inputStr, inputStr, size);
+                pacsList = pacsRepository.staticKnowledgeIndexMultipleLabel(staticKnowledgeIndexVO.getHasInfo(), inputStr, inputStr, size);
                 size -= pacsList.size();
             }
             if (size > 0) {
@@ -267,7 +267,7 @@ public class RetrievalFacade {
                 lisList = lisRepository.staticKnowledgeIndex(staticKnowledgeIndexVO.getHasInfo(), inputStr, inputStr, size);
             }
             if (types.contains(5)) {
-                pacsList = pacsRepository.staticKnowledgeIndexIgnoreLabel(staticKnowledgeIndexVO.getHasInfo(), inputStr, inputStr, size);
+                pacsList = pacsRepository.staticKnowledgeIndexMultipleLabel(staticKnowledgeIndexVO.getHasInfo(), inputStr, inputStr, size);
             }
             if (types.contains(6)) {
                 operationList = operationRepository.staticKnowledgeIndex(staticKnowledgeIndexVO.getHasInfo(), inputStr, inputStr, size);
@@ -308,13 +308,14 @@ public class RetrievalFacade {
         //TODO 检验明细关联出检验套餐
         List<StaticKnowledgeIndexDTO> lisSetRelatecLisRetList = Lists.newLinkedList();
         //TODO 检验明细
+        List<StaticKnowledgeIndexDTO> lisRetList = Lists.newLinkedList();
         if (ListUtil.isNotEmpty(lisList)) {
             for (LisName lis : lisList) {
                 StaticKnowledgeIndexDTO staticDTO = new StaticKnowledgeIndexDTO();
                 staticDTO.setName(lis.getName());
                 staticDTO.setType(StaticTypeEnum.LIS.getKey());
                 staticDTO.setTypeName(StaticTypeEnum.LIS.getName());
-                retList.add(staticDTO);
+                lisRetList.add(staticDTO);
                 if (lis.getLissets().size() > 0) {
                     for (LisSet lisSet : lis.getLissets()) {
                         StaticKnowledgeIndexDTO staticLisSetDTO = new StaticKnowledgeIndexDTO();
@@ -343,6 +344,10 @@ public class RetrievalFacade {
         if (ListUtil.isNotEmpty(lisSetRetList)) {
             retList.addAll(lisSetRetList);
         }
+        //检验细项加在套餐之后
+        if (ListUtil.isNotEmpty(lisRetList)) {
+            retList.addAll(lisRetList);
+        }
 
         //TODO 检查
         if (ListUtil.isNotEmpty(pacsList)) {

+ 15 - 0
src/main/java/com/diagbot/facade/TestFacade.java

@@ -16,6 +16,7 @@ import com.diagbot.vo.IndicationPushVO;
 import com.diagbot.vo.ItemExt;
 import com.diagbot.vo.StandConvertCrfVO;
 import com.diagbot.vo.TestAllVO;
+import com.diagbot.vo.TestExport;
 import com.diagbot.vo.TestIndicationVO;
 import com.diagbot.vo.TestLineVO;
 import io.github.lvyahui8.spring.facade.DataFacade;
@@ -27,6 +28,7 @@ import org.springframework.stereotype.Component;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.commons.CommonsMultipartFile;
 
+import javax.servlet.http.HttpServletResponse;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
@@ -54,6 +56,19 @@ public class TestFacade {
     @Autowired
     CacheFacade cacheFacade;
 
+    /**
+     * 测试导出
+     *
+     */
+    public static void exportExcel(HttpServletResponse response) {
+        List<Lis> lisList = new ArrayList<>();
+        Lis lis1 = new Lis();
+        lis1.setName("血常规");
+        lisList.add(lis1);
+        ExcelUtils.exportExcel(lisList, null, "sheet1", TestExport.class, "名称.xls", response, 12.8f);
+        // ExcelUtils.exportExcel(lisList, "化验导出名称", "导出", TestExport.class, "名称", response);
+    }
+
     /**
      * 开单项数据测试
      *

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

@@ -223,7 +223,7 @@ public class PacsNameNode {
     public List<String> getPACSNameAndPACSSubNameList(String name, PacsNameRepository pacsRepository) {
 
         List<String> pacslist = new ArrayList<>();
-        List<BaseNodeInfo> pacslt = pacsRepository.indexIgnoreLabel(name, name, 100);
+        List<BaseNodeInfo> pacslt = pacsRepository.indexMultipleLabel(name, name, 100);
 
         if (ListUtil.isNotEmpty(pacslt) && pacslt.size() > 100) {
             pacslt = pacslt.subList(0, 100);

+ 13 - 16
src/main/java/com/diagbot/repository/PacsNameRepository.java

@@ -52,44 +52,41 @@ public interface PacsNameRepository extends Neo4jRepository<PacsName, Long> {
     List<PacsName> index(@Param("name") String name, @Param("pycode") String pycode, @Param("size") Integer size);
 
     //检索不区分辅助检查名称和辅助检查子项目名称
-    @Query("MATCH (n) WHERE any(label in labels(n) WHERE label in ['辅助检查名称', '辅助检查子项目名称'])\n" +
-            "AND toLower(n.`name`) = toLower($name) \n" +
-            "OR toLower(n.`拼音编码`) = toLower($pycode)  \n" +
+    @Query("MATCH (n) WHERE (n :辅助检查名称 OR n :辅助检查子项目名称) \n" +
+            "AND (toLower(n.`name`) = toLower($name) OR toLower(n.`拼音编码`) = toLower($pycode))  \n" +
             "RETURN labels(n) as labels,n.name as name\n" +
             "union\n" +
-            "MATCH (n) WHERE any(label in labels(n) WHERE label in ['辅助检查名称', '辅助检查子项目名称'])\n" +
-            "AND toLower(n.`name`) starts with toLower($name) \n" +
-            "OR toLower(n.`拼音编码`) starts with toLower($pycode)  \n" +
+            "MATCH (n) WHERE (n :辅助检查名称 OR n :辅助检查子项目名称)\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 labels(n) as labels,n.name as name\n" +
             "union\n" +
-            "MATCH (n) WHERE any(label in labels(n) WHERE label in ['辅助检查名称', '辅助检查子项目名称'])\n" +
-            "AND toLower(n.`name`) CONTAINS toLower($name) \n" +
-            "OR toLower(n.`拼音编码`) CONTAINS toLower($pycode)  \n" +
+            "MATCH (n) WHERE (n :辅助检查名称 OR n :辅助检查子项目名称)\n" +
+            "AND (toLower(n.`name`) CONTAINS toLower($name) OR toLower(n.`拼音编码`) CONTAINS toLower($pycode))  \n" +
             "WITH n SKIP 0 LIMIT $size\n" +
             "RETURN labels(n) as labels,n.name as name\n")
-    List<BaseNodeInfo> indexIgnoreLabel(@Param("name") String name, @Param("pycode") String pycode, @Param("size") Integer size);
+    List<BaseNodeInfo> indexMultipleLabel(@Param("name") String name, @Param("pycode") String pycode, @Param("size") Integer size);
 
-    @Query("MATCH (n) WHERE any(label in labels(n) WHERE label in ['辅助检查名称', '辅助检查子项目名称'])\n" +
+    @Query("MATCH (n) WHERE (n :辅助检查名称 OR n :辅助检查子项目名称)\n" +
             "AND n.`静态知识标识` = $isKL \n" +
             "AND (toLower(n.`name`) = toLower($name)  OR  toLower(n.`拼音编码`) = toLower($pycode))\n" +
             "RETURN labels(n) as labels,n.name as name\n" +
             "UNION\n" +
-            "MATCH (n) WHERE any(label in labels(n) WHERE label in ['辅助检查名称', '辅助检查子项目名称'])\n" +
+            "MATCH (n) WHERE (n :辅助检查名称 OR n :辅助检查子项目名称)\n" +
             "AND 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 labels(n) as labels,n.name as name\n" +
             "UNION \n" +
-            "MATCH (n) WHERE any(label in labels(n) WHERE label in ['辅助检查名称', '辅助检查子项目名称'])\n" +
+            "MATCH (n) WHERE (n :辅助检查名称 OR n :辅助检查子项目名称)\n" +
             "AND 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 labels(n) as labels,n.name as name\n")
-    List<BaseNodeInfo> staticKnowledgeIndexIgnoreLabel(@Param("isKL") Integer isKL, @Param("name") String name, @Param("pycode") String pycode, @Param("size") Integer size);
+    List<BaseNodeInfo> staticKnowledgeIndexMultipleLabel(@Param("isKL") Integer isKL, @Param("name") String name, @Param("pycode") String pycode, @Param("size") Integer size);
 
-    @Query("MATCH (n) WHERE any(label in labels(n) WHERE label in ['辅助检查名称', '辅助检查子项目名称'])\n" +
+    @Query("MATCH (n) WHERE (n :辅助检查名称 OR n :辅助检查子项目名称)\n" +
             "and n.`name` IN  $names  \n" +
             "RETURN labels(n) as labels,n.name as name\n")
-    List<BaseNodeInfo> findByNameInIgnoreLabel(@Param("names") List<String> names);
+    List<BaseNodeInfo> findByNameInMultipleLabel(@Param("names") List<String> names);
 }

+ 9 - 1
src/main/java/com/diagbot/rule/GroupRule.java

@@ -42,7 +42,7 @@ public class GroupRule {
                                 "妊娠", type, billNeoMaxDTO.getType());
                         billMsgList.add(commonBillMsg);
                     }
-                    // 诊断里包含“妊娠”
+                    // 诊断里包含“妊娠” 或者 包含“孕几周”
                     List<Item> diag = wordCrfDTO.getDiag();
                     for (Item item : diag) {
                         if (item.getUniqueName().contains("妊娠")) {
@@ -50,6 +50,14 @@ public class GroupRule {
                                     billNeoMaxDTO.getOrderName(), billNeoMaxDTO.getOrderStandName(),
                                     item.getUniqueName(), type, billNeoMaxDTO.getType());
                             billMsgList.add(commonBillMsg);
+                        } else {
+                            String regex = "孕.{1,4}周.*"; // 孕xx周
+                            if (item.getUniqueName().matches(regex)) {
+                                BillMsg commonBillMsg = MsgUtil.getCommonBillMsg(
+                                        billNeoMaxDTO.getOrderName(), billNeoMaxDTO.getOrderStandName(),
+                                        item.getUniqueName(), type, billNeoMaxDTO.getType());
+                                billMsgList.add(commonBillMsg);
+                            }
                         }
                     }
                     break;

+ 23 - 0
src/main/java/com/diagbot/vo/TestExport.java

@@ -0,0 +1,23 @@
+package com.diagbot.vo;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 测试导出
+ * </p>
+ *
+ * @author zhaops
+ * @since 2020-07-28
+ */
+@Data
+public class TestExport implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @Excel(name="名称", width = 40, orderNum = "1", isImportField = "true")
+    private String name;
+}

+ 9 - 0
src/main/java/com/diagbot/web/TestController.java

@@ -17,6 +17,7 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.servlet.http.HttpServletResponse;
 import java.util.List;
 import java.util.Map;
 
@@ -42,6 +43,14 @@ public class TestController {
         return RespDTO.onSuc(testFacade.importExcel(file, testLineVO));
     }
 
+    @ApiOperation(value = "导出[zhoutg]",
+            notes = "导出")
+    @PostMapping("/testExport")
+    public RespDTO<Map<String, Object>> testExport(HttpServletResponse response) {
+        testFacade.exportExcel(response);
+        return RespDTO.onSuc(null);
+    }
+
     @ApiOperation(value = "开单合理性【输血】测试API[zhoutg]",
             notes = "idNum:指定行测试<br>" +
                     "sheetIndex:sheet的下标,默认为0,表示第一个sheet")