1.0.260.sql 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. -- 1.0.260: Phase 2/3 — S2/S4 stg 对齐 canonical;全模块 Mock _API 实体登记
  2. -- 幂等:information_schema 守卫
  3. -- ========== S2 mdp_stg_schedule ==========
  4. SET @ddl := (SELECT IF(
  5. EXISTS(SELECT 1 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='mdp_stg_schedule' AND COLUMN_NAME='create_time'),
  6. 'SELECT 1',
  7. 'ALTER TABLE mdp_stg_schedule ADD COLUMN create_time datetime NULL DEFAULT CURRENT_TIMESTAMP'));
  8. PREPARE s FROM @ddl; EXECUTE s; DEALLOCATE PREPARE s;
  9. SET @ddl := (SELECT IF(
  10. EXISTS(SELECT 1 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='mdp_stg_schedule' AND COLUMN_NAME='process_message'),
  11. 'SELECT 1',
  12. 'ALTER TABLE mdp_stg_schedule ADD COLUMN process_message varchar(500) NULL'));
  13. PREPARE s FROM @ddl; EXECUTE s; DEALLOCATE PREPARE s;
  14. UPDATE mdp_stg_schedule
  15. SET source_biz_key = IFNULL(NULLIF(source_biz_key, ''), IFNULL(source_row_id, CONCAT('row-', id)))
  16. WHERE source_biz_key IS NULL OR source_biz_key = '';
  17. SET @ddl := (SELECT IF(
  18. EXISTS(SELECT 1 FROM information_schema.STATISTICS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='mdp_stg_schedule' AND INDEX_NAME='uk_source_key'),
  19. 'SELECT 1',
  20. 'ALTER TABLE mdp_stg_schedule ADD UNIQUE KEY uk_source_key (source_system, source_table, source_biz_key)'));
  21. PREPARE s FROM @ddl; EXECUTE s; DEALLOCATE PREPARE s;
  22. -- ========== S4 stg tables ==========
  23. -- mdp_stg_s4_iqc
  24. SET @ddl := (SELECT IF(EXISTS(SELECT 1 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='mdp_stg_s4_iqc' AND COLUMN_NAME='create_time'),'SELECT 1','ALTER TABLE mdp_stg_s4_iqc ADD COLUMN create_time datetime NULL DEFAULT CURRENT_TIMESTAMP'));
  25. PREPARE s FROM @ddl; EXECUTE s; DEALLOCATE PREPARE s;
  26. SET @ddl := (SELECT IF(EXISTS(SELECT 1 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='mdp_stg_s4_iqc' AND COLUMN_NAME='process_message'),'SELECT 1','ALTER TABLE mdp_stg_s4_iqc ADD COLUMN process_message varchar(500) NULL'));
  27. PREPARE s FROM @ddl; EXECUTE s; DEALLOCATE PREPARE s;
  28. UPDATE mdp_stg_s4_iqc SET source_biz_key = IFNULL(NULLIF(source_biz_key, ''), IFNULL(source_row_id, CONCAT('row-', id))) WHERE source_biz_key IS NULL OR source_biz_key = '';
  29. SET @ddl := (SELECT IF(EXISTS(SELECT 1 FROM information_schema.STATISTICS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='mdp_stg_s4_iqc' AND INDEX_NAME='uk_source_key'),'SELECT 1','ALTER TABLE mdp_stg_s4_iqc ADD UNIQUE KEY uk_source_key (source_system, source_table, source_biz_key)'));
  30. PREPARE s FROM @ddl; EXECUTE s; DEALLOCATE PREPARE s;
  31. -- mdp_stg_s4_shipment
  32. SET @ddl := (SELECT IF(EXISTS(SELECT 1 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='mdp_stg_s4_shipment' AND COLUMN_NAME='create_time'),'SELECT 1','ALTER TABLE mdp_stg_s4_shipment ADD COLUMN create_time datetime NULL DEFAULT CURRENT_TIMESTAMP'));
  33. PREPARE s FROM @ddl; EXECUTE s; DEALLOCATE PREPARE s;
  34. SET @ddl := (SELECT IF(EXISTS(SELECT 1 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='mdp_stg_s4_shipment' AND COLUMN_NAME='process_message'),'SELECT 1','ALTER TABLE mdp_stg_s4_shipment ADD COLUMN process_message varchar(500) NULL'));
  35. PREPARE s FROM @ddl; EXECUTE s; DEALLOCATE PREPARE s;
  36. UPDATE mdp_stg_s4_shipment SET source_biz_key = IFNULL(NULLIF(source_biz_key, ''), IFNULL(source_row_id, CONCAT('row-', id))) WHERE source_biz_key IS NULL OR source_biz_key = '';
  37. SET @ddl := (SELECT IF(EXISTS(SELECT 1 FROM information_schema.STATISTICS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='mdp_stg_s4_shipment' AND INDEX_NAME='uk_source_key'),'SELECT 1','ALTER TABLE mdp_stg_s4_shipment ADD UNIQUE KEY uk_source_key (source_system, source_table, source_biz_key)'));
  38. PREPARE s FROM @ddl; EXECUTE s; DEALLOCATE PREPARE s;
  39. -- mdp_stg_s4_return
  40. SET @ddl := (SELECT IF(EXISTS(SELECT 1 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='mdp_stg_s4_return' AND COLUMN_NAME='create_time'),'SELECT 1','ALTER TABLE mdp_stg_s4_return ADD COLUMN create_time datetime NULL DEFAULT CURRENT_TIMESTAMP'));
  41. PREPARE s FROM @ddl; EXECUTE s; DEALLOCATE PREPARE s;
  42. SET @ddl := (SELECT IF(EXISTS(SELECT 1 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='mdp_stg_s4_return' AND COLUMN_NAME='process_message'),'SELECT 1','ALTER TABLE mdp_stg_s4_return ADD COLUMN process_message varchar(500) NULL'));
  43. PREPARE s FROM @ddl; EXECUTE s; DEALLOCATE PREPARE s;
  44. UPDATE mdp_stg_s4_return SET source_biz_key = IFNULL(NULLIF(source_biz_key, ''), IFNULL(source_row_id, CONCAT('row-', id))) WHERE source_biz_key IS NULL OR source_biz_key = '';
  45. SET @ddl := (SELECT IF(EXISTS(SELECT 1 FROM information_schema.STATISTICS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='mdp_stg_s4_return' AND INDEX_NAME='uk_source_key'),'SELECT 1','ALTER TABLE mdp_stg_s4_return ADD UNIQUE KEY uk_source_key (source_system, source_table, source_biz_key)'));
  46. PREPARE s FROM @ddl; EXECUTE s; DEALLOCATE PREPARE s;
  47. -- mdp_stg_s4_shortage
  48. SET @ddl := (SELECT IF(EXISTS(SELECT 1 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='mdp_stg_s4_shortage' AND COLUMN_NAME='create_time'),'SELECT 1','ALTER TABLE mdp_stg_s4_shortage ADD COLUMN create_time datetime NULL DEFAULT CURRENT_TIMESTAMP'));
  49. PREPARE s FROM @ddl; EXECUTE s; DEALLOCATE PREPARE s;
  50. SET @ddl := (SELECT IF(EXISTS(SELECT 1 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='mdp_stg_s4_shortage' AND COLUMN_NAME='process_message'),'SELECT 1','ALTER TABLE mdp_stg_s4_shortage ADD COLUMN process_message varchar(500) NULL'));
  51. PREPARE s FROM @ddl; EXECUTE s; DEALLOCATE PREPARE s;
  52. UPDATE mdp_stg_s4_shortage SET source_biz_key = IFNULL(NULLIF(source_biz_key, ''), IFNULL(source_row_id, CONCAT('row-', id))) WHERE source_biz_key IS NULL OR source_biz_key = '';
  53. -- dedupe before unique key (legacy SyncStaging may leave duplicate biz keys)
  54. UPDATE mdp_stg_s4_shortage s
  55. INNER JOIN (
  56. SELECT source_system, source_table, source_biz_key, MAX(id) AS keep_id
  57. FROM mdp_stg_s4_shortage
  58. GROUP BY source_system, source_table, source_biz_key HAVING COUNT(*)>1
  59. ) d ON s.source_system=d.source_system AND s.source_table=d.source_table
  60. AND IFNULL(s.source_biz_key,'')=IFNULL(d.source_biz_key,'') AND s.id<>d.keep_id
  61. SET s.source_biz_key=CONCAT(IFNULL(s.source_biz_key,''), '#id-', s.id);
  62. SET @ddl := (SELECT IF(EXISTS(SELECT 1 FROM information_schema.STATISTICS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='mdp_stg_s4_shortage' AND INDEX_NAME='uk_source_key'),'SELECT 1','ALTER TABLE mdp_stg_s4_shortage ADD UNIQUE KEY uk_source_key (source_system, source_table, source_biz_key)'));
  63. PREPARE s FROM @ddl; EXECUTE s; DEALLOCATE PREPARE s;
  64. -- ========== Phase2 Mock _API 实体(关键对象)==========
  65. INSERT INTO mdp_entity
  66. (tenant_id, source_id, entity_code, entity_name, entity_type,
  67. source_table_name, source_api_path, target_table_name,
  68. sync_mode, batch_size, response_data_path, dedup_key_path, biz_key_expr,
  69. status, remark, create_time, update_time)
  70. SELECT 0, (SELECT id FROM mdp_source WHERE source_code='WMS_API'),
  71. v.code, v.name, 'API', v.src_tbl, v.path, v.stg,
  72. 'INCREMENTAL', 1000, 'data.list', 'bizKey', v.biz,
  73. 1, 'Phase2 API', NOW(), NOW()
  74. FROM (
  75. SELECT 'S1_SEORDER_API' code, 'S1销售订单API' name, 'crm_seorder' src_tbl, '/api/sales-order' path, 'mdp_stg_so' stg, 'bill_no' biz
  76. UNION ALL SELECT 'S1_ASN_SHIPPER_DETAIL_API','S1发货明细API','ASNBOLShipperDetail','/api/shipment','mdp_stg_ship_trans','Id,Line'
  77. UNION ALL SELECT 'S2_WORK_ORDER_MASTER_API','S2工单主API','WorkOrdMaster','/api/work-order','mdp_stg_schedule','Domain,WorkOrd'
  78. UNION ALL SELECT 'S3_PURCHASE_ORDER_DETAIL_API','S3采购订单明细API','PurOrdDetail','/api/purchase-order','mdp_stg_purchase_order','Domain,PurOrd,Line'
  79. UNION ALL SELECT 'S3_SUPPLY_DEMAND_API','S3供需API','ic_demandschedule','/api/supply-demand','mdp_stg_supply_demand','Id'
  80. UNION ALL SELECT 'S3_DELIVERY_PLAN_API','S3交货计划API','srm_polist_ds','/api/delivery','mdp_stg_delivery','dsnum'
  81. UNION ALL SELECT 'S3_SUPPLIER_API','S3供应商API','SuppMaster','/api/supplier','mdp_stg_supplier','Domain,Supp'
  82. UNION ALL SELECT 'S3_ITEM_ERP_API','S3物料API','ItemMaster','/api/item','mdp_stg_item','Domain,ItemNum'
  83. UNION ALL SELECT 'S4_SHIPMENT_EXEC_API','S4发货API','scm_shdzb','/api/s4-shipment','mdp_stg_s4_shipment','glid,id'
  84. UNION ALL SELECT 'S4_IQC_RECEIPT_API','S4 IQC API','PurOrdRctDetail','/api/s4-iqc','mdp_stg_s4_iqc','Domain,Receiver,Line'
  85. ) v
  86. WHERE NOT EXISTS (SELECT 1 FROM mdp_entity e WHERE e.entity_code=v.code);