diff --git a/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/service/cleanorder/CleanOrderService.java b/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/service/cleanorder/CleanOrderService.java index aa49d75..b4ece92 100644 --- a/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/service/cleanorder/CleanOrderService.java +++ b/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/service/cleanorder/CleanOrderService.java @@ -40,14 +40,6 @@ public interface CleanOrderService { */ void enqueueOrderOnly(Long orderId, Long cleanerId); - /** - * 入队并立即推送(空闲保洁员,状态:PENDING → QUEUED → DISPATCHED) - * - * @param orderId 工单ID - * @param cleanerId 保洁员ID - */ - void enqueueAndDispatch(Long orderId, Long cleanerId); - /** * 推送工单到工牌(状态:QUEUED → DISPATCHED) * 支持并发控制,防止重复推送 diff --git a/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/service/cleanorder/CleanOrderServiceImpl.java b/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/service/cleanorder/CleanOrderServiceImpl.java index cc8665a..d8a3951 100644 --- a/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/service/cleanorder/CleanOrderServiceImpl.java +++ b/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/service/cleanorder/CleanOrderServiceImpl.java @@ -179,44 +179,6 @@ public class CleanOrderServiceImpl implements CleanOrderService { log.info("工单已入队: orderId={}, deviceId={}", orderId, deviceId); } - @Override - @Transactional(rollbackFor = Exception.class) - public void enqueueAndDispatch(Long orderId, Long deviceId) { - enqueueAndDispatch(orderId, deviceId, false); - } - - @Transactional(rollbackFor = Exception.class) - public void enqueueAndDispatch(Long orderId, Long deviceId, boolean isUrgent) { - // 查询工单 - OpsOrderDO order = opsOrderMapper.selectById(orderId); - if (order == null) { - log.error("工单不存在: orderId={}", orderId); - return; - } - - if (isUrgent) { - // P0紧急任务:使用紧急插队 - DispatchResult result = dispatchEngine.urgentInterrupt(orderId, deviceId); - log.warn("P0紧急派单结果: orderId={}, success={}", orderId, result.isSuccess()); - } else { - // 普通任务:正常派单 - OrderTransitionRequest request = OrderTransitionRequest.builder() - .orderId(orderId) - .targetStatus(WorkOrderStatusEnum.DISPATCHED) - .assigneeId(deviceId) - .operatorType(OperatorTypeEnum.SYSTEM) - .operatorId(deviceId) - .reason("自动派单") - .build(); - - orderLifecycleManager.dispatch(request); - log.info("工单已派发: orderId={}, deviceId={}", orderId, deviceId); - } - - // 语音播报 - cleanOrderEventListener.sendNewOrderNotification(deviceId, orderId); - } - @Override @Transactional(rollbackFor = Exception.class) public void dispatchToCleaner(Long queueId) { diff --git a/viewsh-module-ops/viewsh-module-environment-biz/src/test/java/com/viewsh/module/ops/environment/service/cleanorder/CleanOrderEndToEndTest.java b/viewsh-module-ops/viewsh-module-environment-biz/src/test/java/com/viewsh/module/ops/environment/service/cleanorder/CleanOrderEndToEndTest.java index 4f24c22..5b05d67 100644 --- a/viewsh-module-ops/viewsh-module-environment-biz/src/test/java/com/viewsh/module/ops/environment/service/cleanorder/CleanOrderEndToEndTest.java +++ b/viewsh-module-ops/viewsh-module-environment-biz/src/test/java/com/viewsh/module/ops/environment/service/cleanorder/CleanOrderEndToEndTest.java @@ -221,36 +221,6 @@ public class CleanOrderEndToEndTest { verify(opsOrderMapper, times(1)).insert(any(OpsOrderDO.class)); } - // ========================================== - // DP-01 ~ DP-03: 智能调度测试 (模拟) - // ========================================== - - @Test - void testDP03_P0UrgentInterrupt() { - injectField(cleanOrderService, "dispatchEngine", dispatchEngine); - injectField(cleanOrderService, "opsOrderMapper", opsOrderMapper); - - // 准备一个 P0 紧急工单 - Long orderId = 999L; - Long cleanerId = 2001L; - - OpsOrderDO order = OpsOrderDO.builder() - .id(orderId) - .priority(PriorityEnum.P0.getPriority()) - .build(); - orderDB.put(orderId, order); - - // 模拟调度引擎返回成功 - when(dispatchEngine.urgentInterrupt(eq(orderId), eq(cleanerId))) - .thenReturn(DispatchResult.success("P0插队成功", cleanerId)); - - // 执行派单 - cleanOrderService.enqueueAndDispatch(orderId, cleanerId, true); - - // 验证 - verify(dispatchEngine).urgentInterrupt(eq(orderId), eq(cleanerId)); - } - // ========================================== // AV-01 ~ AV-03: 到岗校验测试 // ========================================== diff --git a/viewsh-module-ops/viewsh-module-ops-biz/src/main/java/com/viewsh/module/ops/service/fsm/OrderStateMachine.java b/viewsh-module-ops/viewsh-module-ops-biz/src/main/java/com/viewsh/module/ops/service/fsm/OrderStateMachine.java index 8a3e655..e2a0338 100644 --- a/viewsh-module-ops/viewsh-module-ops-biz/src/main/java/com/viewsh/module/ops/service/fsm/OrderStateMachine.java +++ b/viewsh-module-ops/viewsh-module-ops-biz/src/main/java/com/viewsh/module/ops/service/fsm/OrderStateMachine.java @@ -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. 发布状态变更事件(通过事件发布器) *

* 设计原则: * - 单一职责:只负责状态转换规则验证和状态管理 * - 不触发业务逻辑:业务逻辑通过事件订阅处理 - * - 事件驱动:状态变更后发布事件,业务方订阅处理 + * - 事件发布由 LifecycleManager 责任链中的 EventPublishHandler 统一处理 *

* 变更说明: - * - 移除了监听器机制(改为事件发布) + * - 移除了监听器机制 * - 状态机只负责状态转换验证和状态更新 - * - 业务逻辑通过 @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"; }; } - - /** - * 发布状态变更事件 - *

- * 替代原有的监听器机制: - * - 业务方通过 @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); - } - } }