From c0cf4de315567552739b514cb078ce1c7e9c2086 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=91=A8=E5=AE=87=20=E8=94=A1?= <2418394595@qq.com> Date: Fri, 12 Jun 2026 08:52:36 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat(mapping):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6=E7=B1=BB=E5=9E=8B=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 generateXmlFromJson 方法中添加 configType 参数以支持不同配置文件 - 新增 loadXmlResources(Integer configType) 方法用于加载指定类型的XML资源 - 更新 JsonToXmlRequest 类添加 configType 属性定义 - 修改 MappingController 中的 getXmlFromJson 方法以传递配置类型参数 - 扩展 RuleBasedXmlMappingService 的 loadDefaultXmlFile 方法支持配置类型选择 - 在调试类 JsonToXmlDebugRunner 中设置默认使用配置类型2进行测试 --- .../component/RuleBasedXmlMappingService.java | 16 +++++++++++++--- .../mapping/controller/MappingController.java | 8 ++++++-- .../icd/mapping/pojo/param/JsonToXmlRequest.java | 12 ++++++++++++ .../service/impl/IcdToXmlTaskAppService.java | 11 ++++++++--- .../icd/mapping/debug/JsonToXmlDebugRunner.java | 2 +- 5 files changed, 40 insertions(+), 9 deletions(-) diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/component/RuleBasedXmlMappingService.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/component/RuleBasedXmlMappingService.java index 8f68d6d..7a127d9 100644 --- a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/component/RuleBasedXmlMappingService.java +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/component/RuleBasedXmlMappingService.java @@ -60,14 +60,24 @@ public class RuleBasedXmlMappingService { private static final Pattern DO_INDEX_PATTERN = Pattern.compile("(MMXU|MHAI|MSQI|MFLK|QVVR)(\\d+)"); private static final Pattern DO_NO_INDEX_PATTERN = Pattern.compile("(MMXU|MHAI|MSQI|MFLK|QVVR)\\$"); - public InputStream loadDefaultXmlFile( ) throws Exception { - ClassPathResource templateResource = new ClassPathResource("template/JiangSu_Config1.xml"); + public InputStream loadDefaultXmlFile() throws Exception { + return loadDefaultXmlFile(1); + } + + public InputStream loadDefaultXmlFile(Integer configType) throws Exception { + String fileName; + if (configType != null && configType == 2) { + fileName = "template/JiangSu_Config1.xml"; + } else { + fileName = "template/JiangSu_Config2.xml"; + } + + ClassPathResource templateResource = new ClassPathResource(fileName); if (!templateResource.exists()) { return null; } - return templateResource.getInputStream(); } diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/controller/MappingController.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/controller/MappingController.java index 61c2e26..2694fc1 100644 --- a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/controller/MappingController.java +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/controller/MappingController.java @@ -165,9 +165,13 @@ public class MappingController extends BaseController { public IcdToXmlResponse getXmlFromJson(@Validated @RequestPart("request") JsonToXmlRequest request) { String methodDescribe = getMethodDescribe("getXmlFromJson") + ",开始将 MMS JSON 转换为 XML"; - // 直接返回 XML 内容给前端展示,不再输出临时文件。 + Integer configType = request == null ? null : request.getConfigType(); + if (configType == null || (configType != 1 && configType != 2)) { + configType = 2; + } + IcdToXmlGenerateResult result = - icdToXmlTaskAppService.generateXmlFromJson(request == null ? null : request.getMappingJson()); + icdToXmlTaskAppService.generateXmlFromJson(request == null ? null : request.getMappingJson(), configType); if (result.getMethodDescribe() != null && !result.getMethodDescribe().trim().isEmpty()) { methodDescribe = methodDescribe + "\n" + result.getMethodDescribe(); } diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/pojo/param/JsonToXmlRequest.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/pojo/param/JsonToXmlRequest.java index c527f17..ae7d96e 100644 --- a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/pojo/param/JsonToXmlRequest.java +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/pojo/param/JsonToXmlRequest.java @@ -13,6 +13,10 @@ public class JsonToXmlRequest { @ApiModelProperty(value = "MMS 映射 JSON 字符串", required = true) private String mappingJson; + /** 配置文件类型:1-读取 Jiangsuconfig2.xml,2-读取 Jiangsuconfig1.xml,空或错误时默认为 1。 */ + @ApiModelProperty(value = "配置文件类型:1-Jiangsuconfig2.xml,2-Jiangsuconfig1.xml,默认1") + private Integer configType; + public String getMappingJson() { return mappingJson; } @@ -20,4 +24,12 @@ public class JsonToXmlRequest { public void setMappingJson(String mappingJson) { this.mappingJson = mappingJson; } + + public Integer getConfigType() { + return configType; + } + + public void setConfigType(Integer configType) { + this.configType = configType; + } } diff --git a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/service/impl/IcdToXmlTaskAppService.java b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/service/impl/IcdToXmlTaskAppService.java index b2462f3..f2c2326 100644 --- a/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/service/impl/IcdToXmlTaskAppService.java +++ b/tools/mms-mapping/src/main/java/com/njcn/gather/icd/mapping/service/impl/IcdToXmlTaskAppService.java @@ -114,16 +114,17 @@ public class IcdToXmlTaskAppService { * 直接从 JSON 字符串生成 XML 内容。 * * @param mappingJson MMS 映射 JSON 字符串(由 getIcdMmsJson 接口返回) + * @param configType 配置文件类型:1-读取 Jiangsuconfig2.xml,2-读取 Jiangsuconfig1.xml,空或错误时默认为 1 * @return XML 生成结果 */ - public IcdToXmlGenerateResult generateXmlFromJson(String mappingJson) { + public IcdToXmlGenerateResult generateXmlFromJson(String mappingJson, Integer configType) { return executeTask(JSON_TO_XML_TASK_NAME, result -> { if (isBlank(mappingJson)) { markFailed(result, JSON_TO_XML_TASK_NAME, MAPPING_JSON_EMPTY_MESSAGE); return; } - fillXmlContent(result, mappingJson, loadXmlResources()); + fillXmlContent(result, mappingJson, loadXmlResources(configType)); result.setStatus(GenerateStatus.SUCCESS); result.setMessage(XML_GENERATE_SUCCESS_MESSAGE); }); @@ -179,7 +180,11 @@ public class IcdToXmlTaskAppService { * 加载 XML 模板和规则文件。 */ private XmlResourceContext loadXmlResources() throws Exception { - InputStream templateStream = ruleBasedXmlMappingService.loadDefaultXmlFile(); + return loadXmlResources(1); + } + + private XmlResourceContext loadXmlResources(Integer configType) throws Exception { + InputStream templateStream = ruleBasedXmlMappingService.loadDefaultXmlFile(configType); if (templateStream == null) { throw new IllegalArgumentException(DEFAULT_XML_MISSING_MESSAGE); } diff --git a/tools/mms-mapping/src/test/java/com/njcn/gather/icd/mapping/debug/JsonToXmlDebugRunner.java b/tools/mms-mapping/src/test/java/com/njcn/gather/icd/mapping/debug/JsonToXmlDebugRunner.java index cf42dad..ff3f810 100644 --- a/tools/mms-mapping/src/test/java/com/njcn/gather/icd/mapping/debug/JsonToXmlDebugRunner.java +++ b/tools/mms-mapping/src/test/java/com/njcn/gather/icd/mapping/debug/JsonToXmlDebugRunner.java @@ -82,7 +82,7 @@ public class JsonToXmlDebugRunner { if (VERBOSE_LOG) { System.out.println("正在转换 JSON 为 XML..."); } - IcdToXmlGenerateResult result = icdToXmlTaskAppService.generateXmlFromJson(mappingJson); + IcdToXmlGenerateResult result = icdToXmlTaskAppService.generateXmlFromJson(mappingJson,2); // 输出结果 printResult(result, objectMapper); From 1343d235c86855cb4950496fa79b27c7f38054f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=91=A8=E5=AE=87=20=E8=94=A1?= <2418394595@qq.com> Date: Fri, 12 Jun 2026 09:50:51 +0800 Subject: [PATCH 2/2] =?UTF-8?q?refactor(mms-mapping):=20=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=B1=9F=E8=8B=8F=E9=85=8D=E7=BD=AE=E6=A8=A1=E6=9D=BF=E5=B9=B6?= =?UTF-8?q?=E5=A2=9E=E5=BC=BAJSON=E5=88=B0XML=E8=BD=AC=E6=8D=A2=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将JiangSu_Config1.xml和JiangSu_Config2.xml中的Value标签注释格式统一 - 在JsonToXmlConversionService中改进规则匹配统计信息显示 - 添加XML模板中Value标签数量统计功能 - 实现匹配成功和未匹配Value标签的计数统计 - 增加未匹配标签的详细描述列表输出 - 新增countXmlValueTags方法用于统计XML中Value标签总数 - 新增countMatchedValueTags方法用于统计已匹配的Value标签数 - 新增findUnmatchedValueTags方法用于查找未匹配的Value标签描述 --- .../component/JsonToXmlConversionService.java | 116 +++++++++++++++++- .../resources/template/JiangSu_Config1.xml | 18 +-- .../resources/template/JiangSu_Config2.xml | 30 ++--- 3 files changed, 137 insertions(+), 27 deletions(-) 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 @@ - - - - - - - - - - - - - - - + + + + + + + + + + + + + + +