From bb94103548c388628ffd2f354c6c4e01558c5fda Mon Sep 17 00:00:00 2001 From: lzh Date: Tue, 6 Jan 2026 10:51:55 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E3=80=90ops=E3=80=91=E4=BF=9D?= =?UTF-8?q?=E6=B4=81=E5=91=98DispatchEngine?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/dispatch/DispatchEngineService.java | 174 ++++++++++++++++++ 1 file changed, 174 insertions(+) create mode 100644 viewsh-module-ops/viewsh-module-ops-api/src/main/java/com/viewsh/module/ops/api/dispatch/DispatchEngineService.java diff --git a/viewsh-module-ops/viewsh-module-ops-api/src/main/java/com/viewsh/module/ops/api/dispatch/DispatchEngineService.java b/viewsh-module-ops/viewsh-module-ops-api/src/main/java/com/viewsh/module/ops/api/dispatch/DispatchEngineService.java new file mode 100644 index 0000000..3de6ae2 --- /dev/null +++ b/viewsh-module-ops/viewsh-module-ops-api/src/main/java/com/viewsh/module/ops/api/dispatch/DispatchEngineService.java @@ -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 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; + } + } +}