1、优化getTaskTree
This commit is contained in:
@@ -19,6 +19,8 @@ public class ProjectTreeTagReq {
|
||||
|
||||
private List<String> filterDiscipline;
|
||||
|
||||
private Integer queryTaskFlag = 0;
|
||||
|
||||
|
||||
/**
|
||||
* 根据projectNodeId和phaseNodeId构建
|
||||
|
||||
@@ -61,6 +61,7 @@ import org.springframework.transaction.interceptor.TransactionAspectSupport;
|
||||
import java.io.File;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.*;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static com.sdm.project.service.impl.NodeServiceImpl.getTagProperty;
|
||||
@@ -457,8 +458,12 @@ public class ProjectServiceImpl extends BaseService implements IProjectService {
|
||||
log.error("未查询到顶级节点");
|
||||
return SdmResponse.success(new ArrayList<>());
|
||||
}
|
||||
// queryTaskFlag为1待办不查询任务,只查询节点
|
||||
Integer queryTaskFlag = req.getQueryTaskFlag();
|
||||
log.info("查询到的节点为:{}", taskTreeNodeList.stream().map(ProjectNodePo::getId).toList());
|
||||
taskTreeReq.setFilterDiscipline(req.getFilterDiscipline());
|
||||
|
||||
if (queryTaskFlag != 1) {
|
||||
taskTreeTaskList = mapper.getTaskListByTag(taskTreeReq);
|
||||
if (CollectionUtils.isNotEmpty(taskTreeTaskList)) {
|
||||
log.info("查询到的任务为:{}", taskTreeTaskList.stream().map(TaskNodePo::getId).toList());
|
||||
@@ -469,6 +474,8 @@ public class ProjectServiceImpl extends BaseService implements IProjectService {
|
||||
taskTreePerformanceList.forEach(performance -> performance.setNodeType("performance"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
taskTreeTagMap = req.getTagMap();
|
||||
firstNodeTag = taskTreeTagMap.get(0).getValue();
|
||||
lastNodeTag = taskTreeTagMap.get(taskTreeTagMap.size()-1).getValue();
|
||||
@@ -495,8 +502,81 @@ public class ProjectServiceImpl extends BaseService implements IProjectService {
|
||||
List<ProjectNodePo> realTopProjectNodeList = taskTreeNodeList.stream().filter(node -> node.getNodeType().equals(realFirstTaskNodeType)).toList();
|
||||
List<String> addedIdList = new ArrayList<>();
|
||||
List<String> currentAddedIdList = new ArrayList<>();
|
||||
|
||||
|
||||
Map<String,List<SimulationTaskMember>> taskMemberMap = new HashMap<>();
|
||||
Map<Long,CIDUserResp> cidUserMap = new HashMap<>();
|
||||
Map<Long,String> dataMap = new HashMap<>();
|
||||
Map<String,List<TaskNodeExtraPo>> taskExtraMap = new HashMap<>();
|
||||
List<SimulationPerformanceExtra> performanceExtraList = new ArrayList<>();
|
||||
List<SpdmNodeExtraVo> nodeExtraList = new ArrayList<>();
|
||||
if (CollectionUtils.isNotEmpty(taskTreeTaskList)) {
|
||||
List<SimulationTaskMember> memberList = simulationTaskMemberService.lambdaQuery().in(SimulationTaskMember::getTaskId, taskTreeTaskList.stream().map(TaskNodePo::getUuid).collect(Collectors.toSet())).list();
|
||||
if (CollectionUtils.isNotEmpty(memberList)) {
|
||||
taskMemberMap = memberList.stream().collect(Collectors.groupingBy(SimulationTaskMember::getTaskId));
|
||||
List<Long> allUserIdList = memberList.stream().map(SimulationTaskMember::getUserId).distinct().toList();
|
||||
SdmResponse<List<CIDUserResp>> cidUserResp = sysUserFeignClient.listUserByIds(UserQueryReq.builder().userIds(allUserIdList).build());
|
||||
List<CIDUserResp> cidUserRespList = cidUserResp.getData();
|
||||
if (CollectionUtils.isNotEmpty(cidUserRespList)) {
|
||||
cidUserMap = cidUserRespList.stream().collect(Collectors.toMap(CIDUserResp::getUserId, Function.identity()));
|
||||
}
|
||||
}
|
||||
|
||||
// 转换执行规范的文件id为文件名称
|
||||
List<String> standardList = taskTreeTaskList.stream().map(TaskNodePo::getStandard).toList();
|
||||
if (CollectionUtils.isNotEmpty(standardList)) {
|
||||
List<Long> fileIdList = new ArrayList<>();
|
||||
standardList = standardList.stream().filter(StringUtils::isNotBlank).toList();
|
||||
if (CollectionUtils.isNotEmpty(standardList)) {
|
||||
for (String standard : standardList) {
|
||||
if (standard.contains(";")) {
|
||||
// 4883,4556;
|
||||
List<String> fileDirIdList = Arrays.stream(standard.split(";")).toList();
|
||||
for (String fileDirId : fileDirIdList) {
|
||||
if (!isConvertibleToLong(fileDirId.split(",")[1])) {
|
||||
continue;
|
||||
}
|
||||
fileIdList.add(Long.valueOf(fileDirId.split(",")[1]));
|
||||
}
|
||||
}else {
|
||||
List<String> normalFileIdList = Arrays.stream(standard.split(",")).toList().stream().filter(ProjectServiceImpl::isConvertibleToLong).toList();
|
||||
if (CollectionUtils.isEmpty(normalFileIdList)) {
|
||||
continue;
|
||||
}
|
||||
fileIdList.addAll(normalFileIdList.stream().map(Long::valueOf).toList());
|
||||
}
|
||||
}
|
||||
QueryFileReq queryFileReq = new QueryFileReq();
|
||||
queryFileReq.setFileIdList(fileIdList);
|
||||
SdmResponse<List<FileMetadataInfoResp>> listSdmResponse = dataClientFeignClient.queryFileListByIdList(queryFileReq);
|
||||
if (listSdmResponse.isSuccess()) {
|
||||
List<FileMetadataInfoResp> dataList = listSdmResponse.getData();
|
||||
if (CollectionUtils.isNotEmpty(dataList)) {
|
||||
dataList = dataList.stream().filter(data -> data.getDataType() == DataTypeEnum.FILE.getValue()).toList();
|
||||
if (CollectionUtils.isNotEmpty(dataList)) {
|
||||
dataMap = dataList.stream().collect(Collectors.toMap(FileMetadataInfoResp::getId, FileMetadataInfoResp::getOriginalName));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
taskExtraMap = Optional.ofNullable(taskMapper.getTaskExtraList(
|
||||
taskTreeTaskList.stream().map(TaskNodePo::getUuid).toList()
|
||||
)).orElse(Collections.emptyList()).stream().collect(Collectors.groupingBy(TaskNodeExtraPo::getTaskId));
|
||||
if (CollectionUtils.isNotEmpty(taskTreePerformanceList)) {
|
||||
performanceExtraList = performanceExtraService.lambdaQuery().in(SimulationPerformanceExtra::getPerformanceId,
|
||||
taskTreePerformanceList.stream().map(PerformanceNodePo::getUuid).toList()).list();
|
||||
}
|
||||
nodeExtraList = nodeMapper.getNodeExtraListByNodeIdList(realTopProjectNodeList.stream().map(ProjectNodePo::getUuid).toList());
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
for (ProjectNodePo projectNodePo : realTopProjectNodeList) {
|
||||
generateTaskTree(projectNodePo,addedIdList,currentAddedIdList);
|
||||
generateTaskTree(projectNodePo,addedIdList,currentAddedIdList,queryTaskFlag,taskMemberMap,cidUserMap,
|
||||
dataMap,taskExtraMap,performanceExtraList,nodeExtraList);
|
||||
addedIdList.clear();
|
||||
}
|
||||
// 汇总任务进度、仿真负责人、执行人
|
||||
@@ -658,7 +738,8 @@ public class ProjectServiceImpl extends BaseService implements IProjectService {
|
||||
}
|
||||
}
|
||||
|
||||
private void generateTaskTree(ProjectNodePo projectNodePo,List<String> addedIdList,List<String> currentAddedIdList) {
|
||||
private void generateTaskTree(ProjectNodePo projectNodePo,List<String> addedIdList,List<String> currentAddedIdList,Integer queryTaskFlag,Map<String,List<SimulationTaskMember>> taskMemberMap,Map<Long,CIDUserResp> cidUserMap,Map<Long,String> dataMap,Map<String,List<TaskNodeExtraPo>> taskExtraMap,
|
||||
List<SimulationPerformanceExtra> performanceExtraList,List<SpdmNodeExtraVo> nodeExtraList) {
|
||||
currentAddedIdList.add(projectNodePo.getUuid());
|
||||
String currentNodeType = projectNodePo.getNodeType();
|
||||
String currentTag = taskTreeNodeTypeTagMap.get(currentNodeType);
|
||||
@@ -702,6 +783,7 @@ public class ProjectServiceImpl extends BaseService implements IProjectService {
|
||||
String realTagId = realTagObj.getValue();
|
||||
// 查询当前节点下任务
|
||||
List<TaskNodePo> currentNodeAssociatedTaskList = new ArrayList<>();
|
||||
if (queryTaskFlag != 1) {
|
||||
int currentNodeDepth = getCurrentNodeDepth(projectNodePo);
|
||||
if (CollectionUtils.isNotEmpty(taskTreeTaskList)) {
|
||||
currentNodeAssociatedTaskList = taskTreeTaskList.stream().filter(node -> {
|
||||
@@ -718,53 +800,6 @@ public class ProjectServiceImpl extends BaseService implements IProjectService {
|
||||
}).collect(Collectors.toList());
|
||||
|
||||
if (CollectionUtils.isNotEmpty(currentNodeAssociatedTaskList)) {
|
||||
// 转换执行规范的文件id为文件名称
|
||||
List<String> standardList = currentNodeAssociatedTaskList.stream().map(TaskNodePo::getStandard).toList();
|
||||
Map<Long, String> dataMap = Map.of();
|
||||
if (CollectionUtils.isNotEmpty(standardList)) {
|
||||
List<Long> fileIdList = new ArrayList<>();
|
||||
standardList = standardList.stream().filter(StringUtils::isNotBlank).toList();
|
||||
if (CollectionUtils.isNotEmpty(standardList)) {
|
||||
for (String standard : standardList) {
|
||||
if (standard.contains(";")) {
|
||||
// 4883,4556;
|
||||
List<String> fileDirIdList = Arrays.stream(standard.split(";")).toList();
|
||||
for (String fileDirId : fileDirIdList) {
|
||||
if (!isConvertibleToLong(fileDirId.split(",")[1])) {
|
||||
continue;
|
||||
}
|
||||
fileIdList.add(Long.valueOf(fileDirId.split(",")[1]));
|
||||
}
|
||||
}else {
|
||||
List<String> normalFileIdList = Arrays.stream(standard.split(",")).toList().stream().filter(ProjectServiceImpl::isConvertibleToLong).toList();
|
||||
if (CollectionUtils.isEmpty(normalFileIdList)) {
|
||||
continue;
|
||||
}
|
||||
fileIdList.addAll(normalFileIdList.stream().map(Long::valueOf).toList());
|
||||
}
|
||||
}
|
||||
QueryFileReq queryFileReq = new QueryFileReq();
|
||||
queryFileReq.setFileIdList(fileIdList);
|
||||
SdmResponse<List<FileMetadataInfoResp>> listSdmResponse = dataClientFeignClient.queryFileListByIdList(queryFileReq);
|
||||
if (listSdmResponse.isSuccess()) {
|
||||
List<FileMetadataInfoResp> dataList = listSdmResponse.getData();
|
||||
if (CollectionUtils.isNotEmpty(dataList)) {
|
||||
dataList = dataList.stream().filter(data -> data.getDataType() == DataTypeEnum.FILE.getValue()).toList();
|
||||
if (CollectionUtils.isNotEmpty(dataList)) {
|
||||
dataMap = dataList.stream().collect(Collectors.toMap(FileMetadataInfoResp::getId, FileMetadataInfoResp::getOriginalName));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// 查询当前任务的所有拓展属性
|
||||
Map<String, List<TaskNodeExtraPo>> taskExtraMap = Optional.ofNullable(
|
||||
taskMapper.getTaskExtraList(
|
||||
currentNodeAssociatedTaskList.stream()
|
||||
.map(TaskNodePo::getUuid)
|
||||
.toList()
|
||||
)
|
||||
).orElse(Collections.emptyList()).stream().collect(Collectors.groupingBy(TaskNodeExtraPo::getTaskId));
|
||||
for (TaskNodePo taskNodePo : currentNodeAssociatedTaskList) {
|
||||
List<Long> fileIdList = new ArrayList<>();
|
||||
List<String> fileNameList = new ArrayList<>();
|
||||
@@ -826,8 +861,6 @@ public class ProjectServiceImpl extends BaseService implements IProjectService {
|
||||
List<PerformanceNodePo> currentTaskAssociatedPerformanceList = taskTreePerformanceList.stream().filter(performance -> ObjectUtils.isNotEmpty(taskMap.get(performance.getTaskId())) && performance.getRunId() == null).toList();
|
||||
if (CollectionUtils.isNotEmpty(currentTaskAssociatedPerformanceList)) {
|
||||
// 设置拓展属性
|
||||
List<String> performanceIdList = currentTaskAssociatedPerformanceList.stream().map(PerformanceNodePo::getUuid).toList();
|
||||
List<SimulationPerformanceExtra> performanceExtraList = performanceExtraService.lambdaQuery().in(SimulationPerformanceExtra::getPerformanceId, performanceIdList).list();
|
||||
Map<String, List<SimulationPerformanceExtra>> performanceExtraMap = new HashMap<>();
|
||||
if (CollectionUtils.isNotEmpty(performanceExtraList)) {
|
||||
performanceExtraMap = performanceExtraList.stream().collect(Collectors.groupingBy(SimulationPerformanceExtra::getPerformanceId));
|
||||
@@ -850,7 +883,7 @@ public class ProjectServiceImpl extends BaseService implements IProjectService {
|
||||
}
|
||||
// 查询当前任务的负责人和执行人
|
||||
for (TaskNodePo taskNodePo : currentNodeAssociatedTaskList) {
|
||||
List<SimulationTaskMember> memberList = simulationTaskMemberService.lambdaQuery().eq(SimulationTaskMember::getTaskId, taskNodePo.getUuid()).list();
|
||||
List<SimulationTaskMember> memberList = taskMemberMap.get(taskNodePo.getUuid());
|
||||
if (CollectionUtils.isNotEmpty(memberList)) {
|
||||
List<Long> eUserIdList = memberList.stream().filter(member -> MemberTypeEnum.EXECUTOR.getCode().equals(member.getType())).map(SimulationTaskMember::getUserId).distinct().toList();
|
||||
List<Long> pUserIdList = memberList.stream().filter(member -> MemberTypeEnum.PRINCIPAL.getCode().equals(member.getType())).map(SimulationTaskMember::getUserId).distinct().toList();
|
||||
@@ -858,12 +891,51 @@ public class ProjectServiceImpl extends BaseService implements IProjectService {
|
||||
List<Long> attionUserIdList = memberList.stream().filter(member -> MemberTypeEnum.ATTENTION.getCode().equals(member.getType())).map(SimulationTaskMember::getUserId).distinct().toList();
|
||||
|
||||
if (CollectionUtils.isNotEmpty(eUserIdList)) {
|
||||
SdmResponse<List<CIDUserResp>> cidUserResp= sysUserFeignClient.listUserByIds(UserQueryReq.builder().userIds(eUserIdList).build());
|
||||
taskNodePo.setEMemberList(cidUserResp.getData());
|
||||
List<CIDUserResp> eMemberList = new ArrayList<>();
|
||||
for (Long eUserId : eUserIdList) {
|
||||
CIDUserResp cidUserResp = cidUserMap.get(eUserId);
|
||||
if (ObjectUtils.isEmpty(cidUserResp)) {
|
||||
continue;
|
||||
}
|
||||
eMemberList.add(cidUserResp);
|
||||
}
|
||||
taskNodePo.setEMemberList(eMemberList);
|
||||
if (CollectionUtils.isNotEmpty(taskNodePo.getEMemberList())) {
|
||||
taskNodePo.setEMembers(taskNodePo.getEMemberList().stream().map(CIDUserResp::getNickname).collect(Collectors.joining(",")));
|
||||
}
|
||||
}
|
||||
|
||||
if (CollectionUtils.isNotEmpty(pUserIdList)) {
|
||||
List<CIDUserResp> pMemberList = new ArrayList<>();
|
||||
for (Long pUserId : pUserIdList) {
|
||||
CIDUserResp cidUserResp = cidUserMap.get(pUserId);
|
||||
if (ObjectUtils.isEmpty(cidUserResp)) {
|
||||
continue;
|
||||
}
|
||||
pMemberList.add(cidUserResp);
|
||||
}
|
||||
taskNodePo.setPMemberList(pMemberList);
|
||||
if (CollectionUtils.isNotEmpty(taskNodePo.getPMemberList())) {
|
||||
taskNodePo.setPMembers(taskNodePo.getPMemberList().stream().map(CIDUserResp::getNickname).collect(Collectors.joining(",")));
|
||||
}
|
||||
}
|
||||
|
||||
if (CollectionUtils.isNotEmpty(attionUserIdList)) {
|
||||
List<CIDUserResp> aMemberList = new ArrayList<>();
|
||||
for (Long aUserId : attionUserIdList) {
|
||||
CIDUserResp cidUserResp = cidUserMap.get(aUserId);
|
||||
if (ObjectUtils.isEmpty(cidUserResp)) {
|
||||
continue;
|
||||
}
|
||||
aMemberList.add(cidUserResp);
|
||||
}
|
||||
taskNodePo.setPayAttentionMemberList(aMemberList);
|
||||
if (CollectionUtils.isNotEmpty(taskNodePo.getPayAttentionMemberList())) {
|
||||
taskNodePo.setAttionMembers(taskNodePo.getPayAttentionMemberList().stream().map(CIDUserResp::getNickname).collect(Collectors.joining(",")));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (CollectionUtils.isNotEmpty(pUserIdList)) {
|
||||
SdmResponse<List<CIDUserResp>> cidUserResp= sysUserFeignClient.listUserByIds(UserQueryReq.builder().userIds(pUserIdList).build());
|
||||
taskNodePo.setPMemberList(cidUserResp.getData());
|
||||
@@ -884,6 +956,8 @@ public class ProjectServiceImpl extends BaseService implements IProjectService {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 查询子节点,可能是同类型节点也可能是不同类型节点
|
||||
// 先查同类型节点:当前标签下,包含currentNodeTagId且深度+1
|
||||
int depth = getCurrentNodeDepth(projectNodePo);
|
||||
@@ -905,7 +979,8 @@ public class ProjectServiceImpl extends BaseService implements IProjectService {
|
||||
if (CollectionUtils.isNotEmpty(sameTypeNodeList)) {
|
||||
// 递归
|
||||
for (ProjectNodePo nodePo : sameTypeNodeList) {
|
||||
generateTaskTree(nodePo,addedIdList,currentAddedIdList);
|
||||
generateTaskTree(nodePo,addedIdList,currentAddedIdList,queryTaskFlag,taskMemberMap,cidUserMap,
|
||||
dataMap,taskExtraMap,performanceExtraList,nodeExtraList);
|
||||
}
|
||||
if (CollectionUtils.isNotEmpty(sameTypeNodeList)) {
|
||||
addedIdList.addAll(sameTypeNodeList.stream().map(ProjectNodePo::getUuid).toList());
|
||||
@@ -933,7 +1008,8 @@ public class ProjectServiceImpl extends BaseService implements IProjectService {
|
||||
if (CollectionUtils.isNotEmpty(childrenTypeNodeList)) {
|
||||
// 递归
|
||||
for (ProjectNodePo nodePo : childrenTypeNodeList) {
|
||||
generateTaskTree(nodePo,addedIdList,currentAddedIdList);
|
||||
generateTaskTree(nodePo,addedIdList,currentAddedIdList,queryTaskFlag,taskMemberMap,cidUserMap,
|
||||
dataMap,taskExtraMap,performanceExtraList,nodeExtraList);
|
||||
}
|
||||
addedIdList.addAll(childrenTypeNodeList.stream().map(ProjectNodePo::getUuid).toList());
|
||||
for (ProjectNodePo nodePo : childrenTypeNodeList) {
|
||||
@@ -965,7 +1041,8 @@ public class ProjectServiceImpl extends BaseService implements IProjectService {
|
||||
if (CollectionUtils.isNotEmpty(otherChildrenNodeList)) {
|
||||
// 递归
|
||||
for (ProjectNodePo nodePo : otherChildrenNodeList) {
|
||||
generateTaskTree(nodePo,addedIdList,currentAddedIdList);
|
||||
generateTaskTree(nodePo,addedIdList,currentAddedIdList,queryTaskFlag,taskMemberMap,cidUserMap,
|
||||
dataMap,taskExtraMap,performanceExtraList,nodeExtraList);
|
||||
}
|
||||
addedIdList.addAll(otherChildrenNodeList.stream().map(ProjectNodePo::getUuid).toList());
|
||||
for (ProjectNodePo nodePo : otherChildrenNodeList) {
|
||||
@@ -991,7 +1068,9 @@ public class ProjectServiceImpl extends BaseService implements IProjectService {
|
||||
}
|
||||
projectNodePo.setChildren(children);
|
||||
// 设置拓展属性
|
||||
projectNodePo.setExtras(nodeMapper.getNodeExtraListByNodeIdList(Collections.singletonList(projectNodePo.getUuid())));
|
||||
if (queryTaskFlag != 1) {
|
||||
projectNodePo.setExtras(nodeExtraList.stream().filter(nodeExtra -> projectNodePo.getUuid().equals(nodeExtra.getNodeId())).toList());
|
||||
}
|
||||
}
|
||||
|
||||
private TaskNodeTag getRealTagId(ProjectNodePo projectNodePo) {
|
||||
|
||||
Reference in New Issue
Block a user