From 0d42431e9e24c7f122d95063f74e7761d7731a82 Mon Sep 17 00:00:00 2001 From: wangli <274027703@qq.com> Date: Mon, 5 Feb 2024 19:51:40 +0800 Subject: [PATCH] =?UTF-8?q?add=20-=20=E4=B8=9A=E5=8A=A1=E8=8A=82=E7=82=B9"?= =?UTF-8?q?=E4=B8=8D=E8=AE=BE=E7=BD=AE"=E5=AE=A1=E6=89=B9=E4=BA=BA?= =?UTF-8?q?=E7=9A=84=E5=AE=A1=E6=89=B9=E6=97=A5=E5=BF=97=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CustomReceiveTaskActivityBehavior.java | 12 +++- .../event/ReceiveTaskCreateEventType.java | 42 +++++++++++++ .../event/ReceiveTaskExtInstCreateEvent.java | 22 +++++++ .../ReceiveTaskExtInstCreateEventImpl.java | 50 ++++++++++++++++ ...ReceiveTaskExtInstCreateEventListener.java | 59 +++++++++++++++++++ 5 files changed, 184 insertions(+), 1 deletion(-) create mode 100644 workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/event/ReceiveTaskCreateEventType.java create mode 100644 workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/event/ReceiveTaskExtInstCreateEvent.java create mode 100644 workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/event/ReceiveTaskExtInstCreateEventImpl.java create mode 100644 workflow-engine-core/src/main/java/cn/axzo/workflow/core/listener/impl/ReceiveTaskExtInstCreateEventListener.java 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 7039ccc1b..dbb179475 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,6 +1,10 @@ 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.service.ExtAxHiTaskInstService; import org.flowable.bpmn.model.ReceiveTask; +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.ReceiveTaskActivityBehavior; @@ -18,7 +22,7 @@ import org.flowable.task.service.impl.persistence.entity.TaskEntity; * @since 2023/11/23 14:41 */ public class CustomReceiveTaskActivityBehavior extends ReceiveTaskActivityBehavior { - + private ExtAxHiTaskInstService hiTaskInstService; protected ReceiveTask receiveTask; public CustomReceiveTaskActivityBehavior(ReceiveTask receiveTask) { @@ -39,6 +43,12 @@ public class CustomReceiveTaskActivityBehavior extends ReceiveTaskActivityBehavi task.setPropagatedStageInstanceId(execution.getPropagatedStageInstanceId()); task.setName(receiveTask.getName()); TaskHelper.insertTask(task, (ExecutionEntity) execution, false, false); + + FlowableEventDispatcher eventDispatcher = processEngineConfiguration.getEventDispatcher(); + + eventDispatcher.dispatchEvent(new ReceiveTaskExtInstCreateEventImpl(execution.getProcessInstanceId(), + receiveTask.getId(), task.getId(), BpmnProcessInstanceResultEnum.APPROVED), + processEngineConfiguration.getEngineCfgKey()); } @Override 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/ReceiveTaskCreateEventType.java new file mode 100644 index 000000000..4b526229f --- /dev/null +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/event/ReceiveTaskCreateEventType.java @@ -0,0 +1,42 @@ +package cn.axzo.workflow.core.engine.event; + +import org.apache.commons.lang3.StringUtils; +import org.flowable.common.engine.api.FlowableIllegalArgumentException; +import org.flowable.common.engine.api.delegate.event.FlowableEventType; + +import java.util.ArrayList; +import java.util.List; + +/** + * 接收任务的扩展表任务创建时间类型 + * + * @author wangli + * @since 2024/2/5 18:46 + */ +public enum ReceiveTaskCreateEventType implements FlowableEventType { + + COMPLETE; + public static final ReceiveTaskCreateEventType[] EMPTY_ARRAY = new ReceiveTaskCreateEventType[]{}; + + public static ReceiveTaskCreateEventType[] 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()) { + if (typeName.toUpperCase().equals(type.name())) { + result.add(type); + found = true; + break; + } + } + if (!found) { + throw new FlowableIllegalArgumentException("Invalid event-type: " + typeName); + } + } + } + + return result.toArray(EMPTY_ARRAY); + } +} 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 new file mode 100644 index 000000000..1fb1daae2 --- /dev/null +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/event/ReceiveTaskExtInstCreateEvent.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 ReceiveTaskExtInstCreateEvent extends FlowableEvent { + + String getProcessInstanceId(); + + String getActivityId(); + + String getTaskId(); + + BpmnProcessInstanceResultEnum getResultEnum(); + +} 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/ReceiveTaskExtInstCreateEventImpl.java new file mode 100644 index 000000000..0f81e6873 --- /dev/null +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/event/ReceiveTaskExtInstCreateEventImpl.java @@ -0,0 +1,50 @@ +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; + +/** + * 接收任务的扩展任务记录表创建的事件实现 + * + * @author wangli + * @since 2024/2/5 18:27 + */ +public class ReceiveTaskExtInstCreateEventImpl implements ReceiveTaskExtInstCreateEvent { + + 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) { + this.processInstanceId = processInstanceId; + this.activityId = activityId; + this.taskId = taskId; + this.resultEnum = resultEnum; + } + + public String getProcessInstanceId() { + return processInstanceId; + } + + 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/listener/impl/ReceiveTaskExtInstCreateEventListener.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/listener/impl/ReceiveTaskExtInstCreateEventListener.java new file mode 100644 index 000000000..c4976d8fe --- /dev/null +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/listener/impl/ReceiveTaskExtInstCreateEventListener.java @@ -0,0 +1,59 @@ +package cn.axzo.workflow.core.listener.impl; + +import cn.axzo.workflow.core.engine.event.ReceiveTaskCreateEventType; +import cn.axzo.workflow.core.engine.event.ReceiveTaskExtInstCreateEvent; +import cn.axzo.workflow.core.repository.entity.ExtAxHiTaskInst; +import cn.axzo.workflow.core.service.ExtAxHiTaskInstService; +import com.google.common.collect.ImmutableSet; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.flowable.common.engine.api.delegate.event.AbstractFlowableEventListener; +import org.flowable.common.engine.api.delegate.event.FlowableEvent; +import org.springframework.stereotype.Component; + +import java.util.Set; + +import static cn.axzo.workflow.core.engine.event.ReceiveTaskCreateEventType.COMPLETE; + +/** + * TODO + * + * @author wangli + * @since 2024/2/5 18:39 + */ +@AllArgsConstructor +@Component +@Slf4j +public class ReceiveTaskExtInstCreateEventListener extends AbstractFlowableEventListener { + private final ExtAxHiTaskInstService extAxHiTaskInstService; + public static final Set SUPPORT_EVENTS = + ImmutableSet.builder() + .add(COMPLETE) + .build(); + + @Override + 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); + } + } + } + + @Override + public boolean isFailOnException() { + return true; + } + + private void saveExtTaskInst(ReceiveTaskExtInstCreateEvent event) { + ExtAxHiTaskInst entity = new ExtAxHiTaskInst(); + entity.setProcInstId(event.getProcessInstanceId()); + entity.setTaskDefinitionKey(event.getActivityId()); + entity.setTaskId(event.getTaskId()); + entity.setStatus(event.getResultEnum().getStatus()); + extAxHiTaskInstService.save(entity); + } + +}