chore: 【ops】FSM轻量级状态机实现
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user