228 lines
10 KiB
SQL
228 lines
10 KiB
SQL
CREATE DATABASE IF NOT EXISTS baiyue_finance
|
|||
|
|
DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
|
||
|
|
USE baiyue_finance;
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS fin_subject (
|
||
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||
|
|
subject_code VARCHAR(64) NOT NULL,
|
||
|
|
subject_name VARCHAR(200) NOT NULL,
|
||
|
|
status VARCHAR(16) NOT NULL DEFAULT 'ACTIVE',
|
||
|
|
version INT UNSIGNED NOT NULL DEFAULT 0,
|
||
|
|
created_by BIGINT UNSIGNED NOT NULL DEFAULT 0,
|
||
|
|
updated_by BIGINT UNSIGNED NOT NULL DEFAULT 0,
|
||
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
|
|
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
||
|
|
PRIMARY KEY (id),
|
||
|
|
UNIQUE KEY uk_fin_subject_code (subject_code)
|
||
|
|
) ENGINE=InnoDB COMMENT='平台财务主体;首期仅一个有效主体';
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS fin_customer_settlement_profile (
|
||
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||
|
|
tenant_id BIGINT UNSIGNED NOT NULL COMMENT '客户ID和数据隔离键',
|
||
|
|
customer_name_snapshot VARCHAR(200) NOT NULL,
|
||
|
|
credit_days INT UNSIGNED NOT NULL DEFAULT 30 COMMENT '默认30个自然日',
|
||
|
|
status VARCHAR(16) NOT NULL DEFAULT 'ACTIVE',
|
||
|
|
version INT UNSIGNED NOT NULL DEFAULT 0,
|
||
|
|
created_by BIGINT UNSIGNED NOT NULL,
|
||
|
|
updated_by BIGINT UNSIGNED NOT NULL,
|
||
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
|
|
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
||
|
|
PRIMARY KEY (id),
|
||
|
|
UNIQUE KEY uk_fin_customer_profile (tenant_id),
|
||
|
|
CONSTRAINT chk_fin_customer_profile_tenant CHECK (tenant_id > 0),
|
||
|
|
CONSTRAINT chk_fin_customer_profile_days CHECK (credit_days <= 3650)
|
||
|
|
) ENGINE=InnoDB COMMENT='客户结算配置;一客户一个结算对象';
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS fin_bill (
|
||
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||
|
|
tenant_id BIGINT UNSIGNED NOT NULL,
|
||
|
|
bill_no VARCHAR(64) NOT NULL,
|
||
|
|
subject_id BIGINT UNSIGNED NOT NULL,
|
||
|
|
customer_name_snapshot VARCHAR(200) NOT NULL,
|
||
|
|
currency_code CHAR(3) NOT NULL DEFAULT 'CNY',
|
||
|
|
bill_date DATE NOT NULL,
|
||
|
|
due_date DATE NOT NULL,
|
||
|
|
status VARCHAR(24) NOT NULL DEFAULT 'DRAFT' COMMENT 'DRAFT/ISSUED/PARTIALLY_PAID/PAID/VOIDED',
|
||
|
|
total_amount DECIMAL(20,6) NOT NULL DEFAULT 0,
|
||
|
|
received_amount DECIMAL(20,6) NOT NULL DEFAULT 0,
|
||
|
|
outstanding_amount DECIMAL(20,6) NOT NULL DEFAULT 0,
|
||
|
|
remark VARCHAR(500) NULL,
|
||
|
|
issued_at DATETIME(3) NULL,
|
||
|
|
issued_by BIGINT UNSIGNED NULL,
|
||
|
|
voided_at DATETIME(3) NULL,
|
||
|
|
voided_by BIGINT UNSIGNED NULL,
|
||
|
|
void_reason VARCHAR(500) NULL,
|
||
|
|
version INT UNSIGNED NOT NULL DEFAULT 0,
|
||
|
|
created_by BIGINT UNSIGNED NOT NULL,
|
||
|
|
updated_by BIGINT UNSIGNED NOT NULL,
|
||
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
|
|
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
||
|
|
PRIMARY KEY (id),
|
||
|
|
UNIQUE KEY uk_fin_bill_no (tenant_id, bill_no),
|
||
|
|
KEY idx_fin_bill_customer_status_date (tenant_id, status, bill_date),
|
||
|
|
CONSTRAINT chk_fin_bill_tenant CHECK (tenant_id > 0),
|
||
|
|
CONSTRAINT chk_fin_bill_currency CHECK (currency_code = 'CNY'),
|
||
|
|
CONSTRAINT chk_fin_bill_amounts CHECK (total_amount >= 0 AND received_amount >= 0 AND outstanding_amount >= 0)
|
||
|
|
) ENGINE=InnoDB COMMENT='客户CNY账单;首期账单即应收台账';
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS fin_bill_line (
|
||
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||
|
|
tenant_id BIGINT UNSIGNED NOT NULL,
|
||
|
|
bill_id BIGINT UNSIGNED NOT NULL,
|
||
|
|
source_type VARCHAR(32) NOT NULL DEFAULT 'FIRSTLEG_FEE',
|
||
|
|
source_id BIGINT UNSIGNED NOT NULL,
|
||
|
|
source_version INT UNSIGNED NOT NULL,
|
||
|
|
source_no VARCHAR(64) NULL,
|
||
|
|
order_id BIGINT UNSIGNED NULL,
|
||
|
|
inbound_id BIGINT UNSIGNED NULL,
|
||
|
|
fee_item_code VARCHAR(64) NOT NULL,
|
||
|
|
fee_item_name VARCHAR(200) NOT NULL,
|
||
|
|
amount DECIMAL(20,6) NOT NULL,
|
||
|
|
currency_code CHAR(3) NOT NULL DEFAULT 'CNY',
|
||
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
|
|
PRIMARY KEY (id),
|
||
|
|
UNIQUE KEY uk_fin_bill_line_source (source_type, source_id, source_version),
|
||
|
|
KEY idx_fin_bill_line_bill (tenant_id, bill_id),
|
||
|
|
CONSTRAINT chk_fin_bill_line_tenant CHECK (tenant_id > 0),
|
||
|
|
CONSTRAINT chk_fin_bill_line_currency CHECK (currency_code = 'CNY'),
|
||
|
|
CONSTRAINT chk_fin_bill_line_amount CHECK (amount >= 0)
|
||
|
|
) ENGINE=InnoDB COMMENT='账单费用来源快照明细';
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS fin_receipt (
|
||
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||
|
|
tenant_id BIGINT UNSIGNED NOT NULL,
|
||
|
|
receipt_no VARCHAR(64) NOT NULL,
|
||
|
|
subject_id BIGINT UNSIGNED NOT NULL,
|
||
|
|
currency_code CHAR(3) NOT NULL DEFAULT 'CNY',
|
||
|
|
received_amount DECIMAL(20,6) NOT NULL,
|
||
|
|
received_at DATETIME(3) NOT NULL,
|
||
|
|
payment_method VARCHAR(32) NULL,
|
||
|
|
voucher_no VARCHAR(128) NULL,
|
||
|
|
voucher_file_ids JSON NOT NULL COMMENT 'File服务文件ID字符串数组',
|
||
|
|
status VARCHAR(16) NOT NULL DEFAULT 'CONFIRMED' COMMENT 'CONFIRMED/VOIDED',
|
||
|
|
remark VARCHAR(500) NULL,
|
||
|
|
voided_at DATETIME(3) NULL,
|
||
|
|
voided_by BIGINT UNSIGNED NULL,
|
||
|
|
void_reason VARCHAR(500) NULL,
|
||
|
|
version INT UNSIGNED NOT NULL DEFAULT 0,
|
||
|
|
created_by BIGINT UNSIGNED NOT NULL,
|
||
|
|
updated_by BIGINT UNSIGNED NOT NULL,
|
||
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
|
|
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
||
|
|
PRIMARY KEY (id),
|
||
|
|
UNIQUE KEY uk_fin_receipt_no (tenant_id, receipt_no),
|
||
|
|
KEY idx_fin_receipt_customer_time (tenant_id, received_at),
|
||
|
|
CONSTRAINT chk_fin_receipt_tenant CHECK (tenant_id > 0),
|
||
|
|
CONSTRAINT chk_fin_receipt_currency CHECK (currency_code = 'CNY'),
|
||
|
|
CONSTRAINT chk_fin_receipt_amount CHECK (received_amount > 0)
|
||
|
|
) ENGINE=InnoDB COMMENT='平台财务人工登记收款及凭证';
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS fin_receipt_bill (
|
||
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||
|
|
tenant_id BIGINT UNSIGNED NOT NULL,
|
||
|
|
receipt_id BIGINT UNSIGNED NOT NULL,
|
||
|
|
bill_id BIGINT UNSIGNED NOT NULL,
|
||
|
|
applied_amount DECIMAL(20,6) NOT NULL,
|
||
|
|
created_by BIGINT UNSIGNED NOT NULL,
|
||
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
|
|
PRIMARY KEY (id),
|
||
|
|
UNIQUE KEY uk_fin_receipt_bill_pair (receipt_id, bill_id),
|
||
|
|
KEY idx_fin_receipt_bill_bill (tenant_id, bill_id),
|
||
|
|
CONSTRAINT chk_fin_receipt_bill_tenant CHECK (tenant_id > 0),
|
||
|
|
CONSTRAINT chk_fin_receipt_bill_amount CHECK (applied_amount > 0)
|
||
|
|
) ENGINE=InnoDB COMMENT='人工收款对应账单金额;UI不使用复杂核销术语';
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS fin_cost (
|
||
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||
|
|
tenant_id BIGINT UNSIGNED NOT NULL,
|
||
|
|
cost_no VARCHAR(64) NOT NULL,
|
||
|
|
cost_type VARCHAR(24) NOT NULL COMMENT 'TICKET/CONTAINER',
|
||
|
|
order_id BIGINT UNSIGNED NULL,
|
||
|
|
inbound_id BIGINT UNSIGNED NULL,
|
||
|
|
container_id BIGINT UNSIGNED NULL,
|
||
|
|
supplier_id BIGINT UNSIGNED NULL,
|
||
|
|
supplier_name_snapshot VARCHAR(200) NULL,
|
||
|
|
fee_item_code VARCHAR(64) NOT NULL,
|
||
|
|
fee_item_name VARCHAR(200) NOT NULL,
|
||
|
|
currency_code CHAR(3) NOT NULL DEFAULT 'CNY',
|
||
|
|
cost_amount DECIMAL(20,6) NOT NULL,
|
||
|
|
voucher_file_ids JSON NOT NULL,
|
||
|
|
status VARCHAR(16) NOT NULL DEFAULT 'DRAFT' COMMENT 'DRAFT/CONFIRMED/VOIDED',
|
||
|
|
remark VARCHAR(500) NULL,
|
||
|
|
confirmed_at DATETIME(3) NULL,
|
||
|
|
confirmed_by BIGINT UNSIGNED NULL,
|
||
|
|
voided_at DATETIME(3) NULL,
|
||
|
|
voided_by BIGINT UNSIGNED NULL,
|
||
|
|
void_reason VARCHAR(500) NULL,
|
||
|
|
version INT UNSIGNED NOT NULL DEFAULT 0,
|
||
|
|
created_by BIGINT UNSIGNED NOT NULL,
|
||
|
|
updated_by BIGINT UNSIGNED NOT NULL,
|
||
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
|
|
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
||
|
|
PRIMARY KEY (id),
|
||
|
|
UNIQUE KEY uk_fin_cost_no (tenant_id, cost_no),
|
||
|
|
KEY idx_fin_cost_ticket (tenant_id, order_id, inbound_id),
|
||
|
|
KEY idx_fin_cost_container (tenant_id, container_id),
|
||
|
|
CONSTRAINT chk_fin_cost_tenant CHECK (tenant_id > 0),
|
||
|
|
CONSTRAINT chk_fin_cost_currency CHECK (currency_code = 'CNY'),
|
||
|
|
CONSTRAINT chk_fin_cost_amount CHECK (cost_amount > 0),
|
||
|
|
CONSTRAINT chk_fin_cost_target CHECK (
|
||
|
|
(cost_type = 'TICKET' AND order_id IS NOT NULL AND container_id IS NULL)
|
||
|
|
OR (cost_type = 'CONTAINER' AND container_id IS NOT NULL)
|
||
|
|
)
|
||
|
|
) ENGINE=InnoDB COMMENT='人工成本;单票直接归属,整柜按体积分摊';
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS fin_cost_allocation (
|
||
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||
|
|
tenant_id BIGINT UNSIGNED NOT NULL,
|
||
|
|
cost_id BIGINT UNSIGNED NOT NULL,
|
||
|
|
order_id BIGINT UNSIGNED NOT NULL,
|
||
|
|
inbound_id BIGINT UNSIGNED NULL,
|
||
|
|
volume_cbm DECIMAL(20,6) NOT NULL,
|
||
|
|
total_volume_cbm DECIMAL(20,6) NOT NULL,
|
||
|
|
allocation_rate DECIMAL(20,10) NOT NULL,
|
||
|
|
allocated_amount DECIMAL(20,6) NOT NULL,
|
||
|
|
rounding_adjustment TINYINT NOT NULL DEFAULT 0 COMMENT '1表示尾差归集行',
|
||
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
|
|
PRIMARY KEY (id),
|
||
|
|
UNIQUE KEY uk_fin_cost_allocation_order (cost_id, order_id),
|
||
|
|
KEY idx_fin_cost_allocation_query (tenant_id, order_id),
|
||
|
|
CONSTRAINT chk_fin_cost_allocation_volume CHECK (volume_cbm >= 0 AND total_volume_cbm > 0),
|
||
|
|
CONSTRAINT chk_fin_cost_allocation_amount CHECK (allocated_amount >= 0)
|
||
|
|
) ENGINE=InnoDB COMMENT='整柜成本按有效体积分摊的可审计结果';
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS fin_idempotency_record (
|
||
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||
|
|
tenant_id BIGINT UNSIGNED NOT NULL,
|
||
|
|
operator_id BIGINT UNSIGNED NOT NULL,
|
||
|
|
operation VARCHAR(64) NOT NULL,
|
||
|
|
idempotency_key VARCHAR(128) NOT NULL,
|
||
|
|
request_hash CHAR(64) NOT NULL,
|
||
|
|
status VARCHAR(16) NOT NULL COMMENT 'PROCESSING/SUCCEEDED/FAILED',
|
||
|
|
result_resource_id BIGINT UNSIGNED NULL,
|
||
|
|
error_code VARCHAR(64) NULL,
|
||
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
|
|
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
||
|
|
PRIMARY KEY (id),
|
||
|
|
UNIQUE KEY uk_fin_idempotency (tenant_id, operator_id, operation, idempotency_key)
|
||
|
|
) ENGINE=InnoDB COMMENT='Finance人工写操作幂等记录';
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS fin_audit_log (
|
||
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||
|
|
tenant_id BIGINT UNSIGNED NOT NULL,
|
||
|
|
resource_type VARCHAR(32) NOT NULL,
|
||
|
|
resource_id BIGINT UNSIGNED NOT NULL,
|
||
|
|
action VARCHAR(64) NOT NULL,
|
||
|
|
reason VARCHAR(500) NULL,
|
||
|
|
before_data JSON NULL,
|
||
|
|
after_data JSON NULL,
|
||
|
|
operator_id BIGINT UNSIGNED NOT NULL,
|
||
|
|
operator_name_snapshot VARCHAR(128) NOT NULL,
|
||
|
|
request_id VARCHAR(128) NULL,
|
||
|
|
trace_id VARCHAR(128) NULL,
|
||
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||
|
|
PRIMARY KEY (id),
|
||
|
|
KEY idx_fin_audit_resource (tenant_id, resource_type, resource_id, created_at),
|
||
|
|
KEY idx_fin_audit_operator (operator_id, created_at)
|
||
|
|
) ENGINE=InnoDB COMMENT='Finance不可变业务审计明细';
|