diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/behavior/CustomReceiveTaskActivityBehavior.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/behavior/CustomReceiveTaskActivityBehavior.java index 8e9a5dc15..9dc1c5e57 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/behavior/CustomReceiveTaskActivityBehavior.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/behavior/CustomReceiveTaskActivityBehavior.java @@ -1,8 +1,8 @@ package cn.axzo.workflow.core.engine.behavior; import cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum; -import cn.axzo.workflow.core.engine.event.ReceiveTaskExtInstCreateEventImpl; -import cn.axzo.workflow.core.repository.entity.ExtAxHiTaskInst; +import cn.axzo.workflow.core.engine.event.ReceiveTaskExtInstCompleteEvent; +import cn.axzo.workflow.core.engine.event.ReceiveTaskExtInstCreateEvent; import cn.axzo.workflow.core.service.ExtAxHiTaskInstService; import lombok.extern.slf4j.Slf4j; import org.flowable.bpmn.model.ReceiveTask; @@ -52,12 +52,10 @@ public class CustomReceiveTaskActivityBehavior extends ReceiveTaskActivityBehavi TaskHelper.insertTask(task, (ExecutionEntity) execution, false, false); // 添加 taskInst 扩展表数据 - ExtAxHiTaskInst entity = new ExtAxHiTaskInst(); - entity.setProcInstId(execution.getProcessInstanceId()); - entity.setTaskDefinitionKey(execution.getCurrentActivityId()); - entity.setTaskId(task.getId()); - entity.setStatus(BpmnProcessInstanceResultEnum.PROCESSING.getStatus()); - hiTaskInstService.save(entity); + FlowableEventDispatcher eventDispatcher = processEngineConfiguration.getEventDispatcher(); + eventDispatcher.dispatchEvent(new ReceiveTaskExtInstCreateEvent(execution.getProcessInstanceId(), + execution.getCurrentActivityId(), task.getId(), BpmnProcessInstanceResultEnum.PROCESSING), + processEngineConfiguration.getEngineCfgKey()); } @Override @@ -71,7 +69,7 @@ public class CustomReceiveTaskActivityBehavior extends ReceiveTaskActivityBehavi Task task = taskService.createTaskQuery().executionId(execution.getId()) .taskDefinitionKey(execution.getCurrentActivityId()).singleResult(); if (Objects.nonNull(task)) { - eventDispatcher.dispatchEvent(new ReceiveTaskExtInstCreateEventImpl(execution.getProcessInstanceId(), + eventDispatcher.dispatchEvent(new ReceiveTaskExtInstCompleteEvent(execution.getProcessInstanceId(), receiveTask.getId(), task.getId(), BpmnProcessInstanceResultEnum.APPROVED), processEngineConfiguration.getEngineCfgKey()); } else { diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/event/ReceiveTaskCreateEventType.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/event/ReceiveTaskEventType.java similarity index 72% rename from workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/event/ReceiveTaskCreateEventType.java rename to workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/event/ReceiveTaskEventType.java index 4b526229f..11c35b0d8 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/event/ReceiveTaskCreateEventType.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/event/ReceiveTaskEventType.java @@ -13,18 +13,18 @@ import java.util.List; * @author wangli * @since 2024/2/5 18:46 */ -public enum ReceiveTaskCreateEventType implements FlowableEventType { - +public enum ReceiveTaskEventType implements FlowableEventType { + CREATE, COMPLETE; - public static final ReceiveTaskCreateEventType[] EMPTY_ARRAY = new ReceiveTaskCreateEventType[]{}; + public static final ReceiveTaskEventType[] EMPTY_ARRAY = new ReceiveTaskEventType[]{}; - public static ReceiveTaskCreateEventType[] getTypesFromString(String string) { - List result = new ArrayList<>(); + public static ReceiveTaskEventType[] getTypesFromString(String string) { + List result = new ArrayList<>(); if (string != null && !string.isEmpty()) { String[] split = StringUtils.split(string, ","); for (String typeName : split) { boolean found = false; - for (ReceiveTaskCreateEventType type : values()) { + for (ReceiveTaskEventType type : values()) { if (typeName.toUpperCase().equals(type.name())) { result.add(type); found = true; diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/event/ReceiveTaskExtInstCreateEventImpl.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/event/ReceiveTaskExtInstCompleteEvent.java similarity index 73% rename from workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/event/ReceiveTaskExtInstCreateEventImpl.java rename to workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/event/ReceiveTaskExtInstCompleteEvent.java index 0f81e6873..1c533a7fe 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/event/ReceiveTaskExtInstCreateEventImpl.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/event/ReceiveTaskExtInstCompleteEvent.java @@ -3,7 +3,7 @@ package cn.axzo.workflow.core.engine.event; import cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum; import org.flowable.common.engine.api.delegate.event.FlowableEventType; -import static cn.axzo.workflow.core.engine.event.ReceiveTaskCreateEventType.COMPLETE; +import static cn.axzo.workflow.core.engine.event.ReceiveTaskEventType.COMPLETE; /** * 接收任务的扩展任务记录表创建的事件实现 @@ -11,15 +11,15 @@ import static cn.axzo.workflow.core.engine.event.ReceiveTaskCreateEventType.COMP * @author wangli * @since 2024/2/5 18:27 */ -public class ReceiveTaskExtInstCreateEventImpl implements ReceiveTaskExtInstCreateEvent { +public class ReceiveTaskExtInstCompleteEvent implements ReceiveTaskExtInstEvent { private final String processInstanceId; private final String activityId; private final String taskId; private final BpmnProcessInstanceResultEnum resultEnum; - public ReceiveTaskExtInstCreateEventImpl(String processInstanceId, String activityId, String taskId, - BpmnProcessInstanceResultEnum resultEnum) { + public ReceiveTaskExtInstCompleteEvent(String processInstanceId, String activityId, String taskId, + BpmnProcessInstanceResultEnum resultEnum) { this.processInstanceId = processInstanceId; this.activityId = activityId; this.taskId = taskId; diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/event/ReceiveTaskExtInstCreateEvent.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/event/ReceiveTaskExtInstCreateEvent.java index 1fb1daae2..67e4e4c9f 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/event/ReceiveTaskExtInstCreateEvent.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/event/ReceiveTaskExtInstCreateEvent.java @@ -1,22 +1,50 @@ package cn.axzo.workflow.core.engine.event; import cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum; -import org.flowable.common.engine.api.delegate.event.FlowableEvent; +import org.flowable.common.engine.api.delegate.event.FlowableEventType; + +import static cn.axzo.workflow.core.engine.event.ReceiveTaskEventType.COMPLETE; /** - * 接收任务的扩展任务记录表创建的事件 + * 接收任务的扩展任务记录表创建的事件实现 * * @author wangli - * @since 2024/2/5 18:26 + * @since 2024/2/5 18:27 */ -public interface ReceiveTaskExtInstCreateEvent extends FlowableEvent { +public class ReceiveTaskExtInstCreateEvent implements ReceiveTaskExtInstEvent { - String getProcessInstanceId(); + private final String processInstanceId; + private final String activityId; + private final String taskId; + private final BpmnProcessInstanceResultEnum resultEnum; - String getActivityId(); + public ReceiveTaskExtInstCreateEvent(String processInstanceId, String activityId, String taskId, + BpmnProcessInstanceResultEnum resultEnum) { + this.processInstanceId = processInstanceId; + this.activityId = activityId; + this.taskId = taskId; + this.resultEnum = resultEnum; + } - String getTaskId(); + public String getProcessInstanceId() { + return processInstanceId; + } - BpmnProcessInstanceResultEnum getResultEnum(); + public String getActivityId() { + return activityId; + } + + public String getTaskId() { + return taskId; + } + + public BpmnProcessInstanceResultEnum getResultEnum() { + return resultEnum; + } + + @Override + public FlowableEventType getType() { + return COMPLETE; + } } diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/event/ReceiveTaskExtInstEvent.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/event/ReceiveTaskExtInstEvent.java new file mode 100644 index 000000000..6ea48f240 --- /dev/null +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/event/ReceiveTaskExtInstEvent.java @@ -0,0 +1,22 @@ +package cn.axzo.workflow.core.engine.event; + +import cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum; +import org.flowable.common.engine.api.delegate.event.FlowableEvent; + +/** + * 接收任务的扩展任务记录表创建的事件 + * + * @author wangli + * @since 2024/2/5 18:26 + */ +public interface ReceiveTaskExtInstEvent extends FlowableEvent { + + String getProcessInstanceId(); + + String getActivityId(); + + String getTaskId(); + + BpmnProcessInstanceResultEnum getResultEnum(); + +} diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/listener/impl/ReceiveTaskExtInstCreateEventListener.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/listener/impl/ReceiveTaskExtInstventListener.java similarity index 56% rename from workflow-engine-core/src/main/java/cn/axzo/workflow/core/listener/impl/ReceiveTaskExtInstCreateEventListener.java rename to workflow-engine-core/src/main/java/cn/axzo/workflow/core/listener/impl/ReceiveTaskExtInstventListener.java index c4976d8fe..995d086bc 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/listener/impl/ReceiveTaskExtInstCreateEventListener.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/listener/impl/ReceiveTaskExtInstventListener.java @@ -1,6 +1,6 @@ package cn.axzo.workflow.core.listener.impl; -import cn.axzo.workflow.core.engine.event.ReceiveTaskCreateEventType; +import cn.axzo.workflow.core.engine.event.ReceiveTaskEventType; import cn.axzo.workflow.core.engine.event.ReceiveTaskExtInstCreateEvent; import cn.axzo.workflow.core.repository.entity.ExtAxHiTaskInst; import cn.axzo.workflow.core.service.ExtAxHiTaskInstService; @@ -11,9 +11,11 @@ import org.flowable.common.engine.api.delegate.event.AbstractFlowableEventListen import org.flowable.common.engine.api.delegate.event.FlowableEvent; import org.springframework.stereotype.Component; +import java.util.Objects; import java.util.Set; -import static cn.axzo.workflow.core.engine.event.ReceiveTaskCreateEventType.COMPLETE; +import static cn.axzo.workflow.core.engine.event.ReceiveTaskEventType.COMPLETE; +import static cn.axzo.workflow.core.engine.event.ReceiveTaskEventType.CREATE; /** * TODO @@ -24,10 +26,11 @@ import static cn.axzo.workflow.core.engine.event.ReceiveTaskCreateEventType.COMP @AllArgsConstructor @Component @Slf4j -public class ReceiveTaskExtInstCreateEventListener extends AbstractFlowableEventListener { +public class ReceiveTaskExtInstventListener extends AbstractFlowableEventListener { private final ExtAxHiTaskInstService extAxHiTaskInstService; - public static final Set SUPPORT_EVENTS = - ImmutableSet.builder() + public static final Set SUPPORT_EVENTS = + ImmutableSet.builder() + .add(CREATE) .add(COMPLETE) .build(); @@ -35,9 +38,15 @@ public class ReceiveTaskExtInstCreateEventListener extends AbstractFlowableEvent public void onEvent(FlowableEvent flowableEvent) { if (flowableEvent instanceof ReceiveTaskExtInstCreateEvent) { ReceiveTaskExtInstCreateEvent event = (ReceiveTaskExtInstCreateEvent) flowableEvent; - ReceiveTaskCreateEventType type = (ReceiveTaskCreateEventType) event.getType(); - if (SUPPORT_EVENTS.contains(type)) { - saveExtTaskInst(event); + ReceiveTaskEventType type = (ReceiveTaskEventType) event.getType(); + switch (type) { + case CREATE: + saveExtTaskInst(event); + break; + case COMPLETE: + updateExtTaskInst(event); + break; + default: } } } @@ -47,6 +56,14 @@ public class ReceiveTaskExtInstCreateEventListener extends AbstractFlowableEvent return true; } + private void updateExtTaskInst(ReceiveTaskExtInstCreateEvent event) { + ExtAxHiTaskInst entity = extAxHiTaskInstService.getByTaskId(event.getTaskId(), event.getProcessInstanceId()); + if (Objects.nonNull(entity)) { + entity.setStatus(event.getResultEnum().getStatus()); + extAxHiTaskInstService.update(entity); + } + } + private void saveExtTaskInst(ReceiveTaskExtInstCreateEvent event) { ExtAxHiTaskInst entity = new ExtAxHiTaskInst(); entity.setProcInstId(event.getProcessInstanceId());