Merge remote-tracking branch 'origin/main'

This commit is contained in:
2026-02-12 15:57:00 +08:00
4 changed files with 43 additions and 29 deletions

View File

@@ -35,4 +35,7 @@ public class SimulationTaskResultCurveResp extends BaseResp {
@Schema(description = "创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
@Schema(description = "排序号")
private String tag1;
}

View File

@@ -143,8 +143,18 @@ public class DataAnalysisServiceImpl implements IDataAnalysisService {
.eq(FileMetadataInfo::getTenantId, ThreadLocalContext.getTenantId())
.isNull(FileMetadataInfo::getDeletedAt)
.list();
List<FileMetadataInfo> sortedList = fileMetadataInfoList.stream()
.sorted(Comparator.comparing(FileMetadataInfo::getTag1,
PageInfo<FileMetadataInfo> page = new PageInfo<>(fileMetadataInfoList);
long total = page.getTotal();
List<Long> fileIdList = fileMetadataInfoList.stream().map(FileMetadataInfo::getId).toList();
List<SimulationTaskResultCurveResp> finalResultList = hierarchyHelper.processFileHierarchy(
fileIdList,
SimulationTaskResultCurveResp.class,
FileMetadataHierarchyHelper::setFileHierarchy
);
List<SimulationTaskResultCurveResp> sortedList = finalResultList.stream()
.sorted(Comparator.comparing(SimulationTaskResultCurveResp::getTag1,
Comparator.nullsLast((tag1, tag2) -> {
try {
int num1 = Integer.parseInt(tag1.trim());
@@ -154,20 +164,11 @@ public class DataAnalysisServiceImpl implements IDataAnalysisService {
return tag1.compareTo(tag2);
}
})))
.collect(Collectors.toList());
PageInfo<FileMetadataInfo> page = new PageInfo<>(sortedList);
long total = page.getTotal();
.toList();
List<Long> fileIdList = sortedList.stream().map(FileMetadataInfo::getId).toList();
List<SimulationTaskResultCurveResp> finalResultList = hierarchyHelper.processFileHierarchy(
fileIdList,
SimulationTaskResultCurveResp.class,
FileMetadataHierarchyHelper::setFileHierarchy
);
PageInfo<SimulationTaskResultCurveResp> page1 = new PageInfo<>(finalResultList);
PageInfo<SimulationTaskResultCurveResp> page1 = new PageInfo<>(sortedList);
page1.setTotal(total);
return PageUtils.getJsonObjectSdmResponse(finalResultList, page1);
return PageUtils.getJsonObjectSdmResponse(sortedList, page1);
}
}
return PageUtils.getJsonObjectSdmResponse(new ArrayList<>(), new PageInfo<>());

View File

@@ -39,6 +39,7 @@ import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@@ -52,6 +53,7 @@ import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.util.*;
@Slf4j
@RestController
@RequestMapping("/dataManager/tree/node")
@Tag(name = "宜安项目数据归档", description = "宜安项目模型数据关了")
@@ -458,6 +460,7 @@ public class YAModelController {
String pubKey = decodedJWT.getSubject();
//String privateKey = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCjz2pItCtM2Itf3knLhA1ZWzTVtKKY692Eptk3ZUy4qjlv+2e6u78/cBYZsVa/1nOyHPtb2j9xZAsHYGKZGoh64UWSewUhRdUO15xBRr5DyGEdTWHjwc1GHf7c99rKCjKDO2Xdp7cpqYABOAxgkSA2vP5zqhSCq0FCqwleEPLG1aAa/kh/oUzCZLUoSjZIdqQOgHJTZojqNeQCOC6U8Q+kUcHdKbptewu1A6XK8DHV0WqiJJEG3kyaoAZ1kGtr6ETtGy++aRvJT9gZN4M4bIgucKtAu2dcqQHj9jZ1i2xwhY3nmLjqaz3y313/IEYpMTG8pnPb8eP5usHDaDmH8RqJAgMBAAECggEAAzz05WYGWxkGvEjpHYhJOUR3yWeuNSaodNhVf+ZVO2tGAmQuWz8d2zOshCqAw/8Jv3IaN+kbCvNG0okBufQP0ZoFZY1f/xXhzc7OTG4JEc7yuIEQl897btDl+lk97nOAJx7z9ws7MCwlFyEUAY6s29glkYTBrgmTmy1FXKIqImsLfVV3LgfL2Mkixn0YSSsbUh2b+dki1zxjct3hTGZVh29bKOpbflOaG0LqEO0UwSX92Y/ir+fKmC8zEFbi5HZANYODivm8DiwF7khpraayf78kG3liccOTMMLVxIHwNiS9wcLG8WPuVEphlXMT4Ev4lq5VFM3mVxtd9g21ESbuvwKBgQDmsgE8u66qKVBsndp2K9FV9VWYDA4fYfRswDAWnZDCzIdanT0NFPp8s3nZCVU4FfX4m958yOrJ/MVp6d58z6fgkYQh2qL2Wy6zRPaIxCc6JG3FheFSxfWyULU/mBBK02ntUZCXEs8XKjAfDvmxaVVeonv0nCSgVwxJ4ypB5BZ+owKBgQC1x0GDnWtMbNGUMx6tYtFGWQIgop4hVQe6ZNgkKaQX7gtMa5egEda6ga6wCTV3+ZvQ9tBa1DxUFb5N/TrtQdFm39gOSXyhWSrntUKqaSFo03GvXXvvze2D3+uXpk7S8yzWuuD3OYyYj9S3nFVZffymabfukuY7oY3AN0E0PALw4wKBgQDQiyGrMU6X7HkTdy9BnCLEvd7+cAdkPzyiAqp2B0IRlqrVM0c5SDmX+PaxSEqNROzyLJVX4Ji+t44OTKgf0+hCjckQgYDHi24QCMuEny2G1d+Vq40hMmsFIwh10JUJz0v2iMFYkFw86JpPuU3nHv1ZazD60xwZBhfJw10z62iaWQKBgH+EVgsUJS8pryO9cKnFBnXI/tsR+Mf9NDynfZBwvbIjxT1IxMb/fJi9XGQVMbMGIS5H1gXBmMiLsEJZgDrrzw/Ru2jaWFl/ib+dwjR1J4C3w6p3c/fXh+TY8hYiDm2hNTU1R5dmgaCMVXawbpcm8FN1Ghh8aJIwVJYgrNcNuiptAoGAO14DHGqUXZZ//erIYWVfL0CAMXqy38dqNmfbzSAXYyLDl6cn49CCHF0GXOfCOesQN9ToQbqpLrntFgcFe0hil5dIWYafk9fHjjR8N8g74ijErQmCEAQy22b06V0q7rLzEsU/HDVL+RZg2aY4hDN+ODHRdpdFkOxsCYV73gevVeo=";
//pubKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAo89qSLQrTNiLX95Jy4QNWVs01bSimOvdhKbZN2VMuKo5b/tnuru/P3AWGbFWv9Zzshz7W9o/cWQLB2BimRqIeuFFknsFIUXVDtecQUa+Q8hhHU1h48HNRh3+3Pfaygoygztl3ae3KamAATgMYJEgNrz+c6oUgqtBQqsJXhDyxtWgGv5If6FMwmS1KEo2SHakDoByU2aI6jXkAjgulPEPpFHB3Sm6bXsLtQOlyvAx1dFqoiSRBt5MmqAGdZBra+hE7RsvvmkbyU/YGTeDOGyILnCrQLtnXKkB4/Y2dYtscIWN55i46ms98t9d/yBGKTExvKZz2/Hj+brBw2g5h/EaiQIDAQAB";
log.info("clientName:"+clientName);
String verityPublicKey = getCidTokenPubKey(userName,clientName,frontendPrivateKey,pubKey);
if(!SystemOperate.verify(verityPublicKey,token))
{
@@ -514,6 +517,7 @@ public class YAModelController {
{
JSONObject resultObject = JSONObject.parseObject(pulbicKeyResult);
JSONArray resultArray = resultObject.getJSONArray("datas");
log.info("public keys"+resultArray.toString());
if(resultArray!=null)
{
for(int i=0;i<resultArray.size();i++)

View File

@@ -1495,12 +1495,17 @@ public class SimulationRunServiceImpl extends ServiceImpl<SimulationRunMapper, S
throw new RuntimeException(e);
}
String reportName = "report_" +
LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) +
".docx";
// 构建python命令
List<String> command = new ArrayList<>();
command.add("python");
command.add("/opt/script/newExportWord.py");
command.add(TEMP_REPORT_PATH + randomId);
command.add("/opt/script/template/仿真报告标准模板_v1.0.docx");
command.add(reportName);
String commands = String.join(" ", command);
// 调用脚本
@@ -1532,9 +1537,6 @@ public class SimulationRunServiceImpl extends ServiceImpl<SimulationRunMapper, S
if (response != null) {
try {
// 获取临时路径中脚本生成的报告
String reportName = "report_" +
LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) +
".docx";
FileInputStream fileInputStream = new FileInputStream(TEMP_REPORT_PATH + randomId + File.separator + reportName);
fileData = fileInputStream.readAllBytes();
@@ -1696,6 +1698,10 @@ public class SimulationRunServiceImpl extends ServiceImpl<SimulationRunMapper, S
// 下载到本地临时目录
dataFeignClient.downloadFileToLocal(reportTemplateFileId, TEMP_REPORT_PATH + randomId);
String reportName = "report_" +
LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) +
".docx";
// 构建python命令
List<String> command = new ArrayList<>();
command.add("python");
@@ -1703,6 +1709,7 @@ public class SimulationRunServiceImpl extends ServiceImpl<SimulationRunMapper, S
// command.add(TEMP_REPORT_PATH + File.separator +"modifyReport.py");
command.add(TEMP_REPORT_PATH + randomId);
command.add(TEMP_REPORT_PATH + randomId + File.separator + originalName);
command.add(reportName);
String commands = String.join(" ", command);
// 前端参数写入临时目录
@@ -1743,14 +1750,14 @@ public class SimulationRunServiceImpl extends ServiceImpl<SimulationRunMapper, S
}
// 读取脚本生成的报告并归档
archiveReportAndImage(req.getTaskId(), req.getRunId(), randomId, FileBizTypeEnum.REPORT_FILE, null, null);
archiveReportAndImage(reportName, req.getTaskId(), req.getRunId(), randomId, FileBizTypeEnum.REPORT_FILE, null, null);
// 读取脚本生成的图片并按顺序归档
List<String> imageNames = extractPicNames(reportContent);
if (CollectionUtils.isNotEmpty(imageNames)) {
int sortOrder = 1;
for (String imageName : imageNames) {
archiveReportAndImage(req.getTaskId(), req.getRunId(), randomId, FileBizTypeEnum.CLOUD_FILE, imageName, String.valueOf(sortOrder++));
archiveReportAndImage(null, req.getTaskId(), req.getRunId(), randomId, FileBizTypeEnum.CLOUD_FILE, imageName, String.valueOf(sortOrder++));
}
}
return SdmResponse.success();
@@ -1761,7 +1768,7 @@ public class SimulationRunServiceImpl extends ServiceImpl<SimulationRunMapper, S
return SdmResponse.failed("生成自动化报告失败");
}
private void archiveReportAndImage(String taskId, String runId, String randomId, FileBizTypeEnum fileBizTypeEnum, String imageName, String sortOrder) {
private void archiveReportAndImage(String reportName, String taskId, String runId, String randomId, FileBizTypeEnum fileBizTypeEnum, String imageName, String sortOrder) {
byte[] fileData = null;
try {
String fileName = "";
@@ -1769,9 +1776,7 @@ public class SimulationRunServiceImpl extends ServiceImpl<SimulationRunMapper, S
if (fileBizTypeEnum == FileBizTypeEnum.CLOUD_FILE) {
fileName = imageName + ".png";
} else {
fileName = "report_" +
LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) +
".docx";
fileName = reportName;
}
FileInputStream fileInputStream = new FileInputStream(TEMP_REPORT_PATH + randomId + File.separator + fileName);
fileData = fileInputStream.readAllBytes();
@@ -2020,6 +2025,10 @@ public class SimulationRunServiceImpl extends ServiceImpl<SimulationRunMapper, S
// 下载到本地临时目录
dataFeignClient.downloadFileToLocal(reportTemplateFileId, TEMP_REPORT_PATH + randomId);
String reportName = "report_" +
LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) +
".docx";
// 构建python命令
List<String> command = new ArrayList<>();
command.add("python");
@@ -2027,6 +2036,7 @@ public class SimulationRunServiceImpl extends ServiceImpl<SimulationRunMapper, S
// command.add(TEMP_REPORT_PATH + File.separator +"modifyReport.py");
command.add(TEMP_REPORT_PATH + randomId);
command.add(TEMP_REPORT_PATH + randomId + File.separator + originalName);
command.add(reportName);
String commands = String.join(" ", command);
// 前端参数写入临时目录
@@ -2069,21 +2079,17 @@ public class SimulationRunServiceImpl extends ServiceImpl<SimulationRunMapper, S
if (response != null) {
try {
// 读取脚本生成的报告并归档
archiveReportAndImage(req.getTaskId(), req.getRunId(), randomId, FileBizTypeEnum.REPORT_FILE, null, null);
archiveReportAndImage(reportName, req.getTaskId(), req.getRunId(), randomId, FileBizTypeEnum.REPORT_FILE, null, null);
// 读取脚本生成的图片并按顺序归档
List<String> imageNames = extractPicNames(reportContent);
if (CollectionUtils.isNotEmpty(imageNames)) {
int sortOrder = 1;
for (String imageName : imageNames) {
archiveReportAndImage(req.getTaskId(), req.getRunId(), randomId, FileBizTypeEnum.CLOUD_FILE, imageName, String.valueOf(sortOrder++));
archiveReportAndImage(null, req.getTaskId(), req.getRunId(), randomId, FileBizTypeEnum.CLOUD_FILE, imageName, String.valueOf(sortOrder++));
}
}
// 获取临时路径中脚本生成的报告
String reportName = "report_" +
LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) +
".docx";
FileInputStream fileInputStream = new FileInputStream(TEMP_REPORT_PATH + randomId + File.separator + reportName);
fileData = fileInputStream.readAllBytes();