feat(event): 添加暂态事件波形查看与导出功能

- 新增 getTransientEventWave 接口用于查看暂态事件波形
- 新增 exportTransientEventWaves 接口用于批量导出暂态事件波形
- 添加 EventWaveExportParam 参数类支持波形导出
- 在 EventListMapper 中增加 selectTransientDetailsByIds 查询方法
- 更新事件列表查询参数支持毫秒级时间格式
- 移除事件描述模糊查询条件优化查询性能
- 添加波形导出相关的常量和工具类集成
This commit is contained in:
2026-05-18 08:45:05 +08:00
parent 90219a3daf
commit 38f910fccd
67 changed files with 1203 additions and 1760 deletions

View File

@@ -1,5 +1,6 @@
package com.njcn.gather.icd.mapping.component;
import com.njcn.gather.icd.mapping.utils.GeneratedFileNameUtil;
import org.springframework.stereotype.Component;
import java.io.File;
@@ -26,7 +27,7 @@ public class FileStorageService {
if (!dir.isDirectory()) {
throw new IllegalStateException("输出路径不是目录:" + dir.getAbsolutePath());
}
File target = new File(dir, fileName);
File target = new File(dir, GeneratedFileNameUtil.appendToday(fileName));
try (FileOutputStream fos = new FileOutputStream(target)) {
fos.write(content.getBytes(StandardCharsets.UTF_8));
}

View File

@@ -8,6 +8,7 @@ import com.njcn.gather.icd.mapping.pojo.vo.IndexCandidateReportItemResponse;
import com.njcn.gather.icd.mapping.pojo.vo.IndexCandidateResponse;
import com.njcn.gather.icd.mapping.pojo.vo.MappingDocumentResponse;
import com.njcn.gather.icd.mapping.pojo.vo.XmlFileResponse;
import com.njcn.gather.icd.mapping.utils.GeneratedFileNameUtil;
import org.springframework.stereotype.Component;
@Component
@@ -90,13 +91,13 @@ public class IcdToXmlResponseConverter {
private String resolveXmlFileName(IcdToXmlGenerateResult result) {
String iedName = result.getIedName();
if (iedName == null || iedName.trim().isEmpty()) {
return DEFAULT_XML_FILE_NAME;
return GeneratedFileNameUtil.appendToday(DEFAULT_XML_FILE_NAME);
}
String safeName = iedName.replaceAll("[\\\\/:*?\"<>|]+", "_").trim();
if (safeName.isEmpty()) {
return DEFAULT_XML_FILE_NAME;
return GeneratedFileNameUtil.appendToday(DEFAULT_XML_FILE_NAME);
}
return safeName + ".xml";
return GeneratedFileNameUtil.appendToday(safeName + ".xml");
}
}

View File

@@ -9,6 +9,7 @@ import com.njcn.gather.icd.mapping.pojo.param.*;
import com.njcn.gather.icd.mapping.pojo.vo.*;
import com.njcn.gather.icd.mapping.pojo.enums.GenerateStatus;
import com.njcn.gather.icd.mapping.pojo.bo.mapping.MappingDocument;
import com.njcn.gather.icd.mapping.utils.GeneratedFileNameUtil;
import lombok.var;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
@@ -17,6 +18,8 @@ import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.ArrayList;
import java.util.List;
@@ -57,8 +60,9 @@ public class JsonToXmlConversionService {
String xmlContent = buildXmlContentFromJson(mappingJson, templateStream, ruleStreams, indexMapping);
// 3. 保存为临时文件
Path tempPath = Files.createTempFile("converted_", ".xml");
Files.write(tempPath, xmlContent.getBytes(StandardCharsets.UTF_8));
Path tempPath = Paths.get(System.getProperty("java.io.tmpdir"),
GeneratedFileNameUtil.appendToday("converted_" + java.util.UUID.randomUUID().toString().replace("-", "") + ".xml"));
Files.write(tempPath, xmlContent.getBytes(StandardCharsets.UTF_8), StandardOpenOption.CREATE_NEW);
return tempPath.toString();
}

View File

@@ -12,6 +12,8 @@ import java.io.*;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -20,6 +22,7 @@ import com.njcn.gather.icd.mapping.pojo.bo.*;
import com.njcn.gather.icd.mapping.pojo.param.*;
import com.njcn.gather.icd.mapping.pojo.vo.*;
import com.njcn.gather.icd.mapping.pojo.enums.GenerateStatus;
import com.njcn.gather.icd.mapping.utils.GeneratedFileNameUtil;
@Component
public class RuleBasedXmlMappingService {
@@ -104,8 +107,9 @@ public class RuleBasedXmlMappingService {
xmlContent = applyRulesToXml(xmlContent, applicableRules);
Path tempPath = Files.createTempFile("rule_mapped_", ".xml");
Files.write(tempPath, xmlContent.getBytes(StandardCharsets.UTF_8));
Path tempPath = Paths.get(System.getProperty("java.io.tmpdir"),
GeneratedFileNameUtil.appendToday("rule_mapped_" + UUID.randomUUID().toString().replace("-", "") + ".xml"));
Files.write(tempPath, xmlContent.getBytes(StandardCharsets.UTF_8), StandardOpenOption.CREATE_NEW);
return tempPath.toString();
}

View File

@@ -0,0 +1,33 @@
package com.njcn.gather.icd.mapping.utils;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
/**
* 生成文件名处理工具。
*/
public final class GeneratedFileNameUtil {
private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMdd");
private GeneratedFileNameUtil() {
}
public static String appendToday(String fileName) {
return appendDate(fileName, LocalDate.now());
}
public static String appendDate(String fileName, LocalDate date) {
if (fileName == null || date == null) {
return fileName;
}
String dateText = DATE_FORMATTER.format(date);
int separatorIndex = Math.max(fileName.lastIndexOf('/'), fileName.lastIndexOf('\\'));
int dotIndex = fileName.lastIndexOf('.');
if (dotIndex > separatorIndex) {
return fileName.substring(0, dotIndex) + "_" + dateText + fileName.substring(dotIndex);
}
return fileName + "_" + dateText;
}
}