2026-05-10_s3_first_batch_seed_from_business.sql 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357
  1. -- S3 first batch sample backfill from current aidopdev business tables.
  2. -- This script is idempotent for the first validation batch and can be rerun after API generation tests.
  3. SET @batch_id := CONCAT('S3_FIRST_BATCH_', DATE_FORMAT(NOW(), '%Y%m%d%H%i%s'));
  4. SET @sync_time := NOW();
  5. SET @stat_date := CURRENT_DATE();
  6. INSERT INTO mdp_stg_purchase_order
  7. (tenant_id, source_system, source_table, source_row_id, source_biz_key, sync_batch_id, sync_time, process_status, raw_data)
  8. SELECT
  9. COALESCE(m.tenant_id, 0),
  10. 'AIDOP',
  11. 'PurOrdMaster/PurOrdDetail',
  12. CAST(d.RecID AS CHAR),
  13. CONCAT(IFNULL(m.PurOrd,''), '|', IFNULL(d.Line, 0)),
  14. @batch_id,
  15. @sync_time,
  16. 'DONE',
  17. JSON_OBJECT('purOrd', m.PurOrd, 'line', d.Line, 'itemNum', d.ItemNum, 'supp', m.Supp, 'qtyOrded', d.QtyOrded, 'dueDate', d.DueDate)
  18. FROM PurOrdMaster m
  19. JOIN PurOrdDetail d ON m.RecID = d.PurOrdRecID
  20. WHERE IFNULL(m.PurOrd, '') <> ''
  21. ON DUPLICATE KEY UPDATE
  22. sync_batch_id = VALUES(sync_batch_id),
  23. sync_time = VALUES(sync_time),
  24. process_status = VALUES(process_status),
  25. raw_data = VALUES(raw_data),
  26. update_time = CURRENT_TIMESTAMP;
  27. INSERT INTO mdp_std_purchase_order
  28. (tenant_id, source_system, po_no, po_line, po_type, supplier_code, item_code, item_name, order_qty, received_qty, returned_qty, due_date, need_date, order_date, status, buyer, work_order, source_biz_key, sync_batch_id, sync_time)
  29. SELECT
  30. COALESCE(m.tenant_id, 0),
  31. 'AIDOP',
  32. IFNULL(m.PurOrd, ''),
  33. CAST(IFNULL(d.Line, 0) AS CHAR),
  34. IFNULL(m.Potype, ''),
  35. IFNULL(m.Supp, ''),
  36. IFNULL(d.ItemNum, ''),
  37. IFNULL(i.Descr, ''),
  38. IFNULL(d.QtyOrded, 0),
  39. IFNULL(d.QtyReceived, IFNULL(d.RctQty, 0)),
  40. IFNULL(d.QtyReturned, 0),
  41. d.DueDate,
  42. d.NeedDate,
  43. m.OrdDate,
  44. CASE WHEN IFNULL(LENGTH(m.Status), 0) = 0 THEN 'R' ELSE m.Status END,
  45. m.Buyer,
  46. m.WorkOrd,
  47. CONCAT(IFNULL(m.PurOrd,''), '|', IFNULL(d.Line, 0)),
  48. @batch_id,
  49. @sync_time
  50. FROM PurOrdMaster m
  51. JOIN PurOrdDetail d ON m.RecID = d.PurOrdRecID
  52. LEFT JOIN ItemMaster i ON d.ItemNum = i.ItemNum
  53. WHERE IFNULL(m.PurOrd, '') <> ''
  54. AND IFNULL(d.ItemNum, '') <> ''
  55. ON DUPLICATE KEY UPDATE
  56. po_type = VALUES(po_type),
  57. supplier_code = VALUES(supplier_code),
  58. item_code = VALUES(item_code),
  59. item_name = VALUES(item_name),
  60. order_qty = VALUES(order_qty),
  61. received_qty = VALUES(received_qty),
  62. returned_qty = VALUES(returned_qty),
  63. due_date = VALUES(due_date),
  64. need_date = VALUES(need_date),
  65. order_date = VALUES(order_date),
  66. status = VALUES(status),
  67. buyer = VALUES(buyer),
  68. work_order = VALUES(work_order),
  69. sync_batch_id = VALUES(sync_batch_id),
  70. sync_time = VALUES(sync_time),
  71. update_time = CURRENT_TIMESTAMP;
  72. INSERT INTO mdp_stg_delivery
  73. (tenant_id, source_system, source_table, source_row_id, source_biz_key, sync_batch_id, sync_time, process_status, raw_data)
  74. SELECT
  75. COALESCE(tenant_id, 0),
  76. 'AIDOP',
  77. 'srm_polist_ds',
  78. CAST(Id AS CHAR),
  79. IFNULL(dsnum, ''),
  80. @batch_id,
  81. @sync_time,
  82. 'DONE',
  83. JSON_OBJECT('dsnum', dsnum, 'ponumber', ponumber, 'poline', poline, 'itemnum', itemnum, 'schedqty', schedqty, 'restqty', restqty)
  84. FROM srm_polist_ds
  85. WHERE IFNULL(dsnum, '') <> ''
  86. ON DUPLICATE KEY UPDATE
  87. sync_batch_id = VALUES(sync_batch_id),
  88. sync_time = VALUES(sync_time),
  89. process_status = VALUES(process_status),
  90. raw_data = VALUES(raw_data),
  91. update_time = CURRENT_TIMESTAMP;
  92. INSERT INTO mdp_std_delivery_schedule
  93. (tenant_id, source_system, delivery_plan_no, po_no, po_line, item_code, supplier_code, supplier_name, schedule_qty, sent_qty, rest_qty, return_qty, request_date, need_date, submit_date, last_sent_date, status, source_biz_key, sync_batch_id, sync_time)
  94. SELECT
  95. COALESCE(ds.tenant_id, 0),
  96. 'AIDOP',
  97. IFNULL(ds.dsnum, ''),
  98. IFNULL(ds.ponumber, ''),
  99. CAST(IFNULL(ds.poline, 0) AS CHAR),
  100. IFNULL(ds.itemnum, ''),
  101. IFNULL(ds.suppliercode, ''),
  102. IFNULL(ds.supplier, ''),
  103. IFNULL(ds.schedqty, 0),
  104. IFNULL(ds.sentqty, 0),
  105. IFNULL(ds.restqty, 0),
  106. IFNULL(ds.returnqty, 0),
  107. ds.requestdate,
  108. ds.needdate,
  109. ds.submitdate,
  110. ds.lastsentdate,
  111. ds.status,
  112. IFNULL(ds.dsnum, ''),
  113. @batch_id,
  114. @sync_time
  115. FROM srm_polist_ds ds
  116. WHERE IFNULL(ds.dsnum, '') <> ''
  117. ON DUPLICATE KEY UPDATE
  118. po_no = VALUES(po_no),
  119. po_line = VALUES(po_line),
  120. item_code = VALUES(item_code),
  121. supplier_code = VALUES(supplier_code),
  122. supplier_name = VALUES(supplier_name),
  123. schedule_qty = VALUES(schedule_qty),
  124. sent_qty = VALUES(sent_qty),
  125. rest_qty = VALUES(rest_qty),
  126. return_qty = VALUES(return_qty),
  127. request_date = VALUES(request_date),
  128. need_date = VALUES(need_date),
  129. submit_date = VALUES(submit_date),
  130. last_sent_date = VALUES(last_sent_date),
  131. status = VALUES(status),
  132. sync_batch_id = VALUES(sync_batch_id),
  133. sync_time = VALUES(sync_time),
  134. update_time = CURRENT_TIMESTAMP;
  135. INSERT INTO dwd_supplier_delivery
  136. (tenant_id, stat_date, po_no, po_line, po_type, supplier_code, supplier_name, item_code, item_name, order_qty, schedule_qty, delivery_qty, receipt_qty, return_qty, remaining_qty, due_date, need_date, last_delivery_date, delivery_status, source_system, sync_batch_id, calc_time)
  137. SELECT
  138. COALESCE(m.tenant_id, ds.tenant_id, 0),
  139. @stat_date,
  140. IFNULL(m.PurOrd, IFNULL(ds.ponumber, '')),
  141. CAST(IFNULL(d.Line, IFNULL(ds.poline, 0)) AS CHAR),
  142. IFNULL(m.Potype, ''),
  143. IFNULL(m.Supp, IFNULL(ds.suppliercode, '')),
  144. IFNULL(ds.supplier, ''),
  145. IFNULL(d.ItemNum, IFNULL(ds.itemnum, '')),
  146. IFNULL(i.Descr, ''),
  147. IFNULL(d.QtyOrded, 0),
  148. IFNULL(ds.schedqty, 0),
  149. IFNULL(ds.sentqty, 0),
  150. IFNULL(d.QtyReceived, IFNULL(d.RctQty, 0)),
  151. IFNULL(ds.returnqty, IFNULL(d.QtyReturned, 0)),
  152. GREATEST(IFNULL(d.QtyOrded, 0) - IFNULL(d.QtyReceived, IFNULL(d.RctQty, 0)) - IFNULL(d.QtyReturned, 0), 0),
  153. d.DueDate,
  154. COALESCE(ds.needdate, d.NeedDate),
  155. ds.lastsentdate,
  156. CASE
  157. WHEN IFNULL(ds.status, '') = 'C' THEN 'CANCELLED'
  158. WHEN IFNULL(ds.restqty, 0) <= 0 THEN 'CLOSED'
  159. WHEN IFNULL(ds.sentqty, 0) > 0 THEN 'PARTIAL'
  160. ELSE 'OPEN'
  161. END,
  162. 'AIDOP',
  163. @batch_id,
  164. @sync_time
  165. FROM PurOrdMaster m
  166. JOIN PurOrdDetail d ON m.RecID = d.PurOrdRecID
  167. LEFT JOIN srm_polist_ds ds ON d.PurOrd = ds.ponumber AND d.Line = ds.poline AND ds.isactive = 1
  168. LEFT JOIN ItemMaster i ON d.ItemNum = i.ItemNum
  169. WHERE IFNULL(m.PurOrd, '') <> ''
  170. AND IFNULL(d.ItemNum, '') <> ''
  171. ON DUPLICATE KEY UPDATE
  172. po_type = VALUES(po_type),
  173. supplier_code = VALUES(supplier_code),
  174. supplier_name = VALUES(supplier_name),
  175. item_code = VALUES(item_code),
  176. item_name = VALUES(item_name),
  177. order_qty = VALUES(order_qty),
  178. schedule_qty = VALUES(schedule_qty),
  179. delivery_qty = VALUES(delivery_qty),
  180. receipt_qty = VALUES(receipt_qty),
  181. return_qty = VALUES(return_qty),
  182. remaining_qty = VALUES(remaining_qty),
  183. due_date = VALUES(due_date),
  184. need_date = VALUES(need_date),
  185. last_delivery_date = VALUES(last_delivery_date),
  186. delivery_status = VALUES(delivery_status),
  187. sync_batch_id = VALUES(sync_batch_id),
  188. calc_time = VALUES(calc_time),
  189. update_time = CURRENT_TIMESTAMP;
  190. INSERT INTO mdp_std_process_outsource_order
  191. (tenant_id, source_system, work_order, op_code, routing_code, supplier_code, po_no, po_line, order_qty, completed_qty, due_date, status, source_biz_key, sync_batch_id, sync_time)
  192. SELECT
  193. COALESCE(m.tenant_id, 0),
  194. 'AIDOP',
  195. IFNULL(m.WorkOrd, ''),
  196. CAST(IFNULL(d.Op, 0) AS CHAR),
  197. IFNULL(d.ItemNum, ''),
  198. IFNULL(m.Supp, ''),
  199. IFNULL(m.PurOrd, ''),
  200. CAST(IFNULL(d.Line, 0) AS CHAR),
  201. IFNULL(d.QtyOrded, 0),
  202. IFNULL(d.QtyReceived, IFNULL(d.RctQty, 0)),
  203. d.DueDate,
  204. CASE WHEN IFNULL(LENGTH(m.Status), 0) = 0 THEN 'R' ELSE m.Status END,
  205. CONCAT(IFNULL(m.PurOrd,''), '|', IFNULL(d.Line, 0)),
  206. @batch_id,
  207. @sync_time
  208. FROM PurOrdMaster m
  209. JOIN PurOrdDetail d ON m.RecID = d.PurOrdRecID
  210. WHERE m.Potype = 'PW'
  211. AND IFNULL(m.WorkOrd, '') <> ''
  212. AND IFNULL(d.ItemNum, '') <> ''
  213. ON DUPLICATE KEY UPDATE
  214. supplier_code = VALUES(supplier_code),
  215. po_no = VALUES(po_no),
  216. po_line = VALUES(po_line),
  217. order_qty = VALUES(order_qty),
  218. completed_qty = VALUES(completed_qty),
  219. due_date = VALUES(due_date),
  220. status = VALUES(status),
  221. sync_batch_id = VALUES(sync_batch_id),
  222. sync_time = VALUES(sync_time),
  223. update_time = CURRENT_TIMESTAMP;
  224. INSERT INTO mdp_stg_work_order_material
  225. (tenant_id, source_system, source_table, source_row_id, source_biz_key, sync_batch_id, sync_time, process_status, raw_data)
  226. SELECT
  227. 0,
  228. 'AIDOP',
  229. 'WorkOrdTemp',
  230. CAST(RowNum AS CHAR),
  231. CONCAT(IFNULL(workord,''), '|', IFNULL(Op, 0), '|', IFNULL(ItemNum,''), '|', IFNULL(RowNum, 0)),
  232. @batch_id,
  233. @sync_time,
  234. 'DONE',
  235. JSON_OBJECT('workord', workord, 'op', Op, 'itemNum', ItemNum, 'qtyRequired', QtyRequired, 'shortage', shortage, 'supplier', supplier_name)
  236. FROM WorkOrdTemp
  237. WHERE IFNULL(workord, '') <> ''
  238. ON DUPLICATE KEY UPDATE
  239. sync_batch_id = VALUES(sync_batch_id),
  240. sync_time = VALUES(sync_time),
  241. process_status = VALUES(process_status),
  242. raw_data = VALUES(raw_data),
  243. update_time = CURRENT_TIMESTAMP;
  244. INSERT INTO mdp_std_material_readiness
  245. (tenant_id, source_system, work_order, op_code, item_code, component_item_code, required_qty, issued_qty, received_qty, available_qty, in_transit_qty, incoming_qty, shortage_qty, ready_status, need_date, supplier_code, source_biz_key, sync_batch_id, sync_time)
  246. SELECT
  247. 0,
  248. 'AIDOP',
  249. IFNULL(workord, ''),
  250. CAST(IFNULL(Op, 0) AS CHAR),
  251. IFNULL(bom_number, ''),
  252. COALESCE(NULLIF(ItemNum, ''), NULLIF(PMBOM, ''), CONCAT('WORKORDTEMP-', IFNULL(RowNum, 0))),
  253. IFNULL(QtyRequired, 0),
  254. IFNULL(QtyFrom, 0),
  255. IFNULL(QtyRec, 0),
  256. IFNULL(available, 0),
  257. IFNULL(ztsl, 0),
  258. IFNULL(PurOrdQty, 0),
  259. IFNULL(shortage, 0),
  260. CASE WHEN IFNULL(shortage, 0) > 0 THEN 'SHORTAGE' ELSE 'READY' END,
  261. COALESCE(jhshrq, hfjq, RecDate),
  262. supplier_number,
  263. CONCAT(IFNULL(workord,''), '|', IFNULL(Op, 0), '|', IFNULL(ItemNum,''), '|', IFNULL(RowNum, 0)),
  264. @batch_id,
  265. @sync_time
  266. FROM WorkOrdTemp
  267. WHERE IFNULL(workord, '') <> ''
  268. ON DUPLICATE KEY UPDATE
  269. required_qty = VALUES(required_qty),
  270. issued_qty = VALUES(issued_qty),
  271. received_qty = VALUES(received_qty),
  272. available_qty = VALUES(available_qty),
  273. in_transit_qty = VALUES(in_transit_qty),
  274. incoming_qty = VALUES(incoming_qty),
  275. shortage_qty = VALUES(shortage_qty),
  276. ready_status = VALUES(ready_status),
  277. need_date = VALUES(need_date),
  278. supplier_code = VALUES(supplier_code),
  279. sync_batch_id = VALUES(sync_batch_id),
  280. sync_time = VALUES(sync_time),
  281. update_time = CURRENT_TIMESTAMP;
  282. INSERT INTO dwd_material_readiness
  283. (tenant_id, stat_date, work_order, op_code, parent_item_code, component_item_code, component_item_name, required_qty, cumulative_required_qty, stock_available_qty, qc_pending_qty, in_transit_qty, delivery_reply_qty, available_qty, shortage_qty, ready_status, supplier_code, supplier_name, need_date, calc_batch_id, calc_time)
  284. SELECT
  285. 0,
  286. @stat_date,
  287. IFNULL(workord, ''),
  288. CAST(IFNULL(Op, 0) AS CHAR),
  289. IFNULL(bom_number, ''),
  290. COALESCE(NULLIF(ItemNum, ''), NULLIF(PMBOM, ''), CONCAT('WORKORDTEMP-', IFNULL(RowNum, 0))),
  291. IFNULL(ComponentItemDescr, ''),
  292. IFNULL(QtyRequired, 0),
  293. IFNULL(ljsl, 0),
  294. IFNULL(locStock, 0),
  295. IFNULL(jqsl, 0),
  296. IFNULL(ztsl, 0),
  297. IFNULL(PurOrdQty, 0),
  298. IFNULL(available, 0),
  299. IFNULL(shortage, 0),
  300. CASE WHEN IFNULL(shortage, 0) > 0 THEN 'SHORTAGE' ELSE 'READY' END,
  301. supplier_number,
  302. supplier_name,
  303. COALESCE(jhshrq, hfjq, RecDate),
  304. @batch_id,
  305. @sync_time
  306. FROM WorkOrdTemp
  307. WHERE IFNULL(workord, '') <> ''
  308. ON DUPLICATE KEY UPDATE
  309. component_item_name = VALUES(component_item_name),
  310. required_qty = VALUES(required_qty),
  311. cumulative_required_qty = VALUES(cumulative_required_qty),
  312. stock_available_qty = VALUES(stock_available_qty),
  313. qc_pending_qty = VALUES(qc_pending_qty),
  314. in_transit_qty = VALUES(in_transit_qty),
  315. delivery_reply_qty = VALUES(delivery_reply_qty),
  316. available_qty = VALUES(available_qty),
  317. shortage_qty = VALUES(shortage_qty),
  318. ready_status = VALUES(ready_status),
  319. supplier_code = VALUES(supplier_code),
  320. supplier_name = VALUES(supplier_name),
  321. need_date = VALUES(need_date),
  322. calc_time = VALUES(calc_time),
  323. update_time = CURRENT_TIMESTAMP;
  324. INSERT INTO dwd_material_shortage
  325. (tenant_id, stat_date, work_order, op_code, component_item_code, shortage_qty, shortage_reason, expected_supply_date, supplier_code, related_po_no, risk_level, calc_batch_id, calc_time)
  326. SELECT
  327. 0,
  328. @stat_date,
  329. IFNULL(workord, ''),
  330. CAST(IFNULL(Op, 0) AS CHAR),
  331. COALESCE(NULLIF(ItemNum, ''), NULLIF(PMBOM, ''), CONCAT('WORKORDTEMP-', IFNULL(RowNum, 0))),
  332. IFNULL(shortage, 0),
  333. '当前可用量不足',
  334. COALESCE(jhshrq, hfjq, RecDate),
  335. supplier_number,
  336. PurOrds,
  337. CASE
  338. WHEN IFNULL(shortage, 0) > IFNULL(QtyRequired, 0) THEN 'HIGH'
  339. WHEN IFNULL(shortage, 0) > 0 THEN 'MEDIUM'
  340. ELSE 'LOW'
  341. END,
  342. @batch_id,
  343. @sync_time
  344. FROM WorkOrdTemp
  345. WHERE IFNULL(workord, '') <> ''
  346. AND IFNULL(shortage, 0) > 0;