审批流(BPM)
GopherForge 内置一套自研轻量审批流引擎——不引入 Flowable/BPMN,Go 原生实现"节点树单游标 + 任务展开器",能力对标主流工作流产品,部署零额外依赖。
能力全景
| 维度 | 支持 |
|---|---|
| 节点类型 | 发起 / 审批 / 抄送 / 条件分支(排他,可嵌套) |
| 审批人规则 | 指定用户 / 指定角色 / 部门主管(发起人部门或表单字段指定)/ 发起人自选 |
| 多人模式 | 会签(全部同意)/ 或签(一人同意,全拒才拒)/ 依次(逐个流转) |
| 审批动作 | 同意 / 拒绝 / 转办 / 退回发起人(改表单重提)/ 退回上一节点(按实际流转路径回溯)/ 撤销 |
| 管理动作 | 管理员强制终止(含挂起实例出口)、全部实例管理视图、审批统计 |
| 超时 | 节点级超时小时数 + 到期动作:仅提醒 / 自动通过 / 自动拒绝(系统身份执行,进时间线) |
| 兜底 | 审批人解析为空三策略(自动通过 / 转指定人 / 挂起待管理员);条件求值失败挂起不错批 |
| 版本化 | 定义多版本,发布生效、在途实例冻结旧版不受影响 |
仿钉钉设计器
纵向卡片流配置器(非自由画布):节点间「+」插入审批/抄送/条件分支,条件分支横向分叉多列子链、末列固定默认兜底;条件编辑器按表单字段声明下拉选字段(且/或组合 + 7 种比较符,金额按分求值)。发布时前后端双重整树校验。
两种表单模式
流程表单(零代码):定义里用「表单设计」声明字段(8 种类型,金额分存储元录入),发布后普通用户在「发起申请」页选流程、填表单即发起——请假/报销类流程不写一行代码。发起快照经服务端按 Schema 权威校验(必填/类型/选项/范围,拒绝夹带字段)。
业务表单(深度集成):业务后端经 internal 端点权威发起,终态经 HTTP 回调回写业务状态。
业务表单模式接入
text
1. 发起:POST /api/v1/bpm/internal/instances(X-Internal-Token)
body: { definition_key, title, biz_type, biz_id, form_snapshot, initiator_id }
2. 回调:注册环境变量 BPM_CALLBACK_<BIZTYPE>=<你的回调 URL>
终态时收到 { instance_id, biz_type, biz_id, result: approved|rejected|canceled, ... }
按 (biz_type, biz_id, instance_id) 幂等处理;三次重试后失败仅告警不回滚审批事实
3. 反查:GET /api/v1/bpm/internal/instances/by-biz?biz_type=&biz_id=同一业务对象同时至多一条在途实例由数据库部分唯一索引兜底防重。安全约定:用户侧发起端点只接受流程表单定义(biz 锚点服务端生成),业务审批无法被伪造。
字段权限
审批节点可将表单字段设为「对此节点隐藏」(如薪酬字段对普通审批人不可见)——任务详情、实例详情、流转图三个口径都在服务端过滤,前端无法绕过。
审批统计
平台管理员在流程定义页可打开「审批统计」:状态分布、近 30 天发起趋势、按流程的通过率与平均耗时、节点瓶颈 Top10(平均处理时长)——哪个环节在拖流程一眼可见。
通知与站内信
新待办、抄送、超时提醒、终态结果均对接通知模板(脚手架默认无通知服务时静默跳过,配置 NOTIFY_API_BASE + token 即启用)。