This commit is contained in:
2025-12-18 16:37:00 +08:00
44 changed files with 5074 additions and 5978 deletions

View File

@@ -95,8 +95,8 @@ public class SimulationRunController implements ISimulationRunFeignClient {
/**
* 上传算例文件
*/
@PostMapping(value = "/uploadRunFiles", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public SdmResponse uploadRunFiles(UploadFilesReq req) {
@PostMapping(value = "/uploadRunFiles")
public SdmResponse uploadRunFiles(@RequestBody UploadFilesReq req) {
return runService.uploadRunFiles(req);
}

View File

@@ -1,8 +1,10 @@
package com.sdm.project.controller;
import com.alibaba.fastjson2.JSONObject;
import com.auth0.jwt.interfaces.DecodedJWT;
import com.github.pagehelper.PageInfo;
import com.sdm.common.common.SdmResponse;
import com.sdm.common.entity.bo.JwtToken;
import com.sdm.common.entity.enums.NodeTypeEnum;
import com.sdm.common.entity.req.data.GetSimulationTaskFileReq;
import com.sdm.common.entity.req.data.UploadFilesReq;
@@ -12,6 +14,8 @@ import com.sdm.common.entity.resp.data.FileMetadataInfoResp;
import com.sdm.common.feign.impl.data.DataAnalysisFeignClientImpl;
import com.sdm.common.feign.inter.data.IDataFeignClient;
import com.sdm.common.service.lyric.LyricIntegrateService;
import com.sdm.common.utils.SystemOperate;
import com.sdm.project.common.KeyResultTypeEnum;
import com.sdm.project.model.entity.SimulationRunKeyResult;
import com.sdm.project.model.req.KeyResultReq;
@@ -58,7 +62,16 @@ public class YAModelController {
@Resource
ISimulationRunService runService;
@Autowired
private LyricIntegrateService lyricIntegrateService;
private final String PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAo4hmt4m5CpMIE5DL8G60" +
"cg63X6nEiNPt1yWB+kXDXQA0RaiqXhT4O78HT9BldrQVpyj6g4Z2mwPMfLBP6LjR" +
"8QyLlwfMBJ2uUV5B4PlEWiF9pUK9tU0lPlByS+p0oIxX8XlvzbbGbkyWQaOQ6Sfl" +
"FxB7eHu3r/hDOYtsMDcNe4hsuz1BnrAuRY6Yj+Hq2d4zPDetDgXeXs066z3qO6bL" +
"N9r/2UkHZc4tdkpMJgxucwTuvAvmgRgdDfnd6sAVDHYPaIVuJHqWnEnEcQzq6zWb" +
"1YPItc2FgDbXWpi8noz7wSjXDfBiTHU11nU5vv//xLVF83h5mbhk8dWHKq7bLUGp" +
"9QIDAQAB";
/**
* 保存仿真模型数据
*
@@ -336,4 +349,41 @@ public class YAModelController {
return taskService.syncCidTask(req);
}
@GetMapping("verityCidWebToken")
public SdmResponse verityCidWebToken(@RequestParam("token") String token)
{
//SystemOperate.decodeJwt(token);
SdmResponse response = SdmResponse.success();
JwtToken jwtToken = new JwtToken("keyId","","qinwei","spdm");
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=";
String pubKeyToken = SystemOperate.generateToken(jwtToken,privateKey,false);
String pubKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAo89qSLQrTNiLX95Jy4QNWVs01bSimOvdhKbZN2VMuKo5b/tnuru/P3AWGbFWv9Zzshz7W9o/cWQLB2BimRqIeuFFknsFIUXVDtecQUa+Q8hhHU1h48HNRh3+3Pfaygoygztl3ae3KamAATgMYJEgNrz+c6oUgqtBQqsJXhDyxtWgGv5If6FMwmS1KEo2SHakDoByU2aI6jXkAjgulPEPpFHB3Sm6bXsLtQOlyvAx1dFqoiSRBt5MmqAGdZBra+hE7RsvvmkbyU/YGTeDOGyILnCrQLtnXKkB4/Y2dYtscIWN55i46ms98t9d/yBGKTExvKZz2/Hj+brBw2g5h/EaiQIDAQAB";
if(!SystemOperate.verify(pubKey,token))
{
response = SdmResponse.failed("登录验证失败");
}
else
{
DecodedJWT decodedJWT = SystemOperate.decodeJwt(token);
String issure = decodedJWT.getIssuer();
if(issure != null)
{
response.setData(issure);
}
}
lyricIntegrateService.getHKCloudSimpleUserInfo("05687");
return response;
}
/**
* 接口调用token验证
* @param token
* @return
*/
private boolean verifyCidJwt(String token)
{
return SystemOperate.verify(PUBLIC_KEY, token);
}
}

View File

@@ -76,7 +76,6 @@ public class TaskRunPo extends BaseEntity {
private String disciplineName;
private String analysisName;
/**
* 仿真负责人

View File

@@ -69,4 +69,10 @@ public class ExperimentResultReq extends BaseReq {
@Schema(description = "本次新增数据的任务id,毫秒值时间戳")
private String uploadTaskId;
// -------------------------------------------------------编辑使用---------------------------------------------------
private List<Long> deleteFileIds;
private List<ExperimentResultReq> addFileInfoList = new ArrayList<>();
private ExperimentResultReq addImageInfo;
}

View File

@@ -1,5 +1,6 @@
package com.sdm.project.service;
import com.alibaba.fastjson2.JSONObject;
import com.sdm.common.common.SdmResponse;
import com.sdm.common.entity.ExportExcelFormat;
import com.sdm.common.entity.req.task.TaskExportExcelFormat;
@@ -73,8 +74,8 @@ public interface ITaskService {
SdmResponse getTaskAchieveStatistics(TaskCompleteStatisticsReq req);
SdmResponse getTaskConfidenceStatistics();
SdmResponse<List<JSONObject>> getTaskConfidenceStatistics();
SdmResponse getTaskDifficultStatistics();
SdmResponse<List<JSONObject>> getTaskDifficultStatistics();
}

View File

@@ -837,6 +837,50 @@ public class NodeServiceImpl extends ServiceImpl<SimulationNodeMapper, Simulatio
String currentNodeType = currentNode.getNodeType();
String currentNodeTag = TagMap.get(currentNodeType);
String nextNodeTag = TagMap.get(nextNodeType);
// 当前节点向前搜索
List<String> preUUids = this.lambdaQuery()
.in(TagConstant.TAG1.equals(currentNodeTag), SimulationNode::getTag1, uuids)
.in(TagConstant.TAG2.equals(currentNodeTag), SimulationNode::getTag2, uuids)
.in(TagConstant.TAG3.equals(currentNodeTag), SimulationNode::getTag3, uuids)
.in(TagConstant.TAG4.equals(currentNodeTag), SimulationNode::getTag4, uuids)
.in(TagConstant.TAG5.equals(currentNodeTag), SimulationNode::getTag5, uuids)
.in(TagConstant.TAG6.equals(currentNodeTag), SimulationNode::getTag6, uuids)
.in(TagConstant.TAG7.equals(currentNodeTag), SimulationNode::getTag7, uuids)
.in(TagConstant.TAG8.equals(currentNodeTag), SimulationNode::getTag8, uuids)
.in(TagConstant.TAG9.equals(currentNodeTag), SimulationNode::getTag9, uuids)
.in(TagConstant.TAG10.equals(currentNodeTag), SimulationNode::getTag10, uuids)
.list().stream().map(simulationNode -> {
if (TagConstant.TAG1.equals(nextNodeTag)) {
return simulationNode.getTag1();
} else if (TagConstant.TAG2.equals(nextNodeTag)) {
return simulationNode.getTag2();
} else if (TagConstant.TAG3.equals(nextNodeTag)) {
return simulationNode.getTag3();
} else if (TagConstant.TAG4.equals(nextNodeTag)) {
return simulationNode.getTag4();
} else if (TagConstant.TAG5.equals(nextNodeTag)) {
return simulationNode.getTag5();
} else if (TagConstant.TAG6.equals(nextNodeTag)) {
return simulationNode.getTag6();
} else if (TagConstant.TAG7.equals(nextNodeTag)) {
return simulationNode.getTag7();
} else if (TagConstant.TAG8.equals(nextNodeTag)) {
return simulationNode.getTag8();
} else if (TagConstant.TAG9.equals(nextNodeTag)) {
return simulationNode.getTag9();
} else if (TagConstant.TAG10.equals(nextNodeTag)) {
return simulationNode.getTag10();
} else {
return null;
}
}
).toList();
List<SimulationNode> preSimulationNodeList = this.lambdaQuery().in(SimulationNode::getUuid, preUUids).list();
// 当前节点向后搜索
List<SimulationNode> simulationNodeList = this.lambdaQuery()
.in(TagConstant.TAG1.equals(currentNodeTag), SimulationNode::getTag1, uuids)
.in(TagConstant.TAG2.equals(currentNodeTag), SimulationNode::getTag2, uuids)
@@ -851,6 +895,7 @@ public class NodeServiceImpl extends ServiceImpl<SimulationNodeMapper, Simulatio
.eq(SimulationNode::getNodeType, nextNodeType)
.list();
simulationNodeList.addAll(preSimulationNodeList);
if (CollectionUtils.isEmpty(simulationNodeList)) {
return SdmResponse.success();
}

View File

@@ -724,7 +724,8 @@ public class SimulationRunServiceImpl extends ServiceImpl<SimulationRunMapper, S
@Override
public SdmResponse uploadRunFiles(UploadFilesReq req) {
return dataFeignClient.uploadFiles(req);
// 批量存储文件信息,返回数据供第二步分片上传使用
return dataFeignClient.batchAddFileInfo(req);
}
@Override
@@ -1523,6 +1524,7 @@ public class SimulationRunServiceImpl extends ServiceImpl<SimulationRunMapper, S
}
return sdmResponse;
}
simulationExpResultService.save(experimentResult);
return SdmResponse.success(experimentResult.getUuid());
}
@@ -1537,15 +1539,22 @@ public class SimulationRunServiceImpl extends ServiceImpl<SimulationRunMapper, S
@Override
@Transactional(rollbackFor = Exception.class)
public SdmResponse deleteExperimentResult(ExperimentResultReq req) {
simulationExpResultService.removeById(req.getId());
SimulationExperimentResult experimentResult = simulationExpResultService.getById(req.getId());
// 删除文件
if (ObjectUtils.isNotEmpty(req.getImageId())) {
req.getFileInfoList().add(req.getImageFileInfo());
List<Long> fileIds = new ArrayList<>();
if (ObjectUtils.isNotEmpty(experimentResult.getImageId())) {
fileIds.add(experimentResult.getImageId());
}
if (CollectionUtils.isNotEmpty(req.getFileInfoList())) {
for (ExperimentResultReq resultReq : req.getFileInfoList()) {
if (ObjectUtils.isNotEmpty(experimentResult.getFileId())) {
fileIds.addAll(Arrays.stream(experimentResult.getFileId().split(",")).mapToLong(Long::parseLong).boxed().toList());
}
simulationExpResultService.removeById(req.getId());
if (CollectionUtils.isNotEmpty(fileIds)) {
for (Long fileId : fileIds) {
DelFileReq delFileReq = new DelFileReq();
delFileReq.setDelFileId(resultReq.getImageId());
delFileReq.setDelFileId(fileId);
SdmResponse response = dataFeignClient.delFile(delFileReq);
if (!response.isSuccess()) {
return response;
@@ -1568,6 +1577,49 @@ public class SimulationRunServiceImpl extends ServiceImpl<SimulationRunMapper, S
if (StringUtils.isNotBlank(req.getExpDesc())) {
experimentResult.setExpDesc(req.getExpDesc());
}
List<Long> deleteFileIds = new ArrayList<>();
if (ObjectUtils.isNotEmpty(req.getAddImageInfo())) {
req.getAddFileInfoList().add(req.getAddImageInfo());
}
if (CollectionUtils.size(req.getAddFileInfoList()) > 0) {
UploadFilesReq filesReq = new UploadFilesReq();
BeanUtils.copyProperties(req, filesReq);
filesReq.setUuid(req.getTaskId());
filesReq.setSourceFiles(req.getAddFileInfoList().stream().map(i -> new UploadFilesReq(i.getFileName(), i.getFileSize(), i.getFileType())).toList());
// 批量存储文件信息,返回数据供第二步分片上传使用
SdmResponse<List<BatchAddFileInfoResp>> sdmResponse = dataFeignClient.batchAddFileInfo(filesReq);
if (sdmResponse.isSuccess() && CollectionUtils.isNotEmpty(sdmResponse.getData())) {
List<BatchAddFileInfoResp> batchAddFileInfoResps = sdmResponse.getData();
if (ObjectUtils.isNotEmpty(req.getAddImageInfo())) {
batchAddFileInfoResps.stream().filter(i -> StringUtils.equals(i.getSourceFileName(), req.getAddImageInfo().getFileName())).findFirst().ifPresent(i -> {
deleteFileIds.add(experimentResult.getImageId());
experimentResult.setImageId(i.getBusinessId());
});
}
List<Long> addFileIds = batchAddFileInfoResps.stream().filter(i -> !Objects.equals(i.getBusinessId(), experimentResult.getImageId())).map(BatchAddFileInfoResp::getBusinessId).collect(Collectors.toList());
List<Long> oldFileIds = new ArrayList<>(Arrays.stream(experimentResult.getFileId().split(",")).mapToLong(Long::parseLong).boxed().toList());
if (CollectionUtils.isNotEmpty(req.getDeleteFileIds()) && CollectionUtils.isNotEmpty(oldFileIds)) {
Set<Long> deleteSet = new HashSet<>(req.getDeleteFileIds());
oldFileIds.removeIf(deleteSet::contains);
deleteFileIds.addAll(req.getDeleteFileIds());
}
oldFileIds.addAll(addFileIds);
String fileIds = oldFileIds.stream().map(String::valueOf).collect(Collectors.joining(","));
experimentResult.setFileId(fileIds);
simulationExpResultService.updateById(experimentResult);
if (CollectionUtils.isNotEmpty(deleteFileIds)) {
for (Long deleteFileId : deleteFileIds) {
DelFileReq delFileReq = new DelFileReq();
delFileReq.setDelFileId(deleteFileId);
SdmResponse response = dataFeignClient.delFile(delFileReq);
if (!response.isSuccess()) {
return response;
}
}
}
}
return sdmResponse;
}
simulationExpResultService.updateById(experimentResult);
return SdmResponse.success();
}

View File

@@ -956,7 +956,7 @@ public class TaskServiceImpl implements ITaskService {
taskRunPo.setProjectName(eachTaskVo.getProjectName());
taskRunPo.setPhaseName(eachTaskVo.getPhaseName());
taskRunPo.setDisciplineName(eachTaskVo.getDisciplineName());
taskRunPo.setAnalysisName(eachTaskVo.getTaskName());
taskRunPo.setTaskName(eachTaskVo.getTaskName());
taskRunPo.setPMembers(eachTaskVo.getPMembers());
}
@@ -2394,8 +2394,27 @@ public class TaskServiceImpl implements ITaskService {
return SdmResponse.success(resultResponse);
}
/**
* 将自定义对象List转换为List<JSONObject>
* @param objList 自定义对象列表
* @param <T> 泛型(自定义对象类型)
* @return List<JSONObject>
*/
public static <T> List<JSONObject> convertToJSONObjectList(List<T> objList) {
if (objList == null || objList.isEmpty()) {
return new ArrayList<>(); // 空列表返回空避免NPE
}
List<JSONObject> jsonList = new ArrayList<>();
for (T obj : objList) {
JSONObject jsonObj = JSONObject.from(obj);
jsonList.add(jsonObj);
}
return jsonList;
}
@Override
public SdmResponse getTaskConfidenceStatistics() {
public SdmResponse<List<JSONObject>> getTaskConfidenceStatistics() {
// 查询所有任务再通过tag6去过滤兼容多层级学科的情况
// .eq(SimulationTask::getExeStatus,TaskExeStatusEnum.COMPLETED.getCode()) 暂时去掉筛选条件,方便调试
List<SimulationTask> allTaskList= simulationTaskService.lambdaQuery()
@@ -2450,11 +2469,11 @@ public class TaskServiceImpl implements ITaskService {
taskConfidenceStatisticsRespList.add(taskConfidenceStatisticsResp);
}
}
return SdmResponse.success(taskConfidenceStatisticsRespList);
return SdmResponse.success(convertToJSONObjectList(taskConfidenceStatisticsRespList));
}
@Override
public SdmResponse getTaskDifficultStatistics() {
public SdmResponse<List<JSONObject>> getTaskDifficultStatistics() {
// 查询所有任务再通过tag6去过滤兼容多层级学科的情况
// .eq(SimulationTask::getExeStatus,TaskExeStatusEnum.COMPLETED.getCode()) 暂时去掉筛选条件,方便调试
List<SimulationTask> allTaskList= simulationTaskService.lambdaQuery()
@@ -2509,7 +2528,7 @@ public class TaskServiceImpl implements ITaskService {
taskDifficultStatisticsRespList.add(taskDifficultStatisticsResp);
}
}
return SdmResponse.success(taskDifficultStatisticsRespList);
return SdmResponse.success(convertToJSONObjectList(taskDifficultStatisticsRespList));
}
}