diff --git a/project/src/main/java/com/sdm/project/service/impl/ProjectServiceImpl.java b/project/src/main/java/com/sdm/project/service/impl/ProjectServiceImpl.java index 46f37dd9..42191abc 100644 --- a/project/src/main/java/com/sdm/project/service/impl/ProjectServiceImpl.java +++ b/project/src/main/java/com/sdm/project/service/impl/ProjectServiceImpl.java @@ -212,6 +212,9 @@ public class ProjectServiceImpl extends BaseService implements IProjectService { @Autowired private SimulationDemandMapper demandMapper; + @Autowired + private DataClientFeignClientImpl dataFeignClient; + // @Override // @Transactional @@ -2361,7 +2364,7 @@ public class ProjectServiceImpl extends BaseService implements IProjectService { try { addDemandByTask(taskNodeList); }catch (Exception ex) { - log.error("新增任务时,同步新增一个需求时异常:{}",ex.getMessage()); + log.error("新增任务时,同步新增需求时异常:{}",ex.getMessage()); } } if (CollectionUtils.isNotEmpty(taskNodeExtraList)) { @@ -2440,448 +2443,224 @@ public class ProjectServiceImpl extends BaseService implements IProjectService { } public void addDemandByTask(List taskNodeList) { - log.info("策划任务时,新增需求"); -// Long tenantId = ThreadLocalContext.getTenantId(); -// Long jobNumber = ThreadLocalContext.getUserId(); -// String curDateStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); -// for (TaskNode taskNode : taskNodeList) { -// SpdmDemandVo demandByName = demandMapper.getDemandByNameNoPermission(tenantId,String.join(",", taskNode.getTag10())); -// if (ObjectUtils.isNotEmpty(demandByName)) { -// log.error("需求名称:{},已存在",demandByName.getDemandName()); -// continue; -// } -// SpdmAddDemandReq req = new SpdmAddDemandReq(); -// req.setCreator(jobNumber); -// // 获取仿真负责人 -// String pMemberList = taskNode.getPMemberList(); -// // 获取仿真执行人 -// String eMemberList = taskNode.getEMemberList(); -// // 3D负责人 -// String threeDMemberList = taskNode.getTMemberList(); -// // 关注人 -// String attentionMemberList = taskNode.getAMemberList(); -// req.setCreateTime(curDateStr); -// req.setUuid(RandomUtil.generateString(32)); -// if (demandMapper.addDemand(req, tenantId, jobNumber) <= 0) { -// log.error("新增需求失败!"); -// return; -// } -// long demandId = req.getId(); -// List allMemberList = new ArrayList<>(); -// String uuid = req.getUuid(); -// } -// -// -// -// if (StringUtils.isNotBlank(pMemberList)) { -// String[] pMemberArray = pMemberList.split(","); -// for (String userId : pMemberArray) { -// SpdmDemandRelateMemberReq spdmDemandRelateMemberReq = new SpdmDemandRelateMemberReq(); -// spdmDemandRelateMemberReq.setDemandId(uuid); -// spdmDemandRelateMemberReq.setType(0); -// spdmDemandRelateMemberReq.setUserId(Long.valueOf(userId)); -// spdmDemandRelateMemberReq.setCreateTime(curDateStr); -// spdmDemandRelateMemberReq.setCreator(jobNumber); -// allMemberList.add(spdmDemandRelateMemberReq); -// } -// } -// -// if (StringUtils.isNotBlank(eMemberList)) { -// String[] eMemberArray = eMemberList.split(","); -// for (String userId : eMemberArray) { -// SpdmDemandRelateMemberReq spdmDemandRelateMemberReq = new SpdmDemandRelateMemberReq(); -// spdmDemandRelateMemberReq.setDemandId(uuid); -// spdmDemandRelateMemberReq.setType(1); -// spdmDemandRelateMemberReq.setUserId(Long.valueOf(userId)); -// spdmDemandRelateMemberReq.setCreateTime(curDateStr); -// spdmDemandRelateMemberReq.setCreator(jobNumber); -// allMemberList.add(spdmDemandRelateMemberReq); -// } -// } -// -// if (StringUtils.isNotBlank(threeDMemberList)) { -// String[] threeDMemberArray = threeDMemberList.split(","); -// for (String userId : threeDMemberArray) { -// SpdmDemandRelateMemberReq spdmDemandRelateMemberReq = new SpdmDemandRelateMemberReq(); -// spdmDemandRelateMemberReq.setDemandId(uuid); -// spdmDemandRelateMemberReq.setType(2); -// spdmDemandRelateMemberReq.setUserId(Long.valueOf(userId)); -// spdmDemandRelateMemberReq.setCreateTime(curDateStr); -// spdmDemandRelateMemberReq.setCreator(jobNumber); -// allMemberList.add(spdmDemandRelateMemberReq); -// } -// } -// -// if (StringUtils.isNotBlank(attentionMemberList)) { -// String[] attentionMemberArray = attentionMemberList.split(","); -// for (String userId : attentionMemberArray) { -// SpdmDemandRelateMemberReq spdmDemandRelateMemberReq = new SpdmDemandRelateMemberReq(); -// spdmDemandRelateMemberReq.setDemandId(uuid); -// spdmDemandRelateMemberReq.setType(3); -// spdmDemandRelateMemberReq.setUserId(Long.valueOf(userId)); -// spdmDemandRelateMemberReq.setCreateTime(curDateStr); -// spdmDemandRelateMemberReq.setCreator(jobNumber); -// allMemberList.add(spdmDemandRelateMemberReq); -// } -// } -// -// if (CollectionUtils.isNotEmpty(allMemberList)) { -// if (mapper.addDemandMember(allMemberList) <= 0) { -// TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); -// return SdmResponse.failed("新增需求关联成员失败!"); -// } -// } -// if (CollectionUtils.isNotEmpty(demandExtraList)) { -// demandExtraList.forEach(demandExtra -> { -// demandExtra.setDemandId(req.getUuid()); -// demandExtra.setCreateTime(curDateStr); -// demandExtra.setCreator(jobNumber); -// }); -// if (mapper.addDemandExtra(demandExtraList) <= 0) { -// TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); -// return SdmResponse.failed("新增需求额外属性失败!"); -// } -// } -// -// -// // 项目层级文件夹和需求文件夹中,新增一层【需求附件】文件夹 -// 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)); -// // 利元亨定制 -// TagReq tagReq = new TagReq(); -// String projectId = req.getProjectId(); -// String phaseId = req.getPhaseId(); -// String machineId = req.getMachineId(); -// String workspaceId = req.getWorkspaceId(); -// tagReq.setTag1(projectId); -// tagReq.setTag2(phaseId); -// tagReq.setTag4(machineId); -// tagReq.setTag5(workspaceId); -// demandAttachFolderItemReq.setTagReq(tagReq); -// demandAttachFolderItemReqList.add(demandAttachFolderItemReq); -// demandAttachBatchCreateNormalDirReq.setFolderItems(demandAttachFolderItemReqList); -// demandAttachBatchCreateNormalDirReq.setSkipPermissionCheck(true); -// 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()); -// // 利元亨定制 -// TagReq tagReq = new TagReq(); -// String projectId = req.getProjectId(); -// String phaseId = req.getPhaseId(); -// String machineId = req.getMachineId(); -// String workspaceId = req.getWorkspaceId(); -// tagReq.setTag1(projectId); -// tagReq.setTag2(phaseId); -// tagReq.setTag4(machineId); -// tagReq.setTag5(workspaceId); -// folderItemReq.setTagReq(tagReq); -// batchCreateNormalDirReq.setFolderItems(Collections.singletonList(folderItemReq)); -// batchCreateNormalDirReq.setSkipPermissionCheck(true); -// log.info("创建需求文件夹参数(无权限校验): {}", batchCreateNormalDirReq); -// SdmResponse dirCreateResp = dataFeignClient.batchCreateNormalDirs(batchCreateNormalDirReq); -// if (ObjectUtils.isEmpty(dirCreateResp) || dirCreateResp.getCode() != ResultCode.SUCCESS.getCode()) { -// log.error("创建项目:{}下的{}需求文件夹(无权限校验)时,创建文件夹失败,原因为:{}", req.getProjectId(),req.getDemandName(), dirCreateResp.getMessage()); -// TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); -// return SdmResponse.failed("您没有选择项目的相应权限,请更换其他项目进行创建"); -// } -// log.info("创建需求文件夹响应(无权限校验): {}", dirCreateResp); -// -// // 更新需求创建人对需求文件夹的权限 & 更新需求仿真负责人(确认人)对需求文件夹的权限(预览、下载) -// Long userId = ThreadLocalContext.getUserId(); -// UpdatePermissionReq updatePermissionReq = new UpdatePermissionReq(); -// updatePermissionReq.setUuid(uuid); -// Map userPermissions = new HashMap<>(); -// // 创建人 -// userPermissions.put(userId, FilePermissionEnum.ALL.getValue()); -// // 仿真负责人 -// if (CollectionUtils.isNotEmpty(allMemberList)) { -// // 兼容创建人和负责人是同一个人的情况 -// allMemberList.stream().filter(member -> MemberTypeEnum.PRINCIPAL.getCode().equals(member.getType()) && !Objects.equals(userId, member.getUserId())).forEach(member -> { -// userPermissions.put(member.getUserId(), FilePermissionEnum.BASE.getValue()); -// }); -// } -// -// // 仿真负责人还需要对选择的节点有创建和预览权限 -// UpdatePermissionReq updateNodePermissionReq = new UpdatePermissionReq(); -// updateNodePermissionReq.setUuid(req.getWorkspaceId()); -// Map userForNodePermissions = new HashMap<>(); -// if (StringUtils.isNotBlank(pMemberList)) { -// String[] pMemberArray = pMemberList.split(","); -// for (String pUserId : pMemberArray) { -// userForNodePermissions.put(Long.valueOf(pUserId), FilePermissionEnum.ALL_EXCLUDE_DELETE.getValue()); -// } -// updateNodePermissionReq.setUserPermissions(userForNodePermissions); -// log.info("创建需求时,更新需求仿真负责人(确认人)工位节点权限的参数为:{}",updateNodePermissionReq); -// SdmResponse updateNodePermissionResponse = dataFeignClient.updatePermission(updateNodePermissionReq); -// log.info("创建需求时,更新需求仿真负责人(确认人)工位节点权限的返回值为:{}",updateNodePermissionResponse); -// } -// -// updatePermissionReq.setUserPermissions(userPermissions); -// log.info("创建需求时(无权限校验),更新需求创建人和需求仿真负责人(确认人)权限的参数为:{}",updatePermissionReq); -// SdmResponse updatePermissionResponse = dataFeignClient.updatePermission(updatePermissionReq); -// log.info("创建需求时(无权限校验),更新需求创建人和需求仿真负责人(确认人)权限的返回值为:{}",updatePermissionResponse); + log.info("addDemandByTask 策划任务时,新增需求"); + Long tenantId = ThreadLocalContext.getTenantId(); + Long jobNumber = ThreadLocalContext.getUserId(); + String curDateStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); + for (TaskNode taskNode : taskNodeList) { + SpdmDemandVo demandByName = demandMapper.getDemandByNameNoPermission(tenantId,String.join(",", taskNode.getTag10())); + if (ObjectUtils.isNotEmpty(demandByName)) { + log.error("addDemandByTask 需求名称:{},已存在",demandByName.getDemandName()); + continue; + } + SpdmAddDemandReq req = new SpdmAddDemandReq(); + req.setCreator(jobNumber); + // 获取仿真负责人 + String pMemberList = taskNode.getPMemberList(); + // 获取仿真执行人 + String eMemberList = taskNode.getEMemberList(); + // 3D负责人 + String threeDMemberList = taskNode.getTMemberList(); + // 关注人 + String attentionMemberList = taskNode.getAMemberList(); + req.setCreateTime(curDateStr); + req.setUuid(RandomUtil.generateString(32)); + if (demandMapper.addDemand(req, tenantId, jobNumber) <= 0) { + log.error("addDemandByTask 新增需求失败!"); + return; + } + long demandId = req.getId(); + List allMemberList = new ArrayList<>(); + String uuid = req.getUuid(); + if (StringUtils.isNotBlank(pMemberList)) { + String[] pMemberArray = pMemberList.split(","); + for (String userId : pMemberArray) { + SpdmDemandRelateMemberReq spdmDemandRelateMemberReq = new SpdmDemandRelateMemberReq(); + spdmDemandRelateMemberReq.setDemandId(uuid); + spdmDemandRelateMemberReq.setType(0); + spdmDemandRelateMemberReq.setUserId(Long.valueOf(userId)); + spdmDemandRelateMemberReq.setCreateTime(curDateStr); + spdmDemandRelateMemberReq.setCreator(jobNumber); + allMemberList.add(spdmDemandRelateMemberReq); + } + } + if (StringUtils.isNotBlank(eMemberList)) { + String[] eMemberArray = eMemberList.split(","); + for (String userId : eMemberArray) { + SpdmDemandRelateMemberReq spdmDemandRelateMemberReq = new SpdmDemandRelateMemberReq(); + spdmDemandRelateMemberReq.setDemandId(uuid); + spdmDemandRelateMemberReq.setType(1); + spdmDemandRelateMemberReq.setUserId(Long.valueOf(userId)); + spdmDemandRelateMemberReq.setCreateTime(curDateStr); + spdmDemandRelateMemberReq.setCreator(jobNumber); + allMemberList.add(spdmDemandRelateMemberReq); + } + } + if (StringUtils.isNotBlank(threeDMemberList)) { + String[] threeDMemberArray = threeDMemberList.split(","); + for (String userId : threeDMemberArray) { + SpdmDemandRelateMemberReq spdmDemandRelateMemberReq = new SpdmDemandRelateMemberReq(); + spdmDemandRelateMemberReq.setDemandId(uuid); + spdmDemandRelateMemberReq.setType(2); + spdmDemandRelateMemberReq.setUserId(Long.valueOf(userId)); + spdmDemandRelateMemberReq.setCreateTime(curDateStr); + spdmDemandRelateMemberReq.setCreator(jobNumber); + allMemberList.add(spdmDemandRelateMemberReq); + } + } + if (StringUtils.isNotBlank(attentionMemberList)) { + String[] attentionMemberArray = attentionMemberList.split(","); + for (String userId : attentionMemberArray) { + SpdmDemandRelateMemberReq spdmDemandRelateMemberReq = new SpdmDemandRelateMemberReq(); + spdmDemandRelateMemberReq.setDemandId(uuid); + spdmDemandRelateMemberReq.setType(3); + spdmDemandRelateMemberReq.setUserId(Long.valueOf(userId)); + spdmDemandRelateMemberReq.setCreateTime(curDateStr); + spdmDemandRelateMemberReq.setCreator(jobNumber); + allMemberList.add(spdmDemandRelateMemberReq); + } + } + + if (CollectionUtils.isNotEmpty(allMemberList)) { + if (demandMapper.addDemandMember(allMemberList) <= 0) { + log.error("addDemandByTask 新增需求:{},关联成员失败",demandId); + } + } + + // 项目层级文件夹和需求文件夹中,新增一层【需求附件】文件夹 + String projectNodeId = req.getProjectId(); + BatchCreateNormalDirReq batchCreateNormalDirReq = new BatchCreateNormalDirReq(); + SdmResponse fileMetadataInfoResp = dataFeignClient.queryFileMetadataInfo(projectNodeId, NodeTypeEnum.PROJECT.getValue(), 0L); + if (fileMetadataInfoResp.getData() == null) { + log.error("addDemandByTask fileMetadataInfoResp为空,projectNodeId为:{}",projectNodeId); + return; + } + // 查询需求附件的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("addDemandByTask listSdmResponse为空,project的元数据主键id为:{}",projectMetadataInfo.getId()); + return; + } + 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("addDemandByTask 未查询到需求附件文件夹,当前项目下的子文件夹为:{}",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)); + // 利元亨定制 + TagReq tagReq = new TagReq(); + String projectId = req.getProjectId(); + String phaseId = req.getPhaseId(); + String machineId = req.getMachineId(); + String workspaceId = req.getWorkspaceId(); + tagReq.setTag1(projectId); + tagReq.setTag2(phaseId); + tagReq.setTag4(machineId); + tagReq.setTag5(workspaceId); + demandAttachFolderItemReq.setTagReq(tagReq); + demandAttachFolderItemReqList.add(demandAttachFolderItemReq); + demandAttachBatchCreateNormalDirReq.setFolderItems(demandAttachFolderItemReqList); + demandAttachBatchCreateNormalDirReq.setSkipPermissionCheck(true); + log.info("addDemandByTask 创建需求附件文件夹请求参数:{}", demandAttachBatchCreateNormalDirReq); + BatchCreateNormalDirResp batchCreateNormalDirResp; + try { + SdmResponse response = dataFeignClient.batchCreateNormalDirs(demandAttachBatchCreateNormalDirReq); + log.info("addDemandByTask 创建需求附件文件夹响应:{}", response); + if (!response.isSuccess() || ObjectUtils.isEmpty(response.getData())) { + log.error("addDemandByTask 调用创建需求附件文件夹接口失败,原因为:{}", response.getMessage()); + return; + } + batchCreateNormalDirResp = response.getData(); + } catch (Exception e) { + log.error("addDemandByTask 调用创建需求附件文件夹接口失败", e); + return; + } + + if (ObjectUtils.isEmpty(batchCreateNormalDirResp)) { + log.error("addDemandByTask batchCreateNormalDirResp为空"); + return; + } + List successList = batchCreateNormalDirResp.getSuccessList(); + if (CollectionUtils.isEmpty(successList)) { + log.error("addDemandByTask successList为空"); + return; + } + // 需求附件文件夹的元数据主键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()); + // 利元亨定制 + TagReq tagReq = new TagReq(); + String projectId = req.getProjectId(); + String phaseId = req.getPhaseId(); + String machineId = req.getMachineId(); + String workspaceId = req.getWorkspaceId(); + tagReq.setTag1(projectId); + tagReq.setTag2(phaseId); + tagReq.setTag4(machineId); + tagReq.setTag5(workspaceId); + folderItemReq.setTagReq(tagReq); + batchCreateNormalDirReq.setFolderItems(Collections.singletonList(folderItemReq)); + batchCreateNormalDirReq.setSkipPermissionCheck(true); + log.info("addDemandByTask 创建需求文件夹参数(无权限校验): {}", batchCreateNormalDirReq); + SdmResponse dirCreateResp = dataFeignClient.batchCreateNormalDirs(batchCreateNormalDirReq); + if (ObjectUtils.isEmpty(dirCreateResp) || dirCreateResp.getCode() != ResultCode.SUCCESS.getCode()) { + log.error("addDemandByTask 创建项目:{}下的{}需求文件夹(无权限校验)时,创建文件夹失败,原因为:{}", req.getProjectId(),req.getDemandName(), dirCreateResp.getMessage()); + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + return; + } + log.info("addDemandByTask 创建需求文件夹响应(无权限校验): {}", dirCreateResp); + + // 更新需求创建人对需求文件夹的权限 & 更新需求仿真负责人(确认人)对需求文件夹的权限(预览、下载) + Long userId = ThreadLocalContext.getUserId(); + UpdatePermissionReq updatePermissionReq = new UpdatePermissionReq(); + updatePermissionReq.setUuid(uuid); + Map userPermissions = new HashMap<>(); + // 创建人 + userPermissions.put(userId, FilePermissionEnum.ALL.getValue()); + // 仿真负责人 + if (CollectionUtils.isNotEmpty(allMemberList)) { + // 兼容创建人和负责人是同一个人的情况 + allMemberList.stream().filter(member -> MemberTypeEnum.PRINCIPAL.getCode().equals(member.getType()) && !Objects.equals(userId, member.getUserId())).forEach(member -> { + userPermissions.put(member.getUserId(), FilePermissionEnum.BASE.getValue()); + }); + } + // 仿真负责人还需要对选择的节点有创建和预览权限 + UpdatePermissionReq updateNodePermissionReq = new UpdatePermissionReq(); + updateNodePermissionReq.setUuid(req.getWorkspaceId()); + Map userForNodePermissions = new HashMap<>(); + if (StringUtils.isNotBlank(pMemberList)) { + String[] pMemberArray = pMemberList.split(","); + for (String pUserId : pMemberArray) { + userForNodePermissions.put(Long.valueOf(pUserId), FilePermissionEnum.ALL_EXCLUDE_DELETE.getValue()); + } + updateNodePermissionReq.setUserPermissions(userForNodePermissions); + log.info("addDemandByTask 创建需求时,更新需求仿真负责人(确认人)工位节点权限的参数为:{}",updateNodePermissionReq); + SdmResponse updateNodePermissionResponse = dataFeignClient.updatePermission(updateNodePermissionReq); + log.info("addDemandByTask 创建需求时,更新需求仿真负责人(确认人)工位节点权限的返回值为:{}",updateNodePermissionResponse); + } + + updatePermissionReq.setUserPermissions(userPermissions); + log.info("addDemandByTask 创建需求时(无权限校验),更新需求创建人和需求仿真负责人(确认人)权限的参数为:{}",updatePermissionReq); + SdmResponse updatePermissionResponse = dataFeignClient.updatePermission(updatePermissionReq); + log.info("addDemandByTask 创建需求时(无权限校验),更新需求创建人和需求仿真负责人(确认人)权限的返回值为:{}",updatePermissionResponse); + } } -// private SdmResponse realAddSimulationTaskItems(TaskNodeTree taskNodeTree, String parentId, Long tenantId,HashMap> idMap,HashMap> taskIdMap) { -// Long jobNumber = ThreadLocalContext.getUserId(); -// SdmResponse response = SdmResponse.success(); -// if (CollectionUtils.isEmpty(taskNodeTree.getNodeList())) { -// response = SdmResponse.failed("节点不能为空"); -// } else { -// List projectNodeList = new ArrayList<>(); -// List projectNodeMemberList = new ArrayList<>(); -// List projectNodeExtraList = new ArrayList<>(); -// List taskNodeList = new ArrayList<>(); -// List taskNodeMemberList = new ArrayList<>(); -// List taskNodeExtraList = new ArrayList<>(); -// List projectNodePerformanceList = new ArrayList<>(); -// List projectNodePerformanceExtraList = new ArrayList<>(); -// for (TaskNode taskNode : taskNodeTree.getNodeList()) { -// traverseTaskNode(taskNode.getPid(), tenantId, VersionEnum.INITIAL.getCode(), taskNode, projectNodeList, projectNodeMemberList, projectNodeExtraList, taskNodeList, taskNodeMemberList, taskNodeExtraList, projectNodePerformanceList, projectNodePerformanceExtraList, null,idMap,taskIdMap); -// } -// SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); -// String createTime = format.format(new Date()); -// Map projectNodeMap = Map.of(); -// Map taskNodeMap = Map.of(); -// if (CollectionUtils.isNotEmpty(projectNodeList)) { -// projectNodeList.forEach(projectNode -> projectNode.setCreateTime(createTime)); -// if (mapper.batchAddSimulationNodes(projectNodeList) <= 0) { -// response = SdmResponse.failed("添加节点失败"); -// return response; -// } -// projectNodeMap = projectNodeList.stream().collect(Collectors.groupingBy( -// TaskNode::getUuid, -// Collectors.collectingAndThen( -// Collectors.toList(), -// list -> list.get(0) -// ) -// )); -// Map projectNodePoMap = Map.of(); -// List newProjectNodeList = mapper.getNodeListByNodeIdList(projectNodeList.stream().map(TaskNode::getParentId).toList()); -// if (CollectionUtils.isNotEmpty(newProjectNodeList)) { -// projectNodePoMap = newProjectNodeList.stream().collect(Collectors.groupingBy( -// ProjectNodePo::getUuid, -// Collectors.collectingAndThen( -// Collectors.toList(), -// list -> list.get(0) -// ) -// )); -// } -// for (TaskNode taskNode : projectNodeList) { -// if (ObjectUtils.isEmpty(projectNodeMap.get(taskNode.getParentId())) -// && ObjectUtils.isEmpty(projectNodePoMap.get(taskNode.getParentId())) && !NodeTypeEnum.PROJECT.getValue().equals(taskNode.getNodeType())) { -// log.error("新增节点时,根据parentId:{},未查询到节点", taskNode.getParentId()); -// response = SdmResponse.failed("新增节点时,创建文件失败"); -// return response; -// } -// createDir(taskNode.getUuid(), -// NodeTypeEnum.PROJECT.getValue().equals(taskNode.getNodeType()) ? null : (ObjectUtils.isNotEmpty(projectNodePoMap.get(taskNode.getParentId())) -// ? projectNodePoMap.get(taskNode.getParentId()).getUuid() -// : projectNodeMap.get(taskNode.getParentId()).getUuid()), -// taskNode.getNodeName()); -// } -// } -// if (CollectionUtils.isNotEmpty(projectNodeExtraList)) { -// projectNodeExtraList.forEach(projectNode -> projectNode.setCreateTime(createTime)); -// if (mapper.batchAddSimulationNodeExtra(projectNodeExtraList) <= 0) { -// response = SdmResponse.failed("添加节点附加属性失败"); -// return response; -// } -// } -// if (CollectionUtils.isNotEmpty(projectNodeMemberList)) { -// projectNodeMemberList.forEach(projectNode -> { -// projectNode.setCreateTime(createTime); -// projectNode.setType(NodeMemberTypeEnum.MANAGER.getCode()); -// }); -// if (mapper.batchAddSimulationNodeMember(projectNodeMemberList) <= 0) { -// response = SdmResponse.failed("添加节点成员属性失败"); -// } -// } -// -// if (CollectionUtils.isNotEmpty(taskNodeList)) { -// taskNodeList.forEach(projectNode -> { -//// projectNode.setCreator(jobNumber); -// projectNode.setCreateTime(createTime); -// }); -// if (mapper.batchAddSimulationTask(taskNodeList) <= 0) { -// response = SdmResponse.failed("新增任务失败"); -// return response; -// } -// taskNodeMap = taskNodeList.stream().collect(Collectors.groupingBy( -// TaskNode::getUuid, -// Collectors.collectingAndThen( -// Collectors.toList(), -// list -> list.get(0) -// ) -// )); -// Map projectNodePoMap = Map.of(); -// List newProjectNodeList = mapper.getNodeListByNodeIdList(taskNodeList.stream().map(TaskNode::getParentId).toList()); -// if (CollectionUtils.isNotEmpty(newProjectNodeList)) { -// projectNodePoMap = newProjectNodeList.stream().collect(Collectors.groupingBy( -// ProjectNodePo::getUuid, -// Collectors.collectingAndThen( -// Collectors.toList(), -// list -> list.get(0) -// ) -// )); -// } -// if (projectNodeMap.isEmpty()) { -// // projectNodeMap为空说明是直接添加分析项的情况 -// for (TaskNode taskNode : taskNodeList) { -// if (ObjectUtils.isEmpty(projectNodePoMap.get(taskNode.getParentId()))) { -// log.error("projectNodeMap为空,根据parentId:{},未查询到节点", taskNode.getParentId()); -// response = SdmResponse.failed("新增分析项时,创建文件失败"); -// return response; -// } -// createDir(taskNode.getUuid(), projectNodePoMap.get(taskNode.getParentId()).getUuid(), taskNode.getNodeName()); -// } -// } else { -// for (TaskNode taskNode : taskNodeList) { -// if (ObjectUtils.isEmpty(projectNodePoMap.get(taskNode.getParentId())) && ObjectUtils.isEmpty(projectNodeMap.get(taskNode.getParentId()))) { -// log.error("projectNodeMap不空,根据parentId:{},未查询到节点", taskNode.getParentId()); -// response = SdmResponse.failed("新增分析项时,创建文件失败"); -// return response; -// } -// createDir(taskNode.getUuid(), -// ObjectUtils.isNotEmpty(projectNodePoMap.get(taskNode.getParentId())) ? projectNodePoMap.get(taskNode.getParentId()).getUuid() : projectNodeMap.get(taskNode.getParentId()).getUuid(), -// taskNode.getNodeName()); -// } -// } -// } -// if (CollectionUtils.isNotEmpty(taskNodeExtraList)) { -// taskNodeExtraList.forEach(projectNode -> projectNode.setCreateTime(createTime)); -// if (mapper.batchAddSimulationTaskExtra(taskNodeExtraList) <= 0) { -// response = SdmResponse.failed("新增任务附加属性失败"); -// } -// } -// if (CollectionUtils.isNotEmpty(taskNodeMemberList)) { -// taskNodeMemberList.forEach(projectNode -> projectNode.setCreateTime(createTime)); -// if (mapper.batchAddSimulationTaskMember(taskNodeMemberList) <= 0) { -// response = SdmResponse.failed("新增任务成员属性失败"); -// return response; -// } -// } -// if (CollectionUtils.isNotEmpty(projectNodePerformanceList)) { -// projectNodePerformanceList.forEach(projectNode -> projectNode.setCreateTime(createTime)); -// if (mapper.batchAddSimulationPerformance(projectNodePerformanceList) <= 0) { -// response = SdmResponse.failed("新增指标失败"); -// return response; -// } -// -// List newTaskNodeList = mapper.getTaskListByNodeIdList(projectNodePerformanceList.stream().map(TaskNode::getTaskId).toList()); -// Map taskNodePoMap = Map.of(); -// if (CollectionUtils.isNotEmpty(newTaskNodeList)) { -// taskNodePoMap = newTaskNodeList.stream().collect(Collectors.groupingBy( -// TaskNodePo::getUuid, -// Collectors.collectingAndThen( -// Collectors.toList(), -// list -> list.get(0) -// ) -// )); -// } -// if (taskNodeMap.isEmpty()) { -// // taskNodeMap为空说明是直接添加指标的情况 -// for (TaskNode taskNode : projectNodePerformanceList) { -// if (ObjectUtils.isEmpty(taskNodePoMap.get(taskNode.getTaskId()))) { -// log.error("taskNodeMap为空,根据taskId:{},未查询到任务", taskNode.getTaskId()); -// response = SdmResponse.failed("新增指标时,创建文件失败"); -// return response; -// } -// createDir(taskNode.getUuid(), taskNodePoMap.get(taskNode.getTaskId()).getUuid(), taskNode.getNodeName()); -// } -// } else { -// for (TaskNode taskNode : projectNodePerformanceList) { -// if (ObjectUtils.isEmpty(taskNodePoMap.get(taskNode.getTaskId())) && ObjectUtils.isEmpty(taskNodeMap.get(taskNode.getTaskId()))) { -// log.error("taskNodeMap不空,根据taskId:{},未查询到任务", taskNode.getTaskId()); -// response = SdmResponse.failed("新增指标时,创建文件失败"); -// return response; -// } -// createDir(taskNode.getUuid(), -// ObjectUtils.isNotEmpty(taskNodePoMap.get(taskNode.getTaskId())) ? taskNodePoMap.get(taskNode.getTaskId()).getUuid() : taskNodeMap.get(taskNode.getTaskId()).getUuid(), -// taskNode.getNodeName()); -// } -// } -// } -// if (CollectionUtils.isNotEmpty(projectNodePerformanceExtraList)) { -// for (TaskExtraNode performanceExtraNode : projectNodePerformanceExtraList) { -// performanceExtraNode.setCreateTime(createTime); -// performanceExtraNode.setValueType(ValueTypeEnum.DEFAULT.getValue()); -// } -// if (mapper.batchAddSimulationPerformanceExtra(projectNodePerformanceExtraList) <= 0) { -// response = SdmResponse.failed("新增任务指标附加属性失败"); -// return response; -// } -// } -// } -// return response; -// } - -// private void createDir(String uuid, String parentUuid, String dirName) { -// CreateDirReq createDirReq = new CreateDirReq(); -// createDirReq.setUuId(uuid); -// createDirReq.setParentUuId(parentUuid); -// createDirReq.setDirName(dirName); -// log.info("调用创建文件夹的参数为:{}", createDirReq); -//// SdmResponse response = dataClientAPIClient.createDir(createDirReq); -//// log.info("调用创建文件夹的返回值为:{}", response); -// } - /** * 创建文件夹 *