Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
b04db8080f
@ -284,140 +284,156 @@ 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);
|
||||
|
||||
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<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.setReviewNodes(new ArrayList<>());
|
||||
approvalFlowView.setCountersignNodes(new ArrayList<>());
|
||||
approvalFlowView.setApproveNodes(new ArrayList<>());
|
||||
|
||||
approvalFlowView.setFlowStatus(flow.getFlowStatus());
|
||||
if (!proofread.isEmpty()) {
|
||||
approvalFlowView.setProofreadNodes(proofread);
|
||||
} else if ("APPROVING".equals(flow.getFlowStatus())) {
|
||||
// 如果流程还在审批中且没有校对记录,添加待处理节点
|
||||
approvalFlowView.setProofreadNodes(createPendingNodeList(flow.getProofreadUsers(), "PROOFREAD"));
|
||||
return approvalFlowView;
|
||||
}
|
||||
approvalFlowView.setProofreadNodes(proofread);
|
||||
|
||||
// 第二步:如果流程还在审批中,继续查询审阅节点
|
||||
if (!"APPROVING".equals(flow.getFlowStatus())) {
|
||||
return approvalFlowView;
|
||||
}
|
||||
|
||||
List<ApprovalNodeView> review = getNodeList(flow.getId(), "REVIEW");
|
||||
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());
|
||||
if (!review.isEmpty()) {
|
||||
approvalFlowView.setReviewNodes(review);
|
||||
} else {
|
||||
// 添加待处理的审阅节点
|
||||
approvalFlowView.setReviewNodes(createPendingNodeList(flow.getReviewUsers(), "REVIEW"));
|
||||
return approvalFlowView;
|
||||
}
|
||||
approvalFlowView.setReviewNodes(review);
|
||||
|
||||
if (JSON.parseArray(flow.getCountersignUsers()).toJavaList(String.class).isEmpty()) {
|
||||
approvalFlowView.setCountersignNodes(new ArrayList<>());
|
||||
} else {
|
||||
// 第三步:如果流程还在审批中,继续查询会签节点
|
||||
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()) {
|
||||
List<ApprovalNodeView> list = new ArrayList<>();
|
||||
StringBuilder usernames = new StringBuilder();
|
||||
JSON.parseArray(flow.getCountersignUsers()).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.setCountersignNodes(list);
|
||||
approvalFlowView.setApproveNodes(new ArrayList<>());
|
||||
approvalFlowView.setFlowStatus(flow.getFlowStatus());
|
||||
// 添加待处理的会签节点
|
||||
approvalFlowView.setCountersignNodes(createPendingNodeList(flow.getCountersignUsers(), "COUNTERSIGN"));
|
||||
return approvalFlowView;
|
||||
} else if (countersign.size() < countersignUsers.size()) {
|
||||
// 部分会签完成,添加未处理的会签节点
|
||||
approvalFlowView.setCountersignNodes(getPartialCountersignNodes(countersign, countersignUsers));
|
||||
return approvalFlowView;
|
||||
} else {
|
||||
if (countersign.size() == JSON.parseArray(flow.getCountersignUsers()).size()) {
|
||||
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 -> {
|
||||
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;
|
||||
}
|
||||
approvalFlowView.setCountersignNodes(countersign);
|
||||
}
|
||||
}
|
||||
|
||||
List<ApprovalNodeView> approve = getNodeList(flow.getId(), "APPROVE");
|
||||
if (approve.isEmpty()) {
|
||||
List<ApprovalNodeView> list = new ArrayList<>();
|
||||
StringBuilder usernames = new StringBuilder();
|
||||
JSON.parseArray(flow.getApproveUsers()).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.setApproveNodes(list);
|
||||
approvalFlowView.setFlowStatus(flow.getFlowStatus());
|
||||
// 第四步:如果流程还在审批中,继续查询批准节点
|
||||
if (!"APPROVING".equals(flow.getFlowStatus())) {
|
||||
return approvalFlowView;
|
||||
}
|
||||
approvalFlowView.setApproveNodes(approve);
|
||||
|
||||
approvalFlowView.setFlowStatus(flow.getFlowStatus());
|
||||
List<ApprovalNodeView> approve = getNodeList(flow.getId(), "APPROVE");
|
||||
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<>();
|
||||
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);
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取部分完成的会签节点(包含已处理和未处理的)
|
||||
*/
|
||||
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
|
||||
public void handleReturn(HandleApprovalRequest request) {
|
||||
ApprovalFlow flow = bd.getBusinessDatabase()
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user