fix(ops): 修正工牌设备状态事件处理器配置
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

- 包名从 handler 改为 listener
- 使用 TransactionalEventListener 替代 EventListener
- 线程池名修正为 ops-task-executor
- 状态从 ASSIGNED 改为 PENDING
- 清理测试文件中的重复代码

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
lzh
2026-01-21 18:05:39 +08:00
parent 5dab9622d6
commit c88dc3fc10
2 changed files with 9 additions and 31 deletions

View File

@@ -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={}",

View File

@@ -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;
});