-- ============================================================ -- bms_product / bms_product_country 自动状态回填 -- ============================================================ -- 背景: -- bms_product.status char(1) DEFAULT '0' COMMENT '0待生效 1已生效 2已失效' -- bms_product_country.status char(1) DEFAULT '0' COMMENT '0待生效 1已生效 2已失效' -- 字典 bms_product_effect_status value=ACTIVE/PENDING/EXPIRED -- 自动刷新: -- BmsStatusRefreshTask 每天 02:00 调用两表 Mapper.refreshStatusByDates() -- 即本文件末尾的回填 SQL(每日定时跑同样效果) -- 现状验证: -- bms_product.status 当前值仅 '0' / '1'('2' = EXPIRED 尚未触发,因今天 2026-09-09 -- 还没到任一 expire_date);bms_product_country.status 同上 -- ============================================================ SET NAMES utf8mb4; -- ---------- 一次性回填(幂等:重跑结果一致) ---------- -- bms_product: -- expire_date 非空且 <= 今天 → '2' 已失效 -- effective_date 为空 / 未来 → '0' 待生效 -- 其余(已生效且仍在有效期) → '1' 已生效 UPDATE bms_product p SET p.status = ( CASE WHEN p.expire_date IS NOT NULL AND p.expire_date <= CURDATE() THEN '2' WHEN p.effective_date IS NULL OR p.effective_date > CURDATE() THEN '0' ELSE '1' END ); -- bms_product_country:同上规则(多了 detail 级过期判断) UPDATE bms_product_country c SET c.status = ( CASE WHEN c.expire_date IS NOT NULL AND c.expire_date <= CURDATE() THEN '2' WHEN c.effective_date IS NULL OR c.effective_date > CURDATE() THEN '0' ELSE '1' END );