gaoluyang
5 天以前 3e8b8d3cb363b2a23e90e7f03e36472bfd27d696
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
-- =============================================================================
-- 诚发五金(CFWJ)MES 编码规则 + 条码配置补全脚本
-- 日期:2026-11-03
-- 目标库:本地 CFWJ(127.0.0.1:3306)。请勿在生产库执行。
--
-- 背景:
--   1) 前端 MesAutoCodeRuleCode 里引用了 9 个规则 code,但 mes_md_auto_code_rule 里没有,
--      这些页面的「生成」按钮必报「编码规则不存在」。
--   2) mes_wm_barcode_config 为空,autoGenerateBarcode 直接 return,
--      工具/设备/仓库等页面的条码页签永远显示「未找到对应条码数据」,
--      条码清单页手工新增也因「条码配置不存在」失败。
--   3) 条码配置(5906)/条码清单(5911)两个页面菜单在 CFWJ 里缺失,
--      菜单树只剩孤立的查询按钮 5907/5912。
--
-- 脚本幂等:全部 INSERT ... SELECT ... WHERE NOT EXISTS,可重复执行。
-- =============================================================================
 
-- -----------------------------------------------------------------------------
-- 一、编号生成规则:补 9 条规则 + 规则组成
--    组成口径沿用库内既有规则:
--      有日期段:固定字符 + yyyyMMdd + 3 位流水(按天循环)
--      无日期段:固定字符 + 3 位流水(不循环,避免每天清零撞已存在的编码)
-- -----------------------------------------------------------------------------
 
-- 1.1 规则主表
INSERT INTO mes_md_auto_code_rule
    (code, name, description, max_length, padded, padded_char, padded_method, status, creator)
SELECT 'DV_CHECK_PLAN_CODE', '点检保养方案编码', '点检保养方案自动编码', 6, b'1', '0', 1, 0, '1'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM mes_md_auto_code_rule WHERE code = 'DV_CHECK_PLAN_CODE' AND deleted = b'0');
 
INSERT INTO mes_md_auto_code_rule
    (code, name, description, max_length, padded, padded_char, padded_method, status, creator)
SELECT 'PD_PROJECT_CODE', '产品设计项目编码', '产品设计项目自动编码', 15, b'1', '0', 1, 0, '1'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM mes_md_auto_code_rule WHERE code = 'PD_PROJECT_CODE' AND deleted = b'0');
 
INSERT INTO mes_md_auto_code_rule
    (code, name, description, max_length, padded, padded_char, padded_method, status, creator)
SELECT 'PD_TASK_CODE', '产品设计任务编码', '产品设计任务自动编码', 15, b'1', '0', 1, 0, '1'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM mes_md_auto_code_rule WHERE code = 'PD_TASK_CODE' AND deleted = b'0');
 
INSERT INTO mes_md_auto_code_rule
    (code, name, description, max_length, padded, padded_char, padded_method, status, creator)
SELECT 'PD_VERSION_CODE', '产品设计版本编码', '产品设计版本自动编码', 14, b'1', '0', 1, 0, '1'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM mes_md_auto_code_rule WHERE code = 'PD_VERSION_CODE' AND deleted = b'0');
 
INSERT INTO mes_md_auto_code_rule
    (code, name, description, max_length, padded, padded_char, padded_method, status, creator)
SELECT 'PRO_CARD_CODE', '流转卡编码', '生产流转卡自动编码', 14, b'1', '0', 1, 0, '1'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM mes_md_auto_code_rule WHERE code = 'PRO_CARD_CODE' AND deleted = b'0');
 
INSERT INTO mes_md_auto_code_rule
    (code, name, description, max_length, padded, padded_char, padded_method, status, creator)
SELECT 'PRO_PROCESS_CODE', '工序编码', '生产工序自动编码', 6, b'1', '0', 1, 0, '1'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM mes_md_auto_code_rule WHERE code = 'PRO_PROCESS_CODE' AND deleted = b'0');
 
INSERT INTO mes_md_auto_code_rule
    (code, name, description, max_length, padded, padded_char, padded_method, status, creator)
SELECT 'QC_IQC_VENDOR_BATCH_CODE', '来料检验供应商批次编码', '来料检验单供应商批次号自动编码', 17, b'1', '0', 1, 0, '1'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM mes_md_auto_code_rule WHERE code = 'QC_IQC_VENDOR_BATCH_CODE' AND deleted = b'0');
 
INSERT INTO mes_md_auto_code_rule
    (code, name, description, max_length, padded, padded_char, padded_method, status, creator)
SELECT 'TM_TOOL_CODE', '工具编码', '工装工具自动编码', 6, b'1', '0', 1, 0, '1'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM mes_md_auto_code_rule WHERE code = 'TM_TOOL_CODE' AND deleted = b'0');
 
INSERT INTO mes_md_auto_code_rule
    (code, name, description, max_length, padded, padded_char, padded_method, status, creator)
SELECT 'PRODUCTRECPT_CODE', '产品入库单编码', '产品入库单自动编码', 14, b'1', '0', 1, 0, '1'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM mes_md_auto_code_rule WHERE code = 'PRODUCTRECPT_CODE' AND deleted = b'0');
 
-- 1.1.1 修正最大长度(脚本可重复执行:早期版本 PD_TASK_CODE 误设为 14,会把流水号末位截掉)
UPDATE mes_md_auto_code_rule
SET max_length = 15
WHERE code = 'PD_TASK_CODE' AND deleted = b'0' AND max_length <> 15;
 
-- 1.2 规则组成(sort=1 固定字符 / sort=2 日期 / sort=3 流水号)
--     分段类型 type:1 输入字符 2 当前日期 3 固定字符 4 流水号
--     循环方式 cycle_method:3 按天;padded_method:1 左补齐
 
-- DV_CHECK_PLAN_CODE:CP_ + 3 位流水(不循环)
INSERT INTO mes_md_auto_code_part
    (rule_id, sort, type, length, fix_character, cycle_flag, creator)
SELECT r.id, 1, 3, 3, 'CP_', b'0', '1'
FROM mes_md_auto_code_rule r
WHERE r.code = 'DV_CHECK_PLAN_CODE' AND r.deleted = b'0'
  AND NOT EXISTS (SELECT 1 FROM mes_md_auto_code_part p WHERE p.rule_id = r.id AND p.sort = 1 AND p.deleted = b'0');
 
INSERT INTO mes_md_auto_code_part
    (rule_id, sort, type, length, serial_start_no, serial_step, cycle_flag, creator)
SELECT r.id, 2, 4, 3, 1, 1, b'0', '1'
FROM mes_md_auto_code_rule r
WHERE r.code = 'DV_CHECK_PLAN_CODE' AND r.deleted = b'0'
  AND NOT EXISTS (SELECT 1 FROM mes_md_auto_code_part p WHERE p.rule_id = r.id AND p.sort = 2 AND p.deleted = b'0');
 
-- PD_PROJECT_CODE:PDP_ + yyyyMMdd + 3 位流水
INSERT INTO mes_md_auto_code_part
    (rule_id, sort, type, length, fix_character, cycle_flag, creator)
SELECT r.id, 1, 3, 4, 'PDP_', b'0', '1'
FROM mes_md_auto_code_rule r
WHERE r.code = 'PD_PROJECT_CODE' AND r.deleted = b'0'
  AND NOT EXISTS (SELECT 1 FROM mes_md_auto_code_part p WHERE p.rule_id = r.id AND p.sort = 1 AND p.deleted = b'0');
 
INSERT INTO mes_md_auto_code_part
    (rule_id, sort, type, length, date_format, cycle_flag, creator)
SELECT r.id, 2, 2, 8, 'yyyyMMdd', b'0', '1'
FROM mes_md_auto_code_rule r
WHERE r.code = 'PD_PROJECT_CODE' AND r.deleted = b'0'
  AND NOT EXISTS (SELECT 1 FROM mes_md_auto_code_part p WHERE p.rule_id = r.id AND p.sort = 2 AND p.deleted = b'0');
 
INSERT INTO mes_md_auto_code_part
    (rule_id, sort, type, length, serial_start_no, serial_step, cycle_flag, cycle_method, creator)
SELECT r.id, 3, 4, 3, 1, 1, b'1', 3, '1'
FROM mes_md_auto_code_rule r
WHERE r.code = 'PD_PROJECT_CODE' AND r.deleted = b'0'
  AND NOT EXISTS (SELECT 1 FROM mes_md_auto_code_part p WHERE p.rule_id = r.id AND p.sort = 3 AND p.deleted = b'0');
 
-- PD_TASK_CODE:PTK_ + yyyyMMdd + 3 位流水
INSERT INTO mes_md_auto_code_part
    (rule_id, sort, type, length, fix_character, cycle_flag, creator)
SELECT r.id, 1, 3, 4, 'PTK_', b'0', '1'
FROM mes_md_auto_code_rule r
WHERE r.code = 'PD_TASK_CODE' AND r.deleted = b'0'
  AND NOT EXISTS (SELECT 1 FROM mes_md_auto_code_part p WHERE p.rule_id = r.id AND p.sort = 1 AND p.deleted = b'0');
 
INSERT INTO mes_md_auto_code_part
    (rule_id, sort, type, length, date_format, cycle_flag, creator)
SELECT r.id, 2, 2, 8, 'yyyyMMdd', b'0', '1'
FROM mes_md_auto_code_rule r
WHERE r.code = 'PD_TASK_CODE' AND r.deleted = b'0'
  AND NOT EXISTS (SELECT 1 FROM mes_md_auto_code_part p WHERE p.rule_id = r.id AND p.sort = 2 AND p.deleted = b'0');
 
INSERT INTO mes_md_auto_code_part
    (rule_id, sort, type, length, serial_start_no, serial_step, cycle_flag, cycle_method, creator)
SELECT r.id, 3, 4, 3, 1, 1, b'1', 3, '1'
FROM mes_md_auto_code_rule r
WHERE r.code = 'PD_TASK_CODE' AND r.deleted = b'0'
  AND NOT EXISTS (SELECT 1 FROM mes_md_auto_code_part p WHERE p.rule_id = r.id AND p.sort = 3 AND p.deleted = b'0');
 
-- PD_VERSION_CODE:PV_ + yyyyMMdd + 3 位流水
INSERT INTO mes_md_auto_code_part
    (rule_id, sort, type, length, fix_character, cycle_flag, creator)
SELECT r.id, 1, 3, 3, 'PV_', b'0', '1'
FROM mes_md_auto_code_rule r
WHERE r.code = 'PD_VERSION_CODE' AND r.deleted = b'0'
  AND NOT EXISTS (SELECT 1 FROM mes_md_auto_code_part p WHERE p.rule_id = r.id AND p.sort = 1 AND p.deleted = b'0');
 
INSERT INTO mes_md_auto_code_part
    (rule_id, sort, type, length, date_format, cycle_flag, creator)
SELECT r.id, 2, 2, 8, 'yyyyMMdd', b'0', '1'
FROM mes_md_auto_code_rule r
WHERE r.code = 'PD_VERSION_CODE' AND r.deleted = b'0'
  AND NOT EXISTS (SELECT 1 FROM mes_md_auto_code_part p WHERE p.rule_id = r.id AND p.sort = 2 AND p.deleted = b'0');
 
INSERT INTO mes_md_auto_code_part
    (rule_id, sort, type, length, serial_start_no, serial_step, cycle_flag, cycle_method, creator)
SELECT r.id, 3, 4, 3, 1, 1, b'1', 3, '1'
FROM mes_md_auto_code_rule r
WHERE r.code = 'PD_VERSION_CODE' AND r.deleted = b'0'
  AND NOT EXISTS (SELECT 1 FROM mes_md_auto_code_part p WHERE p.rule_id = r.id AND p.sort = 3 AND p.deleted = b'0');
 
-- PRO_CARD_CODE:PC_ + yyyyMMdd + 3 位流水
INSERT INTO mes_md_auto_code_part
    (rule_id, sort, type, length, fix_character, cycle_flag, creator)
SELECT r.id, 1, 3, 3, 'PC_', b'0', '1'
FROM mes_md_auto_code_rule r
WHERE r.code = 'PRO_CARD_CODE' AND r.deleted = b'0'
  AND NOT EXISTS (SELECT 1 FROM mes_md_auto_code_part p WHERE p.rule_id = r.id AND p.sort = 1 AND p.deleted = b'0');
 
INSERT INTO mes_md_auto_code_part
    (rule_id, sort, type, length, date_format, cycle_flag, creator)
SELECT r.id, 2, 2, 8, 'yyyyMMdd', b'0', '1'
FROM mes_md_auto_code_rule r
WHERE r.code = 'PRO_CARD_CODE' AND r.deleted = b'0'
  AND NOT EXISTS (SELECT 1 FROM mes_md_auto_code_part p WHERE p.rule_id = r.id AND p.sort = 2 AND p.deleted = b'0');
 
INSERT INTO mes_md_auto_code_part
    (rule_id, sort, type, length, serial_start_no, serial_step, cycle_flag, cycle_method, creator)
SELECT r.id, 3, 4, 3, 1, 1, b'1', 3, '1'
FROM mes_md_auto_code_rule r
WHERE r.code = 'PRO_CARD_CODE' AND r.deleted = b'0'
  AND NOT EXISTS (SELECT 1 FROM mes_md_auto_code_part p WHERE p.rule_id = r.id AND p.sort = 3 AND p.deleted = b'0');
 
-- PRO_PROCESS_CODE:OP_ + 3 位流水(不循环)
INSERT INTO mes_md_auto_code_part
    (rule_id, sort, type, length, fix_character, cycle_flag, creator)
SELECT r.id, 1, 3, 3, 'OP_', b'0', '1'
FROM mes_md_auto_code_rule r
WHERE r.code = 'PRO_PROCESS_CODE' AND r.deleted = b'0'
  AND NOT EXISTS (SELECT 1 FROM mes_md_auto_code_part p WHERE p.rule_id = r.id AND p.sort = 1 AND p.deleted = b'0');
 
INSERT INTO mes_md_auto_code_part
    (rule_id, sort, type, length, serial_start_no, serial_step, cycle_flag, creator)
SELECT r.id, 2, 4, 3, 1, 1, b'0', '1'
FROM mes_md_auto_code_rule r
WHERE r.code = 'PRO_PROCESS_CODE' AND r.deleted = b'0'
  AND NOT EXISTS (SELECT 1 FROM mes_md_auto_code_part p WHERE p.rule_id = r.id AND p.sort = 2 AND p.deleted = b'0');
 
-- QC_IQC_VENDOR_BATCH_CODE:IQCVB_ + yyyyMMdd + 3 位流水
INSERT INTO mes_md_auto_code_part
    (rule_id, sort, type, length, fix_character, cycle_flag, creator)
SELECT r.id, 1, 3, 6, 'IQCVB_', b'0', '1'
FROM mes_md_auto_code_rule r
WHERE r.code = 'QC_IQC_VENDOR_BATCH_CODE' AND r.deleted = b'0'
  AND NOT EXISTS (SELECT 1 FROM mes_md_auto_code_part p WHERE p.rule_id = r.id AND p.sort = 1 AND p.deleted = b'0');
 
INSERT INTO mes_md_auto_code_part
    (rule_id, sort, type, length, date_format, cycle_flag, creator)
SELECT r.id, 2, 2, 8, 'yyyyMMdd', b'0', '1'
FROM mes_md_auto_code_rule r
WHERE r.code = 'QC_IQC_VENDOR_BATCH_CODE' AND r.deleted = b'0'
  AND NOT EXISTS (SELECT 1 FROM mes_md_auto_code_part p WHERE p.rule_id = r.id AND p.sort = 2 AND p.deleted = b'0');
 
INSERT INTO mes_md_auto_code_part
    (rule_id, sort, type, length, serial_start_no, serial_step, cycle_flag, cycle_method, creator)
SELECT r.id, 3, 4, 3, 1, 1, b'1', 3, '1'
FROM mes_md_auto_code_rule r
WHERE r.code = 'QC_IQC_VENDOR_BATCH_CODE' AND r.deleted = b'0'
  AND NOT EXISTS (SELECT 1 FROM mes_md_auto_code_part p WHERE p.rule_id = r.id AND p.sort = 3 AND p.deleted = b'0');
 
-- TM_TOOL_CODE:TM_ + 3 位流水(不循环)
INSERT INTO mes_md_auto_code_part
    (rule_id, sort, type, length, fix_character, cycle_flag, creator)
SELECT r.id, 1, 3, 3, 'TM_', b'0', '1'
FROM mes_md_auto_code_rule r
WHERE r.code = 'TM_TOOL_CODE' AND r.deleted = b'0'
  AND NOT EXISTS (SELECT 1 FROM mes_md_auto_code_part p WHERE p.rule_id = r.id AND p.sort = 1 AND p.deleted = b'0');
 
INSERT INTO mes_md_auto_code_part
    (rule_id, sort, type, length, serial_start_no, serial_step, cycle_flag, creator)
SELECT r.id, 2, 4, 3, 1, 1, b'0', '1'
FROM mes_md_auto_code_rule r
WHERE r.code = 'TM_TOOL_CODE' AND r.deleted = b'0'
  AND NOT EXISTS (SELECT 1 FROM mes_md_auto_code_part p WHERE p.rule_id = r.id AND p.sort = 2 AND p.deleted = b'0');
 
-- PRODUCTRECPT_CODE:PR_ + yyyyMMdd + 3 位流水
INSERT INTO mes_md_auto_code_part
    (rule_id, sort, type, length, fix_character, cycle_flag, creator)
SELECT r.id, 1, 3, 3, 'PR_', b'0', '1'
FROM mes_md_auto_code_rule r
WHERE r.code = 'PRODUCTRECPT_CODE' AND r.deleted = b'0'
  AND NOT EXISTS (SELECT 1 FROM mes_md_auto_code_part p WHERE p.rule_id = r.id AND p.sort = 1 AND p.deleted = b'0');
 
INSERT INTO mes_md_auto_code_part
    (rule_id, sort, type, length, date_format, cycle_flag, creator)
SELECT r.id, 2, 2, 8, 'yyyyMMdd', b'0', '1'
FROM mes_md_auto_code_rule r
WHERE r.code = 'PRODUCTRECPT_CODE' AND r.deleted = b'0'
  AND NOT EXISTS (SELECT 1 FROM mes_md_auto_code_part p WHERE p.rule_id = r.id AND p.sort = 2 AND p.deleted = b'0');
 
INSERT INTO mes_md_auto_code_part
    (rule_id, sort, type, length, serial_start_no, serial_step, cycle_flag, cycle_method, creator)
SELECT r.id, 3, 4, 3, 1, 1, b'1', 3, '1'
FROM mes_md_auto_code_rule r
WHERE r.code = 'PRODUCTRECPT_CODE' AND r.deleted = b'0'
  AND NOT EXISTS (SELECT 1 FROM mes_md_auto_code_part p WHERE p.rule_id = r.id AND p.sort = 3 AND p.deleted = b'0');
 
 
-- -----------------------------------------------------------------------------
-- 二、条码配置:18 个业务类型全覆盖
--     条码格式 format:1 二维码;状态 status:0 启用;auto_generate_flag:1 自动生成
--     内容格式只支持 {BUSINESSCODE} 占位符(后端仅替换这一个)
-- -----------------------------------------------------------------------------
 
INSERT INTO mes_wm_barcode_config
    (format, biz_type, content_format, content_example, auto_generate_flag, status, remark, creator)
SELECT 1, 102, 'WH-{BUSINESSCODE}', 'WH-WH_001', b'1', 0, '仓库条码:内容 = WH- + 仓库编码', '1'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM mes_wm_barcode_config WHERE biz_type = 102 AND deleted = b'0');
 
INSERT INTO mes_wm_barcode_config
    (format, biz_type, content_format, content_example, auto_generate_flag, status, remark, creator)
SELECT 1, 103, 'LC-{BUSINESSCODE}', 'LC-LC_001', b'1', 0, '库区条码:内容 = LC- + 库区编码', '1'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM mes_wm_barcode_config WHERE biz_type = 103 AND deleted = b'0');
 
INSERT INTO mes_wm_barcode_config
    (format, biz_type, content_format, content_example, auto_generate_flag, status, remark, creator)
SELECT 1, 104, 'AR-{BUSINESSCODE}', 'AR-AR_001', b'1', 0, '库位条码:内容 = AR- + 库位编码', '1'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM mes_wm_barcode_config WHERE biz_type = 104 AND deleted = b'0');
 
INSERT INTO mes_wm_barcode_config
    (format, biz_type, content_format, content_example, auto_generate_flag, status, remark, creator)
SELECT 1, 105, 'PK-{BUSINESSCODE}', 'PK-PK_20261103001', b'1', 0, '装箱单条码:内容 = PK- + 装箱单编码', '1'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM mes_wm_barcode_config WHERE biz_type = 105 AND deleted = b'0');
 
INSERT INTO mes_wm_barcode_config
    (format, biz_type, content_format, content_example, auto_generate_flag, status, remark, creator)
SELECT 1, 106, 'ST-{BUSINESSCODE}', 'ST-ST_001', b'1', 0, '库存条码:内容 = ST- + 库存编码', '1'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM mes_wm_barcode_config WHERE biz_type = 106 AND deleted = b'0');
 
INSERT INTO mes_wm_barcode_config
    (format, biz_type, content_format, content_example, auto_generate_flag, status, remark, creator)
SELECT 1, 107, 'BT-{BUSINESSCODE}', 'BT-BT_20261103001', b'1', 0, '批次条码:内容 = BT- + 批次编码', '1'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM mes_wm_barcode_config WHERE biz_type = 107 AND deleted = b'0');
 
INSERT INTO mes_wm_barcode_config
    (format, biz_type, content_format, content_example, auto_generate_flag, status, remark, creator)
SELECT 1, 109, 'SN-{BUSINESSCODE}', 'SN-SN_202611030001', b'1', 0, 'SN 条码:内容 = SN- + SN 码', '1'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM mes_wm_barcode_config WHERE biz_type = 109 AND deleted = b'0');
 
INSERT INTO mes_wm_barcode_config
    (format, biz_type, content_format, content_example, auto_generate_flag, status, remark, creator)
SELECT 1, 300, 'PC-{BUSINESSCODE}', 'PC-PC_20261103001', b'1', 0, '流转卡条码:内容 = PC- + 流转卡编码', '1'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM mes_wm_barcode_config WHERE biz_type = 300 AND deleted = b'0');
 
INSERT INTO mes_wm_barcode_config
    (format, biz_type, content_format, content_example, auto_generate_flag, status, remark, creator)
SELECT 1, 301, 'WO-{BUSINESSCODE}', 'WO-WO_20261103001', b'1', 0, '工单条码:内容 = WO- + 工单编码', '1'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM mes_wm_barcode_config WHERE biz_type = 301 AND deleted = b'0');
 
INSERT INTO mes_wm_barcode_config
    (format, biz_type, content_format, content_example, auto_generate_flag, status, remark, creator)
SELECT 1, 302, 'TF-{BUSINESSCODE}', 'TF-TF_20261103001', b'1', 0, '流转单条码:内容 = TF- + 流转单编码', '1'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM mes_wm_barcode_config WHERE biz_type = 302 AND deleted = b'0');
 
INSERT INTO mes_wm_barcode_config
    (format, biz_type, content_format, content_example, auto_generate_flag, status, remark, creator)
SELECT 1, 400, 'EQ-{BUSINESSCODE}', 'EQ-MC_20261103001', b'1', 0, '设备条码:内容 = EQ- + 设备编码', '1'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM mes_wm_barcode_config WHERE biz_type = 400 AND deleted = b'0');
 
INSERT INTO mes_wm_barcode_config
    (format, biz_type, content_format, content_example, auto_generate_flag, status, remark, creator)
SELECT 1, 500, 'TM-{BUSINESSCODE}', 'TM-TM_001', b'1', 0, '工具条码:内容 = TM- + 工具编码', '1'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM mes_wm_barcode_config WHERE biz_type = 500 AND deleted = b'0');
 
INSERT INTO mes_wm_barcode_config
    (format, biz_type, content_format, content_example, auto_generate_flag, status, remark, creator)
SELECT 1, 600, 'MAT-{BUSINESSCODE}', 'MAT-ITEM_20261103001', b'1', 0, '物料条码:内容 = MAT- + 物料编码', '1'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM mes_wm_barcode_config WHERE biz_type = 600 AND deleted = b'0');
 
INSERT INTO mes_wm_barcode_config
    (format, biz_type, content_format, content_example, auto_generate_flag, status, remark, creator)
SELECT 1, 601, 'VND-{BUSINESSCODE}', 'VND-VND_20261103001', b'1', 0, '供应商条码:内容 = VND- + 供应商编码', '1'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM mes_wm_barcode_config WHERE biz_type = 601 AND deleted = b'0');
 
INSERT INTO mes_wm_barcode_config
    (format, biz_type, content_format, content_example, auto_generate_flag, status, remark, creator)
SELECT 1, 602, 'WS-{BUSINESSCODE}', 'WS-WS_001', b'1', 0, '工作站条码:内容 = WS- + 工作站编码', '1'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM mes_wm_barcode_config WHERE biz_type = 602 AND deleted = b'0');
 
INSERT INTO mes_wm_barcode_config
    (format, biz_type, content_format, content_example, auto_generate_flag, status, remark, creator)
SELECT 1, 603, 'WP-{BUSINESSCODE}', 'WP-WP_001', b'1', 0, '车间条码:内容 = WP- + 车间编码', '1'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM mes_wm_barcode_config WHERE biz_type = 603 AND deleted = b'0');
 
INSERT INTO mes_wm_barcode_config
    (format, biz_type, content_format, content_example, auto_generate_flag, status, remark, creator)
SELECT 1, 604, 'USR-{BUSINESSCODE}', 'USR-EMP001', b'1', 0, '人员条码:内容 = USR- + 员工工号', '1'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM mes_wm_barcode_config WHERE biz_type = 604 AND deleted = b'0');
 
INSERT INTO mes_wm_barcode_config
    (format, biz_type, content_format, content_example, auto_generate_flag, status, remark, creator)
SELECT 1, 605, 'CLT-{BUSINESSCODE}', 'CLT-CLT_20261103001', b'1', 0, '客户条码:内容 = CLT- + 客户编码', '1'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM mes_wm_barcode_config WHERE biz_type = 605 AND deleted = b'0');
 
 
-- -----------------------------------------------------------------------------
-- 三、菜单:补「条码配置」「条码清单」两个页面及其按钮(挂到 仓库管理 1075579)
--     5907/5912 两个查询按钮已存在但父级缺失,本段补齐父级 5906/5911。
-- -----------------------------------------------------------------------------
 
INSERT INTO system_menu
    (id, name, permission, type, sort, parent_id, path, icon, component, component_name,
     status, visible, keep_alive, always_show, creator)
SELECT 5906, '条码配置', '', 2, 8, 1075579, 'barcode/config', 'fa:barcode', 'wls/barcode/config/index',
       'MesWmBarcodeConfig', 0, b'1', b'1', b'1', '1'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM system_menu WHERE id = 5906);
 
INSERT INTO system_menu
    (id, name, permission, type, sort, parent_id, path, icon, component, component_name,
     status, visible, keep_alive, always_show, creator)
SELECT 5911, '条码清单', '', 2, 9, 1075579, 'barcode', 'fa:qrcode', 'wls/barcode/index',
       'MesWmBarcode', 0, b'1', b'1', b'1', '1'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM system_menu WHERE id = 5911);
 
INSERT INTO system_menu (id, name, permission, type, sort, parent_id, status, creator)
SELECT 5908, '条码配置创建', 'mes:wm-barcode-config:create', 3, 2, 5906, 0, '1'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM system_menu WHERE id = 5908);
 
INSERT INTO system_menu (id, name, permission, type, sort, parent_id, status, creator)
SELECT 5909, '条码配置更新', 'mes:wm-barcode-config:update', 3, 3, 5906, 0, '1'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM system_menu WHERE id = 5909);
 
INSERT INTO system_menu (id, name, permission, type, sort, parent_id, status, creator)
SELECT 5910, '条码配置删除', 'mes:wm-barcode-config:delete', 3, 4, 5906, 0, '1'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM system_menu WHERE id = 5910);
 
INSERT INTO system_menu (id, name, permission, type, sort, parent_id, status, creator)
SELECT 5913, '条码清单创建', 'mes:wm-barcode:create', 3, 2, 5911, 0, '1'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM system_menu WHERE id = 5913);
 
INSERT INTO system_menu (id, name, permission, type, sort, parent_id, status, creator)
SELECT 5914, '条码清单更新', 'mes:wm-barcode:update', 3, 3, 5911, 0, '1'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM system_menu WHERE id = 5914);
 
INSERT INTO system_menu (id, name, permission, type, sort, parent_id, status, creator)
SELECT 5915, '条码清单删除', 'mes:wm-barcode:delete', 3, 4, 5911, 0, '1'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM system_menu WHERE id = 5915);
 
INSERT INTO system_menu (id, name, permission, type, sort, parent_id, status, creator)
SELECT 5916, '条码清单导出', 'mes:wm-barcode:export', 3, 5, 5911, 0, '1'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM system_menu WHERE id = 5916);
 
-- 角色授权:所有有效业务角色可查看;生产管理员(166)/经理(168) 可维护。
-- 菜单:5906 条码配置 / 5907 查询 / 5911 条码清单 / 5912 查询
INSERT INTO system_role_menu (role_id, menu_id, creator)
SELECT r.id, m.id, '1'
FROM system_role r
JOIN system_menu m ON m.id IN (5906, 5907, 5911, 5912)
WHERE r.id IN (163, 164, 165, 166, 167, 168) AND r.deleted = b'0'
  AND NOT EXISTS (SELECT 1 FROM system_role_menu rm
                  WHERE rm.role_id = r.id AND rm.menu_id = m.id AND rm.deleted = b'0');
 
-- 菜单:5908/5909/5910 配置增改删;5913/5914/5915/5916 清单增改删导出
INSERT INTO system_role_menu (role_id, menu_id, creator)
SELECT r.id, m.id, '1'
FROM system_role r
JOIN system_menu m ON m.id IN (5908, 5909, 5910, 5913, 5914, 5915, 5916)
WHERE r.id IN (166, 168) AND r.deleted = b'0'
  AND NOT EXISTS (SELECT 1 FROM system_role_menu rm
                  WHERE rm.role_id = r.id AND rm.menu_id = m.id AND rm.deleted = b'0');
 
-- =============================================================================
-- 校验(执行后可手工核对,不属于变更内容)
--   SELECT code,name FROM mes_md_auto_code_rule WHERE code IN ('DV_CHECK_PLAN_CODE','PD_PROJECT_CODE',
--     'PD_TASK_CODE','PD_VERSION_CODE','PRO_CARD_CODE','PRO_PROCESS_CODE','QC_IQC_VENDOR_BATCH_CODE',
--     'TM_TOOL_CODE','PRODUCTRECPT_CODE');   -- 期望 9 条
--   SELECT r.code, COUNT(p.id) FROM mes_md_auto_code_rule r JOIN mes_md_auto_code_part p ON p.rule_id = r.id
--     WHERE r.code = 'PRO_PROCESS_CODE' GROUP BY r.code;  -- 期望 2 段,其余 2 段或 3 段
--   SELECT biz_type, content_format FROM mes_wm_barcode_config ORDER BY biz_type;  -- 期望 18 条
-- =============================================================================