修改:流程节点问题修改
This commit is contained in:
parent
efeb8839b9
commit
56ba7464b8
@ -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
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user