From ba487af6e2adc66ea4b79856d694aae06adcadbf Mon Sep 17 00:00:00 2001 From: "ys.git" <18439391935@163.com> Date: Wed, 24 Dec 2025 18:32:06 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=81=E7=A8=8B=E8=8A=82=E7=82=B9=E5=85=A8?= =?UTF-8?q?=E9=83=A8=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/PermissionController.java | 2 +- .../pojo/dto/ActivitiDataAndRecordDTO.java | 7 +- .../pojo/dto/ActivitiRecordDTO.java | 5 +- .../impl/ActivitiProcessServiceImpl.java | 276 +++++++++++++++--- .../impl/EngineParamDetailServiceImpl.java | 2 +- .../service/impl/TodoTaskServiceImpl.java | 2 +- 6 files changed, 248 insertions(+), 46 deletions(-) diff --git a/src/main/java/com/xdap/self_development/controller/PermissionController.java b/src/main/java/com/xdap/self_development/controller/PermissionController.java index e97f79a..5bb6fca 100644 --- a/src/main/java/com/xdap/self_development/controller/PermissionController.java +++ b/src/main/java/com/xdap/self_development/controller/PermissionController.java @@ -42,7 +42,7 @@ public class PermissionController { try { modelRoleService.addRoles(request); } catch (Exception e) { - throw new RuntimeException("添加失败:检查是否存在重复角色(名称+代码)" + e.getMessage()); + throw new RuntimeException("添加失败:检查是否存在重复角色(代码)" + e.getMessage()); } return Response.ok(); } diff --git a/src/main/java/com/xdap/self_development/pojo/dto/ActivitiDataAndRecordDTO.java b/src/main/java/com/xdap/self_development/pojo/dto/ActivitiDataAndRecordDTO.java index 5e08ee6..acca850 100644 --- a/src/main/java/com/xdap/self_development/pojo/dto/ActivitiDataAndRecordDTO.java +++ b/src/main/java/com/xdap/self_development/pojo/dto/ActivitiDataAndRecordDTO.java @@ -6,8 +6,9 @@ import java.util.ArrayList; @Data public class ActivitiDataAndRecordDTO { - - private ArrayList activitiDataDTOS; - private ArrayList activitiRecordDTOS; + private String approvalStatus; + private String processTitle; + private ArrayList activitiDataDTOS; + private ArrayList activitiRecordDTOS; } diff --git a/src/main/java/com/xdap/self_development/pojo/dto/ActivitiRecordDTO.java b/src/main/java/com/xdap/self_development/pojo/dto/ActivitiRecordDTO.java index c9aa435..8441077 100644 --- a/src/main/java/com/xdap/self_development/pojo/dto/ActivitiRecordDTO.java +++ b/src/main/java/com/xdap/self_development/pojo/dto/ActivitiRecordDTO.java @@ -14,8 +14,11 @@ public class ActivitiRecordDTO { private String node; /** - * 审批人 + * 所有 */ + private String unapprovedPerson; + + //已审批人 private String approverPersons; /** diff --git a/src/main/java/com/xdap/self_development/service/impl/ActivitiProcessServiceImpl.java b/src/main/java/com/xdap/self_development/service/impl/ActivitiProcessServiceImpl.java index a0a6963..48d549c 100644 --- a/src/main/java/com/xdap/self_development/service/impl/ActivitiProcessServiceImpl.java +++ b/src/main/java/com/xdap/self_development/service/impl/ActivitiProcessServiceImpl.java @@ -581,49 +581,247 @@ public class ActivitiProcessServiceImpl implements ActivitiProcessService { List paramApprovalRecordPojos = sw.buildFromDatasource("xdap_app_223770822127386625") .eq("approval_id", approvalId) .doQuery(ParamApprovalRecordPojo.class); - for (ParamApprovalRecordPojo paramApprovalRecordPojo : paramApprovalRecordPojos) { - String approverPerson = paramApprovalRecordPojo.getAssignee(); + //获取配置 + List approvalConfigPojos = sw.buildFromDatasource("xdap_app_223770822127386625") + .eq("approval_id", approvalId) + .doQuery(ApprovalConfigPojo.class); +// for (ApprovalConfigPojo approvalConfigPojo : approvalConfigPojos) { +// String nodeName = approvalConfigPojo.getNodeName(); +// paramApprovalRecordPojos.stream().forEach(x -> { +// if (x.getNodeName().equals(nodeName)) { +// +// } +// }); +// if ("会签".equals(nodeName)) { +// +// } +// approvalConfigPojo.getAssignees() +// } + + // 存储已审批的人员信息 + Map> approvedPersonsByNode = new HashMap<>(); + List dtos = new ArrayList<>(); + for (ParamApprovalRecordPojo record : paramApprovalRecordPojos) { + ActivitiRecordDTO activitiRecordDTO = new ActivitiRecordDTO(); - activitiRecordDTO.setNode(paramApprovalRecordPojo.getNodeName()); - activitiRecordDTO.setApproverPersons(approverPerson); - activitiRecordDTO.setCommon(paramApprovalRecordPojo.getApprovalComment()); - activitiRecordDTO.setNodeOrder(paramApprovalRecordPojo.getNodeOrder()); - activitiRecordDTO.setOperateTime(paramApprovalRecordPojo.getOperateTime()); - activitiRecordDTO.setOperate(paramApprovalRecordPojo.getOperator()); - activitiRecordDTOS.add(activitiRecordDTO); - } - //找到下一级审批人 - List engineReviewListPojos = sw.buildFromDatasource("xdap_app_223770822127386625") - .eq("id", approvalId).doQuery(EngineReviewListPojo.class); - if (ObjectUtils.isNotEmpty(engineReviewListPojos)) { - EngineReviewListPojo engineReviewListPojo = engineReviewListPojos.get(0); - if (StringUtils.isNotEmpty(engineReviewListPojo.getApproverPersons())) { - ActivitiRecordDTO recordNextApprover = new ActivitiRecordDTO(); - recordNextApprover.setApproverPersons(engineReviewListPojo.getApproverPersons()); - recordNextApprover.setCommon(""); - recordNextApprover.setNode("待审批"); - recordNextApprover.setNodeOrder(999); - activitiRecordDTOS.add(recordNextApprover); + activitiRecordDTO.setNode(record.getNodeName()); + activitiRecordDTO.setApproverPersons(record.getAssignee()); + activitiRecordDTO.setCommon(record.getApprovalComment()); + activitiRecordDTO.setNodeOrder(record.getNodeOrder()); + activitiRecordDTO.setOperateTime(record.getOperateTime()); + activitiRecordDTO.setOperate(record.getOperator()); + dtos.add(activitiRecordDTO); + if (!approvedPersonsByNode.containsKey(record.getNodeName())) { + approvedPersonsByNode.put(record.getNodeName(), new ArrayList<>()); } - } - ArrayList activitiRecordDTOS1 = new ArrayList<>(); - //将activitiRecordDTOS数据的ID改为姓名 - for (ActivitiRecordDTO activitiRecordDTO : activitiRecordDTOS) { - ArrayList strings = new ArrayList<>(); - for (String id : Arrays.stream(activitiRecordDTO.getApproverPersons().split(",")).collect(Collectors.toList())) { - XdapUsers XdapUsers = xdapDeptUsersService.selectUserByID(id); - if (ObjectUtils.isNotEmpty(XdapUsers)) { - String username = XdapUsers.getUsername(); - strings.add(username); - } - } - ActivitiRecordDTO activitiRecordDTO1 = new ActivitiRecordDTO(); - BeanUtils.copyProperties(activitiRecordDTO, activitiRecordDTO1); - activitiRecordDTO1.setApproverPersons(String.join(",", strings)); - activitiRecordDTOS1.add(activitiRecordDTO1); + approvedPersonsByNode.get(record.getNodeName()).add(activitiRecordDTO); } - activitiDataAndRecordDTO.setActivitiRecordDTOS(activitiRecordDTOS1); + // 存储未审批的人员信息 + Map> pendingPersonsByNode = new HashMap<>(); + for (ApprovalConfigPojo config : approvalConfigPojos) { + String nodeName = config.getNodeName(); + String assignees = config.getAssignees(); + ActivitiRecordDTO activitiRecordDTO = new ActivitiRecordDTO(); + activitiRecordDTO.setNode(nodeName); + activitiRecordDTO.setApproverPersons(assignees); + activitiRecordDTO.setNodeOrder(config.getNodeOrder()); + activitiRecordDTO.setOperate("待审批"); + // 将逗号分隔的审批人列表转换为数组 + List allAssignees = Arrays.asList(assignees.split(",")); + + // 获取该节点已审批的人员 + List approvedPersons = approvedPersonsByNode.getOrDefault(nodeName, new ArrayList<>()); + List strings = approvedPersons.stream().map(x -> x.getApproverPersons()).collect(Collectors.toList()); + // 找出未审批的人员 + List pending = new ArrayList<>(); + for (String assignee : allAssignees) { + if (!strings.contains(assignee.trim())) { + pending.add(activitiRecordDTO); + } + } + + if (!pending.isEmpty()) { + dtos.add(activitiRecordDTO); + } + } + for (ActivitiRecordDTO dto : dtos) { + System.out.println(dto); + } + System.out.println("-------------"); + // 将所有ActivitiRecordDTO对象按照node节点分组 + Map> dtosByNode = dtos.stream() + .collect(Collectors.groupingBy(ActivitiRecordDTO::getNode)); + + // 遍历dtosByNode生成新的ActivitiRecordDTO,同一节点的审批人放在approverPersons字符串中,所有审批人放在unapprovedPersons中 + List mergedDtos = new ArrayList<>(); + for (Map.Entry> entry : dtosByNode.entrySet()) { + String nodeName = entry.getKey(); + List nodeDtos = entry.getValue(); + + ActivitiRecordDTO mergedDto = new ActivitiRecordDTO(); + mergedDto.setNode(nodeName); + //找到所有审批人 + List collect = approvalConfigPojos.stream().filter(x -> nodeName.equals(x.getNodeName())).collect(Collectors.toList()); + String assignees = ""; + if (ObjectUtils.isNotEmpty(collect)) { + assignees = collect.get(0).getAssignees(); + } + // 分离已审批和未审批的人员 + List approvedPersons = new ArrayList<>(); + List unapprovedPersons = new ArrayList<>(); + StringBuilder stringBuilder = new StringBuilder(); + Date operateTime = null; + for (ActivitiRecordDTO dto : nodeDtos) { + String approver = dto.getApproverPersons(); + String operate = dto.getOperate(); + + if (!"待审批".equals(operate)) { + // 已审批人员 + if (StringUtils.isNotEmpty(approver)) { + List strings = Arrays.asList(approver.split(",")).stream().map(x -> { + XdapUsers xdapUsers = xdapDeptUsersService.selectUserByID(x); + if (ObjectUtils.isNotEmpty(xdapUsers)) { + return xdapUsers.getUsername(); + } else { + return "未知用户名:" + x; + } + }).collect(Collectors.toList()); + approvedPersons.addAll(strings); + stringBuilder.append(strings.get(0) + ":" + dto.getCommon() + "。"); + } + } + + mergedDto.setCommon(stringBuilder.toString()); + mergedDto.setNodeOrder(dto.getNodeOrder()); + + mergedDto.setOperate(dto.getOperate()); + if (ObjectUtils.isNotEmpty(dto.getOperateTime())) { + operateTime = dto.getOperateTime(); + } + } + mergedDto.setOperateTime(operateTime); + + // 设置审批人和未审批人 + if (!approvedPersons.isEmpty()) { + mergedDto.setApproverPersons(String.join(",", approvedPersons)); + }else{ + mergedDto.setApproverPersons(""); + } + + + List strings = Arrays.stream(assignees.split(",")).map(x -> { + XdapUsers xdapUsers = xdapDeptUsersService.selectUserByID(x); + if (ObjectUtils.isNotEmpty(xdapUsers)) { + return xdapUsers.getUsername(); + } else { + return "未知用户名:" + x; + } + }).collect(Collectors.toList()); + if (ObjectUtils.isEmpty(assignees)) { + mergedDto.setUnapprovedPerson(String.join(",", approvedPersons)); + } else { + mergedDto.setUnapprovedPerson(String.join(",", strings)); + } + + // 如果没有任何审批人信息,则跳过 + if (StringUtils.isNotEmpty(mergedDto.getApproverPersons()) || + StringUtils.isNotEmpty(mergedDto.getUnapprovedPerson())) { + mergedDtos.add(mergedDto); + } + } + + // 使用合并后的数据替换原来的dtos + dtos = mergedDtos; + dtos = dtos.stream().sorted(Comparator.comparing(ActivitiRecordDTO::getNodeOrder)).collect(Collectors.toList()); + dtos = dtos.stream().map(x -> { + if ((!x.getUnapprovedPerson().equals(x.getApproverPersons())) && "会签".equals(x.getNode())) { + x.setOperate("待审批"); + } + if (ObjectUtils.isNotEmpty(x.getApproverPersons()) && !"会签".equals(x.getNode()) + && !"REJECT".equals(x.getOperate())) { + x.setOperate("PASS"); + } + return x; + }).collect(Collectors.toList()); + // 已完成审批的节点及人员 +// for (Map.Entry> entry : approvedPersonsByNode.entrySet()) { +// ActivitiRecordDTO activitiRecordDTO = new ActivitiRecordDTO(); +// activitiRecordDTO.setNode(entry.getKey()); +// ArrayList strings = new ArrayList<>(); +// for (String id : entry.getValue()) { +// XdapUsers XdapUsers = xdapDeptUsersService.selectUserByID(id); +// if (ObjectUtils.isNotEmpty(XdapUsers)) { +// String username = XdapUsers.getUsername(); +// strings.add(username); +// } +// } +// activitiRecordDTO.setApproverPersons(String.join(",", strings)); +// +// activitiRecordDTO.setCommon(paramApprovalRecordPojo.getApprovalComment()); +// activitiRecordDTO.setNodeOrder(paramApprovalRecordPojo.getNodeOrder()); +// activitiRecordDTO.setOperateTime(paramApprovalRecordPojo.getOperateTime()); +// activitiRecordDTO.setOperate(paramApprovalRecordPojo.getOperator()); +// activitiRecordDTOS.add(activitiRecordDTO); +// +// System.out.println("节点: " + entry.getKey() + ", 已审批人员: " + String.join(", ", entry.getValue())); +// } + +// // 未完成审批的节点及人员 +// for (Map.Entry> entry : pendingPersonsByNode.entrySet()) { +// System.out.println("节点: " + entry.getKey() + ", 未审批人员: " + String.join(", ", entry.getValue())); +// } + +// +// for (ParamApprovalRecordPojo paramApprovalRecordPojo : paramApprovalRecordPojos) { +// String approverPerson = paramApprovalRecordPojo.getAssignee(); +// ActivitiRecordDTO activitiRecordDTO = new ActivitiRecordDTO(); +// activitiRecordDTO.setNode(paramApprovalRecordPojo.getNodeName()); +// activitiRecordDTO.setApproverPersons(approverPerson); +// activitiRecordDTO.setCommon(paramApprovalRecordPojo.getApprovalComment()); +// activitiRecordDTO.setNodeOrder(paramApprovalRecordPojo.getNodeOrder()); +// activitiRecordDTO.setOperateTime(paramApprovalRecordPojo.getOperateTime()); +// activitiRecordDTO.setOperate(paramApprovalRecordPojo.getOperator()); +// activitiRecordDTOS.add(activitiRecordDTO); +// } +// //找到下一级审批人 +// List engineReviewListPojos = sw.buildFromDatasource("xdap_app_223770822127386625") +// .eq("id", approvalId).doQuery(EngineReviewListPojo.class); +// +// if (ObjectUtils.isNotEmpty(engineReviewListPojos)) { +// EngineReviewListPojo engineReviewListPojo = engineReviewListPojos.get(0); +// activitiDataAndRecordDTO.setApprovalStatus(engineReviewListPojo.getStatusDescription()); +// if (StringUtils.isNotEmpty(engineReviewListPojo.getApproverPersons())) { +// ActivitiRecordDTO recordNextApprover = new ActivitiRecordDTO(); +// recordNextApprover.setApproverPersons(engineReviewListPojo.getApproverPersons()); +// recordNextApprover.setCommon(""); +// recordNextApprover.setNode("待审批"); +// recordNextApprover.setNodeOrder(999); +// activitiRecordDTOS.add(recordNextApprover); +// } +// } +// ArrayList activitiRecordDTOS1 = new ArrayList<>(); +// //将activitiRecordDTOS数据的ID改为姓名 +// for (ActivitiRecordDTO activitiRecordDTO : activitiRecordDTOS) { +// ArrayList strings = new ArrayList<>(); +// for (String id : Arrays.stream(activitiRecordDTO.getApproverPersons().split(",")).collect(Collectors.toList())) { +// XdapUsers XdapUsers = xdapDeptUsersService.selectUserByID(id); +// if (ObjectUtils.isNotEmpty(XdapUsers)) { +// String username = XdapUsers.getUsername(); +// strings.add(username); +// } +// } +// ActivitiRecordDTO activitiRecordDTO1 = new ActivitiRecordDTO(); +// BeanUtils.copyProperties(activitiRecordDTO, activitiRecordDTO1); +// activitiRecordDTO1.setApproverPersons(String.join(",", strings)); +// activitiRecordDTOS1.add(activitiRecordDTO1); +// } + ArrayList arrayList1 = new ArrayList<>(dtos); + EngineReviewListPojo engineReviewListPojos = sw.buildFromDatasource("xdap_app_223770822127386625") + .eq("id", approvalId).doQueryFirst(EngineReviewListPojo.class); + activitiDataAndRecordDTO.setApprovalStatus(engineReviewListPojos.getStatusDescription()); + activitiDataAndRecordDTO.setProcessTitle(engineReviewListPojos.getProcessTopic()); + activitiDataAndRecordDTO.setActivitiRecordDTOS(arrayList1); return activitiDataAndRecordDTO; } diff --git a/src/main/java/com/xdap/self_development/service/impl/EngineParamDetailServiceImpl.java b/src/main/java/com/xdap/self_development/service/impl/EngineParamDetailServiceImpl.java index 0fc25b2..4fe36a5 100644 --- a/src/main/java/com/xdap/self_development/service/impl/EngineParamDetailServiceImpl.java +++ b/src/main/java/com/xdap/self_development/service/impl/EngineParamDetailServiceImpl.java @@ -537,7 +537,7 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService { todoTaskPojo.setDataType(CurrentNodeEnum.REPAIR.getDesc()); todoTaskPojo.setVersionNumber(modelPojo.getVersionNumber()); todoTaskPojo.setOwnerId(filledBy); - todoTaskPojo.setCurrentProcessor(JSON.toJSONString(filledBy)); + todoTaskPojo.setCurrentProcessor(JSON.toJSONString(Arrays.asList(filledBy))); todoTaskPojo.setIsDelete(0); todoTaskPojo.setCreatedBy(ObjectUtils.isNotEmpty(XdapUsers) ? XdapUsers.getUsername() : ""); todoTaskPojos.add(todoTaskPojo); diff --git a/src/main/java/com/xdap/self_development/service/impl/TodoTaskServiceImpl.java b/src/main/java/com/xdap/self_development/service/impl/TodoTaskServiceImpl.java index 05c17bd..95ecc85 100644 --- a/src/main/java/com/xdap/self_development/service/impl/TodoTaskServiceImpl.java +++ b/src/main/java/com/xdap/self_development/service/impl/TodoTaskServiceImpl.java @@ -205,7 +205,7 @@ public class TodoTaskServiceImpl implements TodoTaskService { todoTaskPojo.setDocumentNo(UUID.randomUUID().toString()); todoTaskPojo.setProcessTitle("分发责任人"); todoTaskPojo.setCurrentNode("待分解"); - todoTaskPojo.setCurrentProcessor(JSON.toJSONString(engineParamDetailDTO.getResPersonId())); + todoTaskPojo.setCurrentProcessor(JSON.toJSONString(Arrays.asList(engineParamDetailDTO.getResPersonId()))); todoTaskPojo.setStatusCode(null/*String.valueOf(ParamValueVersionEnum.DRAFT.getCode())*/); todoTaskPojo.setModelName(ObjectUtils.isNotEmpty(modelPojo) ? modelPojo.getModelName() : ""); todoTaskPojo.setModelId(modelId);