diff --git a/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/integration/listener/BadgeDeviceStatusEventHandler.java b/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/integration/listener/BadgeDeviceStatusEventHandler.java index d81e50f..3de1748 100644 --- a/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/integration/listener/BadgeDeviceStatusEventHandler.java +++ b/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/integration/listener/BadgeDeviceStatusEventHandler.java @@ -1,4 +1,4 @@ -package com.viewsh.module.ops.environment.integration.handler; +package com.viewsh.module.ops.environment.integration.listener; import com.viewsh.module.ops.environment.service.badge.BadgeDeviceStatusService; import com.viewsh.module.ops.core.event.OrderStateChangedEvent; @@ -9,6 +9,8 @@ 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; +import org.springframework.transaction.event.TransactionalEventListener; /** * 工牌设备状态事件处理器 @@ -42,8 +44,8 @@ public class BadgeDeviceStatusEventHandler { * * @param event 工单状态变更事件 */ - @EventListener - @Async("opsExecutor") + @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT) + @Async("ops-task-executor") public void onOrderStateChanged(OrderStateChangedEvent event) { try { // 只处理保洁类型的工单 @@ -76,7 +78,7 @@ public class BadgeDeviceStatusEventHandler { WorkOrderStatusEnum newStatus = event.getNewStatus(); switch (newStatus) { - case ASSIGNED: + case PENDING: // 工单已分配,不影响设备状态(设备可能还在处理其他任务) // 设置设备当前工单 badgeDeviceStatusService.setCurrentOrder(deviceId, event.getOrderId()); @@ -171,9 +173,9 @@ public class BadgeDeviceStatusEventHandler { * 1. 将被打断的设备状态转为 PAUSED * 2. 记录被打断的工单ID * - * @param deviceId 被打断的设备ID + * @param deviceId 被打断的设备ID * @param interruptedOrderId 被打断的工单ID - * @param urgentOrderId P0紧急工单ID + * @param urgentOrderId P0紧急工单ID */ public void handleP0Interrupt(Long deviceId, Long interruptedOrderId, Long urgentOrderId) { log.info("[BadgeDeviceStatusEventHandler] P0紧急任务打断: deviceId={}, interruptedOrderId={}, urgentOrderId={}", diff --git a/viewsh-module-ops/viewsh-module-ops-biz/src/test/java/com/viewsh/module/ops/service/order/OpsOrderServiceTest.java b/viewsh-module-ops/viewsh-module-ops-biz/src/test/java/com/viewsh/module/ops/service/order/OpsOrderServiceTest.java index bb32de1..130eb4f 100644 --- a/viewsh-module-ops/viewsh-module-ops-biz/src/test/java/com/viewsh/module/ops/service/order/OpsOrderServiceTest.java +++ b/viewsh-module-ops/viewsh-module-ops-biz/src/test/java/com/viewsh/module/ops/service/order/OpsOrderServiceTest.java @@ -84,31 +84,7 @@ public class OpsOrderServiceTest { // 模拟 MyBatis Plus 的 ID 自动回填 if (order.getId() == null) { order.setId(1L); - @Test - void testAssignOrder_FromQueuedStatus_Success() { - // Given - testOrder.setStatus(WorkOrderStatusEnum.QUEUED.getStatus()); - OpsOrderAssignReqDTO assignReq = new OpsOrderAssignReqDTO(); - assignReq.setOrderId(1L); - assignReq.setAssigneeId(2001L); - assignReq.setRemark("排队后分配"); - - when(opsOrderMapper.selectById(1L)).thenReturn(testOrder); - - // When - assertDoesNotThrow(() -> opsOrderService.assignOrder(assignReq, OperatorTypeEnum.SYSTEM, null)); - - // Then - verify(orderStateMachine, times(1)).transition( - eq(testOrder), - eq(WorkOrderStatusEnum.DISPATCHED), - eq(OperatorTypeEnum.SYSTEM), - eq(null), - eq("排队后分配") - ); - assertEquals(2001L, testOrder.getAssigneeId()); - } -} + } return 1; });