194 lines
13 KiB
SQL
194 lines
13 KiB
SQL
-- BMS 应收 V1.0
|
||
--
|
||
-- 需求文档中的来源表 prc_bill / prc_bill_fee 在本项目已经由
|
||
-- sql/price/rename_bill_tables.sql 迁移为 prc_order_bill / prc_income_bill_fee;
|
||
-- 本脚本只创建正式应收表,不改动来源表及其 VARCHAR(36) 主键。
|
||
SET NAMES utf8mb4;
|
||
SET FOREIGN_KEY_CHECKS = 0;
|
||
|
||
CREATE TABLE IF NOT EXISTS ar_bill (
|
||
ar_bill_id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '应收账单ID',
|
||
bill_no VARCHAR(50) NOT NULL COMMENT '账单号',
|
||
bill_name VARCHAR(100) NOT NULL COMMENT '账单名称',
|
||
customer_id BIGINT(20) NOT NULL COMMENT '客户ID',
|
||
customer_code VARCHAR(50) NOT NULL COMMENT '客户编码快照',
|
||
customer_name VARCHAR(100) NOT NULL COMMENT '客户名称快照',
|
||
bill_period_start DATE NOT NULL COMMENT '账期开始日',
|
||
bill_period_end DATE NOT NULL COMMENT '账期结束日',
|
||
bill_date DATE NOT NULL COMMENT '账单出具日期',
|
||
currency VARCHAR(10) NOT NULL DEFAULT 'CNY' COMMENT '币种',
|
||
order_count INT(11) NOT NULL DEFAULT 0 COMMENT '订单数量',
|
||
total_amount DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '账单应收总额',
|
||
written_off_amount DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '已核销金额缓存',
|
||
unwritten_amount DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '未核销金额缓存',
|
||
status VARCHAR(30) NOT NULL COMMENT 'DRAFT/CONFIRMED/PARTIAL_WRITTEN_OFF/WRITTEN_OFF/VOID',
|
||
bill_version INT(11) NOT NULL DEFAULT 1 COMMENT '账单版本',
|
||
bank_account_name VARCHAR(100) DEFAULT NULL COMMENT '收款账户名称快照',
|
||
bank_account_no VARCHAR(128) DEFAULT NULL COMMENT '收款账号快照,应用层脱敏展示',
|
||
bank_name VARCHAR(100) DEFAULT NULL COMMENT '开户行快照',
|
||
remark VARCHAR(500) DEFAULT NULL COMMENT '备注或作废原因',
|
||
confirmed_by VARCHAR(64) DEFAULT NULL COMMENT '确认人',
|
||
confirmed_time DATETIME DEFAULT NULL COMMENT '确认时间',
|
||
create_by VARCHAR(64) NOT NULL COMMENT '创建人',
|
||
create_time DATETIME NOT NULL COMMENT '创建时间',
|
||
update_by VARCHAR(64) NOT NULL COMMENT '更新人',
|
||
update_time DATETIME NOT NULL COMMENT '更新时间',
|
||
PRIMARY KEY (ar_bill_id),
|
||
UNIQUE KEY uk_ar_bill_no (bill_no),
|
||
UNIQUE KEY uk_ar_bill_customer_cutoff_version (customer_id, currency, bill_period_end, bill_version),
|
||
KEY idx_ar_bill_customer_cutoff (customer_id, currency, bill_period_end),
|
||
KEY idx_ar_bill_status (status)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='正式应收账单主表';
|
||
|
||
CREATE TABLE IF NOT EXISTS ar_bill_detail (
|
||
detail_id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '账单订单明细ID',
|
||
ar_bill_id BIGINT(20) NOT NULL COMMENT '应收账单ID',
|
||
prc_order_bill_id VARCHAR(36) NOT NULL COMMENT '来源计费订单ID,对应 prc_order_bill.bill_id',
|
||
detail_no INT(11) NOT NULL COMMENT '账单内顺序号',
|
||
order_no VARCHAR(64) NOT NULL COMMENT '订单号快照',
|
||
tracking_no VARCHAR(64) DEFAULT NULL COMMENT '运单号快照',
|
||
receive_time DATETIME DEFAULT NULL COMMENT '收件或入库时间',
|
||
product_code VARCHAR(50) NOT NULL COMMENT '产品代码快照',
|
||
product_name VARCHAR(100) DEFAULT NULL COMMENT '产品名称快照',
|
||
goods_description VARCHAR(500) DEFAULT NULL COMMENT '货物描述快照',
|
||
country_code CHAR(2) DEFAULT NULL COMMENT '目的国家二字码',
|
||
country_name VARCHAR(50) DEFAULT NULL COMMENT '目的国家名称',
|
||
dest_postcode VARCHAR(20) DEFAULT NULL COMMENT '目的邮编',
|
||
actual_weight DECIMAL(12,3) DEFAULT NULL COMMENT '实际重量KG',
|
||
volume_weight DECIMAL(12,3) DEFAULT NULL COMMENT '材积重量KG',
|
||
charge_weight DECIMAL(12,3) DEFAULT NULL COMMENT '计费重量KG',
|
||
pkg_length DECIMAL(10,2) DEFAULT NULL COMMENT '长度CM',
|
||
pkg_width DECIMAL(10,2) DEFAULT NULL COMMENT '宽度CM',
|
||
pkg_height DECIMAL(10,2) DEFAULT NULL COMMENT '高度CM',
|
||
currency VARCHAR(10) NOT NULL COMMENT '币种快照',
|
||
total_amount DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '订单费用合计',
|
||
remark VARCHAR(500) DEFAULT NULL COMMENT '订单账单备注',
|
||
create_by VARCHAR(64) NOT NULL COMMENT '创建人',
|
||
create_time DATETIME NOT NULL COMMENT '创建时间',
|
||
PRIMARY KEY (detail_id),
|
||
UNIQUE KEY uk_ar_bill_detail_source (ar_bill_id, prc_order_bill_id),
|
||
UNIQUE KEY uk_ar_bill_detail_no (ar_bill_id, detail_no),
|
||
KEY idx_ar_bill_detail_source (prc_order_bill_id),
|
||
CONSTRAINT fk_ar_bill_detail_bill FOREIGN KEY (ar_bill_id) REFERENCES ar_bill (ar_bill_id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='应收账单订单快照';
|
||
|
||
CREATE TABLE IF NOT EXISTS ar_bill_detail_fee (
|
||
detail_fee_id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '账单费用明细ID',
|
||
detail_id BIGINT(20) NOT NULL COMMENT '账单订单明细ID',
|
||
prc_income_bill_fee_id VARCHAR(36) NOT NULL COMMENT '来源收入费用ID,对应 prc_income_bill_fee.fee_id',
|
||
fee_no INT(11) NOT NULL COMMENT '订单内费用顺序号',
|
||
fee_type VARCHAR(30) NOT NULL COMMENT '费用类型快照',
|
||
fee_name VARCHAR(100) DEFAULT NULL COMMENT '费用名称快照',
|
||
sc_id BIGINT(20) DEFAULT NULL COMMENT '附加费配置ID快照',
|
||
quantity DECIMAL(12,3) DEFAULT NULL COMMENT '计费数量',
|
||
unit VARCHAR(20) DEFAULT NULL COMMENT '计费单位',
|
||
unit_price DECIMAL(15,4) DEFAULT NULL COMMENT '费用单价',
|
||
amount DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '费用金额',
|
||
currency VARCHAR(10) NOT NULL COMMENT '币种',
|
||
calculation_formula VARCHAR(500) DEFAULT NULL COMMENT '计算公式或说明',
|
||
round_mode VARCHAR(20) DEFAULT NULL COMMENT '取舍规则',
|
||
remark VARCHAR(500) DEFAULT NULL COMMENT '费用备注',
|
||
create_by VARCHAR(64) NOT NULL COMMENT '创建人',
|
||
create_time DATETIME NOT NULL COMMENT '创建时间',
|
||
PRIMARY KEY (detail_fee_id),
|
||
UNIQUE KEY uk_ar_detail_prc_income_fee (detail_id, prc_income_bill_fee_id),
|
||
KEY idx_ar_detail_fee_type (fee_type),
|
||
KEY idx_ar_detail_prc_income_fee (prc_income_bill_fee_id),
|
||
KEY idx_ar_detail_fee_order (detail_id, fee_no, detail_fee_id),
|
||
CONSTRAINT fk_ar_detail_fee_detail FOREIGN KEY (detail_id) REFERENCES ar_bill_detail (detail_id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='应收账单费用快照';
|
||
|
||
CREATE TABLE IF NOT EXISTS ar_receipt (
|
||
receipt_id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '收款ID',
|
||
receipt_no VARCHAR(50) NOT NULL COMMENT '收款单号',
|
||
customer_id BIGINT(20) NOT NULL COMMENT '付款客户ID',
|
||
receipt_date DATE NOT NULL COMMENT '到账日期',
|
||
currency VARCHAR(10) NOT NULL DEFAULT 'CNY' COMMENT '币种',
|
||
receipt_amount DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '到账总额',
|
||
unallocated_amount DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '未分配金额缓存',
|
||
payment_method VARCHAR(30) NOT NULL COMMENT '到账方式',
|
||
bank_reference VARCHAR(100) DEFAULT NULL COMMENT '银行流水号或第三方交易号',
|
||
status VARCHAR(30) NOT NULL COMMENT 'REGISTERED/PARTIAL_WRITTEN_OFF/WRITTEN_OFF/CANCELLED',
|
||
remark VARCHAR(500) DEFAULT NULL COMMENT '收款备注或取消原因',
|
||
create_by VARCHAR(64) NOT NULL COMMENT '创建人',
|
||
create_time DATETIME NOT NULL COMMENT '创建时间',
|
||
update_by VARCHAR(64) NOT NULL COMMENT '更新人',
|
||
update_time DATETIME NOT NULL COMMENT '更新时间',
|
||
PRIMARY KEY (receipt_id),
|
||
UNIQUE KEY uk_ar_receipt_no (receipt_no),
|
||
UNIQUE KEY uk_ar_payment_reference (payment_method, bank_reference),
|
||
KEY idx_ar_receipt_customer_date (customer_id, receipt_date),
|
||
KEY idx_ar_receipt_status (status)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='应收收款表';
|
||
|
||
CREATE TABLE IF NOT EXISTS ar_receipt_writeoff (
|
||
writeoff_id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '核销ID',
|
||
receipt_id BIGINT(20) NOT NULL COMMENT '收款ID',
|
||
ar_bill_id BIGINT(20) NOT NULL COMMENT '应收账单ID',
|
||
writeoff_no VARCHAR(50) NOT NULL COMMENT '核销单号',
|
||
writeoff_amount DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '本次核销金额',
|
||
currency VARCHAR(10) NOT NULL COMMENT '币种',
|
||
writeoff_date DATE NOT NULL COMMENT '核销日期',
|
||
status VARCHAR(30) NOT NULL COMMENT 'EFFECTIVE/CANCELLED',
|
||
remark VARCHAR(500) DEFAULT NULL COMMENT '核销备注或取消原因',
|
||
create_by VARCHAR(64) NOT NULL COMMENT '创建人',
|
||
create_time DATETIME NOT NULL COMMENT '创建时间',
|
||
cancel_by VARCHAR(64) DEFAULT NULL COMMENT '取消人',
|
||
cancel_time DATETIME DEFAULT NULL COMMENT '取消时间',
|
||
PRIMARY KEY (writeoff_id),
|
||
UNIQUE KEY uk_ar_writeoff_no (writeoff_no),
|
||
KEY idx_ar_writeoff_receipt (receipt_id, status),
|
||
KEY idx_ar_writeoff_bill (ar_bill_id, status),
|
||
CONSTRAINT fk_ar_writeoff_receipt FOREIGN KEY (receipt_id) REFERENCES ar_receipt (receipt_id),
|
||
CONSTRAINT fk_ar_writeoff_bill FOREIGN KEY (ar_bill_id) REFERENCES ar_bill (ar_bill_id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='应收收款核销表';
|
||
|
||
CREATE TABLE IF NOT EXISTS ar_bill_export (
|
||
export_id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '导出ID',
|
||
ar_bill_id BIGINT(20) NOT NULL COMMENT '应收账单ID',
|
||
file_name VARCHAR(255) NOT NULL COMMENT '下载展示名称',
|
||
file_type VARCHAR(20) NOT NULL COMMENT 'XLSX/PDF',
|
||
template_code VARCHAR(50) NOT NULL COMMENT '导出模板标识',
|
||
template_version VARCHAR(50) DEFAULT NULL COMMENT '模板版本',
|
||
storage_key VARCHAR(500) NOT NULL COMMENT '对象存储或本地文件Key',
|
||
file_size BIGINT(20) DEFAULT NULL COMMENT '文件字节数',
|
||
file_hash VARCHAR(128) DEFAULT NULL COMMENT 'SHA-256校验值',
|
||
row_count INT(11) DEFAULT NULL COMMENT '导出订单行数',
|
||
export_status VARCHAR(30) NOT NULL COMMENT 'PROCESSING/SUCCESS/FAILED',
|
||
export_by VARCHAR(64) NOT NULL COMMENT '导出人',
|
||
export_time DATETIME NOT NULL COMMENT '导出时间',
|
||
remark VARCHAR(500) DEFAULT NULL COMMENT '失败原因或备注',
|
||
PRIMARY KEY (export_id),
|
||
KEY idx_ar_bill_export_bill (ar_bill_id, export_time),
|
||
KEY idx_ar_bill_export_status (export_status),
|
||
CONSTRAINT fk_ar_bill_export_bill FOREIGN KEY (ar_bill_id) REFERENCES ar_bill (ar_bill_id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='应收账单导出文件元数据';
|
||
|
||
CREATE TABLE IF NOT EXISTS ar_bill_log (
|
||
log_id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '日志ID',
|
||
ar_bill_id BIGINT(20) DEFAULT NULL COMMENT '账单ID',
|
||
object_type VARCHAR(40) NOT NULL COMMENT 'BILL/RECEIPT/WRITEOFF/EXPORT/BALANCE_WRITEOFF',
|
||
object_id VARCHAR(64) NOT NULL COMMENT '通用对象ID',
|
||
operation_type VARCHAR(40) NOT NULL COMMENT '操作类型:CONFIRM/VOID/EXPORT/RECEIPT/CANCEL_RECEIPT/WRITEOFF/CANCEL_WRITEOFF/BALANCE_WRITEOFF/CANCEL_BALANCE_WRITEOFF',
|
||
operation_desc VARCHAR(500) DEFAULT NULL COMMENT '操作说明',
|
||
from_status VARCHAR(30) DEFAULT NULL COMMENT '变更前状态',
|
||
to_status VARCHAR(30) DEFAULT NULL COMMENT '变更后状态',
|
||
before_data TEXT COMMENT '变更前安全快照',
|
||
after_data TEXT COMMENT '变更后安全快照',
|
||
operator_id VARCHAR(64) NOT NULL COMMENT '操作人ID',
|
||
operator_name VARCHAR(100) DEFAULT NULL COMMENT '操作人名称',
|
||
operation_source VARCHAR(30) NOT NULL COMMENT 'WEB/API/JOB/IMPORT',
|
||
request_id VARCHAR(64) DEFAULT NULL COMMENT '请求幂等标识',
|
||
trace_id VARCHAR(64) DEFAULT NULL COMMENT '链路标识',
|
||
result VARCHAR(20) NOT NULL COMMENT 'SUCCESS/FAILED',
|
||
error_message VARCHAR(1000) DEFAULT NULL COMMENT '失败原因',
|
||
client_ip VARCHAR(64) DEFAULT NULL COMMENT '来源IP',
|
||
create_time DATETIME NOT NULL COMMENT '日志时间',
|
||
PRIMARY KEY (log_id),
|
||
KEY idx_ar_bill_log_bill (ar_bill_id, create_time),
|
||
KEY idx_ar_bill_log_object (object_type, object_id, create_time),
|
||
KEY idx_ar_bill_log_request (request_id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='应收账单操作日志';
|
||
|
||
SET FOREIGN_KEY_CHECKS = 1;
|