1.0.539.warnings.ops.sql 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. -- 1.0.539.warnings.ops.sql — GLOBAL HYGIENE WARNINGS(只观测,不阻断)
  2. --
  3. -- ⚠️ 本文件【不是】verify。AutoVersionUpdate 不执行 .ops.sql,只执行 <version>.sql
  4. -- 与 <version>.verify.sql。这里放的是「本批 writer 管不到、但值得盯」的全库卫生项。
  5. -- 人工执行:mysql <conn> < 1.0.539.warnings.ops.sql
  6. --
  7. -- 为什么不放进 verify:runner 对 verify 的每个切片都要求返回 1,没有"告警"这一档。
  8. -- 把这两项写成 verify 断言,等于让本批为边界外 writer 的行为背书,一旦对方回归就
  9. -- 阻断本批迁移、拖垮后端启动 —— 那是错误的责任划分,不是更严格。
  10. --
  11. -- 两项都【不影响】Stage-3 身份桥,身份桥完全不经过它们:
  12. -- PO.purchase_request_no → PR.pr_no → PR.sales_order_entry_id → mdp_std_so.order_entry_id
  13. -- ── WARN_GLOBAL_RECEIPT_INVALID_TENANT ─────────────────────────────────────────────
  14. -- 写入者已定位:Plugins/Admin.NET.Plugin.AiDOP/MaterialWarehouse/PurchaseReceiptMdpSyncService.cs
  15. -- 批次前缀 S5_PUR_RCT_STD_,属 S5 模块边界(CLAUDE.md 第九节模块边界表)
  16. -- 本批只对该表加了 idx_std_rct_po,未接管其写入
  17. SELECT 'WARN_GLOBAL_RECEIPT_INVALID_TENANT' AS `WARNING_CODE`,
  18. 'mdp_std_purchase_receipt' AS `TABLE_NAME`,
  19. `tenant_id` AS `TENANT`,
  20. COUNT(*) AS `CNT`,
  21. MAX(`sync_batch_id`) AS `LAST_WRITER_BATCH`,
  22. MAX(`update_time`) AS `LAST_WRITE_AT`
  23. FROM `mdp_std_purchase_receipt`
  24. WHERE `tenant_id` IS NULL OR `tenant_id` <= 0
  25. GROUP BY `tenant_id`;
  26. -- ── WARN_GLOBAL_PO_LITERAL_NULL ────────────────────────────────────────────────────
  27. -- mdp_std_purchase_order.work_order 是本批之前就存在的列,本批只做过一次性归一。
  28. -- 实测:租户 838 的 S3_MDP_FULL 批次里,贴源层同批次、同 source_biz_key 的
  29. -- NULLIF(NULLIF(JSON_UNQUOTE(JSON_EXTRACT(raw_data,'$.WorkOrd')),'null'),'')
  30. -- 求值结果为 NULL,标准层却仍出现字面量 —— 该值不可能由当前标准层 INSERT 在该批次
  31. -- 产生,写入者尚未定位。登记为 KNOWN ISSUE,不在本批处理。
  32. -- 该列【不作 Stage-3 归因】,归因走 purchase_request_no。
  33. SELECT 'WARN_GLOBAL_PO_LITERAL_NULL' AS `WARNING_CODE`,
  34. 'mdp_std_purchase_order' AS `TABLE_NAME`,
  35. `tenant_id` AS `TENANT`,
  36. COUNT(*) AS `CNT`,
  37. MAX(`sync_batch_id`) AS `LAST_WRITER_BATCH`,
  38. MAX(`update_time`) AS `LAST_WRITE_AT`
  39. FROM `mdp_std_purchase_order`
  40. WHERE `work_order` IN ('null', '')
  41. GROUP BY `tenant_id`;