From 599cd0cd15a5b76f226ed720aa7215052b323878 Mon Sep 17 00:00:00 2001 From: lidongyang <506508008@qq.com> Date: Tue, 3 Feb 2026 20:45:22 +0800 Subject: [PATCH 1/4] =?UTF-8?q?1=E3=80=81=E5=88=9B=E5=BB=BA=E9=9C=80?= =?UTF-8?q?=E6=B1=82=E6=97=B6=EF=BC=8C=E5=A6=82=E6=9E=9C=E9=9C=80=E6=B1=82?= =?UTF-8?q?=E9=99=84=E4=BB=B6=E6=96=87=E4=BB=B6=E5=A4=B9=E6=9C=AA=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=E5=B0=B1=E8=BF=9B=E8=A1=8C=E5=88=9B=E5=BB=BA=202?= =?UTF-8?q?=E3=80=81=E5=AF=BC=E5=87=BA=E4=BB=BB=E5=8A=A1=E6=A0=91=E5=92=8C?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E5=88=97=E8=A1=A8=E6=97=B6=EF=BC=8C=E4=B9=9F?= =?UTF-8?q?=E5=8A=A0=E4=B8=8A=E5=AD=A6=E7=A7=91=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/req/task/TaskExportExcelParam.java | 2 + .../req/task/TaskTreeExportExcelParam.java | 2 + .../service/impl/DemandServiceImpl.java | 43 +++++++++++++++++-- .../impl/LyricInternalServiceImpl.java | 43 +++++++++++++++++-- 4 files changed, 84 insertions(+), 6 deletions(-) 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/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..b6bbcdaf 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()); 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 这里要挂在【需求附件】文件夹下了 From 65e5163b71209719976b28b8e05306eb297ec2f8 Mon Sep 17 00:00:00 2001 From: lidongyang <506508008@qq.com> Date: Tue, 3 Feb 2026 21:07:10 +0800 Subject: [PATCH 2/4] =?UTF-8?q?1=E3=80=81=E5=88=9B=E5=BB=BA=E9=9C=80?= =?UTF-8?q?=E6=B1=82=E6=97=B6=EF=BC=8C=E5=A6=82=E6=9E=9C=E9=9C=80=E6=B1=82?= =?UTF-8?q?=E9=99=84=E4=BB=B6=E6=96=87=E4=BB=B6=E5=A4=B9=E6=9C=AA=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=E5=B0=B1=E8=BF=9B=E8=A1=8C=E5=88=9B=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/DemandServiceImpl.java | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) 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 b6bbcdaf..ee9f8965 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 @@ -1271,7 +1271,65 @@ public class DemandServiceImpl extends BaseService implements IDemandService { } } + + // 项目层级文件夹和需求文件夹中,新增一层【需求附件】文件夹 + String projectNodeId = req.getProjectId(); BatchCreateNormalDirReq batchCreateNormalDirReq = new BatchCreateNormalDirReq(); + 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.setParentUUId(req.getProjectId()); FolderItemReq folderItemReq = new FolderItemReq(); folderItemReq.setFolderName(req.getDemandName()); From 9d821ca1f938ffa88e9d185bae61ef9545d2eb43 Mon Sep 17 00:00:00 2001 From: lidongyang <506508008@qq.com> Date: Tue, 3 Feb 2026 21:12:25 +0800 Subject: [PATCH 3/4] =?UTF-8?q?1=E3=80=81=E5=88=9B=E5=BB=BA=E9=9C=80?= =?UTF-8?q?=E6=B1=82=20bugfix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/sdm/project/service/impl/DemandServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 ee9f8965..9fca2d2f 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 @@ -1330,7 +1330,7 @@ public class DemandServiceImpl extends BaseService implements IDemandService { }else { demandAttachFileMetadataInfoId = demandAttachFileMetadataInfoResp.getId(); } - batchCreateNormalDirReq.setParentUUId(req.getProjectId()); + batchCreateNormalDirReq.setParentId(demandAttachFileMetadataInfoId); FolderItemReq folderItemReq = new FolderItemReq(); folderItemReq.setFolderName(req.getDemandName()); folderItemReq.setFolderUuid(req.getUuid()); From 9f717f14ce137eddbb0aec8132e24ff6a14c7fa7 Mon Sep 17 00:00:00 2001 From: lidongyang <506508008@qq.com> Date: Tue, 3 Feb 2026 21:30:59 +0800 Subject: [PATCH 4/4] =?UTF-8?q?1=E3=80=81=E4=BF=AE=E6=94=B9data=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E7=9A=84queryDir=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/entity/req/data/QueryDirReq.java | 6 + .../impl/MinioFileIDataFileServiceImpl.java | 6 + .../SimulationDemandController.java | 13 + .../project/dao/SimulationDemandMapper.java | 2 + .../sdm/project/service/IDemandService.java | 1 + .../service/impl/DemandServiceImpl.java | 265 ++++++++++++++++++ .../mapper/SimulationDemandMapper.xml | 28 ++ 7 files changed, 321 insertions(+) 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/data/src/main/java/com/sdm/data/service/impl/MinioFileIDataFileServiceImpl.java b/data/src/main/java/com/sdm/data/service/impl/MinioFileIDataFileServiceImpl.java index 676a1e57..cf51265c 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 @@ -844,6 +844,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 9fca2d2f..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 @@ -1700,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/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