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