From de51353a5ddcfbed44783bf7e57de8305932576a Mon Sep 17 00:00:00 2001 From: may <1742057357@qq.com> Date: Sat, 24 Oct 2026 12:27:20 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=B7=A5=E4=BD=9C=E6=B5=81=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E5=AE=9A=E6=97=B6=E5=90=AF=E5=8A=A8=E7=BB=91=E5=AE=9A?= =?UTF-8?q?=E4=B8=9A=E5=8A=A1=E7=A4=BA=E4=BE=8B=E5=A4=84=E7=90=86=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 拦截 demo_timer_inspect 流程的 TIMER_START:先创建巡检工单,再以工单号作为 businessId 走 startByTimer 发起审批,演示"定时启动的实例也绑定业务" - 非本流程的事件委托引擎内置 EventRuntimeHandler,保持定时启动与边界事件原生行为 - 配套官方文档 event.md §10.1 示例说明 --- .../demo/DemoTimerInspectHandler.java | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/demo/DemoTimerInspectHandler.java diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/demo/DemoTimerInspectHandler.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/demo/DemoTimerInspectHandler.java new file mode 100644 index 000000000..21736b777 --- /dev/null +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/demo/DemoTimerInspectHandler.java @@ -0,0 +1,65 @@ +package org.dromara.workflow.demo; + +import lombok.extern.slf4j.Slf4j; +import org.dromara.warm.flow.core.FlowEngine; +import org.dromara.warm.flow.core.entity.EventWait; +import org.dromara.warm.flow.core.enums.EventType; +import org.dromara.warm.flow.core.service.impl.EventRuntimeHandler; +import org.dromara.warm.flow.core.timer.EventTaskHandler; +import org.dromara.workflow.common.ConditionalOnEnable; +import org.springframework.stereotype.Component; + +/** + * 定时启动 + 业务绑定示例:每日 09:00 自动创建巡检工单,并以工单主键发起审批。 + * + *
接入要点:实现 {@link EventTaskHandler} 后引擎内置默认处理器(EventRuntimeHandler) + * 自动让位,本类成为全部事件的处理入口——非本演示流程的事件必须委托默认处理器, + * 否则会覆盖引擎原生的定时启动与边界事件行为;等待记录的完成由默认三参编排 + * (handle 后执行 completion),实现里无需自行调用。
+ * + *使用方式:发布含「定时启动」节点的定义(流程编码 {@link #DEMO_FLOW_CODE}), + * 开启 {@code warm-flow.timer-enabled}。
+ * + * @author may + */ +@Slf4j +@Component +@ConditionalOnEnable +public class DemoTimerInspectHandler implements EventTaskHandler { + + /** + * 演示流程编码:对应设计器发布的含「定时启动」节点的定义 + */ + public static final String DEMO_FLOW_CODE = "demo_timer_inspect"; + + /** + * 引擎内置默认处理器:兜底所有非本演示流程的事件 + */ + private final EventTaskHandler defaultHandler = new EventRuntimeHandler(); + + /** + * 定时调度入口(无上下文):统一处理。 + */ + @Override + public void handle(EventWait wait) { + if (isInspectTimerStart(wait)) { + // 业务先行:创建巡检工单,以工单主键作为 businessId 发起审批 + long l = System.currentTimeMillis(); + FlowEngine.insService().startByTimer(String.valueOf(l), wait.getDefinitionId(), + wait.getNodeCode(), null, null); + log.info("巡检工单 {} 已自动发起审批: businessId={}", l, l); + return; + } + // 非本流程的事件:委托默认处理器,保持定时启动与边界事件原生行为 + defaultHandler.handle(wait); + } + + /** + * 只拦截本演示流程的定时启动事件。 + */ + private boolean isInspectTimerStart(EventWait wait) { + return EventType.TIMER_START.getValue().equals(wait.getEventType()) + && DEMO_FLOW_CODE.equals(FlowEngine.defService() + .getById(wait.getDefinitionId()).getFlowCode()); + } +}