主题
待办管理 PRD
文档信息
| 项目 | 内容 |
|---|---|
| 产品名称 | PMForge - 待办管理 |
| 文档版本 | v2.0 |
| 创建日期 | 2026-09-19 |
| 最后更新 | 2026-09-24 |
| 文档状态 | 评审中 |
| 优先级 | P0 |
一、功能概述
1.1 功能定位
如果把「我的流程」(03-03)比作员工手中的"导航仪"——告诉你申请走到了哪一步,那么「待办管理」就是管理者和审批人面前的"审批指挥中心"。
这里是整个企业审批流转的调度台:审批人在这里处理堆积的审批任务,部门负责人在这里查看团队的审批效率报表,系统管理员在这里干预异常流程、批量催办积压任务。一句话概括——所有需要"管"审批的地方,都在这里。
本模块基于 Flowable 6.8.0 引擎,提供五大核心能力:
| 能力 | 通俗解释 | 谁在用 |
|---|---|---|
| 待办任务列表 | 审批人的"工作台",一眼看到所有待审批的任务 | 审批人 |
| 任务审批 | 审批操作的"工具箱"——通过、驳回、转办、委派、加签、减签 | 审批人 |
| 已办任务 | 审批人的"工作日志",回顾自己处理过什么 | 审批人 |
| 任务统计 | 管理者的"效率仪表盘"——谁审批最快、哪个流程最慢、超时了多少 | 部门负责人、管理员 |
| 催办管理 | 流程停滞时的"闹钟"——自动或手动催促审批人处理 | 管理员、流程管理员 |
1.2 目标用户
| 用户类型 | 典型角色 | 使用场景 | 核心诉求 |
|---|---|---|---|
| 审批人 | 部门经理王经理 | 每天处理十几条审批,需要快速看清内容、一键操作 | 操作快、不遗漏、能批量处理 |
| 部门负责人 | 研发总监老张 | 月度复盘时发现团队审批平均耗时48小时,想找到瓶颈 | 数据直观、能定位到人 |
| 系统管理员 | IT运维小陈 | 月底发现大量历史待办积压,需要批量催办和转办 | 全局视角、批量操作 |
| 流程管理员 | BPM配置专员李姐 | 配置自动催办规则,让超时任务自动提醒 | 规则灵活、日志可查 |
1.3 业务价值
- 审批效率提升:结构化的待办列表 + 批量操作,减少审批人逐条查找的重复劳动
- 流程停滞减少:自动催办 + 超时预警双管齐下,避免审批任务"石沉大海"
- 管理决策有据:任务统计看板用数据说话——哪个部门审批最慢、哪类流程超时最多,一目了然
- 复杂场景覆盖:转办、委派、加签、减签等操作覆盖企业真实审批中的各种"特殊情况"
- 审计追溯完整:每一条审批操作、每一次催办都留有完整记录,满足合规审计要求
1.4 功能范围
| 功能分类 | 功能项 | 说明 |
|---|---|---|
| 待办任务列表 | 任务表格展示 | 展示任务名称/流程/发起人/到达时间/停留时长/紧急程度 |
| 待办任务列表 | 多维度筛选 | 按流程类型、发起人、时间范围、紧急程度、超时状态筛选 |
| 待办任务列表 | 批量操作 | 批量通过、批量转办、批量催办(每次最多50条) |
| 待办任务列表 | 任务搜索 | 按关键字搜索任务名称、流程名称 |
| 任务审批 | 审批操作面板 | 左侧展示任务详情(表单+流程图+审批记录),右侧展示操作按钮 |
| 任务审批 | 审批通过 | 同意流程继续流转到下一节点 |
| 任务审批 | 审批驳回 | 驳回到发起人/上一节点/指定节点 |
| 任务审批 | 退回操作 | 退回到之前任意已完成的历史节点 |
| 任务审批 | 转办操作 | 将任务完全转交给其他用户 |
| 任务审批 | 委派操作 | 临时委派给其他用户,处理后返回原审批人 |
| 任务审批 | 加签操作 | 前加签/后加签,动态增加审批人 |
| 任务审批 | 减签操作 | 移除加签产生的审批任务 |
| 任务审批 | 审批意见 | 填写审批意见和上传附件 |
| 已办任务 | 已办列表 | 查看当前用户已处理的审批任务 |
| 已办任务 | 审批详情 | 查看审批操作详细信息(意见、附件、耗时) |
| 任务统计 | 概览卡片 | 待办总数/今日新增/今日完成/超时数/平均处理时长 |
| 任务统计 | 趋势图表 | 待办趋势/流程分布/处理时长对比/超时率趋势 |
| 任务统计 | 效率排行 | 部门排行/个人排行/超时排行(Top 20) |
| 催办管理 | 手动催办 | 通过站内信/邮件/短信发送催办通知 |
| 催办管理 | 催办记录 | 查看所有催办历史 |
| 催办管理 | 自动催办规则 | 配置超时阈值、催办频率、通知方式等自动化规则 |
二、用户场景
2.1 用户角色
| 角色 | 描述 | 核心诉求 |
|---|---|---|
| 审批人 | 被分配到审批任务的普通用户,如部门经理 | 快速看清审批内容、一键完成操作、特殊情况下灵活转交 |
| 部门负责人 | 管理团队审批效率的管理者,如研发总监 | 看到团队效率数据、发现超时瓶颈、督促改进 |
| 系统管理员 | 平台技术管理人员 | 全局任务管理、异常流程干预、批量操作 |
| 流程管理员 | BPM 规则配置人员 | 配置催办规则、查看催办日志、管理统计报表 |
2.2 使用场景
场景1:审批人王经理处理待办任务
- 用户:部门经理王经理
- 场景:王经理早上登录系统 → 顶部导航的待办角标显示"5" → 点击进入「待办管理」→ 看到5条待审批任务,其中1条报销申请已超时(整行标红)、1条采购申请标记为"特急" → 先点击超时的报销申请 → 左侧看到报销明细和发票附件、右侧是操作按钮 → 审阅后填写"同意,金额合理" → 点击「通过」→ 任务从列表消失 → 接着处理下一条
- 期望:超时任务一眼就能看到、审批操作不绕弯子、处理完立刻消失
场景2:审批人驳回并说明原因
- 用户:审批人王经理
- 场景:王经理查看小刘的请假申请 → 发现请假天数和考勤系统对不上 → 点击「驳回」→ 选择"驳回到发起人" → 填写驳回原因"请假天数与考勤记录不符,请核实后重新提交" → 上传附件(考勤截图)→ 点击「确认驳回」→ 小刘收到驳回通知,可以在「我的流程」里看到驳回原因并修改后重新提交
- 期望:驳回时能同时写原因和传附件,让发起人清楚知道哪里有问题
场景3:审批人转办任务
- 用户:审批人王经理
- 场景:王经理下周出差,但有一条审批预计这几天就到 → 打开待办任务 → 点击「转办」→ 在候选人列表搜索"副经理" → 选择张副经理 → 填写说明"本人下周出差,转请张经理代为审批" → 点击「确认转办」→ 任务出现在张副经理的待办列表 → 王经理的已办记录里显示"已转办给张副经理"
- 期望:转办后各方都收到通知、已办记录里能看到转办去向
场景4:加签处理复杂审批
- 用户:审批人王经理
- 场景:审批一笔大额采购申请 → 王经理不懂技术参数,需要技术总监确认 → 点击「加签」→ 选择"前加签"(让技术总监先看)→ 选择技术总监赵总 → 填写说明"请赵总确认采购设备的技术参数是否满足项目需求" → 赵总收到待办任务 → 赵总审批通过后 → 任务回到王经理这里 → 王经理看到赵总的意见"技术参数满足" → 最终审批通过
- 期望:加签人能看到完整申请信息、加签完成后任务正常返回
场景5:部门总监老张查看效率统计
- 用户:研发总监老张
- 场景:月度管理会上老板问"审批效率怎么样" → 老张打开「任务统计」→ 概览卡片显示:待办85件、平均处理时长12小时、超时15件 → 切到"个人效率排行" → 发现小赵平均处理时长48小时,排在最后 → 点进小赵的名字 → 跳转到小赵的待办列表 → 发现积压了12件 → 会后找小赵沟通,发现是请假期间积压的 → 协助批量转办给其他同事
- 期望:数据能下钻到具体人员和任务,不只是看个数字
场景6:管理员小陈批量催办积压任务
- 用户:系统管理员小陈
- 场景:月底小陈发现系统里有大量历史待办积压 → 进入「待办任务列表」→ 筛选"停留超过30天" → 出来23条结果 → 全选 → 点击「批量催办」→ 系统向所有相关审批人发送催办通知 → 其中3条是无主任务(原审批人已离职)→ 小陈把这3条批量转办给在职人员 → 操作完成
- 期望:批量操作减少逐条处理的重复工作、操作结果有反馈
场景7:流程管理员李姐配置自动催办
- 用户:流程管理员李姐
- 场景:老板反馈"有些审批一放就是半个月没人管" → 李姐进入「催办管理」→ 点击「催办规则配置」→ 新建规则:名称"通用超时催办"、超时阈值24小时、催办间隔12小时、最多催办3次、通知方式"站内信+邮件" → 保存并启用 → 之后系统每30分钟自动检查一次 → 有任务超时就自动发催办通知 → 李姐在催办记录里能看到每次催办的详情
- 期望:规则配置一次、长期自动执行、催办记录完整可查
2.3 用户故事
| 编号 | 用户故事 | 验收标准 |
|---|---|---|
| US-01 | 作为审批人,我希望看到清晰的待办任务列表,以便快速处理审批 | ①列表展示任务名称、流程、发起人、到达时间、停留时长 ②超时任务行标红 ③按到达时间升序排列 ④支持按流程类型、发起人、紧急程度筛选 |
| US-02 | 作为审批人,我希望能执行通过/驳回/转办/委派/加签/减签操作 | ①审批面板左侧展示表单+流程图+审批记录 ②每种操作有独立的确认弹窗 ③驳回原因必填 ④操作成功后列表实时更新 |
| US-03 | 作为审批人,我希望能批量处理同类任务 | ①支持批量通过(限同类型流程)、批量转办、批量催办 ②每次最多50条 ③操作结果逐条反馈 |
| US-04 | 作为部门负责人,我希望看到团队审批效率统计 | ①概览卡片展示待办数/今日新增/今日完成/超时数/平均时长 ②支持部门/流程类型/时间范围筛选 ③效率排行可下钻到个人 |
| US-05 | 作为管理员,我希望能配置自动催办规则 | ①可设置超时阈值、催办间隔、最大催办次数 ②可指定适用流程和部门 ③规则支持启用/禁用 ④自动催办每30分钟执行 |
| US-06 | 作为审批人,我希望能查看已办任务记录 | ①展示审批动作、意见摘要、处理耗时 ②支持按动作类型和时间筛选 ③点击可查看详情 |
| US-07 | 作为管理员,我希望能导出统计报表 | ①支持导出为Excel ②包含概览数据和排行数据 ③1000条数据内5秒完成 |
三、功能需求
3.1 待办任务列表
3.1.1 功能描述
待办任务列表是审批人的"工作台"——打开这个页面,就能看到所有等着自己审批的任务。表格展示任务名称、所属流程、发起人、到达时间、停留时长、紧急程度等关键信息。支持多维度筛选、关键字搜索和批量操作。
与「我的流程」的区别:「我的流程」(03-03)是普通员工看的,用的是
/app-api/接口;这里是管理端审批人看的,用的是/admin-api/接口,管理员还可以通过指定审批人ID查看别人的待办。
3.1.2 页面结构

3.1.3 操作流程
1. 用户进入「待办管理」页面
2. 默认展示「待办任务」Tab,以表格形式展示当前用户所有待处理任务
3. 列表展示字段:复选框、任务名称、所属流程、发起人、发起部门、到达时间、停留时长、紧急程度、操作
4. 停留时长超过配置阈值(默认24小时)的任务行标红提醒
5. 紧急程度根据停留时长自动计算:
- 停留 < 12小时 → 普通(蓝色标签)
- 12~24小时 → 紧急(橙色标签)
- > 24小时 → 特急(红色标签)
6. 用户可通过顶部筛选栏进行多维度筛选:
a. 流程类型下拉选择
b. 发起人搜索(姓名模糊匹配)
c. 时间范围选择(到达时间)
d. 紧急程度筛选
e. 超时状态筛选(全部/已超时/未超时)
7. 用户可在搜索框输入关键字搜索(任务名称、流程名称)
8. 用户可勾选多个任务进行批量操作:
a. 批量通过(需所有选中任务属于同一流程类型,填写统一审批意见)
b. 批量转办(选择目标人后批量转移,不限流程类型)
c. 批量催办(向每个任务的发起人发送催办通知)
9. 单条操作列包含:审批、查看详情
10. 点击任务名称或「审批」按钮进入审批操作面板
11. 列表支持分页,默认每页 10 条
12. 列表按到达时间升序排列(最早的排最前面)3.1.4 业务规则
| 规则编号 | 规则描述 | 设计原因 |
|---|---|---|
| R-01 | 仅展示当前登录用户作为审批人的待处理任务 | 数据隔离基本要求,审批人只看自己的活 |
| R-02 | 列表默认按任务到达时间升序排列 | 先来的先处理,避免早期任务被遗忘 |
| R-03 | 停留时长 = 当前时间 - 任务到达时间,前端实时刷新(格式:X天X小时X分) | 让审批人直观感受任务紧急程度 |
| R-04 | 停留时长超过超时阈值(默认24小时)的任务行背景标红 | 视觉冲击提醒审批人优先处理 |
| R-05 | 紧急程度默认规则:停留 < 12小时=普通,12~24小时=紧急,> 24小时=特急 | 用颜色分级帮助审批人排优先级 |
| R-06 | 批量通过要求所有选中任务属于同一流程类型 | 不同流程的审批表单不同,无法统一填写意见 |
| R-07 | 批量转办不限制流程类型,统一转移到指定目标人 | 转办不涉及审批内容,只需指定接收人 |
| R-08 | 批量操作每次最多选择 50 条任务 | 防止一次性操作过多导致系统压力和数据错误 |
| R-09 | 当待办任务数量变化时,页面顶部的待办数量角标实时更新 | 让审批人随时知道有没有新任务进来 |
| R-10 | 支持键盘快捷键:Space 全选/取消全选,Enter 进入审批 | 提升高频用户的操作效率 |
3.1.5 接口列表
| 接口名称 | 请求方式 | 接口路径 | 说明 |
|---|---|---|---|
| 获取待办任务分页列表 | GET | /admin-api/bpm/todo/page | 分页查询待办任务列表(管理端) |
| 获取待办任务数量统计 | GET | /admin-api/bpm/todo/count | 获取待办任务总数 |
| 获取待办任务筛选条件 | GET | /admin-api/bpm/todo/filter-options | 获取筛选器下拉选项 |
| 批量通过任务 | PUT | /admin-api/bpm/todo/batch-approve | 批量审批通过 |
| 批量转办任务 | PUT | /admin-api/bpm/todo/batch-transfer | 批量转办任务 |
| 批量催办任务 | POST | /admin-api/bpm/todo/batch-urge | 批量催办任务 |
请求参数(分页查询):
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| processName | String | 否 | 流程名称(模糊匹配) |
| processDefinitionKey | String | 否 | 流程定义标识 |
| taskName | String | 否 | 任务名称(模糊匹配) |
| originatorUserId | Long | 否 | 发起人用户ID |
| originatorName | String | 否 | 发起人姓名(模糊匹配) |
| category | String | 否 | 流程分类标识 |
| urgencyLevel | Integer | 否 | 紧急程度(1-普通 2-紧急 3-特急) |
| isTimeout | Boolean | 否 | 是否超时 |
| createTime | DateTime[] | 否 | 任务到达时间范围 |
| assigneeUserId | Long | 否 | 审批人用户ID(管理员可指定,用于查看他人的待办) |
| pageNo | Integer | 是 | 页码(默认1) |
| pageSize | Integer | 是 | 每页条数(默认10,最大50) |
返回结果(分页列表项):
| 字段名 | 类型 | 说明 |
|---|---|---|
| taskId | String | 任务ID |
| taskName | String | 任务名称 |
| processInstanceId | Long | 流程实例ID |
| processName | String | 流程名称 |
| processDefinitionKey | String | 流程定义标识 |
| category | String | 流程分类名称 |
| originatorUserId | Long | 发起人ID |
| originatorName | String | 发起人姓名 |
| originatorDeptName | String | 发起人部门 |
| formData | JSON | 表单摘要数据 |
| assigneeUserId | Long | 审批人ID |
| assigneeName | String | 审批人姓名 |
| createTime | DateTime | 任务到达时间 |
| duration | Long | 停留时长(毫秒) |
| durationText | String | 停留时长文本(如"2天3小时") |
| urgencyLevel | Integer | 紧急程度(1-普通 2-紧急 3-特急) |
| isTimeout | Boolean | 是否超时 |
| suspension | Integer | 是否挂起(0-正常 1-挂起) |
3.2 任务审批
3.2.1 功能描述
任务审批是审批人的"工具箱"——打开审批面板,左边看详情(表单数据、流程图、审批记录),右边做操作(通过、驳回、退回、转办、委派、加签、减签)。每种操作都有独立的确认弹窗,避免误操作。
与「我的流程-待我审批」的关系:03-03 里的「待我审批」是普通用户视角,功能相同但界面更简洁;这里的审批面板是管理端视角,额外支持管理员查看任意审批人的任务详情。
3.2.2 页面结构

3.2.3 操作流程
审批通过:
1. 审批人审阅左侧任务详情(表单数据、附件)
2. 点击「通过」按钮
3. 填写审批意见(可选)
4. 上传审批附件(可选,最多5个,单个≤10MB)
5. 点击「确认提交」
6. 系统校验操作合法性(是否为当前任务审批人、任务是否已被处理)
7. 流程流转到下一节点
8. 系统通知下一节点审批人
9. 提示操作成功,返回待办列表审批驳回:
1. 审批人点击「驳回」按钮
2. 弹出驳回对话框,选择驳回方式:
a. 驳回到发起人 —— 流程从头开始,发起人修改后可重新提交
b. 驳回到上一节点 —— 流程退回到紧邻的前一个审批节点
c. 驳回到指定节点 —— 弹出节点选择器,选择任意历史节点
3. 填写驳回原因(必填,最大500字符)
4. 上传附件(可选,如问题截图等)
5. 点击「确认驳回」
6. 流程退回到指定位置
7. 系统通知相关人员(发起人/目标节点审批人)
8. 提示操作成功退回操作:
1. 审批人点击「退回」按钮
2. 系统展示可退回的历史节点列表(已完成的前序节点)
3. 审批人选择退回目标节点
4. 填写退回原因(必填)
5. 点击「确认退回」
6. 流程退回到目标节点,目标节点原审批人需重新审批
7. 目标节点审批人收到待办通知退回 vs 驳回的区别:驳回是"打回给发起人"或"打回给上一级",偏向否定申请;退回是"退回到之前某个节点重新审",偏向流程回退。退回的目标节点范围更广(任意已完成节点),驳回更聚焦(发起人/上一节点/指定节点)。
转办操作:
1. 审批人点击「转办」按钮
2. 弹出候选人选择器(支持搜索姓名、按部门树筛选)
3. 选择转办目标人
4. 填写转办说明(可选)
5. 点击「确认转办」
6. 任务从原审批人待办列表消失,出现在目标人待办列表
7. 原审批人已办记录中标记"已转办给XXX"
8. 目标人收到待办通知委派操作:
1. 审批人点击「委派」按钮
2. 弹出候选人选择器
3. 选择委派目标人
4. 设置委派期限(天数,可选,到期系统自动提醒)
5. 填写委派说明(可选)
6. 点击「确认委派」
7. 任务临时转移到被委派人(任务状态变为"已委派")
8. 被委派人处理完成后,任务自动返回原审批人
9. 原审批人查看委派结果后做最终确认(通过/驳回)委派 vs 转办的区别:转办是"这个活归你了",任务完全转移,原审批人不再参与;委派是"你先帮我看看,最后我来拍板",任务临时转移,处理后还要回来。
加签操作:
1. 审批人点击「加签」按钮
2. 选择加签方式:
a. 前加签 —— 加签人先审,审完回到原审批人
b. 后加签 —— 原审批人先审,然后流转到加签人
3. 弹出加签人员选择器(支持选多人)
4. 设置审批方式:会签(所有人都要通过)/ 或签(任一通过即可)
5. 填写加签说明(可选)
6. 点击「确认加签」
7. 系统生成加签任务,加签人员收到待办通知前加签 vs 后加签:前加签像"请专家先把关"——技术总监先看,看完回到你这;后加签像"我审完了你再看"——你先通过,然后加签人再审。
减签操作:
1. 审批人点击「减签」按钮
2. 系统展示当前任务链中可减掉的任务列表(仅加签产生的任务)
3. 审批人勾选需要减掉的任务
4. 填写减签说明(可选)
5. 点击「确认减签」
6. 被减签的任务自动关闭,加签人收到任务取消通知减签限制:只能减掉加签产生的任务,不能减掉流程定义中的原始审批节点。这是为了保护流程设计的完整性。
3.2.4 审批操作速查表
| 操作 | 通俗解释 | 任务去向 | 原审批人是否还参与 |
|---|---|---|---|
| 通过 | "我同意往下走" | 流转到下一节点 | 不再参与 |
| 驳回 | "不行,退回去" | 退回到发起人/上一节点/指定节点 | 不再参与 |
| 退回 | "退回到之前某个节点重审" | 退回到指定历史节点 | 不再参与 |
| 转办 | "这个不归我管,交给XX" | 完全转移给目标人 | 不再参与 |
| 委派 | "你先帮我看,最后我来拍板" | 临时给被委派人,处理后返回 | 最终确认 |
| 前加签 | "请专家先把关" | 加签人先审,然后回到原审批人 | 最终审批 |
| 后加签 | "我审完了你再看" | 原审批人通过后,加签人再审 | 已通过 |
| 减签 | "不需要XX审了" | 关闭加签任务 | 不影响 |
3.2.5 业务规则
| 规则编号 | 规则描述 | 设计原因 |
|---|---|---|
| R-01 | 审批操作仅当前任务分配的审批人可执行 | 防止越权审批 |
| R-02 | 通过操作后流程自动流转到下一节点 | 审批流转的基本逻辑 |
| R-03 | 驳回原因必填,最大长度 500 字符 | 驳回必须说明原因,发起人才能修改 |
| R-04 | 转办后原审批人不再参与该任务 | 转办=完全移交,避免职责不清 |
| R-05 | 委派期限到期后系统自动提醒被委派人处理 | 防止委派任务被遗忘 |
| R-06 | 前加签:加签人员审批完后回到原审批人 | 保证原审批人的最终审批权 |
| R-07 | 加签支持多人同时加签,支持会签和或签 | 覆盖"所有人同意"和"任一同意即可"两种场景 |
| R-08 | 减签只能减掉加签产生的任务 | 保护流程定义的完整性 |
| R-09 | 退回操作可将流程退回到之前任意已完成的历史节点 | 比驳回更灵活的回退方式 |
| R-10 | 审批附件最多上传 5 个,单个文件不超过 10MB | 控制存储成本,同时满足审批证据需求 |
| R-11 | 审批操作提交后不可撤回 | 保证审批流程的严肃性和可追溯性 |
| R-12 | 多人会签任务需所有审批人全部通过才能流转 | 会签=全员同意 |
| R-13 | 多人或签任务任一审批人通过即可流转 | 或签=任一同意 |
| R-14 | 审批操作需做幂等性校验,防止网络异常导致重复提交 | 避免用户双击按钮导致流程流转两次 |
| R-15 | 候选人选择器展示范围:同租户下当前用户可操作的用户 | 数据隔离 + 权限控制 |
3.2.6 接口列表
| 接口名称 | 请求方式 | 接口路径 | 说明 |
|---|---|---|---|
| 获取任务审批详情 | GET | /admin-api/bpm/task/detail | 获取任务详情和审批面板数据 |
| 审批通过 | PUT | /admin-api/bpm/task/approve | 审批通过操作 |
| 审批驳回 | PUT | /admin-api/bpm/task/reject | 审批驳回操作 |
| 退回任务 | PUT | /admin-api/bpm/task/return | 退回到指定历史节点 |
| 转办任务 | PUT | /admin-api/bpm/task/transfer | 转办任务给其他用户 |
| 委派任务 | PUT | /admin-api/bpm/task/delegate | 委派任务给其他用户 |
| 前加签 | POST | /admin-api/bpm/task/before-add-sign | 前加签操作 |
| 后加签 | POST | /admin-api/bpm/task/after-add-sign | 后加签操作 |
| 减签 | DELETE | /admin-api/bpm/task/subtract-sign | 减签操作 |
| 获取可退回节点列表 | GET | /admin-api/bpm/task/return-nodes | 获取可退回的历史节点 |
| 获取候选人列表 | GET | /admin-api/bpm/task/candidates | 获取可转办/委派/加签的候选人 |
任务审批详情返回结果:
| 字段名 | 类型 | 说明 |
|---|---|---|
| taskId | String | 任务ID |
| taskName | String | 任务名称 |
| taskDefinitionKey | String | 任务节点定义Key |
| processInstanceId | Long | 流程实例ID |
| processName | String | 流程名称 |
| processDefinitionKey | String | 流程定义标识 |
| originatorName | String | 发起人姓名 |
| originatorDeptName | String | 发起人部门 |
| formData | JSON | 表单完整数据 |
| processImage | String | 流程图URL |
| approvalTimeline | List | 审批记录时间线 |
| availableActions | List<String> | 当前可用审批操作列表 |
| canReturnNodes | List<Node> | 可退回节点列表 |
| canSubtractTasks | List<Task> | 可减签任务列表 |
| attachments | List<Attachment> | 流程附件列表 |
审批通过请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| taskId | String | 是 | 任务ID |
| comment | String | 否 | 审批意见 |
| attachmentIds | List<Long> | 否 | 审批附件ID列表 |
| variables | Map<String, Object> | 否 | 流程变量 |
审批驳回请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| taskId | String | 是 | 任务ID |
| comment | String | 是 | 驳回原因 |
| rejectType | Integer | 是 | 驳回类型(1-驳回到发起人 2-驳回到上一节点 3-驳回到指定节点) |
| targetActivityId | String | 否 | 驳回到指定节点ID(rejectType=3时必填) |
退回请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| taskId | String | 是 | 任务ID |
| targetActivityId | String | 是 | 退回目标节点ID |
| comment | String | 是 | 退回原因 |
转办请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| taskId | String | 是 | 任务ID |
| targetUserId | Long | 是 | 目标用户ID |
| comment | String | 否 | 转办说明 |
委派请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| taskId | String | 是 | 任务ID |
| targetUserId | Long | 是 | 目标用户ID |
| comment | String | 否 | 委派说明 |
| delegateDays | Integer | 否 | 委派期限天数 |
加签请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| taskId | String | 是 | 任务ID |
| userIds | List<Long> | 是 | 加签用户ID列表 |
| comment | String | 否 | 加签说明 |
| approveType | Integer | 否 | 加签审批方式(1-会签 2-或签) |
减签请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| taskId | String | 是 | 要减签的任务ID |
| comment | String | 否 | 减签说明 |
3.3 已办任务
3.3.1 功能描述
已办任务列表是审批人的"工作日志"——回顾自己处理过哪些审批、给了什么意见、花了多长时间。只读展示,不可操作。
3.3.2 页面结构

3.3.3 操作流程
1. 用户进入「待办管理」页面,切换到「已办任务」Tab
2. 展示当前用户已处理的所有审批任务(分页)
3. 列表展示字段:任务名称、流程名称、发起人、审批动作、审批意见摘要、审批时间、处理耗时
4. 用户可通过顶部筛选栏筛选:
a. 流程类型下拉选择
b. 审批动作类型筛选(通过/驳回/转办/委派/退回)
c. 发起人搜索
d. 完成时间范围选择
5. 用户可在搜索框输入关键字搜索(流程名称、发起人姓名)
6. 点击某条记录可查看审批详情:
a. 流程表单数据(只读)
b. 完整审批记录时间线
c. 自己的审批意见和附件
7. 列表按审批完成时间倒序排列
8. 默认每页 10 条3.3.4 业务规则
| 规则编号 | 规则描述 | 设计原因 |
|---|---|---|
| R-01 | 仅展示当前用户已处理的任务 | 数据隔离 |
| R-02 | 列表按审批完成时间倒序排列 | 最近处理的排在前面,方便查找 |
| R-03 | 支持按审批动作类型筛选 | 快速定位特定类型的审批记录 |
| R-04 | 已办记录为只读展示,不可进行任何操作 | 历史数据不可修改,保证审计完整性 |
| R-05 | 审批意见摘要截取前 50 个字符展示 | 列表简洁,详情里看完整版 |
| R-06 | 处理耗时格式:< 1小时显示"X分钟",≥ 1小时显示"X小时X分钟" | 人性化展示 |
3.3.5 接口列表
| 接口名称 | 请求方式 | 接口路径 | 说明 |
|---|---|---|---|
| 获取已办任务分页列表 | GET | /admin-api/bpm/done/page | 分页查询已办任务列表 |
| 获取已办任务详情 | GET | /admin-api/bpm/done/detail | 获取已办任务详细信息 |
请求参数(分页查询):
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| processName | String | 否 | 流程名称(模糊匹配) |
| processDefinitionKey | String | 否 | 流程定义标识 |
| action | String | 否 | 审批动作(approve/reject/transfer/delegate/return) |
| originatorName | String | 否 | 发起人姓名(模糊匹配) |
| endTime | DateTime[] | 否 | 审批完成时间范围 |
| pageNo | Integer | 是 | 页码(默认1) |
| pageSize | Integer | 是 | 每页条数(默认10) |
返回结果(分页列表项):
| 字段名 | 类型 | 说明 |
|---|---|---|
| taskId | String | 任务ID |
| taskName | String | 任务名称 |
| processInstanceId | Long | 流程实例ID |
| processName | String | 流程名称 |
| originatorName | String | 发起人姓名 |
| originatorDeptName | String | 发起人部门 |
| action | String | 审批动作标识 |
| actionLabel | String | 审批动作标签 |
| comment | String | 审批意见摘要 |
| startTime | DateTime | 任务开始时间 |
| endTime | DateTime | 任务完成时间 |
| duration | Long | 处理耗时(毫秒) |
| durationText | String | 处理耗时文本 |
3.4 任务统计
3.4.1 功能描述
任务统计是管理者的"效率仪表盘"——用数据回答三个问题:谁审批最慢?哪个流程卡得最多?超时率有多高? 通过概览卡片、趋势图表和效率排行三个层次,帮助管理者发现审批瓶颈、督促改进。
数据来源说明:概览卡片的数据是实时计算的;图表和排行数据通过定时任务每小时预计算一次,结果缓存到 Redis 中,避免每次都做大量聚合查询影响性能。
3.4.2 页面结构

3.4.3 操作流程
1. 管理者进入「任务统计」页面
2. 页面顶部展示统计概览卡片:
a. 当前待办总数(数字卡片)
b. 今日新增待办(数字卡片)
c. 今日已完成数(数字卡片)
d. 超时任务数(数字卡片,红色高亮)
e. 平均处理时长(数字卡片)
3. 页面中部展示图表区域:
a. 待办数量趋势图(折线图,近7天/30天)
b. 流程类型分布图(饼图,各流程类型待办占比)
c. 平均处理时长对比图(柱状图,按流程类型对比)
d. 超时率趋势图(折线图,近7天/30天超时率变化)
4. 页面下部展示效率排行:
a. 部门效率排行(平均处理时长从短到长)
b. 个人效率排行(平均处理时长从短到长)
c. 超时排行(超时次数从多到少)
5. 支持切换时间范围:近7天/近30天/近90天/自定义
6. 支持按部门、流程类型筛选
7. 点击排行中的具体人员可跳转查看该人员的待办列表3.4.4 业务规则
| 规则编号 | 规则描述 | 设计原因 |
|---|---|---|
| R-01 | 统计范围默认为当前用户所管理部门及下级部门 | 管理者只看自己管得到的范围 |
| R-02 | 系统管理员可查看全平台统计数据 | 全局视角 |
| R-03 | 平均处理时长 = 所有已完成任务的总耗时 / 已完成任务数量 | 简单平均值,直观易懂 |
| R-04 | 超时率 = 超时任务数 / 总任务数 × 100% | 衡量流程健康度的核心指标 |
| R-05 | 超时阈值由流程设计时配置的超时规则决定 | 不同流程的超时标准不同 |
| R-06 | 效率排行仅展示有审批记录的人员 | 没有数据不展示 |
| R-07 | 图表和排行数据每小时更新一次(定时任务预计算 + Redis 缓存) | 避免实时聚合查询拖垮数据库 |
| R-08 | 概览卡片数据实时计算,不依赖定时任务 | 管理者看到的"当前待办数"必须是实时的 |
| R-09 | 排行数据最多展示 Top 20 | 避免列表过长 |
| R-10 | 统计报表支持导出为 Excel | 管理者需要拿去开会汇报 |
3.4.5 接口列表
| 接口名称 | 请求方式 | 接口路径 | 说明 |
|---|---|---|---|
| 获取统计概览 | GET | /admin-api/bpm/statistics/overview | 获取统计概览卡片数据 |
| 获取待办趋势 | GET | /admin-api/bpm/statistics/todo-trend | 获取待办数量趋势数据 |
| 获取流程分布 | GET | /admin-api/bpm/statistics/process-distribution | 获取流程类型分布数据 |
| 获取处理时长对比 | GET | /admin-api/bpm/statistics/duration-compare | 获取各流程平均处理时长对比 |
| 获取超时率趋势 | GET | /admin-api/bpm/statistics/timeout-trend | 获取超时率趋势数据 |
| 获取部门效率排行 | GET | /admin-api/bpm/statistics/dept-rank | 获取部门效率排行数据 |
| 获取个人效率排行 | GET | /admin-api/bpm/statistics/user-rank | 获取个人效率排行数据 |
| 获取超时排行 | GET | /admin-api/bpm/statistics/timeout-rank | 获取超时排行数据 |
| 导出统计报表 | GET | /admin-api/bpm/statistics/export | 导出统计报表为Excel |
请求参数(统计概览):
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| deptId | Long | 否 | 部门ID(不传则查全部) |
| processDefinitionKey | String | 否 | 流程定义标识 |
返回结果(统计概览):
| 字段名 | 类型 | 说明 |
|---|---|---|
| todoCount | Integer | 当前待办总数 |
| todayNewCount | Integer | 今日新增待办数 |
| todayDoneCount | Integer | 今日已完成数 |
| timeoutCount | Integer | 超时任务数 |
| avgDuration | Long | 平均处理时长(毫秒) |
| avgDurationText | String | 平均处理时长文本 |
| timeoutRate | Double | 超时率(百分比) |
请求参数(趋势/排行类接口通用):
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| deptId | Long | 否 | 部门ID |
| processDefinitionKey | String | 否 | 流程定义标识 |
| timeRange | String | 是 | 时间范围(7d/30d/90d/custom) |
| startTime | DateTime | 否 | 自定义开始时间 |
| endTime | DateTime | 否 | 自定义结束时间 |
| topN | Integer | 否 | 排行数量(默认10,最大20) |
返回结果(个人效率排行):
| 字段名 | 类型 | 说明 |
|---|---|---|
| userId | Long | 用户ID |
| userName | String | 用户姓名 |
| deptName | String | 所属部门 |
| totalTasks | Integer | 总审批任务数 |
| completedTasks | Integer | 已完成任务数 |
| avgDuration | Long | 平均处理时长(毫秒) |
| avgDurationText | String | 平均处理时长文本 |
| timeoutCount | Integer | 超时任务数 |
| timeoutRate | Double | 超时率 |
| rank | Integer | 排名 |
3.5 催办管理
3.5.1 功能描述
催办管理是流程停滞时的"闹钟系统"——分两种模式:
- 手动催办:管理员或发起人看到某个任务卡住了,手动发一条催办通知
- 自动催办:配置好规则后,系统每30分钟自动检查,发现超时任务就自动发通知
通知渠道支持站内信、邮件、短信三种,可以单选也可以组合。
3.5.2 页面结构

3.5.3 操作流程
手动催办:
1. 管理员或流程发起人在待办列表/流程详情中点击「催办」按钮
2. 弹出催办对话框
3. 选择催办通知方式(可多选):站内信 / 邮件 / 短信
4. 填写催办消息内容(默认模板:"您有一条待审批任务【{流程名称}】已等待{停留时长},请尽快处理")
5. 点击「发送催办」
6. 系统向当前审批人发送催办通知
7. 系统记录催办日志
8. 提示操作成功自动催办规则配置:
1. 管理员进入「催办管理」→ 点击「催办规则配置」
2. 点击「新建规则」
3. 配置自动催办触发条件:
a. 规则名称(如"通用超时催办")
b. 停留时长阈值(如超过24小时自动催办)
c. 催办频率限制(如每12小时最多催办一次)
d. 最大催办次数(如最多催办3次)
e. 催办通知方式(站内信/邮件/短信)
f. 催办消息模板(支持变量替换)
4. 配置催办适用范围:
a. 全部流程 / 指定流程类型
b. 全部部门 / 指定部门
5. 保存并启用规则
6. 系统定时任务(每30分钟)根据规则自动执行催办自动催办执行逻辑:每30分钟,系统扫描所有待处理任务 → 匹配催办规则(流程类型+部门+超时阈值)→ 检查该任务已催办次数是否达到上限 → 检查距上次催办是否超过间隔 → 满足条件则发送催办通知 → 记录催办日志。
3.5.4 业务规则
| 规则编号 | 规则描述 | 设计原因 |
|---|---|---|
| R-01 | 手动催办操作人可以是:流程发起人、流程管理员、系统管理员 | 这三类人有合理的催办诉求 |
| R-02 | 同一流程同一审批人手动催办频率限制:10分钟内最多1次 | 防止频繁催办造成骚扰 |
| R-03 | 催办通知渠道支持单选或多选:站内信、邮件、短信 | 不同紧急程度用不同渠道组合 |
| R-04 | 催办消息模板支持变量替换:{流程名称}、{停留时长}、{发起人}、 | 消息内容自动填充,减少手动输入 |
| R-05 | 每条催办操作记录完整日志 | 催办有据可查 |
| R-06 | 自动催办规则由系统定时任务执行(默认每30分钟检查一次) | 平衡实时性和系统性能 |
| R-07 | 自动催办最大催办次数达到后不再自动催办,需人工干预 | 防止无限催办,超过上限说明需要升级处理 |
| R-08 | 催办通知发送失败时记录失败日志,不影响其他催办操作 | 单条失败不阻塞整体 |
| R-09 | 催办记录不可删除,保留完整催办历史 | 审计需要 |
| R-10 | 自动催办规则支持启用/禁用切换 | 临时调整不需要删除规则 |
3.5.5 接口列表
| 接口名称 | 请求方式 | 接口路径 | 说明 |
|---|---|---|---|
| 发送手动催办 | POST | /admin-api/bpm/urge/send | 手动发送催办通知 |
| 获取催办记录分页 | GET | /admin-api/bpm/urge/page | 分页查询催办记录 |
| 获取催办记录详情 | GET | /admin-api/bpm/urge/detail | 获取催办记录详细信息 |
| 获取催办规则列表 | GET | /admin-api/bpm/urge/rule/list | 获取自动催办规则列表 |
| 创建催办规则 | POST | /admin-api/bpm/urge/rule/create | 创建自动催办规则 |
| 更新催办规则 | PUT | /admin-api/bpm/urge/rule/update | 更新自动催办规则 |
| 删除催办规则 | DELETE | /admin-api/bpm/urge/rule/delete | 删除自动催办规则 |
| 启用/禁用催办规则 | PUT | /admin-api/bpm/urge/rule/status | 切换催办规则启用状态 |
手动催办请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| taskId | String | 是 | 任务ID |
| notifyChannels | List<Integer> | 是 | 通知渠道(1-站内信 2-邮件 3-短信) |
| message | String | 否 | 催办消息(不填则使用默认模板) |
催办记录分页请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| taskId | String | 否 | 任务ID |
| urgedUserId | Long | 否 | 被催办人ID |
| urgeUserId | Long | 否 | 催办人ID |
| notifyChannel | Integer | 否 | 通知渠道 |
| createTime | DateTime[] | 否 | 催办时间范围 |
| pageNo | Integer | 是 | 页码(默认1) |
| pageSize | Integer | 是 | 每页条数(默认10) |
催办记录返回结果:
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | Long | 催办记录ID |
| taskId | String | 任务ID |
| taskName | String | 任务名称 |
| processInstanceId | Long | 流程实例ID |
| processName | String | 流程名称 |
| urgeUserId | Long | 催办人ID |
| urgeUserName | String | 催办人姓名 |
| urgedUserId | Long | 被催办人ID |
| urgedUserName | String | 被催办人姓名 |
| notifyChannels | List<Integer> | 通知渠道列表 |
| message | String | 催办消息内容 |
| urgeType | Integer | 催办类型(1-手动催办 2-自动催办) |
| sendStatus | Integer | 发送状态(1-成功 2-部分失败 3-失败) |
| createTime | DateTime | 催办时间 |
创建催办规则请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| name | String | 是 | 规则名称 |
| timeoutThreshold | Integer | 是 | 超时阈值(小时) |
| urgeInterval | Integer | 是 | 催办间隔(小时) |
| maxUrgeCount | Integer | 是 | 最大催办次数 |
| notifyChannels | List<Integer> | 是 | 通知渠道 |
| messageTemplate | String | 否 | 催办消息模板 |
| processDefinitionKeys | List<String> | 否 | 适用流程标识(不传则全部) |
| deptIds | List<Long> | 否 | 适用部门ID(不传则全部) |
| enabled | Boolean | 是 | 是否启用 |
四、非功能需求
4.1 性能要求
| 指标 | 目标值 | 说明 |
|---|---|---|
| 待办任务列表查询 | < 500ms | 审批人打开页面不能等 |
| 任务审批操作 | < 500ms | 点击通过后要快速反馈 |
| 已办任务列表查询 | < 500ms | 同待办列表 |
| 统计概览查询 | < 1s | 概览卡片实时计算,1秒内返回 |
| 统计图表加载 | < 2s | 图表数据来自 Redis 缓存 |
| 统计报表导出 | < 5s(1000条内) | 异步导出 + 下载通知 |
| 催办通知发送 | < 5s(站内信)、< 10s(邮件/短信) | 站内信走 WebSocket 实时推送 |
| 批量操作 | < 3s(50条内) | 批量通过/转办/催办 |
| 待办数量角标更新 | < 2s | 新任务到达后角标及时变化 |
| 并发审批 | 200 并发 | 通过乐观锁 + 幂等校验保证数据一致性 |
4.2 安全要求
| 要求 | 实现方式 |
|---|---|
| 审批数据隔离 | 审批人只能查看和操作分配给自己的待办任务,通过 assignee_id 过滤 |
| 操作权限校验 | 每次审批操作校验操作人是否为当前任务分配人,防止越权 |
| 部门数据隔离 | 管理者仅可查看所管理部门及下级部门的统计数据 |
| 操作审计 | 所有审批和催办操作记录到操作日志(操作人、时间、动作、IP、详情) |
| 幂等性保证 | 审批操作通过唯一请求ID做幂等校验,防止网络异常导致重复提交 |
| 催办频率限制 | 手动催办10分钟内同一任务同一审批人限1次,通过 Redis 计数器实现 |
| 批量操作鉴权 | 批量操作需校验操作人是否有对应权限标识 |
| 催办内容审核 | 自定义催办消息内容需过滤敏感词 |
| 统计报表导出权限 | 导出需具备 bpm:statistics:export 权限 |
4.3 兼容性要求
| 端 | 要求 |
|---|---|
| PC浏览器 | Chrome 80+、Firefox 75+、Safari 13+、Edge 80+ |
| 移动端浏览器 | iOS Safari 12+、Android Chrome 80+ |
| 移动端适配 | 审批操作面板支持移动端自适应布局(表单纵向排列、操作按钮底部固定) |
| 分辨率适配 | 最小支持 1280×720,推荐 1920×1080 |
| 图表兼容性 | 统计图表使用 ECharts,支持主流浏览器 Canvas/SVG 渲染 |
| 消息通知兼容 | 站内信(WebSocket 实时推送)、邮件(SMTP)、短信(第三方网关) |
五、数据设计
5.1 任务表(bpm_task)
本表是审批任务的核心表,同时服务于待办列表、已办列表、任务审批、任务统计等子功能。
| 字段名 | 类型 | 约束 | 说明 |
|---|---|---|---|
| id | VARCHAR(64) | PK | 任务ID(主键,Flowable 生成) |
| name | VARCHAR(128) | NOT NULL | 任务名称 |
| description | VARCHAR(512) | 任务描述 | |
| process_instance_id | BIGINT | NOT NULL, FK | 关联的流程实例ID |
| process_definition_id | VARCHAR(64) | NOT NULL | 流程定义ID |
| process_definition_key | VARCHAR(64) | NOT NULL | 流程定义标识 |
| task_definition_key | VARCHAR(64) | NOT NULL | 任务节点定义Key |
| assignee_id | BIGINT | 实际审批人ID | |
| assignee_name | VARCHAR(64) | 实际审批人姓名 | |
| owner_id | BIGINT | 任务拥有者ID(委派场景下的原审批人) | |
| owner_name | VARCHAR(64) | 任务拥有者姓名 | |
| status | TINYINT | NOT NULL, DEFAULT 0 | 任务状态(0-待处理 1-已完成 2-已取消 3-已转办 4-已委派 5-已退回) |
| action | VARCHAR(32) | 审批动作(approve/reject/transfer/delegate/return/empty) | |
| comment | VARCHAR(500) | 审批意见 | |
| form_data | JSON | 任务节点表单数据 | |
| is_timeout | BIT | DEFAULT 0 | 是否超时(0-否 1-是) |
| timeout_rule | VARCHAR(256) | 超时规则配置 | |
| urgency_level | TINYINT | DEFAULT 1 | 紧急程度(1-普通 2-紧急 3-特急) |
| source_task_id | VARCHAR(64) | 来源任务ID(加签/转办/委派场景) | |
| sign_type | TINYINT | DEFAULT 0 | 加签类型(0-非加签 1-前加签 2-后加签) |
| start_time | DATETIME | NOT NULL | 任务开始时间 |
| claim_time | DATETIME | 任务签收时间 | |
| end_time | DATETIME | 任务完成时间 | |
| duration | BIGINT | 任务耗时(毫秒) | |
| tenant_id | BIGINT | NOT NULL | 租户ID |
| creator | VARCHAR(64) | 创建者 | |
| create_time | DATETIME | NOT NULL | 创建时间 |
| updater | VARCHAR(64) | 更新者 | |
| update_time | DATETIME | NOT NULL | 更新时间 |
| deleted | BIT | DEFAULT 0 | 删除标记(0-未删除 1-已删除) |
索引设计:
| 索引名 | 字段 | 类型 | 说明 |
|---|---|---|---|
| idx_assignee_status | assignee_id, status | 普通索引 | 按审批人和状态查询待办(最高频查询) |
| idx_process_instance | process_instance_id | 普通索引 | 按流程实例查关联任务 |
| idx_create_time | create_time | 普通索引 | 按创建时间排序查询 |
| idx_status_timeout | status, is_timeout | 普通索引 | 按状态和超时筛选 |
5.2 任务分配表(bpm_task_assign)
记录每个任务的审批人分配信息。会签/或签场景下一个任务可能有多条分配记录。
| 字段名 | 类型 | 约束 | 说明 |
|---|---|---|---|
| id | BIGINT | PK, AUTO_INCREMENT | 分配记录ID |
| task_id | VARCHAR(64) | NOT NULL, FK | 关联的任务ID |
| user_id | BIGINT | 被分配用户ID | |
| user_name | VARCHAR(64) | 被分配用户姓名 | |
| dept_id | BIGINT | 被分配用户部门ID | |
| dept_name | VARCHAR(128) | 被分配用户部门名称 | |
| assign_type | TINYINT | NOT NULL | 分配类型(1-指定用户 2-角色 3-部门 4-岗位 5-候选人组) |
| assign_status | TINYINT | DEFAULT 0 | 分配状态(0-待签收 1-已签收 2-已拒绝) |
| sort_order | INT | DEFAULT 0 | 排序号(多候选人时) |
| remark | VARCHAR(256) | 分配说明 | |
| tenant_id | BIGINT | NOT NULL | 租户ID |
| creator | VARCHAR(64) | 创建者 | |
| create_time | DATETIME | NOT NULL | 创建时间 |
| updater | VARCHAR(64) | 更新者 | |
| update_time | DATETIME | NOT NULL | 更新时间 |
| deleted | BIT | DEFAULT 0 | 删除标记 |
索引设计:
| 索引名 | 字段 | 类型 | 说明 |
|---|---|---|---|
| idx_task_id | task_id | 普通索引 | 按任务查分配记录 |
| idx_user_id | user_id, assign_status | 普通索引 | 按用户查分配的待办 |
5.3 任务抄送表(bpm_task_copy)
| 字段名 | 类型 | 约束 | 说明 |
|---|---|---|---|
| id | BIGINT | PK, AUTO_INCREMENT | 抄送记录ID |
| process_instance_id | BIGINT | NOT NULL, FK | 关联的流程实例ID |
| task_id | VARCHAR(64) | FK | 关联的任务ID |
| task_name | VARCHAR(128) | 抄送来源节点名称 | |
| process_definition_id | VARCHAR(64) | 流程定义ID | |
| originator_id | BIGINT | 流程发起人ID | |
| originator_name | VARCHAR(64) | 流程发起人姓名 | |
| copy_user_id | BIGINT | NOT NULL | 被抄送人ID |
| copy_user_name | VARCHAR(64) | 被抄送人姓名 | |
| copy_dept_id | BIGINT | 被抄送人部门ID | |
| operator_id | BIGINT | 抄送操作人ID | |
| operator_name | VARCHAR(64) | 抄送操作人姓名 | |
| copy_type | TINYINT | NOT NULL | 抄送类型(1-自动抄送 2-手动抄送) |
| copy_reason | VARCHAR(500) | 抄送说明 | |
| read_status | TINYINT | DEFAULT 0 | 已读状态(0-未读 1-已读) |
| read_time | DATETIME | 已读时间 | |
| tenant_id | BIGINT | NOT NULL | 租户ID |
| creator | VARCHAR(64) | 创建者 | |
| create_time | DATETIME | NOT NULL | 创建时间 |
| updater | VARCHAR(64) | 更新者 | |
| update_time | DATETIME | NOT NULL | 更新时间 |
| deleted | BIT | DEFAULT 0 | 删除标记 |
5.4 催办记录表(bpm_task_urge)
| 字段名 | 类型 | 约束 | 说明 |
|---|---|---|---|
| id | BIGINT | PK, AUTO_INCREMENT | 催办记录ID |
| task_id | VARCHAR(64) | NOT NULL, FK | 关联的任务ID |
| task_name | VARCHAR(128) | 任务名称 | |
| process_instance_id | BIGINT | NOT NULL | 关联的流程实例ID |
| process_name | VARCHAR(128) | 流程名称 | |
| urge_user_id | BIGINT | NOT NULL | 催办人ID |
| urge_user_name | VARCHAR(64) | 催办人姓名 | |
| urged_user_id | BIGINT | NOT NULL | 被催办人ID |
| urged_user_name | VARCHAR(64) | 被催办人姓名 | |
| notify_channels | VARCHAR(128) | NOT NULL | 通知渠道(逗号分隔:1-站内信 2-邮件 3-短信) |
| message | VARCHAR(500) | 催办消息内容 | |
| urge_type | TINYINT | NOT NULL | 催办类型(1-手动催办 2-自动催办) |
| send_status | TINYINT | DEFAULT 1 | 发送状态(1-成功 2-部分失败 3-失败) |
| fail_reason | VARCHAR(500) | 发送失败原因 | |
| tenant_id | BIGINT | NOT NULL | 租户ID |
| creator | VARCHAR(64) | 创建者 | |
| create_time | DATETIME | NOT NULL | 催办时间 |
| updater | VARCHAR(64) | 更新者 | |
| update_time | DATETIME | NOT NULL | 更新时间 |
| deleted | BIT | DEFAULT 0 | 删除标记 |
5.5 催办规则表(bpm_urge_rule)
| 字段名 | 类型 | 约束 | 说明 |
|---|---|---|---|
| id | BIGINT | PK, AUTO_INCREMENT | 规则ID |
| name | VARCHAR(128) | NOT NULL | 规则名称 |
| timeout_threshold | INT | NOT NULL | 超时阈值(小时) |
| urge_interval | INT | NOT NULL | 催办间隔(小时) |
| max_urge_count | INT | NOT NULL, DEFAULT 3 | 最大催办次数 |
| notify_channels | VARCHAR(128) | NOT NULL | 通知渠道(逗号分隔) |
| message_template | VARCHAR(500) | 催办消息模板 | |
| process_definition_keys | VARCHAR(1024) | 适用流程标识(逗号分隔,空为全部) | |
| dept_ids | VARCHAR(1024) | 适用部门ID(逗号分隔,空为全部) | |
| enabled | BIT | DEFAULT 1 | 是否启用(0-禁用 1-启用) |
| last_urge_time | DATETIME | 上次执行催办时间 | |
| tenant_id | BIGINT | NOT NULL | 租户ID |
| creator | VARCHAR(64) | 创建者 | |
| create_time | DATETIME | NOT NULL | 创建时间 |
| updater | VARCHAR(64) | 更新者 | |
| update_time | DATETIME | NOT NULL | 更新时间 |
| deleted | BIT | DEFAULT 0 | 删除标记 |
5.6 数据字典
| 字典类型 | 字典值 | 说明 |
|---|---|---|
| bpm_task_status | 0-待处理 1-已完成 2-已取消 3-已转办 4-已委派 5-已退回 | 任务状态 |
| bpm_task_action | approve-通过 reject-驳回 transfer-转办 delegate-委派 return-退回 empty-自动流转 | 审批动作 |
| bpm_task_urgency_level | 1-普通 2-紧急 3-特急 | 紧急程度 |
| bpm_task_sign_type | 0-非加签 1-前加签 2-后加签 | 加签类型 |
| bpm_task_assign_type | 1-指定用户 2-角色 3-部门 4-岗位 5-候选人组 | 任务分配类型 |
| bpm_task_assign_status | 0-待签收 1-已签收 2-已拒绝 | 分配状态 |
| bpm_urge_type | 1-手动催办 2-自动催办 | 催办类型 |
| bpm_urge_notify_channel | 1-站内信 2-邮件 3-短信 | 催办通知渠道 |
| bpm_urge_send_status | 1-成功 2-部分失败 3-失败 | 催办发送状态 |
5.7 任务状态流转

状态转换条件:
| 当前状态 | 目标状态 | 触发条件 | 操作人 |
|---|---|---|---|
| 待处理 | 已完成 | 审批通过/驳回 | 审批人 |
| 待处理 | 已转办 | 转办操作 | 审批人 |
| 待处理 | 已委派 | 委派操作 | 审批人 |
| 待处理 | 已取消 | 流程撤销/管理员终止 | 发起人/管理员 |
| 待处理 | 已退回 | 退回操作 | 审批人 |
| 已委派 | 已完成 | 被委派人处理完毕,返回原审批人 | 被委派人 |
六、跨模块联动
6.1 联动关系总览
| 关联模块 | 联动方式 | 数据流向 | 说明 |
|---|---|---|---|
| 流程设计(03-01) | 读取流程定义 | 03-01 → 本模块 | 审批面板的流程图、超时阈值、审批人配置均来自流程设计 |
| 流程管理(03-02) | 管理端流程操作 | 双向 | 管理员在03-02终止流程 → 本模块待办任务自动取消;本模块的审批操作影响03-02的流程状态 |
| 我的流程(03-03) | 用户端对应 | 双向 | 本模块的审批操作 → 03-03的流程进度更新;03-03的催办 → 本模块生成催办记录 |
| 通知模块 | 发送通知 | 本模块 → 通知模块 | 审批结果通知、催办通知、委派提醒等通过通知模块统一发送 |
| 用户管理(01-01) | 读取用户信息 | 01-01 → 本模块 | 审批人/发起人/候选人的姓名、部门、头像等来自用户管理 |
| 部门管理(01-02) | 读取部门信息 | 01-02 → 本模块 | 任务统计的部门维度数据、候选人选择器的部门树来自部门管理 |
| 角色管理(01-03) | 读取角色信息 | 01-03 → 本模块 | 任务分配的角色匹配、候选人选择器的角色筛选 |
| 日志审计(01-08) | 写入操作日志 | 本模块 → 01-08 | 所有审批操作、催办操作记录到操作日志 |
| 文件存储 | 附件管理 | 本模块 → 文件存储 | 审批附件、驳回证据附件的上传和下载 |
6.2 关键联动流程
审批操作 → 多模块状态同步:

管理员终止流程 → 待办任务清理:

自动催办执行流程:

6.3 数据一致性要求
| 场景 | 一致性要求 | 实现方式 |
|---|---|---|
| 审批操作与流程状态 | 审批通过后流程必须流转到下一节点 | 事务内同步调用 Flowable API,失败则回滚 |
| 转办与待办列表 | 转办后原审批人待办立刻消失 | 事务内更新 assignee_id,WebSocket 通知前端刷新 |
| 催办记录与通知发送 | 催办记录写入和通知发送最终一致 | 先写催办记录(send_status=1),异步发送通知,失败更新 send_status |
| 统计缓存与数据库 | 统计数据与数据库最终一致 | 每小时定时任务重新计算并刷新 Redis 缓存 |
| 批量操作 | 批量中单条失败不影响其他 | 逐条处理 + 结果汇总,返回每条的成功/失败状态 |
七、附录
7.1 名词解释
| 术语 | 通俗解释 | 类比 |
|---|---|---|
| 待办任务(Todo Task) | 分配给你但还没处理的审批任务 | 你桌上还没批的文件 |
| 已办任务(Done Task) | 你已经处理完的审批任务 | 你已经签完字归档的文件 |
| 审批通过(Approve) | 同意申请,让流程继续往下走 | "我同意,往下传" |
| 审批驳回(Reject) | 不同意申请,把流程退回去 | "不行,打回去重做" |
| 转办(Transfer) | 把任务完全交给别人,自己不再参与 | "这事不归我管,交给XX" |
| 委派(Delegate) | 临时让别人先处理,处理完还要回来由你最终确认 | "你先帮我看看,最后我来拍板" |
| 前加签(Before Add Sign) | 在当前审批人之前增加审批人,加签人审完回到原审批人 | "请专家先把关,然后我再决定" |
| 后加签(After Add Sign) | 当前审批人审批完后,加签人再审批 | "我先审了,然后你再看" |
| 减签(Subtract Sign) | 移除因加签而产生的额外审批任务 | "不需要他审了,取消" |
| 退回(Return) | 把流程退回到之前某个已完成的历史节点 | "退回到XX那个环节重新审" |
| 催办(Urge) | 向审批人发送催促通知 | "闹钟响了,该处理了" |
| 会签(Countersign) | 多人审批时所有人都要通过才能继续 | "所有人都签字才行" |
| 或签(Or Sign) | 多人审批时任一人通过即可继续 | "只要有一个人同意就行" |
| 超时阈值(Timeout Threshold) | 任务允许停留的最长时间,超过就算超时 | "截止日期" |
| 紧急程度(Urgency Level) | 根据停留时长自动计算的紧急等级(普通/紧急/特急) | "红绿灯"——蓝/橙/红 |
| 幂等性(Idempotency) | 同一个操作执行多次和执行一次的效果相同 | "按多次通过按钮等于只按一次" |
| Flowable | 开源的工作流引擎,本系统的流程引擎底层 | 审批流转的"发动机" |
| BPMN | 业务流程建模的国际标准 | 流程图的"语法规则" |
7.2 权限标识
| 权限标识 | 说明 | 所属子功能 |
|---|---|---|
| bpm:todo:query | 查看待办任务列表 | 待办任务列表 |
| bpm:todo:approve | 审批通过 | 任务审批 |
| bpm:todo:reject | 审批驳回 | 任务审批 |
| bpm:todo:transfer | 转办任务 | 任务审批 |
| bpm:todo:delegate | 委派任务 | 任务审批 |
| bpm:todo:return | 退回任务 | 任务审批 |
| bpm:todo:add-sign | 加签操作 | 任务审批 |
| bpm:todo:subtract-sign | 减签操作 | 任务审批 |
| bpm:todo:batch-approve | 批量通过 | 待办任务列表 |
| bpm:todo:batch-transfer | 批量转办 | 待办任务列表 |
| bpm:todo:batch-urge | 批量催办 | 待办任务列表 |
| bpm:done:query | 查看已办任务 | 已办任务 |
| bpm:statistics:query | 查看任务统计 | 任务统计 |
| bpm:statistics:export | 导出统计报表 | 任务统计 |
| bpm:urge:send | 发送催办通知 | 催办管理 |
| bpm:urge:query | 查看催办记录 | 催办管理 |
| bpm:urge:rule:query | 查看催办规则 | 催办管理 |
| bpm:urge:rule:create | 创建催办规则 | 催办管理 |
| bpm:urge:rule:update | 编辑催办规则 | 催办管理 |
| bpm:urge:rule:delete | 删除催办规则 | 催办管理 |
7.3 错误码
| 错误码 | 说明 | 处理建议 |
|---|---|---|
| BPM_TASK_001 | 任务不存在或已被处理 | 刷新列表重试 |
| BPM_TASK_002 | 当前用户不是该任务的审批人 | 确认是否登录了正确的账号 |
| BPM_TASK_003 | 审批操作不合法(如任务已挂起) | 检查任务状态,联系管理员 |
| BPM_TASK_004 | 驳回原因不能为空 | 填写驳回原因后重试 |
| BPM_TASK_005 | 候选人不存在或已禁用 | 选择其他候选人 |
| BPM_TASK_006 | 不能转办/委派给自己 | 选择其他用户 |
| BPM_TASK_007 | 减签任务不存在或非加签任务 | 确认减签目标正确 |
| BPM_TASK_008 | 重复提交(幂等校验失败) | 检查操作是否已执行成功 |
| BPM_TASK_009 | 批量操作超过上限(50条) | 减少选择数量 |
| BPM_TASK_010 | 批量通过要求同类型流程 | 按流程类型分批操作 |
| BPM_URGE_001 | 催办频率超限(10分钟内已催办) | 等待冷却期后重试 |
| BPM_URGE_002 | 催办规则名称已存在 | 修改规则名称 |
| BPM_URGE_003 | 催办通知发送失败 | 检查通知渠道配置,查看失败日志 |
| BPM_STAT_001 | 统计数据查询超时 | 缩小查询范围或联系管理员 |
7.4 接口汇总
| 子功能 | 接口数量 | 接口前缀 |
|---|---|---|
| 待办任务列表 | 6 | /admin-api/bpm/todo/ |
| 任务审批 | 11 | /admin-api/bpm/task/ |
| 已办任务 | 2 | /admin-api/bpm/done/ |
| 任务统计 | 9 | /admin-api/bpm/statistics/ |
| 催办管理 | 8 | /admin-api/bpm/urge/ |
| 合计 | 36 |
7.5 变更记录
| 版本 | 日期 | 修改内容 | 修改人 |
|---|---|---|---|
| v1.0 | 2026-09-24 | 初始版本 | PM Team |
| v2.0 | 2026-09-19 | 全面重写:增强用户场景(命名角色+验收标准)、新增页面线框图、新增审批操作速查表、新增状态流转图、新增跨模块联动章节、新增名词解释(含类比)、新增错误码、补充业务规则设计原因 | PM Team |
本文档为待办管理模块PRD v2.0,如有问题请联系产品负责人。