应付账单初始化

This commit is contained in:
caojia
2026-11-04 16:04:38 +08:00
committed by liuminghui
parent 04be15deab
commit 51a89b18e1
90 changed files with 15661 additions and 6 deletions
+17
View File
@@ -0,0 +1,17 @@
-- 收付类型。字典 bms_pay_type。可重复执行。
SET NAMES utf8mb4;
INSERT INTO sys_dict_type (dict_name, dict_type, status, create_by, create_time, remark)
SELECT '收付类型', 'bms_pay_type', '0', 'admin', sysdate(), 'AR应收,AP应付'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM sys_dict_type WHERE dict_type = 'bms_pay_type');
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
SELECT v.dict_sort, v.dict_label, v.dict_value, 'bms_pay_type', '', 'default', v.is_default, '0', 'admin', sysdate(), v.remark
FROM (
SELECT 1 AS dict_sort, '应收' AS dict_label, 'AR' AS dict_value, 'N' AS is_default, '应收' AS remark
UNION ALL SELECT 2, '应付', 'AP', 'Y', '应付'
) v
WHERE NOT EXISTS (
SELECT 1 FROM sys_dict_data d
WHERE d.dict_type = 'bms_pay_type' AND d.dict_value = v.dict_value
);
+18
View File
@@ -0,0 +1,18 @@
-- 订单收费类型。字典 order_charge_type。可重复执行。
SET NAMES utf8mb4;
INSERT INTO sys_dict_type (dict_name, dict_type, status, create_by, create_time, remark)
SELECT '订单收费类型', 'order_charge_type', '0', 'admin', sysdate(), '订单收费类型'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM sys_dict_type WHERE dict_type = 'order_charge_type');
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
SELECT v.dict_sort, v.dict_label, v.dict_value, 'order_charge_type', '', 'default', 'N', '0', 'admin', sysdate(), v.remark
FROM (
SELECT 1 AS dict_sort, '续重计费' AS dict_label, '续重计费' AS dict_value, '首重之外按每公斤续重' AS remark
UNION ALL SELECT 2, '单票价', '单票价', '每个重量段收一票价格'
UNION ALL SELECT 3, '常规计重价', '常规计重价', '单价乘公斤再加挂号费'
) v
WHERE NOT EXISTS (
SELECT 1 FROM sys_dict_data d
WHERE d.dict_type = 'order_charge_type' AND d.dict_value = v.dict_value
);
+140
View File
@@ -0,0 +1,140 @@
-- 应付邮编配置。挂在数据管理下面。可重复执行。
-- 附加费按国家、费用名称、金额原文合并成一条;邮编行仍按 Excel 逐条保存。
SET NAMES utf8mb4;
CREATE TABLE IF NOT EXISTS `pay_postcode_group` (
`group_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '配置ID',
`source_file` varchar(500) NOT NULL COMMENT '来源文件名',
`file_md5` char(32) NOT NULL COMMENT '来源文件MD5',
`sheet_name` varchar(200) NOT NULL COMMENT '工作表',
`block_title` varchar(200) DEFAULT NULL COMMENT '表内区块标题,按Excel原文',
`config_kind` varchar(20) NOT NULL COMMENT 'ZONE邮编分区 FEE附加费',
`channel_name` varchar(100) DEFAULT NULL COMMENT '渠道名称,从Excel表头识别',
`country_name` varchar(100) DEFAULT NULL COMMENT '国家',
`country_code` varchar(20) DEFAULT NULL COMMENT '国家二字码',
`fee_name` varchar(200) DEFAULT NULL COMMENT '附加费名称,邮编分区可空',
`fee_text` varchar(200) DEFAULT NULL COMMENT '附加费金额原文。同国家同费用同原文只保留一条',
`line_count` int(11) NOT NULL DEFAULT 0 COMMENT '邮编行数',
`create_by` varchar(64) DEFAULT '' COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`group_id`),
KEY `idx_pay_postcode_group_file` (`file_md5`, `sheet_name`),
KEY `idx_pay_postcode_group_country` (`country_code`),
KEY `idx_pay_postcode_group_fee` (`fee_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='应付邮编配置:分区或合并后的附加费';
CREATE TABLE IF NOT EXISTS `pay_postcode_line` (
`line_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '邮编行ID',
`group_id` bigint(20) NOT NULL COMMENT '配置ID',
`country_name` varchar(100) DEFAULT NULL COMMENT '国家',
`country_code` varchar(20) DEFAULT NULL COMMENT '国家二字码',
`region_name` varchar(200) DEFAULT NULL COMMENT '州或地区,Excel原文',
`region_name_cn` varchar(200) DEFAULT NULL COMMENT '地区中文',
`city_name` varchar(200) DEFAULT NULL COMMENT '城市',
`region_code` varchar(50) DEFAULT NULL COMMENT '地区代码',
`zone_name` varchar(200) DEFAULT NULL COMMENT '分区,Excel原文',
`postcode` varchar(200) NOT NULL COMMENT '邮编,已去掉末尾星号',
`postcode_raw` varchar(200) DEFAULT NULL COMMENT '邮编原文',
`postcode_end` varchar(200) DEFAULT NULL COMMENT '截止邮编,已去掉末尾星号',
`extra_text` varchar(500) DEFAULT NULL COMMENT '其余列,从左到右用 | 连接',
`sort_no` int(11) NOT NULL DEFAULT 0 COMMENT 'Excel中的先后顺序',
PRIMARY KEY (`line_id`),
KEY `idx_pay_postcode_line_group` (`group_id`),
KEY `idx_pay_postcode_line_code` (`postcode`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='应付邮编明细,一行对应Excel一条邮编';
SET @parentId := (
SELECT menu_id FROM sys_menu
WHERE path = 'data' AND menu_type = 'M' AND parent_id = 0
ORDER BY menu_id ASC LIMIT 1
);
INSERT INTO sys_menu (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 '应付邮编配置', @parentId, 8, 'payPostcode', 'data/payPostcode/index', '', 'PayPostcode', 1, 0, 'C', '0', '0', 'data:payPostcode:list', 'international', 'admin', sysdate(), '按Excel导入应付邮编和附加费邮编'
FROM DUAL WHERE @parentId IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'data:payPostcode:list');
SET @menuId := (SELECT menu_id FROM sys_menu WHERE perms = 'data:payPostcode: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', 'data:payPostcode:query', '#', 'admin', sysdate()
FROM DUAL WHERE @menuId IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'data:payPostcode: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', 'data:payPostcode:import', '#', 'admin', sysdate()
FROM DUAL WHERE @menuId IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'data:payPostcode: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', 'data:payPostcode:edit', '#', 'admin', sysdate()
FROM DUAL WHERE @menuId IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'data:payPostcode: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', 'data:payPostcode:remove', '#', 'admin', sysdate()
FROM DUAL WHERE @menuId IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'data:payPostcode:remove');
SET @has_channel_name := (
SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'pay_postcode_group' AND COLUMN_NAME = 'channel_name'
);
SET @add_channel_name := IF(
@has_channel_name = 0,
'ALTER TABLE pay_postcode_group ADD COLUMN channel_name varchar(100) DEFAULT NULL COMMENT ''渠道名称,从Excel表头识别'' AFTER config_kind',
'SELECT 1'
);
PREPARE add_channel_name_stmt FROM @add_channel_name;
EXECUTE add_channel_name_stmt;
DEALLOCATE PREPARE add_channel_name_stmt;
SET @has_coverage := (
SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'pay_postcode_group' AND COLUMN_NAME = 'coverage'
);
SET @add_coverage := IF(
@has_coverage = 0,
'ALTER TABLE pay_postcode_group ADD COLUMN coverage varchar(20) DEFAULT NULL COMMENT ''REACH可达 UNREACH不可达 REMOTE偏远,普通分区为空'' AFTER config_kind',
'SELECT 1'
);
PREPARE add_coverage_stmt FROM @add_coverage;
EXECUTE add_coverage_stmt;
DEALLOCATE PREPARE add_coverage_stmt;
SET @has_service_type := (
SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'pay_postcode_group' AND COLUMN_NAME = 'service_type'
);
SET @add_service_type := IF(
@has_service_type = 0,
'ALTER TABLE pay_postcode_group ADD COLUMN service_type varchar(100) DEFAULT NULL COMMENT ''目录服务类型'' AFTER country_code, ADD COLUMN catalog_country varchar(100) DEFAULT NULL COMMENT ''目录国家,和邮编目的国分开'' AFTER service_type, ADD COLUMN product_name varchar(200) DEFAULT NULL COMMENT ''目录销售产品'' AFTER catalog_country, ADD COLUMN quote_sheet varchar(200) DEFAULT NULL COMMENT ''目录报价工作表'' AFTER product_name',
'SELECT 1'
);
PREPARE add_service_type_stmt FROM @add_service_type;
EXECUTE add_service_type_stmt;
DEALLOCATE PREPARE add_service_type_stmt;
INSERT INTO sys_role_menu (role_id, menu_id)
SELECT 1, m.menu_id
FROM sys_menu m
WHERE m.perms LIKE 'data:payPostcode:%'
AND NOT EXISTS (SELECT 1 FROM sys_role_menu x WHERE x.role_id = 1 AND x.menu_id = m.menu_id);
INSERT INTO sys_role_menu (role_id, menu_id)
SELECT DISTINCT rm.role_id, dst.menu_id
FROM sys_role_menu rm
JOIN sys_menu src ON src.menu_id = rm.menu_id AND src.perms = 'data:region:list'
JOIN sys_menu dst ON dst.perms IN ('data:payPostcode:list', 'data:payPostcode:query')
WHERE NOT EXISTS (SELECT 1 FROM sys_role_menu x WHERE x.role_id = rm.role_id AND x.menu_id = dst.menu_id);
INSERT INTO sys_role_menu (role_id, menu_id)
SELECT DISTINCT rm.role_id, dst.menu_id
FROM sys_role_menu rm
JOIN sys_menu src ON src.menu_id = rm.menu_id AND src.perms = 'data:region:edit'
JOIN sys_menu dst ON dst.perms IN ('data:payPostcode:import', 'data:payPostcode:edit')
WHERE NOT EXISTS (SELECT 1 FROM sys_role_menu x WHERE x.role_id = rm.role_id AND x.menu_id = dst.menu_id);
INSERT INTO sys_role_menu (role_id, menu_id)
SELECT DISTINCT rm.role_id, dst.menu_id
FROM sys_role_menu rm
JOIN sys_menu src ON src.menu_id = rm.menu_id AND src.perms = 'data:region:remove'
JOIN sys_menu dst ON dst.perms = 'data:payPostcode:remove'
WHERE NOT EXISTS (SELECT 1 FROM sys_role_menu x WHERE x.role_id = rm.role_id AND x.menu_id = dst.menu_id);
@@ -0,0 +1,43 @@
-- 应付渠道产品。字典类型 payment_product_type,字典项为价卡文件名。
-- 可重复执行。
SET NAMES utf8mb4;
INSERT INTO sys_dict_type (dict_name, dict_type, status, create_by, create_time, remark)
SELECT '应付渠道产品', 'payment_product_type', '0', 'admin', sysdate(), '应付渠道产品'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM sys_dict_type WHERE dict_type = 'payment_product_type');
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark)
SELECT v.dict_sort, v.dict_label, v.dict_value, 'payment_product_type', '', 'default', 'N', '0', 'admin', sysdate(), '应付价卡文件名'
FROM (
SELECT 1 AS dict_sort, 'Colissimo' AS dict_label, 'Colissimo' AS dict_value
UNION ALL SELECT 2, 'Corres Express', 'Corres Express'
UNION ALL SELECT 3, 'CTT 48H', 'CTT 48H'
UNION ALL SELECT 4, 'DE-iMile', 'DE-iMile'
UNION ALL SELECT 5, 'DHL International', 'DHL International'
UNION ALL SELECT 6, 'DHL Paket', 'DHL Paket'
UNION ALL SELECT 7, 'DHL泛欧', 'DHL泛欧'
UNION ALL SELECT 8, 'Evri 48H', 'Evri 48H'
UNION ALL SELECT 9, 'IT-iMile', 'IT-iMile'
UNION ALL SELECT 10, 'NL-DHL', 'NL-DHL'
UNION ALL SELECT 11, 'PosteItaliane', 'PosteItaliane'
UNION ALL SELECT 12, 'Royal Mail 48H', 'Royal Mail 48H'
UNION ALL SELECT 13, '德国DHL', '德国DHL'
UNION ALL SELECT 14, '德国DPD挂号 (DEDPD)', '德国DPD挂号 (DEDPD)'
UNION ALL SELECT 15, '德国DPD挂号-国际件', '德国DPD挂号-国际件'
UNION ALL SELECT 16, '德国UPS', '德国UPS'
UNION ALL SELECT 17, '法国Cirro', '法国Cirro'
UNION ALL SELECT 18, '法国Colissimo', '法国Colissimo'
UNION ALL SELECT 19, '法国GOFO', '法国GOFO'
UNION ALL SELECT 20, '西班牙CTT', '西班牙CTT'
UNION ALL SELECT 21, '西班牙CTT带电专线(岛屿+其他地区)', '西班牙CTT带电专线(岛屿+其他地区)'
UNION ALL SELECT 22, '西班牙CTT带电专线(主要地区)', '西班牙CTT带电专线(主要地区)'
UNION ALL SELECT 23, '西班牙GLS', '西班牙GLS'
UNION ALL SELECT 24, '西邮-西班牙(全境)', '西邮-西班牙(全境)'
UNION ALL SELECT 25, '西邮-西班牙(主岛)', '西邮-西班牙(主岛)'
UNION ALL SELECT 26, '英国evri', '英国evri'
UNION ALL SELECT 27, '英国RM', '英国RM'
) v
WHERE NOT EXISTS (
SELECT 1 FROM sys_dict_data d
WHERE d.dict_type = 'payment_product_type' AND d.dict_value = v.dict_value
);
+153
View File
@@ -0,0 +1,153 @@
-- 应付账单。订单应付仍用 prc_pay_bill、prc_pay_bill_fee,不改这两张表的名字。可重复执行。
SET NAMES utf8mb4;
SET @fee_source = (
SELECT IF(
EXISTS (SELECT 1 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'prc_pay_bill_fee' AND COLUMN_NAME = 'fee_source'),
'SELECT 1',
'ALTER TABLE prc_pay_bill_fee ADD COLUMN fee_source varchar(20) NOT NULL DEFAULT ''CALC'' COMMENT ''CALC计算 LADING提单分摊 MANUAL人工'' AFTER remark'
)
);
PREPARE stmt FROM @fee_source;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
CREATE TABLE IF NOT EXISTS `pay_lading` (
`lading_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '提单ID',
`lading_no` varchar(64) NOT NULL COMMENT '提单号或航空主单号',
`supplier_id` bigint(20) DEFAULT NULL COMMENT '供应商ID',
`channel_id` varchar(64) DEFAULT NULL COMMENT '渠道ID',
`biz_date` date DEFAULT NULL COMMENT '出运日期',
`pieces` int(11) DEFAULT NULL COMMENT '件数',
`charge_weight` decimal(12,3) DEFAULT NULL COMMENT '计费重',
`currency` varchar(10) DEFAULT NULL COMMENT '币种',
`status` varchar(20) NOT NULL DEFAULT 'OPEN' COMMENT 'OPEN可改 ALLOCATED已分摊 SETTLED已进账单',
`create_by` varchar(64) DEFAULT '' COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`lading_id`),
UNIQUE KEY `uk_pay_lading_no` (`lading_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='应付提单';
CREATE TABLE IF NOT EXISTS `pay_lading_fee` (
`lading_fee_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '提单费用ID',
`lading_id` bigint(20) NOT NULL COMMENT '提单ID',
`fee_name` varchar(100) NOT NULL COMMENT '费用名称',
`amount` decimal(18,4) NOT NULL COMMENT '金额',
`currency` varchar(10) NOT NULL COMMENT '币种',
`alloc_rule` varchar(20) NOT NULL DEFAULT 'NONE' COMMENT 'WEIGHT按计费重 PIECE按件数 ORDER按票 NONE留在主单',
`remark` varchar(500) DEFAULT NULL COMMENT '说明',
`create_by` varchar(64) DEFAULT '' COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`lading_fee_id`),
KEY `idx_pay_lading_fee_lading` (`lading_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='提单费用';
CREATE TABLE IF NOT EXISTS `pay_bill` (
`bill_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '应付账单ID',
`bill_no` varchar(50) NOT NULL COMMENT '账单号',
`supplier_id` bigint(20) NOT NULL COMMENT '供应商ID',
`supplier_name` varchar(100) DEFAULT NULL COMMENT '供应商名称',
`currency` varchar(10) NOT NULL COMMENT '币种',
`source_type` varchar(20) NOT NULL COMMENT 'ORDER订单号 TIME计费日 LADING提单',
`period_start` date DEFAULT NULL COMMENT '计费日起',
`period_end` date DEFAULT NULL COMMENT '计费日止',
`order_count` int(11) NOT NULL DEFAULT '0' COMMENT '订单数',
`total_amount` decimal(18,2) NOT NULL DEFAULT '0.00' COMMENT '应付总额',
`status` varchar(20) NOT NULL DEFAULT 'DRAFT' COMMENT 'DRAFT草稿 CONFIRMED已确认 PAID已付款 VOID已作废',
`void_reason` varchar(500) DEFAULT NULL COMMENT '作废原因',
`void_by` varchar(64) DEFAULT NULL COMMENT '作废人',
`void_time` datetime DEFAULT NULL COMMENT '作废时间',
`create_by` varchar(64) DEFAULT '' COMMENT '创建者',
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_by` varchar(64) DEFAULT '' COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`bill_id`),
UNIQUE KEY `uk_pay_bill_no` (`bill_no`),
KEY `idx_pay_bill_status` (`status`, `create_time`),
KEY `idx_pay_bill_supplier` (`supplier_id`, `currency`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='应付账单,作废后保留';
CREATE TABLE IF NOT EXISTS `pay_bill_line` (
`line_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '账单行ID',
`bill_id` bigint(20) NOT NULL COMMENT '应付账单ID',
`order_bill_id` varchar(36) DEFAULT NULL COMMENT '订单ID',
`order_no` varchar(64) DEFAULT NULL COMMENT '订单号',
`lading_no` varchar(64) DEFAULT NULL COMMENT '提单号',
`lading_fee_id` bigint(20) DEFAULT NULL COMMENT '留在主单上的费用',
`fee_name` varchar(100) NOT NULL COMMENT '费用名称',
`amount` decimal(18,4) NOT NULL COMMENT '金额快照',
`currency` varchar(10) NOT NULL COMMENT '币种',
`price_date` date DEFAULT NULL COMMENT '取价日',
`version_no` int(11) DEFAULT NULL COMMENT '价卡版本',
`remote_flag` char(1) DEFAULT NULL COMMENT 'Y偏远 N非偏远',
`density_level` varchar(20) DEFAULT NULL COMMENT 'HIGH MEDIUM LOW',
`line_source` varchar(20) NOT NULL COMMENT 'ORDER订单费用 LADING主单费用',
PRIMARY KEY (`line_id`),
KEY `idx_pay_bill_line_bill` (`bill_id`),
KEY `idx_pay_bill_line_order` (`order_bill_id`),
KEY `idx_pay_bill_line_lading_fee` (`lading_fee_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='应付账单费用快照';
CREATE TABLE IF NOT EXISTS `pay_bill_log` (
`log_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '日志ID',
`bill_id` bigint(20) NOT NULL COMMENT '应付账单ID',
`operation_type` varchar(20) NOT NULL COMMENT 'CREATE CONFIRM PAY VOID',
`from_status` varchar(20) DEFAULT NULL COMMENT '变更前状态',
`to_status` varchar(20) DEFAULT NULL COMMENT '变更后状态',
`operation_desc` varchar(500) DEFAULT NULL COMMENT '说明',
`operator_name` varchar(64) DEFAULT NULL COMMENT '操作人',
`create_time` datetime NOT NULL COMMENT '操作时间',
PRIMARY KEY (`log_id`),
KEY `idx_pay_bill_log_bill` (`bill_id`, `create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='应付账单操作日志';
SET @lading_col = (
SELECT IF(
EXISTS (SELECT 1 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'prc_order_bill_ext' AND COLUMN_NAME = 'lading_id'),
'SELECT 1',
'ALTER TABLE prc_order_bill_ext ADD COLUMN lading_id bigint(20) DEFAULT NULL COMMENT ''应付提单ID'' AFTER air_no_old'
)
);
PREPARE stmt FROM @lading_col;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
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 '应付账单', parent.menu_id, 8, 'payBill', 'price/billing/payBill/index', 1, 0, 'C', '0', '0', 'price:payBill:list', 'money', 'admin', sysdate(), '按订单号、计费日或提单生成应付账单,作废留痕'
FROM (
SELECT menu_id FROM sys_menu WHERE menu_name = '账单管理' AND menu_type = 'M' ORDER BY menu_id LIMIT 1
) parent
WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'price:payBill:list');
SET @payBillMenu = (SELECT menu_id FROM sys_menu WHERE perms = 'price:payBill: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 '应付账单查询', @payBillMenu, 1, '', '', 1, 0, 'F', '0', '0', 'price:payBill:query', '#', 'admin', sysdate()
FROM DUAL WHERE @payBillMenu IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'price:payBill: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 '应付账单生成', @payBillMenu, 2, '', '', 1, 0, 'F', '0', '0', 'price:payBill:add', '#', 'admin', sysdate()
FROM DUAL WHERE @payBillMenu IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'price:payBill: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 '应付账单确认', @payBillMenu, 3, '', '', 1, 0, 'F', '0', '0', 'price:payBill:confirm', '#', 'admin', sysdate()
FROM DUAL WHERE @payBillMenu IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'price:payBill:confirm');
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 '应付账单作废', @payBillMenu, 4, '', '', 1, 0, 'F', '0', '0', 'price:payBill:void', '#', 'admin', sysdate()
FROM DUAL WHERE @payBillMenu IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'price:payBill:void');
INSERT INTO sys_role_menu (role_id, menu_id)
SELECT DISTINCT rm.role_id, dst.menu_id
FROM sys_role_menu rm
JOIN sys_menu src ON src.menu_id = rm.menu_id AND src.component = 'price/billing/bill'
JOIN sys_menu dst ON dst.perms LIKE 'price:payBill:%'
WHERE NOT EXISTS (SELECT 1 FROM sys_role_menu x WHERE x.role_id = rm.role_id AND x.menu_id = dst.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:payBill:%'
AND NOT EXISTS (SELECT 1 FROM sys_role_menu x WHERE x.role_id = 1 AND x.menu_id = m.menu_id);
@@ -0,0 +1,36 @@
-- 重量段、附加费记录所属价卡版本。已有库可重复执行。
SET NAMES utf8mb4;
SET @band_sql = (
SELECT IF(
COUNT(*) = 0,
'ALTER TABLE pay_weight_band ADD COLUMN version_no int(11) NOT NULL DEFAULT 1 COMMENT ''价卡版本,随产品版本变更'' AFTER product_id',
'SELECT 1'
)
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'pay_weight_band' AND COLUMN_NAME = 'version_no'
);
PREPARE stmt FROM @band_sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET @fee_sql = (
SELECT IF(
COUNT(*) = 0,
'ALTER TABLE pay_surcharge ADD COLUMN version_no int(11) NOT NULL DEFAULT 1 COMMENT ''价卡版本,随产品版本变更'' AFTER product_id',
'SELECT 1'
)
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'pay_surcharge' AND COLUMN_NAME = 'version_no'
);
PREPARE stmt FROM @fee_sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
UPDATE pay_weight_band b
INNER JOIN pay_product p ON p.product_id = b.product_id
SET b.version_no = IFNULL(p.version_no, 1);
UPDATE pay_surcharge s
INNER JOIN pay_product p ON p.product_id = s.product_id
SET s.version_no = IFNULL(p.version_no, 1);
+140
View File
@@ -0,0 +1,140 @@
-- 应付价卡配置。目录里的一个产品一行,重量段和附加费挂在产品下面。
-- 表名使用 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_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 '币种',
`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
);
@@ -0,0 +1,22 @@
-- 应付产品按字典导入,渠道另存一版,不改模板。可重复执行。
SET NAMES utf8mb4;
SET @sql = (
SELECT IF(
COUNT(*) = 0,
'ALTER TABLE pay_product
ADD COLUMN dict_value varchar(100) DEFAULT NULL COMMENT ''字典 payment_product_type'' AFTER product_name,
ADD COLUMN origin_id bigint(20) DEFAULT NULL COMMENT ''复制来源,空表示模板'' AFTER dict_value,
ADD COLUMN channel_id varchar(64) DEFAULT NULL COMMENT ''服务渠道ID,空表示公共模板'' AFTER origin_id,
ADD COLUMN version_no int(11) NOT NULL DEFAULT 1 COMMENT ''版本,模板为1'' AFTER channel_id,
ADD KEY idx_pay_product_dict (dict_value, channel_id)',
'SELECT 1'
)
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'pay_product' AND COLUMN_NAME = 'dict_value'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- 渠道和产品的绑定在 srv_channel_product_map,不再使用 srv_channel_pay。
@@ -0,0 +1,16 @@
-- 应付产品增加订单收费类型,对应字典 order_charge_type。可重复执行。
SET NAMES utf8mb4;
SET @ddl = (
SELECT IF(
EXISTS (
SELECT 1 FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'pay_product' AND COLUMN_NAME = 'charge_type'
),
'SELECT 1',
'ALTER TABLE pay_product ADD COLUMN charge_type varchar(50) DEFAULT NULL COMMENT ''订单收费类型,字典 order_charge_type'' AFTER country_scope'
)
);
PREPARE stmt FROM @ddl;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
@@ -0,0 +1,16 @@
-- 应付产品增加续重每公斤加价。分区价格相同存一个金额,不同存最小~最大。可重复执行。
SET NAMES utf8mb4;
SET @ddl = (
SELECT IF(
EXISTS (
SELECT 1 FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'pay_product' AND COLUMN_NAME = 'extra_per_kg'
),
'SELECT 1',
'ALTER TABLE pay_product ADD COLUMN extra_per_kg varchar(40) DEFAULT NULL COMMENT ''续重每公斤加价,分区不同时为最小到最大'' AFTER charge_type'
)
);
PREPARE stmt FROM @ddl;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
+53
View File
@@ -0,0 +1,53 @@
-- 应付产品有效期。同一产品多次导入各留一版,用这张表记录生效区间和是否生效。可重复执行。
SET NAMES utf8mb4;
CREATE TABLE IF NOT EXISTS `pay_product_term` (
`term_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '有效期ID',
`dict_value` varchar(100) NOT NULL COMMENT '产品字典值,同一产品的各版本归在一起',
`product_id` bigint(20) NOT NULL COMMENT '这一版价格',
`version_no` int(11) NOT NULL DEFAULT 1 COMMENT '版本号',
`effective_start` date DEFAULT NULL COMMENT '生效开始',
`effective_end` date DEFAULT NULL COMMENT '生效结束,空表示不限',
`status` char(1) NOT NULL DEFAULT '0' COMMENT '0生效 1失效',
`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 (`term_id`),
UNIQUE KEY `uk_pay_term_product` (`product_id`),
KEY `idx_pay_term_dict` (`dict_value`, `status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='应付产品价格有效期';
-- 已有模板补一条生效记录,不覆盖后来手工改过的有效期
INSERT INTO pay_product_term (
dict_value, product_id, version_no, effective_start, status, created_by, create_time
)
SELECT ifnull(nullif(dict_value, ''), product_name), product_id, ifnull(version_no, 1), effective_date, '0',
ifnull(created_by, ''), ifnull(create_time, sysdate())
FROM pay_product p
WHERE (p.channel_id IS NULL OR p.channel_id = '')
AND NOT EXISTS (SELECT 1 FROM pay_product_term t WHERE t.product_id = p.product_id);
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, 5, '', '', 1, 0, 'F', '0', '0', 'price:pay:edit', '#', 'admin', sysdate()
WHERE @menuId IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'price:pay:edit');
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:pay:list'
JOIN sys_menu m ON m.perms = 'price:pay:edit'
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 = 'price:pay:edit'
AND NOT EXISTS (
SELECT 1 FROM sys_role_menu x WHERE x.role_id = 1 AND x.menu_id = m.menu_id
);
+15
View File
@@ -0,0 +1,15 @@
-- 应付价卡产品增加支付类型。已有库可重复执行。
SET NAMES utf8mb4;
SET @sql = (
SELECT IF(
COUNT(*) = 0,
'ALTER TABLE pay_product ADD COLUMN product_type varchar(30) DEFAULT NULL COMMENT ''产品类型:AR:应收、AP:应付'' AFTER product_name',
'SELECT 1'
)
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'pay_product' AND COLUMN_NAME = 'product_type'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
+17
View File
@@ -0,0 +1,17 @@
-- 附加费增加可计算条件。已有库可重复执行。
SET NAMES utf8mb4;
SET @sql = (
SELECT IF(
COUNT(*) = 0,
'ALTER TABLE pay_surcharge
ADD COLUMN calc_rule varchar(20) NOT NULL DEFAULT ''MANUAL'' COMMENT ''计费条件:ALWAYS每票、POSTCODE邮编、WEIGHT超重、SIZE超尺寸、RETURN退件、MANUAL人工'' AFTER charge_timing,
ADD COLUMN calc_param varchar(1000) DEFAULT NULL COMMENT ''条件参数,如邮编、重量阈值、尺寸表达式'' AFTER calc_rule',
'SELECT 1'
)
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'pay_surcharge' AND COLUMN_NAME = 'calc_rule'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
@@ -0,0 +1,16 @@
-- 重量段增加体积上限。长x宽x高记在这一档上,不记成费用。可重复执行。
SET NAMES utf8mb4;
SET @ddl = (
SELECT IF(
EXISTS (
SELECT 1 FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'pay_weight_band' AND COLUMN_NAME = 'volume_text'
),
'SELECT 1',
'ALTER TABLE pay_weight_band ADD COLUMN volume_text varchar(40) DEFAULT NULL COMMENT ''体积上限,数字加单位,如10000cm³'' AFTER weight_max'
)
);
PREPARE stmt FROM @ddl;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
@@ -0,0 +1,52 @@
-- 渠道与产品的收付关系。一个渠道同一收付类型只保留一条。可重复执行。
SET NAMES utf8mb4;
CREATE TABLE IF NOT EXISTS `srv_channel_product_map` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
`channel_id` varchar(50) NOT NULL COMMENT '渠道ID,对应 srv_service_channel.id',
`product_id` bigint(20) NOT NULL COMMENT '产品ID,应付时为价卡产品编号',
`price_set_id` bigint(20) DEFAULT NULL COMMENT '应收套餐ID,对应 prc_price_set.price_set_id',
`pay_type` varchar(10) NOT NULL COMMENT '收付类型,字典 bms_pay_type:AR应收 AP应付',
`create_by` varchar(64) DEFAULT NULL COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) DEFAULT NULL COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_channel_pay_type` (`channel_id`, `pay_type`),
KEY `idx_channel_product_map_product` (`product_id`),
KEY `idx_channel_product_map_price_set` (`price_set_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='渠道产品关系映射';
SET @sql = (
SELECT IF(
COUNT(*) = 0,
'ALTER TABLE srv_channel_product_map ADD COLUMN price_set_id bigint(20) DEFAULT NULL COMMENT ''应收套餐ID,对应 prc_price_set.price_set_id'' AFTER product_id, ADD KEY idx_channel_product_map_price_set (price_set_id)',
'SELECT 1'
)
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'srv_channel_product_map' AND COLUMN_NAME = 'price_set_id'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET @copy_sql = (
SELECT IF(
COUNT(*) > 0,
'INSERT INTO srv_channel_product_map (channel_id, product_id, pay_type, create_time, update_time)
SELECT c.channel_id, IFNULL(c.origin_id, c.product_id), ''AP'', c.update_time, c.update_time
FROM srv_channel_pay c
WHERE NOT EXISTS (
SELECT 1 FROM srv_channel_product_map m
WHERE m.channel_id = c.channel_id AND m.pay_type = ''AP''
)',
'SELECT 1'
)
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'srv_channel_pay'
);
PREPARE stmt FROM @copy_sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
DROP TABLE IF EXISTS srv_channel_pay;