feat(mapping): 优化ICD到XML转换服务支持未匹配规则详情
- 实现convertFromJsonWithResult方法返回完整的转换结果 - 添加未匹配规则详细信息到生成结果的问题列表中 - 新增ConversionResult、RuleMatchingResult和UnmatchedRuleDetail数据结构 - 扩展应用规则逻辑以跟踪和报告未匹配的规则变体 - 重构buildXmlFromMapping方法以支持结果详情返回 - 更新控制台日志输出以显示规则匹配统计信息
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -27,7 +27,7 @@ public class IcdToXmlTaskAppService {
|
||||
private final FileStorageService fileStorageService;
|
||||
private final IcdToXmlMappingService icdToXmlMappingService;
|
||||
private final JsonToXmlConversionService jsonToXmlConversionService;
|
||||
|
||||
|
||||
public IcdToXmlTaskAppService(IcdParserService icdParserService,
|
||||
DefaultTemplateLoader defaultTemplateLoader,
|
||||
IndexAnalysisService indexAnalysisService,
|
||||
@@ -54,14 +54,13 @@ public class IcdToXmlTaskAppService {
|
||||
IcdToXmlGenerateResult result = new IcdToXmlGenerateResult();
|
||||
try {
|
||||
// ========== 第一步:ICD → JSON ==========
|
||||
|
||||
|
||||
// 1. 解析 ICD
|
||||
IcdDocument icdDocument = icdParserService.parse(command.getFileBytes(), command.getFileName());
|
||||
result.setIedName(icdDocument.getIedName());
|
||||
result.setLdInst(icdDocument.getLdInst());
|
||||
|
||||
// 2. 加载 DefaultCfg.txt和默认配置
|
||||
//DefaultTemplate template = defaultTemplateLoader.loadDefaultTemplateToXml();
|
||||
DefaultTemplate template = defaultTemplateLoader.load();
|
||||
result.getProblems().addAll(template.verify());
|
||||
|
||||
@@ -102,24 +101,33 @@ public class IcdToXmlTaskAppService {
|
||||
command.getAuthor()
|
||||
);
|
||||
result.setMappingDocument(mappingDocument);
|
||||
|
||||
|
||||
// 7. 序列化为JSON字符串(中间产物)
|
||||
String mappingJson = mappingDocumentSerializer.toPrettyJson(mappingDocument);
|
||||
|
||||
// ========== 第二步:JSON → XML ==========
|
||||
|
||||
|
||||
// 8. 重新绑定正确索引
|
||||
IcdToXmlMappingService.IndexMappingConfig mappingConfig = icdToXmlMappingService.buildIndexMappingFromSelection(command.getIndexSelection());
|
||||
icdToXmlMappingService.setIndexMapping(mappingConfig);
|
||||
|
||||
// 9. 从JSON转换为XML
|
||||
String xmlPath = jsonToXmlConversionService.convertFromJson(
|
||||
mappingJson,
|
||||
templateStream,
|
||||
ruleStreams,
|
||||
icdToXmlMappingService.getIndexMapping()
|
||||
);
|
||||
result.setSavedPath(xmlPath);
|
||||
|
||||
// 9. 从JSON转换为XML(带未匹配规则信息)
|
||||
JsonToXmlConversionService.ConversionResult conversionResult =
|
||||
jsonToXmlConversionService.convertFromJsonWithResult(
|
||||
mappingJson,
|
||||
templateStream,
|
||||
ruleStreams,
|
||||
icdToXmlMappingService.getIndexMapping()
|
||||
);
|
||||
result.setSavedPath(conversionResult.getXmlContent());
|
||||
|
||||
// 10. 将未匹配的规则详细信息添加到 problems 中
|
||||
if (conversionResult.getUnmatchedRuleDetails() != null && !conversionResult.getUnmatchedRuleDetails().isEmpty()) {
|
||||
for (JsonToXmlConversionService.UnmatchedRuleDetail detail : conversionResult.getUnmatchedRuleDetails()) {
|
||||
String problemMsg = "规则匹配失败: " + detail.getRuleKey() + " [" + detail.getRuleVariants() + "]";
|
||||
result.getProblems().add(problemMsg);
|
||||
}
|
||||
}
|
||||
|
||||
result.setStatus(GenerateStatus.SUCCESS);
|
||||
result.setMessage("映射生成成功");
|
||||
@@ -134,9 +142,6 @@ public class IcdToXmlTaskAppService {
|
||||
|
||||
/**
|
||||
* 直接从 JSON 字符串生成 XML 文件。
|
||||
*
|
||||
* @param mappingJson MMS 映射 JSON 字符串(由 getIcdMmsJson 接口返回)
|
||||
* @return XML 生成结果
|
||||
*/
|
||||
public IcdToXmlGenerateResult generateXmlFromJson(String mappingJson){
|
||||
IcdToXmlGenerateResult result = new IcdToXmlGenerateResult();
|
||||
@@ -149,7 +154,7 @@ public class IcdToXmlTaskAppService {
|
||||
result.setMessage("XML 生成失败:缺少默认xml配置文件");
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
List<InputStream> ruleStreams = ruleBasedXmlMappingService.loadDefaultRuleFile();
|
||||
if (ruleStreams == null) {
|
||||
result.setStatus(GenerateStatus.FAILED);
|
||||
@@ -158,16 +163,25 @@ public class IcdToXmlTaskAppService {
|
||||
return result;
|
||||
}
|
||||
|
||||
// 2. 从 JSON 转换为 XML(带未匹配规则信息)
|
||||
JsonToXmlConversionService.ConversionResult conversionResult =
|
||||
jsonToXmlConversionService.convertFromJsonWithResult(
|
||||
mappingJson,
|
||||
templateStream,
|
||||
ruleStreams,
|
||||
icdToXmlMappingService.getIndexMapping()
|
||||
);
|
||||
|
||||
result.setMappingXml(conversionResult.getXmlContent());
|
||||
|
||||
// 3. 将未匹配的规则详细信息添加到 problems 中
|
||||
if (conversionResult.getUnmatchedRuleDetails() != null && !conversionResult.getUnmatchedRuleDetails().isEmpty()) {
|
||||
for (JsonToXmlConversionService.UnmatchedRuleDetail detail : conversionResult.getUnmatchedRuleDetails()) {
|
||||
String problemMsg = "规则匹配失败: " + detail.getRuleKey() + " [" + detail.getRuleVariants() + "]";
|
||||
result.getProblems().add(problemMsg);
|
||||
}
|
||||
}
|
||||
|
||||
// 3. 从 JSON 转换为 XML
|
||||
String xmlContent = jsonToXmlConversionService.convertFromJson(
|
||||
mappingJson,
|
||||
templateStream,
|
||||
ruleStreams,
|
||||
icdToXmlMappingService.getIndexMapping()
|
||||
);
|
||||
|
||||
result.setMappingXml(xmlContent);
|
||||
result.setStatus(GenerateStatus.SUCCESS);
|
||||
result.setMessage("XML 生成成功");
|
||||
return result;
|
||||
|
||||
Reference in New Issue
Block a user