Files
Environment-Monitoring-System/Design/主管任务管理功能设计.md
ChuXun 4ce487588a 1
2025-10-19 20:31:01 +08:00

183 lines
8.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 主管任务管理功能 - 设计文档
## 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 任务审核页面
- 这是一个任务详情页面,顶部清晰展示任务基础信息。
- 页面核心区域展示网格员提交的报告,包括文字说明和图片(图片支持点击放大预览)。
- 页面底部提供"批准"和"拒绝"两个操作按钮。点击"拒绝"时,必须弹出一个对话框,要求主管填写拒绝理由。