修改:流程节点问题修改

This commit is contained in:
zjh 2025-12-17 18:27:49 +08:00
parent efeb8839b9
commit 56ba7464b8

View File

@ -284,138 +284,154 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
} }
@Override @Override
public ApprovalFlowView getApprovalProcess(ApprovalFlowForm form) { public ApprovalFlowView getApprovalProcess(
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);
approvalFlowView.setExplanation(flow.getExplanation());
List<ApprovalNodeView> proofread = getNodeList(form.getFlowId(), "PROOFREAD");
if (proofread.isEmpty()) {
List<ApprovalNodeView> list = new ArrayList<>();
StringBuilder usernames = new StringBuilder();
JSON.parseArray(flow.getProofreadUsers()).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("APPROVING");
approvalNodeView.setUserName(usernames.toString());
approvalNodeView.setResult("APPROVING");
approvalNodeView.setApprovalTime(Timestamp.valueOf(LocalDateTime.now()));
list.add(approvalNodeView);
approvalFlowView.setProofreadNodes(list); approvalFlowView.setExplanation(flow.getExplanation());
approvalFlowView.setFlowStatus(flow.getFlowStatus());
// 初始化所有节点列表
approvalFlowView.setProofreadNodes(new ArrayList<>());
approvalFlowView.setReviewNodes(new ArrayList<>()); approvalFlowView.setReviewNodes(new ArrayList<>());
approvalFlowView.setCountersignNodes(new ArrayList<>()); approvalFlowView.setCountersignNodes(new ArrayList<>());
approvalFlowView.setApproveNodes(new ArrayList<>()); approvalFlowView.setApproveNodes(new ArrayList<>());
approvalFlowView.setFlowStatus(flow.getFlowStatus()); // 第一步获取校对节点
return approvalFlowView; List<ApprovalNodeView> proofread = getNodeList(form.getFlowId(), "PROOFREAD");
} if (!proofread.isEmpty()) {
approvalFlowView.setProofreadNodes(proofread); approvalFlowView.setProofreadNodes(proofread);
} else if ("APPROVING".equals(flow.getFlowStatus())) {
// 如果流程还在审批中且没有校对记录添加待处理节点
approvalFlowView.setProofreadNodes(createPendingNodeList(flow.getProofreadUsers(), "PROOFREAD"));
return approvalFlowView;
}
// 第二步如果流程还在审批中继续查询审阅节点
if (!"APPROVING".equals(flow.getFlowStatus())) {
return approvalFlowView;
}
List<ApprovalNodeView> review = getNodeList(flow.getId(), "REVIEW"); List<ApprovalNodeView> review = getNodeList(flow.getId(), "REVIEW");
if (review.isEmpty()) { if (!review.isEmpty()) {
List<ApprovalNodeView> list = new ArrayList<>();
StringBuilder usernames = new StringBuilder();
JSON.parseArray(flow.getReviewUsers()).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("APPROVING");
approvalNodeView.setUserName(usernames.toString());
approvalNodeView.setResult("APPROVING");
approvalNodeView.setApprovalTime(Timestamp.valueOf(LocalDateTime.now()));
list.add(approvalNodeView);
approvalFlowView.setReviewNodes(list);
approvalFlowView.setCountersignNodes(new ArrayList<>());
approvalFlowView.setApproveNodes(new ArrayList<>());
approvalFlowView.setFlowStatus(flow.getFlowStatus());
return approvalFlowView;
}
approvalFlowView.setReviewNodes(review); approvalFlowView.setReviewNodes(review);
} else {
// 添加待处理的审阅节点
approvalFlowView.setReviewNodes(createPendingNodeList(flow.getReviewUsers(), "REVIEW"));
return approvalFlowView;
}
if (JSON.parseArray(flow.getCountersignUsers()).toJavaList(String.class).isEmpty()) { // 第三步如果流程还在审批中继续查询会签节点
approvalFlowView.setCountersignNodes(new ArrayList<>()); if (!"APPROVING".equals(flow.getFlowStatus())) {
} else { return approvalFlowView;
}
List<String> countersignUsers = JSON.parseArray(flow.getCountersignUsers()).toJavaList(String.class);
if (!countersignUsers.isEmpty()) {
List<ApprovalNodeView> countersign = getNodeList(flow.getId(), "COUNTERSIGN"); List<ApprovalNodeView> countersign = getNodeList(flow.getId(), "COUNTERSIGN");
if (countersign.isEmpty()) { if (countersign.isEmpty()) {
List<ApprovalNodeView> list = new ArrayList<>(); // 添加待处理的会签节点
StringBuilder usernames = new StringBuilder(); approvalFlowView.setCountersignNodes(createPendingNodeList(flow.getCountersignUsers(), "COUNTERSIGN"));
JSON.parseArray(flow.getCountersignUsers()).toJavaList(String.class).forEach(id -> { return approvalFlowView;
ApprovalXdapUsers user = bd.getBusinessDatabase() } else if (countersign.size() < countersignUsers.size()) {
.eq("id", id) // 部分会签完成添加未处理的会签节点
.doQueryFirst(ApprovalXdapUsers.class); approvalFlowView.setCountersignNodes(getPartialCountersignNodes(countersign, countersignUsers));
usernames.append(user.getUsername()).append(" ");
});
ApprovalNodeView approvalNodeView = new ApprovalNodeView();
approvalNodeView.setNode("APPROVING");
approvalNodeView.setUserName(usernames.toString());
approvalNodeView.setResult("APPROVING");
approvalNodeView.setApprovalTime(Timestamp.valueOf(LocalDateTime.now()));
list.add(approvalNodeView);
approvalFlowView.setCountersignNodes(list);
approvalFlowView.setApproveNodes(new ArrayList<>());
approvalFlowView.setFlowStatus(flow.getFlowStatus());
return approvalFlowView; return approvalFlowView;
} else { } else {
if (countersign.size() == JSON.parseArray(flow.getCountersignUsers()).size()) {
approvalFlowView.setCountersignNodes(countersign); approvalFlowView.setCountersignNodes(countersign);
} else { }
List<String> containedIds = countersign.stream().map(ApprovalNodeView::getUserId).collect(Collectors.toList()); }
List<String> uncontainedIds = JSON.parseArray(flow.getCountersignUsers()).toJavaList(String.class).stream().filter(id -> !containedIds.contains(id)).collect(Collectors.toList());
StringBuilder usernames = new StringBuilder(); // 第四步如果流程还在审批中继续查询批准节点
uncontainedIds.forEach(id -> { if (!"APPROVING".equals(flow.getFlowStatus())) {
ApprovalXdapUsers user = bd.getBusinessDatabase()
.eq("id", id)
.doQueryFirst(ApprovalXdapUsers.class);
usernames.append(user.getUsername()).append(" ");
});
ApprovalNodeView approvalNodeView = new ApprovalNodeView();
approvalNodeView.setNode("APPROVING");
approvalNodeView.setUserName(usernames.toString());
approvalNodeView.setResult("APPROVING");
approvalNodeView.setApprovalTime(Timestamp.valueOf(LocalDateTime.now()));
countersign.add(approvalNodeView);
approvalFlowView.setCountersignNodes(countersign);
approvalFlowView.setApproveNodes(new ArrayList<>());
return approvalFlowView; return approvalFlowView;
} }
}
}
List<ApprovalNodeView> approve = getNodeList(flow.getId(), "APPROVE"); List<ApprovalNodeView> approve = getNodeList(flow.getId(), "APPROVE");
if (approve.isEmpty()) { if (!approve.isEmpty()) {
approvalFlowView.setApproveNodes(approve);
} else {
// 添加待处理的批准节点
approvalFlowView.setApproveNodes(createPendingNodeList(flow.getApproveUsers(), "APPROVE"));
}
return approvalFlowView;
}
/**
* 创建待处理节点列表
*/
private List<ApprovalNodeView> createPendingNodeList(
String userJson, String nodeType
) {
List<ApprovalNodeView> list = new ArrayList<>(); List<ApprovalNodeView> list = new ArrayList<>();
StringBuilder usernames = new StringBuilder(); StringBuilder usernames = new StringBuilder();
JSON.parseArray(flow.getApproveUsers()).toJavaList(String.class).forEach(id -> {
JSON.parseArray(userJson).toJavaList(String.class).forEach(id -> {
ApprovalXdapUsers user = bd.getBusinessDatabase() ApprovalXdapUsers user = bd.getBusinessDatabase()
.eq("id", id) .eq("id", id)
.doQueryFirst(ApprovalXdapUsers.class); .doQueryFirst(ApprovalXdapUsers.class);
usernames.append(user.getUsername()).append(" "); usernames.append(user.getUsername()).append(" ");
}); });
ApprovalNodeView approvalNodeView = new ApprovalNodeView(); ApprovalNodeView approvalNodeView = new ApprovalNodeView();
approvalNodeView.setNode("APPROVING"); approvalNodeView.setNode(nodeType);
approvalNodeView.setUserName(usernames.toString()); approvalNodeView.setUserName(usernames.toString().trim());
approvalNodeView.setResult("APPROVING"); approvalNodeView.setResult("APPROVING");
approvalNodeView.setApprovalTime(Timestamp.valueOf(LocalDateTime.now())); approvalNodeView.setApprovalTime(Timestamp.valueOf(LocalDateTime.now()));
list.add(approvalNodeView); list.add(approvalNodeView);
approvalFlowView.setApproveNodes(list);
approvalFlowView.setFlowStatus(flow.getFlowStatus());
return approvalFlowView;
}
approvalFlowView.setApproveNodes(approve);
approvalFlowView.setFlowStatus(flow.getFlowStatus()); return list;
return approvalFlowView; }
/**
* 获取部分完成的会签节点包含已处理和未处理的
*/
private List<ApprovalNodeView> getPartialCountersignNodes(
List<ApprovalNodeView> existingCountersign,
List<String> allCountersignUserIds
) {
List<String> completedUserIds = existingCountersign.stream()
.map(ApprovalNodeView::getUserId)
.collect(Collectors.toList());
// 找出未处理的用户ID
List<String> 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<ApprovalNodeView> allNodes = new ArrayList<>(existingCountersign);
allNodes.add(pendingNode);
return allNodes;
} }
@Override @Override