修改:流程节点问题小修改

This commit is contained in:
zjh 2025-12-18 09:46:20 +08:00
parent a5294f6aec
commit 39da3ad6fe

View File

@ -284,154 +284,136 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
} }
@Override @Override
public ApprovalFlowView getApprovalProcess( public ApprovalFlowView getApprovalProcess(ApprovalFlowForm form) {
ApprovalFlowForm form
) {
ApprovalFlowView approvalFlowView = new ApprovalFlowView(); ApprovalFlowView approvalFlowView = new ApprovalFlowView();
// 查询流程基本信息
ApprovalFlow flow = bd.getBusinessDatabase() ApprovalFlow flow = bd.getBusinessDatabase()
.eq("id", form.getFlowId()) .eq("id", form.getFlowId())
.eq("flow_type", 1) .eq("flow_type", 1)
.doQueryFirst(ApprovalFlow.class); .doQueryFirst(ApprovalFlow.class);
if (flow == null) {
return approvalFlowView;
}
approvalFlowView.setExplanation(flow.getExplanation()); approvalFlowView.setExplanation(flow.getExplanation());
approvalFlowView.setFlowStatus(flow.getFlowStatus()); approvalFlowView.setFlowStatus(flow.getFlowStatus());
// 初始化所有节点列表
approvalFlowView.setProofreadNodes(new ArrayList<>());
approvalFlowView.setReviewNodes(new ArrayList<>());
approvalFlowView.setCountersignNodes(new ArrayList<>());
approvalFlowView.setApproveNodes(new ArrayList<>());
// 第一步获取校对节点
List<ApprovalNodeView> 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())) { if (!"APPROVING".equals(flow.getFlowStatus())) {
setAllCompletedNodes(approvalFlowView, flow);
return approvalFlowView; return approvalFlowView;
} }
processApprovalNodes(approvalFlowView, flow);
List<ApprovalNodeView> 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<String> countersignUsers = JSON.parseArray(flow.getCountersignUsers()).toJavaList(String.class);
if (!countersignUsers.isEmpty()) {
List<ApprovalNodeView> 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<ApprovalNodeView> approve = getNodeList(flow.getId(), "APPROVE");
if (!approve.isEmpty()) {
approvalFlowView.setApproveNodes(approve);
} else {
// 添加待处理的批准节点
approvalFlowView.setApproveNodes(createPendingNodeList(flow.getApproveUsers(), "APPROVE"));
}
return approvalFlowView; return approvalFlowView;
} }
/** private void setAllCompletedNodes(ApprovalFlowView view, ApprovalFlow flow) {
* 创建待处理节点列表 view.setProofreadNodes(getNodeList(flow.getId(), "PROOFREAD"));
*/ view.setReviewNodes(getNodeList(flow.getId(), "REVIEW"));
private List<ApprovalNodeView> createPendingNodeList( view.setCountersignNodes(getNodeList(flow.getId(), "COUNTERSIGN"));
String userJson, String nodeType view.setApproveNodes(getNodeList(flow.getId(), "APPROVE"));
) { }
private void processApprovalNodes(ApprovalFlowView view, ApprovalFlow flow) {
// 处理校对节点
List<ApprovalNodeView> 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<ApprovalNodeView> 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<String> countersignUserIds = JSON.parseArray(flow.getCountersignUsers()).toJavaList(String.class);
if (countersignUserIds.isEmpty()) {
view.setCountersignNodes(new ArrayList<>());
} else {
List<ApprovalNodeView> 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<String> completedUserIds = countersignNodes.stream()
.map(ApprovalNodeView::getUserId)
.collect(Collectors.toList());
List<String> 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<ApprovalNodeView> approveNodes = getNodeList(flow.getId(), "APPROVE");
if (approveNodes.isEmpty()) {
view.setApproveNodes(createApprovingNode(flow.getApproveUsers()));
} else {
view.setApproveNodes(approveNodes);
}
}
private List<ApprovalNodeView> createApprovingNode(String userJsonArray) {
List<ApprovalNodeView> list = new ArrayList<>(); List<ApprovalNodeView> list = new ArrayList<>();
if (userJsonArray == null || userJsonArray.trim().isEmpty()) {
return list;
}
List<String> userIds = JSON.parseArray(userJsonArray).toJavaList(String.class);
if (userIds.isEmpty()) {
return list;
}
Map<String, ApprovalXdapUsers> usersMap = batchQueryUsers(userIds);
StringBuilder usernames = new StringBuilder(); StringBuilder usernames = new StringBuilder();
for (String id : userIds) {
JSON.parseArray(userJson).toJavaList(String.class).forEach(id -> { ApprovalXdapUsers user = usersMap.get(id);
ApprovalXdapUsers user = bd.getBusinessDatabase() if (user != null) {
.eq("id", id) usernames.append(user.getUsername()).append(" ");
.doQueryFirst(ApprovalXdapUsers.class); }
usernames.append(user.getUsername()).append(" "); }
}); if (usernames.length() > 0) {
ApprovalNodeView node = new ApprovalNodeView();
ApprovalNodeView approvalNodeView = new ApprovalNodeView(); node.setNode("APPROVING");
approvalNodeView.setNode(nodeType); node.setUserName(usernames.toString().trim());
approvalNodeView.setUserName(usernames.toString().trim()); node.setResult("APPROVING");
approvalNodeView.setResult("APPROVING"); node.setApprovalTime(Timestamp.valueOf(LocalDateTime.now()));
approvalNodeView.setApprovalTime(Timestamp.valueOf(LocalDateTime.now())); list.add(node);
list.add(approvalNodeView); }
return list; return list;
} }
/** private Map<String, ApprovalXdapUsers> batchQueryUsers(List<String> userIds) {
* 获取部分完成的会签节点包含已处理和未处理的 if (userIds == null || userIds.isEmpty()) {
*/ return new HashMap<>();
private List<ApprovalNodeView> getPartialCountersignNodes( }
List<ApprovalNodeView> existingCountersign,
List<String> allCountersignUserIds
) {
List<String> completedUserIds = existingCountersign.stream() List<ApprovalXdapUsers> users = bd.getBusinessDatabase()
.map(ApprovalNodeView::getUserId) .in("id", userIds)
.collect(Collectors.toList()); .doQuery(ApprovalXdapUsers.class);
// 找出未处理的用户ID return users.stream()
List<String> pendingUserIds = allCountersignUserIds.stream() .collect(Collectors.toMap(ApprovalXdapUsers::getId, user -> user));
.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<ApprovalNodeView> allNodes = new ArrayList<>(existingCountersign);
allNodes.add(pendingNode);
return allNodes;
} }
@Override @Override
@ -480,7 +462,6 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
.eq("id", approvalNodeView.getUserId()) .eq("id", approvalNodeView.getUserId())
.doQueryFirst(ApprovalXdapUsers.class); .doQueryFirst(ApprovalXdapUsers.class);
approvalNodeView.setUserName(user.getUsername()); approvalNodeView.setUserName(user.getUsername());
approvalNodeView.setUserId(null);
}); });
} }
return list; return list;