-- redline_product / redline_product_country: mirror of product / product_country -- Run once on existing DB CREATE TABLE IF NOT EXISTS `redline_product` ( `product_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '红线价产品ID', `product_code` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '产品对接代码,如 WSP037', `product_name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '产品名称', `service_level` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '时效等级', `cargo_attr` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '走货属性', `dest_region` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的区域', `update_note` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '更新内容说明', `tax_mode` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'TAX_INCLUDED' COMMENT 'TAX_INCLUDED包税 TAX_EXCLUDED不包税', `effective_date` datetime DEFAULT NULL COMMENT '目录生效时间(到小时)', `expire_date` datetime DEFAULT NULL COMMENT '失效时间(空=长期)', `status` char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0' COMMENT '0待生效 1已生效 2已失效', `is_del` char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0' COMMENT '是否删除 0未删除 1已删除', `source_sheet` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '来源Excel sheet名', `pef_id` bigint(20) DEFAULT NULL COMMENT '关联导入价表Excel附件 prc_price_excel_file.pef_id', `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `tms_id` int(11) DEFAULT NULL COMMENT '多租户ID', `created_by` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, `updated_by` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`product_id`) USING BTREE, UNIQUE KEY `uk_redline_product_code_eff_is_del` (`product_code`,`effective_date`,`is_del`), KEY `idx_redline_tax_status` (`tax_mode`,`status`) USING BTREE, KEY `idx_redline_product_code` (`product_code`), KEY `idx_redline_product_pef_id` (`pef_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='红线价产品主表'; CREATE TABLE IF NOT EXISTS `redline_product_country` ( `detail_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '明细ID', `product_id` bigint(20) DEFAULT NULL COMMENT '红线价产品ID redline_product.product_id', `product_code` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '产品代码', `country_name` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '国家中文名', `country_code` char(2) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'ISO2', `zone_id` bigint(20) DEFAULT NULL COMMENT 'prc_zone.zone_id', `zone_code` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `zone_name` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `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) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `last_mile` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `lead_time` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `effective_date` datetime DEFAULT NULL COMMENT '生效时间(到小时)', `expire_date` datetime DEFAULT NULL COMMENT '失效时间(空=开放)', `status` char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0' COMMENT '0待生效 1已生效 2已失效', `is_del` char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0' COMMENT '是否删除 0未删除 1已删除', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`detail_id`) USING BTREE, UNIQUE KEY `uk_redline_country_zone_weight_eff_is_del` (`product_code`,`country_name`,`zone_code`,`weight_min`,`weight_max`,`effective_date`,`is_del`), KEY `idx_redline_country_code` (`country_code`) USING BTREE, KEY `idx_redline_weight_match` (`product_code`,`country_code`,`weight_min`,`weight_max`) USING BTREE, KEY `idx_redline_product_eff` (`product_code`,`effective_date`,`expire_date`), KEY `idx_redline_country_pid` (`product_id`), KEY `idx_redline_country_zone` (`zone_id`), CONSTRAINT `fk_redline_country_pid` FOREIGN KEY (`product_id`) REFERENCES `redline_product` (`product_id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='红线价国家服务明细'; -- Menu: under 价栶基础 parent (lookup by path price/basic or menu_name) -- Adjust @parentId if your env differs 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 )); -- skip insert if already exists SET @exists := ( SELECT COUNT(1) FROM sys_menu WHERE perms = 'price:redline:list' OR component = 'price/basic/redline/index' ); -- Only insert when parent found and not exists 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, 15, 'redline', 'price/basic/redline/index', 1, 0, 'C', '0', '0', 'price:redline:list', 'money', 'admin', sysdate(), '红线价目录' WHERE @parentId IS NOT NULL AND @exists = 0; SET @menuId := (SELECT menu_id FROM sys_menu WHERE perms = 'price:redline: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:redline:query', '#', 'admin', sysdate() WHERE @menuId IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'price:redline: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:redline:add', '#', 'admin', sysdate() WHERE @menuId IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'price:redline:add'); 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:redline:edit', '#', 'admin', sysdate() WHERE @menuId IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'price:redline:edit'); 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:redline:remove', '#', 'admin', sysdate() WHERE @menuId IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'price:redline: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, 5, '', '', 1, 0, 'F', '0', '0', 'price:redline:import', '#', 'admin', sysdate() WHERE @menuId IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'price:redline:import');