add - 为审批日志中的推测节点,添加推送人员的展示
This commit is contained in:
parent
5b5e088188
commit
18d7e84fd6
@ -2,9 +2,12 @@ package cn.axzo.workflow.common.model.response.bpmn.process;
|
||||
|
||||
import cn.axzo.workflow.common.enums.BpmnFlowNodeMode;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.BpmnButtonConf;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 流程实例下的节点信息
|
||||
*
|
||||
@ -40,5 +43,9 @@ public class ProcessNodeDetailVO {
|
||||
*/
|
||||
private BpmnButtonConf buttonConf;
|
||||
|
||||
/**
|
||||
* 推测出来的审批人
|
||||
*/
|
||||
private List<BpmnTaskDelegateAssigner> forecastAssigners;
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,50 @@
|
||||
package cn.axzo.workflow.core.engine.cmd;
|
||||
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
|
||||
import cn.axzo.workflow.core.engine.listener.EngineExecutionStartListener;
|
||||
import org.flowable.bpmn.model.UserTask;
|
||||
import org.flowable.common.engine.impl.interceptor.Command;
|
||||
import org.flowable.common.engine.impl.interceptor.CommandContext;
|
||||
import org.flowable.engine.delegate.DelegateExecution;
|
||||
import org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl;
|
||||
import org.flowable.engine.impl.util.CommandContextUtil;
|
||||
import org.flowable.engine.runtime.Execution;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper.getApproverSpecify;
|
||||
|
||||
/**
|
||||
* TODO
|
||||
*
|
||||
* @author wangli
|
||||
* @since 2023/12/11 17:56
|
||||
*/
|
||||
public class CustomCalcAssigneeCmd implements Command<List<BpmnTaskDelegateAssigner>>, Serializable {
|
||||
private String processInstanceId;
|
||||
private UserTask userTask;
|
||||
private EngineExecutionStartListener engineExecutionStartListener;
|
||||
|
||||
public CustomCalcAssigneeCmd(String processInstanceId, UserTask userTask,
|
||||
EngineExecutionStartListener engineExecutionStartListener) {
|
||||
this.processInstanceId = processInstanceId;
|
||||
this.userTask = userTask;
|
||||
this.engineExecutionStartListener = engineExecutionStartListener;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<BpmnTaskDelegateAssigner> execute(CommandContext commandContext) {
|
||||
ProcessEngineConfigurationImpl processEngineConfiguration =
|
||||
CommandContextUtil.getProcessEngineConfiguration(commandContext);
|
||||
List<Execution> list =
|
||||
processEngineConfiguration.getRuntimeService().createExecutionQuery().processInstanceId(processInstanceId).list();
|
||||
List<BpmnTaskDelegateAssigner> forecastAssigners = new ArrayList<>();
|
||||
getApproverSpecify(userTask).ifPresent(specify -> {
|
||||
forecastAssigners.addAll(engineExecutionStartListener.approverSelect(specify.getType(), userTask,
|
||||
(DelegateExecution) list.get(0)));
|
||||
});
|
||||
return forecastAssigners;
|
||||
}
|
||||
}
|
||||
@ -18,13 +18,13 @@ import java.io.Serializable;
|
||||
* @author wangli
|
||||
* @since 2023/12/9 16:37
|
||||
*/
|
||||
public class CustomEventAssignment implements Command<Void>, Serializable {
|
||||
public class CustomEventAssignmentCmd implements Command<Void>, Serializable {
|
||||
|
||||
private String processDefinitionId;
|
||||
private String taskDefinitionKey;
|
||||
private TaskEntity task;
|
||||
|
||||
public CustomEventAssignment(String processDefinitionId, String taskDefinitionKey, TaskEntity task) {
|
||||
public CustomEventAssignmentCmd(String processDefinitionId, String taskDefinitionKey, TaskEntity task) {
|
||||
this.processDefinitionId = processDefinitionId;
|
||||
this.taskDefinitionKey = taskDefinitionKey;
|
||||
this.task = task;
|
||||
@ -32,7 +32,8 @@ public class CustomEventAssignment implements Command<Void>, Serializable {
|
||||
|
||||
@Override
|
||||
public Void execute(CommandContext commandContext) {
|
||||
ProcessEngineConfigurationImpl processEngineConfiguration = CommandContextUtil.getProcessEngineConfiguration();
|
||||
ProcessEngineConfigurationImpl processEngineConfiguration =
|
||||
CommandContextUtil.getProcessEngineConfiguration(commandContext);
|
||||
BpmnModel bpmnModel = ProcessDefinitionUtil.getBpmnModel(processDefinitionId);
|
||||
UserTask flowElement = (UserTask) bpmnModel.getFlowElement(taskDefinitionKey);
|
||||
processEngineConfiguration.getListenerNotificationHelper().executeTaskListeners(flowElement, task,
|
||||
@ -165,7 +165,7 @@ public class EngineExecutionStartListener implements ExecutionListener {
|
||||
* @param userTask 当前节点, 这个对象会包含配置元数据, 可以在该方法中或者基于 BpmnTaskAssigneeSelector 建一个抽象类, 做解析元数据公共方法
|
||||
* @return
|
||||
*/
|
||||
private List<BpmnTaskDelegateAssigner> approverSelect(String type, UserTask userTask, DelegateExecution execution) {
|
||||
public List<BpmnTaskDelegateAssigner> approverSelect(String type, UserTask userTask, DelegateExecution execution) {
|
||||
List<BpmnTaskDelegateAssigner> assigners = new ArrayList<>();
|
||||
|
||||
// 如果开启了 mock 模式(workflow.mock=true), 则直接返回 mock 的审批人
|
||||
|
||||
@ -19,6 +19,8 @@ import cn.axzo.workflow.core.common.enums.BpmnProcessTaskResultEnum;
|
||||
import cn.axzo.workflow.core.common.exception.WorkflowEngineException;
|
||||
import cn.axzo.workflow.core.common.utils.BpmnCollectionUtils;
|
||||
import cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper;
|
||||
import cn.axzo.workflow.core.engine.cmd.CustomCalcAssigneeCmd;
|
||||
import cn.axzo.workflow.core.engine.listener.EngineExecutionStartListener;
|
||||
import cn.axzo.workflow.core.service.BpmnProcessDefinitionService;
|
||||
import cn.axzo.workflow.core.service.BpmnProcessInstanceService;
|
||||
import cn.axzo.workflow.core.service.converter.BpmnHistoricProcessInstanceConverter;
|
||||
@ -51,6 +53,7 @@ import org.flowable.engine.repository.ProcessDefinition;
|
||||
import org.flowable.engine.runtime.ProcessInstance;
|
||||
import org.flowable.engine.runtime.ProcessInstanceQuery;
|
||||
import org.flowable.form.api.FormInfo;
|
||||
import org.flowable.spring.SpringProcessEngineConfiguration;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
@ -114,6 +117,10 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
||||
private ProcessGraphicService graphicService;
|
||||
@Resource
|
||||
private FlowNodeForecastService forecastService;
|
||||
@Resource
|
||||
private EngineExecutionStartListener engineExecutionStartListener;
|
||||
@Resource
|
||||
private SpringProcessEngineConfiguration springProcessEngineConfiguration;
|
||||
|
||||
@Override
|
||||
public HistoricProcessInstance getProcessInstanceByBusinessKey(String businessKey, @Nullable String tenantId,
|
||||
@ -589,6 +596,19 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
||||
} else if (userTask.getBehavior() instanceof UserTaskActivityBehavior) {
|
||||
node.setNodeMode(BpmnFlowNodeMode.GENERAL);
|
||||
}
|
||||
List<BpmnTaskDelegateAssigner> forecastAssigners =
|
||||
springProcessEngineConfiguration.getCommandExecutor().execute(new CustomCalcAssigneeCmd(processInstanceId, userTask, engineExecutionStartListener));
|
||||
node.setForecastAssigners(forecastAssigners);
|
||||
// List<BpmnTaskDelegateAssigner> forecastAssigners = new ArrayList<>();
|
||||
// DelegateExecution execution = (DelegateExecution) runtimeService
|
||||
// .createExecutionQuery().processInstanceId(processInstanceId)
|
||||
// .activityId(userTask.getId()).singleResult();
|
||||
|
||||
// getApproverSpecify(userTask).ifPresent(specify -> {
|
||||
// forecastAssigners.addAll(engineExecutionStartListener
|
||||
// .approverSelect(specify.getType(), userTask,
|
||||
// (DelegateExecution) list.get(0)));
|
||||
// });
|
||||
} else if (i instanceof ReceiveTask) {
|
||||
ReceiveTask receiveTask = (ReceiveTask) i;
|
||||
node.setId(receiveTask.getId())
|
||||
|
||||
Loading…
Reference in New Issue
Block a user