fix(ops): 修复工牌绑定/手动派单/审计日志三处缺陷 #2

Merged
lzh merged 3 commits from fix/badge-online-and-manual-dispatch into master 2026-04-22 18:10:33 +08:00
Showing only changes of commit 6c4153fe23 - Show all commits

View File

@@ -72,7 +72,19 @@ public class ManualOrderActionFacade {
boolean idle = strategy.isAssigneeIdle(cmd, order);
WorkOrderStatusEnum targetStatus = idle ? WorkOrderStatusEnum.DISPATCHED : WorkOrderStatusEnum.QUEUED;
// 4. 状态变更
// 4. 提前写入执行人字段
// 注:必须在 transition() 之前完成。transition() 在事务内同步发布 OrderStateChangedEvent
// BadgeDeviceStatusEventListener 会再次 selectById 拿 assigneeId 决定是否写 Redis 工单关联;
// 若此处后置则事件触发时 assigneeId 仍为 null工牌按键查询 (assigneeDeviceId) 永远查不到工单。
// 同时写 assigneeDeviceId与 OrderLifecycleManagerImpl.dispatch() 自动派单路径对齐。
OpsOrderDO assigneeUpdate = new OpsOrderDO();
assigneeUpdate.setId(cmd.getOrderId());
assigneeUpdate.setAssigneeId(cmd.getAssigneeId());
assigneeUpdate.setAssigneeName(cmd.getAssigneeName());
assigneeUpdate.setAssigneeDeviceId(cmd.getAssigneeId());
opsOrderMapper.updateById(assigneeUpdate);
// 5. 状态变更
OrderTransitionRequest request = OrderTransitionRequest.builder()
.orderId(cmd.getOrderId())
.targetStatus(targetStatus)
@@ -89,13 +101,6 @@ public class ManualOrderActionFacade {
throw new IllegalStateException("手动派单失败: " + result.getMessage());
}
// 5. 更新主表执行人(只更新 assignee 字段,避免覆盖状态机已写入的 status
OpsOrderDO assigneeUpdate = new OpsOrderDO();
assigneeUpdate.setId(cmd.getOrderId());
assigneeUpdate.setAssigneeId(cmd.getAssigneeId());
assigneeUpdate.setAssigneeName(cmd.getAssigneeName());
opsOrderMapper.updateById(assigneeUpdate);
// 6. 条线后置
// 注:业务日志由生命周期事件 → 条线 EventListener 统一记录,此处不重复写
strategy.afterDispatch(cmd, order);