-- bms_product 增加失效日期;产品/国家明细 status:0待生效 1已生效 2已失效 SET NAMES utf8mb4; -- 1) 产品主表增加 expire_date ALTER TABLE bms_product ADD COLUMN expire_date date DEFAULT NULL COMMENT '产品失效日期(空=长期;下一版生效日=本版失效日)' AFTER effective_date; ALTER TABLE bms_product MODIFY COLUMN status char(1) NOT NULL DEFAULT '0' COMMENT '0待生效 1已生效 2已失效'; -- 2) 国家明细增加 status ALTER TABLE bms_product_country ADD COLUMN status char(1) NOT NULL DEFAULT '0' COMMENT '0待生效 1已生效 2已失效' AFTER expire_date; -- 3) 按同代码下一版生效日回填产品失效日 UPDATE bms_product p INNER JOIN ( SELECT p1.product_id, (SELECT MIN(p2.effective_date) FROM bms_product p2 WHERE p2.product_code = p1.product_code AND p2.effective_date IS NOT NULL AND p1.effective_date IS NOT NULL AND p2.effective_date > p1.effective_date) AS next_eff FROM bms_product p1 ) t ON t.product_id = p.product_id SET p.expire_date = t.next_eff WHERE p.expire_date IS NULL AND t.next_eff IS NOT NULL; -- 4) 按生效/失效日期回写 status UPDATE bms_product SET status = CASE WHEN expire_date IS NOT NULL AND expire_date <= CURDATE() THEN '2' WHEN effective_date IS NULL OR effective_date > CURDATE() THEN '0' ELSE '1' END; UPDATE bms_product_country SET status = CASE WHEN expire_date IS NOT NULL AND expire_date <= CURDATE() THEN '2' WHEN effective_date IS NULL OR effective_date > CURDATE() THEN '0' ELSE '1' END; -- 5) 字典值 ACTIVE/PENDING/EXPIRED 改为 1/0/2 DELETE FROM sys_dict_data WHERE dict_type = 'bms_product_effect_status' AND dict_value IN ('ACTIVE', 'PENDING', 'EXPIRED'); INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark) SELECT 1, N'已生效', '1', 'bms_product_effect_status', '', 'success', 'Y', '0', 'admin', sysdate(), N'1 已生效' FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM sys_dict_data WHERE dict_type = 'bms_product_effect_status' AND dict_value = '1'); INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark) SELECT 2, N'待生效', '0', 'bms_product_effect_status', '', 'warning', 'N', '0', 'admin', sysdate(), N'0 待生效' FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM sys_dict_data WHERE dict_type = 'bms_product_effect_status' AND dict_value = '0'); INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark) SELECT 3, N'已失效', '2', 'bms_product_effect_status', '', 'info', 'N', '0', 'admin', sysdate(), N'2 已失效' FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM sys_dict_data WHERE dict_type = 'bms_product_effect_status' AND dict_value = '2');