From 96c81373d8eb78a28fc26240cff146698f6671b4 Mon Sep 17 00:00:00 2001 From: zhuxinru Date: Wed, 17 Dec 2025 10:51:42 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E4=B8=8A=E4=BC=A0=E8=AF=95=E9=AA=8C?= =?UTF-8?q?=E7=BB=93=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/entity/enums/FileBizTypeEnum.java | 6 ++ .../controller/SimulationRunController.java | 41 +++++++++- .../dao/SimulationExpResultMapper.java | 11 +++ .../entity/SimulationExperimentResult.java | 82 +++++++++++++++++++ .../model/req/ExperimentResultReq.java | 72 ++++++++++++++++ .../service/ISimulationExpResultService.java | 8 ++ .../service/ISimulationRunService.java | 13 ++- .../impl/SimulationExpResultServiceImpl.java | 12 +++ .../impl/SimulationRunServiceImpl.java | 75 +++++++++++++++++ 9 files changed, 312 insertions(+), 8 deletions(-) create mode 100644 project/src/main/java/com/sdm/project/dao/SimulationExpResultMapper.java create mode 100644 project/src/main/java/com/sdm/project/model/entity/SimulationExperimentResult.java create mode 100644 project/src/main/java/com/sdm/project/model/req/ExperimentResultReq.java create mode 100644 project/src/main/java/com/sdm/project/service/ISimulationExpResultService.java create mode 100644 project/src/main/java/com/sdm/project/service/impl/SimulationExpResultServiceImpl.java diff --git a/common/src/main/java/com/sdm/common/entity/enums/FileBizTypeEnum.java b/common/src/main/java/com/sdm/common/entity/enums/FileBizTypeEnum.java index 9e4a4ba8..638a58eb 100644 --- a/common/src/main/java/com/sdm/common/entity/enums/FileBizTypeEnum.java +++ b/common/src/main/java/com/sdm/common/entity/enums/FileBizTypeEnum.java @@ -51,6 +51,12 @@ public enum FileBizTypeEnum { @Schema(description = "交付物文件", example = "8") DELIVERABLE_FILE(8), + /** + * 交付物文件 + */ + @Schema(description = "试验结果文件", example = "9") + EXPERIMENT_FILE(9), + /** * 项目文件 */ diff --git a/project/src/main/java/com/sdm/project/controller/SimulationRunController.java b/project/src/main/java/com/sdm/project/controller/SimulationRunController.java index 58a170c6..ab00d8e4 100644 --- a/project/src/main/java/com/sdm/project/controller/SimulationRunController.java +++ b/project/src/main/java/com/sdm/project/controller/SimulationRunController.java @@ -11,10 +11,7 @@ import com.sdm.common.entity.resp.data.BatchAddFileInfoResp; import com.sdm.common.entity.resp.data.FileMetadataInfoResp; import com.sdm.common.feign.inter.project.ISimulationRunFeignClient; import com.sdm.common.log.annotation.SysLog; -import com.sdm.project.model.entity.SimulationBaseQuantities; -import com.sdm.project.model.entity.SimulationBaseUnits; -import com.sdm.project.model.entity.SimulationRun; -import com.sdm.project.model.entity.SimulationRunKeyResult; +import com.sdm.project.model.entity.*; import com.sdm.project.model.req.*; import com.sdm.project.model.resp.FlowInfoDto; import com.sdm.project.model.resp.KeyResultAndTaskInfoResp; @@ -291,4 +288,40 @@ public class SimulationRunController implements ISimulationRunFeignClient { return runService.listUnits(quantityType); } + /** + * 试验结果上传 + * @return + */ + @SysLog("试验结果上传") + @PostMapping(value = "/batchAddExperimentResult") + public SdmResponse batchAddExperimentResult(@RequestBody ExperimentResultReq req) { + return runService.batchAddExperimentResult(req); + } + + /** + * 试验结果查询 + * @return + */ + @PostMapping(value = "/listExperimentResult") + public SdmResponse>> listExperimentResult(@RequestBody ExperimentResultReq req) { + return runService.listExperimentResult(req); + } + + /** + * 删除试验结果 + * @return + */ + @PostMapping(value = "/deleteExperimentResult") + public SdmResponse deleteExperimentResult(@RequestBody ExperimentResultReq req) { + return runService.deleteExperimentResult(req); + } + + /** + * 编辑试验结果 + * @return + */ + @PostMapping(value = "/editExperimentResult") + public SdmResponse editExperimentResult(@RequestBody ExperimentResultReq req) { + return runService.editExperimentResult(req); + } } \ No newline at end of file diff --git a/project/src/main/java/com/sdm/project/dao/SimulationExpResultMapper.java b/project/src/main/java/com/sdm/project/dao/SimulationExpResultMapper.java new file mode 100644 index 00000000..debd48fa --- /dev/null +++ b/project/src/main/java/com/sdm/project/dao/SimulationExpResultMapper.java @@ -0,0 +1,11 @@ +package com.sdm.project.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.sdm.project.model.entity.SimulationExperimentResult; +import com.sdm.project.model.entity.SimulationRunKeyResult; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface SimulationExpResultMapper extends BaseMapper { + +} diff --git a/project/src/main/java/com/sdm/project/model/entity/SimulationExperimentResult.java b/project/src/main/java/com/sdm/project/model/entity/SimulationExperimentResult.java new file mode 100644 index 00000000..28937c9e --- /dev/null +++ b/project/src/main/java/com/sdm/project/model/entity/SimulationExperimentResult.java @@ -0,0 +1,82 @@ +package com.sdm.project.model.entity; + +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.time.LocalDateTime; + +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@TableName("simulation_experiment_result") +@ApiModel(value="simulationExperimentResult对象", description="任务-试验结果实体") +public class SimulationExperimentResult implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + @ApiModelProperty(value = "主键ID", example = "1") + private Long id; + + @TableField("uuid") + @ApiModelProperty(value = "关键结果唯一ID", required = true) + private String uuid; + + @TableField("taskId") + @ApiModelProperty(value = "所属任务 UUID", required = true) + private String taskId; + + @TableField("expName") + @ApiModelProperty(value = "试验名称") + private String expName; + + @TableField("expData") + @ApiModelProperty(value = "试验数据") + private String expData; + + @TableField("expDesc") + @ApiModelProperty(value = "试验描述") + private String expDesc; + + @TableField("imageId") + @ApiModelProperty(value = "关联试验图片id") + private Long imageId; + + @TableField("fileId") + @ApiModelProperty(value = "关联试验文件id") + private String fileId; + + @TableField("creator") + @ApiModelProperty(value = "创建人ID") + private Long creator; + + @TableField("createTime") + @ApiModelProperty(value = "创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + + @TableField("updater") + @ApiModelProperty(value = "更新人ID") + private Long updater; + + @TableField("updateTime") + @ApiModelProperty(value = "更新时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime updateTime; + + @Schema(description= "创建者名称,列表展示使用") + @TableField(value = "creatorName", insertStrategy = FieldStrategy.NEVER,select = false,updateStrategy = FieldStrategy.NEVER) + private String creatorName; + + @Schema(description= "更新者名称,列表展示使用") + @TableField(value = "updaterName", insertStrategy = FieldStrategy.NEVER,select = false,updateStrategy = FieldStrategy.NEVER) + private String updaterName; + +} diff --git a/project/src/main/java/com/sdm/project/model/req/ExperimentResultReq.java b/project/src/main/java/com/sdm/project/model/req/ExperimentResultReq.java new file mode 100644 index 00000000..66ece12f --- /dev/null +++ b/project/src/main/java/com/sdm/project/model/req/ExperimentResultReq.java @@ -0,0 +1,72 @@ +package com.sdm.project.model.req; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.sdm.common.entity.BaseReq; +import com.sdm.common.entity.enums.FileBizTypeEnum; +import io.swagger.annotations.ApiModelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.springframework.web.multipart.MultipartFile; + +import java.util.ArrayList; +import java.util.List; + + +@Data +public class ExperimentResultReq extends BaseReq { + private Long id; + + private String uuid; + + @Schema(description = "所属任务 UUID", required = true) + private String taskId; + + @Schema(description = "试验名称") + private String expName; + + @Schema(description = "试验数据") + private String expData; + + @Schema(description = "试验描述") + private String expDesc; + + @Schema(description = "关联试验截图文件id") + private Long imageId; + + @Schema(description = "关联试验附件文件id") + private String fileId; + + @Schema(description = "上传文件所在父目录id") + private Long dirId; + + @Schema(description = "文件名") + private String fileName; + + @Schema(description = "文件大小") + private Long fileSize; + + @Schema(description = "文件类型",implementation = FileBizTypeEnum.class) + private Integer fileType; + + @Schema(description = "文件") + private MultipartFile file; + + /** + * ------------------------------------------------------------------------------------------------ + */ + @Schema(description = "上传试验截图文件属性信息") + private ExperimentResultReq imageFileInfo; + + @Schema(description = "上传试验附件批量文件属性信息") + private List fileInfoList = new ArrayList<>(); + + /** + * 调用data服务使用 + */ + @Schema(description = "用户勾选的所有的文件的原始名称,前端限制不能选择相同名称的文件,后端逻辑判断对应dirId下不能和历史文件名相同") + private List sourceFiles; + + @Schema(description = "本次新增数据的任务id,毫秒值时间戳") + private String uploadTaskId; + +} diff --git a/project/src/main/java/com/sdm/project/service/ISimulationExpResultService.java b/project/src/main/java/com/sdm/project/service/ISimulationExpResultService.java new file mode 100644 index 00000000..d81aa97b --- /dev/null +++ b/project/src/main/java/com/sdm/project/service/ISimulationExpResultService.java @@ -0,0 +1,8 @@ +package com.sdm.project.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.sdm.project.model.entity.SimulationExperimentResult; + +public interface ISimulationExpResultService extends IService { + +} diff --git a/project/src/main/java/com/sdm/project/service/ISimulationRunService.java b/project/src/main/java/com/sdm/project/service/ISimulationRunService.java index 051929b9..8ed2d77a 100644 --- a/project/src/main/java/com/sdm/project/service/ISimulationRunService.java +++ b/project/src/main/java/com/sdm/project/service/ISimulationRunService.java @@ -9,11 +9,8 @@ import com.sdm.common.entity.req.system.LaunchApproveReq; import com.sdm.common.entity.resp.PageDataResp; import com.sdm.common.entity.resp.data.BatchAddFileInfoResp; import com.sdm.common.entity.resp.data.FileMetadataInfoResp; -import com.sdm.project.model.entity.SimulationBaseQuantities; -import com.sdm.project.model.entity.SimulationBaseUnits; -import com.sdm.project.model.entity.SimulationRun; +import com.sdm.project.model.entity.*; import com.baomidou.mybatisplus.extension.service.IService; -import com.sdm.project.model.entity.SimulationRunKeyResult; import com.sdm.project.model.req.*; import com.sdm.project.model.resp.FlowInfoDto; import com.sdm.project.model.resp.KeyResultAndTaskInfoResp; @@ -88,4 +85,12 @@ public interface ISimulationRunService extends IService { SdmResponse> listUnits(String quantityType); + SdmResponse batchAddExperimentResult(ExperimentResultReq req); + + SdmResponse>> listExperimentResult(ExperimentResultReq req); + + SdmResponse deleteExperimentResult(ExperimentResultReq req); + + SdmResponse editExperimentResult(ExperimentResultReq req); + } \ No newline at end of file diff --git a/project/src/main/java/com/sdm/project/service/impl/SimulationExpResultServiceImpl.java b/project/src/main/java/com/sdm/project/service/impl/SimulationExpResultServiceImpl.java new file mode 100644 index 00000000..bc584907 --- /dev/null +++ b/project/src/main/java/com/sdm/project/service/impl/SimulationExpResultServiceImpl.java @@ -0,0 +1,12 @@ +package com.sdm.project.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.sdm.project.dao.SimulationExpResultMapper; +import com.sdm.project.model.entity.SimulationExperimentResult; +import com.sdm.project.service.ISimulationExpResultService; +import org.springframework.stereotype.Service; + +@Service +public class SimulationExpResultServiceImpl extends ServiceImpl implements ISimulationExpResultService { + +} diff --git a/project/src/main/java/com/sdm/project/service/impl/SimulationRunServiceImpl.java b/project/src/main/java/com/sdm/project/service/impl/SimulationRunServiceImpl.java index d76f36b1..f30f2f73 100644 --- a/project/src/main/java/com/sdm/project/service/impl/SimulationRunServiceImpl.java +++ b/project/src/main/java/com/sdm/project/service/impl/SimulationRunServiceImpl.java @@ -108,6 +108,9 @@ public class SimulationRunServiceImpl extends ServiceImpl new UploadFilesReq(i.getFileName(), i.getFileSize(), i.getFileType())).toList()); + // 批量存储文件信息,返回数据供第二步分片上传使用 + SdmResponse> sdmResponse = dataFeignClient.batchAddFileInfo(filesReq); + if (sdmResponse.isSuccess() && CollectionUtils.isNotEmpty(sdmResponse.getData())) { + List batchAddFileInfoResps = sdmResponse.getData(); + if (ObjectUtils.isNotEmpty(req.getImageFileInfo())) { + batchAddFileInfoResps.stream().filter(i -> StringUtils.equals(i.getSourceFileName(), req.getImageFileInfo().getFileName())).findFirst().ifPresent(i -> { + experimentResult.setImageId(i.getBusinessId()); + }); + } + String fileIds = batchAddFileInfoResps.stream().filter(i -> !Objects.equals(i.getBusinessId(), experimentResult.getImageId())).map(i -> String.valueOf(i.getBusinessId())).collect(Collectors.joining(",")); + experimentResult.setFileId(fileIds); + simulationExpResultService.save(experimentResult); + } + return sdmResponse; + } + return SdmResponse.success(experimentResult.getUuid()); + } + + @Override + public SdmResponse>> listExperimentResult(ExperimentResultReq req) { + PageHelper.startPage(req.getCurrent(), req.getSize()); + List experimentResults = simulationExpResultService.list(); + PageInfo page = new PageInfo<>(experimentResults); + return PageUtils.getJsonObjectSdmResponse(experimentResults, page); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public SdmResponse deleteExperimentResult(ExperimentResultReq req) { + simulationExpResultService.removeById(req.getId()); + // 删除文件 + if (ObjectUtils.isNotEmpty(req.getImageId())) { + req.getFileInfoList().add(req.getImageFileInfo()); + } + if (CollectionUtils.isNotEmpty(req.getFileInfoList())) { + for (ExperimentResultReq resultReq : req.getFileInfoList()) { + DelFileReq delFileReq = new DelFileReq(); + delFileReq.setDelFileId(resultReq.getImageId()); + SdmResponse response = dataFeignClient.delFile(delFileReq); + if (!response.isSuccess()) { + return response; + } + } + } + return SdmResponse.success(); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public SdmResponse editExperimentResult(ExperimentResultReq req) { + deleteExperimentResult(req); + batchAddExperimentResult(req); + return SdmResponse.success(); + } + public static void deleteFolder(File folder) { if (folder.isDirectory()) { File[] files = folder.listFiles();