主题
我的流程 PRD
文档信息
| 项目 | 内容 |
|---|---|
| 产品名称 | PMForge - 我的流程 |
| 文档版本 | v2.0 |
| 创建日期 | 2026-09-19 |
| 最后更新 | 2026-09-24 |
| 文档状态 | 评审中 |
| 优先级 | P0 |
一、功能概述
1.1 功能定位
如果说「流程管理」是管理员视角的交通指挥中心,那「我的流程」就是每位员工手中的导航仪——它告诉用户"路该怎么走、走到哪了、还能怎么加速"。
我的流程是 PMForge 工作流模块面向全体普通用户的统一入口,承载从"发起申请"到"审批完成"的完整生命周期。它包含六个核心子功能:流程发起(选流程、填表单、提交)、我的流程(查看进度、撤销、催办)、流程详情(流程图可视化 + 审批时间线)、待我审批(处理审批任务)、我已审批(回顾历史记录)、抄送给我(查阅同步信息)。
一句话定位:让每个员工都能轻松发起申请、实时掌握进度、高效完成审批。
1.2 目标用户
| 用户类型 | 典型角色 | 使用场景 | 核心诉求 |
|---|---|---|---|
| 普通员工 | 入职半年的研发工程师小李 | 请假、报销、领用办公用品等日常申请 | 表单好填、进度能看、被驳回能改 |
| 审批人 | 部门经理王经理(日均审批 15 条) | 处理下属提交的各种审批请求 | 信息一目了然、操作快、支持转办/委派 |
| 部门负责人 | 技术总监老张 | 了解部门流程整体情况,催办卡住的流程 | 数据直观、异常能感知 |
| 抄送接收人 | HR 小陈(被抄送转正流程) | 查阅需要知晓的流程信息 | 及时收到、标记已读、不遗漏 |
1.3 业务价值
- 降低操作门槛:统一的流程发起入口 + 分类导航,新员工也能 30 秒内找到并发起需要的流程
- 提升审批透明度:流程图实时高亮 + 审批时间线,发起人随时知道"走到哪了、卡在谁那"
- 加速流程流转:催办通知 + 转办/委派机制,避免流程因人员出差、忙碌等原因停滞
- 灵活应对复杂场景:加签(请专家帮忙看)、减签(去掉不必要的环节)、退回(退回某个节点补充材料)等操作覆盖真实审批中的各种意外情况
- 信息同步零遗漏:抄送机制确保相关方及时知晓流程动态,避免信息孤岛
- 完整审计追溯:每一步审批操作都有记录,满足合规审计要求
1.4 功能范围
| 子模块 | 功能项 | 说明 | 优先级 |
|---|---|---|---|
| 流程发起 | 流程分类浏览 | 按分类(人事/财务/行政/项目等)查看可发起的流程 | P0 |
| 流程发起 | 填写业务表单 | 渲染流程关联的动态表单,用户填写后提交 | P0 |
| 流程发起 | 自选审批人 | 部分流程允许发起人指定审批人(由流程设计时配置) | P1 |
| 流程发起 | 提交申请 | 校验表单 → 创建流程实例 → 匹配审批人 → 发送通知 | P0 |
| 我的流程 | 流程列表 | 查看自己发起的所有流程,按状态分 Tab 展示 | P0 |
| 我的流程 | 状态筛选 | 全部 / 进行中 / 已完成 / 已取消 / 已驳回 | P0 |
| 我的流程 | 搜索 | 按流程名称模糊搜索、按流程编号精确搜索 | P1 |
| 流程详情 | 流程图可视化 | BPMN 流程图渲染,已完成节点绿色、当前节点蓝色闪烁、未到灰色 | P0 |
| 流程详情 | 审批时间线 | 时间轴展示每个节点的处理人、动作、意见、耗时 | P0 |
| 流程详情 | 撤销流程 | 发起人撤销进行中的流程(需二次确认) | P1 |
| 流程详情 | 催办流程 | 向当前审批人发送催办通知(10 分钟内限频) | P1 |
| 流程详情 | 重新发起 | 已驳回的流程一键复制表单数据重新提交 | P1 |
| 待我审批 | 待办列表 | 展示当前用户待处理的审批任务 | P0 |
| 待我审批 | 审批通过 | 同意申请,流程流转到下一节点 | P0 |
| 待我审批 | 审批驳回 | 驳回申请(驳回到发起人 / 上一节点 / 指定节点) | P0 |
| 待我审批 | 转办 | 将任务完全转交给其他人处理 | P0 |
| 待我审批 | 委派 | 临时委派给他人,处理完后返回给自己确认 | P1 |
| 待我审批 | 退回 | 将流程退回到之前某个已完成的节点 | P1 |
| 待我审批 | 加签 | 前加签(别人先审)/ 后加签(自己审完后别人再审) | P1 |
| 待我审批 | 减签 | 移除因加签产生的额外审批任务 | P1 |
| 我已审批 | 已办列表 | 查看自己已处理的任务历史 | P1 |
| 我已审批 | 审批详情 | 查看审批时的意见和附件 | P1 |
| 抄送给我 | 抄送列表 | 查看抄送给自己的流程记录 | P1 |
| 抄送给我 | 标记已读 | 单条 / 批量标记抄送为已读 | P1 |
二、用户场景
2.1 用户角色
| 角色 | 描述 | 典型操作 |
|---|---|---|
| 流程发起人 | 需要发起业务审批的普通员工 | 选流程 → 填表单 → 提交 → 跟踪进度 → 必要时撤销或催办 |
| 当前审批人 | 当前节点待审批的用户 | 查看表单 → 审阅附件 → 通过/驳回/转办/委派/加签 |
| 已审批人 | 已完成审批任务的用户 | 查看自己的审批记录、了解后续流程进展 |
| 抄送接收人 | 被抄送流程信息的用户 | 查阅抄送内容 → 标记已读 |
2.2 使用场景
场景 1:员工小李发起请假申请
用户:研发工程师小李(普通员工) 背景:小李下周需要请 3 天年假处理个人事务
操作流程:
- 小李登录系统,点击左侧菜单「我的流程」
- 页面展示流程分类卡片:人事流程、财务流程、行政流程、项目流程……
- 小李点击「人事流程」分类,看到该分类下的流程列表:请假申请、加班申请、转正申请……
- 小李点击「请假申请」,系统展示请假表单
- 表单包含:请假类型(下拉选择:年假/事假/病假/调休)、开始时间、结束时间、请假天数(自动计算)、请假事由(文本框)
- 小李填写:年假、2026-09-22 ~ 2026-09-24、3天、"个人事务需处理"
- 系统根据流程配置自动匹配审批人:直属领导王经理 → 部门总监老张 → HR 备案
- 小李点击「提交申请」
- 系统校验表单 → 创建流程实例 → 生成待办任务给王经理 → 发送通知
- 页面提示"提交成功",自动跳转到「我发起的」列表,小李能看到这条请假流程,状态为"进行中",当前节点"直属领导审批"
期望:表单简洁清晰,有字段提示;提交后能立即看到流程进度。
异常场景:
- 如果小李未填"请假事由",提交时表单校验不通过,提示"请填写请假事由"
- 如果该流程配置了"发起人自选审批人",提交前会弹出人员选择器让小李指定审批人
场景 2:王经理审批报销申请
用户:部门经理王经理(审批人) 背景:王经理早上打开系统,看到待办通知有 3 条新审批
操作流程:
- 王经理点击顶部导航的"待办"图标,看到数字角标"3"
- 进入「待我审批」页面,列表展示 3 条待办任务,按到达时间排序(最早的排最前面)
- 第一条:小李的报销申请,金额 2,580 元,到达时间 09:15,停留 2 小时
- 王经理点击这条任务,进入审批页面
- 页面分三个区域:
- 上方:报销表单(只读),显示报销明细、金额、附件清单
- 中间:流程图(高亮当前节点"部门经理审批")
- 下方:审批记录时间线(已通过的节点)
- 王经理查看报销明细和发票附件,确认无误
- 在底部审批区域:填写审批意见"同意"→ 点击「通过」按钮
- 系统提示"审批成功",流程流转到下一节点(财务审核),财务人员收到待办通知
期望:审批信息一目了然、操作快捷、支持直接查看附件。
异常场景:
- 如果王经理觉得金额有问题,点击「驳回」→ 选择"驳回到发起人" → 填写"请补充发票明细" → 小李收到驳回通知
- 如果王经理正在出差,点击「转办」→ 选择副经理赵经理 → 填写"出差中,转交赵经理审批" → 赵经理收到待办
场景 3:小李催办卡住的流程
用户:研发工程师小李(流程发起人) 背景:小李 3 天前提交的采购申请,至今还卡在"技术总监审批"节点
操作流程:
- 小李进入「我发起的」列表,看到这条采购申请状态为"进行中"
- 当前节点显示"技术总监审批",当前审批人"老张",已停留"3 天 2 小时"(红色字体,表示超时)
- 小李点击「催办」按钮
- 系统弹出确认框:"确认向老张发送催办通知?"
- 小李点击"确认"
- 老张收到一条催办通知:"小李 提交的采购申请已等待 3 天,请尽快处理"
- 系统记录催办时间,10 分钟内小李不能对同一流程再次催办
期望:催办操作简单直接,催办后审批人能收到提醒。
为什么限制催办频率:避免审批人被频繁催办打扰,10 分钟是产品体验和技术实现的平衡点。
场景 4:王经理加签请专家审核
用户:部门经理王经理(审批人) 背景:王经理在审批一项技术方案采购时,需要技术专家小刘先给出专业意见
操作流程:
- 王经理打开待办任务(技术方案采购审批)
- 点击「加签」按钮,弹出加签对话框
- 选择加签方式:「前加签」(让小刘先审核,审核完再回到王经理)
- 选择加签人员:搜索并选择"小刘"
- 填写加签说明:"请技术专家小刘评估方案可行性"
- 点击「确认加签」
- 系统生成一个前加签任务给小刘,小刘收到待办通知
- 小刘审批完成后,任务回到王经理的待办列表
- 王经理参考小刘的意见,做出最终审批决定
前加签 vs 后加签:
- 前加签:别人先审 → 审完回来给我(适合"我需要先听听专家意见")
- 后加签:我先审 → 审完给别人再审(适合"我同意了,但还需要某人确认")
场景 5:小李撤销填错的申请
用户:研发工程师小李(流程发起人) 背景:小李刚提交请假申请后发现日期选错了
操作流程:
- 小李进入「我发起的」列表,找到刚提交的请假申请
- 点击「撤销」按钮
- 系统弹出确认框:"确认撤销该流程?撤销后所有审批人将收到撤销通知。"
- 小李填写撤销原因:"日期选错,需要重新提交"
- 点击「确认撤销」
- 流程状态变为"已取消",所有待办任务自动关闭
- 王经理收到通知:"小李 已撤销请假申请,原因:日期选错"
- 小李重新发起请假申请,填写正确的日期
期望:撤销操作有确认提示防误操作,撤销后各方收到通知。
注意:只有"进行中"的流程才能撤销。如果流程已经审批完成或被驳回,就不能撤销了。
场景 6:HR 小陈查看抄送流程
用户:HR 小陈(抄送接收人) 背景:研发部有员工转正流程,流程设计中配置了"转正通过后自动抄送 HR 备案"
操作流程:
- 小陈收到系统通知:"您有一条新的抄送记录"
- 进入「抄送给我」页面,看到一条新记录:
- 流程名称:转正申请
- 发起人:小李
- 抄送节点:转正通过
- 抄送人:王经理(审批时手动抄送)
- 抄送时间:2026-09-18 14:30
- 状态:未读(红点标记)
- 小陈点击这条记录,查看流程详情(只读模式,不能审批)
- 系统自动将这条记录标记为"已读"
- 小陈了解到小李已转正通过,无需进一步操作
期望:抄送列表清晰、未读有明显标记、详情可查看但不可操作。
场景 7:王经理委派任务给出差期间的副经理
用户:部门经理王经理(审批人) 背景:王经理下周出差 5 天,期间有多条审批需要处理
操作流程:
- 王经理在待办列表中看到一条报销审批
- 点击「委派」按钮
- 选择委派目标人:副经理赵经理
- 填写委派说明:"下周出差,请赵经理代为审批"
- 设置委派期限:5 天
- 点击「确认委派」
- 赵经理收到待办任务,任务标注"委派任务"
- 赵经理审阅后点击「通过」
- 任务返回给王经理确认(王经理收到通知:"赵经理已完成您委派的报销审批,请确认")
- 王经理确认后,流程流转到下一节点
委派 vs 转办:
- 转办 = "这个任务给你了,我不再管"(完全转移)
- 委派 = "帮我处理一下,处理完还得我确认"(临时转移,最终决定权在自己)
2.3 用户故事与验收标准
| 编号 | 用户故事 | 验收标准 | 优先级 |
|---|---|---|---|
| US-01 | 作为普通员工,我希望能按分类浏览并发起流程 | ① 流程分类页面 1 秒内加载完成 ② 每个分类下展示流程名称和描述 ③ 点击流程后 2 秒内渲染出表单 | P0 |
| US-02 | 作为普通员工,我希望能查看我发起的流程列表及状态 | ① 列表展示流程名称、当前节点、状态、发起时间 ② Tab 切换各状态时数据准确 ③ 状态统计数字与实际列表条数一致 | P0 |
| US-03 | 作为普通员工,我希望能查看流程图和审批记录 | ① 流程图 2 秒内渲染完成 ② 已完成节点绿色、当前节点蓝色闪烁 ③ 时间线按时间顺序展示每条审批记录 | P0 |
| US-04 | 作为普通员工,我希望能撤销进行中的流程 | ① 仅"进行中"状态显示撤销按钮 ② 撤销需二次确认 ③ 撤销后审批人收到通知 ④ 流程状态变为"已取消" | P1 |
| US-05 | 作为普通员工,我希望能催办超时流程 | ① 仅"进行中"状态可催办 ② 催办后审批人 5 秒内收到通知 ③ 同一流程 10 分钟内不能重复催办 | P1 |
| US-06 | 作为审批人,我希望能查看待办任务列表 | ① 列表按到达时间升序排列 ② 超时任务红色标记 ③ 展示发起人、金额/摘要等关键信息 | P0 |
| US-07 | 作为审批人,我希望能执行通过/驳回/转办/委派操作 | ① 通过后面自动流转到下一节点 ② 驳回支持 3 种方式 ③ 转办后原审批人不再看到该任务 ④ 委派后任务最终返回原审批人 | P0 |
| US-08 | 作为审批人,我希望能加签或减签 | ① 前加签后加签人先审,审完回到自己 ② 后加签自己审完后加签人再审 ③ 减签只能减加签产生的任务 | P1 |
| US-09 | 作为审批人,我希望能查看已办任务列表 | ① 列表按审批完成时间倒序 ② 展示审批动作和意见 ③ 支持按动作类型筛选 | P1 |
| US-10 | 作为抄送接收人,我希望能查看抄送列表并标记已读 | ① 未读记录红点标记 ② 点击详情自动标记已读 ③ 支持批量标记 ④ 抄送详情为只读模式 | P1 |
三、功能需求
3.1 流程发起
3.1.1 功能描述
用户通过流程分类浏览和选择,填写业务表单后提交申请,启动流程实例。系统支持流程分类管理、动态表单渲染、审批人自动匹配及发起人自选审批人等功能。
给开发同学的说明:流程分类和流程定义的数据来自「流程设计」模块(03-01),本模块只负责"消费"这些配置,渲染表单并创建流程实例。
3.1.2 页面原型
流程发起页面(分类选择): 
流程发起页面(表单填写): 
3.1.3 操作流程
1. 用户进入「我的流程」页面
2. 页面展示流程分类卡片列表(如:人事流程、财务流程、行政流程、项目流程等)
3. 用户点击某个分类,查看该分类下的所有流程
4. 用户选择需要发起的流程类型
5. 系统渲染该流程关联的业务表单(动态表单,字段由流程设计时配置)
6. 用户填写表单内容
7. 如流程配置了"发起人自选审批人",系统弹出审批人选择器
8. 用户选择审批人(如需要)
9. 用户点击「提交申请」
10. 系统校验表单数据(字段必填、格式、范围等)
11. 系统创建流程实例并启动
12. 系统根据流程定义匹配审批人,生成第一个待办任务
13. 系统向审批人发送待办通知(站内消息)
14. 提示用户"提交成功",跳转到「我发起的」列表3.1.4 业务规则
| 规则编号 | 规则描述 | 设计原因 |
|---|---|---|
| R-01 | 仅展示当前租户下已启用且用户有权限发起的流程 | 不同部门/角色看到的流程不同,避免信息干扰 |
| R-02 | 流程按分类展示,分类排序由管理员在「流程分类管理」中配置 | 常用分类排前面,减少用户查找时间 |
| R-03 | 表单字段校验规则由流程设计时定义,提交前必须全部通过 | 保证数据完整性,减少因数据不全导致的审批退回 |
| R-04 | 审批人匹配优先级:发起人自选 > 流程变量指定 > 角色匹配 > 部门领导 > 岗位匹配 | 灵活性与自动化兼顾:需要自定义时能自定义,否则系统自动匹配 |
| R-05 | 发起人自选审批人功能由流程设计时配置开关控制 | 不是所有流程都需要自选,标准流程应自动匹配 |
| R-06 | 同一流程在同一用户下允许同时存在多个进行中的实例(可由流程配置限制) | 如请假流程可限制"同时只能有一个进行中的请假申请" |
| R-07 | 提交成功后流程状态变为「进行中」 | — |
| R-08 | 表单数据以 JSON 格式存储,关联到流程实例 | JSON 灵活适配不同流程的表单结构差异 |
3.1.5 接口列表
| 接口名称 | 请求方式 | 接口路径 | 说明 |
|---|---|---|---|
| 获取流程分类列表 | GET | /app-api/bpm/process-category/list | 获取已启用的流程分类列表 |
| 获取流程列表(按分类) | GET | /app-api/bpm/process/list-by-category | 按分类获取可发起的流程列表 |
| 获取流程表单定义 | GET | /app-api/bpm/process/get-form | 获取流程关联的业务表单结构 |
| 获取流程审批人配置 | GET | /app-api/bpm/process/get-assignee-config | 获取流程是否需要发起人自选审批人 |
| 发起流程 | POST | /app-api/bpm/process-instance/create | 提交表单数据并发起流程实例 |
| 校验流程发起条件 | POST | /app-api/bpm/process-instance/check | 校验用户是否有权限发起该流程 |
3.1.6 数据模型
发起流程请求参数:
| 字段名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| processDefinitionId | String | 是 | 流程定义ID |
| processDefinitionKey | String | 是 | 流程定义标识 |
| variables | Map<String, Object> | 否 | 流程变量(用于条件分支判断) |
| formData | JSON | 是 | 业务表单数据 |
| assignees | List<Assignee> | 否 | 发起人自选审批人列表 |
| remark | String | 否 | 申请备注 |
发起人自选审批人对象(Assignee):
| 字段名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| taskDefinitionKey | String | 是 | 任务节点定义Key(对应流程设计中的节点标识) |
| assigneeType | Integer | 是 | 审批人类型(1-用户 2-角色 3-部门 4-岗位) |
| assigneeId | Long | 是 | 审批人ID |
3.2 我的流程列表
3.2.1 功能描述
展示当前用户发起的所有流程实例,支持按状态筛选和关键字搜索,使用户能快速定位和跟踪自己的流程申请。
3.2.2 页面原型
我发起的列表页面: 
3.2.3 操作流程
1. 用户进入「我发起的」页面
2. 默认展示"全部"Tab,显示所有流程列表(分页)
3. 列表展示字段:流程名称、状态标签、当前审批节点、发起人、发起时间、操作按钮
4. 用户可通过顶部 Tab 切换状态筛选:全部 / 进行中 / 已完成 / 已取消 / 已驳回
5. 每个 Tab 上显示对应状态的数量统计
6. 用户可在搜索框输入关键字搜索(支持流程名称模糊匹配、流程编号精确匹配)
7. 用户可点击某条流程进入流程详情页
8. 操作按钮根据状态动态展示:
- 进行中:查看详情、撤销、催办
- 已驳回:查看详情、重新发起
- 已完成/已取消:查看详情3.2.4 业务规则
| 规则编号 | 规则描述 | 设计原因 |
|---|---|---|
| R-01 | 仅展示当前用户发起的流程实例 | 数据隔离,用户只看自己的 |
| R-02 | 流程状态:进行中(0)、已完成(1)、已取消(2)、已驳回(3) | 四种状态覆盖所有流程生命周期 |
| R-03 | 列表按发起时间倒序排列 | 最新发起的排最前面,方便快速查看 |
| R-04 | 状态为「进行中」的流程可执行撤销和催办操作 | 只有还在流转中的流程才有撤销和催办的意义 |
| R-05 | 状态为「已驳回」的流程支持重新发起(自动复制表单数据) | 减少用户重复填写工作量 |
| R-06 | 搜索支持流程名称模糊匹配和流程编号精确匹配 | 模糊匹配方便记不清编号的用户,精确匹配方便知道编号的用户 |
| R-07 | 默认每页展示 10 条,支持 10/20/50 条切换 | 兼顾加载速度和信息密度 |
| R-08 | 「已取消」状态包含用户主动撤销和管理员终止两种情况 | 用户视角不区分取消来源,统一展示 |
3.2.5 流程状态说明
| 状态 | 标识 | 颜色标签 | 可执行操作 | 说明 |
|---|---|---|---|---|
| 进行中 | RUNNING(0) | 🔵 蓝色 | 查看详情、撤销、催办 | 流程实例正在审批流转中 |
| 已完成 | COMPLETED(1) | 🟢 绿色 | 查看详情 | 流程已审批通过并完成 |
| 已取消 | CANCELLED(2) | ⚪ 灰色 | 查看详情 | 发起人撤销或管理员终止 |
| 已驳回 | REJECTED(3) | 🔴 红色 | 查看详情、重新发起 | 流程被审批人驳回至发起人 |
3.2.6 接口列表
| 接口名称 | 请求方式 | 接口路径 | 说明 |
|---|---|---|---|
| 获取我发起的流程分页 | GET | /app-api/bpm/process-instance/my-page | 分页查询我发起的流程列表 |
| 获取流程状态统计 | GET | /app-api/bpm/process-instance/my-status-count | 获取各状态下的流程数量 |
| 搜索我发起的流程 | GET | /app-api/bpm/process-instance/my-search | 按关键字搜索我发起的流程 |
请求参数(分页查询):
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| status | Integer | 否 | 流程状态(0-进行中 1-已完成 2-已取消 3-已驳回) |
| processName | String | 否 | 流程名称(模糊匹配) |
| processDefinitionKey | String | 否 | 流程定义标识 |
| startTime | DateTime[] | 否 | 发起时间范围 |
| pageNo | Integer | 是 | 页码(默认1) |
| pageSize | Integer | 是 | 每页条数(默认10) |
返回结果(分页列表项):
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | Long | 流程实例ID |
| processName | String | 流程名称 |
| processDefinitionKey | String | 流程定义标识 |
| category | String | 流程分类名称 |
| status | Integer | 流程状态 |
| currentNodeName | String | 当前审批节点名称 |
| currentAssignees | List<String> | 当前审批人名称列表 |
| formData | JSON | 表单摘要数据(取前几个关键字段) |
| startTime | DateTime | 发起时间 |
| endTime | DateTime | 结束时间(进行中为空) |
| duration | Long | 耗时(毫秒,进行中为当前时间-发起时间) |
| canCancel | Boolean | 是否可撤销 |
| canUrge | Boolean | 是否可催办 |
3.3 流程详情
3.3.1 功能描述
展示单个流程实例的完整信息,包括流程图可视化(高亮当前节点和已走过路径)、审批记录时间线、流程表单数据。支持发起人在流程进行中执行撤销和催办操作。
3.3.2 页面原型
流程详情页面: 
3.3.3 操作流程
1. 用户在流程列表中点击某条流程
2. 进入流程详情页
3. 页面顶部展示流程基本信息(流程名称、状态标签、发起人、发起时间)
4. 页面中部展示流程图:
- 已完成节点:绿色 ✅ + 审批人姓名 + 通过时间
- 当前节点:蓝色 🔵 + 脉冲动画 + 当前审批人 + 已等待时长
- 未到达节点:灰色 ○
- 驳回路径:红色虚线
5. 页面下方展示审批记录时间线(时间轴形式,从上到下按时间顺序)
6. 页面底部展示流程表单数据(只读模式)
7. 底部操作栏根据状态展示按钮:
- 进行中:「撤销」「催办」
- 已驳回:「重新发起」
- 已完成/已取消:无操作按钮3.3.4 业务规则
| 规则编号 | 规则描述 | 设计原因 |
|---|---|---|
| R-01 | 流程图使用 BPMN 2.0 标准渲染,支持缩放和拖拽 | 标准渲染保证准确性,缩放拖拽适配复杂大流程图 |
| R-02 | 已完成节点绿色对勾,当前节点蓝色脉冲动画,未到达节点灰色 | 颜色编码直观传达流程进度 |
| R-03 | 驳回路径用红色虚线标识 | 红色醒目,虚线表示"非正常路径" |
| R-04 | 审批记录时间线按时间顺序从上到下排列 | 符合用户从上往下阅读的习惯 |
| R-05 | 每条审批记录包含:审批人、头像、部门、审批动作、审批意见、审批时间、耗时 | 完整记录便于追溯 |
| R-06 | 仅流程发起人可执行撤销操作 | 权限控制,防止他人误撤 |
| R-07 | 撤销操作需二次确认(弹窗提示) | 防误操作,撤销是不可逆的 |
| R-08 | 催办操作限频:同一流程同一审批人 10 分钟内只能催办一次 | 防止审批人被频繁打扰 |
| R-09 | 撤销后流程状态变为「已取消」,所有待办任务自动关闭 | 确保流程彻底终止,不留残余任务 |
| R-10 | 重新发起时自动复制上次表单数据,用户可修改后重新提交 | 减少重复填写,用户只需修改有问题的字段 |
| R-11 | 流程图中的审批节点支持点击查看该节点的审批人和审批结果 | 方便发起人了解每个节点的详情 |
3.3.5 接口列表
| 接口名称 | 请求方式 | 接口路径 | 说明 |
|---|---|---|---|
| 获取流程实例详情 | GET | /app-api/bpm/process-instance/get | 获取流程实例基本信息 |
| 获取流程图 | GET | /app-api/bpm/process-instance/get-process-image | 获取流程定义BPMN图及高亮信息 |
| 获取审批记录时间线 | GET | /app-api/bpm/process-instance/get-approval-timeline | 获取审批记录时间线数据 |
| 获取流程表单数据 | GET | /app-api/bpm/process-instance/get-form-data | 获取流程业务表单数据 |
| 撤销流程 | PUT | /app-api/bpm/process-instance/cancel | 撤销进行中的流程实例 |
| 催办流程 | POST | /app-api/bpm/process-instance/urge | 向当前审批人发送催办通知 |
撤销流程请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| processInstanceId | Long | 是 | 流程实例ID |
| reason | String | 否 | 撤销原因 |
催办流程请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| processInstanceId | Long | 是 | 流程实例ID |
| urgeMessage | String | 否 | 催办消息(默认:"请尽快处理") |
审批记录时间线返回结果:
| 字段名 | 类型 | 说明 |
|---|---|---|
| taskId | Long | 任务ID |
| taskName | String | 任务节点名称 |
| assigneeId | Long | 审批人ID |
| assigneeName | String | 审批人姓名 |
| assigneeAvatar | String | 审批人头像URL |
| assigneeDeptName | String | 审批人所属部门 |
| action | String | 审批动作(approve/reject/transfer/delegate/return/empty) |
| actionLabel | String | 审批动作中文标签(通过/驳回/转办/委派/退回/自动流转) |
| comment | String | 审批意见 |
| attachments | List<Attachment> | 审批附件列表 |
| startTime | DateTime | 任务开始时间 |
| endTime | DateTime | 任务完成时间 |
| duration | Long | 审批耗时(毫秒) |
| taskSequence | Integer | 任务序号(用于排序) |
3.4 待我审批
3.4.1 功能描述
展示当前用户待处理的审批任务列表,支持任务详情查看和多种审批操作(通过、驳回、转办、委派、退回、加签、减签)。这是审批人处理日常审批工作的核心功能页面。
与「待办管理」的区别:本模块是普通审批人视角(/app-api/),只看自己的待办;「待办管理」(03-04)是管理员视角(/api/),能看全局任务并做干预操作。
3.4.2 页面原型
待我审批列表页面: 
审批操作页面: 
3.4.3 操作流程
查看待办列表:
1. 用户进入「待我审批」页面
2. 展示当前用户所有待处理的审批任务(分页)
3. 列表展示:任务名称、流程名称、发起人、发起部门、到达时间、停留时长
4. 支持按流程类型、发起人、时间范围筛选
5. 支持关键字搜索(流程名称、发起人姓名)
6. 超时任务红色标记 + ⚠️ 图标
7. 点击某条任务进入任务详情/审批页面审批操作:
1. 用户点击某条待办任务进入审批页面
2. 页面展示任务详情(表单数据只读、流程图、审批记录)
3. 用户审阅表单信息和附件
4. 用户选择审批操作:
a. 通过:填写审批意见(可选)→ 点击「通过」→ 流程流转到下一节点
b. 驳回:
- 选择驳回方式:驳回到发起人 / 驳回到上一节点 / 驳回到指定节点
- 填写驳回原因(必填)
- 点击「确认驳回」→ 流程退回
c. 转办:
- 选择转办目标人(人员选择器)
- 填写转办说明
- 点击「确认转办」→ 任务完全转移给目标人
d. 委派:
- 选择委派目标人
- 填写委派说明
- 设置委派期限天数(可选)
- 点击「确认委派」→ 任务先由被委派人处理,处理完后返回给自己
e. 退回:
- 选择退回到哪个历史节点
- 填写退回原因
- 点击「确认退回」→ 流程退回到指定节点
5. 加签操作:
a. 前加签:选择加签人员 → 填写说明 → 加签人员先审批,审完回到自己
b. 后加签:选择加签人员 → 填写说明 → 自己审完后加签人员再审
6. 减签操作:
a. 从当前任务链中选择需要减掉的加签任务
b. 确认减签 → 被减签的任务自动关闭
7. 填写审批意见和上传附件(可选)
8. 提交审批操作3.4.4 业务规则
| 规则编号 | 规则描述 | 设计原因 |
|---|---|---|
| R-01 | 仅展示当前用户作为审批人的待处理任务 | 数据隔离 |
| R-02 | 列表按任务到达时间升序排列(最早的排最前面) | 先到先处理,避免早期任务被遗忘 |
| R-03 | 停留时长超过配置阈值(默认24小时)的任务标红提醒 | 引起审批人注意,加速处理 |
| R-04 | 通过操作后流程自动流转到下一节点,下一节点审批人收到待办通知 | 自动化流转,无需人工干预 |
| R-05 | 驳回支持三种方式:回到发起人 / 回到上一节点 / 回到指定节点 | 不同业务场景需要不同的驳回粒度 |
| R-06 | 转办后原审批人不再参与该任务,任务完全转移给目标人 | 转办 = 彻底交接 |
| R-07 | 委派后任务先由被委派人处理,处理完成后任务返回给原审批人确认 | 委派 = 临时帮忙,决定权在自己 |
| R-08 | 前加签:加签人员在当前审批人之前审批 | 适合"我需要先听专家意见"的场景 |
| R-09 | 后加签:加签人员在当前审批人之后审批 | 适合"我同意了但还需要某人确认"的场景 |
| R-10 | 减签只能减掉加签产生的任务,不能减掉流程定义中的原始任务 | 保护流程设计的完整性 |
| R-11 | 退回操作可将流程退回到之前任意已完成的节点 | 灵活补充材料或修正信息 |
| R-12 | 审批意见最大长度 500 字符 | 足够表达意见,避免过长无意义内容 |
| R-13 | 审批附件最多上传 5 个,单个文件不超过 10MB | 平衡存储成本和实际需求 |
| R-14 | 审批操作提交后不可撤回 | 保证审批严肃性,如需修改联系管理员 |
| R-15 | 多人会签任务需所有审批人全部通过才能流转到下一节点 | 会签 = 所有人都同意 |
| R-16 | 多人或签任务任一审批人通过即可流转到下一节点 | 或签 = 有人同意就行 |
3.4.5 审批操作速查表
| 操作 | 标识 | 通俗解释 | 影响范围 |
|---|---|---|---|
| 通过 | approve | "我同意,往下走" | 流程流转到下一节点 |
| 驳回 | reject | "不行,退回去" | 流程退回到发起人/上一节点/指定节点 |
| 转办 | transfer | "这个不归我管,交给XX" | 当前任务完全转移给目标人 |
| 委派 | delegate | "帮我看看,看完还得我确认" | 任务临时转移,处理后返回 |
| 退回 | return | "回到上一步补充材料" | 流程退回到指定历史节点 |
| 前加签 | before-add-sign | "我先问问XX的意见" | 增加前置审批任务 |
| 后加签 | after-add-sign | "我同意了,但还需要XX确认" | 增加后置审批任务 |
| 减签 | subtract-sign | "不用XX审了,去掉这个环节" | 关闭指定加签任务 |
3.4.6 接口列表
| 接口名称 | 请求方式 | 接口路径 | 说明 |
|---|---|---|---|
| 获取待办任务分页 | GET | /app-api/bpm/task/todo-page | 分页查询待办任务列表 |
| 获取待办任务统计 | GET | /app-api/bpm/task/todo-count | 获取待办任务数量 |
| 获取任务详情 | GET | /app-api/bpm/task/get | 获取任务详情信息 |
| 审批通过 | PUT | /app-api/bpm/task/approve | 审批通过操作 |
| 审批驳回 | PUT | /app-api/bpm/task/reject | 审批驳回操作 |
| 转办任务 | PUT | /app-api/bpm/task/transfer | 转办任务操作 |
| 委派任务 | PUT | /app-api/bpm/task/delegate | 委派任务操作 |
| 退回任务 | PUT | /app-api/bpm/task/return | 退回任务操作 |
| 前加签 | POST | /app-api/bpm/task/before-add-sign | 前加签操作 |
| 后加签 | POST | /app-api/bpm/task/after-add-sign | 后加签操作 |
| 减签 | DELETE | /app-api/bpm/task/subtract-sign | 减签操作 |
| 获取退回节点列表 | GET | /app-api/bpm/task/return-list | 获取可退回的历史节点列表 |
| 获取候选人列表 | GET | /app-api/bpm/task/candidate-list | 获取可转办/委派/加签的候选人列表 |
待办任务分页请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| processName | String | 否 | 流程名称(模糊匹配) |
| processDefinitionKey | String | 否 | 流程定义标识 |
| originatorUserId | Long | 否 | 发起人用户ID |
| category | String | 否 | 流程分类 |
| createTime | DateTime[] | 否 | 任务到达时间范围 |
| pageNo | Integer | 是 | 页码(默认1) |
| pageSize | Integer | 是 | 每页条数(默认10) |
待办任务分页返回结果:
| 字段名 | 类型 | 说明 |
|---|---|---|
| taskId | String | 任务ID |
| taskName | String | 任务名称 |
| processInstanceId | Long | 流程实例ID |
| processName | String | 流程名称 |
| processDefinitionKey | String | 流程定义标识 |
| category | String | 流程分类 |
| originatorUserId | Long | 发起人ID |
| originatorName | String | 发起人姓名 |
| originatorDeptName | String | 发起人部门 |
| formData | JSON | 表单摘要数据 |
| createTime | DateTime | 任务到达时间 |
| duration | Long | 停留时长(毫秒) |
| isTimeout | Boolean | 是否超时 |
| suspension | Integer | 是否挂起(0-正常 1-挂起) |
审批通过请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| taskId | String | 是 | 任务ID |
| comment | String | 否 | 审批意见 |
| attachmentIds | List<Long> | 否 | 审批附件ID列表 |
| variables | Map<String, Object> | 否 | 流程变量 |
| approve | Boolean | 是 | 是否通过(true) |
驳回请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| taskId | String | 是 | 任务ID |
| comment | String | 是 | 驳回原因 |
| rejectType | Integer | 是 | 驳回类型(1-驳回到发起人 2-驳回到上一节点 3-驳回到指定节点) |
| targetActivityId | String | 否 | 驳回到指定节点ID(rejectType=3时必填) |
转办请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| 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 | 否 | 加签说明 |
| signType | Integer | 是 | 加签类型(1-前加签 2-后加签) |
| approveType | Integer | 否 | 加签审批方式(1-会签 2-或签) |
减签请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| taskId | String | 是 | 要减签的任务ID |
| comment | String | 否 | 减签说明 |
3.5 我已审批
3.5.1 功能描述
展示当前用户已经处理过的审批任务列表,支持查看审批详情和对应的流程信息。用户可以回顾自己的审批历史。
3.5.2 页面原型
我已审批列表页面: 
3.5.3 操作流程
1. 用户进入「我已审批」页面
2. 展示当前用户已处理的所有审批任务(分页)
3. 列表展示:任务名称、流程名称、发起人、审批动作标签、审批意见摘要、审批时间
4. 支持按流程类型、审批动作(通过/驳回/转办/委派/退回)、时间范围筛选
5. 用户点击某条记录可查看完整审批详情(包括当时的意见和附件)3.5.4 业务规则
| 规则编号 | 规则描述 |
|---|---|
| R-01 | 仅展示当前用户已处理的任务 |
| R-02 | 列表按审批完成时间倒序排列 |
| R-03 | 支持按审批动作类型筛选(通过/驳回/转办/委派/退回) |
| R-04 | 已审批记录为只读,不可进行任何操作 |
| R-05 | 点击可查看审批时的意见和附件 |
| R-06 | 支持按流程名称和发起人进行关键字搜索 |
3.5.5 接口列表
| 接口名称 | 请求方式 | 接口路径 | 说明 |
|---|---|---|---|
| 获取已办任务分页 | GET | /app-api/bpm/task/done-page | 分页查询已办任务列表 |
| 获取已办任务详情 | GET | /app-api/bpm/task/done-detail | 获取已办任务详细信息 |
已办任务分页请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| processName | String | 否 | 流程名称(模糊匹配) |
| processDefinitionKey | String | 否 | 流程定义标识 |
| action | String | 否 | 审批动作(approve/reject/transfer/delegate/return) |
| createTime | DateTime[] | 否 | 审批时间范围 |
| pageNo | Integer | 是 | 页码(默认1) |
| pageSize | Integer | 是 | 每页条数(默认10) |
已办任务分页返回结果:
| 字段名 | 类型 | 说明 |
|---|---|---|
| taskId | String | 任务ID |
| taskName | String | 任务名称 |
| processInstanceId | Long | 流程实例ID |
| processName | String | 流程名称 |
| originatorName | String | 发起人姓名 |
| action | String | 审批动作标识 |
| actionLabel | String | 审批动作标签 |
| comment | String | 审批意见 |
| startTime | DateTime | 任务开始时间 |
| endTime | DateTime | 任务完成时间 |
| duration | Long | 审批耗时(毫秒) |
3.6 抄送给我
3.6.1 功能描述
展示抄送给当前用户的流程信息列表,用户可查看抄送流程的详情(只读模式),并标记为已读。抄送功能用于在审批过程中将流程信息同步给相关人员知晓。
抄送的两种来源:
- 自动抄送:流程设计时在某个节点配置了"通过后自动抄送给 XX"
- 手动抄送:审批人在审批过程中主动选择"抄送给 XX"
3.6.2 页面原型
抄送给我列表页面: 
3.6.3 操作流程
1. 用户进入「抄送给我」页面
2. 页面顶部显示未读数量
3. 展示抄送给当前用户的所有记录(分页)
4. 列表展示:流程名称、发起人、抄送节点、抄送人、抄送时间、已读/未读状态
5. 未读记录有 🔴 红点标记
6. 用户点击某条记录查看流程详情(只读模式)
7. 系统自动标记该条为已读
8. 支持勾选多条后点击「批量标记已读」
9. 支持按流程名称、已读/未读状态筛选3.6.4 业务规则
| 规则编号 | 规则描述 | 设计原因 |
|---|---|---|
| R-01 | 仅展示抄送给当前用户的记录 | 数据隔离 |
| R-02 | 列表按抄送时间倒序排列 | 最新的排最前面 |
| R-03 | 未读记录展示红点标记 | 醒目提醒用户有未读信息 |
| R-04 | 用户点击详情后自动标记为已读 | 减少操作步骤,看了就算已读 |
| R-05 | 抄送详情为只读模式,不可进行任何审批操作 | 抄送 = 知晓,不需要参与审批 |
| R-06 | 支持批量标记已读(全选/反选) | 高效处理大量抄送 |
| R-07 | 支持按已读/未读状态筛选 | 快速找到未读记录 |
| R-08 | 抄送来源包括:流程节点配置自动抄送、审批人手动抄送 | 两种来源满足不同场景 |
| R-09 | 每条抄送记录标记抄送来源节点和抄送操作人 | 方便追溯"谁在什么环节抄送的" |
3.6.5 接口列表
| 接口名称 | 请求方式 | 接口路径 | 说明 |
|---|---|---|---|
| 获取抄送记录分页 | GET | /app-api/bpm/task-copy/my-page | 分页查询抄送给我的记录 |
| 获取抄送未读数量 | GET | /app-api/bpm/task-copy/unread-count | 获取未读抄送数量 |
| 标记抄送已读 | PUT | /app-api/bpm/task-copy/read | 标记单条抄送为已读 |
| 批量标记已读 | PUT | /app-api/bpm/task-copy/batch-read | 批量标记抄送为已读 |
| 获取抄送详情 | GET | /app-api/bpm/task-copy/detail | 获取抄送关联的流程详情 |
抄送记录分页请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| processName | String | 否 | 流程名称(模糊匹配) |
| readStatus | Integer | 否 | 已读状态(0-未读 1-已读) |
| createTime | DateTime[] | 否 | 抄送时间范围 |
| pageNo | Integer | 是 | 页码(默认1) |
| pageSize | Integer | 是 | 每页条数(默认10) |
抄送记录分页返回结果:
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | Long | 抄送记录ID |
| processInstanceId | Long | 流程实例ID |
| processName | String | 流程名称 |
| processDefinitionKey | String | 流程定义标识 |
| originatorName | String | 发起人姓名 |
| copyTaskName | String | 抄送节点名称 |
| copyUserName | String | 抄送操作人姓名 |
| copyReason | String | 抄送说明 |
| readStatus | Integer | 已读状态(0-未读 1-已读) |
| createTime | DateTime | 抄送时间 |
| readTime | DateTime | 已读时间 |
四、非功能需求
4.1 性能要求
| 指标 | 目标值 | 说明 |
|---|---|---|
| 流程列表查询 | < 500ms | 含分页 + 状态统计 |
| 流程图渲染 | < 1s | 含 BPMN 解析 + 高亮数据返回 |
| 审批操作(通过/驳回) | < 500ms | 含流程流转 + 下一节点任务生成 |
| 催办通知发送 | < 5s | 从点击催办到审批人收到通知 |
| 待办数量查询 | < 200ms | 顶部导航角标数字,需快速响应 |
| 抄送列表查询 | < 500ms | 含分页 + 未读统计 |
| 流程发起 | < 2s | 含表单校验 + 流程实例创建 + 审批人匹配 + 通知发送 |
| 并发流程发起 | 100 并发 | 高峰期(如月末集中报销)不卡顿 |
| 表单渲染 | < 1s | 动态表单从加载到可编辑状态 |
4.2 安全要求
| 安全项 | 实现方式 | 说明 |
|---|---|---|
| 数据隔离 | 后端接口强制校验当前登录用户 | 用户只能查看和操作自己的流程、任务、抄送 |
| 撤销权限 | 校验 processInstanceId 的 starter_id == 当前用户ID | 防止他人撤销 |
| 审批权限 | 校验 taskId 的 assignee_id == 当前用户ID | 只有任务分配人能审批 |
| 操作审计 | 所有审批操作写入操作日志(操作人、时间、动作、IP、意见) | 满足合规审计要求 |
| 数据脱敏 | 流程表单中的敏感信息(身份证、银行卡)在日志中脱敏处理 | 防止敏感数据泄露 |
| 防重复提交 | 审批接口做幂等性校验(基于 taskId + 操作类型) | 防止网络重试导致重复审批 |
| 文件安全 | 附件上传做文件类型白名单 + 大小限制(10MB) | 防止恶意文件上传 |
| 传输安全 | 全站 HTTPS | 防止数据在传输中被窃取 |
| 催办限频 | Redis 缓存催办时间戳,10 分钟内同一流程同一审批人只允许一次 | 防止催办轰炸 |
4.3 兼容性要求
| 端 | 要求 |
|---|---|
| PC 浏览器 | Chrome 80+、Firefox 75+、Safari 13+、Edge 80+ |
| 移动端浏览器 | iOS Safari 12+、Android Chrome 80+ |
| 移动端适配 | 流程图支持手势缩放、滑动浏览;审批操作按钮适配小屏 |
| 分辨率适配 | 最小支持 1280×720,推荐 1920×1080 |
五、数据设计
5.1 核心数据表
5.1.1 流程实例表(bpm_process_instance)— 用户视角
与 03-02 共用同一张物理表,此处从用户视角列出字段。
| 字段名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | BIGINT | 是 | 流程实例ID(主键) |
| process_definition_id | VARCHAR(64) | 是 | 流程定义ID |
| process_definition_key | VARCHAR(64) | 是 | 流程定义标识 |
| process_definition_name | VARCHAR(128) | 是 | 流程定义名称 |
| process_definition_version | INT | 是 | 流程定义版本号 |
| category | VARCHAR(64) | 否 | 流程分类标识 |
| title | VARCHAR(256) | 否 | 流程标题 |
| form_id | BIGINT | 否 | 业务表单ID |
| form_data | JSON | 否 | 业务表单数据(JSON格式) |
| starter_id | BIGINT | 是 | 流程发起人用户ID |
| starter_name | VARCHAR(64) | 是 | 流程发起人姓名 |
| starter_dept_id | BIGINT | 否 | 发起人部门ID |
| starter_dept_name | VARCHAR(128) | 否 | 发起人部门名称 |
| status | TINYINT | 是 | 流程状态(0-进行中 1-已完成 2-已取消 3-已驳回) |
| result | TINYINT | 是 | 审批结果(0-待审批 1-通过 2-驳回 3-取消) |
| current_task_name | VARCHAR(128) | 否 | 当前审批节点名称 |
| current_assignee_ids | VARCHAR(512) | 否 | 当前审批人ID列表(逗号分隔) |
| current_assignee_names | VARCHAR(512) | 否 | 当前审批人姓名列表(逗号分隔) |
| start_time | DATETIME | 是 | 流程发起时间 |
| end_time | DATETIME | 否 | 流程结束时间 |
| duration | BIGINT | 否 | 流程耗时(毫秒) |
| remark | VARCHAR(500) | 否 | 申请备注 |
| tenant_id | BIGINT | 是 | 租户ID |
| creator / create_time / updater / update_time / deleted | — | — | 通用审计字段 |
索引设计:
- PRIMARY KEY (id)
- idx_starter_status (starter_id, status) — 用户查自己的流程按状态筛选
- idx_starter_start_time (starter_id, start_time) — 用户按时间排序
- idx_tenant_key (tenant_id, process_definition_key) — 按流程定义查询
5.1.2 任务表(bpm_task)— 用户视角
| 字段名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | VARCHAR(64) | 是 | 任务ID(主键,Flowable 生成) |
| name | VARCHAR(128) | 是 | 任务名称 |
| description | VARCHAR(512) | 否 | 任务描述 |
| process_instance_id | BIGINT | 是 | 关联的流程实例ID |
| process_definition_id | VARCHAR(64) | 是 | 流程定义ID |
| task_definition_key | VARCHAR(64) | 是 | 任务节点定义Key |
| assignee_id | BIGINT | 否 | 实际审批人ID |
| assignee_name | VARCHAR(64) | 否 | 实际审批人姓名 |
| owner_id | BIGINT | 否 | 任务拥有者ID(委派场景下的原审批人) |
| owner_name | VARCHAR(64) | 否 | 任务拥有者姓名 |
| status | TINYINT | 是 | 任务状态(0-待处理 1-已完成 2-已取消 3-已转办 4-已委派 5-已退回) |
| action | VARCHAR(32) | 否 | 审批动作(approve/reject/transfer/delegate/return/empty) |
| comment | VARCHAR(500) | 否 | 审批意见 |
| form_data | JSON | 否 | 任务节点表单数据 |
| is_timeout | BIT | 是 | 是否超时(0-否 1-是) |
| timeout_rule | VARCHAR(256) | 否 | 超时规则配置 |
| source_task_id | VARCHAR(64) | 否 | 来源任务ID(加签/转办/委派场景) |
| sign_type | TINYINT | 是 | 加签类型(0-非加签 1-前加签 2-后加签) |
| start_time | DATETIME | 是 | 任务开始时间 |
| claim_time | DATETIME | 否 | 任务签收时间 |
| end_time | DATETIME | 否 | 任务完成时间 |
| duration | BIGINT | 否 | 任务耗时(毫秒) |
| tenant_id | BIGINT | 是 | 租户ID |
| creator / create_time / updater / update_time / deleted | — | — | 通用审计字段 |
索引设计:
- PRIMARY KEY (id)
- idx_assignee_status (assignee_id, status) — 审批人查自己的待办/已办
- idx_process_instance (process_instance_id) — 按流程实例查关联任务
- idx_source_task (source_task_id) — 加签/转办链路追溯
5.1.3 抄送记录表(bpm_task_copy)
| 字段名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | BIGINT | 是 | 抄送记录ID(主键) |
| process_instance_id | BIGINT | 是 | 关联的流程实例ID |
| task_id | VARCHAR(64) | 否 | 关联的任务ID |
| task_name | VARCHAR(128) | 否 | 抄送来源节点名称 |
| process_definition_id | VARCHAR(64) | 是 | 流程定义ID |
| originator_id | BIGINT | 是 | 流程发起人ID |
| originator_name | VARCHAR(64) | 是 | 流程发起人姓名 |
| copy_user_id | BIGINT | 是 | 被抄送人ID |
| copy_user_name | VARCHAR(64) | 是 | 被抄送人姓名 |
| copy_dept_id | BIGINT | 否 | 被抄送人部门ID |
| operator_id | BIGINT | 否 | 抄送操作人ID(手动抄送时有值) |
| operator_name | VARCHAR(64) | 否 | 抄送操作人姓名 |
| copy_type | TINYINT | 是 | 抄送类型(1-自动抄送 2-手动抄送) |
| copy_reason | VARCHAR(500) | 否 | 抄送说明 |
| read_status | TINYINT | 是 | 已读状态(0-未读 1-已读) |
| read_time | DATETIME | 否 | 已读时间 |
| tenant_id | BIGINT | 是 | 租户ID |
| creator / create_time / updater / update_time / deleted | — | — | 通用审计字段 |
索引设计:
- PRIMARY KEY (id)
- idx_copy_user_read (copy_user_id, read_status) — 用户查自己的抄送按已读筛选
- idx_copy_user_time (copy_user_id, create_time) — 用户按时间排序
- idx_process_instance (process_instance_id) — 按流程实例查抄送记录
5.1.4 审批附件表(bpm_task_attachment)
| 字段名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | BIGINT | 是 | 附件ID(主键) |
| task_id | VARCHAR(64) | 是 | 关联的任务ID |
| file_name | VARCHAR(256) | 是 | 文件名称 |
| file_path | VARCHAR(512) | 是 | 文件存储路径 |
| file_size | BIGINT | 是 | 文件大小(字节) |
| file_type | VARCHAR(64) | 是 | 文件类型(MIME) |
| operator_id | BIGINT | 是 | 上传人ID |
| operator_name | VARCHAR(64) | 是 | 上传人姓名 |
| tenant_id | BIGINT | 是 | 租户ID |
| creator / create_time / updater / update_time / deleted | — | — | 通用审计字段 |
索引设计:
- PRIMARY KEY (id)
- idx_task_id (task_id) — 按任务查附件
5.2 数据字典
| 字典类型 | 字典值 | 说明 |
|---|---|---|
| bpm_process_instance_status | 0-进行中, 1-已完成, 2-已取消, 3-已驳回 | 流程实例状态 |
| bpm_process_instance_result | 0-待审批, 1-通过, 2-驳回, 3-取消 | 流程审批结果 |
| bpm_task_status | 0-待处理, 1-已完成, 2-已取消, 3-已转办, 4-已委派, 5-已退回 | 任务状态 |
| bpm_task_action | approve-通过, reject-驳回, transfer-转办, delegate-委派, return-退回, empty-自动流转 | 审批动作 |
| bpm_task_sign_type | 0-非加签, 1-前加签, 2-后加签 | 加签类型 |
| bpm_copy_type | 1-自动抄送(节点配置), 2-手动抄送(审批人操作) | 抄送类型 |
| bpm_copy_read_status | 0-未读, 1-已读 | 抄送已读状态 |
| bpm_reject_type | 1-驳回到发起人, 2-驳回到上一节点, 3-驳回到指定节点 | 驳回类型 |
5.3 流程实例状态流转图

状态转换条件:
| 起始状态 | 目标状态 | 触发条件 | 操作人 |
|---|---|---|---|
| — | 进行中 | 用户提交申请 | 普通用户 |
| 进行中 | 已完成 | 所有审批节点通过 | 系统自动 |
| 进行中 | 已取消 | 用户撤销 / 管理员终止 | 发起人 / 管理员 |
| 进行中 | 已驳回 | 审批人驳回(驳回类型=驳回到发起人) | 审批人 |
| 已驳回 | 进行中 | 用户修改后重新发起 | 发起人 |
六、跨模块联动
6.1 联动关系总览
| 关联模块 | 联动方式 | 数据流向 | 说明 |
|---|---|---|---|
| 03-01 流程设计 | 消费流程定义 | 03-01 → 本模块 | 流程分类、流程定义、表单结构、审批人配置均来自流程设计 |
| 03-02 流程管理 | 管理端与用户端对应 | 双向 | 管理员在本模块的 counterpart 是 03-02;管理员终止流程 → 本模块状态变为"已取消" |
| 03-04 待办管理 | 管理端任务视图 | 本模块 → 03-04 | 本模块是用户视角待办,03-04 是管理员视角全局任务管理 |
| 通知模块 | 发送各类通知 | 本模块 → 通知模块 | 待办通知、催办通知、驳回通知、撤销通知均通过通知模块发送 |
| 01-01 用户管理 | 获取用户信息 | 01-01 → 本模块 | 审批人选择器、发起人信息、抄送人信息均来自用户管理 |
| 01-02 部门管理 | 获取部门信息 | 01-02 → 本模块 | 发起人部门、审批人部门展示来自部门管理 |
| 01-03 角色管理 | 角色匹配审批人 | 01-03 → 本模块 | 审批人自动匹配时,按角色查找对应审批人 |
| 01-08 日志审计 | 记录操作日志 | 本模块 → 01-08 | 所有审批操作写入操作日志 |
| 文件存储模块 | 附件上传/下载 | 本模块 ↔ 文件存储 | 审批附件上传到文件存储,详情页展示时从文件存储下载 |
6.2 关键联动流程
流程发起 → 审批人匹配 → 通知发送: 
管理员终止流程 → 用户端状态同步: 
6.3 数据一致性要求
| 一致性场景 | 保证方式 |
|---|---|
| 审批操作后流程状态更新 | 同一事务内完成:任务完成 + 流程实例状态更新 + 下一节点任务创建 |
| 撤销后待办任务关闭 | 同一事务内完成:流程实例状态更新 + 所有关联待办任务关闭 |
| 催办频率限制 | Redis 原子操作设置催办时间戳,10 分钟过期 |
| 抄送已读状态 | 乐观锁或 CAS 操作,防止并发标记冲突 |
七、附录
7.1 名词解释
| 术语 | 通俗解释 | 类比 |
|---|---|---|
| 流程实例 | 用户发起的一个具体流程,如"小李的请假申请" | 一个快递包裹(从发出到签收的完整过程) |
| 任务(Task) | 流程走到某个节点时产生的审批工作 | 快递到了某个中转站,需要站长处理 |
| 流程定义 | 管理员设计的流程模板,定义了有哪些节点、怎么流转 | 快递运输路线图 |
| 待办任务 | 当前分配给某个审批人、等待处理的审批任务 | 你桌上等着签字的文件 |
| 已办任务 | 某个审批人已经处理过的审批任务 | 你已经签完字归档的文件 |
| 会签 | 多人审批时需要所有人都通过才能继续 | 委员会投票——全票通过才算通过 |
| 或签 | 多人审批时任一人通过即可继续 | 任意一个领导签字就算通过 |
| 转办 | 把审批任务完全交给别人处理 | "这个事不归我管,你去找XX" |
| 委派 | 临时让别人帮忙审批,审完还得自己确认 | "帮我看看这个文件,看完我还得签字" |
| 前加签 | 在当前审批人之前增加审批人,加签人先审 | "我先问问专家意见再决定" |
| 后加签 | 当前审批人审批后,加签人再审批 | "我同意了,但还需要XX确认" |
| 减签 | 移除因加签产生的额外审批任务 | "不用找XX了,去掉这个环节" |
| 催办 | 向当前审批人发送催促通知 | "领导,那个审批麻烦快点处理" |
| 抄送 | 把流程信息同步给相关人员查阅(只读) | 邮件里的 CC(抄送),让对方知道这件事 |
| 驳回 | 审批人不同意申请,将流程退回 | "不行,打回去重做" |
| 退回 | 将流程退回到之前某个已完成的节点 | "回到上一步补充材料" |
| BPMN | 业务流程建模的标准,定义了流程图的画法 | 流程图的"语法规则" |
| Flowable | 本系统使用的工作流引擎 | 流程运转的"发动机" |
7.2 权限标识
| 权限标识 | 说明 | 所属子模块 |
|---|---|---|
| bpm:process-instance:create | 发起流程 | 流程发起 |
| bpm:process-instance:query | 查询流程列表 | 我的流程 |
| bpm:process-instance:detail | 查看流程详情 | 流程详情 |
| bpm:process-instance:cancel | 撤销流程 | 流程详情 |
| bpm:process-instance:urge | 催办流程 | 流程详情 |
| bpm:task:todo:query | 查看待办任务 | 待我审批 |
| bpm:task:approve | 审批通过 | 待我审批 |
| bpm:task:reject | 审批驳回 | 待我审批 |
| bpm:task:transfer | 转办任务 | 待我审批 |
| bpm:task:delegate | 委派任务 | 待我审批 |
| bpm:task:return | 退回任务 | 待我审批 |
| bpm:task:add-sign | 加签操作 | 待我审批 |
| bpm:task:subtract-sign | 减签操作 | 待我审批 |
| bpm:task:done:query | 查看已办任务 | 我已审批 |
| bpm:task-copy:query | 查看抄送列表 | 抄送给我 |
| bpm:task-copy:read | 标记已读 | 抄送给我 |
7.3 错误码
| 错误码 | 说明 | 处理建议 |
|---|---|---|
| BPM_PROC_001 | 流程定义不存在或已停用 | 刷新页面重新选择流程 |
| BPM_PROC_002 | 无权限发起该流程 | 联系管理员检查权限配置 |
| BPM_PROC_003 | 表单校验不通过 | 检查表单必填项和格式 |
| BPM_INST_001 | 流程实例不存在 | 流程可能已被管理员终止 |
| BPM_INST_002 | 无权限撤销该流程 | 只有发起人才能撤销 |
| BPM_INST_003 | 该流程状态不允许撤销 | 只有"进行中"状态可撤销 |
| BPM_INST_004 | 催办频率超限 | 10 分钟内只能催办一次,请稍后再试 |
| BPM_TASK_001 | 任务不存在或已完成 | 刷新待办列表 |
| BPM_TASK_002 | 无权限审批该任务 | 只有任务分配人才能审批 |
| BPM_TASK_003 | 驳回原因不能为空 | 填写驳回原因 |
| BPM_TASK_004 | 转办目标人不能为空 | 选择转办目标人 |
| BPM_TASK_005 | 减签只能操作加签产生的任务 | 选择加签任务进行减签 |
| BPM_TASK_006 | 加签人员不能与当前审批人重复 | 选择不重复的加签人员 |
| BPM_COPY_001 | 抄送记录不存在 | 刷新抄送列表 |
7.4 接口汇总
| 子模块 | 接口数量 | 前缀 |
|---|---|---|
| 流程发起 | 6 | /app-api/bpm/ |
| 我的流程 | 3 | /app-api/bpm/ |
| 流程详情 | 6 | /app-api/bpm/ |
| 待我审批 | 13 | /app-api/bpm/ |
| 我已审批 | 2 | /app-api/bpm/ |
| 抄送给我 | 5 | /app-api/bpm/ |
| 合计 | 35 | — |
7.5 变更记录
| 版本 | 日期 | 修改内容 | 修改人 |
|---|---|---|---|
| v1.0 | 2026-09-24 | 初始版本 | PM Team |
| v2.0 | 2026-09-19 | 全面增强:补充命名用户场景(7个)、验收标准(10条US)、页面原型(6张ASCII)、审批操作速查表、状态流转图、跨模块联动(9个模块)、名词解释(18条)、错误码(14个) | PM Team |
本文档为我的流程模块 PRD v2.0,面向 Java 后端、Vue 前端、QA 测试、产品运营全团队阅读。如有疑问请联系产品负责人。