From ec0d796c36d82d8245de1cfc64b7490c7800abdb Mon Sep 17 00:00:00 2001 From: lzh Date: Thu, 26 Mar 2026 13:22:24 +0800 Subject: [PATCH] =?UTF-8?q?fix(security):=20sendCard=20=E6=94=B9=E4=B8=BA?= =?UTF-8?q?=20DISPATCHED=20=E7=8A=B6=E6=80=81=E5=8F=98=E6=9B=B4=E6=97=B6?= =?UTF-8?q?=E5=8F=91=E9=80=81=20+=20@EventListener?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将 sendCard 从 onOrderCreated 移至 handleDispatched - 使用 @EventListener 替代 @TransactionalEventListener(AFTER_COMMIT) 确保 autoDispatchNext 场景的 DISPATCHED 事件也能触发 - PAUSED → DISPATCHED 恢复场景跳过重发 - 参考保洁模块 CleanOrderEventListener 的实现模式 Co-Authored-By: Claude Opus 4.6 (1M context) --- .../integration/listener/SecurityOrderEventListener.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/viewsh-module-ops/viewsh-module-security-biz/src/main/java/com/viewsh/module/ops/security/integration/listener/SecurityOrderEventListener.java b/viewsh-module-ops/viewsh-module-security-biz/src/main/java/com/viewsh/module/ops/security/integration/listener/SecurityOrderEventListener.java index c46342e..c517d57 100644 --- a/viewsh-module-ops/viewsh-module-security-biz/src/main/java/com/viewsh/module/ops/security/integration/listener/SecurityOrderEventListener.java +++ b/viewsh-module-ops/viewsh-module-security-biz/src/main/java/com/viewsh/module/ops/security/integration/listener/SecurityOrderEventListener.java @@ -21,6 +21,7 @@ import com.viewsh.module.ops.security.dal.dataobject.workorder.OpsOrderSecurityE import com.viewsh.module.ops.security.dal.mysql.workorder.OpsOrderSecurityExtMapper; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; import org.springframework.transaction.event.TransactionPhase; @@ -116,8 +117,14 @@ public class SecurityOrderEventListener { /** * 状态变更事件 - 记录扩展表时间点 + 业务日志 + *

+ * 使用 @EventListener 而非 @TransactionalEventListener(AFTER_COMMIT), + * 确保 autoDispatchNext 在 AFTER_COMMIT 中派发下一单时发布的 DISPATCHED + * 事件也能被捕获。各 handler 方法使用 @Async 异步执行。 + *

+ * 参考保洁模块 CleanOrderEventListener 的实现模式。 */ - @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT) + @EventListener public void onOrderStateChanged(OrderStateChangedEvent event) { if (!ORDER_TYPE_SECURITY.equals(event.getOrderType())) { return;