云
111 分钟以前 cd8b8294fb8e1439342e775f41300a8907cb132d
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
-- ============================================================
-- 物料分类统一迁移:mes_md_item_type -> mdm_item_category
--
-- 执行时机:上线前执行一次(MES 分类接口切换底层存储之前)
-- 特性:
--   1. 按原 ID 迁移,保证 mes_md_item.item_type_id、mdm_item.category_id 等历史引用继续有效
--   2. 包含已逻辑删除记录,避免引用断链
--   3. 可重复执行(主键冲突时更新业务字段,不会产生重复数据)
-- ============================================================
 
INSERT INTO mdm_item_category
    (id, parent_id, code, name, item_type, item_or_product, sort, status, remark,
     creator, create_time, updater, update_time, deleted)
SELECT new.id,
       COALESCE(new.parent_id, 0),
       new.code,
       new.name,
       CASE WHEN UPPER(new.item_or_product) = 'PRODUCT' THEN 2 ELSE 1 END,
       new.item_or_product,
       COALESCE(new.sort, 0),
       COALESCE(new.status, 0),
       new.remark,
       COALESCE(new.creator, ''),
       COALESCE(new.create_time, CURRENT_TIMESTAMP),
       COALESCE(new.updater, ''),
       COALESCE(new.update_time, CURRENT_TIMESTAMP),
       COALESCE(new.deleted, b'0')
FROM mes_md_item_type AS new
WHERE new.name IS NOT NULL
ON DUPLICATE KEY UPDATE
    parent_id       = COALESCE(new.parent_id, 0),
    code            = new.code,
    name            = new.name,
    item_type       = CASE WHEN UPPER(new.item_or_product) = 'PRODUCT' THEN 2 ELSE 1 END,
    item_or_product = new.item_or_product,
    sort            = COALESCE(new.sort, 0),
    status          = COALESCE(new.status, 0),
    remark          = new.remark,
    deleted         = COALESCE(new.deleted, b'0');
 
-- 迁移结果核对:两侧 ID 应完全一致
-- SELECT (SELECT COUNT(*) FROM mes_md_item_type) AS mes_cnt,
--        (SELECT COUNT(*) FROM mdm_item_category) AS mdm_cnt,
--        (SELECT COUNT(*) FROM mes_md_item_type t
--         WHERE NOT EXISTS (SELECT 1 FROM mdm_item_category c WHERE c.id = t.id)) AS missing_cnt;