@@ -0,0 +1,533 @@
SET NAMES utf8mb4 ;
CREATE DATABASE IF NOT EXISTS baiyue_firstleg
DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci ;
USE baiyue_firstleg ;
CREATE TABLE IF NOT EXISTS fl_inbound_order (
id BIGINT UNSIGNED NOT NULL COMMENT ' 入库单ID(雪花ID) ' ,
tenant_id BIGINT UNSIGNED NOT NULL COMMENT ' 数据所属租户ID ' ,
task_id BIGINT UNSIGNED NULL COMMENT ' 头程履约任务ID ' ,
order_id BIGINT UNSIGNED NOT NULL COMMENT ' 订单服务订单ID,不建立跨库外键 ' ,
order_no VARCHAR ( 32 ) NOT NULL COMMENT ' 订单号快照 ' ,
inbound_code VARCHAR ( 40 ) NOT NULL COMMENT ' 租户内唯一入仓码 ' ,
process_status VARCHAR ( 24 ) NOT NULL DEFAULT ' WAIT_MEASURE ' COMMENT ' 入库流程状态 ' ,
order_status_snapshot VARCHAR ( 24 ) NOT NULL COMMENT ' 订单状态快照 ' ,
measure_review_status VARCHAR ( 24 ) NOT NULL DEFAULT ' NOT_SUBMITTED ' COMMENT ' 测量数据审核状态 ' ,
fee_status VARCHAR ( 24 ) NOT NULL DEFAULT ' UNPRICED ' COMMENT ' 费用业务状态 ' ,
fee_review_status VARCHAR ( 24 ) NOT NULL DEFAULT ' NOT_SUBMITTED ' COMMENT ' 费用审核状态 ' ,
notification_status VARCHAR ( 24 ) NOT NULL DEFAULT ' NOT_CREATED ' COMMENT ' 客户通知状态 ' ,
expected_arrival_at DATETIME ( 3 ) NULL COMMENT ' 预计到达时间 ' ,
customer_id BIGINT UNSIGNED NULL COMMENT ' 客户逻辑ID ' ,
customer_name VARCHAR ( 128 ) NOT NULL COMMENT ' 客户名称快照 ' ,
company_id BIGINT UNSIGNED NULL COMMENT ' 运营公司逻辑ID ' ,
company_name VARCHAR ( 128 ) NULL COMMENT ' 运营公司名称快照 ' ,
warehouse_id BIGINT UNSIGNED NOT NULL COMMENT ' 实际作业仓库ID ' ,
warehouse_name VARCHAR ( 128 ) NOT NULL COMMENT ' 实际作业仓库名称快照 ' ,
delivery_warehouse_id BIGINT UNSIGNED NULL COMMENT ' 交货仓逻辑ID ' ,
delivery_warehouse_name VARCHAR ( 128 ) NULL COMMENT ' 交货仓名称快照 ' ,
business_type VARCHAR ( 32 ) NOT NULL COMMENT ' 业务类型 ' ,
channel_code VARCHAR ( 64 ) NULL COMMENT ' 渠道编码 ' ,
channel_name VARCHAR ( 128 ) NULL COMMENT ' 渠道名称快照 ' ,
carrier_id BIGINT UNSIGNED NULL COMMENT ' 计费船司逻辑ID ' ,
carrier_name VARCHAR ( 128 ) NULL COMMENT ' 计费船司名称快照 ' ,
tax_mode VARCHAR ( 24 ) NULL COMMENT ' 买单或退税模式 ' ,
container_mode VARCHAR ( 24 ) NULL COMMENT ' 整柜或散货模式 ' ,
customs_inspection TINYINT ( 1 ) NULL COMMENT ' 是否商检 ' ,
destination_type VARCHAR ( 24 ) NULL COMMENT ' 目的仓类型 ' ,
destination_warehouse_id BIGINT UNSIGNED NULL COMMENT ' 目的仓逻辑ID ' ,
destination_code VARCHAR ( 32 ) NULL COMMENT ' 目的仓编码,例如FBA仓编码 ' ,
destination_name VARCHAR ( 128 ) NULL COMMENT ' 目的仓名称快照 ' ,
hold_flag TINYINT ( 1 ) NOT NULL DEFAULT 0 COMMENT ' 当前是否扣货 ' ,
current_hold_reason VARCHAR ( 500 ) NULL COMMENT ' 当前扣货理由快照 ' ,
total_package_count INT UNSIGNED NULL COMMENT ' 确认后的总箱数 ' ,
actual_gross_weight_kg DECIMAL ( 18 , 3 ) NULL COMMENT ' 确认后的实际总毛重kg ' ,
chargeable_weight_kg DECIMAL ( 18 , 3 ) NULL COMMENT ' 当前费用快照的计费重量kg ' ,
actual_volume_cbm DECIMAL ( 18 , 4 ) NULL COMMENT ' 确认后的实际总体积m3 ' ,
chargeable_volume_cbm DECIMAL ( 18 , 4 ) NULL COMMENT ' 当前费用快照的计费体积m3 ' ,
pallet_count INT UNSIGNED NULL COMMENT ' 已分配总托盘数快照 ' ,
volume_weight_kg DECIMAL ( 18 , 3 ) NULL COMMENT ' 总材积重kg ' ,
actual_net_weight_kg DECIMAL ( 18 , 3 ) NULL COMMENT ' 总净重kg ' ,
measure_completed_at DATETIME ( 3 ) NULL COMMENT ' 测量完成时间 ' ,
inbounded_at DATETIME ( 3 ) NULL COMMENT ' 入库完成时间 ' ,
express_company_code VARCHAR ( 64 ) NULL COMMENT ' 快递公司编码快照 ' ,
express_company_name VARCHAR ( 128 ) NULL COMMENT ' 快递公司名称快照 ' ,
express_tracking_no VARCHAR ( 128 ) NULL COMMENT ' 快递单号快照 ' ,
public_remark VARCHAR ( 1000 ) NULL COMMENT ' 客户可见备注 ' ,
created_by BIGINT UNSIGNED NOT NULL COMMENT ' 创建人ID ' ,
created_by_name VARCHAR ( 64 ) NULL COMMENT ' 创建人名称快照 ' ,
created_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) COMMENT ' 创建时间 ' ,
updated_by BIGINT UNSIGNED NOT 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 ' 逻辑删除标记 ' ,
version INT NOT NULL DEFAULT 0 COMMENT ' 乐观锁版本号 ' ,
PRIMARY KEY ( id ) ,
UNIQUE KEY uk_inbound_tenant_code ( tenant_id , inbound_code ) ,
UNIQUE KEY uk_inbound_tenant_order ( tenant_id , order_id ) ,
KEY idx_inbound_process_time ( tenant_id , process_status , created_at , id ) ,
KEY idx_inbound_measure_time ( tenant_id , measure_review_status , created_at , id ) ,
KEY idx_inbound_fee_time ( tenant_id , fee_review_status , created_at , id ) ,
KEY idx_inbound_warehouse_status ( tenant_id , warehouse_id , process_status , created_at ) ,
KEY idx_inbound_customer_time ( tenant_id , customer_id , created_at ) ,
KEY idx_inbound_company_time ( tenant_id , company_id , created_at ) ,
KEY idx_inbound_arrival ( tenant_id , expected_arrival_at ) ,
KEY idx_inbound_destination ( tenant_id , destination_code , created_at ) ,
KEY idx_inbound_channel ( tenant_id , channel_code , created_at ) ,
CONSTRAINT fk_inbound_task FOREIGN KEY ( task_id ) REFERENCES fl_fulfillment_task ( id )
) ENGINE = InnoDB COMMENT = ' 二期头程入库单聚合根和列表查询快照 ' ;
CREATE TABLE IF NOT EXISTS fl_inbound_pickup_snapshot (
id BIGINT UNSIGNED NOT NULL COMMENT ' 提货信息快照ID ' ,
tenant_id BIGINT UNSIGNED NOT NULL COMMENT ' 数据所属租户ID ' ,
inbound_id BIGINT UNSIGNED NOT NULL COMMENT ' 入库单ID ' ,
pickup_method VARCHAR ( 24 ) NULL COMMENT ' 提货方式 ' ,
pickup_at DATETIME ( 3 ) NULL COMMENT ' 提货时间 ' ,
contact_name VARCHAR ( 64 ) NULL COMMENT ' 提货联系人 ' ,
contact_phone VARCHAR ( 32 ) NULL COMMENT ' 提货联系人电话 ' ,
contact_email VARCHAR ( 128 ) NULL COMMENT ' 提货联系人邮箱 ' ,
country_code CHAR ( 2 ) NULL COMMENT ' 国家二字码 ' ,
province VARCHAR ( 64 ) NULL COMMENT ' 省或州 ' ,
city VARCHAR ( 64 ) NULL COMMENT ' 城市 ' ,
district VARCHAR ( 64 ) NULL COMMENT ' 区县 ' ,
address_line VARCHAR ( 512 ) NULL COMMENT ' 提货详细地址 ' ,
postal_code VARCHAR ( 20 ) NULL COMMENT ' 提货邮编 ' ,
created_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) COMMENT ' 创建时间 ' ,
PRIMARY KEY ( id ) ,
UNIQUE KEY uk_pickup_inbound ( tenant_id , inbound_id ) ,
CONSTRAINT fk_pickup_inbound FOREIGN KEY ( inbound_id ) REFERENCES fl_inbound_order ( id )
) ENGINE = InnoDB COMMENT = ' 入库单提货信息不可变快照 ' ;
CREATE TABLE IF NOT EXISTS fl_inbound_destination_snapshot (
id BIGINT UNSIGNED NOT NULL COMMENT ' 目的仓地址快照ID ' ,
tenant_id BIGINT UNSIGNED NOT NULL COMMENT ' 数据所属租户ID ' ,
inbound_id BIGINT UNSIGNED NOT NULL COMMENT ' 入库单ID ' ,
destination_type VARCHAR ( 24 ) NULL COMMENT ' 目的仓类型 ' ,
destination_code VARCHAR ( 32 ) NULL COMMENT ' 目的仓编码 ' ,
destination_name VARCHAR ( 128 ) NULL COMMENT ' 目的仓名称 ' ,
country_code CHAR ( 2 ) NULL COMMENT ' 国家二字码 ' ,
state_province VARCHAR ( 100 ) NULL COMMENT ' 省或州 ' ,
city VARCHAR ( 100 ) NULL COMMENT ' 城市 ' ,
address_line VARCHAR ( 512 ) NULL COMMENT ' 详细地址 ' ,
postal_code VARCHAR ( 20 ) NULL COMMENT ' 邮编 ' ,
contact_name VARCHAR ( 64 ) NULL COMMENT ' 联系人 ' ,
contact_phone VARCHAR ( 32 ) NULL COMMENT ' 联系人电话 ' ,
created_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) COMMENT ' 创建时间 ' ,
PRIMARY KEY ( id ) ,
UNIQUE KEY uk_destination_inbound ( tenant_id , inbound_id ) ,
CONSTRAINT fk_destination_inbound FOREIGN KEY ( inbound_id ) REFERENCES fl_inbound_order ( id )
) ENGINE = InnoDB COMMENT = ' 入库单目的仓地址和联系人快照 ' ;
CREATE TABLE IF NOT EXISTS fl_inbound_transport_snapshot (
id BIGINT UNSIGNED NOT NULL COMMENT ' 运输信息快照ID ' ,
tenant_id BIGINT UNSIGNED NOT NULL COMMENT ' 数据所属租户ID ' ,
inbound_id BIGINT UNSIGNED NOT NULL COMMENT ' 入库单ID ' ,
loading_status VARCHAR ( 24 ) NULL COMMENT ' 配载状态快照 ' ,
container_no VARCHAR ( 64 ) NULL COMMENT ' 集装箱号 ' ,
cabinet_no VARCHAR ( 64 ) NULL COMMENT ' 柜号或内部柜单号 ' ,
vessel_name VARCHAR ( 128 ) NULL COMMENT ' 船名 ' ,
voyage_no VARCHAR ( 64 ) NULL COMMENT ' 航次 ' ,
sailing_at DATETIME ( 3 ) NULL COMMENT ' 开船时间 ' ,
port_arrival_at DATETIME ( 3 ) NULL COMMENT ' 到港时间 ' ,
source_updated_at DATETIME ( 3 ) NULL COMMENT ' 上游数据更新时间 ' ,
created_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) COMMENT ' 创建时间 ' ,
updated_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) ON UPDATE CURRENT_TIMESTAMP ( 3 ) COMMENT ' 更新时间 ' ,
PRIMARY KEY ( id ) ,
UNIQUE KEY uk_transport_inbound ( tenant_id , inbound_id ) ,
KEY idx_transport_container ( tenant_id , container_no ) ,
KEY idx_transport_cabinet ( tenant_id , cabinet_no ) ,
KEY idx_transport_loading ( tenant_id , loading_status , sailing_at ) ,
CONSTRAINT fk_transport_inbound FOREIGN KEY ( inbound_id ) REFERENCES fl_inbound_order ( id )
) ENGINE = InnoDB COMMENT = ' 入库单关联运输信息只读快照 ' ;
CREATE TABLE IF NOT EXISTS fl_inbound_measurement (
id BIGINT UNSIGNED NOT NULL COMMENT ' 测量批次ID ' ,
tenant_id BIGINT UNSIGNED NOT NULL COMMENT ' 数据所属租户ID ' ,
inbound_id BIGINT UNSIGNED NOT NULL COMMENT ' 入库单ID ' ,
source_type VARCHAR ( 24 ) NOT NULL COMMENT ' 数据来源:THIRD_PARTY或MANUAL ' ,
source_code VARCHAR ( 64 ) NULL COMMENT ' 第三方应用或来源编码 ' ,
external_event_no VARCHAR ( 128 ) NULL COMMENT ' 第三方事件号 ' ,
device_code VARCHAR ( 64 ) NULL COMMENT ' 测量设备编码 ' ,
warehouse_code VARCHAR ( 50 ) NULL COMMENT ' 第三方回传仓库编码 ' ,
measured_at DATETIME ( 3 ) NULL COMMENT ' 设备测量时间 ' ,
status VARCHAR ( 24 ) NOT NULL DEFAULT ' RECEIVED ' COMMENT ' 测量批次状态 ' ,
raw_payload_json JSON NULL COMMENT ' 第三方原始报文 ' ,
original_document_no VARCHAR ( 64 ) NULL COMMENT ' 原单据号码快照 ' ,
original_gross_weight_kg DECIMAL ( 18 , 3 ) NULL COMMENT ' 原单据毛重kg ' ,
original_volume_cbm DECIMAL ( 18 , 4 ) NULL COMMENT ' 原单据体积或材积m3 ' ,
actual_goods_name VARCHAR ( 255 ) NULL COMMENT ' 实际品名 ' ,
total_package_count INT UNSIGNED NULL COMMENT ' 本批次总箱数 ' ,
total_volume_raw_cbm DECIMAL ( 18 , 6 ) NULL COMMENT ' 本批次原始总体积m3 ' ,
total_volume_cbm DECIMAL ( 18 , 4 ) NULL COMMENT ' 本批次业务总体积m3 ' ,
volume_weight_kg DECIMAL ( 18 , 3 ) NULL COMMENT ' 本批次总材积重kg ' ,
created_by BIGINT UNSIGNED NULL COMMENT ' 创建人或系统主体ID ' ,
created_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) COMMENT ' 创建时间 ' ,
updated_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) ON UPDATE CURRENT_TIMESTAMP ( 3 ) COMMENT ' 更新时间 ' ,
version INT NOT NULL DEFAULT 0 COMMENT ' 乐观锁版本号 ' ,
PRIMARY KEY ( id ) ,
UNIQUE KEY uk_measure_external_event ( tenant_id , source_code , external_event_no ) ,
KEY idx_measure_inbound_time ( tenant_id , inbound_id , created_at ) ,
CONSTRAINT fk_measure_inbound FOREIGN KEY ( inbound_id ) REFERENCES fl_inbound_order ( id )
) ENGINE = InnoDB COMMENT = ' 入库长宽高测量批次和第三方原始数据 ' ;
CREATE TABLE IF NOT EXISTS fl_inbound_measurement_item (
id BIGINT UNSIGNED NOT NULL COMMENT ' 测量明细ID ' ,
tenant_id BIGINT UNSIGNED NOT NULL COMMENT ' 数据所属租户ID ' ,
measurement_id BIGINT UNSIGNED NOT NULL COMMENT ' 测量批次ID ' ,
item_no VARCHAR ( 32 ) NOT NULL COMMENT ' 批次内明细号 ' ,
box_specification VARCHAR ( 64 ) NOT NULL COMMENT ' 箱规标识 ' ,
package_count INT UNSIGNED NOT NULL COMMENT ' 相同箱规箱数 ' ,
length_cm DECIMAL ( 12 , 3 ) NOT NULL COMMENT ' 原始长度cm ' ,
width_cm DECIMAL ( 12 , 3 ) NOT NULL COMMENT ' 原始宽度cm ' ,
height_cm DECIMAL ( 12 , 3 ) NOT NULL COMMENT ' 原始高度cm ' ,
girth_cm DECIMAL ( 12 , 3 ) NOT NULL COMMENT ' 周长cm,规则为长+2*(宽+高) ' ,
unit_weight_kg DECIMAL ( 18 , 3 ) NULL COMMENT ' 单箱重量kg,第三方仅回传尺寸时可为空 ' ,
unit_volume_cbm DECIMAL ( 18 , 4 ) NOT NULL COMMENT ' 单箱业务体积m3 ' ,
volume_raw_cbm DECIMAL ( 18 , 6 ) NOT NULL COMMENT ' 原始体积m3 ' ,
volume_cbm DECIMAL ( 18 , 4 ) NOT NULL COMMENT ' 业务体积m3 ' ,
total_weight_kg DECIMAL ( 18 , 3 ) NULL COMMENT ' 本箱规总重量kg ' ,
total_volume_cbm DECIMAL ( 18 , 4 ) NOT NULL COMMENT ' 本箱规总体积m3 ' ,
volume_weight_kg DECIMAL ( 18 , 3 ) NOT NULL COMMENT ' 本箱规材积重kg ' ,
calculation_rule_version VARCHAR ( 32 ) NOT NULL COMMENT ' 体积计算和舍入规则版本 ' ,
source_image_file_id BIGINT UNSIGNED NULL COMMENT ' 测量设备图片文件ID ' ,
over_limit_warning VARCHAR ( 500 ) NULL COMMENT ' 超线提醒快照 ' ,
outer_length_cm DECIMAL ( 12 , 3 ) NULL COMMENT ' 外箱规长度cm ' ,
outer_width_cm DECIMAL ( 12 , 3 ) NULL COMMENT ' 外箱规宽度cm ' ,
outer_height_cm DECIMAL ( 12 , 3 ) NULL COMMENT ' 外箱规高度cm ' ,
remark VARCHAR ( 500 ) NULL COMMENT ' 测量明细备注 ' ,
created_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) COMMENT ' 创建时间 ' ,
PRIMARY KEY ( id ) ,
UNIQUE KEY uk_measure_item_no ( tenant_id , measurement_id , item_no ) ,
CONSTRAINT fk_measure_item_batch FOREIGN KEY ( measurement_id ) REFERENCES fl_inbound_measurement ( id )
) ENGINE = InnoDB COMMENT = ' 入库长宽高和箱数测量明细 ' ;
CREATE TABLE IF NOT EXISTS fl_inbound_weight_result (
id BIGINT UNSIGNED NOT NULL COMMENT ' OCR重量结果ID ' ,
tenant_id BIGINT UNSIGNED NOT NULL COMMENT ' 数据所属租户ID ' ,
inbound_id BIGINT UNSIGNED NOT NULL COMMENT ' 入库单ID ' ,
file_id BIGINT UNSIGNED NOT NULL COMMENT ' 称重图片文件ID ' ,
ocr_provider VARCHAR ( 64 ) NULL COMMENT ' OCR服务商编码 ' ,
ocr_raw_text VARCHAR ( 1000 ) NULL COMMENT ' OCR原始文本 ' ,
ocr_weight_value DECIMAL ( 18 , 3 ) NULL COMMENT ' OCR识别原始重量值 ' ,
ocr_weight_unit VARCHAR ( 8 ) NULL COMMENT ' OCR识别原始单位 ' ,
confidence DECIMAL ( 6 , 5 ) NULL COMMENT ' 识别置信度 ' ,
adjusted_weight_value DECIMAL ( 18 , 3 ) NULL COMMENT ' 人工修正后的原单位重量 ' ,
adjusted_weight_unit VARCHAR ( 8 ) NULL COMMENT ' 人工修正后的单位 ' ,
final_weight_kg DECIMAL ( 18 , 3 ) NULL COMMENT ' 确认并统一换算后的重量kg ' ,
recognition_status VARCHAR ( 24 ) NOT NULL DEFAULT ' PENDING ' COMMENT ' 识别和确认状态 ' ,
adjustment_reason VARCHAR ( 500 ) NULL COMMENT ' 人工修正原因 ' ,
adjusted_by BIGINT UNSIGNED NULL COMMENT ' 修正人ID ' ,
adjusted_at DATETIME ( 3 ) NULL COMMENT ' 修正时间 ' ,
confirmed_by BIGINT UNSIGNED NULL COMMENT ' 确认人ID ' ,
confirmed_at DATETIME ( 3 ) NULL COMMENT ' 确认时间 ' ,
created_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) 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 ' 逻辑删除标记 ' ,
version INT NOT NULL DEFAULT 0 COMMENT ' 乐观锁版本号 ' ,
PRIMARY KEY ( id ) ,
UNIQUE KEY uk_weight_inbound_file ( tenant_id , inbound_id , file_id ) ,
KEY idx_weight_inbound_status ( tenant_id , inbound_id , recognition_status ) ,
CONSTRAINT fk_weight_inbound FOREIGN KEY ( inbound_id ) REFERENCES fl_inbound_order ( id )
) ENGINE = InnoDB COMMENT = ' 称重图片OCR原值、人工修正值和确认重量 ' ;
CREATE TABLE IF NOT EXISTS fl_inbound_weight_revision (
id BIGINT UNSIGNED NOT NULL COMMENT ' OCR重量修订记录ID ' ,
tenant_id BIGINT UNSIGNED NOT NULL COMMENT ' 数据所属租户ID ' ,
inbound_id BIGINT UNSIGNED NOT NULL COMMENT ' 入库单ID ' ,
weight_result_id BIGINT UNSIGNED NOT NULL COMMENT ' OCR重量结果ID ' ,
revision_no INT UNSIGNED NOT NULL COMMENT ' 结果版本号,与乐观锁版本一致 ' ,
action VARCHAR ( 24 ) NOT NULL COMMENT ' 动作:CORRECT或CONFIRM ' ,
before_weight_value DECIMAL ( 18 , 3 ) NULL COMMENT ' 变更前原单位重量 ' ,
before_weight_unit VARCHAR ( 8 ) NULL COMMENT ' 变更前单位 ' ,
after_weight_value DECIMAL ( 18 , 3 ) NULL COMMENT ' 变更后原单位重量 ' ,
after_weight_unit VARCHAR ( 8 ) NULL COMMENT ' 变更后单位 ' ,
final_weight_kg DECIMAL ( 18 , 3 ) NULL COMMENT ' 确认时统一换算后的重量kg ' ,
reason VARCHAR ( 500 ) NULL COMMENT ' 人工修正原因 ' ,
operator_id BIGINT UNSIGNED NOT NULL COMMENT ' 操作人ID ' ,
operator_name VARCHAR ( 64 ) NULL COMMENT ' 操作人名称快照 ' ,
operated_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) COMMENT ' 操作时间 ' ,
PRIMARY KEY ( id ) ,
UNIQUE KEY uk_weight_revision_no ( tenant_id , weight_result_id , revision_no ) ,
KEY idx_weight_revision_time ( tenant_id , inbound_id , operated_at ) ,
CONSTRAINT fk_weight_revision_inbound FOREIGN KEY ( inbound_id ) REFERENCES fl_inbound_order ( id ) ,
CONSTRAINT fk_weight_revision_result FOREIGN KEY ( weight_result_id ) REFERENCES fl_inbound_weight_result ( id )
) ENGINE = InnoDB COMMENT = ' OCR重量人工修正和确认的不可变版本历史 ' ;
CREATE TABLE IF NOT EXISTS fl_measure_review_record (
id BIGINT UNSIGNED NOT NULL COMMENT ' 测量审核记录ID ' ,
tenant_id BIGINT UNSIGNED NOT NULL COMMENT ' 数据所属租户ID ' ,
inbound_id BIGINT UNSIGNED NOT NULL COMMENT ' 入库单ID ' ,
measurement_id BIGINT UNSIGNED NULL COMMENT ' 被审核的测量批次ID ' ,
review_result VARCHAR ( 24 ) NOT NULL COMMENT ' 审核结果 ' ,
review_reason VARCHAR ( 1000 ) NULL COMMENT ' 审核或驳回原因 ' ,
exception_release TINYINT ( 1 ) NOT NULL DEFAULT 0 COMMENT ' 是否异常放行 ' ,
release_reason VARCHAR ( 1000 ) NULL COMMENT ' 异常放行原因 ' ,
allow_rejected_config TINYINT ( 1 ) NOT NULL DEFAULT 0 COMMENT ' 操作时Nacos异常放行开关值 ' ,
reviewer_id BIGINT UNSIGNED NOT NULL COMMENT ' 审核人ID ' ,
reviewer_name VARCHAR ( 64 ) NULL COMMENT ' 审核人名称快照 ' ,
reviewed_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) COMMENT ' 审核时间 ' ,
PRIMARY KEY ( id ) ,
KEY idx_review_inbound_time ( tenant_id , inbound_id , reviewed_at ) ,
KEY idx_review_exception_release ( tenant_id , inbound_id , exception_release , reviewed_at ) ,
CONSTRAINT fk_review_inbound FOREIGN KEY ( inbound_id ) REFERENCES fl_inbound_order ( id ) ,
CONSTRAINT fk_review_measurement FOREIGN KEY ( measurement_id ) REFERENCES fl_inbound_measurement ( id )
) ENGINE = InnoDB COMMENT = ' 测量审核、驳回和异常放行不可变记录 ' ;
CREATE TABLE IF NOT EXISTS fl_customer_charge_rule (
id BIGINT UNSIGNED NOT NULL COMMENT ' 客户计费规则ID ' ,
tenant_id BIGINT UNSIGNED NOT NULL COMMENT ' 数据所属租户ID ' ,
rule_code VARCHAR ( 50 ) NOT NULL COMMENT ' 租户内规则编码 ' ,
rule_version INT UNSIGNED NOT NULL COMMENT ' 规则版本号 ' ,
customer_id BIGINT UNSIGNED NOT NULL COMMENT ' 客户逻辑ID ' ,
customer_name VARCHAR ( 128 ) NOT NULL COMMENT ' 客户名称快照 ' ,
business_type VARCHAR ( 32 ) NOT NULL COMMENT ' 业务类型 ' ,
charge_mode VARCHAR ( 16 ) NOT NULL COMMENT ' 计费口径:KG或CBM ' ,
tax_mode VARCHAR ( 24 ) NULL COMMENT ' 包税或不包税类型 ' ,
conversion_factor DECIMAL ( 18 , 6 ) NOT NULL COMMENT ' 重量体积换算系数 ' ,
rounding_scale TINYINT UNSIGNED NOT NULL DEFAULT 3 COMMENT ' 结果保留小数位数 ' ,
rounding_mode VARCHAR ( 24 ) NOT NULL DEFAULT ' CEILING ' COMMENT ' 舍入方式 ' ,
currency CHAR ( 3 ) NOT NULL COMMENT ' 默认币种 ' ,
effective_from DATETIME ( 3 ) NOT NULL COMMENT ' 生效开始时间 ' ,
effective_to DATETIME ( 3 ) NULL COMMENT ' 生效结束时间 ' ,
status VARCHAR ( 16 ) NOT NULL DEFAULT ' ACTIVE ' COMMENT ' 规则状态 ' ,
remark VARCHAR ( 500 ) NULL COMMENT ' 规则备注 ' ,
created_by BIGINT UNSIGNED NOT NULL COMMENT ' 创建人ID ' ,
created_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) COMMENT ' 创建时间 ' ,
updated_by BIGINT UNSIGNED NOT 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 ' 逻辑删除标记 ' ,
version INT NOT NULL DEFAULT 0 COMMENT ' 乐观锁版本号 ' ,
PRIMARY KEY ( id ) ,
UNIQUE KEY uk_charge_rule_version ( tenant_id , rule_code , rule_version ) ,
KEY idx_charge_rule_match ( tenant_id , customer_id , business_type , status , effective_from , effective_to )
) ENGINE = InnoDB COMMENT = ' 客户头程计费规则版本 ' ;
CREATE TABLE IF NOT EXISTS fl_carrier_fba_rate (
id BIGINT UNSIGNED NOT NULL COMMENT ' 船司FBA价格ID ' ,
tenant_id BIGINT UNSIGNED NOT NULL COMMENT ' 数据所属租户ID ' ,
rate_code VARCHAR ( 50 ) NOT NULL COMMENT ' 租户内价格编码 ' ,
rate_version INT UNSIGNED NOT NULL COMMENT ' 价格版本号 ' ,
origin_warehouse_id BIGINT UNSIGNED NOT NULL COMMENT ' 起运仓逻辑ID ' ,
origin_warehouse_name VARCHAR ( 128 ) NOT NULL COMMENT ' 起运仓名称快照 ' ,
business_type VARCHAR ( 32 ) NOT NULL COMMENT ' 业务或计费类型 ' ,
channel_code VARCHAR ( 64 ) NULL COMMENT ' 渠道编码 ' ,
carrier_id BIGINT UNSIGNED NULL COMMENT ' 船司逻辑ID ' ,
carrier_name VARCHAR ( 128 ) NOT NULL COMMENT ' 船司名称快照 ' ,
destination_code VARCHAR ( 32 ) NOT NULL COMMENT ' FBA目的仓编码 ' ,
charge_unit VARCHAR ( 16 ) NOT NULL COMMENT ' 计费单位:KG或CBM ' ,
unit_price DECIMAL ( 18 , 6 ) NOT NULL COMMENT ' 基础单价 ' ,
currency CHAR ( 3 ) NOT NULL COMMENT ' 币种 ' ,
additional_fee DECIMAL ( 18 , 2 ) NOT NULL DEFAULT 0 COMMENT ' 固定附加费 ' ,
effective_from DATETIME ( 3 ) NOT NULL COMMENT ' 生效开始时间 ' ,
effective_to DATETIME ( 3 ) NULL COMMENT ' 生效结束时间 ' ,
status VARCHAR ( 16 ) NOT NULL DEFAULT ' ACTIVE ' COMMENT ' 价格状态 ' ,
remark VARCHAR ( 500 ) NULL COMMENT ' 价格备注 ' ,
created_by BIGINT UNSIGNED NOT NULL COMMENT ' 创建人ID ' ,
created_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) COMMENT ' 创建时间 ' ,
updated_by BIGINT UNSIGNED NOT 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 ' 逻辑删除标记 ' ,
version INT NOT NULL DEFAULT 0 COMMENT ' 乐观锁版本号 ' ,
PRIMARY KEY ( id ) ,
UNIQUE KEY uk_fba_rate_version ( tenant_id , rate_code , rate_version ) ,
KEY idx_fba_rate_match ( tenant_id , origin_warehouse_id , business_type , channel_code , carrier_id , destination_code , charge_unit , status , effective_from , effective_to )
) ENGINE = InnoDB COMMENT = ' 船司FBA目的仓价格版本 ' ;
CREATE TABLE IF NOT EXISTS fl_inbound_fee (
id BIGINT UNSIGNED NOT NULL COMMENT ' 入库费用ID ' ,
tenant_id BIGINT UNSIGNED NOT NULL COMMENT ' 数据所属租户ID ' ,
inbound_id BIGINT UNSIGNED NOT NULL COMMENT ' 入库单ID ' ,
fee_no VARCHAR ( 40 ) NOT NULL COMMENT ' 租户内唯一费用单号 ' ,
fee_version INT UNSIGNED NOT NULL DEFAULT 1 COMMENT ' 费用快照版本 ' ,
charge_rule_id BIGINT UNSIGNED NOT NULL COMMENT ' 客户计费规则ID ' ,
charge_rule_version INT UNSIGNED NOT NULL COMMENT ' 客户规则版本快照 ' ,
carrier_rate_id BIGINT UNSIGNED NOT NULL COMMENT ' 船司FBA价格ID ' ,
carrier_rate_version INT UNSIGNED NOT NULL COMMENT ' 船司价格版本快照 ' ,
rule_code VARCHAR ( 50 ) NOT NULL COMMENT ' 客户规则编码快照 ' ,
customer_id BIGINT UNSIGNED NOT NULL COMMENT ' 客户ID快照 ' ,
customer_name VARCHAR ( 128 ) NOT NULL COMMENT ' 客户名称快照 ' ,
business_type VARCHAR ( 32 ) NOT NULL COMMENT ' 业务类型快照 ' ,
tax_mode VARCHAR ( 24 ) NULL COMMENT ' 包税模式快照 ' ,
rounding_scale TINYINT UNSIGNED NOT NULL COMMENT ' 计费量保留位数快照 ' ,
rounding_mode VARCHAR ( 24 ) NOT NULL COMMENT ' 舍入方式快照 ' ,
rule_effective_from DATETIME ( 3 ) NOT NULL COMMENT ' 客户规则生效开始快照 ' ,
rule_effective_to DATETIME ( 3 ) NULL COMMENT ' 客户规则生效结束快照 ' ,
rate_code VARCHAR ( 50 ) NOT NULL COMMENT ' 船司价格编码快照 ' ,
origin_warehouse_id BIGINT UNSIGNED NOT NULL COMMENT ' 起运仓ID快照 ' ,
origin_warehouse_name VARCHAR ( 128 ) NOT NULL COMMENT ' 起运仓名称快照 ' ,
channel_code VARCHAR ( 64 ) NOT NULL COMMENT ' 渠道编码快照 ' ,
carrier_id BIGINT UNSIGNED NOT NULL COMMENT ' 船司ID快照 ' ,
carrier_name VARCHAR ( 128 ) NOT NULL COMMENT ' 船司名称快照 ' ,
destination_code VARCHAR ( 32 ) NOT NULL COMMENT ' FBA仓编码快照 ' ,
rate_effective_from DATETIME ( 3 ) NOT NULL COMMENT ' 价格生效开始快照 ' ,
rate_effective_to DATETIME ( 3 ) NULL COMMENT ' 价格生效结束快照 ' ,
charge_mode VARCHAR ( 16 ) NOT NULL COMMENT ' 计费口径:KG或CBM ' ,
conversion_factor DECIMAL ( 18 , 6 ) NOT NULL COMMENT ' 使用的换算系数快照 ' ,
actual_weight_kg DECIMAL ( 18 , 3 ) NOT NULL COMMENT ' 试算时实际重量kg ' ,
actual_volume_cbm DECIMAL ( 18 , 4 ) NOT NULL COMMENT ' 试算时实际体积m3 ' ,
converted_quantity DECIMAL ( 18 , 4 ) NOT NULL COMMENT ' 换算后的重量或体积 ' ,
chargeable_quantity DECIMAL ( 18 , 4 ) NOT NULL COMMENT ' 最终计费量 ' ,
charge_unit VARCHAR ( 16 ) NOT NULL COMMENT ' 计费单位 ' ,
currency CHAR ( 3 ) NOT NULL COMMENT ' 币种 ' ,
subtotal_amount DECIMAL ( 18 , 2 ) NOT NULL COMMENT ' 基础费用金额 ' ,
additional_amount DECIMAL ( 18 , 2 ) NOT NULL DEFAULT 0 COMMENT ' 附加费金额 ' ,
total_amount DECIMAL ( 18 , 2 ) NOT NULL COMMENT ' 总金额 ' ,
fee_status VARCHAR ( 24 ) NOT NULL DEFAULT ' CALCULATED ' COMMENT ' 费用状态 ' ,
review_status VARCHAR ( 24 ) NOT NULL DEFAULT ' NOT_SUBMITTED ' COMMENT ' 费用审核状态 ' ,
exception_release TINYINT ( 1 ) NOT NULL DEFAULT 0 COMMENT ' 是否基于测量异常放行生成 ' ,
calculated_by BIGINT UNSIGNED NOT NULL COMMENT ' 试算人ID ' ,
calculated_at DATETIME ( 3 ) NOT NULL COMMENT ' 试算时间 ' ,
confirmed_by BIGINT UNSIGNED NULL COMMENT ' 确认人ID ' ,
confirmed_at DATETIME ( 3 ) NULL COMMENT ' 确认时间 ' ,
sent_by BIGINT UNSIGNED NULL COMMENT ' 发送人ID ' ,
sent_at DATETIME ( 3 ) NULL COMMENT ' 发送客户时间 ' ,
created_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) COMMENT ' 创建时间 ' ,
updated_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) ON UPDATE CURRENT_TIMESTAMP ( 3 ) COMMENT ' 更新时间 ' ,
PRIMARY KEY ( id ) ,
UNIQUE KEY uk_inbound_fee_no ( tenant_id , fee_no ) ,
UNIQUE KEY uk_inbound_fee_version ( tenant_id , inbound_id , fee_version ) ,
KEY idx_inbound_fee_status ( tenant_id , inbound_id , fee_status , review_status ) ,
CONSTRAINT fk_fee_inbound FOREIGN KEY ( inbound_id ) REFERENCES fl_inbound_order ( id ) ,
CONSTRAINT fk_fee_charge_rule FOREIGN KEY ( charge_rule_id ) REFERENCES fl_customer_charge_rule ( id ) ,
CONSTRAINT fk_fee_carrier_rate FOREIGN KEY ( carrier_rate_id ) REFERENCES fl_carrier_fba_rate ( id )
) ENGINE = InnoDB COMMENT = ' 入库头程费用计算和确认快照 ' ;
CREATE TABLE IF NOT EXISTS fl_inbound_fee_item (
id BIGINT UNSIGNED NOT NULL COMMENT ' 费用明细ID ' ,
tenant_id BIGINT UNSIGNED NOT NULL COMMENT ' 数据所属租户ID ' ,
fee_id BIGINT UNSIGNED NOT NULL COMMENT ' 费用头ID ' ,
item_no INT UNSIGNED NOT NULL COMMENT ' 费用单内序号 ' ,
fee_code VARCHAR ( 50 ) NOT NULL COMMENT ' 费用项目编码 ' ,
fee_name VARCHAR ( 128 ) NOT NULL COMMENT ' 费用项目名称快照 ' ,
quantity DECIMAL ( 18 , 4 ) NOT NULL COMMENT ' 计费数量 ' ,
unit VARCHAR ( 16 ) NOT NULL COMMENT ' 计费单位 ' ,
unit_price DECIMAL ( 18 , 6 ) NOT NULL COMMENT ' 单价 ' ,
amount DECIMAL ( 18 , 2 ) NOT NULL COMMENT ' 金额 ' ,
currency CHAR ( 3 ) NOT NULL COMMENT ' 币种 ' ,
automatic_flag TINYINT ( 1 ) NOT NULL DEFAULT 1 COMMENT ' 是否自动计算 ' ,
remark VARCHAR ( 500 ) NULL COMMENT ' 费用备注 ' ,
created_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) COMMENT ' 创建时间 ' ,
PRIMARY KEY ( id ) ,
UNIQUE KEY uk_fee_item_no ( tenant_id , fee_id , item_no ) ,
CONSTRAINT fk_fee_item_header FOREIGN KEY ( fee_id ) REFERENCES fl_inbound_fee ( id )
) ENGINE = InnoDB COMMENT = ' 入库头程费用项目明细 ' ;
CREATE TABLE IF NOT EXISTS fl_inbound_pallet_allocation (
id BIGINT UNSIGNED NOT NULL COMMENT ' 头程托盘分配引用ID ' ,
tenant_id BIGINT UNSIGNED NOT NULL COMMENT ' 数据所属租户ID ' ,
inbound_id BIGINT UNSIGNED NOT NULL COMMENT ' 入库单ID ' ,
allocation_no INT UNSIGNED NOT NULL COMMENT ' 入库单内分配序号 ' ,
warehouse_id BIGINT UNSIGNED NOT NULL COMMENT ' 仓库服务仓库ID ' ,
pallet_id BIGINT UNSIGNED NOT NULL COMMENT ' 仓库服务托盘ID ' ,
pallet_code VARCHAR ( 50 ) NOT NULL COMMENT ' 托盘编码快照 ' ,
pallet_capacity_cbm DECIMAL ( 18 , 4 ) NOT NULL COMMENT ' 托盘可用容积快照 ' ,
allocated_volume_cbm DECIMAL ( 18 , 4 ) NOT NULL COMMENT ' 本托盘分配体积 ' ,
allocated_package_count INT UNSIGNED NULL COMMENT ' 本托盘分配箱数 ' ,
location_id BIGINT UNSIGNED NOT NULL COMMENT ' 仓库服务库位ID ' ,
location_code VARCHAR ( 50 ) NOT NULL COMMENT ' 库位编码快照 ' ,
reservation_no VARCHAR ( 64 ) NOT NULL COMMENT ' 仓库库位预占单号 ' ,
allocation_status VARCHAR ( 24 ) NOT NULL DEFAULT ' RESERVED ' COMMENT ' 分配状态 ' ,
created_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) COMMENT ' 创建时间 ' ,
updated_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) ON UPDATE CURRENT_TIMESTAMP ( 3 ) COMMENT ' 更新时间 ' ,
PRIMARY KEY ( id ) ,
UNIQUE KEY uk_pallet_allocation_no ( tenant_id , inbound_id , allocation_no ) ,
UNIQUE KEY uk_pallet_allocation_pallet ( tenant_id , inbound_id , pallet_id ) ,
KEY idx_allocation_location ( tenant_id , warehouse_id , location_id , allocation_status ) ,
CONSTRAINT fk_allocation_inbound FOREIGN KEY ( inbound_id ) REFERENCES fl_inbound_order ( id )
) ENGINE = InnoDB COMMENT = ' 头程侧托盘、库位和仓库预占结果引用 ' ;
CREATE TABLE IF NOT EXISTS fl_inbound_file (
id BIGINT UNSIGNED NOT NULL COMMENT ' 入库单文件关系ID ' ,
tenant_id BIGINT UNSIGNED NOT NULL COMMENT ' 数据所属租户ID ' ,
inbound_id BIGINT UNSIGNED NOT NULL COMMENT ' 入库单ID ' ,
file_id BIGINT UNSIGNED NOT NULL COMMENT ' 文件服务文件ID ' ,
file_type VARCHAR ( 24 ) NOT NULL COMMENT ' 文件类型:RELATED、MARK、PC_ORDER、MEASURE或WEIGHT ' ,
file_name_snapshot VARCHAR ( 255 ) NOT NULL COMMENT ' 文件名快照 ' ,
visibility VARCHAR ( 16 ) NOT NULL DEFAULT ' INTERNAL ' COMMENT ' 可见范围 ' ,
file_version INT UNSIGNED NOT NULL DEFAULT 1 COMMENT ' 业务文件版本 ' ,
uploaded_by BIGINT UNSIGNED NOT NULL COMMENT ' 上传人ID ' ,
uploaded_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) COMMENT ' 上传时间 ' ,
deleted TINYINT ( 1 ) NOT NULL DEFAULT 0 COMMENT ' 逻辑删除标记 ' ,
PRIMARY KEY ( id ) ,
UNIQUE KEY uk_inbound_file_relation ( tenant_id , inbound_id , file_id , file_type ) ,
KEY idx_inbound_file_type ( tenant_id , inbound_id , file_type , deleted ) ,
CONSTRAINT fk_file_inbound FOREIGN KEY ( inbound_id ) REFERENCES fl_inbound_order ( id )
) ENGINE = InnoDB COMMENT = ' 入库单与文件中心对象的分类关系 ' ;
CREATE TABLE IF NOT EXISTS fl_inbound_hold_record (
id BIGINT UNSIGNED NOT NULL COMMENT ' 扣货记录ID ' ,
tenant_id BIGINT UNSIGNED NOT NULL COMMENT ' 数据所属租户ID ' ,
inbound_id BIGINT UNSIGNED NOT NULL COMMENT ' 入库单ID ' ,
hold_action VARCHAR ( 16 ) NOT NULL COMMENT ' 动作:HOLD或RELEASE ' ,
reason VARCHAR ( 1000 ) NOT NULL COMMENT ' 扣货或解除原因 ' ,
evidence_file_id BIGINT UNSIGNED NULL COMMENT ' 证据文件ID ' ,
operator_id BIGINT UNSIGNED NOT NULL COMMENT ' 操作人ID ' ,
operator_name VARCHAR ( 64 ) NULL COMMENT ' 操作人名称快照 ' ,
operated_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) COMMENT ' 操作时间 ' ,
PRIMARY KEY ( id ) ,
KEY idx_hold_inbound_time ( tenant_id , inbound_id , operated_at ) ,
CONSTRAINT fk_hold_inbound FOREIGN KEY ( inbound_id ) REFERENCES fl_inbound_order ( id )
) ENGINE = InnoDB COMMENT = ' 入库单扣货和解除扣货不可变历史 ' ;
CREATE TABLE IF NOT EXISTS fl_inbound_internal_note (
id BIGINT UNSIGNED NOT NULL COMMENT ' 客服内部备注ID ' ,
tenant_id BIGINT UNSIGNED NOT NULL COMMENT ' 数据所属租户ID ' ,
inbound_id BIGINT UNSIGNED NOT NULL COMMENT ' 入库单ID ' ,
content VARCHAR ( 2000 ) NOT NULL COMMENT ' 仅内部可见备注 ' ,
created_by BIGINT UNSIGNED NOT NULL COMMENT ' 创建人ID ' ,
created_by_name VARCHAR ( 64 ) NULL COMMENT ' 创建人名称快照 ' ,
created_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) COMMENT ' 创建时间 ' ,
PRIMARY KEY ( id ) ,
KEY idx_internal_note_time ( tenant_id , inbound_id , created_at ) ,
CONSTRAINT fk_internal_note_inbound FOREIGN KEY ( inbound_id ) REFERENCES fl_inbound_order ( id )
) ENGINE = InnoDB COMMENT = ' 入库单客服内部备注历史 ' ;
CREATE TABLE IF NOT EXISTS fl_inbound_status_history (
id BIGINT UNSIGNED NOT NULL COMMENT ' 入库状态历史ID ' ,
tenant_id BIGINT UNSIGNED NOT NULL COMMENT ' 数据所属租户ID ' ,
inbound_id BIGINT UNSIGNED NOT NULL COMMENT ' 入库单ID ' ,
from_status VARCHAR ( 24 ) NULL COMMENT ' 变更前状态 ' ,
to_status VARCHAR ( 24 ) NOT NULL COMMENT ' 变更后状态 ' ,
action VARCHAR ( 32 ) NOT NULL COMMENT ' 触发动作 ' ,
reason VARCHAR ( 1000 ) NULL COMMENT ' 变更原因 ' ,
operator_id BIGINT UNSIGNED NOT NULL COMMENT ' 操作人ID ' ,
operator_name VARCHAR ( 64 ) NULL COMMENT ' 操作人名称快照 ' ,
occurred_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) COMMENT ' 发生时间 ' ,
PRIMARY KEY ( id ) ,
KEY idx_inbound_history_time ( tenant_id , inbound_id , occurred_at ) ,
CONSTRAINT fk_history_inbound FOREIGN KEY ( inbound_id ) REFERENCES fl_inbound_order ( id )
) ENGINE = InnoDB COMMENT = ' 入库单流程状态不可变历史 ' ;
CREATE TABLE IF NOT EXISTS fl_inbound_outbox (
id BIGINT UNSIGNED NOT NULL COMMENT ' 领域事件全局ID ' ,
tenant_id BIGINT UNSIGNED NOT NULL COMMENT ' 事件所属租户ID ' ,
aggregate_type VARCHAR ( 32 ) NOT NULL DEFAULT ' INBOUND ' COMMENT ' 聚合类型 ' ,
aggregate_id BIGINT UNSIGNED NOT NULL COMMENT ' 入库单ID ' ,
event_type VARCHAR ( 64 ) NOT NULL COMMENT ' 事件类型 ' ,
payload_json JSON NOT NULL COMMENT ' 事件负载快照 ' ,
publish_status VARCHAR ( 16 ) NOT NULL DEFAULT ' PENDING ' COMMENT ' 发布状态 ' ,
retry_count INT NOT NULL DEFAULT 0 COMMENT ' 重试次数 ' ,
next_retry_at DATETIME ( 3 ) NULL COMMENT ' 下次重试时间 ' ,
published_at DATETIME ( 3 ) NULL COMMENT ' 发布时间 ' ,
created_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) COMMENT ' 创建时间 ' ,
PRIMARY KEY ( id ) ,
KEY idx_inbound_outbox_publish ( publish_status , next_retry_at , created_at )
) ENGINE = InnoDB COMMENT = ' 入库事务Outbox事件表 ' ;
CREATE TABLE IF NOT EXISTS fl_inbound_idempotency (
id BIGINT UNSIGNED NOT NULL COMMENT ' 入库写操作幂等记录ID ' ,
tenant_id BIGINT UNSIGNED NOT NULL COMMENT ' 租户ID ' ,
operation VARCHAR ( 40 ) NOT NULL COMMENT ' 操作类型 ' ,
operator_id BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT ' 操作者或外部应用ID ' ,
inbound_id BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT ' 入库单ID,创建前可为0 ' ,
idempotency_key VARCHAR ( 128 ) NOT NULL COMMENT ' 幂等键 ' ,
request_hash CHAR ( 64 ) NOT NULL COMMENT ' 请求内容摘要 ' ,
status VARCHAR ( 16 ) NOT NULL COMMENT ' 处理状态 ' ,
result_json JSON NULL COMMENT ' 成功结果摘要 ' ,
result_resource_id BIGINT UNSIGNED NULL COMMENT ' 成功结果资源ID ' ,
completed_at DATETIME ( 3 ) NULL COMMENT ' 完成时间 ' ,
created_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) COMMENT ' 创建时间 ' ,
updated_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) ON UPDATE CURRENT_TIMESTAMP ( 3 ) COMMENT ' 更新时间 ' ,
PRIMARY KEY ( id ) ,
UNIQUE KEY uk_inbound_idempotency ( tenant_id , operation , operator_id , idempotency_key ) ,
KEY idx_inbound_idempotency_created ( created_at )
) ENGINE = InnoDB COMMENT = ' 第三方测量、审核、费用发送和入库写操作幂等记录 ' ;