返回文章列表
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 组件展示审批详情。


学到的东西


审批流看起来简单,但要做到灵活可配置、支持多种类型并不容易。

数据模型设计是关键——把变化的部分(表单内容)和不变的部分(审批链路)分离。