chore: 【ops】FSM轻量级状态机实现

This commit is contained in:
lzh
2026-01-06 10:48:39 +08:00
parent 35564578b6
commit 9ef2730fd0
6 changed files with 536 additions and 0 deletions

View File

@@ -0,0 +1,79 @@
package com.viewsh.module.ops.environment.service.fsm.listener;
import com.viewsh.module.ops.service.fsm.event.OrderStateChangedEvent;
import com.viewsh.module.ops.service.fsm.listener.OrderStateChangeListener;
import com.viewsh.module.ops.environment.service.cleanorder.CleanOrderService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import jakarta.annotation.Resource;
/**
* 保洁工单状态变更监听器
* 职责:监听工单状态变更,执行保洁特定业务逻辑
*
* @author lzh
*/
@Slf4j
@Component
public class CleanOrderStateChangeListener implements OrderStateChangeListener {
@Resource
private CleanOrderService cleanOrderService;
@Override
public void onStateChanged(OrderStateChangedEvent event) {
// 只处理保洁类型的工单
if (!"CLEAN".equals(event.getOrder().getOrderType())) {
return;
}
log.info("保洁工单状态变更: orderId={}, {} -> {}, operatorId={}",
event.getOrder().getId(), event.getOldStatus(), event.getNewStatus(), event.getOperatorId());
// 根据新状态执行相应逻辑
switch (event.getNewStatus()) {
case QUEUED:
// 入队:无需特殊处理
break;
case DISPATCHED:
// 已推送:推送到工牌,由业务层处理
break;
case CONFIRMED:
// 确认:保洁员按键确认,由业务层处理保洁员状态
log.info("保洁工单已确认: orderId={}, cleanerId={}",
event.getOrder().getId(), event.getOperatorId());
break;
case ARRIVED:
// 到岗:记录到岗时间到扩展表
cleanOrderService.recordArrivedTime(event.getOrder().getId());
break;
case PAUSED:
// 暂停已在CleanOrderService.pauseCleanOrder()中处理
break;
case COMPLETED:
// 完成:计算作业时长,更新扩展表
cleanOrderService.calculateDuration(event.getOrder().getId());
// 触发自动推送下一个任务
if (event.getOperatorId() != null) {
cleanOrderService.autoDispatchNextOrder(event.getOrder().getId(), event.getOperatorId());
}
break;
case CANCELLED:
// 取消:清理相关状态
break;
default:
// 其他状态无需特殊处理
break;
}
}
}