| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- -- 1.0.521.verify.sql — 每条 SELECT 都必须返回 1
- -- ── ① 两个销售订单实体已声明为 FULL(这是「最新批次 = 源侧现存」成立的前提)──────────
- SELECT (SELECT COUNT(*) FROM `mdp_entity`
- WHERE `entity_code` IN ('S1_SEORDER','S1_SEORDER_ENTRY')
- AND `sync_mode` = 'FULL') = 2;
- -- 声明为 FULL 后不得再残留增量水位列,否则语义自相矛盾
- SELECT (SELECT COUNT(*) FROM `mdp_entity`
- WHERE `entity_code` IN ('S1_SEORDER','S1_SEORDER_ENTRY')
- AND `incr_column` IS NOT NULL) = 0;
- -- ── ② 标准层不得再有「不在贴源最新批次里」的订单行(孤儿已清空)────────────────────
- -- 与迁移同一判据,且同样带「该租户贴源确实有数据」的闸门。
- SELECT (SELECT COUNT(*) FROM `mdp_std_so` s
- WHERE s.`source_table` = 'crm_seorderentry'
- AND EXISTS (SELECT 1 FROM `mdp_stg_so` g
- WHERE g.`source_table` = 'crm_seorderentry'
- AND g.`tenant_id` = s.`tenant_id`)
- AND NOT EXISTS (
- SELECT 1 FROM `mdp_stg_so` lb
- WHERE lb.`source_table` = 'crm_seorderentry'
- AND lb.`tenant_id` = s.`tenant_id`
- AND lb.`source_biz_key` = s.`source_biz_key`
- AND lb.`sync_batch_id` = (SELECT x.`sync_batch_id` FROM `mdp_stg_so` x
- WHERE x.`source_table` = 'crm_seorderentry'
- AND x.`tenant_id` = s.`tenant_id`
- ORDER BY x.`sync_time` DESC, x.`id` DESC
- LIMIT 1))) = 0;
- -- ── ③ 清理不得误伤:贴源最新批次里的行必须都还在标准层 ──────────────────────────────
- -- 反向断言,防止「把孤儿连同存活行一起删干净」也能通过 ② 的情况。
- SELECT (SELECT COUNT(*) FROM `mdp_stg_so` lb
- WHERE lb.`source_table` = 'crm_seorderentry'
- AND lb.`sync_batch_id` = (SELECT x.`sync_batch_id` FROM `mdp_stg_so` x
- WHERE x.`source_table` = 'crm_seorderentry'
- AND x.`tenant_id` = lb.`tenant_id`
- ORDER BY x.`sync_time` DESC, x.`id` DESC
- LIMIT 1)
- AND IFNULL(JSON_UNQUOTE(JSON_EXTRACT(lb.`raw_data`,'$.bill_no')),'') <> ''
- AND NOT EXISTS (SELECT 1 FROM `mdp_std_so` s
- WHERE s.`source_table` = 'crm_seorderentry'
- AND s.`tenant_id` = lb.`tenant_id`
- AND s.`source_biz_key` = lb.`source_biz_key`)) = 0;
- -- ── ④ 标准层的唯一键未被本批动过(隔离列必须仍在)──────────────────────────────────
- SELECT IFNULL((SELECT GROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX)
- FROM information_schema.STATISTICS
- WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'mdp_std_so'
- AND INDEX_NAME = 'uk_source_key' AND NON_UNIQUE = 0), '')
- = 'tenant_id,source_system,source_table,source_biz_key';
|