3.0 KiB
3.0 KiB
02-工单队列系统
工单队列系统是 AIOT 平台 Ops 领域的公共基础设施,用于管理工单的排队与分配。
一、队列状态机 (OrderQueueStatusEnum)
工单队列的生命周期状态:
| 队列状态 | 说明 | 对应工单状态 |
|---|---|---|
WAITING |
等待中 | QUEUED |
PROCESSING |
处理中 | DISPATCHED/CONFIRMED/ARRIVED |
PAUSED |
暂停中 | PAUSED |
REMOVED |
已移除 | COMPLETED/CANCELLED |
二、队列数据结构 (OrderQueueDTO)
核心字段:
userId:执行人员IDopsOrderId:工单IDdeviceId:工牌设备IDpriority:优先级(0=P0, 1=P1, 2=P2, 3=P3)queueScore:队列分数 = 优先级分数 + 时间戳enqueueTime:入队时间queueStatus:队列状态
三、区域模型 (OpsBusAreaDO)
区域层级(AreaTypeEnum):
PARK:园区BUILDING:楼栋FLOOR:楼层FUNCTION:功能区域
核心字段:
parentId/parentPath:区域树floorNo:楼层号areaLevel:区域等级(HIGH/MEDIUM/LOW)standardDuration:标准保洁时长(分钟)
四、派单策略 (BadgeDeviceAreaAssignStrategy)
当前启用的策略:工牌设备区域优先分配
派单流程
- 查询该区域的工牌设备(
listBadgesByArea) - 过滤在线设备(
isOnline) - 选择最佳设备:
- P0紧急:优先
canAcceptNewOrder(IDLE)、电量充足、心跳最新 - 普通任务:优先IDLE,无IDLE则选等待队列少的BUSY设备
- P0紧急:优先
推荐评分
- 基础分:50
- 状态分:可接单+30,忙碌+10
- 电量分:>80%+15,>50%+10,>20%+5
- 心跳分:5分钟内+5
出队策略(按楼层动态重算)
注意:该逻辑属于业务设计,当前 OrderQueueServiceEnhanced 代码实现中仍待补充完整落地。
在派单引擎分配等待任务时,为了提高同楼层作业效率,系统需要引入动态算分逻辑:
- 基础排序:队列内默认按
queueScore(优先级分数 + 时间戳)排队。 - 同楼层加权(出队重算):当系统准备把任务出队并派发给保洁员时,如果当前任务的区域所在的
floorNo与保洁员当前所在楼层(或上一个刚完成工单的楼层)一致,则该工单在本次出队评估时获得临时加分/权重优先。 - 目的:避免保洁员在完成当前任务后,跨楼层去处理另一个只早入队几秒钟的普通任务,而是优先扫尾同一楼层内的积压任务。
五、核心操作 (OrderQueueService)
enqueue:入队dequeue:出队startExecution:开始执行pauseTask/resumeTask:暂停/恢复adjustPriority:调整优先级getWaitingTasksByUserId:获取等待中任务
六、优先级 (PriorityEnum)
| 优先级 | 描述 | 可打断 |
|---|---|---|
| P0 | 紧急任务 | 是 |
| P1 | 重要任务 | 否 |
| P2 | 普通任务 | 否 |
| P3 | 低优任务 | 否 |