diff --git a/common/src/main/java/com/sdm/common/entity/req/data/QueryDirReq.java b/common/src/main/java/com/sdm/common/entity/req/data/QueryDirReq.java index dcac6ea1..c1ca4843 100644 --- a/common/src/main/java/com/sdm/common/entity/req/data/QueryDirReq.java +++ b/common/src/main/java/com/sdm/common/entity/req/data/QueryDirReq.java @@ -47,4 +47,10 @@ public class QueryDirReq extends BaseReq { @Schema(description = "项目id") String projectId; + /** + * 文件夹id + */ + @Schema(description = "文件夹id") + private Long dirId; + } \ No newline at end of file diff --git a/common/src/main/java/com/sdm/common/entity/req/task/TaskExportExcelParam.java b/common/src/main/java/com/sdm/common/entity/req/task/TaskExportExcelParam.java index 40ca9243..1c32f648 100644 --- a/common/src/main/java/com/sdm/common/entity/req/task/TaskExportExcelParam.java +++ b/common/src/main/java/com/sdm/common/entity/req/task/TaskExportExcelParam.java @@ -54,4 +54,6 @@ public class TaskExportExcelParam { * 需求id */ private String demandId; + + private List filterDiscipline; } diff --git a/common/src/main/java/com/sdm/common/entity/req/task/TaskTreeExportExcelParam.java b/common/src/main/java/com/sdm/common/entity/req/task/TaskTreeExportExcelParam.java index 8cf69b98..3c520e6c 100644 --- a/common/src/main/java/com/sdm/common/entity/req/task/TaskTreeExportExcelParam.java +++ b/common/src/main/java/com/sdm/common/entity/req/task/TaskTreeExportExcelParam.java @@ -34,4 +34,6 @@ public class TaskTreeExportExcelParam { */ private Integer endIndex; + private List filterDiscipline; + } diff --git a/data/src/main/java/com/sdm/data/service/impl/MinioFileIDataFileServiceImpl.java b/data/src/main/java/com/sdm/data/service/impl/MinioFileIDataFileServiceImpl.java index ee92c0f5..66662c51 100644 --- a/data/src/main/java/com/sdm/data/service/impl/MinioFileIDataFileServiceImpl.java +++ b/data/src/main/java/com/sdm/data/service/impl/MinioFileIDataFileServiceImpl.java @@ -845,6 +845,12 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService { return SdmResponse.success(); } parentId = nodeMetadataInfo.getId(); + } else if (ObjectUtils.isNotEmpty(req.getDirId())) { + FileMetadataInfo nodeMetadataInfo = fileMetadataInfoService.getById(req.getDirId()); + if (nodeMetadataInfo == null) { + return SdmResponse.success(); + } + parentId = nodeMetadataInfo.getId(); } else { return SdmResponse.success(); } diff --git a/project/src/main/java/com/sdm/project/controller/SimulationDemandController.java b/project/src/main/java/com/sdm/project/controller/SimulationDemandController.java index 5b232187..37f6f38c 100644 --- a/project/src/main/java/com/sdm/project/controller/SimulationDemandController.java +++ b/project/src/main/java/com/sdm/project/controller/SimulationDemandController.java @@ -177,4 +177,17 @@ public class SimulationDemandController { return demandService.deleteDemandNoPermission(req); } + /** + * 需求列表(无权限) + * + * @param req + * @return + */ + @SysLog("查询需求列表") + @GetMapping("/listNoPermission") + @Operation(summary = "需求列表(我发起的、我确认的)", description = "需求列表(我发起的、我确认的)") + public SdmResponse listNoPermission(@Validated SpdmDemandListReq req) { + return demandService.listNoPermission(req); + } + } diff --git a/project/src/main/java/com/sdm/project/dao/SimulationDemandMapper.java b/project/src/main/java/com/sdm/project/dao/SimulationDemandMapper.java index 324a6c2a..aee6def8 100644 --- a/project/src/main/java/com/sdm/project/dao/SimulationDemandMapper.java +++ b/project/src/main/java/com/sdm/project/dao/SimulationDemandMapper.java @@ -28,6 +28,8 @@ public interface SimulationDemandMapper extends BaseMapper { List getDemandList(@Param("tenantId") Long tenantId,@Param("req") SpdmDemandListReq req); + List getDemandListNoPermission(@Param("req") SpdmDemandListReq req); + List getMemberList(@Param("demandIdList") List demandIdList, @Param("memberType") Integer memberType); SpdmDemandVo getDemandByName(@Param("tenantId") Long tenantId,@Param("demandName") String demandName); diff --git a/project/src/main/java/com/sdm/project/service/IDemandService.java b/project/src/main/java/com/sdm/project/service/IDemandService.java index e074b4c2..16459390 100644 --- a/project/src/main/java/com/sdm/project/service/IDemandService.java +++ b/project/src/main/java/com/sdm/project/service/IDemandService.java @@ -53,4 +53,5 @@ public interface IDemandService { SdmResponse editDemandNoPermission(SpdmEditDemandReq req); + SdmResponse listNoPermission(SpdmDemandListReq req); } diff --git a/project/src/main/java/com/sdm/project/service/impl/DemandServiceImpl.java b/project/src/main/java/com/sdm/project/service/impl/DemandServiceImpl.java index 0dde96ee..6d4499b0 100644 --- a/project/src/main/java/com/sdm/project/service/impl/DemandServiceImpl.java +++ b/project/src/main/java/com/sdm/project/service/impl/DemandServiceImpl.java @@ -15,6 +15,7 @@ import com.sdm.common.entity.req.system.UserQueryReq; import com.sdm.common.entity.req.task.DemandExportExcelFormat; import com.sdm.common.entity.req.task.DemandExportExcelParam; import com.sdm.common.entity.resp.PageDataResp; +import com.sdm.common.entity.resp.data.BatchCreateNormalDirResp; import com.sdm.common.entity.resp.data.FileMetadataInfoResp; import com.sdm.common.entity.resp.project.SpdmTaskVo; import com.sdm.common.entity.resp.system.CIDUserResp; @@ -214,11 +215,47 @@ public class DemandServiceImpl extends BaseService implements IDemandService { } List childrenMetadataInfoList = listSdmResponse.getData(); FileMetadataInfoResp demandAttachFileMetadataInfoResp = childrenMetadataInfoList.stream().filter(metadataInfo -> AttachFileTypeEnum.DEMAND_FILE.getValue().equals(metadataInfo.getOriginalName())).findFirst().orElse(null); + Long demandAttachFileMetadataInfoId; if (ObjectUtils.isEmpty(demandAttachFileMetadataInfoResp)) { - log.error("未查询到需求附件文件夹,当前项目下的子文件夹为:{}",childrenMetadataInfoList); - return SdmResponse.failed("新增需求失败!"); + log.info("未查询到需求附件文件夹,当前项目下的子文件夹为:{}",childrenMetadataInfoList); + // 项目层级文件夹和需求文件夹中,新增一层【需求附件】文件夹 + List demandAttachFolderItemReqList = new ArrayList<>(); + BatchCreateNormalDirReq demandAttachBatchCreateNormalDirReq = new BatchCreateNormalDirReq(); + demandAttachBatchCreateNormalDirReq.setParentUUId(projectNodeId); + FolderItemReq demandAttachFolderItemReq = new FolderItemReq(); + demandAttachFolderItemReq.setFolderName(AttachFileTypeEnum.DEMAND_FILE.getValue()); + demandAttachFolderItemReq.setFolderUuid(RandomUtil.generateString(32)); + demandAttachFolderItemReqList.add(demandAttachFolderItemReq); + demandAttachBatchCreateNormalDirReq.setFolderItems(demandAttachFolderItemReqList); + log.info("创建需求附件文件夹请求参数:{}", demandAttachBatchCreateNormalDirReq); + BatchCreateNormalDirResp batchCreateNormalDirResp; + try { + SdmResponse response = dataFeignClient.batchCreateNormalDirs(demandAttachBatchCreateNormalDirReq); + log.info("创建需求附件文件夹响应:{}", response); + if (!response.isSuccess() || ObjectUtils.isEmpty(response.getData())) { + log.error("调用创建需求附件文件夹接口失败,原因为:{}", response.getMessage()); + return SdmResponse.failed("创建需求附件文件夹失败:,原因为:" + response.getMessage()); + } + batchCreateNormalDirResp = response.getData(); + } catch (Exception e) { + log.error("调用创建需求附件文件夹接口失败", e); + return SdmResponse.failed("创建需求附件文件夹失败:" + e.getMessage()); + } + + if (ObjectUtils.isEmpty(batchCreateNormalDirResp)) { + log.error("batchCreateNormalDirResp为空"); + return SdmResponse.failed("创建需求附件文件夹失败"); + } + List successList = batchCreateNormalDirResp.getSuccessList(); + if (CollectionUtils.isEmpty(successList)) { + log.error("successList为空"); + return SdmResponse.failed("创建需求附件文件夹失败"); + } + // 需求附件文件夹的元数据主键id + demandAttachFileMetadataInfoId = successList.get(0).getId(); + }else { + demandAttachFileMetadataInfoId = demandAttachFileMetadataInfoResp.getId(); } - Long demandAttachFileMetadataInfoId = demandAttachFileMetadataInfoResp.getId(); batchCreateNormalDirReq.setParentId(demandAttachFileMetadataInfoId); FolderItemReq folderItemReq = new FolderItemReq(); folderItemReq.setFolderName(req.getDemandName()); @@ -1234,8 +1271,66 @@ public class DemandServiceImpl extends BaseService implements IDemandService { } } + + // 项目层级文件夹和需求文件夹中,新增一层【需求附件】文件夹 + String projectNodeId = req.getProjectId(); BatchCreateNormalDirReq batchCreateNormalDirReq = new BatchCreateNormalDirReq(); - batchCreateNormalDirReq.setParentUUId(req.getProjectId()); + SdmResponse fileMetadataInfoResp = dataFeignClient.queryFileMetadataInfo(projectNodeId, NodeTypeEnum.PROJECT.getValue(), 0L); + if (fileMetadataInfoResp.getData() == null) { + log.error("fileMetadataInfoResp为空,projectNodeId为:{}",projectNodeId); + return SdmResponse.failed("新增需求失败!"); + } + // 查询需求附件的uuid,元数据表中【parentId是project的元数据主键id且originalName为:需求附件】 + FileMetadataInfoResp projectMetadataInfo = fileMetadataInfoResp.getData(); + SdmResponse> listSdmResponse = dataFeignClient.listDir(DirTypeEnum.PROJECT_NODE_DIR.getValue(), projectMetadataInfo.getId()); + if (!listSdmResponse.isSuccess() || CollectionUtils.isEmpty(listSdmResponse.getData())) { + log.error("listSdmResponse为空,project的元数据主键id为:{}",projectMetadataInfo.getId()); + return SdmResponse.failed("新增需求失败!"); + } + List childrenMetadataInfoList = listSdmResponse.getData(); + FileMetadataInfoResp demandAttachFileMetadataInfoResp = childrenMetadataInfoList.stream().filter(metadataInfo -> AttachFileTypeEnum.DEMAND_FILE.getValue().equals(metadataInfo.getOriginalName())).findFirst().orElse(null); + Long demandAttachFileMetadataInfoId; + if (ObjectUtils.isEmpty(demandAttachFileMetadataInfoResp)) { + log.info("未查询到需求附件文件夹,当前项目下的子文件夹为:{}",childrenMetadataInfoList); + // 项目层级文件夹和需求文件夹中,新增一层【需求附件】文件夹 + List demandAttachFolderItemReqList = new ArrayList<>(); + BatchCreateNormalDirReq demandAttachBatchCreateNormalDirReq = new BatchCreateNormalDirReq(); + demandAttachBatchCreateNormalDirReq.setParentUUId(projectNodeId); + FolderItemReq demandAttachFolderItemReq = new FolderItemReq(); + demandAttachFolderItemReq.setFolderName(AttachFileTypeEnum.DEMAND_FILE.getValue()); + demandAttachFolderItemReq.setFolderUuid(RandomUtil.generateString(32)); + demandAttachFolderItemReqList.add(demandAttachFolderItemReq); + demandAttachBatchCreateNormalDirReq.setFolderItems(demandAttachFolderItemReqList); + log.info("创建需求附件文件夹请求参数:{}", demandAttachBatchCreateNormalDirReq); + BatchCreateNormalDirResp batchCreateNormalDirResp; + try { + SdmResponse response = dataFeignClient.batchCreateNormalDirs(demandAttachBatchCreateNormalDirReq); + log.info("创建需求附件文件夹响应:{}", response); + if (!response.isSuccess() || ObjectUtils.isEmpty(response.getData())) { + log.error("调用创建需求附件文件夹接口失败,原因为:{}", response.getMessage()); + return SdmResponse.failed("创建需求附件文件夹失败:,原因为:" + response.getMessage()); + } + batchCreateNormalDirResp = response.getData(); + } catch (Exception e) { + log.error("调用创建需求附件文件夹接口失败", e); + return SdmResponse.failed("创建需求附件文件夹失败:" + e.getMessage()); + } + + if (ObjectUtils.isEmpty(batchCreateNormalDirResp)) { + log.error("batchCreateNormalDirResp为空"); + return SdmResponse.failed("创建需求附件文件夹失败"); + } + List successList = batchCreateNormalDirResp.getSuccessList(); + if (CollectionUtils.isEmpty(successList)) { + log.error("successList为空"); + return SdmResponse.failed("创建需求附件文件夹失败"); + } + // 需求附件文件夹的元数据主键id + demandAttachFileMetadataInfoId = successList.get(0).getId(); + }else { + demandAttachFileMetadataInfoId = demandAttachFileMetadataInfoResp.getId(); + } + batchCreateNormalDirReq.setParentId(demandAttachFileMetadataInfoId); FolderItemReq folderItemReq = new FolderItemReq(); folderItemReq.setFolderName(req.getDemandName()); folderItemReq.setFolderUuid(req.getUuid()); @@ -1605,4 +1700,269 @@ public class DemandServiceImpl extends BaseService implements IDemandService { return SdmResponse.success(); } + @Override + public SdmResponse listNoPermission(SpdmDemandListReq req) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("data", new ArrayList<>()); + List demandList = mapper.getDemandListNoPermission(req); + if (CollectionUtils.isEmpty(demandList)) { + log.error("未查询到需求"); + return SdmResponse.success(jsonObject); + } + // 0:我发起的 1:我确认的 + Integer type = req.getType(); + if (type != 0 && type != 1) { + log.error("type必须为0或1"); + return SdmResponse.success(jsonObject); + } + List demandMemberVoList = mapper.getMemberList(demandList.stream().map(SpdmDemandVo::getUuid).toList(), null); + List taskList = taskMapper.getTaskListByDemandIdList(demandList.stream().map(SpdmDemandVo::getUuid).toList()); + Map> taskMap = Map.of(); + if (CollectionUtils.isNotEmpty(taskList)) { + taskMap = taskList.stream().collect(Collectors.groupingBy(SpdmTaskVo::getDemandId)); + } + // 需求的状态和进度需要根据任务来确定 + if (StringUtils.isNotBlank(req.getAchieveStatus()) || StringUtils.isNotBlank(req.getDemandStatus())) { + if (StringUtils.isNotBlank(req.getAchieveStatus())) { + String achieveStatus = req.getAchieveStatus(); + List achieveStatusList = Arrays.stream(achieveStatus.split(",")).toList(); + if (CollectionUtils.isEmpty(taskList)) { + demandList = demandList.stream().filter(firstDemand -> achieveStatusList.contains(firstDemand.getAchieveStatus())).toList(); + } else { + List eachTaskList; + String eachStatus; + List newDemandList = new ArrayList<>(); + for (SpdmDemandVo demand : demandList) { + eachTaskList = taskMap.get(demand.getUuid()); + if (CollectionUtils.isEmpty(eachTaskList)) { + log.info("当前需求:{}没有关联的任务", demand.getId()); + if (achieveStatusList.contains(demand.getAchieveStatus())) { + newDemandList.add(demand); + } + } else { + if (eachTaskList.stream().map(SpdmTaskVo::getAchieveStatus).toList().contains(TaskAchieveStatusEnum.UNQUALIFIED.getCode())) { + eachStatus = TaskAchieveStatusEnum.UNQUALIFIED.getCode(); + } else if (eachTaskList.stream().map(SpdmTaskVo::getAchieveStatus).toList().contains(TaskAchieveStatusEnum.NO_CALCULATE.getCode())) { + eachStatus = TaskAchieveStatusEnum.NO_CALCULATE.getCode(); + } else { + eachStatus = TaskAchieveStatusEnum.QUALIFIED.getCode(); + } + log.info("当前需求:{}的风险状态为:{}", demand.getId(), eachStatus); + if (!achieveStatusList.contains(eachStatus)) { + continue; + } + newDemandList.add(demand); + } + } + demandList = newDemandList; + } + } + + if (CollectionUtils.isEmpty(demandList)) { + log.error("demandList2为空"); + return SdmResponse.success(jsonObject); + } + + if (StringUtils.isNotBlank(req.getDemandStatus())) { + String demandStatus = req.getDemandStatus(); + List demandStatusList = Arrays.stream(demandStatus.split(",")).toList(); + if (CollectionUtils.isEmpty(taskList)) { + demandList = demandList.stream().filter(firstDemand -> demandStatusList.contains(firstDemand.getDemandStatus())).toList(); + } else { + List eachTaskList; + String eachStatus = ""; + List newDemandList = new ArrayList<>(); + for (SpdmDemandVo demand : demandList) { + eachTaskList = taskMap.get(demand.getUuid()); + if (CollectionUtils.isEmpty(eachTaskList)) { + log.info("当前需求:{}没有关联的任务", demand.getId()); + if (demandStatusList.contains(demand.getDemandStatus())) { + newDemandList.add(demand); + } + } else { + + +// 有进行中就是进行中, +// 没有进行中,有暂停就是暂停 +// 没有进行中和暂停,有延期就是延期 +// 全部已完成就已完成 +// 全部关闭就已关闭 +// 全部未开始就未开始 +// 全部驳回就驳回 +// 其他 进行中 + + List statusList = eachTaskList.stream().map(SpdmTaskVo::getExeStatus).toList(); + if (statusList.contains(TaskExeStatusEnum.IN_PROGRESS.getCode())) { + eachStatus = TaskExeStatusEnum.IN_PROGRESS.getCode(); + } else if (statusList.contains(TaskExeStatusEnum.PAUSED.getCode())) { + eachStatus = TaskExeStatusEnum.PAUSED.getCode(); + } else if (statusList.contains(TaskExeStatusEnum.POSTPONED.getCode())) { + eachStatus = TaskExeStatusEnum.POSTPONED.getCode(); + } else if (statusList.stream().allMatch(status -> TaskExeStatusEnum.COMPLETED.getCode().equals(status))) { + eachStatus = TaskExeStatusEnum.COMPLETED.getCode(); + } else if (statusList.stream().allMatch(status -> TaskExeStatusEnum.CLOSED.getCode().equals(status))) { + eachStatus = TaskExeStatusEnum.CLOSED.getCode(); + } else if (statusList.stream().allMatch(status -> TaskExeStatusEnum.NO_STARTED.getCode().equals(status))) { + eachStatus = TaskExeStatusEnum.NO_STARTED.getCode(); + } else if (statusList.stream().allMatch(status -> TaskExeStatusEnum.REJECTED.getCode().equals(status))) { + eachStatus = TaskExeStatusEnum.REJECTED.getCode(); + } else { + eachStatus = TaskExeStatusEnum.IN_PROGRESS.getCode(); + } + log.info("当前需求:{}的需求状态为:{}", demand.getId(), eachStatus); + if (!demandStatusList.contains(eachStatus)) { + continue; + } + newDemandList.add(demand); + } + } + demandList = newDemandList; + } + } + } + if (CollectionUtils.isEmpty(demandList)) { + log.error("demandList3为空"); + return SdmResponse.success(jsonObject); + } + + jsonObject.put("currentPage", req.getCurrent()); + jsonObject.put("pageSize", req.getSize()); + jsonObject.put("total", demandList.size()); + demandList = demandList.stream().skip((long) (req.getCurrent() - 1) * req.getSize()).limit(req.getSize()).toList(); + if (CollectionUtils.isEmpty(demandList)) { + log.error("demandList4为空"); + return SdmResponse.success(jsonObject); + } + List eachTaskList; + String eachAchieveStatus; + String eachExeStatus; + for (SpdmDemandVo demand : demandList) { + eachTaskList = taskMap.get(demand.getUuid()); + if (CollectionUtils.isEmpty(eachTaskList)) { + demand.setAchieveStatus("0"); + continue; + } + if (eachTaskList.stream().map(SpdmTaskVo::getAchieveStatus).toList().contains(TaskAchieveStatusEnum.UNQUALIFIED.getCode())) { + eachAchieveStatus = TaskAchieveStatusEnum.UNQUALIFIED.getCode(); + } else if (eachTaskList.stream().map(SpdmTaskVo::getAchieveStatus).toList().contains(TaskAchieveStatusEnum.NO_CALCULATE.getCode())) { + eachAchieveStatus = TaskAchieveStatusEnum.NO_CALCULATE.getCode(); + } else { + eachAchieveStatus = TaskAchieveStatusEnum.QUALIFIED.getCode(); + } + demand.setAchieveStatus(eachAchieveStatus); + + List statusList = eachTaskList.stream().map(SpdmTaskVo::getExeStatus).toList(); + if (statusList.contains(TaskExeStatusEnum.IN_PROGRESS.getCode())) { + eachExeStatus = TaskExeStatusEnum.IN_PROGRESS.getCode(); + } else if (statusList.contains(TaskExeStatusEnum.PAUSED.getCode())) { + eachExeStatus = TaskExeStatusEnum.PAUSED.getCode(); + } else if (statusList.contains(TaskExeStatusEnum.POSTPONED.getCode())) { + eachExeStatus = TaskExeStatusEnum.POSTPONED.getCode(); + } else if (statusList.stream().allMatch(status -> TaskExeStatusEnum.COMPLETED.getCode().equals(status))) { + eachExeStatus = TaskExeStatusEnum.COMPLETED.getCode(); + } else if (statusList.stream().allMatch(status -> TaskExeStatusEnum.CLOSED.getCode().equals(status))) { + eachExeStatus = TaskExeStatusEnum.CLOSED.getCode(); + } else if (statusList.stream().allMatch(status -> TaskExeStatusEnum.NO_STARTED.getCode().equals(status))) { + eachExeStatus = TaskExeStatusEnum.NO_STARTED.getCode(); + } else if (statusList.stream().allMatch(status -> TaskExeStatusEnum.REJECTED.getCode().equals(status))) { + eachExeStatus = TaskExeStatusEnum.REJECTED.getCode(); + } else { + eachExeStatus = TaskExeStatusEnum.IN_PROGRESS.getCode(); + } + demand.setDemandStatus(eachExeStatus); + } + Map> demandMemberMap = Map.of(); + if (CollectionUtils.isNotEmpty(demandMemberVoList)) { + demandMemberMap = demandMemberVoList.stream().collect(Collectors.groupingBy(SpdmDemandMemberVo::getDemandId)); + } + List eachDemandMemberList; + List nodeIdList = new ArrayList<>(); + List projectIdList = demandList.stream().map(SpdmDemandVo::getProjectId).toList(); + if (CollectionUtils.isNotEmpty(projectIdList)) { + nodeIdList.addAll(projectIdList); + } + List phaseIdList = demandList.stream().map(SpdmDemandVo::getPhaseId).toList(); + if (CollectionUtils.isNotEmpty(phaseIdList)) { + nodeIdList.addAll(phaseIdList); + } + Map> nodeMap = Map.of(); + if (CollectionUtils.isNotEmpty(nodeIdList)) { + List nodeList = nodeMapper.getNodeListByIds(nodeIdList); + if (CollectionUtils.isNotEmpty(nodeList)) { + nodeMap = nodeList.stream().collect(Collectors.groupingBy(SpdmNodeVo::getUuid)); + } + } + List userIdList = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(demandMemberVoList)) { + userIdList = demandMemberVoList.stream().map(SpdmDemandMemberVo::getUserId).toList(); + } + Map> userMap = Map.of(); + if (CollectionUtils.isNotEmpty(userIdList)) { + SdmResponse> cidUserResp = sysUserFeignClient.listUserByIds(UserQueryReq.builder().userIds(userIdList).build()); + List userList = cidUserResp.getData(); + if (CollectionUtils.isNotEmpty(userList)) { + userMap = userList.stream().collect(Collectors.groupingBy(CIDUserResp::getUserId)); + } + } + List demandIdList = demandList.stream().map(SpdmDemandVo::getUuid).toList(); + List demandExtraList = mapper.getDemandExtraList(demandIdList); + Map> demandExtraMap = Map.of(); + if (CollectionUtils.isNotEmpty(demandExtraList)) { + demandExtraMap = demandExtraList.stream().collect(Collectors.groupingBy(SpdmDemandExtraVo::getDemandId)); + } + for (SpdmDemandVo spdmDemandVo : demandList) { + spdmDemandVo.setExtras(demandExtraMap.get(spdmDemandVo.getUuid())); + eachTaskList = taskMap.get(spdmDemandVo.getUuid()); + spdmDemandVo.setProgress(CollectionUtils.isEmpty(eachTaskList) ? 0 : eachTaskList.stream().mapToInt(SpdmTaskVo::getProgress).sum() / eachTaskList.size()); + if (StringUtils.isNotBlank(spdmDemandVo.getProjectId())) { + spdmDemandVo.setProjectName(CollectionUtils.isNotEmpty(nodeMap.get(spdmDemandVo.getProjectId())) ? nodeMap.get(spdmDemandVo.getProjectId()).get(0).getNodeName() : ""); + } + if (StringUtils.isNotBlank(spdmDemandVo.getPhaseId())) { + spdmDemandVo.setPhaseName(CollectionUtils.isNotEmpty(nodeMap.get(spdmDemandVo.getPhaseId())) ? nodeMap.get(spdmDemandVo.getPhaseId()).get(0).getNodeName() : ""); + } + if (StringUtils.isNotBlank(spdmDemandVo.getMachineId())) { + spdmDemandVo.setMachineName(CollectionUtils.isNotEmpty(nodeMap.get(spdmDemandVo.getMachineId())) ? nodeMap.get(spdmDemandVo.getMachineId()).get(0).getNodeName() : ""); + } + if (StringUtils.isNotBlank(spdmDemandVo.getWorkspaceId())) { + spdmDemandVo.setWorkspaceName(CollectionUtils.isNotEmpty(nodeMap.get(spdmDemandVo.getWorkspaceId())) ? nodeMap.get(spdmDemandVo.getWorkspaceId()).get(0).getNodeName() : ""); + } + eachDemandMemberList = demandMemberMap.get(spdmDemandVo.getUuid()); + if (CollectionUtils.isEmpty(eachDemandMemberList)) { + continue; + } + List spdmPUserVoList = new ArrayList<>(); + for (Long userId : eachDemandMemberList.stream().filter(member -> MemberTypeEnum.PRINCIPAL.getCode().equals(member.getType())).map(SpdmDemandMemberVo::getUserId).toList()) { + if (ObjectUtils.isNotEmpty(userId) && CollectionUtils.isNotEmpty(userMap.get(userId))) { + spdmPUserVoList.addAll(userMap.get(userId)); + } + } + spdmDemandVo.setPMemberList(spdmPUserVoList); + List spdmEUserVoList = new ArrayList<>(); + for (Long userId : eachDemandMemberList.stream().filter(member -> MemberTypeEnum.EXECUTOR.getCode().equals(member.getType())).map(SpdmDemandMemberVo::getUserId).toList()) { + if (ObjectUtils.isNotEmpty(userId) && CollectionUtils.isNotEmpty(userMap.get(userId))) { + spdmEUserVoList.addAll(userMap.get(userId)); + } + } + spdmDemandVo.setEMemberList(spdmEUserVoList); + + List spdmTUserVoList = new ArrayList<>(); + for (Long userId : eachDemandMemberList.stream().filter(member -> MemberTypeEnum.THREED.getCode().equals(member.getType())).map(SpdmDemandMemberVo::getUserId).toList()) { + if (ObjectUtils.isNotEmpty(userId) && CollectionUtils.isNotEmpty(userMap.get(userId))) { + spdmTUserVoList.addAll(userMap.get(userId)); + } + } + spdmDemandVo.setTMemberList(spdmTUserVoList); + + List spdmAUserVoList = new ArrayList<>(); + for (Long userId : eachDemandMemberList.stream().filter(member -> MemberTypeEnum.ATTENTION.getCode().equals(member.getType())).map(SpdmDemandMemberVo::getUserId).toList()) { + if (ObjectUtils.isNotEmpty(userId) && CollectionUtils.isNotEmpty(userMap.get(userId))) { + spdmAUserVoList.addAll(userMap.get(userId)); + } + } + spdmDemandVo.setAMemberList(spdmAUserVoList); + } + jsonObject.put("data", demandList); + return SdmResponse.success(jsonObject); + } + } diff --git a/project/src/main/java/com/sdm/project/service/impl/LyricInternalServiceImpl.java b/project/src/main/java/com/sdm/project/service/impl/LyricInternalServiceImpl.java index 940229f9..235af199 100644 --- a/project/src/main/java/com/sdm/project/service/impl/LyricInternalServiceImpl.java +++ b/project/src/main/java/com/sdm/project/service/impl/LyricInternalServiceImpl.java @@ -12,6 +12,7 @@ import com.sdm.common.entity.enums.NodeTypeEnum; import com.sdm.common.entity.req.data.*; import com.sdm.common.entity.req.project.SpdmNodeListReq; import com.sdm.common.entity.req.system.UserQueryReq; +import com.sdm.common.entity.resp.data.BatchCreateNormalDirResp; import com.sdm.common.entity.resp.data.FileMetadataInfoResp; import com.sdm.common.entity.resp.system.CIDUserResp; import com.sdm.common.feign.impl.data.DataClientFeignClientImpl; @@ -638,11 +639,47 @@ public class LyricInternalServiceImpl implements ILyricInternalService { } List childrenMetadataInfoList = listSdmResponse.getData(); FileMetadataInfoResp demandAttachFileMetadataInfoResp = childrenMetadataInfoList.stream().filter(metadataInfo -> AttachFileTypeEnum.DEMAND_FILE.getValue().equals(metadataInfo.getOriginalName())).findFirst().orElse(null); + Long demandAttachFileMetadataInfoId; if (ObjectUtils.isEmpty(demandAttachFileMetadataInfoResp)) { - log.error("未查询到需求附件文件夹,当前项目下的子文件夹为:{}",childrenMetadataInfoList); - return; + log.info("未查询到需求附件文件夹,当前项目下的子文件夹为:{}",childrenMetadataInfoList); + // 项目层级文件夹和需求文件夹中,新增一层【需求附件】文件夹 + List demandAttachFolderItemReqList = new ArrayList<>(); + BatchCreateNormalDirReq demandAttachBatchCreateNormalDirReq = new BatchCreateNormalDirReq(); + demandAttachBatchCreateNormalDirReq.setParentUUId(projectNodeId); + FolderItemReq demandAttachFolderItemReq = new FolderItemReq(); + demandAttachFolderItemReq.setFolderName(AttachFileTypeEnum.DEMAND_FILE.getValue()); + demandAttachFolderItemReq.setFolderUuid(RandomUtil.generateString(32)); + demandAttachFolderItemReqList.add(demandAttachFolderItemReq); + demandAttachBatchCreateNormalDirReq.setFolderItems(demandAttachFolderItemReqList); + log.info("创建需求附件文件夹请求参数:{}", demandAttachBatchCreateNormalDirReq); + BatchCreateNormalDirResp batchCreateNormalDirResp; + try { + SdmResponse response = dataFeignClient.batchCreateNormalDirs(demandAttachBatchCreateNormalDirReq); + log.info("创建需求附件文件夹响应:{}", response); + if (!response.isSuccess() || ObjectUtils.isEmpty(response.getData())) { + log.error("调用创建需求附件文件夹接口失败,原因为:{}", response.getMessage()); + return; + } + batchCreateNormalDirResp = response.getData(); + } catch (Exception e) { + log.error("调用创建需求附件文件夹接口失败", e); + return; + } + + if (ObjectUtils.isEmpty(batchCreateNormalDirResp)) { + log.error("batchCreateNormalDirResp为空"); + return; + } + List successList = batchCreateNormalDirResp.getSuccessList(); + if (CollectionUtils.isEmpty(successList)) { + log.error("successList为空"); + return; + } + // 需求附件文件夹的元数据主键id + demandAttachFileMetadataInfoId = successList.get(0).getId(); + }else { + demandAttachFileMetadataInfoId = demandAttachFileMetadataInfoResp.getId(); } - Long demandAttachFileMetadataInfoId = demandAttachFileMetadataInfoResp.getId(); for (BatchCreateDirItem batchCreateDirItem : createDirItemList) { BatchCreateNormalDirReq batchCreateNormalDirReq = new BatchCreateNormalDirReq(); // 2026-02-03 这里要挂在【需求附件】文件夹下了 diff --git a/project/src/main/resources/mapper/SimulationDemandMapper.xml b/project/src/main/resources/mapper/SimulationDemandMapper.xml index 127750d0..2bdcb79d 100644 --- a/project/src/main/resources/mapper/SimulationDemandMapper.xml +++ b/project/src/main/resources/mapper/SimulationDemandMapper.xml @@ -193,4 +193,32 @@ AND mold_material.property_name = 'materialNo' + + \ No newline at end of file