-- =============================================================================
|
-- 文件:bpm_audit_flow_01_repair_and_category.sql
|
-- 用途:BPM 审核流程「修复 + 分类补齐」段(第 1 个执行)
|
-- 目标库:ruoyi-vue-pro(后端 48080 实际读取的运行库)
|
-- 要求:MySQL 8.0+;建议先备份:mysqldump ruoyi-vue-pro act_re_procdef act_re_model
|
-- act_re_deployment act_ge_bytearray bpm_category bpm_process_definition_info > bpm_bak.sql
|
-- 特性:本文件内所有语句均幂等(可重复执行);判断"已存在/数据不完整"后只做必要修复,
|
-- 不删除任何既有数据,只做状态修正。
|
-- 说明:
|
-- 1) 修复段只做安全修复,不自动删除"测试/垃圾流程"(涉及历史数据判断,需人工)。
|
-- 对明显垃圾流程统一"挂起",避免出现在前端发起列表,且不影响运行中的流程实例。
|
-- 2) 分类补齐:只为代码中已引用、但库里缺失的分类 code 补插(已存在则跳过)。
|
-- =============================================================================
|
|
SET NAMES utf8mb4;
|
|
-- -----------------------------------------------------------------------------
|
-- ① 数据完整性修复
|
-- -----------------------------------------------------------------------------
|
|
-- 1.1 ACT_RE_PROCDEF.ENGINE_VERSION_ 空串会导致 Flowable 提交审批报错
|
-- (Invalid 'engine' for process definition ...),需修正为 NULL。
|
UPDATE ACT_RE_PROCDEF
|
SET ENGINE_VERSION_ = NULL
|
WHERE ENGINE_VERSION_ = '';
|
|
-- 1.2 ACT_RE_MODEL.META_INFO_ 为空会导致流程模型列表/页面反序列化异常。
|
-- 补齐一个最小的合法 JSON(type=10 BPMN 模式,含 sort),保证页面可打开。
|
-- 只补空值行,不影响已有完整配置。
|
UPDATE ACT_RE_MODEL
|
SET META_INFO_ = CONCAT('{"type":10,"sort":', UNIX_TIMESTAMP(NOW(3)) * 1000, ',"formType":10,"visible":true}')
|
WHERE META_INFO_ IS NULL OR META_INFO_ = '';
|
|
-- 1.3 bpm_process_definition_info.model_type 非 10 的 BPMN 流程,创建流程实例会 NPE。
|
-- 仅当该流程确为 BPMN(在 ACT_RE_PROCDEF 存在)且非 SIMPLE(simple_model 为空)时修正为 10。
|
UPDATE bpm_process_definition_info i
|
JOIN ACT_RE_PROCDEF p ON p.ID_ = i.process_definition_id
|
SET i.model_type = 10
|
WHERE i.simple_model IS NULL
|
AND i.model_type <> 10;
|
|
-- 1.4 业务规范流程的多版本治理:同 key 保留最新版本激活(SUSPENSION_STATE_=1),
|
-- 历史版本一律挂起(=2)。只作用于"在用"白名单 key,其余不动。
|
UPDATE ACT_RE_PROCDEF p
|
JOIN (SELECT KEY_, MAX(VERSION_) AS max_ver
|
FROM ACT_RE_PROCDEF
|
WHERE KEY_ IN ('erp-finance-payment-audit','crm-invoice-audit',
|
'crm-receivable-audit','mes-pd-project-audit',
|
'purchase_request_approve')
|
GROUP BY KEY_) t ON t.KEY_ = p.KEY_
|
SET p.SUSPENSION_STATE_ = IF(p.VERSION_ = t.max_ver, 1, 2);
|
|
-- 1.5 明显为"测试/已废弃"的流程统一挂起(=2),避免出现在发起/待办选择列表。
|
-- 仅改状态不删除,可随时人工在界面或 SQL 清理;对运行中实例无影响。
|
UPDATE ACT_RE_PROCDEF
|
SET SUSPENSION_STATE_ = 2
|
WHERE KEY_ IN ('Ada','QWEDD','SSQ','_..123abc','b000_abc.','yz001','yz002',
|
'caigoushenpi','pus','purchase_approve','contract_approve');
|
|
-- 1.6 (可选)查看仍处于激活状态的流程,人工确认是否残留垃圾流程:
|
-- SELECT KEY_, NAME_, VERSION_, SUSPENSION_STATE_ FROM ACT_RE_PROCDEF
|
-- WHERE SUSPENSION_STATE_ = 1 ORDER BY KEY_;
|
|
-- -----------------------------------------------------------------------------
|
-- ② 流程分类(bpm_category)补齐
|
-- 对应各业务单据发起审批时按 code 拉取可发起流程列表;代码中已引用但库中缺失则补。
|
-- 每条均做"已存在则跳过"判断(code + 未删除)。
|
-- -----------------------------------------------------------------------------
|
|
-- 2.1 ERP 采购订单审批
|
INSERT INTO bpm_category (name, code, description, status, sort, creator, create_time, updater, update_time, deleted)
|
SELECT '采购订单审批', 'purchase_order_approve', 'ERP 采购订单审批', 0, 10, '1', NOW(), '1', NOW(), 0
|
WHERE NOT EXISTS (SELECT 1 FROM bpm_category WHERE code = 'purchase_order_approve' AND deleted = 0);
|
|
-- 2.2 ERP 销售订单审批
|
INSERT INTO bpm_category (name, code, description, status, sort, creator, create_time, updater, update_time, deleted)
|
SELECT '销售订单审批', 'sale_order_approve', 'ERP 销售订单审批', 0, 20, '1', NOW(), '1', NOW(), 0
|
WHERE NOT EXISTS (SELECT 1 FROM bpm_category WHERE code = 'sale_order_approve' AND deleted = 0);
|
|
-- 2.3 HRM 请假审批
|
INSERT INTO bpm_category (name, code, description, status, sort, creator, create_time, updater, update_time, deleted)
|
SELECT '请假审批', 'hrm_leave_approve', 'HRM 请假申请审批', 0, 30, '1', NOW(), '1', NOW(), 0
|
WHERE NOT EXISTS (SELECT 1 FROM bpm_category WHERE code = 'hrm_leave_approve' AND deleted = 0);
|
|
-- 2.4 HRM 加班审批
|
INSERT INTO bpm_category (name, code, description, status, sort, creator, create_time, updater, update_time, deleted)
|
SELECT '加班审批', 'overtime_approve', 'HRM 加班申请审批', 0, 40, '1', NOW(), '1', NOW(), 0
|
WHERE NOT EXISTS (SELECT 1 FROM bpm_category WHERE code = 'overtime_approve' AND deleted = 0);
|
|
-- 2.5 HRM 离职审批
|
INSERT INTO bpm_category (name, code, description, status, sort, creator, create_time, updater, update_time, deleted)
|
SELECT '离职审批', 'hrm_resignation_approve', 'HRM 离职申请审批', 0, 50, '1', NOW(), '1', NOW(), 0
|
WHERE NOT EXISTS (SELECT 1 FROM bpm_category WHERE code = 'hrm_resignation_approve' AND deleted = 0);
|
|
-- 2.6 HRM 调动审批
|
INSERT INTO bpm_category (name, code, description, status, sort, creator, create_time, updater, update_time, deleted)
|
SELECT '调动审批', 'hrm_transfer_approve', 'HRM 调动申请审批', 0, 60, '1', NOW(), '1', NOW(), 0
|
WHERE NOT EXISTS (SELECT 1 FROM bpm_category WHERE code = 'hrm_transfer_approve' AND deleted = 0);
|
|
-- 2.7 MES 报工/生产工单审批(代码侧 MES 报工与工单共用分类 mes_pro_feedback_audit)
|
INSERT INTO bpm_category (name, code, description, status, sort, creator, create_time, updater, update_time, deleted)
|
SELECT '报工审批', 'mes_pro_feedback_audit', 'MES 生产报工/工单审批', 0, 70, '1', NOW(), '1', NOW(), 0
|
WHERE NOT EXISTS (SELECT 1 FROM bpm_category WHERE code = 'mes_pro_feedback_audit' AND deleted = 0);
|
|
-- -----------------------------------------------------------------------------
|
-- ③ 修复结果自查(应全部返回 0)
|
-- -----------------------------------------------------------------------------
|
-- SELECT '空串ENGINE_VERSION_残留' AS chk, COUNT(*) FROM ACT_RE_PROCDEF WHERE ENGINE_VERSION_ = ''
|
-- UNION ALL SELECT '空META_INFO_残留' , COUNT(*) FROM ACT_RE_MODEL WHERE META_INFO_ IS NULL OR META_INFO_ = ''
|
-- UNION ALL SELECT '分类待补' , 0;
|