chore: 【ops】保洁员DispatchEngine

This commit is contained in:
lzh
2026-01-06 10:51:55 +08:00
parent 43a47a465c
commit bb94103548

View File

@@ -0,0 +1,174 @@
package com.viewsh.module.ops.api.dispatch;
import com.viewsh.module.ops.api.queue.OrderQueueDTO;
import com.viewsh.module.ops.enums.DispatchStrategyEnum;
import com.viewsh.module.ops.enums.PriorityEnum;
import java.util.List;
/**
* 派单引擎服务接口
* 提供工单自动派单、手动派单、紧急派单等功能
*
* @author lzh
*/
public interface DispatchEngineService {
/**
* 自动派单
* 根据工单的派单策略自动分配执行人员
*
* @param queueId 队列记录ID
* @return 是否派单成功
*/
boolean autoDispatch(Long queueId);
/**
* 手动派单
* 管理员手动指定执行人员
*
* @param queueId 队列记录ID
* @param assigneeId 执行人员ID
* @return 是否派单成功
*/
boolean manualDispatch(Long queueId, Long assigneeId);
/**
* 批量自动派单
* 批量处理指定区域的待派单任务
*
* @param areaId 区域ID可选null表示处理所有区域
* @param batchSize 批次大小
* @return 实际派单成功的数量
*/
int batchAutoDispatch(Long areaId, int batchSize);
/**
* 紧急派单
* 处理P0紧急任务立即分配可用的执行人员
* 如果所有人员都在忙,可以考虑:
* 1. 打断正在执行低优先级任务的人员
* 2. 跨区域调派人员
*
* @param queueId 队列记录ID
* @return 是否派单成功
*/
boolean urgentDispatch(Long queueId);
/**
* 处理紧急插队
* 当工单优先级被升级为P0时需要重新评估并打断当前低优先级任务的执行
*
* @param orderId 工单ID
* @return 是否成功处理
*/
boolean handlePriorityInterrupt(Long orderId);
/**
* 查询可用的执行人员
* 根据区域、技能等条件查询可派单的人员
*
* @param areaId 区域ID
* @param assigneeType 执行人员类型CLEANER、SECURITY等
* @return 可用人员ID列表
*/
List<Long> findAvailableAssignees(Long areaId, String assigneeType);
/**
* 推荐最佳执行人员
* 根据派单策略推荐最合适的执行人员
*
* @param queueId 队列记录ID
* @param dispatchStrategy 派单策略
* @return 推荐的执行人员ID如果没有合适的返回null
*/
Long recommendAssignee(Long queueId, DispatchStrategyEnum dispatchStrategy);
/**
* 获取派单建议
* 为指定工单提供派单建议,包括推荐人员和原因
*
* @param queueId 队列记录ID
* @return 派单建议
*/
DispatchSuggestion getDispatchSuggestion(Long queueId);
/**
* 取消派单
* 取消已派单但未接单的任务
*
* @param queueId 队列记录ID
* @param reason 取消原因
* @return 是否成功
*/
boolean cancelDispatch(Long queueId, String reason);
/**
* 重新派单
* 将派单失败或超时的任务重新派单
*
* @param queueId 队列记录ID
* @return 是否成功
*/
boolean redispatch(Long queueId);
/**
* 启动派单引擎
* 启动定时任务,自动处理待派单队列
*/
void startDispatchEngine();
/**
* 停止派单引擎
* 停止定时任务
*/
void stopDispatchEngine();
/**
* 派单建议
*/
class DispatchSuggestion {
/**
* 推荐的执行人员ID
*/
private Long assigneeId;
/**
* 执行人员姓名
*/
private String assigneeName;
/**
* 推荐理由
*/
private String reason;
/**
* 匹配度分数0-100
*/
private Integer score;
public DispatchSuggestion(Long assigneeId, String assigneeName, String reason, Integer score) {
this.assigneeId = assigneeId;
this.assigneeName = assigneeName;
this.reason = reason;
this.score = score;
}
public Long getAssigneeId() {
return assigneeId;
}
public String getAssigneeName() {
return assigneeName;
}
public String getReason() {
return reason;
}
public Integer getScore() {
return score;
}
}
}