Files
BMS/bms-back/sql/ar/ar_bill.sql
T
2026-09-17 11:03:33 +08:00

149 lines
10 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- 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_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=应收账单,EXPORT=账单导出,BALANCE_WRITEOFF=余额核销;历史值可能包含已下线模块类型',
object_id VARCHAR(64) NOT NULL COMMENT '通用对象ID',
operation_type VARCHAR(40) NOT NULL COMMENT '操作类型:CREATE=生成账单,GENERATE=生成校验,CONFIRM=确认账单,VOID=作废账单,EXPORT=导出账单,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;