diff --git a/project/src/main/java/com/sdm/project/controller/SimulationTaskController.java b/project/src/main/java/com/sdm/project/controller/SimulationTaskController.java index a80fc5d8..353aa0e8 100644 --- a/project/src/main/java/com/sdm/project/controller/SimulationTaskController.java +++ b/project/src/main/java/com/sdm/project/controller/SimulationTaskController.java @@ -289,4 +289,15 @@ public class SimulationTaskController implements ISimulationTaskFeignClient { return taskService.queryProjectUserLoads(req); } + /** + * 批量操作任务 + * @param taskOpr + * @return + */ + @PostMapping("/batchOperation") + @Operation(summary = "批量操作任务", description = "批量操作任务") + public SdmResponse batchOperation(@RequestBody SpdmTaskOpr taskOpr) { + return taskService.batchOperation(taskOpr); + } + } diff --git a/project/src/main/java/com/sdm/project/model/req/SpdmTaskOprReq.java b/project/src/main/java/com/sdm/project/model/req/SpdmTaskOprReq.java index 62197234..68578d54 100644 --- a/project/src/main/java/com/sdm/project/model/req/SpdmTaskOprReq.java +++ b/project/src/main/java/com/sdm/project/model/req/SpdmTaskOprReq.java @@ -76,4 +76,15 @@ public class SpdmTaskOprReq { */ private String confidence; + private String tag1; + private String tag2; + private String tag3; + private String tag4; + private String tag5; + private String tag6; + private String tag7; + private String tag8; + private String tag9; + private String tag10; + } diff --git a/project/src/main/java/com/sdm/project/service/ITaskService.java b/project/src/main/java/com/sdm/project/service/ITaskService.java index 2f4a53b8..75ece3d4 100644 --- a/project/src/main/java/com/sdm/project/service/ITaskService.java +++ b/project/src/main/java/com/sdm/project/service/ITaskService.java @@ -102,4 +102,6 @@ public interface ITaskService { */ SdmResponse> queryProjectUserLoads(ProjectUserLoadReq req); + SdmResponse batchOperation(SpdmTaskOpr taskOpr); + } 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 510227c5..ee36d9d4 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 @@ -620,6 +620,30 @@ public class LyricInternalServiceImpl implements ILyricInternalService { } },projectTaskThreadPoolExecutor); } + + // 批量更新权限 + if (CollectionUtils.isNotEmpty(updatePermissionList)) { + List filePermissions = new ArrayList<>(); + for (UpdatePermissionReq updatePermissionReq : updatePermissionList) { + BatchUpdatePermissionReq.FilePermissionItem item = new BatchUpdatePermissionReq.FilePermissionItem(); + item.setUuid(updatePermissionReq.getUuid()); + Map userPermissions = new HashMap<>(); + userPermissions.put(updatePermissionReq.getUserId(), FilePermissionEnum.ALL.getValue()); + item.setUserPermissions(userPermissions); + filePermissions.add(item); + } + if (CollectionUtils.isNotEmpty(filePermissions)) { + BatchUpdatePermissionReq batchReq = new BatchUpdatePermissionReq(); + batchReq.setFilePermissions(filePermissions); + log.info("同步项目阶段时,批量更新权限,任务数量:{}", filePermissions.size()); + SdmResponse response = dataFeignClient.batchUpdatePermission(batchReq); + log.info("同步项目阶段时,批量更新权限结果:{}", response); + if (!response.isSuccess()) { + log.error("批量更新权限失败:{}", response.getMessage()); + } + } + } + } diff --git a/project/src/main/java/com/sdm/project/service/impl/NodeServiceImpl.java b/project/src/main/java/com/sdm/project/service/impl/NodeServiceImpl.java index 09dde67e..c4825449 100644 --- a/project/src/main/java/com/sdm/project/service/impl/NodeServiceImpl.java +++ b/project/src/main/java/com/sdm/project/service/impl/NodeServiceImpl.java @@ -202,19 +202,28 @@ public class NodeServiceImpl extends ServiceImpl filePermissions = new ArrayList<>(); for (SpdmProjectNodeEditReq addNode : addNodeList) { - // 更新文件权限 - Long userId = ThreadLocalContext.getUserId(); - UpdatePermissionReq updatePermissionReq = new UpdatePermissionReq(); - updatePermissionReq.setUserId(userId); - updatePermissionReq.setUuid(addNode.getUuid()); + BatchUpdatePermissionReq.FilePermissionItem item = new BatchUpdatePermissionReq.FilePermissionItem(); + item.setUuid(addNode.getUuid()); Map userPermissions = new HashMap<>(); userPermissions.put(userId, FilePermissionEnum.ALL.getValue()); - updatePermissionReq.setUserPermissions(userPermissions); - log.info("创建项目阶段时,更新用户权限的参数为:{}",updatePermissionReq); - SdmResponse updatePermissionResponse = dataFeignClient.updatePermission(updatePermissionReq); - log.info("创建项目阶段时,更新用户权限的返回值为:{}",updatePermissionResponse); + item.setUserPermissions(userPermissions); + filePermissions.add(item); } + if (CollectionUtils.isNotEmpty(filePermissions)) { + BatchUpdatePermissionReq batchReq = new BatchUpdatePermissionReq(); + batchReq.setFilePermissions(filePermissions); + log.info("创建项目阶段时,批量更新权限,任务数量:{}", filePermissions.size()); + SdmResponse response = dataFeignClient.batchUpdatePermission(batchReq); + log.info("创建项目阶段时,批量更新权限结果:{}", response); + if (!response.isSuccess()) { + log.error("批量更新权限失败:{}", response.getMessage()); + } + } + for (SpdmProjectNodeEditReq addNode : addNodeList) { String projectSource = addNode.getProjectSource(); String nodeType = addNode.getNodeType(); @@ -3192,22 +3201,45 @@ public class NodeServiceImpl extends ServiceImpl { - log.info("开始异步更新{}条权限记录", permissionReqList.size()); - for (UpdatePermissionReq permissionReq : permissionReqList) { - try { - SdmResponse updateResponse = dataFeignClient.updatePermission(permissionReq); - if (!updateResponse.isSuccess()) { - log.warn("更新权限失败,需求ID:{},用户ID:{},响应:{}", - permissionReq.getUuid(), permissionReq.getUserId(), updateResponse); - } - } catch (Exception e) { - log.error("更新权限异常,需求ID:{},用户ID:{}", - permissionReq.getUuid(), permissionReq.getUserId(), e); + // 批量更新需求权限 + if (CollectionUtils.isNotEmpty(permissionReqList)) { + List filePermissions = new ArrayList<>(); + for (UpdatePermissionReq updatePermissionReq : permissionReqList) { + BatchUpdatePermissionReq.FilePermissionItem item = new BatchUpdatePermissionReq.FilePermissionItem(); + item.setUuid(updatePermissionReq.getUuid()); + Map userPermissions = new HashMap<>(); + userPermissions.put(updatePermissionReq.getUserId(), FilePermissionEnum.ALL.getValue()); + item.setUserPermissions(userPermissions); + filePermissions.add(item); + } + if (CollectionUtils.isNotEmpty(filePermissions)) { + BatchUpdatePermissionReq batchReq = new BatchUpdatePermissionReq(); + batchReq.setFilePermissions(filePermissions); + log.info("创建项目阶段时,批量更新需求权限,任务数量:{}", filePermissions.size()); + SdmResponse response = dataFeignClient.batchUpdatePermission(batchReq); + log.info("创建项目阶段时,批量更新需求权限结果:{}", response); + if (!response.isSuccess()) { + log.error("批量更新需求权限失败:{}", response.getMessage()); } } - log.info("异步更新权限完成"); - }, projectTaskThreadPoolExecutor); + } + +// CompletableFuture.runAsync(() -> { +// log.info("开始异步更新{}条权限记录", permissionReqList.size()); +// for (UpdatePermissionReq permissionReq : permissionReqList) { +// try { +// SdmResponse updateResponse = dataFeignClient.updatePermission(permissionReq); +// if (!updateResponse.isSuccess()) { +// log.warn("更新权限失败,需求ID:{},用户ID:{},响应:{}", +// permissionReq.getUuid(), permissionReq.getUserId(), updateResponse); +// } +// } catch (Exception e) { +// log.error("更新权限异常,需求ID:{},用户ID:{}", +// permissionReq.getUuid(), permissionReq.getUserId(), e); +// } +// } +// log.info("异步更新权限完成"); +// }, projectTaskThreadPoolExecutor); } /** diff --git a/project/src/main/java/com/sdm/project/service/impl/SimulationTaskServiceImpl.java b/project/src/main/java/com/sdm/project/service/impl/SimulationTaskServiceImpl.java index b64289be..437ae00c 100644 --- a/project/src/main/java/com/sdm/project/service/impl/SimulationTaskServiceImpl.java +++ b/project/src/main/java/com/sdm/project/service/impl/SimulationTaskServiceImpl.java @@ -118,6 +118,36 @@ public class SimulationTaskServiceImpl extends ServiceImpl 100) { + return SdmResponse.failed("任务进度超过100%,请核查"); + } + String curDateStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); + Long userId = ThreadLocalContext.getUserId(); + for (String taskId : taskOpr.getTaskIds()) { + req.setTaskId(taskId); + if (simulationTaskService.lambdaQuery().eq(SimulationTask::getUuid, taskId).count() <= 0) { + log.error("根据taskId:{},未查询到任务", taskId); + return SdmResponse.failed("未查询到任务"); + } + if (!simulationTaskService.updateSimulationTask(req)) { + return SdmResponse.failed("编辑任务失败"); + } + + // 原来的仿真执行人 + List oldEMemberList = simulationTaskMemberService.lambdaQuery() + .eq(SimulationTaskMember::getTaskId, taskId) + .eq(SimulationTaskMember::getType, MemberTypeEnum.EXECUTOR.getCode()).list(); + List oldEMemberIdList = new ArrayList<>(); + // eMemberList传空字符串代表要清空仿真执行人,传null代表不对仿真执行人做操作 + if (CollectionUtils.isNotEmpty(oldEMemberList) && Objects.equals(req.getEMemberList(), "")) { + oldEMemberIdList = oldEMemberList.stream().map(SimulationTaskMember::getUserId).toList(); + // 删除原来的仿真执行人信息 + simulationTaskMemberService.deleteTaskMemberList(taskId, MemberTypeEnum.EXECUTOR.getCode()); + // 删除原来的仿真执行人权限 + for (SimulationTaskMember simulationTaskMember : oldEMemberList) { + deletePermission(simulationTaskMember.getUserId(),simulationTaskMember.getTaskId()); + } + } + // 找出新的仿真执行人 + List currentUserIdList = new ArrayList<>(); + if (StringUtils.isNotBlank(req.getEMemberList())) { + String[] userIdArr = req.getEMemberList().split(","); + currentUserIdList = Arrays.stream(userIdArr).filter(s -> !s.isEmpty()).map(Long::valueOf).collect(Collectors.toList()); + } + List newUserIdList = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(currentUserIdList)) { + if (CollectionUtils.isEmpty(oldEMemberIdList)) { + newUserIdList = currentUserIdList; + }else { + for (Long currentUserId : currentUserIdList) { + if (!oldEMemberIdList.contains(currentUserId)) { + newUserIdList.add(currentUserId); + } + } + } + } + log.info("老用户id为:{}",oldEMemberIdList); + log.info("新用户id为:{}",newUserIdList); + if (CollectionUtils.isNotEmpty(currentUserIdList)) { + if (!simulationTaskMemberService.saveTaskMemberList(taskId, MemberTypeEnum.EXECUTOR.getCode(), currentUserIdList)) { + return SdmResponse.failed("编辑仿真执行人失败"); + } + } + // 发送消息通知 + newUserIdList.forEach(i -> { + sendMessage(MessageTemplateEnum.TASK_ISSUE, req.getNodeName(), String.valueOf(i), taskId); + }); + // 保存当前的仿真执行人权限 + for (Long currentUserId : currentUserIdList) { + updatePermission(currentUserId,taskId); + } + // 新增拓展属性 + List extraList = req.getExtras(); + if (CollectionUtils.isEmpty(extraList)) { + continue; + } + List saveExtraList = extraList.stream().filter(extra -> ObjectUtils.isEmpty(extra.getId())).toList(); + if (CollectionUtils.isNotEmpty(saveExtraList)) { + saveExtraList.forEach(extra -> { + extra.setTaskId(taskId); + extra.setCreateTime(curDateStr); + extra.setCreator(userId); + }); + simulationTaskExtraService.saveBatch(saveExtraList); + } + List updateExtraList = extraList.stream().filter(extra -> ObjectUtils.isNotEmpty(extra.getId())).toList(); + if (CollectionUtils.isEmpty(updateExtraList)) { + continue; + } + for (SimulationTaskExtra simulationTaskExtra : updateExtraList) { + simulationTaskExtraService.lambdaUpdate().set(SimulationTaskExtra::getPropertyValue, simulationTaskExtra.getPropertyValue()) + .eq(SimulationTaskExtra::getId, simulationTaskExtra.getId()) + .update(); + } + } + } + return SdmResponse.success(); + } }