-- 应付价卡配置。目录里的一个产品一行,重量段和附加费挂在产品下面。 -- 表名使用 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='应付产品上的邮编或其他配置原文'; -- 菜单挂在价格基础下面 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 );