114 lines
7.9 KiB
SQL
114 lines
7.9 KiB
SQL
USE baiyue_firstleg;
|
||
SET NAMES utf8mb4;
|
||
|
||
CREATE TABLE IF NOT EXISTS fl_fee_item (
|
||
id BIGINT UNSIGNED NOT NULL COMMENT '费用项目ID',
|
||
tenant_id BIGINT UNSIGNED NOT NULL COMMENT '平台公共费用项目作用域,固定为0;物理字段名沿用 tenant_id',
|
||
category VARCHAR(64) NOT NULL COMMENT '费用分类',
|
||
trade_scope VARCHAR(20) NOT NULL COMMENT 'DOMESTIC国内、INTERNATIONAL国际',
|
||
fee_code VARCHAR(50) NOT NULL COMMENT '稳定费用编码;平台公共主数据固定编码',
|
||
supplier_category VARCHAR(16) NULL COMMENT 'PAYABLE供应商类别约束;为空时可选任意ACTIVE供应商',
|
||
fee_type_name VARCHAR(128) NOT NULL COMMENT '费用类型名称',
|
||
pickup_payable TINYINT(1) NOT NULL DEFAULT 0 COMMENT '提柜应付是否参与',
|
||
pickup_receivable TINYINT(1) NOT NULL DEFAULT 0 COMMENT '提柜应收是否参与',
|
||
warehouse_payable TINYINT(1) NOT NULL DEFAULT 0 COMMENT '仓储应付是否参与',
|
||
warehouse_receivable TINYINT(1) NOT NULL DEFAULT 0 COMMENT '仓储应收是否参与',
|
||
allocation_fee TINYINT(1) NOT NULL DEFAULT 0 COMMENT '平摊费用是否参与',
|
||
description VARCHAR(500) NULL COMMENT '说明',
|
||
status VARCHAR(16) NOT NULL DEFAULT 'ACTIVE' COMMENT '状态:ACTIVE启用、DISABLED停用',
|
||
created_by BIGINT NULL COMMENT '创建人ID;系统初始化时可为空',
|
||
created_by_name VARCHAR(64) NULL COMMENT '创建人名称快照',
|
||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
|
||
updated_by BIGINT NULL COMMENT '最后修改人ID;系统初始化时可为空',
|
||
updated_by_name VARCHAR(64) NULL COMMENT '最后修改人名称快照',
|
||
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '最后更新时间',
|
||
deleted TINYINT(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除标记:0未删除、1已删除',
|
||
version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',
|
||
PRIMARY KEY (id),
|
||
UNIQUE KEY uk_fee_item_code (fee_code),
|
||
KEY idx_fee_item_query (tenant_id, trade_scope, category, status, deleted),
|
||
KEY idx_fee_item_name (tenant_id, fee_type_name, deleted)
|
||
) ENGINE=InnoDB COMMENT='平台公共费用项目主数据';
|
||
|
||
CREATE TABLE IF NOT EXISTS fl_inbound_fee_detail (
|
||
id BIGINT UNSIGNED NOT NULL COMMENT '入库费用明细ID',
|
||
tenant_id BIGINT UNSIGNED NOT NULL COMMENT '客户ID(客户隔离键);费用明细引用平台公共费用项目',
|
||
inbound_id BIGINT UNSIGNED NOT NULL COMMENT '入库单ID',
|
||
fee_item_id BIGINT UNSIGNED NOT NULL COMMENT '绑定费用项目ID',
|
||
inbound_code VARCHAR(40) NOT NULL COMMENT '入仓码快照',
|
||
direction VARCHAR(16) NOT NULL COMMENT 'RECEIVABLE应收、PAYABLE应付',
|
||
supplier_id BIGINT UNSIGNED NULL COMMENT '应付Warehouse供应商ID快照;应收为空',
|
||
supplier_name VARCHAR(200) NULL COMMENT '应付Warehouse供应商名称快照;应收为空',
|
||
supplier_category VARCHAR(16) NULL COMMENT '费用项目供应商类别快照;应收为空',
|
||
settlement_mode VARCHAR(16) NULL COMMENT '仅PAYABLE:ON_ACCOUNT账期应付、DIRECT_PAID业务已付;RECEIVABLE为空',
|
||
paid_at DATETIME(3) NULL COMMENT 'DIRECT_PAID业务已付时间',
|
||
payment_method VARCHAR(32) NULL COMMENT 'DIRECT_PAID付款方式',
|
||
payment_reference_no VARCHAR(128) NULL COMMENT 'DIRECT_PAID付款流水号',
|
||
payment_voucher_file_ids JSON NULL COMMENT 'DIRECT_PAID付款凭证File ID数组',
|
||
business_date DATE NOT NULL COMMENT '业务发生日',
|
||
fee_category_snapshot VARCHAR(64) NOT NULL COMMENT '费用分类快照',
|
||
trade_scope_snapshot VARCHAR(20) NOT NULL COMMENT '国内国际快照',
|
||
fee_type_name_snapshot VARCHAR(128) NOT NULL COMMENT '费用类型名称快照',
|
||
channel_code VARCHAR(64) NULL COMMENT '渠道编码快照',
|
||
channel_name VARCHAR(128) NULL COMMENT '渠道名称快照',
|
||
destination_code VARCHAR(32) NULL COMMENT '目的仓编码快照',
|
||
destination_name VARCHAR(128) NULL COMMENT '目的仓名称快照',
|
||
package_count INT NULL COMMENT '件数快照',
|
||
actual_gross_weight_kg DECIMAL(18,4) NULL COMMENT '仓库实测毛重快照,单位千克',
|
||
actual_volume_cbm DECIMAL(18,6) NULL COMMENT '实际体积快照,单位立方米',
|
||
volume_weight_kg DECIMAL(18,4) NULL COMMENT '材积重快照,单位千克',
|
||
chargeable_weight_kg DECIMAL(18,4) NULL COMMENT '费用计算采用的计费重量,单位千克',
|
||
chargeable_volume_cbm DECIMAL(18,6) NULL COMMENT '费用计算采用的计费体积,单位立方米',
|
||
unit_price DECIMAL(18,4) NOT NULL COMMENT '费用单价;计价单位由对应费用项目规则确定',
|
||
currency CHAR(3) NOT NULL COMMENT '金额币种三字码,如CNY',
|
||
amount DECIMAL(18,2) NOT NULL COMMENT '该费用明细金额,币种由currency字段指定',
|
||
remark VARCHAR(500) NULL COMMENT '备注',
|
||
review_status VARCHAR(16) NOT NULL DEFAULT 'PENDING' COMMENT '审核状态:PENDING待审核、APPROVED已通过、REJECTED已驳回',
|
||
reviewer_id BIGINT NULL COMMENT '审核人ID',
|
||
reviewer_name VARCHAR(64) NULL COMMENT '审核人名称快照',
|
||
reviewed_at DATETIME(3) NULL COMMENT '审核时间',
|
||
review_reason VARCHAR(500) NULL COMMENT '审核驳回原因',
|
||
created_by BIGINT NULL COMMENT '创建人或系统主体ID',
|
||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
|
||
updated_by BIGINT NULL COMMENT '最后修改人或系统主体ID',
|
||
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '最后更新时间',
|
||
deleted TINYINT(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除标记:0未删除、1已删除',
|
||
version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',
|
||
PRIMARY KEY (id),
|
||
KEY idx_inbound_fee_detail (tenant_id, inbound_id, business_date, deleted),
|
||
KEY idx_inbound_fee_review (tenant_id, review_status, business_date, deleted),
|
||
KEY idx_inbound_fee_item (tenant_id, fee_item_id, deleted),
|
||
CONSTRAINT chk_inbound_fee_settlement CHECK (
|
||
(direction='RECEIVABLE' AND settlement_mode IS NULL AND paid_at IS NULL AND payment_method IS NULL
|
||
AND payment_reference_no IS NULL AND payment_voucher_file_ids IS NULL)
|
||
OR (direction='PAYABLE' AND settlement_mode='ON_ACCOUNT' AND paid_at IS NULL AND payment_method IS NULL
|
||
AND payment_reference_no IS NULL AND payment_voucher_file_ids IS NULL)
|
||
OR (direction='PAYABLE' AND settlement_mode='DIRECT_PAID' AND paid_at IS NOT NULL
|
||
AND payment_method IN ('ONLINE','BANK_TRANSFER','CASH','OTHER')
|
||
AND (payment_reference_no IS NOT NULL OR JSON_LENGTH(payment_voucher_file_ids)>0))
|
||
),
|
||
CONSTRAINT fk_inbound_fee_detail_order FOREIGN KEY (inbound_id) REFERENCES fl_inbound_order (id),
|
||
CONSTRAINT fk_inbound_fee_detail_item FOREIGN KEY (fee_item_id) REFERENCES fl_fee_item (id)
|
||
) ENGINE=InnoDB COMMENT='入库单应收应付费用明细';
|
||
|
||
-- 费用项目是平台公共主数据;费用明细仍按客户隔离。
|
||
SET @fee_tenant_comment = '平台公共费用项目作用域,固定为0;物理字段名沿用 tenant_id';
|
||
SET @ddl = IF(
|
||
(SELECT COUNT(*) FROM information_schema.columns
|
||
WHERE table_schema = DATABASE() AND table_name = 'fl_fee_item'
|
||
AND column_name = 'tenant_id' AND column_comment = @fee_tenant_comment) = 1,
|
||
'SELECT 1',
|
||
'ALTER TABLE fl_fee_item MODIFY COLUMN tenant_id BIGINT UNSIGNED NOT NULL COMMENT ''平台公共费用项目作用域,固定为0;物理字段名沿用 tenant_id'''
|
||
);
|
||
PREPARE statement FROM @ddl; EXECUTE statement; DEALLOCATE PREPARE statement;
|
||
|
||
SET @fee_tenant_comment = '客户ID(客户隔离键);费用明细引用平台公共费用项目';
|
||
SET @ddl = IF(
|
||
(SELECT COUNT(*) FROM information_schema.columns
|
||
WHERE table_schema = DATABASE() AND table_name = 'fl_inbound_fee_detail'
|
||
AND column_name = 'tenant_id' AND column_comment = @fee_tenant_comment) = 1,
|
||
'SELECT 1',
|
||
'ALTER TABLE fl_inbound_fee_detail MODIFY COLUMN tenant_id BIGINT UNSIGNED NOT NULL COMMENT ''客户ID(客户隔离键);费用明细引用平台公共费用项目'''
|
||
);
|
||
PREPARE statement FROM @ddl; EXECUTE statement; DEALLOCATE PREPARE statement;
|