fix:任务层面数据查询统一处理
This commit is contained in:
@@ -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<Long> taskLevelParentDirIds = null;
|
||||
if (isOnlyTaskLevel(req)) {
|
||||
Set<Long> 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<Long> 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<SimulationTaskResultCurveResp> pageInfo = new PageInfo<>(finalResultList);
|
||||
|
||||
PageInfo<SimulationTaskResultCurveResp> pageInfo = null;
|
||||
if (isOnlyTaskLevel(req)) {
|
||||
List<SimulationTaskResultCurveResp> 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<String> getDisciplineToTaskUUID(List<String> 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<PageDataResp<List<SimulationTaskResultCurveResp>>> getTaskLevelFile(GetSimulationTaskFileReq req, Set<Long> dirIds, Set<Long> discipoTaskDirIds) {
|
||||
private Set<Long> getTaskLevelFile(GetSimulationTaskFileReq req, Set<Long> dirIds, Set<Long> discipoTaskDirIds) {
|
||||
// level=task,查task下的交付物文件夹 再根据fileType查具体的云图文件、曲线文件夹下的文件
|
||||
List<FileMetadataInfo> 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<Long> deliverableDirIds = deliverableFileInfoList.stream().map(FileMetadataInfo::getId).collect(Collectors.toSet());
|
||||
// 云图/曲线/文件夹名称
|
||||
List<String> fileNames = Arrays.stream(req.getFileTypeDictValue().split(",")).map(fileType -> fileBizTypeService.getFileName(fileType)).toList();
|
||||
List<FileMetadataInfo> 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<Long> secondDirIds = secondDirFileMetadataInfoList.stream().map(FileMetadataInfo::getId).collect(Collectors.toSet());
|
||||
|
||||
// 最后查云图/曲线/文件夹底下的文件
|
||||
PageHelper.startPage(req.getCurrent(), req.getSize());
|
||||
List<FileMetadataInfo> fileMetadataInfoList = fileMetadataInfoService.lambdaQuery()
|
||||
.in(FileMetadataInfo::getParentId, secondDirIds)
|
||||
.eq(FileMetadataInfo::getTenantId, ThreadLocalContext.getTenantId())
|
||||
.isNull(FileMetadataInfo::getDeletedAt)
|
||||
.eq(FileMetadataInfo::getIsLatest, true)
|
||||
.list();
|
||||
PageInfo<FileMetadataInfo> page = new PageInfo<>(fileMetadataInfoList);
|
||||
long total = page.getTotal();
|
||||
|
||||
// 设置tag1-tag10
|
||||
List<SimulationTaskResultCurveResp> finalResultList = hierarchyHelper.processFileHierarchyFromFileMetadata(fileMetadataInfoList, SimulationTaskResultCurveResp.class);
|
||||
hierarchyHelper.setTagReqFromFileMetadataBatch(finalResultList, SimulationTaskResultCurveResp::getId);
|
||||
|
||||
// 填充的文件类型标签信息
|
||||
fileDictTagQueryService.fillFileTagsForRespList(finalResultList, SimulationTaskResultCurveResp::getId);
|
||||
|
||||
sortByTagFieldInCurrentPage(finalResultList, req.getOrderBy(), req.getOrderType());
|
||||
List<SimulationTaskResultCurveResp> 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<SimulationTaskResultCurveResp> 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<Long> deliverableDirIds = deliverableFileInfoList.stream().map(FileMetadataInfo::getId).collect(Collectors.toSet());
|
||||
// 云图/曲线/文件夹名称
|
||||
List<String> fileNames = Arrays.stream(req.getFileTypeDictValue().split(","))
|
||||
.map(fileType -> fileBizTypeService.getFileName(fileType))
|
||||
.toList();
|
||||
List<FileMetadataInfo> 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
|
||||
|
||||
Reference in New Issue
Block a user