Files
BMS/bms-back/sql/price/product_expire_status_alter.sql
T
2026-09-09 17:06:50 +08:00

59 lines
2.9 KiB
SQL

-- 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');