liu
9 天以前 06c312e584b99df613728d5ea8b32df4e156f3cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
-- =============================================================================
-- 文件: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;