修改产品价格显示
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
-- prc_customer_price_set:一个客户只能绑定一个套餐
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
ALTER TABLE prc_customer_price_set
|
||||
ADD UNIQUE KEY uk_customer_one_set (customer_id);
|
||||
@@ -1,6 +1,6 @@
|
||||
-- BMS product effect status dict
|
||||
-- dict_type: bms_product_effect_status
|
||||
-- values: ACTIVE / PENDING / EXPIRED
|
||||
-- values: 1 active / 0 pending / 2 expired
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
INSERT INTO sys_dict_type (dict_name, dict_type, status, create_by, create_time, remark)
|
||||
@@ -8,13 +8,13 @@ SELECT N'产品生效状态', 'bms_product_effect_status', '0', 'admin', sysdate
|
||||
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM sys_dict_type WHERE dict_type = 'bms_product_effect_status');
|
||||
|
||||
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'已生效', 'ACTIVE', 'bms_product_effect_status', '', 'success', 'N', '0', 'admin', sysdate(), N'启用且生效日期<=今天'
|
||||
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM sys_dict_data WHERE dict_type = 'bms_product_effect_status' AND dict_value = 'ACTIVE');
|
||||
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'待生效', 'PENDING', 'bms_product_effect_status', '', 'warning', 'N', '0', 'admin', sysdate(), N'启用且生效日期为空或>今天'
|
||||
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM sys_dict_data WHERE dict_type = 'bms_product_effect_status' AND dict_value = 'PENDING');
|
||||
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'已失效', 'EXPIRED', 'bms_product_effect_status', '', 'info', 'N', '0', 'admin', sysdate(), N'手动标记失效 status=1'
|
||||
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM sys_dict_data WHERE dict_type = 'bms_product_effect_status' AND dict_value = 'EXPIRED');
|
||||
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');
|
||||
|
||||
@@ -72,6 +72,7 @@ CREATE TABLE IF NOT EXISTS prc_customer_price_set (
|
||||
updated_by VARCHAR(64) DEFAULT '' COMMENT '更新人',
|
||||
updated_at DATETIME DEFAULT NULL COMMENT '更新时间',
|
||||
PRIMARY KEY (customer_priceset_id),
|
||||
UNIQUE KEY uk_customer_one_set (customer_id),
|
||||
INDEX idx_customer_set (customer_id, pr_begindate, pr_enddate),
|
||||
INDEX idx_cps_set (price_set_id),
|
||||
CONSTRAINT fk_customer_price_set FOREIGN KEY (price_set_id) REFERENCES prc_price_set (price_set_id) ON DELETE RESTRICT
|
||||
|
||||
@@ -13,7 +13,8 @@ CREATE TABLE IF NOT EXISTS bms_product (
|
||||
update_note varchar(500) DEFAULT NULL COMMENT '更新内容说明',
|
||||
tax_mode varchar(20) NOT NULL DEFAULT 'TAX_INCLUDED' COMMENT 'TAX_INCLUDED包税 TAX_EXCLUDED不包税',
|
||||
effective_date date DEFAULT NULL COMMENT '目录生效日期',
|
||||
status char(1) NOT NULL DEFAULT '0' COMMENT '0正常 1停用',
|
||||
expire_date date DEFAULT NULL COMMENT '产品失效日期(空=长期;下一版生效日=本版失效日)',
|
||||
status char(1) NOT NULL DEFAULT '0' COMMENT '0待生效 1已生效 2已失效',
|
||||
source_sheet varchar(100) DEFAULT NULL COMMENT '来源Excel sheet名',
|
||||
remark varchar(500) DEFAULT NULL,
|
||||
tms_id int DEFAULT NULL COMMENT '多租户ID',
|
||||
@@ -22,12 +23,14 @@ CREATE TABLE IF NOT EXISTS bms_product (
|
||||
updated_by varchar(50) NOT NULL DEFAULT '',
|
||||
updated_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (product_id),
|
||||
UNIQUE KEY uk_product_code (product_code),
|
||||
UNIQUE KEY uk_product_code_eff (product_code, effective_date),
|
||||
KEY idx_product_code (product_code),
|
||||
KEY idx_tax_status (tax_mode, status)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='BMS产品主表-来自产品目录';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS bms_product_country (
|
||||
detail_id bigint NOT NULL AUTO_INCREMENT COMMENT '明细ID',
|
||||
product_id bigint DEFAULT NULL COMMENT '产品ID(bms_product.product_id)',
|
||||
product_code varchar(20) NOT NULL COMMENT '产品代码',
|
||||
country_name varchar(50) NOT NULL COMMENT '国家中文名',
|
||||
country_code char(2) DEFAULT NULL COMMENT 'ISO2,可空待补齐',
|
||||
@@ -40,14 +43,15 @@ CREATE TABLE IF NOT EXISTS bms_product_country (
|
||||
lead_time varchar(100) DEFAULT NULL COMMENT '参考时效',
|
||||
effective_date date DEFAULT NULL COMMENT '产品价表生效日期',
|
||||
expire_date date DEFAULT NULL COMMENT '失效日期(空=长期;新导入生效日=上一版失效日)',
|
||||
status char(1) NOT NULL DEFAULT '0' COMMENT '0待生效 1已生效 2已失效',
|
||||
created_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (detail_id),
|
||||
UNIQUE KEY uk_product_country_weight_eff (product_code, country_name, weight_min, weight_max, effective_date),
|
||||
KEY idx_product_country_pid (product_id),
|
||||
KEY idx_country_code (country_code),
|
||||
KEY idx_weight_match (product_code, country_code, weight_min, weight_max),
|
||||
KEY idx_product_eff (product_code, effective_date, expire_date),
|
||||
CONSTRAINT fk_product_country_code FOREIGN KEY (product_code) REFERENCES bms_product (product_code) ON DELETE CASCADE ON UPDATE CASCADE
|
||||
KEY idx_product_eff (product_code, effective_date, expire_date)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='产品国家明细-重量段+运费挂号费+尺寸/尾程/时效';
|
||||
|
||||
-- 已建表升级(幂等:列已存在时跳过报错可忽略)
|
||||
@@ -59,6 +63,7 @@ CREATE TABLE IF NOT EXISTS bms_product_country (
|
||||
-- ALTER TABLE bms_product_country ADD COLUMN expire_date date DEFAULT NULL COMMENT '失效日期' AFTER effective_date;
|
||||
-- ALTER TABLE bms_product_country DROP INDEX uk_product_country_weight;
|
||||
-- ALTER TABLE bms_product_country ADD UNIQUE KEY uk_product_country_weight_eff (product_code, country_name, weight_min, weight_max, effective_date);
|
||||
-- product_id: run product_country_product_id_alter.sql
|
||||
|
||||
-- 菜单:挂在价格基础 2100 下(order_num=0 置顶)
|
||||
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, query, route_name, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark)
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
-- ----------------------------
|
||||
-- bms_product:产品代码不单独唯一
|
||||
-- 唯一键改为 (product_code, effective_date)
|
||||
-- 导入:相同代码+相同生效日不覆盖;不同生效日新增一行
|
||||
-- ----------------------------
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
-- 1) 国家明细外键依赖 uk_product_code,必须先删
|
||||
ALTER TABLE bms_product_country DROP FOREIGN KEY fk_product_country_code;
|
||||
|
||||
-- 2) 删除产品代码单列唯一
|
||||
ALTER TABLE bms_product DROP INDEX uk_product_code;
|
||||
|
||||
-- 3) 按代码+生效日期唯一
|
||||
ALTER TABLE bms_product
|
||||
ADD UNIQUE KEY uk_product_code_eff (product_code, effective_date);
|
||||
|
||||
-- 4) 保留产品代码查询索引
|
||||
ALTER TABLE bms_product
|
||||
ADD KEY idx_product_code (product_code);
|
||||
@@ -0,0 +1,27 @@
|
||||
-- bms_product_country:增加 bms_product.product_id,明细绑定到具体产品版本行
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
-- 1) 新增 product_id 列
|
||||
ALTER TABLE bms_product_country
|
||||
ADD COLUMN product_id bigint DEFAULT NULL COMMENT '产品ID(bms_product.product_id,绑定具体产品版本行)' AFTER detail_id;
|
||||
|
||||
-- 2) 按 product_code + effective_date 回填既有明细
|
||||
UPDATE bms_product_country c
|
||||
INNER JOIN bms_product p
|
||||
ON p.product_code = c.product_code
|
||||
AND (
|
||||
(p.effective_date IS NULL AND c.effective_date IS NULL)
|
||||
OR p.effective_date = c.effective_date
|
||||
)
|
||||
SET c.product_id = p.product_id
|
||||
WHERE c.product_id IS NULL;
|
||||
|
||||
-- 3) 索引
|
||||
ALTER TABLE bms_product_country
|
||||
ADD KEY idx_product_country_pid (product_id);
|
||||
|
||||
-- 4) 外键(删除产品时级联删除明细;若已存在或有孤儿数据报错可忽略)
|
||||
ALTER TABLE bms_product_country
|
||||
ADD CONSTRAINT fk_product_country_pid
|
||||
FOREIGN KEY (product_id) REFERENCES bms_product (product_id)
|
||||
ON DELETE CASCADE;
|
||||
@@ -0,0 +1,58 @@
|
||||
-- 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');
|
||||
Reference in New Issue
Block a user