Explorar o código

类型和编号对应校验

kongwz %!s(int64=4) %!d(string=hai) anos
pai
achega
fecd1312e8

+ 62 - 0
src/main/java/com/diagbot/enums/DiagnoseLexiconTypeEnum.java

@@ -0,0 +1,62 @@
+package com.diagbot.enums;
+
+import com.diagbot.core.KeyedNamed;
+import lombok.Setter;
+
+/**
+ * @author zhoutg
+ * @Description: 诊断依据词性类型枚举
+ * @date 2018年10月11日 下午3:33:22
+ */
+
+public enum DiagnoseLexiconTypeEnum implements KeyedNamed {
+
+    Symptom(103, "A"),
+    VitalResult(105, "B"),
+    Vital(104, "C"),
+    LisSubName(108, "D"),
+    PacsResult(112, "E"),
+    Disease(100, "F"),
+    zsxbszz(900, "G"),
+    jwzz(901, "H"),
+    Age(410,"I"),
+    Group(117, "J");
+
+    @Setter
+    private int key;
+
+    @Setter
+    private String name;
+
+    DiagnoseLexiconTypeEnum(int key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static DiagnoseLexiconTypeEnum getEnum(int key) {
+        for (DiagnoseLexiconTypeEnum item : DiagnoseLexiconTypeEnum.values()) {
+            if (item.key == key) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+
+
+    public static String getName(int key) {
+        DiagnoseLexiconTypeEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+
+
+    @Override
+    public int getKey() {
+        return key;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+}

+ 46 - 35
src/main/java/com/diagbot/facade/KlDiagnoseImportFacade.java

@@ -3,22 +3,13 @@ package com.diagbot.facade;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.diagbot.entity.KlConcept;
 import com.diagbot.entity.KlDiagnose;
+import com.diagbot.enums.DiagnoseLexiconTypeEnum;
 import com.diagbot.enums.IsDeleteEnum;
 import com.diagbot.enums.LexiconEnum;
 import com.diagbot.enums.LexiconExtEnum;
 import com.diagbot.service.KlConceptService;
-import com.diagbot.util.EntityUtil;
-import com.diagbot.util.ExcelUtils;
-import com.diagbot.util.ListUtil;
-import com.diagbot.util.StringUtil;
-import com.diagbot.util.VerifyUtil;
-import com.diagbot.vo.DiagnoseImportVO;
-import com.diagbot.vo.ImportDiagnoseResVO;
-import com.diagbot.vo.ImportDiagnoseVO;
-import com.diagbot.vo.KlDiagnoseDetailVO;
-import com.diagbot.vo.KlDiagnoseGroupVO;
-import com.diagbot.vo.KlDiagnoseSaveVO;
-import com.diagbot.vo.KlDiagnoseTypeVO;
+import com.diagbot.util.*;
+import com.diagbot.vo.*;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import org.apache.commons.collections4.map.LinkedMap;
@@ -30,7 +21,10 @@ import org.springframework.stereotype.Component;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
-import java.util.*;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
@@ -132,39 +126,39 @@ public class KlDiagnoseImportFacade {
         return allFlag;
     }
 
-    private List<String> processFormula(List<ImportDiagnoseVO> data,List<String> diagtypes) {
+    private List<String> processFormula(List<ImportDiagnoseVO> data, List<String> diagtypes) {
         List<String> orderList = Lists.newArrayList();
-        Map<String,List<String>> typeCollect = Maps.newHashMap();
-        if(ListUtil.isNotEmpty(data)){
+        Map<String, List<String>> typeCollect = Maps.newHashMap();
+        if (ListUtil.isNotEmpty(data)) {
             ListIterator<ImportDiagnoseVO> it = data.listIterator();
-            while (it.hasNext()){
+            while (it.hasNext()) {
                 ImportDiagnoseVO next = it.next();
                 String type = next.getType();
                 String orderNo = next.getOrderNo();
-                Integer rowNum = next.getRowNum()-1;
-                if(!diagtypes.contains(type)){
+                Integer rowNum = next.getRowNum() - 1;
+                if (!diagtypes.contains(type) && StringUtil.isNotBlank(type) && StringUtil.isNotBlank(orderNo)) {
                     orderList.add(orderNo);
                 }
-                if("拟诊".equals(type) && StringUtils.isNotBlank(orderNo)){
-                    if(typeCollect.containsKey(type)){
+                if ("拟诊".equals(type) && StringUtils.isNotBlank(orderNo)) {
+                    if (typeCollect.containsKey(type)) {
                         List<String> gongsi = typeCollect.get(type);
                         gongsi.add(orderNo);
-                        typeCollect.put(type,gongsi);
-                    }else {
+                        typeCollect.put(type, gongsi);
+                    } else {
                         List<String> gongsi = Lists.newArrayList();
                         gongsi.add(orderNo);
-                        typeCollect.put(type,gongsi);
+                        typeCollect.put(type, gongsi);
                     }
                 }
-                if("确诊".equals(type) && StringUtils.isNotBlank(orderNo)){
-                    if(orderNo.contains("拟诊") && typeCollect.containsKey("拟诊")){
+                if ("确诊".equals(type) && StringUtils.isNotBlank(orderNo)) {
+                    if (orderNo.contains("拟诊") && typeCollect.containsKey("拟诊")) {
                         it.remove();
-                        for (String nizhen:typeCollect.get("拟诊")) {
+                        for (String nizhen : typeCollect.get("拟诊")) {
                             ImportDiagnoseVO importDiagnoseVO = new ImportDiagnoseVO();
                             importDiagnoseVO.setParentRule(next.getOrderNo());
                             importDiagnoseVO.setType(type);
                             importDiagnoseVO.setRowNum(rowNum);
-                            importDiagnoseVO.setOrderNo(orderNo.replace("拟诊",nizhen));
+                            importDiagnoseVO.setOrderNo(orderNo.replace("拟诊", nizhen));
                             it.add(importDiagnoseVO);
                         }
                     }
@@ -208,8 +202,12 @@ public class KlDiagnoseImportFacade {
      */
     private List<ImportDiagnoseVO> dealImportDiagnose(List<String> diagtypes, List<ImportDiagnoseVO> importDiagnoseVOS, Map<String, KlConcept> concept_map) {
         for (ImportDiagnoseVO idv : importDiagnoseVOS) {
-            String type = idv.getType().trim();
-            String rule = idv.getRule().trim();
+            String type = idv.getType();
+            String orderNo = idv.getOrderNo();
+            String rule = idv.getRule();
+            if (StringUtil.isBlank(type) && StringUtil.isBlank(orderNo)) {
+                continue;
+            }
             if (!type.contains("正则") && !diagtypes.contains(type)) {
                 KlConcept klConcept = concept_map.get(rule + "_" + String.valueOf(LexiconExtEnum.getEnum(type).getKey()));
                 if (klConcept != null) {
@@ -221,7 +219,7 @@ public class KlDiagnoseImportFacade {
     }
 
     //数据及格式校验
-    private void dealVerify(List<String> currentErrMsg,List<String> orderNums, List<String> diagtypes, List<ImportDiagnoseVO> data, Map<String, KlConcept> concept_map) {
+    private void dealVerify(List<String> currentErrMsg, List<String> orderNums, List<String> diagtypes, List<ImportDiagnoseVO> data, Map<String, KlConcept> concept_map) {
         //list元素计数
         Map<String, Long> orderNumMap = orderNums.stream().collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
         for (Map.Entry<String, Long> on : orderNumMap.entrySet()) {
@@ -240,12 +238,26 @@ public class KlDiagnoseImportFacade {
                 String maxSymbol = imd.getMaxSymbol();
                 String minSymbol = imd.getMinSymbol();
                 String parentRule = imd.getParentRule();
+                if (StringUtil.isBlank(type) && StringUtil.isBlank(orderNo)) {
+                    continue;
+                }
 
                 if (StringUtil.isNotBlank(type) && StringUtil.isNotBlank(rule) && StringUtil.isNotBlank(orderNo)) {
+                    LexiconExtEnum anEnum = LexiconExtEnum.getEnum(type);
+                    if (anEnum == null) {
+                        currentErrMsg.add(String.format("第%d行【%s】类型错误", rowNum, type));
+                        continue;
+                    }
+                    int key = anEnum.getKey();
                     if (!type.contains("正则") &&
-                            !concept_map.containsKey(rule + "_" + String.valueOf(LexiconExtEnum.getEnum(type).getKey()))) {
+                            !concept_map.containsKey(rule + "_" + String.valueOf(key))) {
                         currentErrMsg.add(String.format("第%d行【%s】不是标准词", rowNum, rule));
                     }
+                    String name = DiagnoseLexiconTypeEnum.getName(key);
+                    Boolean regexRes = RegexUtil.getRegexRes(orderNo, name + "\\d+");
+                    if (!regexRes) {
+                        currentErrMsg.add(String.format("第%d行类型【%s】和序号【%s】对应错误", rowNum, type, orderNo));
+                    }
                 }
                 if (StringUtil.isNotBlank(maxSymbol) &&
                         !"<=".equals(maxSymbol) && !"<".equals(maxSymbol)) {
@@ -276,8 +288,8 @@ public class KlDiagnoseImportFacade {
                 if (diagtypes.contains(type) && StringUtil.isNotBlank(orderNo)) {
                     String s = VerifyUtil.verifyFormula(orderNums, orderNo);
                     if (StringUtil.isNotBlank(s)) {
-                        if(StringUtil.isNotBlank(parentRule)){
-                            s = s.replace(orderNo,parentRule);
+                        if (StringUtil.isNotBlank(parentRule)) {
+                            s = s.replace(orderNo, parentRule);
                         }
                         currentErrMsg.add(s);
                     }
@@ -285,7 +297,6 @@ public class KlDiagnoseImportFacade {
             }
 
 
-
             //格式校验
             /*if (ListUtil.isNotEmpty(verifies)) {
                 for (String vef : verifies) {

+ 1 - 1
src/main/java/com/diagbot/util/VerifyUtil.java

@@ -40,7 +40,7 @@ public class VerifyUtil {
     	if (StringUtil.isBlank(text)) {
     		return false;
 		}
-		String regex = "任|一|二|三|四|五|六|七|八|九|十|\\[||\\]|\\+|、|\\d|\\.";
+		String regex = "任|一|二|三|四|五|六|七|八|九|十|\\[||\\]|\\+|、|\\d|\\.|A|B|C|D|E|F|G|H|I|J|K";
 		for (int i = 0; i < text.length(); i++) {
 			String s1 = String.valueOf(text.charAt(i));
 			boolean flag = s1.matches(regex);