Java审批流实战
自研审批流引擎:从需求到实现
2026-07-10
在OA系统中设计灵活可配置的审批流引擎,支持费用报销、出差、转正等多种流程类型。
审批流引擎设计
OA 系统中的审批流程是最核心的业务模块之一,支持费用报销、出差申请、转正申请、离职申请等多种流程。
数据模型
process_instance # 流程实例
├── id, type, title, status
├── proposer_id, create_time
└── process_records # 审批记录
├── node_name, approver_id
├── opinion, status
└── create_time
process_instance # 流程实例
├── id, type, title, status
├── proposer_id, create_time
└── process_records # 审批记录
├── node_name, approver_id
├── opinion, status
└── create_time
process_instance # 流程实例
├── id, type, title, status
├── proposer_id, create_time
└── process_records # 审批记录
├── node_name, approver_id
├── opinion, status
└── create_time
核心实现
- **多类型支持**:通过 type 字段区分不同流程类型,各类型有独立表单页面
- **审批流转**:提交 → 待审批 → (通过/驳回) → 结束
- **状态管理**:待审批、审批中、已通过、已驳回、已撤销
前端实现
每个流程类型对应一个 Vue 页面(expense.vue、trip.vue、regular.vue 等),
通过统一的 Pending 组件处理待办列表,Detail 组件展示审批详情。
学到的东西
审批流看起来简单,但要做到灵活可配置、支持多种类型并不容易。
数据模型设计是关键——把变化的部分(表单内容)和不变的部分(审批链路)分离。