增加产品导入功能
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
-- 产品主数据(来源:威狮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 '目录生效日期',
|
||||
status char(1) NOT NULL DEFAULT '0' COMMENT '0正常 1停用',
|
||||
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 '',
|
||||
created_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
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),
|
||||
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_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(含)',
|
||||
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 '产品价表生效日期',
|
||||
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 (product_code, country_name, weight_min, weight_max),
|
||||
KEY idx_country_code (country_code),
|
||||
KEY idx_weight_match (product_code, country_code, weight_min, weight_max),
|
||||
CONSTRAINT fk_product_country_code FOREIGN KEY (product_code) REFERENCES bms_product (product_code) ON DELETE CASCADE ON UPDATE CASCADE
|
||||
) 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);
|
||||
|
||||
-- 菜单:挂在价格基础 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);
|
||||
@@ -0,0 +1,13 @@
|
||||
-- 已存在 bms_product_country 时升级:增加重量段最小/最大值,便于后续按重量匹配
|
||||
-- 执行后请重新在「产品列表」导入 Excel(旧数据一行一国 → 新数据按重量段多行)
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
ALTER TABLE bms_product_country
|
||||
ADD COLUMN weight_min decimal(10,3) DEFAULT NULL COMMENT '重量段最小值KG(含)' AFTER country_code,
|
||||
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),
|
||||
ADD KEY idx_weight_match (product_code, country_code, weight_min, weight_max);
|
||||
Reference in New Issue
Block a user