1
This commit is contained in:
183
Design/主管任务管理功能设计.md
Normal file
183
Design/主管任务管理功能设计.md
Normal file
@@ -0,0 +1,183 @@
|
||||
# 主管任务管理功能 - 设计文档
|
||||
|
||||
## 1. 功能描述
|
||||
本功能模块是系统管理(NEPM)端的核心,赋予**主管**监控所有待处理反馈,并通过手动或智能两种模式,将勘查任务高效、合理地分配给一线网格员的能力。智能分配是本模块的亮点,旨在优化资源配置,提升响应效率。
|
||||
|
||||
## 2. 涉及角色
|
||||
- **主要使用者**: `业务主管 (SUPERVISOR)`
|
||||
- **被分配者**: `网格员 (GRID_WORKER)`
|
||||
|
||||
## 3. 业务规则
|
||||
|
||||
### 3.1 任务池规则
|
||||
- 所有通过AI审核,状态为`PENDING_ASSIGNMENT`的反馈,都会进入任务分配池,展示在**主管**的工作台。
|
||||
- 任务池中的任务应支持多维度筛选(如`区域`、`污染类型`、`严重等级`)和排序。
|
||||
|
||||
### 3.2 手动分配规则
|
||||
- **主管**可以勾选一个或多个任务。
|
||||
- 然后,**主管**可以从其管辖范围内的网格员列表中,选择一个或多个来执行任务。
|
||||
- 分配后,系统会为每一个"任务-网格员"配对创建一条`assignment_record`记录。
|
||||
|
||||
### 3.3 智能分配规则
|
||||
- **触发**: **主管**选择一个任务,点击"智能分配"按钮。
|
||||
- **地图模型**: 分配算法基于简化的二维网格地图。
|
||||
- **第一步:候选集生成**:
|
||||
- 系统获取任务所在的网格坐标 (Tx, Ty)。
|
||||
- 以 (Tx, Ty) 为中心,搜索**半径10个网格单位**内的所有网格。
|
||||
- 从中筛选出状态为`ACTIVE`且有对应`skills`的网格员,形成候选集。
|
||||
- **第二步:最优人选计算**:
|
||||
- 对候选集中的每个网格员 (Gx, Gy),使用**A\*算法**计算其到目标网格的**最短路径距离 (D)**,算法需能识别并绕开`is_obstacle`为`true`的障碍网格。
|
||||
- **ETR (预计任务响应时间)** 公式: `ETR = D + (该网格员当前待处理的任务量)`。
|
||||
- ETR值**最小**的网格员即为最优人选。
|
||||
- **第三步:推荐与确认**:
|
||||
- 系统在界面上高亮推荐最优人选。
|
||||
- **主管**可以接受推荐,一键分配;也可以忽略推荐,手动选择其他候选人。
|
||||
- **算法细节记录**: 每次智能分配成功后,应将计算出的ETR、候选人列表等关键信息,以JSON格式快照存入`assignment_record`表的`algorithmDetails`字段,便于审计和追溯。
|
||||
|
||||
### 3.4 任务创建与审核规则
|
||||
- **创建任务**: 主管可不依赖公众反馈,直接在系统中创建新任务,指派给特定网格员。创建的任务直接进入`ASSIGNED`状态。
|
||||
- **审核任务**: 主管负责审核网格员提交的状态为`SUBMITTED`的任务。
|
||||
- **批准**: 任务状态变为 `COMPLETED`。
|
||||
- **拒绝**: 任务状态退回 `ASSIGNED`,并附上拒绝理由,网格员需重新处理。
|
||||
|
||||
### 3.5 ETR算法优化
|
||||
为了使智能分配更精准,ETR(预计任务响应时间)的计算公式将引入更多权重因子。
|
||||
- **基础公式**: `ETR = (A*路径距离) + (当前任务数)`
|
||||
- **优化后公式**:
|
||||
`Score = (Wd * D) + (Wn * N) - (Ws * S) + (Wp * P)`
|
||||
- `D`: A*算法计算出的路径距离。
|
||||
- `N`: 网格员当前待办任务数量。
|
||||
- `S`: 技能匹配度。如果网格员的`skills`与任务的`pollutionType`匹配,则S=1,否则S=0。
|
||||
- `P`: 任务优先级。高优先级任务P=10,中=5,低=0。用于打破僵局。
|
||||
- `Wd, Wn, Ws, Wp`: 分别是距离、任务数、技能、优先级的权重系数,可在系统配置中调整。
|
||||
- **最终选择Score最小的网格员**。
|
||||
|
||||
### 3.6 边界情况处理
|
||||
- **无可用网格员**: 在指定的搜索半径内,若没有符合条件的`ACTIVE`状态的网格员,系统应提示主管"当前区域无可用网格员,请扩大搜索范围或手动从全局列表选择"。
|
||||
- **智能分配失败**: 若因地图数据不完整等原因导致A*算法无法找到路径,系统应提示"路径计算失败,请手动分配"。
|
||||
|
||||
## 4. 功能实现流程
|
||||
|
||||
### 4.1 任务分配流程
|
||||
```mermaid
|
||||
graph TD
|
||||
A[登录NEPM端] --> B[进入任务分配页面];
|
||||
B --> C[查看"待处理"反馈列表];
|
||||
|
||||
C --> D{选择一个反馈};
|
||||
D --> E{选择分配模式};
|
||||
|
||||
E -- 手动分配 --> F[手动勾选网格员];
|
||||
E -- 智能分配 --> G[系统执行A*算法<br>计算ETR并推荐人选];
|
||||
|
||||
G --> H{主管是否<br>接受推荐?};
|
||||
H -- 是 --> I[确认分配给<br>推荐人选];
|
||||
H -- 否 --> F;
|
||||
|
||||
F --> J[确认分配];
|
||||
I --> J;
|
||||
|
||||
J --> K[创建AssignmentRecord];
|
||||
K --> L[更新Feedback状态<br>为ASSIGNED];
|
||||
L --> M[通过NEPG端<br>通知网格员];
|
||||
|
||||
style G fill:#E3F2FD
|
||||
style L fill:#C8E6C9
|
||||
```
|
||||
|
||||
### 4.2 任务审核流程
|
||||
```mermaid
|
||||
graph TD
|
||||
A[主管进入"待审核"任务列表] --> B{选择一个任务};
|
||||
B --> C[查看网格员提交的报告和图片];
|
||||
C --> D{审核是否通过?};
|
||||
D -- 是 --> E[更新任务状态为 COMPLETED];
|
||||
D -- 否 --> F[填写拒绝理由];
|
||||
F --> G[更新任务状态为 ASSIGNED];
|
||||
G --> H[通知网格员重新处理];
|
||||
|
||||
style E fill:#C8E6C9;
|
||||
style G fill:#FFCDD2;
|
||||
```
|
||||
|
||||
## 5. API 接口设计
|
||||
|
||||
### 5.1 查询待处理反馈列表
|
||||
- **URL**: `GET /api/management/tasks/pending`
|
||||
- **权限**: `SUPERVISOR`
|
||||
- **查询参数**: `region`, `pollutionType`, `severity`, `page`, `size`
|
||||
- **成功响应** (`200 OK`): 返回分页的反馈列表。
|
||||
|
||||
### 5.2 查询可用网格员列表
|
||||
- **URL**: `GET /api/management/grid-workers/available`
|
||||
- **权限**: `SUPERVISOR`
|
||||
- **查询参数**: `region`
|
||||
- **成功响应** (`200 OK`): 返回指定区域内所有状态为`ACTIVE`的网格员列表,包含其当前位置和任务负载。
|
||||
|
||||
### 5.3 手动分配任务
|
||||
- **URL**: `POST /api/management/tasks/assign/manual`
|
||||
- **权限**: `SUPERVISOR`
|
||||
- **请求体**:
|
||||
```json
|
||||
{
|
||||
"feedbackId": 123,
|
||||
"gridWorkerIds": [10, 15],
|
||||
"remarks": "请尽快处理"
|
||||
}
|
||||
```
|
||||
- **成功响应** (`200 OK`): `{ "message": "任务分配成功" }`
|
||||
|
||||
### 5.4 智能分配任务
|
||||
- **URL**: `POST /api/management/tasks/assign/intelligent`
|
||||
- **权限**: `SUPERVISOR`
|
||||
- **请求体**: `{"feedbackId": 123}`
|
||||
- **成功响应** (`200 OK`): 返回包含最优人选和候选集信息的JSON,供前端渲染。
|
||||
```json
|
||||
{
|
||||
"recommended": { "userId": 10, "name": "王伟", "score": 15.8, ... },
|
||||
"candidates": [ ... ]
|
||||
}
|
||||
```
|
||||
|
||||
### 5.5 审核任务
|
||||
- **URL**: `POST /api/management/tasks/{taskId}/review`
|
||||
- **权限**: `SUPERVISOR`
|
||||
- **请求体**:
|
||||
```json
|
||||
{
|
||||
"approved": false,
|
||||
"comments": "图片不清晰,请重新拍摄现场照片。"
|
||||
}
|
||||
```
|
||||
- **成功响应** (`200 OK`): `{ "message": "审核操作已完成" }`
|
||||
|
||||
## 6. 界面设计要求
|
||||
|
||||
### 6.1 任务分配主页面
|
||||
- **布局**: 采用左右分栏布局。
|
||||
- **左侧**: 待处理反馈列表。以紧凑的列表或表格形式展示,包含`标题`、`区域`、`严重等级`。提供筛选和搜索功能。
|
||||
- **右侧**: 网格员地图视图。实时展示所选反馈位置,以及管辖区域内所有网格员的分布。**每个网格员的图标应能通过大小或颜色深浅,直观反映其当前的负载(待处理任务数)**。
|
||||
- **交互**:
|
||||
- 点击左侧列表中的一个反馈项,右侧地图应立即定位到该反馈所在的网格,并高亮显示。
|
||||
- 同时,地图上应以不同颜色或图标区分网格员的实时状态(如`空闲`-绿色,`繁忙`-橙色,`休假`-灰色)。
|
||||
|
||||
### 6.2 分配操作界面
|
||||
- **触发**: **主管**在左侧列表中选中一个反馈后,列表项下方出现"手动分配"和"智能分配"两个按钮。
|
||||
- **手动分配**:
|
||||
- 点击后,弹出一个包含所有可选网格员列表的对话框。
|
||||
- 列表支持搜索和多选。
|
||||
- **主管**勾选后点击确认即可分配。
|
||||
- **智能分配**:
|
||||
- 点击后,右侧地图视图进入"推荐模式"。
|
||||
- 系统计算后,在地图上用醒目的高亮效果(如闪烁的星星或光圈)标记出最优人选。
|
||||
- 同时,在地图下方或侧边栏显示一个信息卡片,包含推荐人选的姓名、当前任务量、**技能匹配度**、**距离**和最终的**推荐分数**,并提供一个"一键分配"按钮。
|
||||
- 其他候选人以普通方式显示,**主管**仍可点击查看其分数详情并选择。
|
||||
|
||||
### 6.3 任务创建页面
|
||||
- 提供一个独立的表单页面,允许主管填写`标题`、`描述`、`污染类型`、`严重等级`、`地理位置`等所有任务相关信息。
|
||||
- 表单下方直接集成一个网格员选择器,方便主管创建后立即指派。
|
||||
|
||||
### 6.4 任务审核页面
|
||||
- 这是一个任务详情页面,顶部清晰展示任务基础信息。
|
||||
- 页面核心区域展示网格员提交的报告,包括文字说明和图片(图片支持点击放大预览)。
|
||||
- 页面底部提供"批准"和"拒绝"两个操作按钮。点击"拒绝"时,必须弹出一个对话框,要求主管填写拒绝理由。
|
||||
Reference in New Issue
Block a user