feat(mms-mapping): test中添加XML字符串返回功能并优化JSON转XML性能测试
- 在IcdToXmlGenerateResult和IcdToXmlResponse中新增mappingXml字段存储生成的XML字符串 - 修改IcdToXmlResponseConverter将XML内容从savedPath改为mappingXml字段 - 更新IcdToXmlTaskAppService将XML转换结果从保存路径改为直接返回XML内容 - 重构JsonToXmlConversionService移除临时文件创建,直接返回XML字符串 - 在JsonToXmlConversionService中添加性能监控日志输出 - 新增JsonToXmlDebugRunner用于本地调试JSON转XML功能
This commit is contained in:
@@ -20,7 +20,7 @@ public class IcdToXmlResponseConverter {
|
||||
response.setLdInst(result.getLdInst());
|
||||
response.setSavedPath(result.getSavedPath());
|
||||
response.getProblems().addAll(result.getProblems());
|
||||
|
||||
response.setMappingXml(result.getMappingXml());
|
||||
if (result.getIndexAnalysis() != null && result.getIndexAnalysis().getCandidates() != null) {
|
||||
for (IndexCandidate candidate : result.getIndexAnalysis().getCandidates()) {
|
||||
IndexCandidateResponse candidateResponse = new IndexCandidateResponse();
|
||||
|
||||
@@ -55,37 +55,58 @@ public class JsonToXmlConversionService {
|
||||
List<InputStream> ruleStreams,
|
||||
IcdToXmlMappingService.IndexMappingConfig indexMapping) throws Exception {
|
||||
|
||||
// 1. 反序列化JSON为MappingDocument对象
|
||||
MappingDocument mappingDocument = objectMapper.readValue(mappingJson, MappingDocument.class);
|
||||
long startTime = System.currentTimeMillis();
|
||||
System.out.println("[JSON转XML] 开始转换...");
|
||||
|
||||
// 2. 使用现有的规则引擎生成XML
|
||||
// 注意:这里复用RuleBasedXmlMappingService的核心逻辑
|
||||
// 但数据来源从ICD直接解析改为从MappingDocument提取
|
||||
String xmlContent = buildXmlFromMapping(mappingDocument, templateStream, ruleStreams, indexMapping);
|
||||
|
||||
// 3. 保存为临时文件
|
||||
Path tempPath = Files.createTempFile("converted_", ".xml");
|
||||
Files.write(tempPath, xmlContent.getBytes(StandardCharsets.UTF_8));
|
||||
|
||||
return tempPath.toString();
|
||||
try {
|
||||
MappingDocument mappingDocument = objectMapper.readValue(mappingJson, MappingDocument.class);
|
||||
|
||||
long parseTime = System.currentTimeMillis();
|
||||
System.out.println("[JSON转XML] JSON解析完成,耗时: " + (parseTime - startTime) + " ms");
|
||||
|
||||
String xmlContent = buildXmlFromMapping(mappingDocument, templateStream, ruleStreams, indexMapping);
|
||||
|
||||
long totalTime = System.currentTimeMillis() - startTime;
|
||||
System.out.println("[JSON转XML] 转换完成,总耗时: " + totalTime + " ms");
|
||||
|
||||
return xmlContent;
|
||||
} catch (Exception e) {
|
||||
long totalTime = System.currentTimeMillis() - startTime;
|
||||
System.err.println("[JSON转XML] 转换失败,已耗时: " + totalTime + " ms,错误: " + e.getMessage());
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 从MappingDocument构建XML内容
|
||||
*/
|
||||
private String buildXmlFromMapping(MappingDocument mappingDocument,
|
||||
InputStream templateStream,
|
||||
List<InputStream> ruleStreams,
|
||||
IcdToXmlMappingService.IndexMappingConfig indexMapping) throws Exception {
|
||||
|
||||
long stepStart = System.currentTimeMillis();
|
||||
|
||||
String templateContent = readInputStreamToString(templateStream);
|
||||
|
||||
long templateTime = System.currentTimeMillis();
|
||||
System.out.println(" [步骤1] 读取模板完成,耗时: " + (templateTime - stepStart) + " ms");
|
||||
|
||||
String xmlContent = fillIedInfo(templateContent, mappingDocument);
|
||||
|
||||
long iedTime = System.currentTimeMillis();
|
||||
System.out.println(" [步骤2] 填充IED信息完成,耗时: " + (iedTime - templateTime) + " ms");
|
||||
|
||||
xmlContent = fillReportControlsFromMapping(xmlContent, mappingDocument);
|
||||
|
||||
long reportTime = System.currentTimeMillis();
|
||||
System.out.println(" [步骤3] 填充ReportControl完成,耗时: " + (reportTime - iedTime) + " ms");
|
||||
|
||||
xmlContent = applyRulesFromMapping(xmlContent, mappingDocument, ruleStreams, indexMapping);
|
||||
|
||||
long rulesTime = System.currentTimeMillis();
|
||||
System.out.println(" [步骤4] 应用规则完成,耗时: " + (rulesTime - reportTime) + " ms");
|
||||
|
||||
long totalStepTime = System.currentTimeMillis() - stepStart;
|
||||
System.out.println(" [buildXmlFromMapping] 总计耗时: " + totalStepTime + " ms");
|
||||
|
||||
return xmlContent;
|
||||
}
|
||||
|
||||
@@ -219,21 +240,40 @@ public class JsonToXmlConversionService {
|
||||
List<InputStream> ruleStreams,
|
||||
IcdToXmlMappingService.IndexMappingConfig indexMapping) throws Exception {
|
||||
|
||||
long stepStart = System.currentTimeMillis();
|
||||
|
||||
var mergedRules = mergeAllRulesDesc(ruleStreams, indexMapping);
|
||||
|
||||
long mergeTime = System.currentTimeMillis();
|
||||
System.out.println(" [规则合并] 耗时: " + (mergeTime - stepStart) + " ms,规则数: " + mergedRules.size());
|
||||
|
||||
var mappingMetrics = extractMetricsFromMapping(mappingDocument);
|
||||
|
||||
long extractTime = System.currentTimeMillis();
|
||||
System.out.println(" [指标提取] 耗时: " + (extractTime - mergeTime) + " ms,指标数: " + mappingMetrics.size());
|
||||
|
||||
System.out.println("========== 开始从JSON匹配规则 ==========");
|
||||
System.out.println("规则总数: " + mergedRules.size());
|
||||
System.out.println("JSON中指标总数: " + mappingMetrics.size());
|
||||
|
||||
var applicableRules = findApplicableRulesDesc(mergedRules, mappingMetrics);
|
||||
|
||||
long matchTime = System.currentTimeMillis();
|
||||
System.out.println(" [规则匹配] 耗时: " + (matchTime - extractTime) + " ms");
|
||||
|
||||
System.out.println("匹配成功: " + applicableRules.size() + " 条规则");
|
||||
System.out.println("匹配失败: " + (mergedRules.size() - applicableRules.size()) + " 条规则");
|
||||
|
||||
String resultXml = applyRulesToXml(xmlContent, applicableRules);
|
||||
|
||||
long applyTime = System.currentTimeMillis();
|
||||
System.out.println(" [规则应用] 耗时: " + (applyTime - matchTime) + " ms");
|
||||
|
||||
long totalApplyTime = System.currentTimeMillis() - stepStart;
|
||||
System.out.println(" [applyRulesFromMapping] 总计耗时: " + totalApplyTime + " ms");
|
||||
System.out.println("========== JSON规则匹配结束 ==========\n");
|
||||
|
||||
return applyRulesToXml(xmlContent, applicableRules);
|
||||
return resultXml;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -18,6 +18,17 @@ public class IcdToXmlGenerateResult {
|
||||
private MappingDocument mappingDocument;
|
||||
private String savedPath;
|
||||
private List<String> problems = new ArrayList<String>();
|
||||
/** 生成成功后的 Xml 字符串。 */
|
||||
private String mappingXml;
|
||||
public String getMappingXml() {
|
||||
return mappingXml;
|
||||
}
|
||||
|
||||
public void setMappingXml(String mappingXml) {
|
||||
this.mappingXml = mappingXml;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public GenerateStatus getStatus() { return status; }
|
||||
public void setStatus(GenerateStatus status) { this.status = status; }
|
||||
|
||||
@@ -16,6 +16,16 @@ public class IcdToXmlResponse {
|
||||
private MappingDocumentResponse mappingDocument;
|
||||
private List<IndexCandidateResponse> indexCandidates = new ArrayList<IndexCandidateResponse>();
|
||||
private List<String> problems = new ArrayList<String>();
|
||||
/** 生成成功后的 Xml 字符串。 */
|
||||
private String mappingXml;
|
||||
public String getMappingXml() {
|
||||
return mappingXml;
|
||||
}
|
||||
|
||||
public void setMappingXml(String mappingXml) {
|
||||
this.mappingXml = mappingXml;
|
||||
}
|
||||
|
||||
public GenerateStatus getStatus() { return status; }
|
||||
public void setStatus(GenerateStatus status) { this.status = status; }
|
||||
public String getMessage() { return message; }
|
||||
|
||||
@@ -160,14 +160,14 @@ public class IcdToXmlTaskAppService {
|
||||
|
||||
|
||||
// 3. 从 JSON 转换为 XML
|
||||
String xmlPath = jsonToXmlConversionService.convertFromJson(
|
||||
String xmlContent = jsonToXmlConversionService.convertFromJson(
|
||||
mappingJson,
|
||||
templateStream,
|
||||
ruleStreams,
|
||||
icdToXmlMappingService.getIndexMapping()
|
||||
);
|
||||
|
||||
result.setSavedPath(xmlPath);
|
||||
result.setMappingXml(xmlContent);
|
||||
result.setStatus(GenerateStatus.SUCCESS);
|
||||
result.setMessage("XML 生成成功");
|
||||
return result;
|
||||
|
||||
Reference in New Issue
Block a user