应付账单初始化

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
+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;