update - 抄送节点生成 Task ,方便在日志中查询

This commit is contained in:
wangli 2024-03-15 11:12:19 +08:00
parent 6890438167
commit 8cd7c6476a
3 changed files with 50 additions and 6 deletions

View File

@ -147,7 +147,7 @@ public final class BpmnMetaParserHelper {
return Optional.empty();
}
List<BpmnCarbonCopyConf> confs = new ArrayList<>();
elements.get(0).getChildElements().get(CONFIG_CARBON_COPY).forEach(e -> {
elements.get(0).getChildElements().getOrDefault(CONFIG_CARBON_COPY, Collections.emptyList()).forEach(e -> {
BpmnCarbonCopyConf bpmnCarbonCopyConf = new BpmnCarbonCopyConf();
buildCarbonCopyConfig(e, bpmnCarbonCopyConf);
confs.add(bpmnCarbonCopyConf);

View File

@ -3,11 +3,14 @@ package cn.axzo.workflow.core.engine.behavior;
import cn.axzo.workflow.core.service.ExtAxHiTaskInstService;
import org.flowable.bpmn.model.Activity;
import org.flowable.bpmn.model.ReceiveTask;
import org.flowable.bpmn.model.ServiceTask;
import org.flowable.bpmn.model.UserTask;
import org.flowable.common.engine.api.delegate.Expression;
import org.flowable.engine.impl.bpmn.behavior.AbstractBpmnActivityBehavior;
import org.flowable.engine.impl.bpmn.behavior.ParallelMultiInstanceBehavior;
import org.flowable.engine.impl.bpmn.behavior.ReceiveTaskActivityBehavior;
import org.flowable.engine.impl.bpmn.behavior.SequentialMultiInstanceBehavior;
import org.flowable.engine.impl.bpmn.behavior.ServiceTaskDelegateExpressionActivityBehavior;
import org.flowable.engine.impl.bpmn.behavior.UserTaskActivityBehavior;
import org.flowable.engine.impl.bpmn.parser.factory.DefaultActivityBehaviorFactory;
@ -43,6 +46,16 @@ public class CustomActivityBehaviorFactory extends DefaultActivityBehaviorFactor
return new CustomReceiveTaskActivityBehavior(receiveTask, hiTaskInstService);
}
@Override
public ServiceTaskDelegateExpressionActivityBehavior createServiceTaskDelegateExpressionActivityBehavior(ServiceTask serviceTask) {
Expression delegateExpression = expressionManager.createExpression(serviceTask.getImplementation());
return new CustomServiceTaskDelegateExpressionActivityBehavior(serviceTask.getId(), delegateExpression,
getSkipExpressionFromServiceTask(serviceTask),
createFieldDeclarations(serviceTask.getFieldExtensions()),
serviceTask.getMapExceptions(), serviceTask.isTriggerable(), serviceTask);
}
public void setHiTaskInstService(ExtAxHiTaskInstService hiTaskInstService) {
this.hiTaskInstService = hiTaskInstService;
}

View File

@ -1,10 +1,22 @@
package cn.axzo.workflow.core.engine.behavior;
import cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum;
import cn.axzo.workflow.core.engine.event.ReceiveTaskExtInstCreateEvent;
import lombok.extern.slf4j.Slf4j;
import org.flowable.bpmn.model.MapExceptionEntry;
import org.flowable.bpmn.model.ServiceTask;
import org.flowable.common.engine.api.delegate.Expression;
import org.flowable.common.engine.api.delegate.event.FlowableEventDispatcher;
import org.flowable.common.engine.impl.interceptor.CommandContext;
import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.impl.bpmn.behavior.ServiceTaskDelegateExpressionActivityBehavior;
import org.flowable.engine.impl.bpmn.parser.FieldDeclaration;
import org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl;
import org.flowable.engine.impl.persistence.entity.ExecutionEntity;
import org.flowable.engine.impl.util.CommandContextUtil;
import org.flowable.engine.impl.util.TaskHelper;
import org.flowable.task.service.TaskService;
import org.flowable.task.service.impl.persistence.entity.TaskEntity;
import java.util.List;
@ -16,22 +28,41 @@ import java.util.List;
* @author wangli
* @since 13/03/2024 14:17
*/
@Slf4j
public class CustomServiceTaskDelegateExpressionActivityBehavior extends ServiceTaskDelegateExpressionActivityBehavior {
protected final ServiceTask serviceTask;
public CustomServiceTaskDelegateExpressionActivityBehavior(String serviceTaskId, Expression expression,
Expression skipExpression,
List<FieldDeclaration> fieldDeclarations,
List<MapExceptionEntry> mapExceptions,
boolean triggerable) {
boolean triggerable, ServiceTask serviceTask) {
super(serviceTaskId, expression, skipExpression, fieldDeclarations, mapExceptions, triggerable);
this.serviceTask = serviceTask;
}
@Override
public void execute(DelegateExecution execution) {
CommandContext commandContext = CommandContextUtil.getCommandContext();
ProcessEngineConfigurationImpl processEngineConfiguration =
CommandContextUtil.getProcessEngineConfiguration(commandContext);
TaskService taskService = processEngineConfiguration.getTaskServiceConfiguration().getTaskService();
TaskEntity task = taskService.createTask();
task.setExecutionId(execution.getId());
task.setTaskDefinitionKey(serviceTask.getId());
task.setPropagatedStageInstanceId(execution.getPropagatedStageInstanceId());
task.setName(serviceTask.getName());
TaskHelper.insertTask(task, (ExecutionEntity) execution, false, false);
// 添加 taskInst 扩展表数据
FlowableEventDispatcher eventDispatcher = processEngineConfiguration.getEventDispatcher();
eventDispatcher.dispatchEvent(new ReceiveTaskExtInstCreateEvent(execution.getProcessInstanceId(),
// 这里直接设置状态为"approved"是无奈为之.
// 正常的操作应该学习 cn.axzo.workflow.core.engine.behavior.CustomReceiveTaskActivityBehavior 这个类
execution.getCurrentActivityId(), task.getId(), BpmnProcessInstanceResultEnum.APPROVED),
processEngineConfiguration.getEngineCfgKey());
super.execute(execution);
}
@Override
public void leave(DelegateExecution execution) {
super.leave(execution);
}
}