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 1e71314d..fbd37284 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 @@ -31,7 +31,7 @@ public enum FileBizTypeEnum { * 云图文件 */ @Schema(description = "云图文件", example = "5") - CLOUD_FILE(5, "图片文件"), + CLOUD_FILE(5, "云图文件"), /** * 流程脚本 @@ -128,12 +128,4 @@ public enum FileBizTypeEnum { return value; } - public static String getDirNameByValue(int value) { - for (FileBizTypeEnum fileBizTypeEnum : values()) { - if (fileBizTypeEnum.value == value) { - return fileBizTypeEnum.getDirName(); - } - } - return null; - } } diff --git a/common/src/main/java/com/sdm/common/entity/resp/project/SpdmTaskVo.java b/common/src/main/java/com/sdm/common/entity/resp/project/SpdmTaskVo.java index 30c93c52..edf064ae 100644 --- a/common/src/main/java/com/sdm/common/entity/resp/project/SpdmTaskVo.java +++ b/common/src/main/java/com/sdm/common/entity/resp/project/SpdmTaskVo.java @@ -39,6 +39,10 @@ public class SpdmTaskVo extends BaseEntity { * 当前节点类型 */ private String nodeType; + /** + * 节点编码 + */ + private String nodeCode; /** diff --git a/project/src/main/java/com/sdm/project/controller/SimulationProjectController.java b/project/src/main/java/com/sdm/project/controller/SimulationProjectController.java index 34b9df75..fef5307b 100644 --- a/project/src/main/java/com/sdm/project/controller/SimulationProjectController.java +++ b/project/src/main/java/com/sdm/project/controller/SimulationProjectController.java @@ -4,12 +4,15 @@ import com.sdm.common.common.SdmResponse; import com.sdm.common.entity.req.system.LaunchApproveReq; import com.sdm.common.entity.req.task.TaskExportExcelFormat; import com.sdm.common.entity.req.task.TaskTreeExportExcelFormat; +import com.sdm.common.entity.resp.PageDataResp; import com.sdm.common.feign.inter.project.ISimulationProjectFeignClient; import com.sdm.common.log.annotation.SysLog; import com.sdm.project.model.bo.ModifyProjectNode; import com.sdm.project.model.req.ProjectTreeListReq; import com.sdm.project.model.req.ProjectTreeTagReq; import com.sdm.project.model.req.SpdmNodeReq; +import com.sdm.project.model.req.WorkspaceReportListReq; +import com.sdm.project.model.resp.WorkspaceReportListResp; import com.sdm.project.service.IProjectService; import com.sdm.project.service.ITaskService; import io.swagger.v3.oas.annotations.Operation; @@ -21,6 +24,7 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import java.util.List; @RestController @RequestMapping(value = "/project") @@ -107,4 +111,10 @@ public class SimulationProjectController implements ISimulationProjectFeignClien return projectService.queryDesignVersions(projectId, phaseId); } + @PostMapping("/getWorkspaceReportList") + @Operation(summary = "查询工位下的报告列表", description = "根据工位id和tagMap配置查询工位下的报告文件列表") + public SdmResponse>> getWorkspaceReportList(@RequestBody @Validated WorkspaceReportListReq req) { + return projectService.getWorkspaceReportList(req); + } + } diff --git a/project/src/main/java/com/sdm/project/model/req/WorkspaceReportListReq.java b/project/src/main/java/com/sdm/project/model/req/WorkspaceReportListReq.java new file mode 100644 index 00000000..72002231 --- /dev/null +++ b/project/src/main/java/com/sdm/project/model/req/WorkspaceReportListReq.java @@ -0,0 +1,28 @@ +package com.sdm.project.model.req; + +import com.sdm.project.model.bo.TaskNodeTag; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.util.List; + +@Data +@Schema(description = "工位报告列表查询请求") +public class WorkspaceReportListReq { + + @NotNull(message = "workspaceId不能为空") + @Schema(description = "工位id") + private String workspaceId; + + @Schema(description = "标签映射配置,用于指定哪个tag对应工位") + private List tagMap; + + @NotNull(message = "当前页码不能为空") + @Schema(description = "当前页码") + private Integer current; + + @NotNull(message = "每页数量不能为空") + @Schema(description = "每页数量") + private Integer size; +} diff --git a/project/src/main/java/com/sdm/project/model/resp/WorkspaceReportListResp.java b/project/src/main/java/com/sdm/project/model/resp/WorkspaceReportListResp.java new file mode 100644 index 00000000..d63e7675 --- /dev/null +++ b/project/src/main/java/com/sdm/project/model/resp/WorkspaceReportListResp.java @@ -0,0 +1,34 @@ +package com.sdm.project.model.resp; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +@Schema(description = "工位报告列表响应") +public class WorkspaceReportListResp { + + @Schema(description = "文件id") + private Long fileId; + + @Schema(description = "文件名称") + private String originalName; + + @Schema(description = "文件大小(格式化后)") + private String formatFileSize; + + @Schema(description = "创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + + @Schema(description = "所属任务名称") + private String taskName; + + @Schema(description = "任务uuid") + private String taskUuid; + + @Schema(description = "审批状态") + private String exeStatus; +} diff --git a/project/src/main/java/com/sdm/project/service/IProjectService.java b/project/src/main/java/com/sdm/project/service/IProjectService.java index fa73151e..230e671e 100644 --- a/project/src/main/java/com/sdm/project/service/IProjectService.java +++ b/project/src/main/java/com/sdm/project/service/IProjectService.java @@ -4,8 +4,10 @@ import com.alibaba.fastjson2.JSONObject; import com.sdm.common.common.SdmResponse; import com.sdm.common.entity.req.system.LaunchApproveReq; import com.sdm.common.entity.req.task.TaskTreeExportExcelFormat; +import com.sdm.common.entity.resp.PageDataResp; import com.sdm.project.model.bo.ModifyProjectNode; import com.sdm.project.model.req.*; +import com.sdm.project.model.resp.WorkspaceReportListResp; import jakarta.servlet.http.HttpServletResponse; import org.springframework.stereotype.Service; @@ -41,4 +43,6 @@ public interface IProjectService { void editTaskList(List taskEditNodeReqList); + SdmResponse>> getWorkspaceReportList(WorkspaceReportListReq req); + } diff --git a/project/src/main/java/com/sdm/project/service/impl/ProjectServiceImpl.java b/project/src/main/java/com/sdm/project/service/impl/ProjectServiceImpl.java index 5108afa3..841d1a71 100644 --- a/project/src/main/java/com/sdm/project/service/impl/ProjectServiceImpl.java +++ b/project/src/main/java/com/sdm/project/service/impl/ProjectServiceImpl.java @@ -3,7 +3,9 @@ package com.sdm.project.service.impl; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.fasterxml.jackson.databind.ObjectMapper; +import com.github.pagehelper.PageInfo; import com.sdm.common.common.ResultCode; import com.sdm.common.common.SdmResponse; import com.sdm.common.common.ThreadLocalContext; @@ -18,10 +20,13 @@ import com.sdm.common.entity.req.task.TaskTreeExportExcelFormat; import com.sdm.common.entity.req.task.TaskTreeExportExcelParam; import com.sdm.common.entity.resp.capability.FlowTemplateResp; import com.sdm.common.entity.resp.data.FileMetadataInfoResp; +import com.sdm.common.entity.resp.PageDataResp; +import com.sdm.common.entity.resp.data.SimulationTaskResultCurveResp; import com.sdm.common.entity.resp.project.SpdmTaskVo; import com.sdm.common.entity.resp.project.TaskNodeExtraPo; import com.sdm.common.entity.resp.system.CIDUserResp; import com.sdm.common.feign.impl.capability.SimulationFlowFeignClientImpl; +import com.sdm.common.feign.impl.data.DataAnalysisFeignClientImpl; import com.sdm.common.feign.impl.data.DataClientFeignClientImpl; import com.sdm.common.feign.impl.system.ApproveFeignClientImpl; import com.sdm.common.feign.impl.system.MessageFeignClientImpl; @@ -32,6 +37,7 @@ import com.sdm.common.log.constants.OperateTypeConstants; import com.sdm.common.log.dto.SysLogDTO; import com.sdm.common.service.BaseService; import com.sdm.common.service.TagMapService; +import com.sdm.common.utils.PageUtils; import com.sdm.common.utils.RandomUtil; import com.sdm.common.utils.SystemOperate; import com.sdm.common.utils.excel.ExcelUtil; @@ -47,6 +53,7 @@ import com.sdm.project.model.bo.*; import com.sdm.project.model.entity.*; import com.sdm.project.model.po.*; import com.sdm.project.model.req.*; +import com.sdm.project.model.resp.WorkspaceReportListResp; import com.sdm.project.model.vo.SpdmNodeExtraVo; import com.sdm.project.model.vo.SpdmNodeMemberVo; import com.sdm.project.model.vo.SpdmNodeVo; @@ -89,6 +96,9 @@ public class ProjectServiceImpl extends BaseService implements IProjectService { @Autowired private DataClientFeignClientImpl dataClientFeignClient; + @Autowired + private DataAnalysisFeignClientImpl dataAnalysisFeignClient; + @Autowired private ISimulationTaskMemberService simulationTaskMemberService; @@ -3691,4 +3701,91 @@ public class ProjectServiceImpl extends BaseService implements IProjectService { return SdmResponse.success(versions); } + @Override + public SdmResponse>> getWorkspaceReportList(WorkspaceReportListReq req) { + log.info("查询工位报告列表,参数:{}", req); + + // 1. 从tagMap中找到key为workspace的配置,获取对应的tag字段名 + String workspaceTagField = req.getTagMap().stream() + .filter(tag -> "workspace".equals(tag.getKey())) + .map(TaskNodeTag::getValue) + .findFirst() + .orElse(null); + + // 2. 查询simulation_task,根据workspaceTagField字段等于workspaceId查询任务列表 + List taskList = taskMapper.selectList( + new QueryWrapper().eq(workspaceTagField, req.getWorkspaceId()) + ); + + if (CollectionUtils.isEmpty(taskList)) { + log.info("未查询到工位{}下的任务", req.getWorkspaceId()); + return SdmResponse.success(new PageDataResp<>()); + } + + // 3. 构建任务uuid到任务信息的映射 + Map taskMap = taskList.stream() + .collect(Collectors.toMap(SimulationTask::getUuid, t -> t)); + + // 4. 拼接所有任务uuid,批量调用data服务查询报告文件 + String taskIds = String.join(",", taskMap.keySet()); + List allReports = new ArrayList<>(); + + try { + GetSimulationTaskFileReq fileReq = new GetSimulationTaskFileReq(); + fileReq.setUuid(taskIds); // 逗号分隔的多个任务id + fileReq.setCurrent(1); + fileReq.setSize(taskList.size() * 1000); // 设置足够大的分页 + fileReq.setFileTypeDictClass(FileDictTagEnum.FILE_TYPE.getDictClass()); + fileReq.setFileTypeDictValue(String.valueOf(FileBizTypeEnum.REPORT_FILE.getValue())); + fileReq.setDictTags(Arrays.asList(FileDictTagEnum.FILE_TYPE.getDictClassFieldName(), FileDictTagEnum.FILE_TYPE.getDictValueFieldName())); + + TagReq tagReq = new TagReq(); + tagReq.setTaskId(taskIds); // 逗号分隔的多个任务id + fileReq.setTagReq(tagReq); + + SdmResponse>> response = dataAnalysisFeignClient.getSimulationTaskFile(fileReq); + if (response != null && response.isSuccess() && response.getData() != null) { + List files = response.getData().getData(); + if (CollectionUtils.isNotEmpty(files)) { + for (SimulationTaskResultCurveResp file : files) { + // 从tagReq中获取文件所属的任务id + String taskUuid = file.getTagReq() != null ? file.getTagReq().getTaskId() : null; + SimulationTask task = taskMap.get(taskUuid); + if (task != null) { + WorkspaceReportListResp reportResp = new WorkspaceReportListResp(); + reportResp.setFileId(file.getId()); + reportResp.setOriginalName(file.getOriginalName()); + reportResp.setFormatFileSize(file.getFormatFileSize()); + reportResp.setCreateTime(file.getCreateTime()); + reportResp.setTaskName(task.getTaskName()); + reportResp.setTaskUuid(task.getUuid()); + reportResp.setExeStatus(task.getExeStatus()); + allReports.add(reportResp); + } + } + } + } + } catch (Exception e) { + log.error("批量查询工位{}的报告文件失败", req.getWorkspaceId(), e); + } + + // 5. 分页处理 + int total = allReports.size(); + int fromIndex = (req.getCurrent() - 1) * req.getSize(); + int toIndex = Math.min(fromIndex + req.getSize(), total); + + List pagedList; + if (fromIndex >= total) { + pagedList = new ArrayList<>(); + } else { + pagedList = allReports.subList(fromIndex, toIndex); + } + + PageInfo pageInfo = new PageInfo<>(pagedList); + pageInfo.setTotal(allReports.size()); + pageInfo.setPageNum(req.getCurrent()); + pageInfo.setPageSize(req.getSize()); + + return PageUtils.getJsonObjectSdmResponse(pagedList, pageInfo); + } } 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 e0ef342a..ccea652c 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 @@ -45,6 +45,7 @@ import com.sdm.common.feign.impl.flowable.FlowableClientFeignClientImpl; import com.sdm.common.feign.impl.system.ApproveFeignClientImpl; import com.sdm.common.feign.impl.system.SysUserFeignClientImpl; import com.sdm.common.service.DataFileService; +import com.sdm.common.service.FileBizTypeService; import com.sdm.common.utils.CommonUtils; import com.sdm.common.utils.PageUtils; import com.sdm.common.utils.RandomUtil; @@ -123,6 +124,9 @@ public class SimulationRunServiceImpl extends ServiceImpl> batchAddFileInfoForTask(UploadFilesReq req) { // 3D模型、计算模型、图片文件、曲线文件、仿真报告 获取文件夹名 - String dirName = FileBizTypeEnum.getDirNameByValue(req.getFileType()); + String dirName = fileBizTypeService.getFileName(String.valueOf(req.getFileType())); // 获取文件夹id Long parentId = getParentDirId(req.getUuid(), dirName); req.setDirId(parentId); diff --git a/project/src/main/java/com/sdm/project/service/impl/SimulationWorkServiceImpl.java b/project/src/main/java/com/sdm/project/service/impl/SimulationWorkServiceImpl.java index a075f29f..6bceddeb 100644 --- a/project/src/main/java/com/sdm/project/service/impl/SimulationWorkServiceImpl.java +++ b/project/src/main/java/com/sdm/project/service/impl/SimulationWorkServiceImpl.java @@ -138,6 +138,9 @@ public class SimulationWorkServiceImpl extends ServiceImpl updateWrapper = this.lambdaUpdate(); Integer actualWorkHour = req.getActualWorkHour(); @@ -317,7 +338,11 @@ public class SimulationWorkServiceImpl extends ServiceImpl page = new PageInfo<>(workList); - return PageUtils.getJsonObjectSdmResponse(workList, page); - } - // 当前用户需要是报工条目的创建人或负责人 - workList = workList.stream().filter(work -> userId.equals(work.getOwner()) || userId.equals(work.getCreator())).collect(Collectors.toList()); + workList = this.lambdaQuery() + .eq(SimulationWork::getTaskId, req.getTaskId()) + .and(wrapper -> wrapper + .eq(SimulationWork::getOwner, userId) + .or() + .eq(SimulationWork::getCreator, userId)) + .list(); } else { - // 不传taskId,根据type查询 + // 不传taskId,根据type查询,将filteredTaskIds条件加入SQL PageHelper.startPage(req.getCurrent(), req.getSize()); if (req.getType() != null && req.getType() == 0) { // type=0:查询当前登录人为creator(我确认的) - workList = this.lambdaQuery().eq(SimulationWork::getCreator, userId).list(); + workList = this.lambdaQuery() + .eq(SimulationWork::getCreator, userId) + .in(filteredTaskIds != null, SimulationWork::getTaskId, filteredTaskIds) + .list(); } else if (req.getType() != null && req.getType() == 1) { // type=1:查询当前登录人为owner(我执行的) - workList = this.lambdaQuery().eq(SimulationWork::getOwner, userId).list(); + workList = this.lambdaQuery() + .eq(SimulationWork::getOwner, userId) + .in(filteredTaskIds != null, SimulationWork::getTaskId, filteredTaskIds) + .list(); } else { - // type为空或其他值,查询全部 - workList = this.lambdaQuery().list(); - } - - // 如果有筛选条件,过滤workList - if (filteredTaskIds != null && CollectionUtils.isNotEmpty(workList)) { - List finalFilteredTaskIds = filteredTaskIds; - workList = workList.stream() - .filter(work -> finalFilteredTaskIds.contains(work.getTaskId())) - .collect(Collectors.toList()); + // type为空或其他值,查询全部(需要带taskId筛选) + workList = this.lambdaQuery() + .in(filteredTaskIds != null, SimulationWork::getTaskId, filteredTaskIds) + .list(); } } diff --git a/project/src/main/java/com/sdm/project/service/impl/TaskServiceImpl.java b/project/src/main/java/com/sdm/project/service/impl/TaskServiceImpl.java index e7200918..f68a70f7 100644 --- a/project/src/main/java/com/sdm/project/service/impl/TaskServiceImpl.java +++ b/project/src/main/java/com/sdm/project/service/impl/TaskServiceImpl.java @@ -3164,6 +3164,11 @@ public class TaskServiceImpl implements ITaskService { } } } + // 设置扩展信息 + List taskExtraList = mapper.getTaskExtraList(Collections.singletonList(taskVo.getUuid())); + if (CollectionUtils.isNotEmpty(taskExtraList)) { + taskVo.setExtras(taskExtraList); + } return SdmResponse.success(taskVo); } diff --git a/project/src/main/resources/mapper/SimulationProjectMapper.xml b/project/src/main/resources/mapper/SimulationProjectMapper.xml index aec17110..891166ab 100644 --- a/project/src/main/resources/mapper/SimulationProjectMapper.xml +++ b/project/src/main/resources/mapper/SimulationProjectMapper.xml @@ -187,6 +187,10 @@ sectionName = #{taskNode.section}, + + groupName = #{taskNode.group}, + + bCapacity = #{taskNode.bCapacity},