fix(security): sendCard 改为 DISPATCHED 状态变更时发送 + @EventListener
Some checks failed
Java CI with Maven / build (11) (push) Has been cancelled
Java CI with Maven / build (17) (push) Has been cancelled
Java CI with Maven / build (8) (push) Has been cancelled

- 将 sendCard 从 onOrderCreated 移至 handleDispatched
- 使用 @EventListener 替代 @TransactionalEventListener(AFTER_COMMIT)
  确保 autoDispatchNext 场景的 DISPATCHED 事件也能触发
- PAUSED → DISPATCHED 恢复场景跳过重发
- 参考保洁模块 CleanOrderEventListener 的实现模式

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
lzh
2026-03-26 13:22:24 +08:00
parent 9db692d09c
commit ec0d796c36

View File

@@ -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 {
/**
* 状态变更事件 - 记录扩展表时间点 + 业务日志
* <p>
* 使用 @EventListener 而非 @TransactionalEventListener(AFTER_COMMIT)
* 确保 autoDispatchNext 在 AFTER_COMMIT 中派发下一单时发布的 DISPATCHED
* 事件也能被捕获。各 handler 方法使用 @Async 异步执行。
* <p>
* 参考保洁模块 CleanOrderEventListener 的实现模式。
*/
@TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT)
@EventListener
public void onOrderStateChanged(OrderStateChangedEvent event) {
if (!ORDER_TYPE_SECURITY.equals(event.getOrderType())) {
return;