87 lines
7.4 KiB
SQL
87 lines
7.4 KiB
SQL
-- 产品主数据(来源:威狮B2C小包价表.xlsx)
|
||
-- 导入范围:产品目录 + 各产品 sheet 国家×重量段(运费/挂号费/尺寸/尾程/时效)
|
||
-- 不导入:退件重派、申报说明、赔偿标准
|
||
SET NAMES utf8mb4;
|
||
|
||
CREATE TABLE IF NOT EXISTS bms_product (
|
||
product_id bigint NOT NULL AUTO_INCREMENT COMMENT '产品ID',
|
||
product_code varchar(20) NOT NULL COMMENT '产品对接代码,如 WSP037',
|
||
product_name varchar(100) NOT NULL COMMENT '产品名称',
|
||
service_level varchar(20) DEFAULT NULL COMMENT '时效等级:标准等',
|
||
cargo_attr varchar(100) DEFAULT NULL COMMENT '走货属性:普货/F普货/带电/敏感等',
|
||
dest_region varchar(50) DEFAULT NULL COMMENT '目的区域:欧盟等',
|
||
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 '目录生效日期',
|
||
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',
|
||
created_by varchar(50) NOT NULL DEFAULT '',
|
||
create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
updated_by varchar(50) NOT NULL DEFAULT '',
|
||
update_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
PRIMARY KEY (product_id),
|
||
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,可空待补齐',
|
||
weight_min decimal(10,3) DEFAULT NULL COMMENT '重量段最小值KG(含)',
|
||
weight_max decimal(10,3) DEFAULT NULL COMMENT '重量段最大值KG(含)',
|
||
freight_price decimal(10,4) DEFAULT NULL COMMENT '运费 RMB/KG',
|
||
registration_fee decimal(10,2) DEFAULT NULL COMMENT '挂号费 RMB/票',
|
||
size_limit varchar(1000) DEFAULT NULL COMMENT '尺寸限制',
|
||
last_mile varchar(500) DEFAULT NULL COMMENT '尾程派送说明',
|
||
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已失效',
|
||
create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
update_time 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)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='产品国家明细-重量段+运费挂号费+尺寸/尾程/时效';
|
||
|
||
-- 已建表升级(幂等:列已存在时跳过报错可忽略)
|
||
-- ALTER TABLE bms_product_country ADD COLUMN weight_min decimal(10,3) DEFAULT NULL COMMENT '重量段最小值KG(含)' AFTER country_code;
|
||
-- ALTER TABLE bms_product_country ADD COLUMN weight_max decimal(10,3) DEFAULT NULL COMMENT '重量段最大值KG(含)' AFTER weight_min;
|
||
-- ALTER TABLE bms_product_country DROP INDEX uk_product_country;
|
||
-- ALTER TABLE bms_product_country ADD UNIQUE KEY uk_product_country_weight (product_code, country_name, weight_min, weight_max);
|
||
-- ALTER TABLE bms_product_country ADD KEY idx_weight_match (product_code, country_code, weight_min, weight_max);
|
||
-- 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)
|
||
SELECT 2130, N'产品列表', 2100, 0, 'product', 'price/basic/product/index', '', 'PriceProduct', 1, 0, 'C', '0', '0', 'price:product:list', 'shopping', 'admin', sysdate(), N'产品目录与国家服务明细'
|
||
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_id=2130);
|
||
|
||
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time)
|
||
SELECT 2131, N'产品查询', 2130, 1, '', NULL, 1, 0, 'F', '0', '0', 'price:product:query', '#', 'admin', sysdate() FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_id=2131);
|
||
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time)
|
||
SELECT 2132, N'产品新增', 2130, 2, '', NULL, 1, 0, 'F', '0', '0', 'price:product:add', '#', 'admin', sysdate() FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_id=2132);
|
||
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time)
|
||
SELECT 2133, N'产品修改', 2130, 3, '', NULL, 1, 0, 'F', '0', '0', 'price:product:edit', '#', 'admin', sysdate() FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_id=2133);
|
||
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time)
|
||
SELECT 2134, N'产品删除', 2130, 4, '', NULL, 1, 0, 'F', '0', '0', 'price:product:remove', '#', 'admin', sysdate() FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_id=2134);
|
||
INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time)
|
||
SELECT 2135, N'产品导入', 2130, 5, '', NULL, 1, 0, 'F', '0', '0', 'price:product:import', '#', 'admin', sysdate() FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_id=2135);
|
||
|
||
INSERT INTO sys_role_menu(role_id, menu_id)
|
||
SELECT 1, m.menu_id FROM (SELECT 2130 AS menu_id UNION SELECT 2131 UNION SELECT 2132 UNION SELECT 2133 UNION SELECT 2134 UNION SELECT 2135) m
|
||
WHERE NOT EXISTS (SELECT 1 FROM sys_role_menu rm WHERE rm.role_id=1 AND rm.menu_id=m.menu_id);
|