gaoluyang
2026-11-02 7bd10d34e8a8dc2437ec8551eb511e37634d7306
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
-- =============================================
-- 计划排程(MPS)审核流 + 辅料采购 升级脚本
-- 1) mes_pro_mps 增加:计划开始日期、审核信息、采购申请单关联、审批流程实例编号
-- 2) 字典 mes_pro_mps_status 增加:4-审核中、5-已审核
-- 3) 菜单/按钮:提交审核、生成采购申请单(页面内「审核」按钮已废弃,审批统一在协同办公完成)
-- 4) 审批流程:需部署流程定义 mes-pro-mps-audit(见 docs/sql/mes_pro_mps_audit_20261102.bpmn)
-- 可重复执行,不包含 tenant_id(项目不使用多租户)
-- =============================================
START TRANSACTION;
 
-- =============================================
-- 1. 表结构
-- =============================================
SET @exists = (SELECT COUNT(*) FROM information_schema.columns
               WHERE table_schema = DATABASE() AND table_name = 'mes_pro_mps' AND column_name = 'plan_start_date');
SET @sql = IF(@exists = 0,
              'ALTER TABLE mes_pro_mps ADD COLUMN plan_start_date datetime DEFAULT NULL COMMENT ''计划开始日期'' AFTER request_date',
              'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
 
SET @exists = (SELECT COUNT(*) FROM information_schema.columns
               WHERE table_schema = DATABASE() AND table_name = 'mes_pro_mps' AND column_name = 'audit_user_id');
SET @sql = IF(@exists = 0,
              'ALTER TABLE mes_pro_mps ADD COLUMN audit_user_id bigint DEFAULT NULL COMMENT ''审核人编号'' AFTER remark',
              'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
 
SET @exists = (SELECT COUNT(*) FROM information_schema.columns
               WHERE table_schema = DATABASE() AND table_name = 'mes_pro_mps' AND column_name = 'audit_time');
SET @sql = IF(@exists = 0,
              'ALTER TABLE mes_pro_mps ADD COLUMN audit_time datetime DEFAULT NULL COMMENT ''审核时间'' AFTER audit_user_id',
              'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
 
SET @exists = (SELECT COUNT(*) FROM information_schema.columns
               WHERE table_schema = DATABASE() AND table_name = 'mes_pro_mps' AND column_name = 'audit_remark');
SET @sql = IF(@exists = 0,
              'ALTER TABLE mes_pro_mps ADD COLUMN audit_remark varchar(500) DEFAULT NULL COMMENT ''审核意见(驳回原因)'' AFTER audit_time',
              'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
 
SET @exists = (SELECT COUNT(*) FROM information_schema.columns
               WHERE table_schema = DATABASE() AND table_name = 'mes_pro_mps' AND column_name = 'purchase_request_id');
SET @sql = IF(@exists = 0,
              'ALTER TABLE mes_pro_mps ADD COLUMN purchase_request_id bigint DEFAULT NULL COMMENT ''生成的采购申请单编号'' AFTER audit_remark',
              'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
 
-- 审批流程实例编号:提交审核后进入协同办公审批,审批结果回写本表
SET @exists = (SELECT COUNT(*) FROM information_schema.columns
               WHERE table_schema = DATABASE() AND table_name = 'mes_pro_mps' AND column_name = 'process_instance_id');
SET @sql = IF(@exists = 0,
              'ALTER TABLE mes_pro_mps ADD COLUMN process_instance_id varchar(64) DEFAULT NULL COMMENT ''BPM 流程实例编号'' AFTER purchase_request_id',
              'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
 
-- =============================================
-- 2. 字典数据:MPS 状态增加 审核中(4)、已审核(5)
-- =============================================
INSERT INTO system_dict_data(id, sort, label, value, dict_type, status, color_type, css_class, remark,
                             creator, create_time, updater, update_time, deleted)
SELECT (SELECT IFNULL(MAX(id), 0) + 1 FROM system_dict_data), 4, '审核中', '4', 'mes_pro_mps_status', 0, 'warning', '', '',
       '1', NOW(), '1', NOW(), b'0'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM system_dict_data WHERE dict_type = 'mes_pro_mps_status' AND value = '4' AND deleted = b'0');
 
INSERT INTO system_dict_data(id, sort, label, value, dict_type, status, color_type, css_class, remark,
                             creator, create_time, updater, update_time, deleted)
SELECT (SELECT IFNULL(MAX(id), 0) + 1 FROM system_dict_data), 5, '已审核', '5', 'mes_pro_mps_status', 0, 'success', '', '',
       '1', NOW(), '1', NOW(), b'0'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM system_dict_data WHERE dict_type = 'mes_pro_mps_status' AND value = '5' AND deleted = b'0');
 
-- =============================================
-- 3. 按钮权限:提交审核 / 生成采购申请单
-- =============================================
SET @mps_page = (SELECT id FROM system_menu WHERE deleted = b'0' AND permission = 'mes:pro-mps:query' ORDER BY id LIMIT 1);
 
-- 3.0 清理旧版页面内「审核」按钮(审批已改为在协同办公完成)
DELETE FROM system_role_menu
WHERE menu_id IN (SELECT id FROM (SELECT id FROM system_menu WHERE permission = 'mes:pro-mps:audit' AND deleted = b'0') t);
DELETE FROM system_menu WHERE permission = 'mes:pro-mps:audit' AND deleted = b'0';
 
-- 3.1 提交审核
SET @btn = (SELECT id FROM system_menu WHERE deleted = b'0' AND permission = 'mes:pro-mps:submit' ORDER BY id LIMIT 1);
SET @next = (SELECT IFNULL(MAX(id), 0) + 1 FROM system_menu);
INSERT INTO system_menu(id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted)
SELECT @next, '生产计划-提交审核', 'mes:pro-mps:submit', 3, 20, @mps_page, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'
FROM DUAL WHERE @btn IS NULL AND @mps_page IS NOT NULL;
 
-- 3.2 生成采购申请单
SET @btn = (SELECT id FROM system_menu WHERE deleted = b'0' AND permission = 'mes:pro-mps:generate-purchase' ORDER BY id LIMIT 1);
SET @next = (SELECT IFNULL(MAX(id), 0) + 1 FROM system_menu);
INSERT INTO system_menu(id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted)
SELECT @next, '生产计划-生成采购申请单', 'mes:pro-mps:generate-purchase', 3, 22, @mps_page, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'
FROM DUAL WHERE @btn IS NULL AND @mps_page IS NOT NULL;
 
-- =============================================
-- 4. 协同办公流程分类:生产计划审批(流程定义 mes-pro-mps-audit 部署后归属该分类)
-- =============================================
INSERT INTO bpm_category(name, code, description, status, sort, creator, create_time, updater, update_time, deleted)
SELECT '生产计划审批', 'mes_pro_mps_approve', 'MES 生产计划审批', 0, 72, '1', NOW(), '1', NOW(), b'0'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM bpm_category WHERE code = 'mes_pro_mps_approve' AND deleted = b'0');
 
-- =============================================
-- 5. 协同办公审批详情:绑定生产计划业务详情组件,审批人可查看计划数据
-- =============================================
INSERT INTO bpm_business_attach(process_definition_key, business_type, component_path, status, remark,
                                creator, create_time, updater, update_time, deleted)
SELECT 'mes-pro-mps-audit', 'mes_pro_mps', '/mes/pro/mps/detail/approve/index.vue', 0,
       '生产计划审批展示生产计划详情', '1', NOW(), '1', NOW(), b'0'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM bpm_business_attach
                  WHERE process_definition_key = 'mes-pro-mps-audit' AND deleted = b'0');
 
-- =============================================
-- 6. 授权:超级管理员直接拥有全部菜单,此处仅补普通角色按需授权(示例:生产计划已有查询权限的角色)
-- =============================================
INSERT INTO system_role_menu(role_id, menu_id, creator, create_time, updater, update_time, deleted)
SELECT DISTINCT rm.role_id, m.id, '1', NOW(), '1', NOW(), b'0'
FROM system_role_menu rm
JOIN system_menu m ON m.permission IN ('mes:pro-mps:submit', 'mes:pro-mps:generate-purchase')
    AND m.deleted = b'0'
JOIN system_menu parent ON parent.id = rm.menu_id AND parent.permission = 'mes:pro-mps:query' AND parent.deleted = b'0'
WHERE rm.deleted = b'0'
  AND NOT EXISTS (SELECT 1 FROM system_role_menu rm2
                  WHERE rm2.role_id = rm.role_id AND rm2.menu_id = m.id AND rm2.deleted = b'0');
 
COMMIT;