【代码评审】BPM:子流程的想法
This commit is contained in:
parent
4364ef09c5
commit
045fb584d2
|
@ -148,6 +148,7 @@ public class BpmProcessInstanceController {
|
||||||
processDefinition, processDefinitionInfo, startUser, dept));
|
processDefinition, processDefinitionInfo, startUser, dept));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO @lesan:【子流程】子流程如果取消,主流程应该是通过、还是不通过哈?还是禁用掉子流程的取消?
|
||||||
@DeleteMapping("/cancel-by-start-user")
|
@DeleteMapping("/cancel-by-start-user")
|
||||||
@Operation(summary = "用户取消流程实例", description = "取消发起的流程")
|
@Operation(summary = "用户取消流程实例", description = "取消发起的流程")
|
||||||
@PreAuthorize("@ss.hasPermission('bpm:process-instance:cancel')")
|
@PreAuthorize("@ss.hasPermission('bpm:process-instance:cancel')")
|
||||||
|
|
|
@ -19,6 +19,7 @@ import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
|
||||||
import com.google.common.annotations.VisibleForTesting;
|
import com.google.common.annotations.VisibleForTesting;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.flowable.bpmn.model.BpmnModel;
|
import org.flowable.bpmn.model.BpmnModel;
|
||||||
|
import org.flowable.bpmn.model.CallActivity;
|
||||||
import org.flowable.bpmn.model.FlowElement;
|
import org.flowable.bpmn.model.FlowElement;
|
||||||
import org.flowable.bpmn.model.UserTask;
|
import org.flowable.bpmn.model.UserTask;
|
||||||
import org.flowable.engine.delegate.DelegateExecution;
|
import org.flowable.engine.delegate.DelegateExecution;
|
||||||
|
@ -129,8 +130,12 @@ public class BpmTaskCandidateInvoker {
|
||||||
|
|
||||||
public Set<Long> calculateUsersByActivity(BpmnModel bpmnModel, String activityId,
|
public Set<Long> calculateUsersByActivity(BpmnModel bpmnModel, String activityId,
|
||||||
Long startUserId, String processDefinitionId, Map<String, Object> processVariables) {
|
Long startUserId, String processDefinitionId, Map<String, Object> processVariables) {
|
||||||
// 审批类型非人工审核时,不进行计算候选人。原因是:后续会自动通过、不通过
|
// 如果是 CallActivity 子流程,不进行计算候选人
|
||||||
FlowElement flowElement = BpmnModelUtils.getFlowElementById(bpmnModel, activityId);
|
FlowElement flowElement = BpmnModelUtils.getFlowElementById(bpmnModel, activityId);
|
||||||
|
if (flowElement instanceof CallActivity) {
|
||||||
|
return new HashSet<>();
|
||||||
|
}
|
||||||
|
// 审批类型非人工审核时,不进行计算候选人。原因是:后续会自动通过、不通过
|
||||||
Integer approveType = BpmnModelUtils.parseApproveType(flowElement);
|
Integer approveType = BpmnModelUtils.parseApproveType(flowElement);
|
||||||
if (ObjectUtils.equalsAny(approveType,
|
if (ObjectUtils.equalsAny(approveType,
|
||||||
BpmUserTaskApproveTypeEnum.AUTO_APPROVE.getType(),
|
BpmUserTaskApproveTypeEnum.AUTO_APPROVE.getType(),
|
||||||
|
|
|
@ -390,9 +390,9 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
|
||||||
HistoricProcessInstance historicProcessInstance, Integer processInstanceStatus,
|
HistoricProcessInstance historicProcessInstance, Integer processInstanceStatus,
|
||||||
List<HistoricActivityInstance> activities, List<HistoricTaskInstance> tasks) {
|
List<HistoricActivityInstance> activities, List<HistoricTaskInstance> tasks) {
|
||||||
// 遍历 tasks 列表,只处理已结束的 UserTask
|
// 遍历 tasks 列表,只处理已结束的 UserTask
|
||||||
// 为什么不通过 activities 呢?因为,加签场景下,它只存在于 tasks,没有 activities,导致如果遍历 activities
|
// 为什么不通过 activities 呢?因为,加签场景下,它只存在于 tasks,没有 activities,导致如果遍历 activities 的话,它无法成为一个节点
|
||||||
// 的话,它无法成为一个节点
|
// TODO @芋艿:子流程只有activity,这里获取不到已结束的子流程;
|
||||||
// TODO @芋艿:子流程只有activity,这里获取不到已结束的子流程;TODO @lesan:这个会导致timeline不会展示已结束的子流程
|
// TODO @lesan:【子流程】基于 activities 查询出 usertask、callactivity,然后拼接?如果是子流程,就是可以点击过去?
|
||||||
List<HistoricTaskInstance> endTasks = filterList(tasks, task -> task.getEndTime() != null);
|
List<HistoricTaskInstance> endTasks = filterList(tasks, task -> task.getEndTime() != null);
|
||||||
List<ActivityNode> approvalNodes = convertList(endTasks, task -> {
|
List<ActivityNode> approvalNodes = convertList(endTasks, task -> {
|
||||||
FlowElement flowNode = BpmnModelUtils.getFlowElementById(bpmnModel, task.getTaskDefinitionKey());
|
FlowElement flowNode = BpmnModelUtils.getFlowElementById(bpmnModel, task.getTaskDefinitionKey());
|
||||||
|
@ -468,6 +468,7 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
|
||||||
HistoricActivityInstance::getActivityId);
|
HistoricActivityInstance::getActivityId);
|
||||||
|
|
||||||
// 按照 activityId 分组,构建 ApprovalNodeInfo 节点
|
// 按照 activityId 分组,构建 ApprovalNodeInfo 节点
|
||||||
|
// TODO @lesan:【子流程】在子流程进行审批的时候,HistoricActivityInstance 里面可以拿到 runActivities.get(0).getCalledProcessInstanceId()。要不要支持跳转???
|
||||||
Map<String, HistoricTaskInstance> taskMap = convertMap(tasks, HistoricTaskInstance::getId);
|
Map<String, HistoricTaskInstance> taskMap = convertMap(tasks, HistoricTaskInstance::getId);
|
||||||
return convertList(runningTaskMap.entrySet(), entry -> {
|
return convertList(runningTaskMap.entrySet(), entry -> {
|
||||||
String activityId = entry.getKey();
|
String activityId = entry.getKey();
|
||||||
|
|
Loading…
Reference in New Issue