15 小时以前 eccad5a129106377a275be4f7cdc58e99e9b95d4
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
-- ============================================================
-- MES 物料 ID 迁移脚本
-- 目的:将 mes_md_item.id 更新为与 mdm_item.id 一致
-- 执行前请备份数据库!
-- ============================================================
 
-- 1. 创建临时映射表
DROP TEMPORARY TABLE IF EXISTS tmp_item_id_mapping;
CREATE TEMPORARY TABLE tmp_item_id_mapping (
    old_id BIGINT NOT NULL,
    new_id BIGINT NOT NULL,
    code VARCHAR(64),
    PRIMARY KEY (old_id)
);
 
-- 2. 插入需要迁移的物料映射数据
INSERT INTO tmp_item_id_mapping (old_id, new_id, code)
SELECT id, mdm_item_id, code
FROM mes_md_item
WHERE mdm_item_id IS NOT NULL AND id != mdm_item_id;
 
-- 查看需要迁移的数据
SELECT * FROM tmp_item_id_mapping;
 
-- 3. 禁用外键检查(避免外键约束阻止更新)
SET FOREIGN_KEY_CHECKS = 0;
 
-- 4. 更新所有引用 mes_md_item.id 的表
-- 注意:以下语句会更新所有 item_id 字段
 
-- 4.1 基础数据表
UPDATE mes_md_item_batch_config t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
UPDATE mes_md_product_bom t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
UPDATE mes_md_product_sip t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
UPDATE mes_md_product_sop t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
-- 4.2 生产相关表
UPDATE mes_pro_card t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
UPDATE mes_pro_feedback t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
UPDATE mes_pro_route_product t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
UPDATE mes_pro_route_product_bom t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
UPDATE mes_pro_task t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
UPDATE mes_pro_task_issue t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
UPDATE mes_pro_work_order_bom t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
-- 4.3 质量相关表
UPDATE mes_qc_indicator_result t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
UPDATE mes_qc_ipqc t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
UPDATE mes_qc_iqc t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
UPDATE mes_qc_oqc t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
UPDATE mes_qc_rqc t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
UPDATE mes_qc_template_item t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
-- 4.4 仓库管理表 - 入库
UPDATE mes_wm_arrival_notice_line t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
UPDATE mes_wm_item_receipt_detail t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
UPDATE mes_wm_item_receipt_line t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
UPDATE mes_wm_misc_receipt_detail t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
UPDATE mes_wm_misc_receipt_line t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
UPDATE mes_wm_outsource_receipt_detail t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
UPDATE mes_wm_outsource_receipt_line t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
UPDATE mes_wm_product_receipt_detail t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
UPDATE mes_wm_product_receipt_line t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
-- 4.5 仓库管理表 - 出库
UPDATE mes_wm_item_consume_detail t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
UPDATE mes_wm_item_consume_line t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
UPDATE mes_wm_misc_issue_detail t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
UPDATE mes_wm_misc_issue_line t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
UPDATE mes_wm_outsource_issue_detail t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
UPDATE mes_wm_outsource_issue_line t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
UPDATE mes_wm_product_issue_detail t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
UPDATE mes_wm_product_issue_line t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
UPDATE mes_wm_return_issue_detail t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
UPDATE mes_wm_return_issue_line t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
-- 4.6 仓库管理表 - 销售/退货
UPDATE mes_wm_product_sales_detail t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
UPDATE mes_wm_product_sales_line t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
UPDATE mes_wm_return_sales_detail t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
UPDATE mes_wm_return_sales_line t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
UPDATE mes_wm_return_vendor_detail t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
UPDATE mes_wm_return_vendor_line t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
UPDATE mes_wm_sales_notice_line t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
-- 4.7 仓库管理表 - 其他
UPDATE mes_wm_batch t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
UPDATE mes_wm_material_stock t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
UPDATE mes_wm_package_line t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
UPDATE mes_wm_sn t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
UPDATE mes_wm_stock_reserve t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
UPDATE mes_wm_stock_taking_plan_param t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
UPDATE mes_wm_stock_taking_task_line t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
UPDATE mes_wm_stock_taking_task_result t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
UPDATE mes_wm_transaction t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
UPDATE mes_wm_transfer_detail t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
UPDATE mes_wm_transfer_line t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
-- 4.8 生产产出表
UPDATE mes_wm_product_produce_detail t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
UPDATE mes_wm_product_produce_line t
JOIN tmp_item_id_mapping m ON t.item_id = m.old_id
SET t.item_id = m.new_id;
 
-- 5. 更新主表 mes_md_item 的 id
-- 由于 id 是主键,需要先删除旧记录再插入新记录
-- 创建临时表保存完整数据
DROP TEMPORARY TABLE IF EXISTS tmp_mes_md_item;
CREATE TEMPORARY TABLE tmp_mes_md_item AS
SELECT * FROM mes_md_item;
 
-- 删除需要迁移的记录
DELETE FROM mes_md_item WHERE id IN (SELECT old_id FROM tmp_item_id_mapping);
 
-- 使用新 ID 重新插入
INSERT INTO mes_md_item (
    id, mdm_item_id, code, name, specification, unit_measure_id, item_type_id,
    status, safe_stock_flag, min_stock, max_stock, high_value, batch_flag, remark,
    creator, create_time, updater, update_time, deleted
)
SELECT
    m.new_id AS id,  -- 使用 MDM 物料 ID
    t.mdm_item_id,
    t.code, t.name, t.specification, t.unit_measure_id, t.item_type_id,
    t.status, t.safe_stock_flag, t.min_stock, t.max_stock, t.high_value, t.batch_flag, t.remark,
    t.creator, t.create_time, t.updater, t.update_time, t.deleted
FROM tmp_mes_md_item t
JOIN tmp_item_id_mapping m ON t.id = m.old_id;
 
-- 6. 重新启用外键检查
SET FOREIGN_KEY_CHECKS = 1;
 
-- 7. 清理临时表
DROP TEMPORARY TABLE IF EXISTS tmp_item_id_mapping;
DROP TEMPORARY TABLE IF EXISTS tmp_mes_md_item;
 
-- 8. 验证迁移结果
SELECT id, mdm_item_id, code, name
FROM mes_md_item
WHERE mdm_item_id IS NOT NULL;
 
-- 检查是否还有 id != mdm_item_id 的记录
SELECT COUNT(*) AS need_migration_count
FROM mes_md_item
WHERE mdm_item_id IS NOT NULL AND id != mdm_item_id;