From 39da3ad6fe1238e0638fdbbcd7360d109b8566ff Mon Sep 17 00:00:00 2001 From: zjh <15615273395@163.com> Date: Thu, 18 Dec 2025 09:46:20 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=EF=BC=9A=E6=B5=81=E7=A8=8B?= =?UTF-8?q?=E8=8A=82=E7=82=B9=E9=97=AE=E9=A2=98=E5=B0=8F=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/TemplateApprovalServiceImpl.java | 237 ++++++++---------- 1 file changed, 109 insertions(+), 128 deletions(-) diff --git a/src/main/java/com/xdap/self_development/service/impl/TemplateApprovalServiceImpl.java b/src/main/java/com/xdap/self_development/service/impl/TemplateApprovalServiceImpl.java index a59ae3c..9e32d3c 100644 --- a/src/main/java/com/xdap/self_development/service/impl/TemplateApprovalServiceImpl.java +++ b/src/main/java/com/xdap/self_development/service/impl/TemplateApprovalServiceImpl.java @@ -284,154 +284,136 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService { } @Override - public ApprovalFlowView getApprovalProcess( - ApprovalFlowForm form - ) { + public ApprovalFlowView getApprovalProcess(ApprovalFlowForm form) { ApprovalFlowView approvalFlowView = new ApprovalFlowView(); - - // 查询流程基本信息 ApprovalFlow flow = bd.getBusinessDatabase() .eq("id", form.getFlowId()) .eq("flow_type", 1) .doQueryFirst(ApprovalFlow.class); + if (flow == null) { + return approvalFlowView; + } approvalFlowView.setExplanation(flow.getExplanation()); approvalFlowView.setFlowStatus(flow.getFlowStatus()); - - // 初始化所有节点列表 - approvalFlowView.setProofreadNodes(new ArrayList<>()); - approvalFlowView.setReviewNodes(new ArrayList<>()); - approvalFlowView.setCountersignNodes(new ArrayList<>()); - approvalFlowView.setApproveNodes(new ArrayList<>()); - - // 第一步:获取校对节点 - List proofread = getNodeList(form.getFlowId(), "PROOFREAD"); - if (!proofread.isEmpty()) { - approvalFlowView.setProofreadNodes(proofread); - } else if ("APPROVING".equals(flow.getFlowStatus())) { - // 如果流程还在审批中且没有校对记录,添加待处理节点 - approvalFlowView.setProofreadNodes(createPendingNodeList(flow.getProofreadUsers(), "PROOFREAD")); - return approvalFlowView; - } - - // 第二步:如果流程还在审批中,继续查询审阅节点 if (!"APPROVING".equals(flow.getFlowStatus())) { + setAllCompletedNodes(approvalFlowView, flow); return approvalFlowView; } - - List review = getNodeList(flow.getId(), "REVIEW"); - if (!review.isEmpty()) { - approvalFlowView.setReviewNodes(review); - } else { - // 添加待处理的审阅节点 - approvalFlowView.setReviewNodes(createPendingNodeList(flow.getReviewUsers(), "REVIEW")); - return approvalFlowView; - } - - // 第三步:如果流程还在审批中,继续查询会签节点 - if (!"APPROVING".equals(flow.getFlowStatus())) { - return approvalFlowView; - } - - List countersignUsers = JSON.parseArray(flow.getCountersignUsers()).toJavaList(String.class); - if (!countersignUsers.isEmpty()) { - List countersign = getNodeList(flow.getId(), "COUNTERSIGN"); - - if (countersign.isEmpty()) { - // 添加待处理的会签节点 - approvalFlowView.setCountersignNodes(createPendingNodeList(flow.getCountersignUsers(), "COUNTERSIGN")); - return approvalFlowView; - } else if (countersign.size() < countersignUsers.size()) { - // 部分会签完成,添加未处理的会签节点 - approvalFlowView.setCountersignNodes(getPartialCountersignNodes(countersign, countersignUsers)); - return approvalFlowView; - } else { - approvalFlowView.setCountersignNodes(countersign); - } - } - - // 第四步:如果流程还在审批中,继续查询批准节点 - if (!"APPROVING".equals(flow.getFlowStatus())) { - return approvalFlowView; - } - - List approve = getNodeList(flow.getId(), "APPROVE"); - if (!approve.isEmpty()) { - approvalFlowView.setApproveNodes(approve); - } else { - // 添加待处理的批准节点 - approvalFlowView.setApproveNodes(createPendingNodeList(flow.getApproveUsers(), "APPROVE")); - } - + processApprovalNodes(approvalFlowView, flow); return approvalFlowView; } - /** - * 创建待处理节点列表 - */ - private List createPendingNodeList( - String userJson, String nodeType - ) { + private void setAllCompletedNodes(ApprovalFlowView view, ApprovalFlow flow) { + view.setProofreadNodes(getNodeList(flow.getId(), "PROOFREAD")); + view.setReviewNodes(getNodeList(flow.getId(), "REVIEW")); + view.setCountersignNodes(getNodeList(flow.getId(), "COUNTERSIGN")); + view.setApproveNodes(getNodeList(flow.getId(), "APPROVE")); + } + + private void processApprovalNodes(ApprovalFlowView view, ApprovalFlow flow) { + // 处理校对节点 + List proofreadNodes = getNodeList(flow.getId(), "PROOFREAD"); + if (proofreadNodes.isEmpty()) { + view.setProofreadNodes(createApprovingNode(flow.getProofreadUsers())); + view.setReviewNodes(new ArrayList<>()); + view.setCountersignNodes(new ArrayList<>()); + view.setApproveNodes(new ArrayList<>()); + return; + } + view.setProofreadNodes(proofreadNodes); + + // 处理审核节点 + List reviewNodes = getNodeList(flow.getId(), "REVIEW"); + if (reviewNodes.isEmpty()) { + view.setReviewNodes(createApprovingNode(flow.getReviewUsers())); + view.setCountersignNodes(new ArrayList<>()); + view.setApproveNodes(new ArrayList<>()); + return; + } + view.setReviewNodes(reviewNodes); + + // 处理会签节点 + List countersignUserIds = JSON.parseArray(flow.getCountersignUsers()).toJavaList(String.class); + if (countersignUserIds.isEmpty()) { + view.setCountersignNodes(new ArrayList<>()); + } else { + List countersignNodes = getNodeList(flow.getId(), "COUNTERSIGN"); + if (countersignNodes.isEmpty()) { + view.setCountersignNodes(createApprovingNode(flow.getCountersignUsers())); + view.setApproveNodes(new ArrayList<>()); + return; + } else { + if (countersignNodes.size() == countersignUserIds.size()) { + view.setCountersignNodes(countersignNodes); + } else { + List completedUserIds = countersignNodes.stream() + .map(ApprovalNodeView::getUserId) + .collect(Collectors.toList()); + + List pendingUserIds = countersignUserIds.stream() + .filter(id -> !completedUserIds.contains(id)) + .collect(Collectors.toList()); + + if (!pendingUserIds.isEmpty()) { + countersignNodes.addAll(createApprovingNode(JSON.toJSONString(pendingUserIds))); + } + view.setCountersignNodes(countersignNodes); + view.setApproveNodes(new ArrayList<>()); + return; + } + } + } + + List approveNodes = getNodeList(flow.getId(), "APPROVE"); + if (approveNodes.isEmpty()) { + view.setApproveNodes(createApprovingNode(flow.getApproveUsers())); + } else { + view.setApproveNodes(approveNodes); + } + } + + private List createApprovingNode(String userJsonArray) { List list = new ArrayList<>(); + + if (userJsonArray == null || userJsonArray.trim().isEmpty()) { + return list; + } + + List userIds = JSON.parseArray(userJsonArray).toJavaList(String.class); + if (userIds.isEmpty()) { + return list; + } + Map usersMap = batchQueryUsers(userIds); StringBuilder usernames = new StringBuilder(); - - JSON.parseArray(userJson).toJavaList(String.class).forEach(id -> { - ApprovalXdapUsers user = bd.getBusinessDatabase() - .eq("id", id) - .doQueryFirst(ApprovalXdapUsers.class); - usernames.append(user.getUsername()).append(" "); - }); - - ApprovalNodeView approvalNodeView = new ApprovalNodeView(); - approvalNodeView.setNode(nodeType); - approvalNodeView.setUserName(usernames.toString().trim()); - approvalNodeView.setResult("APPROVING"); - approvalNodeView.setApprovalTime(Timestamp.valueOf(LocalDateTime.now())); - list.add(approvalNodeView); - + for (String id : userIds) { + ApprovalXdapUsers user = usersMap.get(id); + if (user != null) { + usernames.append(user.getUsername()).append(" "); + } + } + if (usernames.length() > 0) { + ApprovalNodeView node = new ApprovalNodeView(); + node.setNode("APPROVING"); + node.setUserName(usernames.toString().trim()); + node.setResult("APPROVING"); + node.setApprovalTime(Timestamp.valueOf(LocalDateTime.now())); + list.add(node); + } return list; } - /** - * 获取部分完成的会签节点(包含已处理和未处理的) - */ - private List getPartialCountersignNodes( - List existingCountersign, - List allCountersignUserIds - ) { + private Map batchQueryUsers(List userIds) { + if (userIds == null || userIds.isEmpty()) { + return new HashMap<>(); + } - List completedUserIds = existingCountersign.stream() - .map(ApprovalNodeView::getUserId) - .collect(Collectors.toList()); + List users = bd.getBusinessDatabase() + .in("id", userIds) + .doQuery(ApprovalXdapUsers.class); - // 找出未处理的用户ID - List pendingUserIds = allCountersignUserIds.stream() - .filter(id -> !completedUserIds.contains(id)) - .collect(Collectors.toList()); - - // 获取未处理用户的用户名 - StringBuilder pendingUsernames = new StringBuilder(); - pendingUserIds.forEach(id -> { - ApprovalXdapUsers user = bd.getBusinessDatabase() - .eq("id", id) - .doQueryFirst(ApprovalXdapUsers.class); - if (user != null) { - pendingUsernames.append(user.getUsername()).append(" "); - } - }); - - // 创建待处理节点 - ApprovalNodeView pendingNode = new ApprovalNodeView(); - pendingNode.setNode("COUNTERSIGN"); - pendingNode.setUserName(pendingUsernames.toString().trim()); - pendingNode.setResult("APPROVING"); - pendingNode.setApprovalTime(Timestamp.valueOf(LocalDateTime.now())); - - // 合并已处理和待处理节点 - List allNodes = new ArrayList<>(existingCountersign); - allNodes.add(pendingNode); - - return allNodes; + return users.stream() + .collect(Collectors.toMap(ApprovalXdapUsers::getId, user -> user)); } @Override @@ -480,7 +462,6 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService { .eq("id", approvalNodeView.getUserId()) .doQueryFirst(ApprovalXdapUsers.class); approvalNodeView.setUserName(user.getUsername()); - approvalNodeView.setUserId(null); }); } return list;