fix(ops): 修复事件重复发布问题并清理遗留代码
1. 移除 OrderStateMachine 中重复的事件发布逻辑
- OrderStateMachine 不再发布 OrderStateChangedEvent
- 事件发布统一由 EventPublishHandler 处理
2. 删除 enqueueAndDispatch 遗留方法
- 该方法已无用,被 DispatchEngine 策略模式替代
- 删除接口声明、实现类和测试用例
3. 清理无调用的备用接口方法
- enqueueOrderOnly、dispatchToCleaner、confirmOrder、
startWorkingOnBeacon、autoCompleteOnSignalLost、
playVoiceForNewOrder、playVoiceForQueuedOrder、
playVoiceForNextTask、upgradePriorityToP0、
calculateActualDuration
- 保留接口但标记 @Deprecated
问题修复:
- 工单派发时 TTS 语音播报不再重复触发
- 调度逻辑统一走 DispatchEngine 策略模式
Co-Authored-By: Claude (MiniMax-M2.1) <noreply@anthropic.com>
This commit is contained in:
@@ -1,7 +1,5 @@
|
||||
package com.viewsh.module.ops.service.fsm;
|
||||
|
||||
import com.viewsh.module.ops.core.event.OrderEventPublisher;
|
||||
import com.viewsh.module.ops.core.event.OrderStateChangedEvent;
|
||||
import com.viewsh.module.ops.dal.dataobject.workorder.OpsOrderDO;
|
||||
import com.viewsh.module.ops.dal.mysql.workorder.OpsOrderMapper;
|
||||
import com.viewsh.module.ops.enums.OperatorTypeEnum;
|
||||
@@ -21,17 +19,16 @@ import java.util.*;
|
||||
* 职责:
|
||||
* 1. 管理工单状态转换规则
|
||||
* 2. 执行状态转换并记录事件
|
||||
* 3. 发布状态变更事件(通过事件发布器)
|
||||
* <p>
|
||||
* 设计原则:
|
||||
* - 单一职责:只负责状态转换规则验证和状态管理
|
||||
* - 不触发业务逻辑:业务逻辑通过事件订阅处理
|
||||
* - 事件驱动:状态变更后发布事件,业务方订阅处理
|
||||
* - 事件发布由 LifecycleManager 责任链中的 EventPublishHandler 统一处理
|
||||
* <p>
|
||||
* 变更说明:
|
||||
* - 移除了监听器机制(改为事件发布)
|
||||
* - 移除了监听器机制
|
||||
* - 状态机只负责状态转换验证和状态更新
|
||||
* - 业务逻辑通过 @EventListener 订阅事件处理
|
||||
* - 事件发布职责统一由 EventPublishHandler 处理,避免重复发布
|
||||
*
|
||||
* @author lzh
|
||||
*/
|
||||
@@ -45,12 +42,6 @@ public class OrderStateMachine {
|
||||
@Resource
|
||||
private OpsOrderEventService eventService;
|
||||
|
||||
/**
|
||||
* 事件发布器(用于发布状态变更事件)
|
||||
*/
|
||||
@Resource
|
||||
private OrderEventPublisher eventPublisher;
|
||||
|
||||
/**
|
||||
* 状态转换规则(清晰可见)
|
||||
* Key: 当前状态
|
||||
@@ -163,9 +154,6 @@ public class OrderStateMachine {
|
||||
remark
|
||||
);
|
||||
|
||||
// 7. 发布状态变更事件(替代监听器机制)
|
||||
publishStateChangedEvent(order, oldStatus, newStatus, operatorType, operatorId, remark);
|
||||
|
||||
log.info("工单状态转换成功: orderId={}, {} -> {}, operatorType={}, operatorId={}",
|
||||
order.getId(), oldStatus, newStatus, operatorType, operatorId);
|
||||
}
|
||||
@@ -259,37 +247,4 @@ public class OrderStateMachine {
|
||||
default -> "STATUS_CHANGE";
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* 发布状态变更事件
|
||||
* <p>
|
||||
* 替代原有的监听器机制:
|
||||
* - 业务方通过 @EventListener 订阅事件
|
||||
* - 事件异步发布,不阻塞主流程
|
||||
*/
|
||||
private void publishStateChangedEvent(OpsOrderDO order,
|
||||
WorkOrderStatusEnum oldStatus,
|
||||
WorkOrderStatusEnum newStatus,
|
||||
OperatorTypeEnum operatorType,
|
||||
Long operatorId,
|
||||
String remark) {
|
||||
try {
|
||||
OrderStateChangedEvent event = OrderStateChangedEvent.builder()
|
||||
.orderId(order.getId())
|
||||
.orderType(order.getOrderType())
|
||||
.orderCode(order.getOrderCode())
|
||||
.oldStatus(oldStatus)
|
||||
.newStatus(newStatus)
|
||||
.operatorType(operatorType)
|
||||
.operatorId(operatorId)
|
||||
.eventTime(LocalDateTime.now())
|
||||
.remark(remark)
|
||||
.build();
|
||||
|
||||
eventPublisher.publishStateChanged(event);
|
||||
} catch (Exception e) {
|
||||
// 事件发布失败不应影响主流程
|
||||
log.error("发布状态变更事件失败: orderId={}", order.getId(), e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user