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.enums.BpmnFlowNodeMode;
|
||||||
import cn.axzo.workflow.common.model.request.bpmn.BpmnButtonConf;
|
import cn.axzo.workflow.common.model.request.bpmn.BpmnButtonConf;
|
||||||
|
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.experimental.Accessors;
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 流程实例下的节点信息
|
* 流程实例下的节点信息
|
||||||
*
|
*
|
||||||
@ -40,5 +43,9 @@ public class ProcessNodeDetailVO {
|
|||||||
*/
|
*/
|
||||||
private BpmnButtonConf buttonConf;
|
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
|
* @author wangli
|
||||||
* @since 2023/12/9 16:37
|
* @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 processDefinitionId;
|
||||||
private String taskDefinitionKey;
|
private String taskDefinitionKey;
|
||||||
private TaskEntity task;
|
private TaskEntity task;
|
||||||
|
|
||||||
public CustomEventAssignment(String processDefinitionId, String taskDefinitionKey, TaskEntity task) {
|
public CustomEventAssignmentCmd(String processDefinitionId, String taskDefinitionKey, TaskEntity task) {
|
||||||
this.processDefinitionId = processDefinitionId;
|
this.processDefinitionId = processDefinitionId;
|
||||||
this.taskDefinitionKey = taskDefinitionKey;
|
this.taskDefinitionKey = taskDefinitionKey;
|
||||||
this.task = task;
|
this.task = task;
|
||||||
@ -32,7 +32,8 @@ public class CustomEventAssignment implements Command<Void>, Serializable {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Void execute(CommandContext commandContext) {
|
public Void execute(CommandContext commandContext) {
|
||||||
ProcessEngineConfigurationImpl processEngineConfiguration = CommandContextUtil.getProcessEngineConfiguration();
|
ProcessEngineConfigurationImpl processEngineConfiguration =
|
||||||
|
CommandContextUtil.getProcessEngineConfiguration(commandContext);
|
||||||
BpmnModel bpmnModel = ProcessDefinitionUtil.getBpmnModel(processDefinitionId);
|
BpmnModel bpmnModel = ProcessDefinitionUtil.getBpmnModel(processDefinitionId);
|
||||||
UserTask flowElement = (UserTask) bpmnModel.getFlowElement(taskDefinitionKey);
|
UserTask flowElement = (UserTask) bpmnModel.getFlowElement(taskDefinitionKey);
|
||||||
processEngineConfiguration.getListenerNotificationHelper().executeTaskListeners(flowElement, task,
|
processEngineConfiguration.getListenerNotificationHelper().executeTaskListeners(flowElement, task,
|
||||||
@ -165,7 +165,7 @@ public class EngineExecutionStartListener implements ExecutionListener {
|
|||||||
* @param userTask 当前节点, 这个对象会包含配置元数据, 可以在该方法中或者基于 BpmnTaskAssigneeSelector 建一个抽象类, 做解析元数据公共方法
|
* @param userTask 当前节点, 这个对象会包含配置元数据, 可以在该方法中或者基于 BpmnTaskAssigneeSelector 建一个抽象类, 做解析元数据公共方法
|
||||||
* @return
|
* @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<>();
|
List<BpmnTaskDelegateAssigner> assigners = new ArrayList<>();
|
||||||
|
|
||||||
// 如果开启了 mock 模式(workflow.mock=true), 则直接返回 mock 的审批人
|
// 如果开启了 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.exception.WorkflowEngineException;
|
||||||
import cn.axzo.workflow.core.common.utils.BpmnCollectionUtils;
|
import cn.axzo.workflow.core.common.utils.BpmnCollectionUtils;
|
||||||
import cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper;
|
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.BpmnProcessDefinitionService;
|
||||||
import cn.axzo.workflow.core.service.BpmnProcessInstanceService;
|
import cn.axzo.workflow.core.service.BpmnProcessInstanceService;
|
||||||
import cn.axzo.workflow.core.service.converter.BpmnHistoricProcessInstanceConverter;
|
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.ProcessInstance;
|
||||||
import org.flowable.engine.runtime.ProcessInstanceQuery;
|
import org.flowable.engine.runtime.ProcessInstanceQuery;
|
||||||
import org.flowable.form.api.FormInfo;
|
import org.flowable.form.api.FormInfo;
|
||||||
|
import org.flowable.spring.SpringProcessEngineConfiguration;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.util.CollectionUtils;
|
import org.springframework.util.CollectionUtils;
|
||||||
|
|
||||||
@ -114,6 +117,10 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
|||||||
private ProcessGraphicService graphicService;
|
private ProcessGraphicService graphicService;
|
||||||
@Resource
|
@Resource
|
||||||
private FlowNodeForecastService forecastService;
|
private FlowNodeForecastService forecastService;
|
||||||
|
@Resource
|
||||||
|
private EngineExecutionStartListener engineExecutionStartListener;
|
||||||
|
@Resource
|
||||||
|
private SpringProcessEngineConfiguration springProcessEngineConfiguration;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public HistoricProcessInstance getProcessInstanceByBusinessKey(String businessKey, @Nullable String tenantId,
|
public HistoricProcessInstance getProcessInstanceByBusinessKey(String businessKey, @Nullable String tenantId,
|
||||||
@ -589,6 +596,19 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
|||||||
} else if (userTask.getBehavior() instanceof UserTaskActivityBehavior) {
|
} else if (userTask.getBehavior() instanceof UserTaskActivityBehavior) {
|
||||||
node.setNodeMode(BpmnFlowNodeMode.GENERAL);
|
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) {
|
} else if (i instanceof ReceiveTask) {
|
||||||
ReceiveTask receiveTask = (ReceiveTask) i;
|
ReceiveTask receiveTask = (ReceiveTask) i;
|
||||||
node.setId(receiveTask.getId())
|
node.setId(receiveTask.getId())
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user