修改计费信息表结构

This commit is contained in:
wuweihua
2026-09-14 14:53:05 +08:00
parent 479b72b59f
commit 4bd95cb472
21 changed files with 378 additions and 137 deletions
+29 -9
View File
@@ -1,8 +1,10 @@
-- prc_bill / prc_bill_fee: receivable billing from synced orders
-- prc_order_bill: order info header
-- prc_income_bill_fee: receivable fee lines
-- prc_pay_bill_fee: payable fee lines
-- fields follow prc_quote / prc_quote_fee; extra order_no + customer_code
SET NAMES utf8mb4;
CREATE TABLE IF NOT EXISTS prc_bill (
CREATE TABLE IF NOT EXISTS prc_order_bill (
bill_id VARCHAR(36) NOT NULL COMMENT '计费ID',
bill_key CHAR(32) NOT NULL COMMENT 'MD5(order_no)',
order_no VARCHAR(64) NOT NULL COMMENT '订单号',
@@ -50,7 +52,8 @@ CREATE TABLE IF NOT EXISTS prc_bill (
registration_fee DECIMAL(10,2) DEFAULT NULL COMMENT '挂号费',
freight_amount DECIMAL(10,2) DEFAULT NULL COMMENT '运费金额',
surcharge_amount DECIMAL(10,2) DEFAULT NULL COMMENT '附加费合计',
payable_total DECIMAL(10,2) DEFAULT NULL COMMENT '应收总额',
income_total DECIMAL(10,2) DEFAULT NULL COMMENT '应收总额',
pay_total DECIMAL(10,2) DEFAULT NULL COMMENT '应付总额',
currency VARCHAR(10) NOT NULL DEFAULT 'CNY' COMMENT '币种',
round_mode VARCHAR(20) NOT NULL DEFAULT 'HALF_UP' COMMENT '取值方式',
created_by VARCHAR(64) DEFAULT '' COMMENT '创建人',
@@ -62,9 +65,9 @@ CREATE TABLE IF NOT EXISTS prc_bill (
UNIQUE KEY uk_bill_key (bill_key),
INDEX idx_bill_customer (customer_code, biz_date),
INDEX idx_bill_product (product_code, country_code)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='计费应收主表-订单同步计费';
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='订单信息主表';
CREATE TABLE IF NOT EXISTS prc_bill_fee (
CREATE TABLE IF NOT EXISTS prc_income_bill_fee (
fee_id VARCHAR(36) NOT NULL COMMENT '费用明细ID',
bill_id VARCHAR(36) NOT NULL COMMENT '计费ID',
fee_type VARCHAR(30) NOT NULL COMMENT '费用类型(字典bms_fee_type)',
@@ -76,7 +79,24 @@ CREATE TABLE IF NOT EXISTS prc_bill_fee (
remark VARCHAR(500) DEFAULT NULL COMMENT '备注',
create_time DATETIME DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (fee_id),
UNIQUE KEY uk_bill_fee_item (bill_id, fee_type, sc_id),
INDEX idx_bill_fee_type (fee_type),
CONSTRAINT fk_bill_fee_bill FOREIGN KEY (bill_id) REFERENCES prc_bill (bill_id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='计费应收费用明细';
UNIQUE KEY uk_income_bill_fee_item (bill_id, fee_type, sc_id),
INDEX idx_income_bill_fee_type (fee_type),
CONSTRAINT fk_income_bill_fee_order FOREIGN KEY (bill_id) REFERENCES prc_order_bill (bill_id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='应收费用明细';
CREATE TABLE IF NOT EXISTS prc_pay_bill_fee (
fee_id VARCHAR(36) NOT NULL COMMENT '费用明细ID',
bill_id VARCHAR(36) NOT NULL COMMENT '计费ID',
fee_type VARCHAR(30) NOT NULL COMMENT '费用类型(字典bms_fee_type)',
fee_name VARCHAR(100) DEFAULT NULL COMMENT '费用名称',
sc_id BIGINT(20) NOT NULL DEFAULT 0 COMMENT '附加费配置ID',
amount DECIMAL(12,2) NOT NULL DEFAULT 0 COMMENT '金额',
currency VARCHAR(10) NOT NULL DEFAULT 'CNY' COMMENT '币种',
round_mode VARCHAR(20) DEFAULT 'HALF_UP' COMMENT '取值方式',
remark VARCHAR(500) DEFAULT NULL COMMENT '备注',
create_time DATETIME DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (fee_id),
UNIQUE KEY uk_pay_bill_fee_item (bill_id, fee_type, sc_id),
INDEX idx_pay_bill_fee_type (fee_type),
CONSTRAINT fk_pay_bill_fee_order FOREIGN KEY (bill_id) REFERENCES prc_order_bill (bill_id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='应付费用明细';
@@ -0,0 +1,35 @@
-- prc_order_bill: income_total + pay_total
SET NAMES utf8mb4;
SET @db := DATABASE();
SET @has_income := (
SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'prc_order_bill' AND COLUMN_NAME = 'income_total'
);
SET @has_payable := (
SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'prc_order_bill' AND COLUMN_NAME = 'payable_total'
);
SET @sql := IF(@has_income = 0 AND @has_payable > 0,
'ALTER TABLE prc_order_bill CHANGE COLUMN payable_total income_total DECIMAL(10,2) DEFAULT NULL COMMENT \'应收总额\'',
'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @has_income2 := (
SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'prc_order_bill' AND COLUMN_NAME = 'income_total'
);
SET @sql := IF(@has_income2 = 0,
'ALTER TABLE prc_order_bill ADD COLUMN income_total DECIMAL(10,2) DEFAULT NULL COMMENT \'应收总额\' AFTER surcharge_amount',
'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @has_pay := (
SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'prc_order_bill' AND COLUMN_NAME = 'pay_total'
);
SET @sql := IF(@has_pay = 0,
'ALTER TABLE prc_order_bill ADD COLUMN pay_total DECIMAL(10,2) DEFAULT NULL COMMENT \'应付总额\' AFTER income_total',
'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
+68
View File
@@ -0,0 +1,68 @@
-- rename prc_bill -> prc_order_bill, prc_bill_fee -> prc_income_bill_fee, add prc_pay_bill_fee
SET NAMES utf8mb4;
SET @db := DATABASE();
SET @fk := (
SELECT CONSTRAINT_NAME FROM information_schema.TABLE_CONSTRAINTS
WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'prc_bill_fee' AND CONSTRAINT_TYPE = 'FOREIGN KEY'
LIMIT 1
);
SET @sql := IF(@fk IS NOT NULL,
CONCAT('ALTER TABLE prc_bill_fee DROP FOREIGN KEY `', @fk, '`'),
'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @has_old := (
SELECT COUNT(*) FROM information_schema.TABLES
WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'prc_bill'
);
SET @has_new := (
SELECT COUNT(*) FROM information_schema.TABLES
WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'prc_order_bill'
);
SET @sql := IF(@has_old > 0 AND @has_new = 0, 'RENAME TABLE prc_bill TO prc_order_bill', 'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @has_old_fee := (
SELECT COUNT(*) FROM information_schema.TABLES
WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'prc_bill_fee'
);
SET @has_new_fee := (
SELECT COUNT(*) FROM information_schema.TABLES
WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'prc_income_bill_fee'
);
SET @sql := IF(@has_old_fee > 0 AND @has_new_fee = 0, 'RENAME TABLE prc_bill_fee TO prc_income_bill_fee', 'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @fk2 := (
SELECT CONSTRAINT_NAME FROM information_schema.TABLE_CONSTRAINTS
WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'prc_income_bill_fee'
AND CONSTRAINT_TYPE = 'FOREIGN KEY'
LIMIT 1
);
SET @sql := IF(@fk2 IS NULL,
'ALTER TABLE prc_income_bill_fee ADD CONSTRAINT fk_income_bill_fee_order FOREIGN KEY (bill_id) REFERENCES prc_order_bill (bill_id) ON DELETE CASCADE',
'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
ALTER TABLE prc_order_bill COMMENT = '订单信息主表';
ALTER TABLE prc_income_bill_fee COMMENT = '应收费用明细';
CREATE TABLE IF NOT EXISTS prc_pay_bill_fee (
fee_id VARCHAR(36) NOT NULL COMMENT '费用明细ID',
bill_id VARCHAR(36) NOT NULL COMMENT '计费ID',
fee_type VARCHAR(30) NOT NULL COMMENT '费用类型(字典bms_fee_type)',
fee_name VARCHAR(100) DEFAULT NULL COMMENT '费用名称',
sc_id BIGINT(20) NOT NULL DEFAULT 0 COMMENT '附加费配置ID',
amount DECIMAL(12,2) NOT NULL DEFAULT 0 COMMENT '金额',
currency VARCHAR(10) NOT NULL DEFAULT 'CNY' COMMENT '币种',
round_mode VARCHAR(20) DEFAULT 'HALF_UP' COMMENT '取值方式',
remark VARCHAR(500) DEFAULT NULL COMMENT '备注',
create_time DATETIME DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (fee_id),
UNIQUE KEY uk_pay_bill_fee_item (bill_id, fee_type, sc_id),
INDEX idx_pay_bill_fee_type (fee_type),
CONSTRAINT fk_pay_bill_fee_order FOREIGN KEY (bill_id) REFERENCES prc_order_bill (bill_id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='应付费用明细';