소스 검색

移除公式编码中没有的数据

kongwz 4 년 전
부모
커밋
dd2aa2638c
2개의 변경된 파일54개의 추가작업 그리고 8개의 파일을 삭제
  1. 32 5
      src/main/java/com/diagbot/facade/KlDiagnoseDetailFacade.java
  2. 22 3
      src/main/java/com/diagbot/util/RegexUtil.java

+ 32 - 5
src/main/java/com/diagbot/facade/KlDiagnoseDetailFacade.java

@@ -5,16 +5,16 @@ import com.diagbot.dto.ExportDiagnoseDTO;
 import com.diagbot.entity.KlDiagnoseDetail;
 import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.service.impl.KlDiagnoseDetailServiceImpl;
-import com.diagbot.util.BeanUtil;
-import com.diagbot.util.EntityUtil;
-import com.diagbot.util.ReflectUtil;
+import com.diagbot.util.*;
 import org.apache.commons.compress.utils.Lists;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -41,6 +41,7 @@ public class KlDiagnoseDetailFacade extends KlDiagnoseDetailServiceImpl {
         // TODO 获取公式,分隔编码,替换编码,组装导出数据  Map<String, List<ExportDiagnoseDTO>>
         Map<String, List<ExportDiagnoseDTO>> diagnoseDetails = processDiagnoseDetail(diagnoseDetailMap);
 
+
         // TODO 导出数据
     }
 
@@ -50,14 +51,19 @@ public class KlDiagnoseDetailFacade extends KlDiagnoseDetailServiceImpl {
         for(Map.Entry<String, List<KlDiagnoseDetail>> kd : diagnoseDetailMap.entrySet()){
             String sheetName = kd.getKey();
             List<KlDiagnoseDetail> datats = kd.getValue();
+            removeKlDiagnoseDetail(datats);
             List<ExportDiagnoseDTO> eds = Lists.newArrayList();
             for (KlDiagnoseDetail kdl:datats) {
                 ExportDiagnoseDTO exportDiagnoseDTO = new ExportDiagnoseDTO();
                 BeanUtil.copyProperties(kdl, exportDiagnoseDTO);
                 ReflectUtil.setProperty(exportDiagnoseDTO, "type", kdl.getType().toString());
                 ReflectUtil.setProperty(exportDiagnoseDTO, "orderNo", kdl.getCode());
-                ReflectUtil.setProperty(exportDiagnoseDTO, "规则", kdl.getStandard());
-                ReflectUtil.setProperty(exportDiagnoseDTO, "等于", kdl.getMidResult());
+                if(kdl.getCode().startsWith("3.")){
+                    exportDiagnoseDTO.setRule(kdl.getRelation());
+                }else {
+                    exportDiagnoseDTO.setRule(kdl.getStandard());
+                }
+                exportDiagnoseDTO.setEq(kdl.getMidResult());
                 eds.add(exportDiagnoseDTO);
             }
             data.put(sheetName,eds);
@@ -65,4 +71,25 @@ public class KlDiagnoseDetailFacade extends KlDiagnoseDetailServiceImpl {
         return data;
     }
 
+    /**
+     * 移除公式编码中没有的数据
+     * @param klDiagnoseDetails
+     */
+    public void removeKlDiagnoseDetail(List<KlDiagnoseDetail> klDiagnoseDetails){
+        List<String> collect = klDiagnoseDetails.stream().filter(x -> (x.getType().equals(91)
+        || x.getType().equals(92)|| x.getType().equals(93))&& StringUtil.isNotBlank(x.getFormula()))
+                .map(y -> y.getFormula()).collect(Collectors.toList());
+        String content = collect.stream().collect(Collectors.joining(","));
+        //获取公式中的编码
+        List<String> regexData = RegexUtil.getRegexDatas(content, "([1-9]\\d*\\.?\\d*)|(0\\.\\d*[1-9])");
+        Iterator<KlDiagnoseDetail> iterator = klDiagnoseDetails.iterator();
+        while (iterator.hasNext()){
+            KlDiagnoseDetail next = iterator.next();
+            String code = next.getCode();
+            if(!regexData.contains(code)){
+                iterator.remove();
+            }
+        }
+    }
+
 }

+ 22 - 3
src/main/java/com/diagbot/util/RegexUtil.java

@@ -2,6 +2,7 @@ package com.diagbot.util;
 
 import com.google.common.collect.Lists;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -152,7 +153,7 @@ public class RegexUtil {
      * @param regex
      * @return
      */
-    private static List<String> getRegexData(String content, String regex) {
+    public static List<String> getRegexData(String content, String regex) {
         return getRegexDataCommon(content, regex, false);
     }
 
@@ -196,17 +197,35 @@ public class RegexUtil {
         return list;
     }
 
+    public static List<String> getRegexDatas(String content, String pattern){
+        List<String> numbers=new ArrayList<>();
+        // 创建 Pattern 对象
+        Pattern r = Pattern.compile(pattern);
+        // 现在创建 matcher 对象
+        Matcher matcher = r.matcher(content);
+        while (matcher.find()) {
+            //获取当前匹配的值
+            numbers.add(matcher.group());
+        }
+
+        return numbers;
+    }
+
     /**
      * 测试
      *
      * @param args
      */
     public static void main(String[] args) {
-        String regex1 = "(血小板计数)\\s*(\\d+(\\.\\d+)?)";
+        String regex1 = "([1-9]\\d*\\.?\\d*)|(0\\.\\d*[1-9])";
         // System.out.println(getRegexData("血小板计数  30.3", regex1, 2));
-        System.out.println(getRegexData("血小板计数  30.3", regex1));
+        System.out.println(getRegexData("拟诊+(3.3/3.4)任一", regex1));
 
         String s1 = "ABC";
         System.out.println(getRegexRes(s1, "Abc", true));
+
+        System.out.println(getRegexDatas("拟诊+(3.3/3.4)任一","([1-9]\\d*\\.?\\d*)|(0\\.\\d*[1-9])"));
+
+
     }
 }