refactor(approval): 采购计划/采购订单审批由 BPM 改为轻量级状态机
背景:原提交审批依赖 Flowable 流程定义,但本部署 ACT_RE_PROCDEF 为空表、
bpm_process_definition_info 为手工写入的无效数据,getProcessDefinition(id)
抛 FlowableObjectNotFoundException,前端表现为 500 系统异常;另采购订单误用
采购申请的分类编码 purchase_request_approve,两者流程互相串用。
- system 新增通用审批配置:主表 + 审批人子表、CRUD、跨模块 ApprovalConfigApi,
支持按业务类型配置多个审批人(或签),并校验启用状态与审批人有效性
- erp 采购计划、采购订单改为单级状态机:提交 -> 审批中 -> 审核通过 / 审核不通过,
驳回后须修改再重新提交;审核人写入 reviewer_* 冗余字段
- 采购订单独立 ErpPurchaseOrderStatusEnum,避开 ErpAuditStatus.CANCEL(30) 取值冲突,
APPROVE 仍为 20 以兼容既有已审核才可入库/退货等判断
- 采购订单提交不再要求选择流程定义,删除 approve-process-list 接口;
BPM 回调相关代码标注废弃但保留
- 服务端强校验:仅配置内审批人可审核,审核不通过必填原因;
update-status 通过分支同样校验审批人身份,避免绕过审核按钮自助通过
- Mapper 用 LambdaUpdateWrapper 显式置空审核字段,规避 updateById 忽略 null 导致驳回原因残留
测试:scripts/test-approval-api.js、scripts/test-approval.js
数据库变更见 sql/mysql/approval_flow_full_migration.sql(*.sql 被 .gitignore 忽略,需手动执行)
Co-Authored-By: Claude <noreply@anthropic.com>