1.0.158.sql 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. -- S4-MDP-PROCUREMENT-EXECUTION-1
  2. -- S4 采购执行专属贴源/标准/DWD 与 mdp_entity 登记(幂等)
  3. -- 采购订单主链仍由 S3 维护;S4 仅补 IQC/发货执行/退货/欠料执行事实。
  4. SET NAMES utf8mb4;
  5. CREATE TABLE IF NOT EXISTS mdp_stg_s4_iqc (
  6. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  7. tenant_id BIGINT NOT NULL DEFAULT 0,
  8. source_system VARCHAR(50) NOT NULL DEFAULT 'AIDOP',
  9. source_table VARCHAR(100) NOT NULL,
  10. source_row_id VARCHAR(100) NOT NULL,
  11. source_biz_key VARCHAR(200) NULL,
  12. sync_batch_id VARCHAR(100) NOT NULL,
  13. sync_time DATETIME NOT NULL,
  14. process_status VARCHAR(20) NOT NULL DEFAULT 'PENDING',
  15. raw_data JSON NOT NULL,
  16. update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  17. UNIQUE KEY uk_mdp_stg_s4_iqc (tenant_id, source_table, source_row_id),
  18. KEY idx_mdp_stg_s4_iqc_batch (sync_batch_id),
  19. KEY idx_mdp_stg_s4_iqc_biz (source_biz_key)
  20. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='S4 IQC/收货贴源';
  21. CREATE TABLE IF NOT EXISTS mdp_stg_s4_shipment (
  22. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  23. tenant_id BIGINT NOT NULL DEFAULT 0,
  24. source_system VARCHAR(50) NOT NULL DEFAULT 'AIDOP',
  25. source_table VARCHAR(100) NOT NULL,
  26. source_row_id VARCHAR(100) NOT NULL,
  27. source_biz_key VARCHAR(200) NULL,
  28. sync_batch_id VARCHAR(100) NOT NULL,
  29. sync_time DATETIME NOT NULL,
  30. process_status VARCHAR(20) NOT NULL DEFAULT 'PENDING',
  31. raw_data JSON NOT NULL,
  32. update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  33. UNIQUE KEY uk_mdp_stg_s4_shipment (tenant_id, source_table, source_row_id),
  34. KEY idx_mdp_stg_s4_shipment_batch (sync_batch_id)
  35. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='S4 发货执行贴源';
  36. CREATE TABLE IF NOT EXISTS mdp_stg_s4_return (
  37. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  38. tenant_id BIGINT NOT NULL DEFAULT 0,
  39. source_system VARCHAR(50) NOT NULL DEFAULT 'AIDOP',
  40. source_table VARCHAR(100) NOT NULL,
  41. source_row_id VARCHAR(100) NOT NULL,
  42. source_biz_key VARCHAR(200) NULL,
  43. sync_batch_id VARCHAR(100) NOT NULL,
  44. sync_time DATETIME NOT NULL,
  45. process_status VARCHAR(20) NOT NULL DEFAULT 'PENDING',
  46. raw_data JSON NOT NULL,
  47. update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  48. UNIQUE KEY uk_mdp_stg_s4_return (tenant_id, source_table, source_row_id),
  49. KEY idx_mdp_stg_s4_return_batch (sync_batch_id)
  50. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='S4 采购退货贴源';
  51. CREATE TABLE IF NOT EXISTS mdp_stg_s4_shortage (
  52. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  53. tenant_id BIGINT NOT NULL DEFAULT 0,
  54. source_system VARCHAR(50) NOT NULL DEFAULT 'AIDOP',
  55. source_table VARCHAR(100) NOT NULL,
  56. source_row_id VARCHAR(100) NOT NULL,
  57. source_biz_key VARCHAR(200) NULL,
  58. sync_batch_id VARCHAR(100) NOT NULL,
  59. sync_time DATETIME NOT NULL,
  60. process_status VARCHAR(20) NOT NULL DEFAULT 'PENDING',
  61. raw_data JSON NOT NULL,
  62. update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  63. UNIQUE KEY uk_mdp_stg_s4_shortage (tenant_id, source_table, source_row_id),
  64. KEY idx_mdp_stg_s4_shortage_batch (sync_batch_id)
  65. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='S4 欠料执行贴源';
  66. CREATE TABLE IF NOT EXISTS mdp_std_s4_iqc (
  67. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  68. tenant_id BIGINT NOT NULL DEFAULT 0,
  69. factory_id BIGINT NULL DEFAULT 1,
  70. source_system VARCHAR(50) NOT NULL DEFAULT 'AIDOP',
  71. po_no VARCHAR(50) NULL,
  72. po_line VARCHAR(50) NULL,
  73. supplier_code VARCHAR(50) NULL,
  74. item_code VARCHAR(50) NULL,
  75. receipt_qty DECIMAL(18,6) NULL DEFAULT 0,
  76. sample_qty DECIMAL(18,6) NULL DEFAULT 0,
  77. defect_qty DECIMAL(18,6) NULL DEFAULT 0,
  78. qc_result VARCHAR(20) NULL,
  79. receipt_date DATETIME NULL,
  80. source_biz_key VARCHAR(200) NULL,
  81. sync_batch_id VARCHAR(100) NOT NULL,
  82. sync_time DATETIME NOT NULL,
  83. update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  84. UNIQUE KEY uk_std_s4_iqc (tenant_id, source_biz_key),
  85. KEY idx_std_s4_iqc_po (tenant_id, po_no, po_line),
  86. KEY idx_std_s4_iqc_supplier (tenant_id, supplier_code)
  87. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='S4 IQC标准层';
  88. CREATE TABLE IF NOT EXISTS mdp_std_s4_shipment (
  89. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  90. tenant_id BIGINT NOT NULL DEFAULT 0,
  91. factory_id BIGINT NULL DEFAULT 1,
  92. source_system VARCHAR(50) NOT NULL DEFAULT 'AIDOP',
  93. shipment_no VARCHAR(50) NULL,
  94. po_no VARCHAR(50) NULL,
  95. po_line VARCHAR(50) NULL,
  96. supplier_code VARCHAR(50) NULL,
  97. item_code VARCHAR(50) NULL,
  98. ship_qty DECIMAL(18,6) NULL DEFAULT 0,
  99. ship_date DATETIME NULL,
  100. source_biz_key VARCHAR(200) NULL,
  101. sync_batch_id VARCHAR(100) NOT NULL,
  102. sync_time DATETIME NOT NULL,
  103. update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  104. UNIQUE KEY uk_std_s4_shipment (tenant_id, source_biz_key),
  105. KEY idx_std_s4_shipment_po (tenant_id, po_no),
  106. KEY idx_std_s4_shipment_supplier (tenant_id, supplier_code)
  107. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='S4 发货执行标准层';
  108. CREATE TABLE IF NOT EXISTS mdp_std_s4_return (
  109. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  110. tenant_id BIGINT NOT NULL DEFAULT 0,
  111. factory_id BIGINT NULL DEFAULT 1,
  112. source_system VARCHAR(50) NOT NULL DEFAULT 'AIDOP',
  113. po_no VARCHAR(50) NULL,
  114. po_line VARCHAR(50) NULL,
  115. supplier_code VARCHAR(50) NULL,
  116. item_code VARCHAR(50) NULL,
  117. return_qty DECIMAL(18,6) NULL DEFAULT 0,
  118. return_reason VARCHAR(200) NULL,
  119. return_status VARCHAR(50) NULL,
  120. source_biz_key VARCHAR(200) NULL,
  121. sync_batch_id VARCHAR(100) NOT NULL,
  122. sync_time DATETIME NOT NULL,
  123. update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  124. UNIQUE KEY uk_std_s4_return (tenant_id, source_biz_key),
  125. KEY idx_std_s4_return_po (tenant_id, po_no)
  126. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='S4 采购退货标准层';
  127. CREATE TABLE IF NOT EXISTS mdp_std_s4_shortage (
  128. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  129. tenant_id BIGINT NOT NULL DEFAULT 0,
  130. factory_id BIGINT NULL DEFAULT 1,
  131. source_system VARCHAR(50) NOT NULL DEFAULT 'AIDOP',
  132. work_order VARCHAR(100) NULL,
  133. supplier_code VARCHAR(50) NULL,
  134. item_code VARCHAR(50) NULL,
  135. shortage_qty DECIMAL(18,6) NULL DEFAULT 0,
  136. risk_level VARCHAR(20) NULL,
  137. need_date DATETIME NULL,
  138. source_biz_key VARCHAR(200) NULL,
  139. sync_batch_id VARCHAR(100) NOT NULL,
  140. sync_time DATETIME NOT NULL,
  141. update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  142. UNIQUE KEY uk_std_s4_shortage (tenant_id, source_biz_key),
  143. KEY idx_std_s4_shortage_supplier (tenant_id, supplier_code),
  144. KEY idx_std_s4_shortage_item (tenant_id, item_code)
  145. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='S4 欠料执行标准层';
  146. CREATE TABLE IF NOT EXISTS dwd_s4_purchase_execution (
  147. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  148. tenant_id BIGINT NOT NULL,
  149. factory_id BIGINT NOT NULL DEFAULT 1,
  150. stat_date DATE NOT NULL,
  151. po_no VARCHAR(50) NULL,
  152. po_line VARCHAR(50) NULL,
  153. supplier_code VARCHAR(50) NULL,
  154. item_code VARCHAR(50) NULL,
  155. order_qty DECIMAL(12,3) NULL DEFAULT 0,
  156. delivery_qty DECIMAL(12,3) NULL DEFAULT 0,
  157. received_qty DECIMAL(12,3) NULL DEFAULT 0,
  158. returned_qty DECIMAL(12,3) NULL DEFAULT 0,
  159. shortage_qty DECIMAL(12,3) NULL DEFAULT 0,
  160. due_date DATE NULL,
  161. actual_arrival_date DATE NULL,
  162. risk_level VARCHAR(20) NULL,
  163. source_system VARCHAR(20) NULL DEFAULT 'AIDOP',
  164. sync_batch_id VARCHAR(100) NULL,
  165. sync_time DATETIME NULL,
  166. update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  167. UNIQUE KEY uk_dwd_s4_pe (tenant_id, stat_date, po_no, po_line, item_code),
  168. KEY idx_dwd_s4_pe_date (tenant_id, stat_date),
  169. KEY idx_dwd_s4_pe_supplier (tenant_id, supplier_code),
  170. KEY idx_dwd_s4_pe_po (tenant_id, po_no)
  171. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='S4采购执行宽表';
  172. -- 扩展 dwd_po_trans(幂等加列)
  173. SET @db := DATABASE();
  174. SET @sql := IF(
  175. EXISTS(SELECT 1 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=@db AND TABLE_NAME='dwd_po_trans' AND COLUMN_NAME='factory_id'),
  176. 'SELECT 1', 'ALTER TABLE dwd_po_trans ADD COLUMN factory_id BIGINT NULL DEFAULT 1 AFTER tenant_id');
  177. PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
  178. SET @sql := IF(
  179. EXISTS(SELECT 1 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=@db AND TABLE_NAME='dwd_po_trans' AND COLUMN_NAME='po_line'),
  180. 'SELECT 1', 'ALTER TABLE dwd_po_trans ADD COLUMN po_line VARCHAR(50) NULL AFTER po_no');
  181. PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
  182. SET @sql := IF(
  183. EXISTS(SELECT 1 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=@db AND TABLE_NAME='dwd_po_trans' AND COLUMN_NAME='returned_qty'),
  184. 'SELECT 1', 'ALTER TABLE dwd_po_trans ADD COLUMN returned_qty DECIMAL(12,3) NULL DEFAULT 0 AFTER received_qty');
  185. PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
  186. SET @sql := IF(
  187. EXISTS(SELECT 1 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=@db AND TABLE_NAME='dwd_po_trans' AND COLUMN_NAME='shortage_qty'),
  188. 'SELECT 1', 'ALTER TABLE dwd_po_trans ADD COLUMN shortage_qty DECIMAL(12,3) NULL DEFAULT 0 AFTER returned_qty');
  189. PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
  190. SET @sql := IF(
  191. EXISTS(SELECT 1 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=@db AND TABLE_NAME='dwd_po_trans' AND COLUMN_NAME='due_date'),
  192. 'SELECT 1', 'ALTER TABLE dwd_po_trans ADD COLUMN due_date DATE NULL AFTER shortage_qty');
  193. PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
  194. SET @sql := IF(
  195. EXISTS(SELECT 1 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=@db AND TABLE_NAME='dwd_po_trans' AND COLUMN_NAME='actual_arrival_date'),
  196. 'SELECT 1', 'ALTER TABLE dwd_po_trans ADD COLUMN actual_arrival_date DATE NULL AFTER due_date');
  197. PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
  198. SET @sql := IF(
  199. EXISTS(SELECT 1 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=@db AND TABLE_NAME='dwd_po_trans' AND COLUMN_NAME='risk_level'),
  200. 'SELECT 1', 'ALTER TABLE dwd_po_trans ADD COLUMN risk_level VARCHAR(20) NULL AFTER actual_arrival_date');
  201. PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
  202. SET @sql := IF(
  203. EXISTS(SELECT 1 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=@db AND TABLE_NAME='dwd_po_trans' AND COLUMN_NAME='sync_batch_id'),
  204. 'SELECT 1', 'ALTER TABLE dwd_po_trans ADD COLUMN sync_batch_id VARCHAR(100) NULL AFTER source_system');
  205. PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
  206. INSERT INTO mdp_entity
  207. (tenant_id, source_id, entity_code, entity_name, entity_type, source_table_name, target_table_name, sync_mode, batch_size, status, remark)
  208. SELECT 0, s.id, v.entity_code, v.entity_name, 'TABLE', v.source_table_name, v.target_table_name, 'FULL', 5000, 1, v.remark
  209. FROM mdp_source s
  210. JOIN (
  211. SELECT 'S4_IQC_RECEIPT' AS entity_code, 'S4 IQC收货明细' AS entity_name, 'PurOrdRctDetail' AS source_table_name, 'mdp_stg_s4_iqc' AS target_table_name, 'S4 采购执行 IQC/收货贴源,不重复 S3 采购订单主链' AS remark
  212. UNION ALL SELECT 'S4_SHIPMENT_EXEC', 'S4 发货执行明细', 'scm_shdzb', 'mdp_stg_s4_shipment', 'S4 供应商发货单执行贴源'
  213. UNION ALL SELECT 'S4_RETURN_EXEC', 'S4 采购退货行', 'srm_polist_ds', 'mdp_stg_s4_return', 'S4 交货计划退货数量贴源'
  214. UNION ALL SELECT 'S4_SHORTAGE_EXEC', 'S4 欠料执行', 'dwd_material_shortage', 'mdp_stg_s4_shortage', 'S4 消费 S3 缺料 DWD 快照,不新增第三套工单贴源'
  215. ) v ON 1=1
  216. WHERE s.tenant_id = 0 AND s.source_code = 'AIDOPDEV_MYSQL'
  217. ON DUPLICATE KEY UPDATE
  218. source_id = VALUES(source_id),
  219. entity_name = VALUES(entity_name),
  220. source_table_name = VALUES(source_table_name),
  221. target_table_name = VALUES(target_table_name),
  222. remark = VALUES(remark),
  223. update_time = CURRENT_TIMESTAMP;
  224. -- ----------------------------------------------------------------------
  225. -- SYS-TENANT-CONNECTION-LENGTH-1
  226. -- 放大 SysTenant.Connection,避免 ID 隔离租户写入主库连接串时超过 varchar(256)。
  227. SET NAMES utf8mb4;
  228. SET @db := DATABASE();
  229. SET @sql := IF(
  230. EXISTS(
  231. SELECT 1
  232. FROM information_schema.COLUMNS
  233. WHERE TABLE_SCHEMA = @db
  234. AND LOWER(TABLE_NAME) = LOWER('SysTenant')
  235. AND COLUMN_NAME = 'Connection'
  236. AND DATA_TYPE <> 'text'
  237. ),
  238. 'ALTER TABLE `SysTenant` MODIFY COLUMN `Connection` TEXT NULL COMMENT ''数据库连接''',
  239. 'SELECT 1'
  240. );
  241. PREPARE stmt FROM @sql;
  242. EXECUTE stmt;
  243. DEALLOCATE PREPARE stmt;