fix(ops): 修复工单队列一致性与设备状态覆盖问题
This commit is contained in:
@@ -34,41 +34,34 @@ public class QueueSyncHandler extends TransitionHandler {
|
||||
log.debug("队列同步处理器: orderId={}, targetStatus={}, queueId={}",
|
||||
context.getOrder().getId(), targetStatus, queueId);
|
||||
|
||||
try {
|
||||
// 根据目标状态同步队列状态
|
||||
switch (targetStatus) {
|
||||
case QUEUED:
|
||||
handleQueued(context);
|
||||
break;
|
||||
// 根据目标状态同步队列状态
|
||||
switch (targetStatus) {
|
||||
case QUEUED:
|
||||
handleQueued(context);
|
||||
break;
|
||||
|
||||
case DISPATCHED:
|
||||
handleDispatched(context);
|
||||
break;
|
||||
case DISPATCHED:
|
||||
handleDispatched(context);
|
||||
break;
|
||||
|
||||
case ARRIVED:
|
||||
// 队列状态保持 PROCESSING
|
||||
break;
|
||||
case ARRIVED:
|
||||
// 队列状态保持 PROCESSING
|
||||
break;
|
||||
|
||||
case COMPLETED:
|
||||
case CANCELLED:
|
||||
handleCompletedOrCancelled(context);
|
||||
break;
|
||||
case COMPLETED:
|
||||
case CANCELLED:
|
||||
handleCompletedOrCancelled(context);
|
||||
break;
|
||||
|
||||
case PAUSED:
|
||||
handlePaused(context);
|
||||
break;
|
||||
case PAUSED:
|
||||
handlePaused(context);
|
||||
break;
|
||||
|
||||
default:
|
||||
log.debug("目标状态无需同步队列: targetStatus={}", targetStatus);
|
||||
}
|
||||
|
||||
log.debug("队列同步成功: orderId={}, targetStatus={}", context.getOrder().getId(), targetStatus);
|
||||
|
||||
} catch (Exception e) {
|
||||
error(context, "队列同步失败: " + e.getMessage(), e);
|
||||
log.error("队列同步失败: orderId={}, targetStatus={}",
|
||||
context.getOrder().getId(), targetStatus, e);
|
||||
default:
|
||||
log.debug("目标状态无需同步队列: targetStatus={}", targetStatus);
|
||||
}
|
||||
|
||||
log.debug("队列同步成功: orderId={}, targetStatus={}", context.getOrder().getId(), targetStatus);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -79,20 +72,27 @@ public class QueueSyncHandler extends TransitionHandler {
|
||||
Long assigneeId = request.getAssigneeId();
|
||||
|
||||
if (assigneeId == null) {
|
||||
log.warn("入队时缺少执行人ID: orderId={}", context.getOrder().getId());
|
||||
return;
|
||||
// 必须抛出异常以触发事务回滚,防止工单状态变更但队列记录未创建
|
||||
String errorMsg = String.format("入队时缺少执行人ID: orderId=%s", context.getOrder().getId());
|
||||
log.error(errorMsg);
|
||||
throw new IllegalArgumentException(errorMsg);
|
||||
}
|
||||
|
||||
// 创建队列记录
|
||||
Long queueId = orderQueueService.enqueue(
|
||||
context.getOrder().getId(),
|
||||
assigneeId,
|
||||
context.getOrder().getPriorityEnum(),
|
||||
request.getQueueIndex()
|
||||
);
|
||||
try {
|
||||
// 创建队列记录
|
||||
Long queueId = orderQueueService.enqueue(
|
||||
context.getOrder().getId(),
|
||||
assigneeId,
|
||||
context.getOrder().getPriorityEnum(),
|
||||
request.getQueueIndex());
|
||||
|
||||
context.setQueueId(queueId);
|
||||
log.debug("队列记录已创建: queueId={}", queueId);
|
||||
context.setQueueId(queueId);
|
||||
log.debug("队列记录已创建: queueId={}", queueId);
|
||||
} catch (Exception e) {
|
||||
// 捕获异常并重新抛出,确保事务回滚
|
||||
log.error("创建队列记录失败: orderId={}", context.getOrder().getId(), e);
|
||||
throw new IllegalStateException("创建队列记录失败", e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -108,9 +108,14 @@ public class QueueSyncHandler extends TransitionHandler {
|
||||
return;
|
||||
}
|
||||
|
||||
// 队列状态从 WAITING 变更为 PROCESSING
|
||||
orderQueueService.startExecution(queueId);
|
||||
log.debug("队列状态已更新为PROCESSING: queueId={}", queueId);
|
||||
try {
|
||||
// 队列状态从 WAITING 变更为 PROCESSING
|
||||
orderQueueService.startExecution(queueId);
|
||||
log.debug("队列状态已更新为PROCESSING: queueId={}", queueId);
|
||||
} catch (Exception e) {
|
||||
log.error("更新队列状态失败: queueId={}", queueId, e);
|
||||
throw new IllegalStateException("更新队列状态失败", e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user