166 lines
11 KiB
SQL
166 lines
11 KiB
SQL
-- 应付价卡配置。目录里的一个产品一行,重量段和附加费挂在产品下面。
|
||
-- 表名使用 pay_ 前缀。可重复执行。
|
||
|
||
CREATE TABLE IF NOT EXISTS `pay_product` (
|
||
`product_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '产品ID',
|
||
`product_name` varchar(200) NOT NULL COMMENT '目录中的产品名称',
|
||
`product_type` varchar(30) DEFAULT NULL COMMENT '产品类型:AR:应收、AP:应付',
|
||
`country_scope` varchar(200) DEFAULT NULL COMMENT '目录中的国家或口岸',
|
||
`service_type` varchar(100) DEFAULT NULL COMMENT '服务类型',
|
||
`classification` varchar(100) DEFAULT NULL COMMENT '目录分类',
|
||
`catalog_remark` varchar(1000) DEFAULT NULL COMMENT '目录备注',
|
||
`update_content` varchar(500) DEFAULT NULL COMMENT '目录更新内容',
|
||
`weight_limit` varchar(100) DEFAULT NULL COMMENT '目录重量限制',
|
||
`sheet_name` varchar(200) NOT NULL COMMENT '报价工作表',
|
||
`related_sheet` varchar(500) DEFAULT NULL COMMENT '目录里一并指向的分区或附加表,不单独入库',
|
||
`source_file` varchar(500) NOT NULL COMMENT '来源文件名',
|
||
`file_path` varchar(500) DEFAULT NULL COMMENT '源文件OSS地址,oss://bucket/key',
|
||
`file_md5` char(32) NOT NULL COMMENT '来源文件MD5',
|
||
`supplier_name` varchar(100) DEFAULT NULL COMMENT '价卡归属,如威狮、易德、GWE',
|
||
`effective_date` date DEFAULT NULL COMMENT '价卡生效日',
|
||
`currency` varchar(20) DEFAULT NULL COMMENT '报价币种',
|
||
`service_note` varchar(4000) DEFAULT NULL COMMENT '报价表中的服务说明',
|
||
`parse_status` varchar(20) NOT NULL DEFAULT 'OK' COMMENT '识别结果:OK已识别 EMPTY未识别到配置 MISSING缺少工作表',
|
||
`weight_count` int(11) NOT NULL DEFAULT 0 COMMENT '重量段行数',
|
||
`surcharge_count` int(11) NOT NULL DEFAULT 0 COMMENT '附加费行数',
|
||
`extra_count` int(11) NOT NULL DEFAULT 0 COMMENT '邮编或其他配置行数',
|
||
`created_by` varchar(64) DEFAULT '' COMMENT '创建者',
|
||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||
`updated_by` varchar(64) DEFAULT '' COMMENT '更新者',
|
||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
|
||
PRIMARY KEY (`product_id`),
|
||
KEY `idx_pay_product_name` (`product_name`),
|
||
KEY `idx_pay_product_file` (`file_md5`, `sheet_name`),
|
||
KEY `idx_pay_product_effective` (`effective_date`),
|
||
KEY `idx_pay_product_supplier` (`supplier_name`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='应付价卡产品';
|
||
|
||
CREATE TABLE IF NOT EXISTS `pay_weight_band` (
|
||
`band_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '重量段ID',
|
||
`product_id` bigint(20) NOT NULL COMMENT '产品ID',
|
||
`version_no` int(11) NOT NULL DEFAULT 1 COMMENT '价卡版本,随产品版本变更',
|
||
`section_name` varchar(200) DEFAULT NULL COMMENT '报价区块,如派送费、偏远、额外线路',
|
||
`country_name` varchar(200) DEFAULT NULL COMMENT '国家',
|
||
`country_code` varchar(32) DEFAULT NULL COMMENT '国家二字码,多个用逗号',
|
||
`zone_name` varchar(200) DEFAULT NULL COMMENT '分区或价格列',
|
||
`weight_label` varchar(100) DEFAULT NULL COMMENT '重量段原文,如0<W≤1、首重1 Kg',
|
||
`weight_min` decimal(10,3) DEFAULT NULL COMMENT '重量下限KG',
|
||
`weight_max` decimal(10,3) DEFAULT NULL COMMENT '重量上限KG',
|
||
`volume_text` varchar(40) DEFAULT NULL COMMENT '体积上限,数字加单位,如10000cm³',
|
||
`charge_name` varchar(200) DEFAULT NULL COMMENT '费用项,如处理费、派送费、续重',
|
||
`price` decimal(12,4) DEFAULT NULL COMMENT '单价',
|
||
`price_unit` varchar(40) DEFAULT NULL COMMENT '单位,如EUR/ITEM、EUR/KG',
|
||
`sort_no` int(11) NOT NULL DEFAULT 0 COMMENT '排序',
|
||
PRIMARY KEY (`band_id`),
|
||
KEY `idx_pay_weight_product` (`product_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='应付产品重量段和起重配置';
|
||
|
||
CREATE TABLE IF NOT EXISTS `pay_surcharge` (
|
||
`surcharge_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '附加费ID',
|
||
`product_id` bigint(20) NOT NULL COMMENT '产品ID',
|
||
`version_no` int(11) NOT NULL DEFAULT 1 COMMENT '价卡版本,随产品版本变更',
|
||
`section_name` varchar(200) DEFAULT NULL COMMENT '附加费区块',
|
||
`fee_name` varchar(200) NOT NULL COMMENT '费用名称',
|
||
`zone_name` varchar(200) DEFAULT NULL COMMENT '适用分区,没有则空',
|
||
`charge_text` varchar(500) DEFAULT NULL COMMENT '收费标准原文',
|
||
`amount` decimal(12,4) DEFAULT NULL COMMENT '能解析出的金额或百分比',
|
||
`currency` varchar(20) DEFAULT NULL COMMENT '币种',
|
||
`price_unit` varchar(40) DEFAULT NULL COMMENT '货币和计费单位,如EUR/ITEM、RMB/KG、%',
|
||
`fee_desc` varchar(2000) DEFAULT NULL COMMENT '费用说明',
|
||
`period_text` varchar(500) DEFAULT NULL COMMENT '时效原文',
|
||
`effective_start` date DEFAULT NULL COMMENT '生效开始,空表示价卡期内一直有效',
|
||
`effective_end` date DEFAULT NULL COMMENT '生效结束',
|
||
`charge_timing` varchar(40) DEFAULT NULL COMMENT '收取时点:固定收取、产生时收取、旺季期间',
|
||
`sort_no` int(11) NOT NULL DEFAULT 0 COMMENT '排序',
|
||
PRIMARY KEY (`surcharge_id`),
|
||
KEY `idx_pay_surcharge_product` (`product_id`),
|
||
KEY `idx_pay_surcharge_period` (`effective_start`, `effective_end`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='应付产品附加费,含时效';
|
||
|
||
CREATE TABLE IF NOT EXISTS `pay_extra_line` (
|
||
`line_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '配置行ID',
|
||
`product_id` bigint(20) NOT NULL COMMENT '产品ID',
|
||
`line_type` varchar(20) NOT NULL COMMENT '行类型:邮编、配置',
|
||
`line_text` varchar(1000) NOT NULL COMMENT '原文,列之间用 | 分隔',
|
||
`sort_no` int(11) NOT NULL DEFAULT 0 COMMENT '排序',
|
||
PRIMARY KEY (`line_id`),
|
||
KEY `idx_pay_extra_product` (`product_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='应付产品上的邮编或其他配置原文';
|
||
|
||
CREATE TABLE IF NOT EXISTS `pay_product_fee_rule` (
|
||
`rule_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '规则ID',
|
||
`product_id` bigint(20) NOT NULL COMMENT '根产品编号,渠道应付绑定的产品,不是某一版导入的版本号',
|
||
`fee_name` varchar(100) NOT NULL COMMENT '附加费名称,对应价卡附加费行,用来取价',
|
||
`enabled` char(1) NOT NULL DEFAULT '0' COMMENT '1参与计算,0不参与',
|
||
`trigger_type` varchar(20) NOT NULL DEFAULT 'ALWAYS' COMMENT '触发类型:SIZE尺寸 VOLUME体积 WEIGHT重量 POSTCODE邮编 ALWAYS每票 RETURN退件',
|
||
`side_max_cm` decimal(10,2) DEFAULT NULL COMMENT '最长边上限,厘米,超出则命中',
|
||
`sum_max_cm` decimal(10,2) DEFAULT NULL COMMENT '长+宽+高上限,厘米,超出则命中',
|
||
`volume_max_cm3` decimal(14,2) DEFAULT NULL COMMENT '体积上限,立方厘米,长×宽×高超出则命中',
|
||
`min_length_cm` decimal(10,2) DEFAULT NULL COMMENT '最小长度,厘米,小于则命中',
|
||
`min_width_cm` decimal(10,2) DEFAULT NULL COMMENT '最小宽度,厘米,小于则命中',
|
||
`min_height_cm` decimal(10,2) DEFAULT NULL COMMENT '最小高度,厘米,小于则命中',
|
||
`weight_max_kg` decimal(10,3) DEFAULT NULL COMMENT '重量上限,千克,计费重超出则命中',
|
||
`join_mode` varchar(10) NOT NULL DEFAULT 'ANY' COMMENT 'ANY任一条超出就收,ALL写了的条件都超出才收',
|
||
`remark` varchar(500) DEFAULT NULL COMMENT '说明,不参与判断',
|
||
`created_by` varchar(64) DEFAULT '' COMMENT '创建者',
|
||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||
`updated_by` varchar(64) DEFAULT '' COMMENT '更新者',
|
||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||
PRIMARY KEY (`rule_id`),
|
||
UNIQUE KEY `uk_pay_fee_rule_product` (`product_id`, `fee_name`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='应付产品附加费开关';
|
||
|
||
-- 菜单挂在价格基础下面
|
||
SET @parentId := (
|
||
SELECT menu_id FROM sys_menu
|
||
WHERE path = 'basic' AND menu_type = 'M'
|
||
ORDER BY menu_id ASC LIMIT 1
|
||
);
|
||
SET @parentId := IFNULL(@parentId, (
|
||
SELECT parent_id FROM sys_menu
|
||
WHERE perms = 'price:product:list' OR component LIKE '%price/basic/product%'
|
||
ORDER BY menu_id ASC LIMIT 1
|
||
));
|
||
|
||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark)
|
||
SELECT '应付配置', @parentId, 16, 'pay', 'price/basic/pay/index', 1, 0, 'C', '0', '0', 'price:pay:list', 'money', 'admin', sysdate(), '应付价卡产品、重量段和附加费'
|
||
WHERE @parentId IS NOT NULL
|
||
AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'price:pay:list' OR component = 'price/basic/pay/index');
|
||
|
||
SET @menuId := (SELECT menu_id FROM sys_menu WHERE perms = 'price:pay:list' LIMIT 1);
|
||
|
||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time)
|
||
SELECT '应付配置查询', @menuId, 1, '', '', 1, 0, 'F', '0', '0', 'price:pay:query', '#', 'admin', sysdate()
|
||
WHERE @menuId IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'price:pay:query');
|
||
|
||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time)
|
||
SELECT '应付配置导入', @menuId, 2, '', '', 1, 0, 'F', '0', '0', 'price:pay:import', '#', 'admin', sysdate()
|
||
WHERE @menuId IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'price:pay:import');
|
||
|
||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time)
|
||
SELECT '应付配置删除', @menuId, 3, '', '', 1, 0, 'F', '0', '0', 'price:pay:remove', '#', 'admin', sysdate()
|
||
WHERE @menuId IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'price:pay:remove');
|
||
|
||
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time)
|
||
SELECT '应付配置导出', @menuId, 4, '', '', 1, 0, 'F', '0', '0', 'price:pay:export', '#', 'admin', sysdate()
|
||
WHERE @menuId IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'price:pay:export');
|
||
|
||
-- 已经能维护价格基础的角色,同步拿到应付配置菜单
|
||
INSERT INTO sys_role_menu (role_id, menu_id)
|
||
SELECT DISTINCT rm.role_id, m.menu_id
|
||
FROM sys_role_menu rm
|
||
JOIN sys_menu src ON src.menu_id = rm.menu_id AND src.perms = 'price:product:list'
|
||
JOIN sys_menu m ON m.perms LIKE 'price:pay:%'
|
||
WHERE NOT EXISTS (
|
||
SELECT 1 FROM sys_role_menu x WHERE x.role_id = rm.role_id AND x.menu_id = m.menu_id
|
||
);
|
||
|
||
INSERT INTO sys_role_menu (role_id, menu_id)
|
||
SELECT 1, m.menu_id
|
||
FROM sys_menu m
|
||
WHERE m.perms LIKE 'price:pay:%'
|
||
AND NOT EXISTS (
|
||
SELECT 1 FROM sys_role_menu x WHERE x.role_id = 1 AND x.menu_id = m.menu_id
|
||
);
|