From c4bfa8b20a82386d75764eb3073ca22435ca7e0c Mon Sep 17 00:00:00 2001 From: gulongcheng <474084054@qq.com> Date: Tue, 17 Mar 2026 14:00:10 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E4=BB=BB=E5=8A=A1=E5=B1=82=E9=9D=A2?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=9F=A5=E8=AF=A2=E7=BB=9F=E4=B8=80=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/DataAnalysisServiceImpl.java | 125 +++++++++--------- 1 file changed, 61 insertions(+), 64 deletions(-) diff --git a/data/src/main/java/com/sdm/data/service/impl/DataAnalysisServiceImpl.java b/data/src/main/java/com/sdm/data/service/impl/DataAnalysisServiceImpl.java index c2309b34..89eb2045 100644 --- a/data/src/main/java/com/sdm/data/service/impl/DataAnalysisServiceImpl.java +++ b/data/src/main/java/com/sdm/data/service/impl/DataAnalysisServiceImpl.java @@ -16,7 +16,6 @@ import com.sdm.common.entity.req.export.FileAnalysisExportExcelFormat; import com.sdm.common.entity.req.export.FileAnalysisExportExcelParam; import com.sdm.common.entity.req.project.GetAllTasksByDisciplineReq; import com.sdm.common.entity.resp.PageDataResp; -import com.sdm.common.entity.resp.data.FileMetadataInfoResp; import com.sdm.common.feign.inter.project.ISimulationTaskFeignClient; import com.sdm.common.service.FileBizTypeService; import com.sdm.common.utils.*; @@ -24,7 +23,6 @@ import com.sdm.data.bo.ExportOperate; import com.sdm.data.model.entity.FileMetadataInfo; import com.sdm.data.model.entity.FileTagRel; import com.sdm.common.entity.req.data.GetSimulationTaskFileReq; -import com.sdm.data.model.req.QueryBigFileReq; import com.sdm.common.entity.resp.data.SimulationTaskResultCurveResp; import com.sdm.data.service.*; import jakarta.servlet.http.HttpServletResponse; @@ -41,14 +39,11 @@ import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.File; import java.io.InputStreamReader; -import java.math.BigDecimal; import java.nio.charset.StandardCharsets; import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; -import static com.sdm.common.entity.enums.FileBizTypeEnum.*; - @Service @Slf4j public class DataAnalysisServiceImpl implements IDataAnalysisService { @@ -101,17 +96,16 @@ public class DataAnalysisServiceImpl implements IDataAnalysisService { // level=task,或者tagReq不为空且tagReq.taskId不为空且tagReq.runId为空,查询工况下的文件 - if (NodeTypeEnum.TASK.getValue().equals(req.getLevel()) || - ( - ObjectUtils.isNotEmpty(req.getTagReq()) - && ObjectUtils.isNotEmpty(req.getTagReq().getTaskId()) - && ObjectUtils.isEmpty(req.getTagReq().getRunId()) - )) { + Set taskLevelParentDirIds = null; + if (isOnlyTaskLevel(req)) { Set taskDirIds = resolveTaskDirId(req); if (ObjectUtils.isEmpty(taskDirIds)) { return PageUtils.getJsonObjectSdmResponse(new ArrayList<>(), new PageInfo<>()); } - return getTaskLevelFile(req, taskDirIds,discipoTaskDirIds); + taskLevelParentDirIds = getTaskLevelFile(req, taskDirIds, discipoTaskDirIds); + if (CollectionUtils.isEmpty(taskLevelParentDirIds)) { + return PageUtils.getJsonObjectSdmResponse(new ArrayList<>(), new PageInfo<>()); + } } List fileIdsByDictTags = null; @@ -148,6 +142,10 @@ public class DataAnalysisServiceImpl implements IDataAnalysisService { // 所属项目、阶段、机台、工位、任务、算列 applyTagFilters(wrapper, req.getTagReq(),discipoTaskUUids); + if (ObjectUtils.isNotEmpty(taskLevelParentDirIds)) { + wrapper.in(FileMetadataInfo::getParentId, taskLevelParentDirIds); + } + if (ObjectUtils.isEmpty(req.getOrderBy())) { wrapper.orderByDesc(FileMetadataInfo::getCreateTime); } @@ -164,7 +162,21 @@ public class DataAnalysisServiceImpl implements IDataAnalysisService { sortByTagFieldInCurrentPage(finalResultList, req.getOrderBy(), req.getOrderType()); - PageInfo pageInfo = new PageInfo<>(finalResultList); + + PageInfo pageInfo = null; + if (isOnlyTaskLevel(req)) { + List sortedList = finalResultList.stream() + .sorted( + // 第一步:按 createTime 排序(null 排最后) + Comparator.comparing(SimulationTaskResultCurveResp::getCreateTime, Comparator.nullsLast(LocalDateTime::compareTo)) + // 第二步:createTime 相同时,按 sortOrder 排序(null 排最后) + .thenComparing(SimulationTaskResultCurveResp::getSortOrder, Comparator.nullsLast(Integer::compare)) + ).toList(); + pageInfo = new PageInfo<>(sortedList); + }else { + pageInfo = new PageInfo<>(finalResultList); + } + pageInfo.setTotal(page.getTotal()); pageInfo.setPageNum(page.getPageNum()); pageInfo.setPageSize(page.getPageSize()); @@ -172,6 +184,17 @@ public class DataAnalysisServiceImpl implements IDataAnalysisService { return PageUtils.getJsonObjectSdmResponse(finalResultList, pageInfo); } + // 是否只到任务级别,不到算列层 + // 因为任务级别的文件,需要再任务下的交付物归档文件夹查询,需要特殊处理,不能下探到算列文件夹下去搜索文件 + private static boolean isOnlyTaskLevel(GetSimulationTaskFileReq req) { + return NodeTypeEnum.TASK.getValue().equals(req.getLevel()) || + ( + ObjectUtils.isNotEmpty(req.getTagReq()) + && ObjectUtils.isNotEmpty(req.getTagReq().getTaskId()) + && ObjectUtils.isEmpty(req.getTagReq().getRunId()) + ); + } + private List getDisciplineToTaskUUID(List disciplines){ // 调用feign获取每个学科对应的任务UUID列表 GetAllTasksByDisciplineReq req = new GetAllTasksByDisciplineReq(); @@ -242,7 +265,7 @@ public class DataAnalysisServiceImpl implements IDataAnalysisService { inByCsv(wrapper, FileMetadataInfo::getRunId, tagReq.getRunId()); // 根据所属学科查询所属任务 - wrapper.in(FileMetadataInfo::getTaskId,discipoTaskDirIds); + wrapper.in(CollectionUtils.isNotEmpty(discipoTaskDirIds),FileMetadataInfo::getTaskId,discipoTaskDirIds); } /** @@ -368,63 +391,37 @@ public class DataAnalysisServiceImpl implements IDataAnalysisService { }; } - private SdmResponse>> getTaskLevelFile(GetSimulationTaskFileReq req, Set dirIds, Set discipoTaskDirIds) { + private Set getTaskLevelFile(GetSimulationTaskFileReq req, Set dirIds, Set discipoTaskDirIds) { // level=task,查task下的交付物文件夹 再根据fileType查具体的云图文件、曲线文件夹下的文件 List deliverableFileInfoList = fileMetadataInfoService.lambdaQuery() - .in(CollectionUtils.isNotEmpty(dirIds),FileMetadataInfo::getParentId, dirIds) - .in(CollectionUtils.isNotEmpty(discipoTaskDirIds),FileMetadataInfo::getParentId, discipoTaskDirIds) + .in(CollectionUtils.isNotEmpty(dirIds), FileMetadataInfo::getParentId, dirIds) + .in(CollectionUtils.isNotEmpty(discipoTaskDirIds), FileMetadataInfo::getParentId, discipoTaskDirIds) .eq(FileMetadataInfo::getOriginalName, CommonConstants.DELIVERABLE_DIR_NAME) .isNull(FileMetadataInfo::getDeletedAt) .eq(FileMetadataInfo::getTenantId, ThreadLocalContext.getTenantId()) .list(); - if (CollectionUtils.isNotEmpty(deliverableFileInfoList)) { - // 交付物文件夹id - Set deliverableDirIds = deliverableFileInfoList.stream().map(FileMetadataInfo::getId).collect(Collectors.toSet()); - // 云图/曲线/文件夹名称 - List fileNames = Arrays.stream(req.getFileTypeDictValue().split(",")).map(fileType -> fileBizTypeService.getFileName(fileType)).toList(); - List secondDirFileMetadataInfoList = fileMetadataInfoService.lambdaQuery() - .in(FileMetadataInfo::getParentId, deliverableDirIds) - .in(FileMetadataInfo::getOriginalName, fileNames) - .isNull(FileMetadataInfo::getDeletedAt) - .eq(FileMetadataInfo::getTenantId, ThreadLocalContext.getTenantId()) - .list(); - if (CollectionUtils.isNotEmpty(secondDirFileMetadataInfoList)) { - // 云图/曲线/文件夹id - Set secondDirIds = secondDirFileMetadataInfoList.stream().map(FileMetadataInfo::getId).collect(Collectors.toSet()); - - // 最后查云图/曲线/文件夹底下的文件 - PageHelper.startPage(req.getCurrent(), req.getSize()); - List fileMetadataInfoList = fileMetadataInfoService.lambdaQuery() - .in(FileMetadataInfo::getParentId, secondDirIds) - .eq(FileMetadataInfo::getTenantId, ThreadLocalContext.getTenantId()) - .isNull(FileMetadataInfo::getDeletedAt) - .eq(FileMetadataInfo::getIsLatest, true) - .list(); - PageInfo page = new PageInfo<>(fileMetadataInfoList); - long total = page.getTotal(); - - // 设置tag1-tag10 - List finalResultList = hierarchyHelper.processFileHierarchyFromFileMetadata(fileMetadataInfoList, SimulationTaskResultCurveResp.class); - hierarchyHelper.setTagReqFromFileMetadataBatch(finalResultList, SimulationTaskResultCurveResp::getId); - - // 填充的文件类型标签信息 - fileDictTagQueryService.fillFileTagsForRespList(finalResultList, SimulationTaskResultCurveResp::getId); - - sortByTagFieldInCurrentPage(finalResultList, req.getOrderBy(), req.getOrderType()); - List sortedList = finalResultList.stream() - .sorted( - // 第一步:按 createTime 排序(null 排最后) - Comparator.comparing(SimulationTaskResultCurveResp::getCreateTime, Comparator.nullsLast(LocalDateTime::compareTo)) - // 第二步:createTime 相同时,按 sortOrder 排序(null 排最后) - .thenComparing(SimulationTaskResultCurveResp::getSortOrder, Comparator.nullsLast(Integer::compare)) - ).toList(); - - PageInfo page1 = new PageInfo<>(sortedList); - page1.setTotal(total); - return PageUtils.getJsonObjectSdmResponse(sortedList, page1); - } + if (CollectionUtils.isEmpty(deliverableFileInfoList)) { + return Collections.emptySet(); } - return PageUtils.getJsonObjectSdmResponse(new ArrayList<>(), new PageInfo<>()); + + // 交付物文件夹id + Set deliverableDirIds = deliverableFileInfoList.stream().map(FileMetadataInfo::getId).collect(Collectors.toSet()); + // 云图/曲线/文件夹名称 + List fileNames = Arrays.stream(req.getFileTypeDictValue().split(",")) + .map(fileType -> fileBizTypeService.getFileName(fileType)) + .toList(); + List secondDirFileMetadataInfoList = fileMetadataInfoService.lambdaQuery() + .in(FileMetadataInfo::getParentId, deliverableDirIds) + .in(FileMetadataInfo::getOriginalName, fileNames) + .isNull(FileMetadataInfo::getDeletedAt) + .eq(FileMetadataInfo::getTenantId, ThreadLocalContext.getTenantId()) + .list(); + if (CollectionUtils.isEmpty(secondDirFileMetadataInfoList)) { + return Collections.emptySet(); + } + + // 云图/曲线/文件夹id + return secondDirFileMetadataInfoList.stream().map(FileMetadataInfo::getId).collect(Collectors.toSet()); } @Override