Browse Source

诊断依据全部校验

zhoutg 5 years ago
parent
commit
6d00ef3e6c

+ 62 - 22
knowledgeman-service/src/main/java/com/diagbot/facade/DiagnoseFacade.java

@@ -318,7 +318,7 @@ public class DiagnoseFacade extends DiagnoseServiceImpl {
         StringBuffer res = new StringBuffer();
         Long time1 = System.currentTimeMillis();
         Set<String> diagnosetQuestionSet = new HashSet<>(); // 问题词去重变量
-        Set<String> diagnoseName = new HashSet<>(); // 诊断依据主表修改变量
+        Set<String> diagnoseName = new HashSet<>(); // 诊断依据有问题的诊断
         if (!verifyFlag) {
             throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "其他人正在执行此操作,请稍后再试!");
         }
@@ -371,9 +371,9 @@ public class DiagnoseFacade extends DiagnoseServiceImpl {
                         diagnoseQuestionList.add(diagnoseQuestion1);
                         diagnoseName.add(diagnoseQuestion1.getDisName());
                     }
-                    List<DiagnoseDetail> lis = new ArrayList<>();
-                    List<DiagnoseDetail> pacs = new ArrayList<>();
-                    List<DiagnoseDetail> formula = new ArrayList<>();
+
+                    List<DiagnoseDetail> lisAndPacs = new ArrayList<>(); // 化验|辅检数据
+                    List<DiagnoseDetail> formula = new ArrayList<>(); // 公式数据
 
                     for (DiagnoseDetail bean : detail) {
                         boolean updateFlag = false;
@@ -395,14 +395,12 @@ public class DiagnoseFacade extends DiagnoseServiceImpl {
                                 updateFlag = true;
                             }
                         } else {
-                            // 添加到化验列表
-                            if (DiagnoseFeatureTypeEnum.Lis.getKey() == bean.getType()) {
-                                lis.add(bean);
-                            }
-                            // 添加到辅检列表
-                            if (DiagnoseFeatureTypeEnum.Pacs.getKey() == bean.getType()) {
-                                pacs.add(bean);
+                            // 添加到化验|辅检列表
+                            if (DiagnoseFeatureTypeEnum.Lis.getKey() == bean.getType()
+                                    || DiagnoseFeatureTypeEnum.Pacs.getKey() == bean.getType()) {
+                                lisAndPacs.add(bean);
                             }
+
                             // 校验编码
                             String oldVerifyCode = bean.getVerifyCode();
                             if (StringUtil.isNotEmpty(bean.getCode())) {
@@ -454,7 +452,6 @@ public class DiagnoseFacade extends DiagnoseServiceImpl {
                                 typeList = DiagnoseTypeConvertUtil.diagnoseType2LibType(bean.getType(),
                                         DiagnoseFieldEnum.relation.getKey());
                                 for (String s : arr) {
-                                    typeList = DiagnoseTypeConvertUtil.diagnoseType2LibType(bean.getType(), DiagnoseFieldEnum.relation.getKey());
                                     flag = verifyExist(libSet, s.trim(), typeList);
                                     if (!flag) {
                                         sb.append(s).append("、");
@@ -505,7 +502,6 @@ public class DiagnoseFacade extends DiagnoseServiceImpl {
                                 typeList = DiagnoseTypeConvertUtil.diagnoseType2LibType(bean.getType(),
                                         DiagnoseFieldEnum.result.getKey());
                                 for (String s : arr) {
-                                    typeList = DiagnoseTypeConvertUtil.diagnoseType2LibType(bean.getType(), DiagnoseFieldEnum.result.getKey());
                                     flag = verifyExist(libSet, s.trim(), typeList);
                                     if (!flag) {
                                         sb.append(s).append("、");
@@ -534,13 +530,10 @@ public class DiagnoseFacade extends DiagnoseServiceImpl {
                             diagnoseDetailList.add(bean);
                         }
                     }
-                    // 以上校验全部通过之后再校验业务异常,例如:诊断公式里有化验和辅检编码,则化验和辅检数据必须完整
-                    // TODO 待修改
+
+                    // 当前诊断校验通过后再校验其他数据异常,例如:诊断公式里有化验和辅检编码,则化验和辅检数据必须完整
                     if (!diagnoseName.contains(key)) {
-                        for (DiagnoseDetail det : lis) {
-                            String regex = "(.*" + det.getCode().replace(".", "\\\\.") + ")|(.*" +
-                                    det.getCode().replace(".", "\\\\.") + "\\\\D.*)";
-                        }
+                        doLisAndPacs(diagnoseName, lisAndPacs, formula, diagnoseDetailList);
                     }
                 }
             }
@@ -559,7 +552,6 @@ public class DiagnoseFacade extends DiagnoseServiceImpl {
             diagnoseQuestionService.remove(new QueryWrapper<DiagnoseQuestion>());
             // 新增问题词
             if (ListUtil.isNotEmpty(diagnoseQuestionList)) {
-                // 新增问题词数据
                 diagnoseQuestionService.insertBatch(diagnoseQuestionList); // 效率比框架的saveBatch高很多
             }
             Long time6 = System.currentTimeMillis();
@@ -596,6 +588,50 @@ public class DiagnoseFacade extends DiagnoseServiceImpl {
     }
 
 
+    /**
+     * 校验化验和辅检数据异常
+     *
+     * @param diagnoseName       有问题的诊断名称
+     * @param lisAndPacs         化验辅检数据
+     * @param formula            公式数据
+     * @param diagnoseDetailList 需要更新的明细
+     */
+    public void doLisAndPacs(Set<String> diagnoseName, List<DiagnoseDetail> lisAndPacs,
+                             List<DiagnoseDetail> formula, List<DiagnoseDetail> diagnoseDetailList) {
+        // 处理数据
+        for (DiagnoseDetail det : lisAndPacs) {
+            // 公式正则匹配化验和辅检的编码值,以编码值结尾或者编码值之后一位不能是数字
+            // 避免3.1去匹配3.11成功;点号需要转义
+            // 正则示例:(.*3.1)|(.*3.1\\D.*)
+            String regex = "(.*" + det.getCode().replace(".", "\\.") + ")|(.*" +
+                    det.getCode().replace(".", "\\.") + "\\D.*)";
+            boolean verifyAll = false;
+            for (DiagnoseDetail form : formula) {
+                if (form.getFormula().matches(regex)) {
+                    verifyAll = true;
+                    break;
+                }
+            }
+            if (verifyAll) { // 如果在公式里存在编码,则数据必须完整
+                boolean needUpdate = false;
+                if (StringUtil.isEmpty(det.getRelation())) { // 化验、辅检都有
+                    det.setVerifyRelation("数据异常");
+                    needUpdate = true;
+                }
+                if (DiagnoseFeatureTypeEnum.Lis.getKey() == det.getType()) { // 化验有
+                    if (StringUtil.isEmpty(det.getResult())) {
+                        det.setVerifyResult("数据异常");
+                        needUpdate = true;
+                    }
+                }
+                if (needUpdate) {
+                    diagnoseName.add(det.getDisName());
+                    diagnoseDetailList.add(det);
+                }
+            }
+        }
+    }
+
     /**
      * 校验是否已存在问题词数据
      *
@@ -907,9 +943,13 @@ public class DiagnoseFacade extends DiagnoseServiceImpl {
     }
 
     public static void main(String[] args) {
+        String res = "1.2+1.3";
         String str = "1.3";
-        String regex = "(.*" + str.replace(".", "\\\\.") + ")|(.*" +
-                str.replace(".", "\\\\.") + "\\\\D.*)";
+        String regex = "(.*" + str.replace(".", "\\.") + ")|(.*" +
+                str.replace(".", "\\.") + "\\D.*)";
         System.out.println(regex);
+        String regex1 = "(.*1\\.3)|(.*1\\.3\\D.*)";
+        System.out.println(res.matches(regex));
+        System.out.println(res.matches(regex1));
     }
 }

+ 3 - 0
knowledgeman-service/src/main/resources/mapper/DiagnoseDetailMapper.xml

@@ -39,6 +39,9 @@
                 <if test="item.verifyRelation != null">
                     verify_relation = #{item.verifyRelation},
                 </if>
+                <if test="item.verifyUnique != null">
+                    verify_unique = #{item.verifyUnique},
+                </if>
                 <if test="item.verifyResult != null">
                     verify_result = #{item.verifyResult},
                 </if>