diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/component/JsonToXmlConversionService.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/component/JsonToXmlConversionService.java index fcfc6a9..f0fffc1 100644 --- a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/component/JsonToXmlConversionService.java +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/component/JsonToXmlConversionService.java @@ -352,13 +352,28 @@ public class JsonToXmlConversionService { var mappingMetrics = extractMetricsFromMapping(mappingDocument); addMethodDescribe(methodDescribeList, "========== 开始从JSON匹配规则 =========="); - addMethodDescribe(methodDescribeList, "规则总数: " + mergedRules.size()); + addMethodDescribe(methodDescribeList, "规则文件中定义规则总数: " + mergedRules.size()); addMethodDescribe(methodDescribeList, "JSON中指标总数: " + mappingMetrics.size()); var applicableRules = findApplicableRulesDesc(mergedRules, mappingMetrics, methodDescribeList); - addMethodDescribe(methodDescribeList, "匹配成功: " + applicableRules.size() + " 条规则"); - addMethodDescribe(methodDescribeList, "匹配失败: " + (mergedRules.size() - applicableRules.size()) + " 条规则"); + int xmlValueTagCount = countXmlValueTags(xmlContent); + int matchedValueTagCount = countMatchedValueTags(xmlContent, applicableRules); + int unmatchedValueTagCount = xmlValueTagCount - matchedValueTagCount; + + addMethodDescribe(methodDescribeList, "========== XML模板配置统计 =========="); + addMethodDescribe(methodDescribeList, "XML模板中需要配置的标签总数: " + xmlValueTagCount); + addMethodDescribe(methodDescribeList, "成功匹配的标签数: " + matchedValueTagCount); + addMethodDescribe(methodDescribeList, "未匹配的标签数: " + unmatchedValueTagCount); + + if (unmatchedValueTagCount > 0) { + List unmatchedDescList = findUnmatchedValueTags(xmlContent, applicableRules); + addMethodDescribe(methodDescribeList, "未匹配的标签desc列表:"); + for (String desc : unmatchedDescList) { + addMethodDescribe(methodDescribeList, " - " + desc); + } + } + addMethodDescribe(methodDescribeList, "========== JSON规则匹配结束 =========="); return applyRulesToXml(xmlContent, applicableRules); @@ -1107,6 +1122,101 @@ public class JsonToXmlConversionService { methodDescribeList.add(message); } + /** + * 统计 XML 模板中 标签的总数 + */ + private int countXmlValueTags(String xmlContent) { + if (xmlContent == null || xmlContent.isEmpty()) { + return 0; + } + + java.util.regex.Pattern valueTagPattern = java.util.regex.Pattern.compile( + "]+/>", + java.util.regex.Pattern.CASE_INSENSITIVE + ); + + java.util.regex.Matcher matcher = valueTagPattern.matcher(xmlContent); + int count = 0; + while (matcher.find()) { + count++; + } + + return count; + } + + /** + * 统计 XML 模板中成功匹配的 标签数 + */ + private int countMatchedValueTags(String xmlContent, + java.util.Map applicableRules) { + if (xmlContent == null || xmlContent.isEmpty() || applicableRules == null) { + return 0; + } + + java.util.regex.Pattern valueTagPattern = java.util.regex.Pattern.compile( + "]+)/>", + java.util.regex.Pattern.CASE_INSENSITIVE + ); + + java.util.regex.Pattern attributePattern = java.util.regex.Pattern.compile( + "desc=\"([^\"]*)\"", + java.util.regex.Pattern.CASE_INSENSITIVE + ); + + java.util.regex.Matcher matcher = valueTagPattern.matcher(xmlContent); + int matchedCount = 0; + + while (matcher.find()) { + String attributesStr = matcher.group(1); + java.util.regex.Matcher attrMatcher = attributePattern.matcher(attributesStr); + if (attrMatcher.find()) { + String desc = attrMatcher.group(1); + if (applicableRules.containsKey(desc)) { + matchedCount++; + } + } + } + + return matchedCount; + } + + /** + * 查找 XML 模板中未匹配的 标签的 desc 属性列表 + */ + private List findUnmatchedValueTags(String xmlContent, + java.util.Map applicableRules) { + List unmatchedList = new ArrayList<>(); + + if (xmlContent == null || xmlContent.isEmpty() || applicableRules == null) { + return unmatchedList; + } + + java.util.regex.Pattern valueTagPattern = java.util.regex.Pattern.compile( + "]+)/>", + java.util.regex.Pattern.CASE_INSENSITIVE + ); + + java.util.regex.Pattern attributePattern = java.util.regex.Pattern.compile( + "desc=\"([^\"]*)\"", + java.util.regex.Pattern.CASE_INSENSITIVE + ); + + java.util.regex.Matcher matcher = valueTagPattern.matcher(xmlContent); + + while (matcher.find()) { + String attributesStr = matcher.group(1); + java.util.regex.Matcher attrMatcher = attributePattern.matcher(attributesStr); + if (attrMatcher.find()) { + String desc = attrMatcher.group(1); + if (!applicableRules.containsKey(desc) && !desc.isEmpty()) { + unmatchedList.add(desc); + } + } + } + + return unmatchedList; + } + /** * 指标信息内部类 */ diff --git a/tools/mms-mapping/src/main/resources/template/JiangSu_Config1.xml b/tools/mms-mapping/src/main/resources/template/JiangSu_Config1.xml index 6cae627..eaa4444 100644 --- a/tools/mms-mapping/src/main/resources/template/JiangSu_Config1.xml +++ b/tools/mms-mapping/src/main/resources/template/JiangSu_Config1.xml @@ -76,11 +76,11 @@ - + + + + + @@ -446,10 +446,10 @@ - + + + + diff --git a/tools/mms-mapping/src/main/resources/template/JiangSu_Config2.xml b/tools/mms-mapping/src/main/resources/template/JiangSu_Config2.xml index 1c14ac5..4c6510d 100644 --- a/tools/mms-mapping/src/main/resources/template/JiangSu_Config2.xml +++ b/tools/mms-mapping/src/main/resources/template/JiangSu_Config2.xml @@ -64,21 +64,21 @@ - - - - - - - - - - - - - - - + + + + + + + + + + + + + + +