-- 本次本机结构修复的实际增量,仅用于审阅与原始快照对照。已执行,禁止在当前库重复执行。 SET NAMES utf8mb4; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; CREATE TABLE `event_delivery_retry_audit` ( `request_id` varchar(36) NOT NULL COMMENT '人工重试请求UUID和幂等键', `producer_table` varchar(64) NOT NULL COMMENT '本服务发件箱表名', `entry_id` varchar(64) NOT NULL COMMENT '发件箱记录主键', `event_id` varchar(128) NOT NULL COMMENT '原事件全局标识', `event_type` varchar(64) NOT NULL COMMENT '原事件类型', `payload_hash` varchar(71) NOT NULL COMMENT '原事件不可变负载摘要', `operator_name` varchar(128) NOT NULL COMMENT '持有运维凭据的操作人标识', `reason` varchar(500) NOT NULL COMMENT '人工重试原因', `previous_failures` int NOT NULL COMMENT '重试前累计失败次数', `previous_error` varchar(1000) DEFAULT NULL COMMENT '重试前最后一次脱敏错误', `requested_at` datetime(3) NOT NULL COMMENT '重试申请提交时间', PRIMARY KEY (`request_id`), KEY `idx_event_retry_entry` (`producer_table`,`entry_id`,`requested_at`), KEY `idx_event_retry_event` (`event_id`,`requested_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='业务事件人工重试审计,与恢复待发送状态同事务提交'; USE `baiyue_lastleg`; CREATE TABLE `ll_appointment_cargo_verification` ( `id` bigint NOT NULL COMMENT '核实记录主键', `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原货源所属客户', `source_key` varchar(160) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '稳定ORDER或BOOKING原来源键', `destination_key` varchar(160) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '核实时的原目的地', `source_version` varchar(160) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '核实时的原来源版本', `source_packages` int DEFAULT NULL COMMENT '核实时的原来源箱数,未知为空', `version` int NOT NULL COMMENT '同一来源的核实版本,从一递增', `package_count` int DEFAULT NULL COMMENT '独立核实箱数,不回写原订单', `shipment_references_json` longtext COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '本票货件号或追踪号列表,不回写原订单', `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '核实说明', `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '登录操作人', `operator_name` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '操作人名称快照', `command_key` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '来源内幂等命令键', `request_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '来源、操作人及请求摘要', `created_at` datetime(3) NOT NULL COMMENT '核实UTC时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_ll_cargo_verification_version` (`customer_id`,`source_key`,`version`), UNIQUE KEY `uk_ll_cargo_verification_command` (`customer_id`,`source_key`,`command_key`), CONSTRAINT `chk_ll_cargo_verification_quantity` CHECK (((`package_count` is null) or (`package_count` > 0))), CONSTRAINT `chk_ll_cargo_verification_version` CHECK ((`version` > 0)) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='预约货物核实资料及不可覆盖的版本历史'; USE `baiyue_lastleg`; CREATE TABLE `ll_appointment_followup` ( `id` bigint NOT NULL COMMENT '预约筹划跟进记录ID', `source_key` varchar(160) NOT NULL COMMENT '稳定ORDER、BOOKING或CONTAINER及接仓点来源键', `customer_id` varchar(128) NOT NULL COMMENT '货源客户;整柜共享记录由服务端固定为平台作用域0', `source_order_id` bigint DEFAULT NULL COMMENT '已形成的真实尾程货源ID,尚未生成时为空', `stage` varchar(32) NOT NULL COMMENT '跟进对象:DRAYAGE_CONTACT/TERMINAL_APPOINTMENT/WAREHOUSE_RECEIVING/FBA_RECEIVING', `version` int NOT NULL COMMENT '同一货源及跟进对象的记录版本', `contacted_party` varchar(200) DEFAULT NULL COMMENT '本次联系对象,不替代承运主档', `result` varchar(1000) NOT NULL COMMENT '本次反馈事实,不自动确认预约或推进实物作业', `next_action` varchar(500) DEFAULT NULL COMMENT '下一步安排', `followup_date` date DEFAULT NULL COMMENT '按业务地点当地日期记录的下次跟进日', `operator_id` varchar(128) NOT NULL COMMENT '登录平台操作者ID', `operator_name` varchar(200) DEFAULT NULL COMMENT '操作人姓名快照', `command_key` varchar(64) NOT NULL COMMENT '持久幂等键', `request_hash` char(64) NOT NULL COMMENT '含操作者身份的请求SHA256摘要', `created_at` datetime(3) NOT NULL COMMENT 'UTC记录时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_appointment_followup_version` (`source_key`,`stage`,`version`), UNIQUE KEY `uk_appointment_followup_command` (`source_key`,`stage`,`command_key`), KEY `idx_appointment_followup_date` (`followup_date`,`source_order_id`), KEY `fk_appointment_followup_order` (`source_order_id`), CONSTRAINT `fk_appointment_followup_order` FOREIGN KEY (`source_order_id`) REFERENCES `ll_order` (`id`), CONSTRAINT `chk_appointment_followup_stage` CHECK ((`stage` in (_utf8mb4'DRAYAGE_CONTACT',_utf8mb4'TERMINAL_APPOINTMENT',_utf8mb4'WAREHOUSE_RECEIVING',_utf8mb4'FBA_RECEIVING'))) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='真实在途货源的预约筹划联系记录,追加留痕'; USE `baiyue_lastleg`; CREATE TABLE `ll_appointment_impact` ( `container_booking_id` varchar(64) NOT NULL COMMENT '稳定柜次关联键,不作业务编号展示', `impact_no` varchar(40) NOT NULL COMMENT '船期核对事项业务号', `baseline_json` longtext NOT NULL COMMENT '已核对基准或首次变化前观察,原来源时间口径', `latest_json` longtext NOT NULL COMMENT '最新已读取观察,未知可为JSON null', `forecast_token` char(64) NOT NULL COMMENT '最新观察摘要,处理时防止旧预测结案', `status` varchar(20) NOT NULL COMMENT '事项状态:MONITORING监测/OPEN待处理/RESOLVED已完成', `reason` varchar(64) DEFAULT NULL COMMENT '预测变化或资料待核实原因', `owner_id` varchar(128) DEFAULT NULL COMMENT '认领平台人员ID', `owner_name` varchar(200) DEFAULT NULL COMMENT '负责人姓名快照', `version` int NOT NULL COMMENT '观察及人工处理共同版本', `updated_at` datetime(3) NOT NULL COMMENT 'UTC更新时间', PRIMARY KEY (`container_booking_id`), UNIQUE KEY `uk_appointment_impact_no` (`impact_no`), KEY `idx_appointment_impact_work` (`status`,`updated_at`), CONSTRAINT `chk_appointment_impact_status` CHECK ((`status` in (_utf8mb4'MONITORING',_utf8mb4'OPEN',_utf8mb4'RESOLVED'))) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='一柜一个稳定船期变化核对事项,不改写预约或运输'; USE `baiyue_lastleg`; CREATE TABLE `ll_appointment_impact_history` ( `id` bigint NOT NULL COMMENT '历史记录标识', `container_booking_id` varchar(64) NOT NULL COMMENT '关联柜次标识', `version` int NOT NULL COMMENT '记录版本', `action` varchar(20) NOT NULL COMMENT '操作类型:OBSERVED观察/CLAIM认领/RECORD记录/RESOLVE完成', `operator_id` varchar(128) NOT NULL COMMENT '操作人标识', `operator_name` varchar(200) DEFAULT NULL COMMENT '操作人姓名', `result` varchar(1000) DEFAULT NULL COMMENT '人工处理结果;观察记录为空', `next_action` varchar(500) DEFAULT NULL COMMENT '下一步处理事项', `followup_date` date DEFAULT NULL COMMENT '业务跟进日期', `command_key` varchar(64) DEFAULT NULL COMMENT '人工命令幂等键;观察记录为空', `request_hash` char(64) DEFAULT NULL COMMENT '请求内容摘要', `response_json` longtext NOT NULL COMMENT '该版本完整响应快照,支持精确重放', `created_at` datetime(3) NOT NULL COMMENT 'UTC记录时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_appointment_impact_version` (`container_booking_id`,`version`), UNIQUE KEY `uk_appointment_impact_command` (`container_booking_id`,`operator_id`,`command_key`), CONSTRAINT `fk_appointment_impact_history` FOREIGN KEY (`container_booking_id`) REFERENCES `ll_appointment_impact` (`container_booking_id`), CONSTRAINT `chk_appointment_impact_action` CHECK ((`action` in (_utf8mb4'OBSERVED',_utf8mb4'CLAIM',_utf8mb4'RECORD',_utf8mb4'RESOLVE'))) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='船期观察及人工处理追加历史'; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; ALTER TABLE `ll_cargo_discard_carton` ADD COLUMN `source_type` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'DROPSHIP' COMMENT '箱子来源:一件代发DROPSHIP、入仓箱INBOUND、转运箱TRANSFER'; USE `baiyue_lastleg`; ALTER TABLE `ll_cargo_discard_item` ADD UNIQUE KEY `uk_ll_discard_position_sku` (`application_id`,`inventory_position_id`,`sku_code`); USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; CREATE TABLE `ll_delivery_facts_changed` ( `id` bigint NOT NULL COMMENT '持久信号内部主键', `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '真实签收货物客户ID', `dispatch_id` bigint NOT NULL COMMENT '整车排车主单ID', `dispatch_no` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '真实排车业务号', `delivery_id` bigint NOT NULL COMMENT '本客户派送单ID', `delivery_no` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '真实派送业务号', `delivery_version` bigint NOT NULL COMMENT '触发信号的真实派送版本', `facts_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '该版本真实签收事实摘要', `occurred_at` datetime(3) NOT NULL COMMENT '签收事实实际发生时间', `state` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'PENDING' COMMENT '待核对PENDING或已核对PROCESSED', `attempt_count` int NOT NULL DEFAULT '0' COMMENT '已记录的汇总失败次数', `next_attempt_at` datetime(3) NOT NULL COMMENT '下次可重试时间', `last_error_code` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '最近失败诊断码不保存敏感异常正文', `processed_at` datetime(3) DEFAULT NULL COMMENT '与主阶段汇总同事务确认时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_delivery_fact_version` (`customer_id`,`delivery_id`,`delivery_version`), KEY `idx_delivery_fact_due` (`state`,`next_attempt_at`,`id`), KEY `idx_delivery_fact_dispatch` (`dispatch_id`,`state`,`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='正常签收事实变化的本地持久待汇总信号'; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; CREATE TABLE `ll_dispatch_command` ( `id` bigint NOT NULL COMMENT '持久命令内部主键', `dispatch_id` bigint NOT NULL COMMENT '命令所属整车排车主单ID', `dispatch_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '命令所属真实排车业务号', `action` varchar(40) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '本次整车作业动作', `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原始可信操作主体ID', `idempotency_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '跨操作主体全局唯一的原始请求键', `record_version` bigint NOT NULL COMMENT '原请求明确提交的排车版本,零为合法首版', `command_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '绑定原主体动作业务号版本和完整载荷的严格摘要', `result_json` longtext COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '按动作类型恢复的不可变成功结果JSON', `created_at` datetime(3) NOT NULL COMMENT '成功命令记录时间,使用UTC', PRIMARY KEY (`id`), UNIQUE KEY `uk_dispatch_command_key` (`idempotency_key`), KEY `idx_dispatch_command_history` (`dispatch_id`,`created_at`,`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='整车排车公共持久命令账本'; USE `baiyue_lastleg`; CREATE TABLE `ll_dispatch_delivery_arrangement` ( `id` bigint NOT NULL COMMENT '安排事实内部主键', `dispatch_order_id` bigint NOT NULL COMMENT '唯一整车排车主单ID', `dispatch_no` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '真实排车业务号', `arrangement_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '本次唯一安排业务事实标识', `business_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '排除操作者及纯并发版本的安排业务摘要', `cargo_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '本车实际拣货来源摘要', `loading_completion_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '装车完成事实摘要', `original_command_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '首次安排的全局请求键', `original_operator_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '首次安排操作主体', `result_json` json NOT NULL COMMENT '全部客户出库及客户目的地派送不可变结果', `cargo_json` json NOT NULL COMMENT '逐客户逐拣货归属的不可变真实来源', `created_at` datetime(3) NOT NULL COMMENT '本次安排实际创建时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_dispatch_arrangement_dispatch` (`dispatch_order_id`), UNIQUE KEY `uk_dispatch_arrangement_key` (`arrangement_key`), UNIQUE KEY `uk_dispatch_arrangement_command` (`original_command_key`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='整车排车唯一派送安排事实'; USE `baiyue_lastleg`; ALTER TABLE `ll_dispatch_draft` ADD COLUMN `warehouse_id` bigint DEFAULT NULL COMMENT '本草稿唯一起运公共仓库引用'; ALTER TABLE `ll_dispatch_draft` ADD COLUMN `record_version` bigint NOT NULL DEFAULT '0' COMMENT '草稿并发版本,显式零版本合法'; ALTER TABLE `ll_dispatch_draft` ADD COLUMN `sources_json` longtext COLLATE utf8mb4_unicode_ci COMMENT '服务端核验的真实来源及客户版本快照数组'; USE `baiyue_lastleg`; CREATE TABLE `ll_dispatch_draft_command` ( `id` bigint NOT NULL COMMENT '草稿命令内部主键', `idempotency_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '草稿操作全局唯一幂等键', `operator_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原命令操作主体,恢复必须为本人', `action` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '草稿创建、维护、选货、释放或转换动作', `target_token` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '命令目标草稿标识或创建范围标识', `request_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原动作、主体、版本及完整载荷摘要', `result_json` longtext COLLATE utf8mb4_unicode_ci COMMENT '本事务完成后保存的不可变原结果,不提交空结果', `created_at` datetime(3) NOT NULL COMMENT '命令创建UTC时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_ll_dispatch_draft_command_key` (`idempotency_key`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='智能排车草稿持久命令及原结果'; USE `baiyue_lastleg`; ALTER TABLE `ll_dispatch_draft_container` ADD COLUMN `source_keys_json` longtext COLLATE utf8mb4_unicode_ci COMMENT '本装车容器已取得本草稿占用的来源键数组'; ALTER TABLE `ll_dispatch_draft_container` ADD UNIQUE KEY `uk_ll_dispatch_draft_container_sequence` (`draft_id`,`sequence_no`); USE `baiyue_lastleg`; CREATE TABLE `ll_dispatch_history` ( `id` bigint NOT NULL COMMENT '排车历史内部主键', `dispatch_id` bigint NOT NULL COMMENT '本次历史所属整车主单ID', `record_version` bigint NOT NULL COMMENT '操作完成后的整车公共版本', `action` varchar(40) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '本次真实业务动作', `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '可信操作主体ID', `reason` varchar(2000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '审核驳回或变更原因', `snapshot_json` json NOT NULL COMMENT '动作完成当时的完整主单事实快照', `occurred_at` datetime(3) NOT NULL COMMENT '真实操作发生时间', PRIMARY KEY (`id`), KEY `idx_dispatch_history_version` (`dispatch_id`,`record_version`,`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='整车排车版本与审核轮次的追加历史'; USE `baiyue_lastleg`; ALTER TABLE `ll_dispatch_item` ADD COLUMN `customer_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '本条真实客户名称快照'; ALTER TABLE `ll_dispatch_item` ADD COLUMN `source_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '本条货物稳定权威来源键'; ALTER TABLE `ll_dispatch_item` ADD COLUMN `source_version` char(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '选货时核对的真实来源版本摘要'; ALTER TABLE `ll_dispatch_item` ADD COLUMN `source_snapshot_json` json DEFAULT NULL COMMENT '本条货物不可变来源及关联事实快照'; USE `baiyue_lastleg`; ALTER TABLE `ll_dispatch_order` ADD COLUMN `trip_id` bigint DEFAULT NULL COMMENT '本趟唯一车辆资源记录ID'; ALTER TABLE `ll_dispatch_order` ADD COLUMN `overseas_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '起运海外仓编码快照'; ALTER TABLE `ll_dispatch_order` ADD COLUMN `stage` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BEFORE_LOADING' COMMENT '作业阶段:BEFORE_LOADING装车前、LOADING装车中、AFTER_LOADING装车后、DELIVERING派送中、DELIVERED派送完成'; ALTER TABLE `ll_dispatch_order` ADD COLUMN `record_version` bigint NOT NULL DEFAULT '0' COMMENT '整车公共并发版本,首版为零'; ALTER TABLE `ll_dispatch_order` ADD COLUMN `cargo_revision` bigint NOT NULL DEFAULT '0' COMMENT '本趟货物修订版本'; ALTER TABLE `ll_dispatch_order` ADD COLUMN `cargo_hash` char(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '当前整车真实货物及来源摘要'; ALTER TABLE `ll_dispatch_order` ADD COLUMN `review_state` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'DRAFT' COMMENT '审核子流程当前状态'; ALTER TABLE `ll_dispatch_order` ADD COLUMN `review_round` bigint NOT NULL DEFAULT '0' COMMENT '当前审核轮次'; ALTER TABLE `ll_dispatch_order` ADD COLUMN `review_basis_hash` char(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '本审核轮次核对的货物和资源依据摘要'; ALTER TABLE `ll_dispatch_order` ADD COLUMN `dispatch_review_json` json DEFAULT NULL COMMENT '当前调度审核事实快照'; ALTER TABLE `ll_dispatch_order` ADD COLUMN `loading_review_json` json DEFAULT NULL COMMENT '当前理货审核事实快照'; ALTER TABLE `ll_dispatch_order` ADD COLUMN `resources_json` json DEFAULT NULL COMMENT '本趟主档或临时车辆司机的真实资源快照'; ALTER TABLE `ll_dispatch_order` ADD COLUMN `planned_departure_at` datetime(3) DEFAULT NULL COMMENT '计划发车时间,草稿未知时为空'; ALTER TABLE `ll_dispatch_order` ADD COLUMN `loading_completed_at` datetime(3) DEFAULT NULL COMMENT '实际确认装车完成时间'; ALTER TABLE `ll_dispatch_order` ADD COLUMN `loading_completion_hash` char(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '实际装车完成事实摘要'; ALTER TABLE `ll_dispatch_order` ADD COLUMN `loading_confirmation_json` json DEFAULT NULL COMMENT '装车确认时逐实托真实实载完整快照'; ALTER TABLE `ll_dispatch_order` ADD COLUMN `arrangement_key` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '本车唯一派送安排事实标识'; ALTER TABLE `ll_dispatch_order` ADD COLUMN `arrangement_business_hash` char(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '本车派送安排业务内容摘要'; ALTER TABLE `ll_dispatch_order` ADD COLUMN `departed_at` datetime(3) DEFAULT NULL COMMENT '本趟实际发车时间'; ALTER TABLE `ll_dispatch_order` ADD COLUMN `delivery_completed_at` datetime(3) DEFAULT NULL COMMENT '全部派送正常签收后的整车完成时间'; ALTER TABLE `ll_dispatch_order` ADD COLUMN `remark` varchar(2000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '排车业务备注'; ALTER TABLE `ll_dispatch_order` ADD UNIQUE KEY `uk_dispatch_trip` (`trip_id`); USE `baiyue_lastleg`; ALTER TABLE `ll_dispatch_pallet_lock` ADD COLUMN `active_warehouse_pallet_id` bigint DEFAULT NULL COMMENT '活动占用的真实仓库托盘,释放后为空,跨客户及来源别名唯一'; ALTER TABLE `ll_dispatch_pallet_lock` ADD UNIQUE KEY `uk_ll_dispatch_active_warehouse_pallet` (`active_warehouse_pallet_id`); USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; ALTER TABLE `ll_dispatch_pda_pick_order` ADD KEY `idx_dispatch_pick_return_receipt` (`customer_id`,`return_receipt_id`); USE `baiyue_lastleg`; USE `baiyue_lastleg`; ALTER TABLE `ll_dropship_carton` ADD COLUMN `product_quantity` bigint DEFAULT NULL COMMENT '该箱实收商品件数'; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; ALTER TABLE `ll_dropship_order_profile` ADD COLUMN `manifest_version` int DEFAULT NULL COMMENT '整托清单版本'; ALTER TABLE `ll_dropship_order_profile` ADD COLUMN `manifest_package_count` int DEFAULT NULL COMMENT '整托总箱数'; ALTER TABLE `ll_dropship_order_profile` ADD COLUMN `manifest_fragment_count` int DEFAULT NULL COMMENT '整托客户分片总数'; ALTER TABLE `ll_dropship_order_profile` ADD COLUMN `manifest_hash` char(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '整托完整清单摘要'; ALTER TABLE `ll_dropship_order_profile` ADD KEY `idx_ll_dropship_profile_manifest` (`source_pallet_no`,`manifest_hash`); USE `baiyue_lastleg`; ALTER TABLE `ll_dropship_sku_inventory` ADD UNIQUE KEY `uk_ll_dropship_sku_inventory` (`profile_id`,`sku_code`); USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; ALTER TABLE `ll_exception_order` ADD COLUMN `return_context_json` json DEFAULT NULL COMMENT '退回异常创建前的派送及尾程状态快照'; ALTER TABLE `ll_exception_order` ADD KEY `idx_ll_exception_delivery_return` (`customer_id`,`delivery_order_id`,`exception_type`); USE `baiyue_lastleg`; USE `baiyue_lastleg`; ALTER TABLE `ll_exception_return_item` ADD COLUMN `return_carton_id` bigint DEFAULT NULL COMMENT '原生退货箱标识;与普通库存位置互斥'; ALTER TABLE `ll_exception_return_item` ADD COLUMN `return_carton_mark` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '原生退货箱业务箱码快照'; ALTER TABLE `ll_exception_return_item` ADD COLUMN `received_packages` bigint NOT NULL DEFAULT '0' COMMENT '已实际退回入仓的累计箱数'; ALTER TABLE `ll_exception_return_item` ADD UNIQUE KEY `uk_ll_exception_return_carton` (`customer_id`,`exception_order_id`,`outbound_pallet_item_id`,`return_carton_id`); USE `baiyue_lastleg`; CREATE TABLE `ll_fba_appointment_command` ( `command_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '持久化幂等键', `request_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作、操作者和请求摘要', `operation` varchar(96) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作类型及目标业务号', `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '登录操作人', `appointment_no` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '系统预约业务单号', `response_json` longtext COLLATE utf8mb4_unicode_ci COMMENT '原命令返回快照,与业务写入同事务', `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建UTC时间', PRIMARY KEY (`command_key`), KEY `idx_ll_fba_command_appointment` (`appointment_no`,`created_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='预约命令与变更历史'; USE `baiyue_lastleg`; CREATE TABLE `ll_fba_receiving_agreement` ( `agreement_key` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '收货预约独立业务键', `version` int NOT NULL COMMENT '预约覆盖范围与确认资料版本', `status` varchar(24) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '有效、取消或已替代状态', `destination_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '权威目的仓关联键', `confirmation_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '当前有效外部约号,失效后清空以释放覆盖', `snapshot_json` longtext COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户逐来源覆盖、确认时区及仓库依据快照', PRIMARY KEY (`agreement_key`), UNIQUE KEY `uk_fba_receiving_confirmation` (`destination_key`,`confirmation_no`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='独立于送货批次的收货预约'; USE `baiyue_lastleg`; CREATE TABLE `ll_fba_receiving_change` ( `change_key` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户预约变化业务键', `version` int NOT NULL COMMENT '变化续办版本', `status` varchar(24) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '待仓库确认、已应用或已撤回状态', `batch_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '受影响原送货批次键', `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '本次变化所属客户', `snapshot_json` longtext COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原覆盖快照、逐来源拟保留量、负责人及跟进资料', `result_json` longtext COLLATE utf8mb4_unicode_ci COMMENT '确认后的实际批次去向及逐步骤结果', `active_ref` varchar(260) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '同批同客户唯一未解决变化引用', PRIMARY KEY (`change_key`), UNIQUE KEY `uk_fba_receiving_pending` (`active_ref`), KEY `idx_fba_receiving_pending_batch` (`batch_key`,`status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='保留原安排且阻止误发车的客户变化'; USE `baiyue_lastleg`; CREATE TABLE `ll_fba_receiving_member` ( `agreement_key` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '所属收货预约业务键', `batch_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '稳定送货批次键', `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '货物所属客户标识', `active_ref` varchar(260) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '有效批次与客户唯一引用,退出后清空且历史保留', PRIMARY KEY (`agreement_key`,`batch_key`,`customer_id`), UNIQUE KEY `uk_fba_receiving_active_member` (`active_ref`), KEY `idx_fba_receiving_batch` (`batch_key`,`customer_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='收货预约当前覆盖关联及退出历史'; USE `baiyue_lastleg`; CREATE TABLE `ll_fba_receiving_plan` ( `batch_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '稳定送货批次键', `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '计划所属客户标识', `snapshot_json` longtext COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '本客户未确认计划、目标窗口及业务时区,不含有效预约确认', PRIMARY KEY (`batch_key`,`customer_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='按批次及客户保存的未确认收货计划'; USE `baiyue_lastleg`; CREATE TABLE `ll_fba_receiving_revision` ( `agreement_key` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '收货预约业务键', `version` int NOT NULL COMMENT '不可变覆盖与确认版本', `snapshot_json` longtext COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '该版本完整客户覆盖、确认时段及回复依据', PRIMARY KEY (`agreement_key`,`version`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='收货预约覆盖与确认不可变历史'; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; ALTER TABLE `ll_fleet_trip_dispatch` ADD UNIQUE KEY `uk_fleet_trip_dispatch_trip` (`trip_id`); USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; ALTER TABLE `ll_inbound_fba_appointment` ADD COLUMN `confirmation_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '收货方正式外部确认号'; ALTER TABLE `ll_inbound_fba_appointment` ADD COLUMN `planned_date` date DEFAULT NULL COMMENT '计划当地日期,可只有日期而无时段'; ALTER TABLE `ll_inbound_fba_appointment` ADD COLUMN `planned_at` datetime(3) DEFAULT NULL COMMENT '计划开始当地时间,待定可空'; ALTER TABLE `ll_inbound_fba_appointment` ADD COLUMN `planned_end_at` datetime(3) DEFAULT NULL COMMENT '计划结束当地时间'; ALTER TABLE `ll_inbound_fba_appointment` ADD COLUMN `appointment_start_utc` datetime(3) DEFAULT NULL COMMENT '确认开始UTC时间点'; ALTER TABLE `ll_inbound_fba_appointment` ADD COLUMN `appointment_end_utc` datetime(3) DEFAULT NULL COMMENT '确认结束UTC时间点'; ALTER TABLE `ll_inbound_fba_appointment` ADD COLUMN `timezone` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的仓权威IANA时区,未维护不得确认'; ALTER TABLE `ll_inbound_fba_appointment` ADD COLUMN `origin_warehouse_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '实际起运仓'; ALTER TABLE `ll_inbound_fba_appointment` ADD COLUMN `replacement_keys_json` longtext COLLATE utf8mb4_unicode_ci COMMENT '替代批次不可变键列表,只用于内部业务关联'; ALTER TABLE `ll_inbound_fba_appointment` ADD COLUMN `repartition_reason` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '分批或合并原因,原安排及来源明细保留'; ALTER TABLE `ll_inbound_fba_appointment` ADD KEY `idx_ll_fba_appointment_planned` (`planned_at`,`appointment_status`); USE `baiyue_lastleg`; ALTER TABLE `ll_inbound_fba_appointment_item` ADD COLUMN `cargo_verification_version` int DEFAULT NULL COMMENT '采用的预约货物核实版本,未核实时为空'; ALTER TABLE `ll_inbound_fba_appointment_item` ADD COLUMN `shipment_references_json` longtext COLLATE utf8mb4_unicode_ci COMMENT '本次采用的货件或追踪号核实快照'; ALTER TABLE `ll_inbound_fba_appointment_item` ADD KEY `idx_ll_fba_active_source` (`customer_id`,`source_key`,`active`); ALTER TABLE `ll_inbound_fba_appointment_item` ADD KEY `idx_ll_fba_active_order` (`customer_id`,`order_id`,`active`); USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; ALTER TABLE `ll_inbound_plan_pallet` ADD KEY `idx_ll_inbound_pallet_no` (`pallet_no`); USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; ALTER TABLE `ll_local_looseboard_order` ADD COLUMN `product_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '商品名称'; ALTER TABLE `ll_local_looseboard_order` ADD COLUMN `estimated_pallet_count` int DEFAULT NULL COMMENT '客户申报预计托数,不代表实际收货'; ALTER TABLE `ll_local_looseboard_order` ADD COLUMN `origin_contact_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '起运地联系人'; ALTER TABLE `ll_local_looseboard_order` ADD COLUMN `origin_contact_phone` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '起运地联系电话'; ALTER TABLE `ll_local_looseboard_order` ADD COLUMN `destination_contact_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的地联系人'; ALTER TABLE `ll_local_looseboard_order` ADD COLUMN `destination_contact_phone` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的地联系电话'; ALTER TABLE `ll_local_looseboard_order` ADD COLUMN `pickup_at` datetime(3) DEFAULT NULL COMMENT '取货时间(当地时间,不转换时区)'; ALTER TABLE `ll_local_looseboard_order` ADD COLUMN `delivery_at` datetime(3) DEFAULT NULL COMMENT '送货时间(当地时间,不转换时区)'; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; ALTER TABLE `ll_outbound_pallet_item` ADD COLUMN `dispatch_item_id` bigint DEFAULT NULL COMMENT '本次整车排车作业明细ID'; ALTER TABLE `ll_outbound_pallet_item` ADD COLUMN `source_attribution_id` bigint DEFAULT NULL COMMENT '不可变PDA真实拣货归属ID'; ALTER TABLE `ll_outbound_pallet_item` ADD COLUMN `source_order_id` bigint DEFAULT NULL COMMENT '本行真实来源尾程订单ID'; ALTER TABLE `ll_outbound_pallet_item` ADD COLUMN `source_inventory_position_id` bigint DEFAULT NULL COMMENT '本行实际拣货库存仓位ID'; ALTER TABLE `ll_outbound_pallet_item` ADD COLUMN `source_return_receipt_id` bigint DEFAULT NULL COMMENT '本行实际退回再派实收记录ID'; ALTER TABLE `ll_outbound_pallet_item` ADD COLUMN `source_return_carton_id` bigint DEFAULT NULL COMMENT '本行实际退货换标来源箱ID'; ALTER TABLE `ll_outbound_pallet_item` ADD UNIQUE KEY `uk_outbound_source_attribution` (`customer_id`,`source_attribution_id`); USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN `purpose` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '费用业务用途;由履约节点确定'; ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN `confirmation_origin` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'BUSINESS' COMMENT '核定入口:BUSINESS业务节点、FINANCIAL财务操作'; ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN `fee_version` int DEFAULT NULL COMMENT '同用途费用确认版本'; ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN `active` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否当前有效版本'; ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN `determination` varchar(24) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'POSITIVE正额、ZERO零元、NOT_APPLICABLE不适用'; ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN `original_currency` char(3) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '核定原币CNY或USD'; ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN `original_amount` decimal(20,2) DEFAULT NULL COMMENT '核定原币金额'; ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN `exchange_rate` decimal(20,6) DEFAULT NULL COMMENT '已确认汇率快照'; ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN `exchange_rate_month` char(7) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '已确认汇率所属月份'; ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN `business_date` date DEFAULT NULL COMMENT '实际费用业务日期'; ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN `wallet_business_id` bigint DEFAULT NULL COMMENT '资金冻结对应采购费用记录'; ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN `wallet_business_no` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '资金冻结业务号;实际国际运费引用原预估'; ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN `wallet_hold_id` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Finance冻结引用'; ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN `wallet_ledger_id` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Finance实际处理流水引用'; ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN `settled_command_event_id` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '成功实扣或退款的资金命令事件'; ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN `source_fee_id` bigint DEFAULT NULL COMMENT '已实扣费用来源ID'; ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN `parent_fee_id` bigint DEFAULT NULL COMMENT '原费用或预估引用'; ALTER TABLE `ll_overseas_procurement_fee` ADD COLUMN `request_hash` char(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '确认请求摘要'; ALTER TABLE `ll_overseas_procurement_fee` ADD UNIQUE KEY `uk_ll_procurement_fee_version` (`order_id`,`purpose`,`fee_item_code`,`fee_version`); USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; ALTER TABLE `ll_overseas_procurement_status_history` ADD COLUMN `operation_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '操作类型:CREATE、REVIEW或UPDATE'; ALTER TABLE `ll_overseas_procurement_status_history` ADD COLUMN `change_detail` json DEFAULT NULL COMMENT '字段变更前后值JSON'; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; CREATE TABLE `ll_procurement_budget_authorization` ( `id` bigint NOT NULL COMMENT '预算授权ID', `order_id` bigint NOT NULL COMMENT '采购订单ID', `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户隔离键', `previous_amount` decimal(20,2) DEFAULT NULL COMMENT '原货款预算总上限;未授权保持空', `previous_currency` char(3) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原预算币种', `authorized_amount` decimal(20,2) NOT NULL COMMENT '客户授权的新货款总上限', `currency` char(3) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户授权币种', `voucher_file_id` bigint NOT NULL COMMENT '客户确认书面或聊天凭证', `reason` varchar(1000) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '授权依据', `reviewed_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '核验人员', `reviewed_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '核验时间', PRIMARY KEY (`id`), KEY `idx_procurement_budget_order` (`customer_id`,`order_id`,`id`), CONSTRAINT `chk_procurement_budget_amount` CHECK (((`authorized_amount` >= 0) and (`previous_amount` >= 0))), CONSTRAINT `chk_procurement_budget_currency` CHECK (((`currency` in (_utf8mb4'CNY',_utf8mb4'USD')) and (`previous_currency` in (_utf8mb4'CNY',_utf8mb4'USD')))) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购货款预算授权核验历史'; USE `baiyue_lastleg`; CREATE TABLE `ll_procurement_carton` ( `id` bigint NOT NULL COMMENT '版本内箱记录ID', `order_id` bigint NOT NULL COMMENT '采购订单ID', `manifest_id` bigint NOT NULL COMMENT '装箱清单版本', `carton_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '采购订单内业务箱号', `length_cm` decimal(12,2) NOT NULL COMMENT '外箱长厘米', `width_cm` decimal(12,2) NOT NULL COMMENT '外箱宽厘米', `height_cm` decimal(12,2) NOT NULL COMMENT '外箱高厘米', `gross_weight_kg` decimal(12,3) NOT NULL COMMENT '封箱毛重千克', `quantity` bigint NOT NULL COMMENT '本箱合格商品总件数', PRIMARY KEY (`id`), UNIQUE KEY `uk_procurement_carton_version` (`manifest_id`,`carton_no`), KEY `idx_procurement_carton_order` (`order_id`,`manifest_id`), CONSTRAINT `chk_procurement_carton_measurement` CHECK (((`length_cm` > 0) and (`width_cm` > 0) and (`height_cm` > 0) and (`gross_weight_kg` > 0) and (`quantity` > 0))) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购版本化逐箱实测与件数'; USE `baiyue_lastleg`; CREATE TABLE `ll_procurement_carton_source` ( `carton_id` bigint NOT NULL COMMENT '版本内箱ID', `receipt_id` bigint NOT NULL COMMENT '海外实收明细来源', `quantity` bigint NOT NULL COMMENT '从该实收装入本箱的件数', PRIMARY KEY (`carton_id`,`receipt_id`), KEY `idx_procurement_carton_receipt` (`receipt_id`), CONSTRAINT `chk_procurement_carton_source_quantity` CHECK ((`quantity` > 0)) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购箱内货物的实收来源与数量'; USE `baiyue_lastleg`; CREATE TABLE `ll_procurement_closure` ( `id` bigint NOT NULL COMMENT '采购异常关闭ID', `order_id` bigint NOT NULL COMMENT '采购订单ID', `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户隔离键', `closure_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '异常关闭业务号', `customer_voucher_file_id` bigint NOT NULL COMMENT '客户同意停止履约凭证', `financial_conclusion` varchar(1000) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '已知费用及后续无需收费的处理结论,不改变资金事实', `reason` varchar(1000) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '内部关闭原因', `client_summary` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '人工确认的对客关闭摘要', `created_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '采购管理确认人', `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '关闭确认时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_procurement_closure_order` (`order_id`), UNIQUE KEY `uk_procurement_closure_no` (`closure_no`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购实物资金收口后的异常关闭事实'; USE `baiyue_lastleg`; CREATE TABLE `ll_procurement_closure_item` ( `id` bigint NOT NULL COMMENT '关闭货物处置ID', `closure_id` bigint NOT NULL COMMENT '采购关闭ID', `source_kind` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '购买未达、在途未达、合格、破损或多货来源', `source_id` bigint DEFAULT NULL COMMENT '原实收或国际交寄箱,购买未达为空', `quantity` bigint NOT NULL COMMENT '本来源最终明确去向件数', `decision` varchar(40) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '供应商保管、退还、报失、客户授权保管或处置', `destination` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '实际去向及接收方说明', `voucher_file_id` bigint NOT NULL COMMENT '本单实物处置证明', PRIMARY KEY (`id`), KEY `idx_procurement_closure_source` (`closure_id`,`source_kind`,`source_id`), CONSTRAINT `chk_procurement_closure_quantity` CHECK ((`quantity` > 0)) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='异常关闭逐来源剩余货物最终去向,不产生新发运'; USE `baiyue_lastleg`; CREATE TABLE `ll_procurement_command` ( `id` bigint NOT NULL COMMENT '操作记录ID', `order_id` bigint NOT NULL COMMENT '采购订单ID', `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户隔离键', `action` varchar(48) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '采购节点动作', `idempotency_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作幂等键', `request_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '请求摘要', `operator_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '执行人', `reason` varchar(1000) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作依据', `detail_json` json NOT NULL COMMENT '内部操作及更正依据快照,不直接对客展示', `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '执行时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_procurement_command` (`order_id`,`action`,`idempotency_key`), KEY `idx_procurement_command_customer` (`customer_id`,`order_id`,`created_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购节点幂等与不可变审计'; USE `baiyue_lastleg`; CREATE TABLE `ll_procurement_control_note` ( `id` bigint NOT NULL COMMENT '采购更正说明ID', `order_id` bigint NOT NULL COMMENT '采购订单ID', `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户隔离键', `note_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '更正说明业务号', `target_type` varchar(24) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '购买、仓库、实收或交寄事实类型', `target_id` bigint DEFAULT NULL COMMENT '本单事实对象引用,购买为空', `blocking` tinyint(1) NOT NULL COMMENT '是否阻断后续计划履约', `voucher_file_id` bigint NOT NULL COMMENT '本单内部事实更正凭证', `reason` varchar(1000) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '内部更正说明', `client_summary` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '人工确认的对客摘要,不复制内部原始内容', `original_value_json` json DEFAULT NULL COMMENT '服务端记录的原事实快照', `corrected_value_json` json DEFAULT NULL COMMENT '服务端记录的更正事实快照', `created_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '采购管理操作人', `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '登记时间', `resolved_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '处理确认人', `resolved_at` datetime(3) DEFAULT NULL COMMENT '阻断解除时间', `resolution_reason` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '内部处理结果', `resolution_voucher_id` bigint DEFAULT NULL COMMENT '本单处理凭证', PRIMARY KEY (`id`), UNIQUE KEY `uk_procurement_note_no` (`note_no`), KEY `idx_procurement_note_block` (`order_id`,`blocking`,`resolved_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购不可覆盖事实的更正说明及阻断异常'; USE `baiyue_lastleg`; USE `baiyue_lastleg`; CREATE TABLE `ll_procurement_disposition` ( `id` bigint NOT NULL COMMENT '差异处理ID', `order_id` bigint NOT NULL COMMENT '采购订单ID', `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户隔离键', `leg` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'OVERSEAS海外或DOMESTIC国内', `source_carton_id` bigint DEFAULT NULL COMMENT '国内原交寄箱来源', `receipt_id` bigint DEFAULT NULL COMMENT '破损或多货对应实收记录,短少为空', `kind` varchar(24) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'SHORTAGE短少、DAMAGED破损、EXTRA多货', `quantity` bigint NOT NULL COMMENT '已批准处置件数', `decision` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'ACCEPT_SHORTAGE确认短少、DISPOSE_DAMAGED拒收或处置、RETURN_EXTRA退回多货', `active` tinyint(1) NOT NULL DEFAULT '1' COMMENT '当前有效处置;撤销只改变有效性并保留原事实', `voucher_file_id` bigint NOT NULL COMMENT '本单客户确认或实际处置凭证', `reason` varchar(1000) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '处置依据', `created_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '采购管理人员', `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '确认时间', PRIMARY KEY (`id`), KEY `idx_procurement_disposition_source` (`order_id`,`leg`,`source_carton_id`,`receipt_id`,`kind`), CONSTRAINT `chk_procurement_disposition_quantity` CHECK ((`quantity` > 0)) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购单内差异处置,不自动退款'; USE `baiyue_lastleg`; CREATE TABLE `ll_procurement_estimate_review` ( `id` bigint NOT NULL COMMENT '预估核对ID', `order_id` bigint NOT NULL COMMENT '采购订单ID', `label_set_id` bigint NOT NULL COMMENT '已核对国际面单版本', `fee_id` bigint NOT NULL COMMENT '唯一有效预估费用版本', `reviewed_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '核价人员', `reviewed_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '核对时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_procurement_estimate_review` (`label_set_id`,`fee_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='面单清单与预估冻结的显式核对关联'; USE `baiyue_lastleg`; CREATE TABLE `ll_procurement_fee_correction` ( `id` bigint NOT NULL COMMENT '费用链更正ID', `order_id` bigint NOT NULL COMMENT '采购订单ID', `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户隔离键', `correction_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '财务更正业务号', `root_fee_id` bigint NOT NULL COMMENT '原实际费用链根', `idempotency_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '本单更正请求幂等键', `request_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '更正目标及凭证请求摘要', `target_original_amount` decimal(20,2) NOT NULL COMMENT '本次正确原币总额', `original_currency` char(3) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '沿用原费用币种', `exchange_rate` decimal(20,6) NOT NULL COMMENT '沿用原费用汇率快照', `exchange_rate_month` char(7) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原汇率月份,不取本次操作月份', `target_amount` decimal(20,2) NOT NULL COMMENT '正确总额折算CNY', `previous_net_amount` decimal(20,2) NOT NULL COMMENT '确认前整链净实扣CNY', `difference_amount` decimal(20,2) NOT NULL COMMENT 'CNY正差额追加、负差额退款、零差额仅留核对记录', `voucher_file_id` bigint NOT NULL COMMENT '本订单财务更正凭证', `reason` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '更正依据', `created_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '授权财务操作人', `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '确认时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_procurement_correction_no` (`correction_no`), UNIQUE KEY `uk_procurement_correction_request` (`order_id`,`idempotency_key`), KEY `idx_procurement_correction_root` (`order_id`,`root_fee_id`,`id`), CONSTRAINT `chk_procurement_correction_amount` CHECK (((`target_original_amount` >= 0) and (`target_amount` >= 0) and (`previous_net_amount` >= 0) and (`exchange_rate` > 0))) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购费用链更正目标与原汇率快照'; USE `baiyue_lastleg`; CREATE TABLE `ll_procurement_fee_correction_item` ( `correction_id` bigint NOT NULL COMMENT '本次费用链更正ID', `fee_id` bigint NOT NULL COMMENT '本次产生的独立正差额或退款费用ID', PRIMARY KEY (`correction_id`,`fee_id`), UNIQUE KEY `uk_procurement_correction_fee` (`fee_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购费用目标更正与逐笔资金事实关联'; USE `baiyue_lastleg`; CREATE TABLE `ll_procurement_flow` ( `order_id` bigint NOT NULL COMMENT '采购订单ID,一单一个履约批次', `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户隔离键', `purchased_at` datetime(3) DEFAULT NULL COMMENT '真实购买时间', `purchased_product_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '实际购买商品', `purchased_specification` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '实际购买规格', `purchased_quantity` bigint DEFAULT NULL COMMENT '实际购买件数', `purchase_amount` decimal(20,2) DEFAULT NULL COMMENT '供应商实付原币金额', `purchase_currency` char(3) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '供应商实付原币CNY或USD', `purchase_voucher_id` bigint DEFAULT NULL COMMENT '购买凭证引用', `purchase_issue` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '购买未核定或异常说明', `purchase_confirmed_at` datetime(3) DEFAULT NULL COMMENT '货款核定时间,不代表扣费成功', `actual_warehouse_id` bigint DEFAULT NULL COMMENT '首次实际收货冻结的仓库ID', `actual_warehouse_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '实际收货仓编码快照', `actual_warehouse_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '实际收货仓名称快照', `overseas_received_at` datetime(3) DEFAULT NULL COMMENT '海外整批收货完成时间', `packing_version` int DEFAULT NULL COMMENT '当前确认装箱清单版本', `overseas_shipped_at` datetime(3) DEFAULT NULL COMMENT '国际段整批实际交寄时间', `domestic_received_at` datetime(3) DEFAULT NULL COMMENT '国内整批收货完成时间', `charges_confirmed_at` datetime(3) DEFAULT NULL COMMENT '国内整单费用核定时间', `customer_shipped_at` datetime(3) DEFAULT NULL COMMENT '国内寄客户实际交寄时间', `domestic_receiver_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '国际段国内收件人', `domestic_receiver_phone` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '国际段国内收件电话', `domestic_receiver_address` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '国际段国内接收地址', `cancelled_at` datetime(3) DEFAULT NULL COMMENT '购买前取消时间', `closed_at` datetime(3) DEFAULT NULL COMMENT '异常关闭时间', `control_reason` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT 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 (`order_id`), KEY `idx_procurement_flow_customer` (`customer_id`,`order_id`), CONSTRAINT `chk_procurement_purchase_amount` CHECK (((`purchase_amount` is null) or (`purchase_amount` >= 0))), CONSTRAINT `chk_procurement_purchase_quantity` CHECK (((`purchased_quantity` is null) or (`purchased_quantity` > 0))) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购单一批次履约事实'; USE `baiyue_lastleg`; CREATE TABLE `ll_procurement_label_item` ( `label_set_id` bigint NOT NULL COMMENT '面单批版本ID', `carton_id` bigint NOT NULL COMMENT '原海外清单箱ID', `file_id` bigint NOT NULL COMMENT '本采购订单面单文件', `page_no` int NOT NULL COMMENT '该箱对应文件页码,从1开始', `carrier` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '承运商', `tracking_no` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '箱主或子运单号', `applied_at` datetime(3) DEFAULT NULL COMMENT '真实贴单时间', `applied_by` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '贴单确认人', PRIMARY KEY (`label_set_id`,`carton_id`), CONSTRAINT `chk_procurement_label_page` CHECK ((`page_no` > 0)) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购逐箱文件页关联及贴单事实'; USE `baiyue_lastleg`; CREATE TABLE `ll_procurement_label_set` ( `id` bigint NOT NULL COMMENT '面单批版本ID', `order_id` bigint NOT NULL COMMENT '采购订单ID', `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户隔离键', `leg` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'OVERSEAS国际段或DOMESTIC寄客户段', `version` int NOT NULL COMMENT '订单段内面单版本', `manifest_id` bigint NOT NULL COMMENT '原海外确认装箱版本', `cargo_hash` char(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '箱规及有效货物来源摘要', `sender_snapshot` json NOT NULL COMMENT '寄件人姓名电话地址快照', `receiver_snapshot` json NOT NULL COMMENT '收件人姓名电话地址快照', `created_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '制单操作人', `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '上传确认时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_procurement_label_version` (`order_id`,`leg`,`version`), CONSTRAINT `chk_procurement_label_leg` CHECK ((`leg` in (_utf8mb4'OVERSEAS',_utf8mb4'DOMESTIC'))) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购两段面单不可变版本和地址快照'; USE `baiyue_lastleg`; CREATE TABLE `ll_procurement_manifest` ( `id` bigint NOT NULL COMMENT '装箱清单ID', `order_id` bigint NOT NULL COMMENT '采购订单ID', `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户隔离键', `version` int NOT NULL COMMENT '订单内装箱版本', `status` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'DRAFT草稿、CONFIRMED已确认、SUPERSEDED已替代', `confirmed_at` datetime(3) DEFAULT NULL COMMENT '确认时间', `created_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '制单人', `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '版本保存时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_procurement_manifest_version` (`order_id`,`version`), CONSTRAINT `chk_procurement_manifest_status` CHECK ((`status` in (_utf8mb4'DRAFT',_utf8mb4'CONFIRMED',_utf8mb4'SUPERSEDED'))) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购装箱清单不可变版本'; USE `baiyue_lastleg`; CREATE TABLE `ll_procurement_receipt` ( `id` bigint NOT NULL COMMENT '实收明细ID', `order_id` bigint NOT NULL COMMENT '采购订单ID', `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户隔离键', `receipt_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '采购收货业务编号', `leg` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'OVERSEAS海外或DOMESTIC国内', `source_carton_id` bigint DEFAULT NULL COMMENT '国内实收关联原国际交寄箱,海外为空', `warehouse_id` bigint DEFAULT NULL COMMENT '海外实际收货仓', `good_quantity` bigint NOT NULL COMMENT '可发合格件数', `damaged_quantity` bigint NOT NULL COMMENT '破损待处置件数', `extra_quantity` bigint NOT NULL COMMENT '多到件数,不增加可发数量', `received_at` datetime(3) NOT NULL COMMENT '实际收货时间', `active` tinyint(1) NOT NULL DEFAULT '1' COMMENT '当前有效实收事实', `supersedes_id` bigint DEFAULT NULL COMMENT '受控更正所替代的原实收记录', `created_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '登记人员', `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '登记时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_procurement_receipt_no` (`receipt_no`), KEY `idx_procurement_receipt_source` (`order_id`,`leg`,`source_carton_id`,`active`), CONSTRAINT `chk_procurement_receipt_leg` CHECK ((((`leg` = _utf8mb4'OVERSEAS') and (`source_carton_id` is null)) or ((`leg` = _utf8mb4'DOMESTIC') and (`source_carton_id` is not null)))), CONSTRAINT `chk_procurement_receipt_quantity` CHECK (((`good_quantity` >= 0) and (`damaged_quantity` >= 0) and (`extra_quantity` >= 0) and (((`good_quantity` + `damaged_quantity`) + `extra_quantity`) > 0))) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购分次实收与受控更正事实'; USE `baiyue_lastleg`; CREATE TABLE `ll_procurement_repack` ( `id` bigint NOT NULL COMMENT '换包装版本ID', `order_id` bigint NOT NULL COMMENT '采购订单ID', `carton_id` bigint NOT NULL COMMENT '原国际交寄箱ID,保持一对一来源', `length_cm` decimal(12,2) NOT NULL COMMENT '新外箱长厘米', `width_cm` decimal(12,2) NOT NULL COMMENT '新外箱宽厘米', `height_cm` decimal(12,2) NOT NULL COMMENT '新外箱高厘米', `gross_weight_kg` decimal(12,3) NOT NULL COMMENT '新封箱毛重千克', `voucher_file_id` bigint NOT NULL COMMENT '本单换包装证据', `reason` varchar(1000) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '换包装依据', `created_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '国内作业人员', `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '登记时间', PRIMARY KEY (`id`), KEY `idx_procurement_repack_carton` (`order_id`,`carton_id`,`id`), CONSTRAINT `chk_procurement_repack_measurement` CHECK (((`length_cm` > 0) and (`width_cm` > 0) and (`height_cm` > 0) and (`gross_weight_kg` > 0))) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购国内原箱一对一换包装不可变历史'; USE `baiyue_lastleg`; CREATE TABLE `ll_procurement_shipment` ( `id` bigint NOT NULL COMMENT '采购交寄ID', `order_id` bigint NOT NULL COMMENT '采购订单ID', `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户隔离键', `shipment_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '交寄业务编号', `leg` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'OVERSEAS国际交寄或DOMESTIC寄客户', `manifest_id` bigint NOT NULL COMMENT '原海外装箱清单版本', `shipped_at` datetime(3) NOT NULL COMMENT '整批真实交承运方时间', `address_snapshot` json NOT NULL COMMENT '本段交寄时的收寄姓名电话地址快照', `created_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '交寄确认人', `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '确认时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_procurement_shipment_leg` (`order_id`,`leg`), UNIQUE KEY `uk_procurement_shipment_no` (`shipment_no`), CONSTRAINT `chk_procurement_shipment_leg` CHECK ((`leg` in (_utf8mb4'OVERSEAS',_utf8mb4'DOMESTIC'))) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购两段各一次整批真实交寄'; USE `baiyue_lastleg`; CREATE TABLE `ll_procurement_shipment_item` ( `shipment_id` bigint NOT NULL COMMENT '采购交寄ID', `carton_id` bigint NOT NULL COMMENT '原海外装箱版本内箱ID', `quantity` bigint NOT NULL COMMENT '本次实际交寄件数', `carrier` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '承运商快照', `tracking_no` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '运单号快照', `label_snapshot` json NOT NULL COMMENT '当次箱规、面单及货物来源快照', PRIMARY KEY (`shipment_id`,`carton_id`), CONSTRAINT `chk_procurement_shipment_item_quantity` CHECK ((`quantity` > 0)) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购整批交寄逐箱事实'; USE `baiyue_lastleg`; CREATE TABLE `ll_procurement_wallet_attempt` ( `id` bigint NOT NULL COMMENT '请求尝试ID', `order_id` bigint NOT NULL COMMENT '采购订单ID', `customer_id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户隔离键', `fee_id` bigint NOT NULL COMMENT '不可变费用版本ID', `attempt_no` bigint NOT NULL COMMENT '费用版本内请求序号', `operation` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '资金操作:FREEZE冻结、SETTLE结算、SETTLE_ACTUAL实际结算、RELEASE释放、REFUND退款', `business_no` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Finance资金业务号', `amount` decimal(20,2) DEFAULT NULL COMMENT '请求金额;全额结算或释放可空', `command_event_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '资金指令事件唯一引用', `status` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '资金请求结果:PENDING未决、SUCCEEDED成功、FAILED明确失败', `result_hash` char(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '原业务回执摘要', `wallet_hold_id` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Finance冻结引用', `wallet_ledger_id` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Finance处理流水引用', `error_code` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '业务失败码', `error_message` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '内部失败诊断,不直接对客展示', `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '请求时间', `completed_at` datetime(3) DEFAULT NULL COMMENT '最终结果时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_procurement_attempt_event` (`command_event_id`), UNIQUE KEY `uk_procurement_attempt_number` (`fee_id`,`attempt_no`), KEY `idx_procurement_attempt_order` (`customer_id`,`order_id`,`status`), CONSTRAINT `chk_procurement_attempt_status` CHECK ((`status` in (_utf8mb4'PENDING',_utf8mb4'SUCCEEDED',_utf8mb4'FAILED'))) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采购费用资金命令尝试与不可变结果'; USE `baiyue_lastleg`; USE `baiyue_lastleg`; ALTER TABLE `ll_receiving_container_session` ADD COLUMN `source_container_booking_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '稳定来源柜预订ID'; ALTER TABLE `ll_receiving_container_session` ADD COLUMN `container_fact_hash` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '领取时整柜订单与计划事实摘要'; ALTER TABLE `ll_receiving_container_session` ADD COLUMN `overseas_warehouse_code` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '海外接柜仓业务编码快照'; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; CREATE TABLE `ll_return_carton_stock_receipt` ( `id` bigint NOT NULL COMMENT '原箱回仓凭据明细标识', `customer_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户数据隔离键', `receipt_no` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原箱回仓实收业务号', `exception_order_id` bigint NOT NULL COMMENT '本次异常退回订单', `exception_return_item_id` bigint NOT NULL COMMENT '本次冻结的原箱来源明细', `delivery_order_id` bigint NOT NULL COMMENT '原运输派送单', `source_pick_id` bigint NOT NULL COMMENT '原箱实际出库拣货凭据', `source_outbound_no` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原出库单业务号', `source_dispatch_item_id` bigint NOT NULL COMMENT '原排车货物明细', `source_outbound_pallet_item_id` bigint NOT NULL COMMENT '原出库托盘明细', `return_carton_id` bigint NOT NULL COMMENT '真实退货原箱标识', `carton_mark` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原箱业务箱码快照', `overseas_warehouse_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '实际回仓海外仓标识', `target_pallet_id` bigint NOT NULL COMMENT '实际回仓目标实物托盘', `target_pallet_no` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '实际目标托盘业务码', `target_location_id` bigint NOT NULL COMMENT '实际回仓目标库位', `target_location_code` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '实际目标库位业务码', `sku_code` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原出库快照中的商品编码', `product_name_zh` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '原出库快照中的中文品名', `quantity` bigint NOT NULL COMMENT '本次原SKU实际恢复件数', `packages` bigint NOT NULL COMMENT '本箱仅首条SKU记录计一箱其余为零', `evidence_file_ids_json` json NOT NULL COMMENT '本次实收证据文件引用', `received_by` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '本次原箱实收确认操作人', `received_at` datetime(3) NOT NULL COMMENT '实际原箱回仓入账时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_return_carton_receipt_source` (`customer_id`,`source_pick_id`,`sku_code`), KEY `idx_return_carton_receipt_exception` (`customer_id`,`exception_order_id`,`received_at`), KEY `idx_return_carton_receipt_delivery` (`customer_id`,`delivery_order_id`), CONSTRAINT `chk_return_carton_receipt_quantity` CHECK (((`quantity` > 0) and (`packages` in (0,1)))) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='原生退货箱按原出库SKU实际回仓的不可变凭据'; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; ALTER TABLE `ll_return_inventory_outbound_movement` ADD COLUMN `return_sku_quantity` bigint DEFAULT NULL COMMENT '退货单SKU本来源计划出库件数快照,NULL为历史整箱出库'; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; ALTER TABLE `ll_return_packing_plan` ADD KEY `idx_ll_return_packing_plan_warehouse` (`overseas_warehouse_id`,`status`,`pushed_at`); USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; CREATE TABLE `ll_selfop_inventory_daily` ( `day_version_id` bigint NOT NULL COMMENT '所属历史日版本', `customer_code` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '来源货主编码', `sku_code` varchar(128) COLLATE utf8mb4_bin NOT NULL COMMENT '来源商品编码', `product_quality` int NOT NULL COMMENT '来源库存品质', `physical_quantity` decimal(20,6) DEFAULT NULL COMMENT '日末实物库存,未知为空,已确认零为零', `quality_status` varchar(16) COLLATE utf8mb4_bin NOT NULL COMMENT '日末资格,有效或未知', `quality_reason` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '缺覆盖或锚点等未知原因', `anchor_reference` bigint DEFAULT NULL COMMENT '独立库存锚点版本', `evidence_hash` char(64) COLLATE utf8mb4_bin NOT NULL COMMENT '该日计算证据摘要', `source` varchar(32) COLLATE utf8mb4_bin NOT NULL COMMENT '库存来源标记,流水还原', PRIMARY KEY (`day_version_id`,`customer_code`,`sku_code`,`product_quality`), KEY `idx_selfop_daily_identity` (`customer_code`,`sku_code`,`day_version_id`), CONSTRAINT `chk_selfop_daily_quantity` CHECK ((((`quality_status` = _utf8mb4'VALID') and (`physical_quantity` is not null) and (`physical_quantity` >= 0)) or ((`quality_status` = _utf8mb4'UNKNOWN') and (`physical_quantity` is null)))) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='历史日末分货主商品品质实物库存'; USE `baiyue_lastleg`; CREATE TABLE `ll_selfop_inventory_day_version` ( `id` bigint NOT NULL COMMENT '不可变历史日版本标识', `source_account` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '受控来源账号', `warehouse_code` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '来源仓库编码', `business_date` date NOT NULL COMMENT '北京时间日末所属日期', `scope_hash` char(64) COLLATE utf8mb4_bin NOT NULL COMMENT '业务范围摘要', `rule_version` varchar(32) COLLATE utf8mb4_bin NOT NULL COMMENT '日末库存还原规则版本', `build_run_id` bigint NOT NULL COMMENT '历史重建执行尝试', `publication_group_id` bigint NOT NULL COMMENT '必须一起切换的发布组标识', `sales_run_id` bigint DEFAULT NULL COMMENT '构建时固定的销量证据版本', `anchor_run_id` bigint NOT NULL COMMENT '固定的独立库存锚点版本', `input_hash` char(64) COLLATE utf8mb4_bin NOT NULL COMMENT '冻结流水修订与覆盖及锚点输入摘要', `evidence_json` json NOT NULL COMMENT '固定输入清单及不可变证据引用', `status` varchar(16) COLLATE utf8mb4_bin NOT NULL COMMENT '构建中、就绪、已发布、已替代或失败', `head_slot` tinyint DEFAULT NULL COMMENT '当前日头为一,非当前版本为空', `valid_sku_count` bigint NOT NULL DEFAULT '0' COMMENT '合格商品数', `unknown_sku_count` bigint NOT NULL DEFAULT '0' COMMENT '待核验商品数', `created_at` datetime(3) NOT NULL COMMENT '版本创建UTC时刻', `published_at` datetime(3) DEFAULT NULL COMMENT '发布组提交UTC时刻', `superseded_at` datetime(3) DEFAULT NULL COMMENT '被新组替代的UTC时刻', `invalidated_at` datetime(3) DEFAULT NULL COMMENT '已确认输入失效的UTC时刻', `invalidation_reason` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '旧版本失效原因', `rebuild_run_id` bigint DEFAULT NULL COMMENT '处理失效版本的重建尝试', PRIMARY KEY (`id`), UNIQUE KEY `uk_selfop_history_build_day` (`build_run_id`,`business_date`), UNIQUE KEY `uk_selfop_history_head` (`source_account`,`warehouse_code`,`business_date`,`head_slot`), KEY `idx_selfop_history_group` (`publication_group_id`,`status`), CONSTRAINT `chk_selfop_history_head` CHECK (((`head_slot` is null) or ((`head_slot` = 1) and (`status` = _utf8mb4'PUBLISHED')))) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='历史日库存不可变版本及原子发布日头'; USE `baiyue_lastleg`; CREATE TABLE `ll_selfop_inventory_flow` ( `id` bigint NOT NULL COMMENT '应用生成的流水记录标识', `source_account` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '受控来源账号', `warehouse_code` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '来源仓库编码', `customer_code` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '来源货主编码', `sku_code` varchar(128) COLLATE utf8mb4_bin NOT NULL COMMENT '来源商品编码', `source_flow_id` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '来源流水字符串标识', `product_quality` int NOT NULL COMMENT '来源品质,零正品一次品,其他未知', `cell_no` varchar(128) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '来源库位编码', `inner_batch_no` varchar(128) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '来源内部批次号', `bill_no` varchar(128) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '来源业务单号', `source_no` varchar(128) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '来源关联单号', `bill_type` varchar(32) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '来源业务类型,未验证类型不得参与正式还原', `book_qty` decimal(20,6) DEFAULT NULL COMMENT '来源记账增减量,未知为空', `book_change_qty_raw` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '来源带符号变动量原文', `delta_quantity` decimal(20,6) DEFAULT NULL COMMENT '解析后的有符号实物变动量', `close_quantity` decimal(20,6) DEFAULT NULL COMMENT '对应库位批次品质链的结存', `source_create_time` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '来源北京时间原文', `event_at_utc` datetime(3) DEFAULT NULL COMMENT '流水发生UTC时刻,无法解析时为空', `business_date` date DEFAULT NULL COMMENT '北京时间业务日期', `quantity_unit` varchar(16) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '已确认数量单位,未知为空', `content_hash` char(64) COLLATE utf8mb4_bin NOT NULL COMMENT '当前事实内容摘要', `revision_no` bigint NOT NULL COMMENT '同来源流水单调增加的修订号', `stage_id` bigint NOT NULL COMMENT '当前事实对应不可变暂存证据', `first_run_id` bigint NOT NULL COMMENT '首次观察执行尝试', `last_run_id` bigint NOT NULL COMMENT '最近确认执行尝试', `last_observed_at` datetime(3) NOT NULL COMMENT '最近观察UTC时刻', `validation_status` varchar(16) COLLATE utf8mb4_bin NOT NULL COMMENT '字段资格,有效或未知', `validation_reason` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '数量或身份待核验原因', PRIMARY KEY (`id`), UNIQUE KEY `uk_selfop_flow_source` (`source_account`,`warehouse_code`,`source_flow_id`), KEY `idx_selfop_flow_sku` (`source_account`,`warehouse_code`,`customer_code`,`sku_code`,`event_at_utc`), KEY `idx_selfop_flow_day` (`source_account`,`warehouse_code`,`business_date`), CONSTRAINT `chk_selfop_flow_revision` CHECK ((`revision_no` > 0)) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='自营历史库存流水最新事实,旧版本保留于暂存证据'; USE `baiyue_lastleg`; CREATE TABLE `ll_selfop_inventory_snapshot` ( `id` bigint NOT NULL COMMENT '应用生成的记录标识', `created_at` datetime(3) NOT NULL COMMENT 'UTC创建时间', `updated_at` datetime(3) NOT NULL COMMENT 'UTC更新时间', `snapshot_run_id` bigint NOT NULL COMMENT 'INVENTORY 执行尝试;发布后该批明细不可修改', `source_account` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '受控来源账号别名,不保存密钥', `customer_code` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '领星货主原始编码,不等同平台客户标识', `warehouse_code` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '来源仓库原始编码,按仓独立统计', `sku_code` varchar(128) COLLATE utf8mb4_bin NOT NULL COMMENT '原始产品 SKU', `product_quality` smallint NOT NULL COMMENT '来源品质,当前 0 正品、1 次品;全量均保存,不套用整箱库存', `product_name` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '来源名称', `physical_quantity` decimal(20,6) DEFAULT NULL COMMENT '来源stkQty实物库存,未知为空', `available_quantity` decimal(20,6) DEFAULT NULL COMMENT '来源useStkQty可用库存,未知为空,不再次扣冻结', `frozen_quantity` decimal(20,6) DEFAULT NULL COMMENT '来源freezeQty冻结库存,未知为空', `transit_quantity` decimal(20,6) DEFAULT NULL COMMENT '来源transitQty在途数量,未知为空,不计可售库存', `source_unique_key` varchar(512) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '原 uniqueKey4tenant,只作来源证据', `observed_at_utc` datetime(3) NOT NULL COMMENT '所在页实际采集时间;缺行占位取本批采集完成时间', `quality_status` varchar(16) COLLATE utf8mb4_bin NOT NULL COMMENT 'VALID、UNKNOWN、INVALID;STALE 按批次年龄实时派生', `quality_reason` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'SOURCE_ROW_MISSING、FIELD_MISSING、NEGATIVE_QUANTITY 等', PRIMARY KEY (`id`), UNIQUE KEY `uk_selfop_stock_snapshot` (`snapshot_run_id`,`source_account`,`customer_code`,`warehouse_code`,`sku_code`,`product_quality`), KEY `idx_selfop_stock_lookup` (`source_account`,`customer_code`,`warehouse_code`,`sku_code`,`product_quality`,`snapshot_run_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='产品库存全量批次明细'; USE `baiyue_lastleg`; CREATE TABLE `ll_selfop_outbound_discovery_scope` ( `id` bigint NOT NULL COMMENT '应用生成的记录标识', `created_at` datetime(3) NOT NULL COMMENT 'UTC创建时间', `updated_at` datetime(3) NOT NULL COMMENT 'UTC更新时间', `source_account` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '受控来源账号别名,不保存密钥', `catalog_from_utc` datetime(3) DEFAULT NULL COMMENT '账号完整目录连续覆盖UTC下界,不等同销量覆盖', `catalog_until_utc` datetime(3) DEFAULT NULL COMMENT '账号完整目录连续覆盖UTC上界,不等同销量覆盖', `next_sequence` bigint NOT NULL DEFAULT '1' COMMENT '新发现任务的单调调度序号;重试沿用,只安排任务,不判断对象内容的新旧', `next_observation_sequence` bigint NOT NULL DEFAULT '1' COMMENT '每次实际出库详情请求前分配的单调采集代次;与 task 调度序号独立,重试请求也分配新代次', `active_task_id` bigint DEFAULT NULL COMMENT '当前共享发现/详情补齐任务', `lease_owner` varchar(128) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '账号发现执行者', `lease_until_utc` datetime(3) DEFAULT NULL COMMENT '账号发现租约到期时刻', `fence_token` bigint NOT NULL DEFAULT '0' COMMENT '防止过期发现进程继续写共享暂存或派发任务', `request_budget` int NOT NULL COMMENT '一次调度允许的目录、详情请求总预算,必须为正', `time_budget_seconds` int NOT NULL COMMENT '一次调度允许占用的执行时长,必须为正', `min_request_interval_ms` int NOT NULL COMMENT '同账号请求最小间隔,按已核准配额配置', `api_budget_json` json DEFAULT NULL COMMENT '账号所有采集族共用的预算、统计日、保守预留及确认消耗、尝试许可和独占交接依据', `api_cooldown_until_utc` datetime(3) DEFAULT NULL COMMENT '账号全部真实请求共用冷却UTC截止,重启与跨日不清除', `api_pause_reason` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '账号停止或等待的固定原因码,不保存供应商原始错误或凭据', PRIMARY KEY (`id`), UNIQUE KEY `uk_selfop_discovery_account` (`source_account`), CONSTRAINT `chk_selfop_outbound_discovery_scope` CHECK (((`request_budget` > 0) and (`time_budget_seconds` > 0) and (`min_request_interval_ms` > 0) and (`fence_token` >= 0) and (`next_sequence` > 0) and (`next_observation_sequence` > 0))) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='账号共享出库目录与详情发现协调作用域'; USE `baiyue_lastleg`; CREATE TABLE `ll_selfop_outbound_item` ( `id` bigint NOT NULL COMMENT '应用生成的记录标识', `created_at` datetime(3) NOT NULL COMMENT 'UTC创建时间', `updated_at` datetime(3) NOT NULL COMMENT 'UTC更新时间', `order_id` bigint NOT NULL COMMENT '对应外部出库事实', `sku_code` varchar(128) COLLATE utf8mb4_bin NOT NULL COMMENT '原始 productSku', `product_name` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '来源商品名称,仅作展示', `actual_quantity` decimal(20,6) NOT NULL COMMENT '详情 actualDeliveryQty,必须为非负有效数值', `quantity_unit` varchar(32) COLLATE utf8mb4_bin NOT NULL COMMENT '已核准业务单位;未确认单位不发布正式数量统计', PRIMARY KEY (`id`), UNIQUE KEY `uk_selfop_order_sku` (`order_id`,`sku_code`), KEY `idx_selfop_item_sku` (`sku_code`,`order_id`), CONSTRAINT `chk_selfop_outbound_item` CHECK ((`actual_quantity` >= 0)) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='整单替换的实际出库明细'; USE `baiyue_lastleg`; CREATE TABLE `ll_selfop_outbound_order` ( `id` bigint NOT NULL COMMENT '应用生成的记录标识', `created_at` datetime(3) NOT NULL COMMENT 'UTC创建时间', `updated_at` datetime(3) NOT NULL COMMENT 'UTC更新时间', `source_account` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '受控来源账号别名,不保存密钥', `customer_code` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '领星货主原始编码,不等同平台客户标识', `warehouse_code` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '来源仓库原始编码,按仓独立统计', `delivery_no` varchar(128) COLLATE utf8mb4_bin NOT NULL COMMENT 'OMP 发货单号,采用列表及详情同一身份', `source_no` varchar(128) COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'WMS 来源出库单号,缺失不以内部 ID 回退展示', `source_status` int NOT NULL COMMENT '原始状态,100 已出库、99 已取消;不改造成内部状态码', `source_created_time` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '来源创建时间原始字符串,不使用采集时间替代', `source_outbound_time` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '来源实际出库时间原始字符串,不使用采集时间替代', `source_timezone` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '解析采用的源时区', `outbound_at_utc` datetime(3) DEFAULT NULL COMMENT '已核准的实际出库时间点;非出库状态可空', `business_date` date DEFAULT NULL COMMENT '已核准业务时区下的出库日', `business_timezone` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '该事实当前归属仓所用业务时区,迁仓后重新确定业务日', `sales_eligible` tinyint NOT NULL DEFAULT '0' COMMENT '仅已出库、时间与全部数量有效时为 1', `revision_no` bigint NOT NULL DEFAULT '1' COMMENT '该单内容变更次数,不等于拉取次数', `content_hash` char(64) COLLATE utf8mb4_bin NOT NULL COMMENT '订单头及完整 SKU 明细规范化摘要', `last_run_id` bigint NOT NULL COMMENT '最后一次确认或修订的执行尝试', `last_observation_sequence` bigint NOT NULL COMMENT '最后接受的完整详情采集代次;仅防旧观测重放,不按 task 调度序号拒绝较晚实际读取的事实,不冒充领星源版本号', PRIMARY KEY (`id`), UNIQUE KEY `uk_selfop_order` (`source_account`,`customer_code`,`delivery_no`), KEY `idx_selfop_order_daily` (`source_account`,`warehouse_code`,`sales_eligible`,`business_date`,`id`), KEY `idx_selfop_order_run` (`last_run_id`), CONSTRAINT `chk_selfop_outbound_order` CHECK (((`revision_no` > 0) and (`last_observation_sequence` > 0) and (`sales_eligible` in (0,1)) and ((`sales_eligible` = 0) or ((`source_status` = 100) and (`source_timezone` is not null) and (`outbound_at_utc` is not null) and (`business_date` is not null))))) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='最后确认的单据事实'; USE `baiyue_lastleg`; CREATE TABLE `ll_selfop_owner` ( `id` bigint NOT NULL COMMENT '主键', `run_id` bigint NOT NULL COMMENT '完整资料采集版本', `source_account` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '来源账号', `customer_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '领星货主编码', `customer_name` varchar(255) DEFAULT NULL COMMENT '领星货主名称', `source_status` varchar(32) DEFAULT NULL COMMENT '来源启停状态', `observed_at_utc` datetime(6) NOT NULL COMMENT '资料观测时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_selfop_owner_version` (`run_id`,`source_account`,`customer_code`), KEY `idx_selfop_owner_lookup` (`source_account`,`customer_code`,`run_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='自营领星货主资料版本'; USE `baiyue_lastleg`; CREATE TABLE `ll_selfop_product` ( `id` bigint NOT NULL COMMENT '主键', `run_id` bigint NOT NULL COMMENT '完整资料采集版本', `source_account` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '来源账号', `customer_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '领星货主编码', `sku_code` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '货主商品编码', `product_name` varchar(255) DEFAULT NULL COMMENT '商品名称', `declared_length` decimal(24,6) DEFAULT NULL COMMENT '商品资料长度', `declared_width` decimal(24,6) DEFAULT NULL COMMENT '商品资料宽度', `declared_height` decimal(24,6) DEFAULT NULL COMMENT '商品资料高度', `declared_size_unit` varchar(32) DEFAULT NULL COMMENT '商品资料尺寸单位', `measured_length` decimal(24,6) DEFAULT NULL COMMENT '仓库实测长度', `measured_width` decimal(24,6) DEFAULT NULL COMMENT '仓库实测宽度', `measured_height` decimal(24,6) DEFAULT NULL COMMENT '仓库实测高度', `measured_size_unit` varchar(32) DEFAULT NULL COMMENT '仓库实测尺寸单位', `observed_at_utc` datetime(6) NOT NULL COMMENT '资料观测时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_selfop_product_version` (`run_id`,`source_account`,`customer_code`,`sku_code`), KEY `idx_selfop_product_lookup` (`source_account`,`customer_code`,`sku_code`,`run_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='自营领星商品资料版本'; USE `baiyue_lastleg`; CREATE TABLE `ll_selfop_sku_daily_sales` ( `id` bigint NOT NULL COMMENT '应用生成的记录标识', `created_at` datetime(3) NOT NULL COMMENT 'UTC创建时间', `updated_at` datetime(3) NOT NULL COMMENT 'UTC更新时间', `sales_run_id` bigint NOT NULL COMMENT 'OUTBOUND 执行尝试,同时是计算版本', `source_account` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '受控来源账号别名,不保存密钥', `customer_code` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '领星货主原始编码,不等同平台客户标识', `warehouse_code` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '来源仓库原始编码,按仓独立统计', `sku_code` varchar(128) COLLATE utf8mb4_bin NOT NULL COMMENT '原始产品 SKU', `business_date` date NOT NULL COMMENT '已核准业务日', `outbound_quantity` decimal(20,6) NOT NULL COMMENT '有效出库实际件数之和,非负', `outbound_order_count` bigint NOT NULL COMMENT '该维度去重发货单数,非负', `quantity_unit` varchar(32) COLLATE utf8mb4_bin NOT NULL COMMENT '同一统计维度内一致的业务单位', PRIMARY KEY (`id`), UNIQUE KEY `uk_selfop_daily_version` (`sales_run_id`,`source_account`,`customer_code`,`warehouse_code`,`sku_code`,`business_date`), KEY `idx_selfop_daily_window_cover` (`sales_run_id`,`source_account`,`warehouse_code`,`business_date`,`customer_code`,`sku_code`,`outbound_quantity`,`outbound_order_count`,`quantity_unit`), KEY `idx_selfop_daily_sku_cover` (`sales_run_id`,`source_account`,`warehouse_code`,`customer_code`,`sku_code`,`business_date`,`outbound_quantity`,`outbound_order_count`,`quantity_unit`), CONSTRAINT `chk_selfop_sku_daily_sales` CHECK (((`outbound_quantity` >= 0) and (`outbound_order_count` >= 0))) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='完整销量版本的稀疏日事实'; USE `baiyue_lastleg`; CREATE TABLE `ll_selfop_sku_profile` ( `id` bigint NOT NULL COMMENT '应用生成的记录标识', `created_at` datetime(3) NOT NULL COMMENT 'UTC创建时间', `updated_at` datetime(3) NOT NULL COMMENT 'UTC更新时间', `profile_run_id` bigint NOT NULL COMMENT '本仓销量或库存候选版本;与对应 daily/snapshot 使用同一 run,发布后该版本全部维度行不可修改', `source_account` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '受控来源账号别名,不保存密钥', `customer_code` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '领星货主原始编码,不等同平台客户标识', `warehouse_code` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '来源仓库原始编码,按仓独立统计', `sku_code` varchar(128) COLLATE utf8mb4_bin NOT NULL COMMENT '原始产品 SKU', `product_name` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '本版本确认的名称,不实时连接其他版本名称', `quantity_unit` varchar(32) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '本版本已核准单位;未知或两版本单位冲突时不计算混合指标', `first_seen_at_utc` datetime(3) DEFAULT NULL COMMENT '本证据族真实观测到本仓商品的最早接收时刻;缺行占位不能生成观察证据', `earliest_evidence_at_utc` datetime(3) DEFAULT NULL COMMENT '库存版取真实库存首次观察时刻;销量版从该版有效事实重新求最早已核准出库时间,可随改期、取消或迁仓撤回/后移', `evidence_type` varchar(24) COLLATE utf8mb4_bin NOT NULL COMMENT 'INVENTORY_OBSERVATION、VALID_OUTBOUND、NONE;不得将销量证据复制成库存真实观察证据', `evidence_run_id` bigint DEFAULT NULL COMMENT '本证据族真实依据的采集批次,无证据占位为空', `last_seen_run_id` bigint DEFAULT NULL COMMENT '本证据族最近真实观测批次,无证据占位为空', PRIMARY KEY (`id`), UNIQUE KEY `uk_selfop_profile_version` (`profile_run_id`,`source_account`,`customer_code`,`warehouse_code`,`sku_code`), KEY `idx_selfop_profile_evidence` (`profile_run_id`,`earliest_evidence_at_utc`,`customer_code`,`sku_code`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='随发布版本固定的 SKU 维度与观察依据'; USE `baiyue_lastleg`; CREATE TABLE `ll_selfop_sync_run` ( `id` bigint NOT NULL COMMENT '应用生成的记录标识', `created_at` datetime(3) NOT NULL COMMENT 'UTC创建时间', `updated_at` datetime(3) NOT NULL COMMENT 'UTC更新时间', `task_id` bigint NOT NULL COMMENT '本次执行请求', `execution_purpose` varchar(16) COLLATE utf8mb4_bin NOT NULL COMMENT '从逻辑任务冻结继承,验证尝试不能作为正式统计版本', `scope_id` bigint DEFAULT NULL COMMENT '仅账号共享发现为空;分仓执行必须有作用域', `source_account` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '受控来源账号别名,不保存密钥', `warehouse_code` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '来源仓库原始编码,按仓独立统计', `run_role` varchar(24) COLLATE utf8mb4_bin NOT NULL COMMENT 'ACCOUNT_DISCOVERY 或 WAREHOUSE_SYNC', `upstream_task_id` bigint DEFAULT NULL COMMENT '分仓出库计算引用的共享切片及其稳定暂存集合', `attempt_no` int NOT NULL COMMENT '同一请求从 1 起递增', `scope_hash` char(64) COLLATE utf8mb4_bin NOT NULL COMMENT '本版本的业务范围摘要', `scope_snapshot_json` json NOT NULL COMMENT '分仓版只含本仓货主/品质、固定首采 [B,E0)、时区、调度与过期阈值;账号发现保存待路由仓集合,不冒充业务版', `observed_dimensions_json` json DEFAULT NULL COMMENT '本次实际出现的仓库/货主集合及数量摘要,仅作采集证据;例如已观测 70 货主不等于固定授权范围', `fence_token` bigint NOT NULL COMMENT '本尝试持有的栅栏版本', `base_published_run_id` bigint DEFAULT NULL COMMENT '执行开始时的上一可见版本', `reference_sales_run_id` bigint DEFAULT NULL COMMENT '库存构建开始时固定的本仓已发布销量版,用其不可变 SKU 维度生成出库已知商品占位;没有已发布销量版时为空,不读取半归并订单事实', `inventory_daily_sample_date` date DEFAULT NULL COMMENT '北京时间当日首个合格计划库存发布代表日期,非代表为空', `inventory_sample_rule_version` varchar(32) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '日库存代表选择规则 DAILY_SCHEDULED_FIRST_V1,与日标记原子保存', `status` varchar(24) COLLATE utf8mb4_bin NOT NULL COMMENT 'FETCHING、VALIDATED、ROUTED、FACTS_APPLIED、BUILDING、READY、PUBLISHED、REUSED、YIELDED、FAILED、ABORTED、SAMPLE_DONE;复用和验证不是版本头', `last_phase` varchar(24) COLLATE utf8mb4_bin NOT NULL COMMENT '失败/中止前所在阶段,支持判断是否已经归并事实', `fetch_started_at_utc` datetime(3) DEFAULT NULL COMMENT '实际采集开始UTC时间', `fetch_finished_at_utc` datetime(3) DEFAULT NULL COMMENT '实际采集完成UTC时间,未完成为空', `build_started_at_utc` datetime(3) DEFAULT NULL COMMENT '实际开始有界候选构建UTC时间,用于构建耗时及首采合并间隔', `warehouse_daily_ready` tinyint NOT NULL DEFAULT '0' COMMENT '仓库日汇总已完整构建并校验,含完整空版本', `finished_at_utc` datetime(3) DEFAULT NULL COMMENT '本次尝试终止UTC时间', `published_at_utc` datetime(3) DEFAULT NULL COMMENT '实际原子切换发布指针UTC时间', `superseded_at_utc` datetime(3) DEFAULT NULL COMMENT '被新发布版替代的首次UTC时间,同事务填写且重试不重置', `page_count` int NOT NULL DEFAULT '0' COMMENT '已完整获取页数', `source_total_count` bigint DEFAULT NULL COMMENT '上游可靠返回的总数;未返回则为空', `unique_object_count` bigint NOT NULL DEFAULT '0' COMMENT '规范化去重后对象数', `progress_snapshot_json` json DEFAULT NULL COMMENT '尝试终止时冻结的有界可靠进度摘要,历史尝试不随逻辑任务改写', `heartbeat_at_utc` datetime(3) DEFAULT NULL COMMENT '有效执行者最新UTC心跳,不代表业务检查点推进', `coverage_status` varchar(16) COLLATE utf8mb4_bin NOT NULL COMMENT 'UNKNOWN、PARTIAL、COMPLETE;分页完整与数值有效性分别判断', `covered_from_utc` datetime(3) DEFAULT NULL COMMENT '本仓销量版本实际连续覆盖UTC下界', `covered_until_utc` datetime(3) DEFAULT NULL COMMENT '本仓销量版本实际连续覆盖UTC上界,不含端点', `complete_day_from` date DEFAULT NULL COMMENT '本仓完整自然日区间首日,包含', `complete_day_until` date DEFAULT NULL COMMENT '本仓完整自然日区间末日,不含', `applied_fact_revision` bigint DEFAULT NULL COMMENT '本次尝试归并后的事实修订号,库存为空', `calculated_fact_revision` bigint DEFAULT NULL COMMENT '候选销量版本计算所依据的固定事实修订号', `error_code` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '内部可诊断错误分类,不保存认证信息', `error_message` varchar(500) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '脱敏后的固定错误摘要', PRIMARY KEY (`id`), UNIQUE KEY `uk_selfop_run_attempt` (`task_id`,`attempt_no`), UNIQUE KEY `uk_selfop_inventory_daily` (`source_account`,`warehouse_code`,`inventory_daily_sample_date`), KEY `idx_selfop_run_scope` (`scope_id`,`id`), KEY `idx_selfop_run_status` (`status`,`updated_at`), CONSTRAINT `chk_selfop_inventory_daily` CHECK ((((`inventory_daily_sample_date` is null) and (`inventory_sample_rule_version` is null)) or ((`inventory_daily_sample_date` is not null) and (`inventory_sample_rule_version` is not null) and (`inventory_sample_rule_version` = _utf8mb4'DAILY_SCHEDULED_FIRST_V1') and (`execution_purpose` = _utf8mb4'BUSINESS') and (`run_role` = _utf8mb4'WAREHOUSE_SYNC') and (`status` = _utf8mb4'PUBLISHED') and (`coverage_status` = _utf8mb4'COMPLETE')))), CONSTRAINT `chk_selfop_sync_run` CHECK (((`attempt_no` > 0) and (`page_count` >= 0) and (`unique_object_count` >= 0) and (`execution_purpose` in (_utf8mb4'BUSINESS',_utf8mb4'VALIDATION')) and ((`execution_purpose` <> _utf8mb4'VALIDATION') or (`status` not in (_utf8mb4'PUBLISHED',_utf8mb4'REUSED'))) and ((`source_total_count` is null) or (`source_total_count` >= 0)) and (((`run_role` = _utf8mb4'ACCOUNT_DISCOVERY') and (`scope_id` is null) and (`warehouse_code` is null)) or ((`run_role` = _utf8mb4'WAREHOUSE_SYNC') and (`scope_id` is not null) and (`warehouse_code` is not null))))) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='执行尝试、覆盖证明和版本头'; USE `baiyue_lastleg`; CREATE TABLE `ll_selfop_sync_scope` ( `id` bigint NOT NULL COMMENT '应用生成的记录标识', `created_at` datetime(3) NOT NULL COMMENT 'UTC创建时间', `updated_at` datetime(3) NOT NULL COMMENT 'UTC更新时间', `source_account` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '受控来源账号别名,不保存密钥', `warehouse_code` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '来源仓库原始编码,按仓独立统计', `data_family` varchar(16) COLLATE utf8mb4_bin NOT NULL COMMENT 'OUTBOUND 或 INVENTORY;按账号+仓库+任务族互斥', `scope_json` json NOT NULL COMMENT '本仓范围规则,customerMode=ALL_AUTHORIZED,库存为全部品质;当前账号全部授权货主均自营,不将当天出现的货主列表当白名单', `scope_hash` char(64) COLLATE utf8mb4_bin NOT NULL COMMENT '仓库、货主范围规则、品质、时区及单位口径的规范化摘要;不包含当天观测到的客户/SKU 集合', `business_timezone` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '本仓报表及调度时区,初始建议值为 Asia/Shanghai,各仓独立核准', `source_timezone` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '本仓已核准的出库源时间时区', `schedule_cron` varchar(128) COLLATE utf8mb4_bin NOT NULL COMMENT '本仓、本任务族的调度表达式,按 business_timezone 执行', `stale_after_seconds` int NOT NULL COMMENT '本仓、本任务族数据过期阈值,必须为正;库存初始可采用 26 小时,后续按仓调整', `warehouse_policy_ref` varchar(128) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '未来按仓告警/补货策略的稳定引用;一期为空,不建告警规则表', `initial_from_utc` datetime(3) DEFAULT NULL COMMENT '首采固定UTC下界,按本仓业务时区减一个月', `initial_until_utc` datetime(3) DEFAULT NULL COMMENT '首采固定UTC截止,重试不重新取当前时间', `discovery_from_utc` datetime(3) DEFAULT NULL COMMENT '本仓已发布的连续销量覆盖UTC下界', `discovery_until_utc` datetime(3) DEFAULT NULL COMMENT '本仓已发布的连续销量覆盖UTC上界,不含端点', `fact_revision` bigint NOT NULL DEFAULT '0' COMMENT '出库事实归并修订号;内容实际变化才增加', `published_fact_revision` bigint NOT NULL DEFAULT '0' COMMENT '本仓最后已发布销量版所使用的事实修订号', `rebuild_required` tinyint NOT NULL DEFAULT '0' COMMENT '事实变化待重建标记;跨仓修订同时置旧、新仓为 1', `invalidated_at_utc` datetime(3) DEFAULT NULL COMMENT '最近一次因事实修订使当前版待重建的时刻', `published_run_id` bigint DEFAULT NULL COMMENT '唯一对外可见版本,指向本任务族已发布执行批次', `lease_owner` varchar(128) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '当前执行者令牌,不使用仅进程内锁', `lease_until_utc` datetime(3) DEFAULT NULL COMMENT '租约到期时刻', `fence_token` bigint NOT NULL DEFAULT '0' COMMENT '每次取得租约递增,事实提交和发布均校验', `known_order_cursor_id` bigint DEFAULT NULL COMMENT '本仓已可靠处理的稳定订单内部标识游标', `known_order_round_max_id` bigint DEFAULT NULL COMMENT '本轮已知单复查固定最大内部标识', `known_order_round_started_at_utc` datetime(3) DEFAULT NULL COMMENT '本仓已知单复查轮次开始UTC时间', `known_order_round_finished_at_utc` datetime(3) DEFAULT NULL COMMENT '本仓已知单完整轮转完成UTC时间', `history_round_from_utc` datetime(3) DEFAULT NULL COMMENT '本仓历史核对固定UTC下界', `history_round_until_utc` datetime(3) DEFAULT NULL COMMENT '本仓历史核对固定UTC上界', `history_slice_cursor_utc` datetime(3) DEFAULT NULL COMMENT '本仓下一待核对历史切片UTC位置', `history_round_finished_at_utc` datetime(3) DEFAULT NULL COMMENT '上一轮历史时间片全部完成时刻', `review_request_budget` int NOT NULL COMMENT '本仓单次复查最大请求数,必须为正', `review_time_budget_seconds` int NOT NULL COMMENT '本仓单次复查最大执行秒数,必须为正', `review_target_days` int NOT NULL DEFAULT '7' COMMENT '建议每 7 天轮转一遍,属于待配额验证的目标,不保证首次大量详情在单次调度内完成', PRIMARY KEY (`id`), UNIQUE KEY `uk_selfop_scope` (`source_account`,`warehouse_code`,`data_family`), KEY `idx_selfop_scope_lease` (`lease_until_utc`), CONSTRAINT `chk_selfop_sync_scope` CHECK (((`data_family` in (_utf8mb4'OUTBOUND',_utf8mb4'INVENTORY')) and (`stale_after_seconds` > 0) and (`review_request_budget` > 0) and (`review_time_budget_seconds` > 0) and (`review_target_days` > 0) and (`fact_revision` >= 0) and (`published_fact_revision` >= 0) and (`fence_token` >= 0))) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='分仓任务族租约及发布指针'; USE `baiyue_lastleg`; CREATE TABLE `ll_selfop_sync_stage` ( `id` bigint NOT NULL COMMENT '应用生成的记录标识', `created_at` datetime(3) NOT NULL COMMENT 'UTC创建时间', `updated_at` datetime(3) NOT NULL COMMENT 'UTC更新时间', `run_id` bigint NOT NULL COMMENT '首次写入该暂存对象的执行尝试', `stage_batch_id` bigint NOT NULL COMMENT '出库取共享发现 task.id,便于断点续取;库存取本次 run.id,严禁跨尝试混页', `last_fetch_run_id` bigint NOT NULL COMMENT '最后一次补齐该对象的执行尝试,保留重试来源', `observation_sequence` bigint DEFAULT NULL COMMENT '该完整出库详情实际请求的采集代次;有效出库对象必填,目录待补对象和库存为空;不能填 task 调度序号', `warehouse_code` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '来源仓库原始编码,按仓独立统计', `previous_warehouse_code` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '路由时从已有单据识别的原仓库;归并前再校验,跨仓时通知两仓', `object_type` varchar(16) COLLATE utf8mb4_bin NOT NULL COMMENT 'OUTBOUND_ORDER 或 PRODUCT_STOCK', `object_key_hash` char(64) COLLATE utf8mb4_bin NOT NULL COMMENT '规范化业务键摘要;原业务键保留在载荷中并核对', `first_page_no` int NOT NULL COMMENT '首次发现页码', `observed_at_utc` datetime(3) NOT NULL COMMENT '实际接收该对象的时刻', `content_hash` char(64) COLLATE utf8mb4_bin NOT NULL COMMENT '完整规范化对象摘要', `payload_json` json NOT NULL COMMENT '目录阶段可先存订单头,详情齐后补完整 SKU;VALID 后不再修改;库存保存产品库存字段', `before_payload_json` json DEFAULT NULL COMMENT '订单归并事务内记录归并前的完整规范化事实;新增单为空', `validation_status` varchar(16) COLLATE utf8mb4_bin NOT NULL COMMENT '暂存校验状态:PENDING待核验、VALID有效、INVALID异常', `validation_code` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '字段缺失、冲突、未知时区等原因', PRIMARY KEY (`id`), UNIQUE KEY `uk_selfop_stage_object` (`stage_batch_id`,`object_type`,`object_key_hash`), KEY `idx_selfop_stage_history` (`object_type`,`object_key_hash`,`stage_batch_id`), KEY `idx_selfop_stage_observation` (`object_type`,`object_key_hash`,`validation_status`,`observation_sequence`), KEY `idx_selfop_stage_fact_observation` (`observation_sequence`,`warehouse_code`,`object_type`,`validation_status`,`run_id`,`observed_at_utc`), KEY `idx_selfop_stage_route` (`stage_batch_id`,`warehouse_code`,`validation_status`), CONSTRAINT `chk_selfop_sync_stage` CHECK (((`first_page_no` > 0) and ((`object_type` <> _utf8mb4'OUTBOUND_ORDER') or (`validation_status` <> _utf8mb4'VALID') or (`observation_sequence` is not null)))) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='待验证事实与修订证据'; USE `baiyue_lastleg`; CREATE TABLE `ll_selfop_sync_task` ( `id` bigint NOT NULL COMMENT '应用生成的记录标识', `created_at` datetime(3) NOT NULL COMMENT 'UTC创建时间', `updated_at` datetime(3) NOT NULL COMMENT 'UTC更新时间', `task_no` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '稳定采集业务任务号,重试沿用,不展示内部数据库标识', `execution_purpose` varchar(16) COLLATE utf8mb4_bin NOT NULL COMMENT 'BUSINESS或VALIDATION;由服务端冻结用途,子任务继承', `validation_root_task_id` bigint DEFAULT NULL COMMENT '验证会话唯一预算根任务,根引用自身,正式任务为空', `validation_budget_json` json DEFAULT NULL COMMENT '验证根冻结硬预算、累计消耗、库存分仓页数、截止时刻及停止原因', `business_root_task_id` bigint DEFAULT NULL COMMENT '测试人工正式采集共享预算根任务;生产任务为空', `business_budget_json` json DEFAULT NULL COMMENT '仅测试正式采集根保存冻结请求上限、截止时间、消耗及停止原因', `source_account` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '受控来源账号别名,不保存密钥', `task_role` varchar(24) COLLATE utf8mb4_bin NOT NULL COMMENT 'ACCOUNT_DISCOVERY 或 WAREHOUSE_SYNC', `scope_id` bigint DEFAULT NULL COMMENT '分仓任务必须引用分仓作用域;仅账号共享发现为空', `warehouse_code` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '来源仓库原始编码,按仓独立统计', `discovery_scope_id` bigint DEFAULT NULL COMMENT '共享发现必填,引用账号发现协调器', `upstream_task_id` bigint DEFAULT NULL COMMENT '出库分仓任务引用已持久化目录的共享发现切片;库存无此上游', `discovery_sequence` bigint DEFAULT NULL COMMENT '共享任务及分仓子任务继承的调度顺序;重试保持不变,不用于事实覆盖判定', `observation_baseline` bigint DEFAULT NULL COMMENT '共享任务建立时已分配的最大详情采集代次,分仓子任务继承;用于识别旧任务恢复期间出现的其他任务新观测', `request_key` varchar(128) COLLATE utf8mb4_bin NOT NULL COMMENT '共享发现包含切片/计划槽位;分仓任务包含仓库、任务族及切片或计划槽位;人工附请求幂等键', `request_hash` char(64) COLLATE utf8mb4_bin NOT NULL COMMENT '请求类型、查询范围、范围摘要的指纹;同键不同请求拒绝', `task_type` varchar(24) COLLATE utf8mb4_bin NOT NULL COMMENT '计划、补采、复核、重建与验证;INVENTORY_FLOW_HISTORY为流水片,INVENTORY_HISTORY_BUILD为本地历史还原', `planned_at_utc` datetime(3) DEFAULT NULL COMMENT '计划时点;人工请求可空', `query_from_utc` datetime(3) DEFAULT NULL COMMENT '出库查询区间UTC下界,库存不填', `query_until_utc` datetime(3) DEFAULT NULL COMMENT '出库查询区间UTC上界,不含端点,库存不填', `query_scope_json` json NOT NULL COMMENT '不变的账号、货主、仓库、品质和查询条件快照;按单补查在此记录单号', `routing_manifest_json` json DEFAULT NULL COMMENT '共享切片目录完整标记、每仓对象键集合/数量和详情就绪状态;各对象记录 effectiveStageId,需新代次复查时记录 refreshTaskId,完成后指向新有效暂存;不改写旧载荷', `scope_hash` char(64) COLLATE utf8mb4_bin NOT NULL COMMENT '建任务时的业务范围摘要', `status` varchar(20) COLLATE utf8mb4_bin NOT NULL COMMENT 'WAITING_SOURCE、READY、RUNNING、RETRY_WAIT、SUCCEEDED、DEAD、SAMPLE_DONE;样本结束不等于正式成功', `apply_state` varchar(20) COLLATE utf8mb4_bin NOT NULL COMMENT '正式出库归并NOT_STARTED、APPLYING、BLOCKED、APPLIED;共享发现、库存、重建及验证为NOT_APPLICABLE', `affected_warehouse_codes_json` json DEFAULT NULL COMMENT '本次归并可能改变的仓集合,包含原仓与新仓;首段事实写入前登记,扩大集合须先取得新增仓租约并锁 scope,不能写完再补', `apply_started_at_utc` datetime(3) DEFAULT NULL COMMENT '首段事实提交UTC时间', `apply_completed_at_utc` datetime(3) DEFAULT NULL COMMENT '全部必需事实归并完成UTC时间,失败不填', `attempt_count` int NOT NULL DEFAULT '0' COMMENT '已创建的执行尝试数', `next_retry_at_utc` datetime(3) DEFAULT NULL COMMENT '有限退避后下一次可执行时刻', `requested_by` varchar(128) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '人工请求的平台操作人,仅内部审计', `result_published_run_id` bigint DEFAULT NULL COMMENT '正式成功任务实际发布或复用的版本;验证和共享发现为空', `progress_json` json DEFAULT NULL COMMENT '与可靠检查点一起提交的有界阶段、单位、尝试和质量进度,不保存单据集合', `progress_updated_at_utc` datetime(3) DEFAULT NULL COMMENT '最后可靠业务检查点UTC时间,与执行心跳分开', PRIMARY KEY (`id`), UNIQUE KEY `uk_selfop_task_no` (`task_no`), UNIQUE KEY `uk_selfop_task_request` (`source_account`,`request_key`), KEY `idx_selfop_task_poll` (`status`,`next_retry_at_utc`,`id`), KEY `idx_selfop_task_upstream` (`upstream_task_id`,`warehouse_code`), KEY `idx_selfop_task_apply` (`apply_state`,`id`), KEY `idx_selfop_task_scope_list` (`scope_id`,`created_at`,`id`), KEY `idx_selfop_task_account_list` (`source_account`,`task_role`,`created_at`,`id`), KEY `idx_selfop_task_business_root` (`business_root_task_id`,`status`,`id`), CONSTRAINT `chk_selfop_business_budget` CHECK ((((`business_root_task_id` is null) and (`business_budget_json` is null)) or ((`execution_purpose` = _utf8mb4'BUSINESS') and (`business_root_task_id` is not null) and (((`business_root_task_id` = `id`) and (`business_budget_json` is not null)) or ((`business_root_task_id` <> `id`) and (`business_budget_json` is null)))))), CONSTRAINT `chk_selfop_sync_task` CHECK (((`attempt_count` >= 0) and (`execution_purpose` in (_utf8mb4'BUSINESS',_utf8mb4'VALIDATION')) and (((`execution_purpose` = _utf8mb4'BUSINESS') and (`validation_root_task_id` is null) and (`validation_budget_json` is null)) or ((`execution_purpose` = _utf8mb4'VALIDATION') and (`validation_root_task_id` is not null) and (`apply_state` = _utf8mb4'NOT_APPLICABLE') and (`result_published_run_id` is null) and (`status` <> _utf8mb4'SUCCEEDED'))) and (((`task_role` = _utf8mb4'ACCOUNT_DISCOVERY') and (`scope_id` is null) and (`warehouse_code` is null) and (`discovery_scope_id` is not null)) or ((`task_role` = _utf8mb4'WAREHOUSE_SYNC') and (`scope_id` is not null) and (`warehouse_code` is not null))))) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='一次计划或人工请求'; USE `baiyue_lastleg`; CREATE TABLE `ll_selfop_warehouse_daily_sales` ( `sales_run_id` bigint NOT NULL COMMENT '完整销量计算版本标识', `source_account` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '受控来源账号别名,不保存密钥', `warehouse_code` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '来源仓库原始编码', `business_date` date NOT NULL COMMENT '已核准业务日', `observed_quantity` decimal(38,6) DEFAULT NULL COMMENT '该日PCS非负有效出库量之和,无有效行时为空', `invalid_row_count` bigint NOT NULL COMMENT '该日数量为空或负数或单位非PCS的日事实行数', `source_row_count` bigint NOT NULL COMMENT '该日参与仓库汇总的SKU日事实总行数', `created_at` datetime(3) NOT NULL COMMENT 'UTC创建时间', `updated_at` datetime(3) NOT NULL COMMENT 'UTC更新时间', PRIMARY KEY (`sales_run_id`,`source_account`,`warehouse_code`,`business_date`), CONSTRAINT `chk_selfop_warehouse_daily_sales` CHECK (((`source_row_count` > 0) and (`invalid_row_count` >= 0) and (`invalid_row_count` <= `source_row_count`) and ((`observed_quantity` is null) or (`observed_quantity` >= 0)))) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='完整销量版本按仓按日汇总,随SKU日事实批次原子构建'; USE `baiyue_lastleg`; ALTER TABLE `ll_us_truck_order` ADD COLUMN `vehicle_type` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '车辆类型:PALLET_15为15拖,PALLET_30为30拖;拼车未提供时为空'; ALTER TABLE `ll_us_truck_order` ADD COLUMN `origin_contact_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '起运地联系人'; ALTER TABLE `ll_us_truck_order` ADD COLUMN `origin_contact_phone` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '起运地联系电话'; ALTER TABLE `ll_us_truck_order` ADD COLUMN `destination_contact_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的地联系人'; ALTER TABLE `ll_us_truck_order` ADD COLUMN `destination_contact_phone` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '目的地联系电话'; ALTER TABLE `ll_us_truck_order` ADD COLUMN `pickup_at` datetime DEFAULT NULL COMMENT '取货时间,按填写的日期时分保存,不转换时区'; ALTER TABLE `ll_us_truck_order` ADD COLUMN `delivery_at` datetime DEFAULT NULL COMMENT '送货时间,按填写的日期时分保存;拼车来源未提供时为空'; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; ALTER TABLE `ll_warehouse_transfer_inventory_allocation` ADD KEY `idx_ll_wh_transfer_allocation_position` (`transfer_order_id`,`inventory_position_id`); USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_lastleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; CREATE TABLE `event_delivery_retry_audit` ( `request_id` varchar(36) NOT NULL COMMENT '人工重试请求UUID和幂等键', `producer_table` varchar(64) NOT NULL COMMENT '本服务发件箱表名', `entry_id` varchar(64) NOT NULL COMMENT '发件箱记录主键', `event_id` varchar(128) NOT NULL COMMENT '原事件全局标识', `event_type` varchar(64) NOT NULL COMMENT '原事件类型', `payload_hash` varchar(71) NOT NULL COMMENT '原事件不可变负载摘要', `operator_name` varchar(128) NOT NULL COMMENT '持有运维凭据的操作人标识', `reason` varchar(500) NOT NULL COMMENT '人工重试原因', `previous_failures` int NOT NULL COMMENT '重试前累计失败次数', `previous_error` varchar(1000) DEFAULT NULL COMMENT '重试前最后一次脱敏错误', `requested_at` datetime(3) NOT NULL COMMENT '重试申请提交时间', PRIMARY KEY (`request_id`), KEY `idx_event_retry_entry` (`producer_table`,`entry_id`,`requested_at`), KEY `idx_event_retry_event` (`event_id`,`requested_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='业务事件人工重试审计,与恢复待发送状态同事务提交'; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; ALTER TABLE `fl_carrier_schedule_node_fact` ADD KEY `idx_container_shipping_node_timeline` (`container_booking_id`,`observed_at`,`id`); USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; CREATE TABLE `fl_chargeable_weight_confirmation` ( `id` bigint NOT NULL COMMENT '确认记录ID', `tenant_id` bigint NOT NULL COMMENT '客户隔离ID', `inbound_id` bigint NOT NULL COMMENT '独立来源入仓单ID', `operator_id` bigint NOT NULL COMMENT '确认客户成员ID', `command_key` varchar(128) NOT NULL COMMENT '成员确认幂等键', `fingerprint` char(64) NOT NULL COMMENT '计费重及测量轮次摘要', `chargeable_weight_kg` decimal(18,4) NOT NULL COMMENT '客户确认计费重千克', `confirmed_at` datetime(3) NOT NULL COMMENT '客户确认时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_weight_confirmation_command` (`tenant_id`,`operator_id`,`command_key`), KEY `idx_weight_confirmation_inbound` (`tenant_id`,`inbound_id`,`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='客户计费重独立确认历史'; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; ALTER TABLE `fl_container_booking` ADD UNIQUE KEY `uk_container_booking_ocean_container` (`ocean_booking_id`,`container_no`); ALTER TABLE `fl_container_booking` ADD KEY `idx_container_booking_container_no` (`container_no`,`updated_at`,`id`); ALTER TABLE `fl_container_booking` ADD KEY `idx_container_booking_merge` (`record_status`,`merged_into_container_booking_id`); ALTER TABLE `fl_container_booking` ADD KEY `idx_container_booking_transit_summary` (`actual_sailing_at`,`actual_warehouse_arrival_at`,`ocean_booking_id`,`container_type`); USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; ALTER TABLE `fl_container_fee_detail` ADD KEY `idx_container_fee_review` (`tenant_id`,`review_status`,`source_status`); USE `baiyue_firstleg`; USE `baiyue_firstleg`; ALTER TABLE `fl_container_transport_history` ADD UNIQUE KEY `uk_container_transport_history_operation` (`container_booking_id`,`operator_id`,`operation_id`); USE `baiyue_firstleg`; ALTER TABLE `fl_customer_charge_rule` ADD KEY `idx_charge_rule_initialization` (`tenant_id`,`initialization_key`); USE `baiyue_firstleg`; USE `baiyue_firstleg`; CREATE TABLE `fl_customs_broker_submission` ( `id` bigint unsigned NOT NULL COMMENT '首次发送报关行批次ID', `customs_container_id` bigint unsigned NOT NULL COMMENT '所属整柜报关聚合ID', `loading_plan_id` bigint unsigned NOT NULL COMMENT '装柜计划ID快照', `batch_no` varchar(64) NOT NULL COMMENT '首次发送报关行批次号', `status` varchar(16) NOT NULL COMMENT '发送状态:SENT已发送', `source_version` int unsigned NOT NULL COMMENT '发送时整柜报关聚合版本', `source_snapshot_json` json NOT NULL COMMENT '发送时冻结资料版本与覆盖范围快照', `sent_by` bigint unsigned NOT NULL COMMENT '首次发送操作人ID', `sent_by_name` varchar(64) DEFAULT NULL COMMENT '首次发送操作人名称快照', `sent_at` datetime(3) NOT NULL COMMENT '首次发送时间', `version` int unsigned NOT NULL DEFAULT '1' 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_customs_broker_submission_container` (`customs_container_id`), UNIQUE KEY `uk_customs_broker_submission_batch` (`batch_no`), KEY `idx_customs_broker_submission_plan` (`loading_plan_id`,`sent_at`), CONSTRAINT `fk_customs_broker_submission_container` FOREIGN KEY (`customs_container_id`) REFERENCES `fl_customs_container` (`id`), CONSTRAINT `chk_customs_broker_submission_status` CHECK ((`status` = _utf8mb4'SENT')) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='冻结退税报关资料首次发送报关行批次事实'; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; CREATE TABLE `fl_customs_clearance_result` ( `id` bigint unsigned NOT NULL COMMENT '海关结果事实ID', `declaration_batch_id` bigint unsigned NOT NULL COMMENT '所属正式申报批次ID', `customs_container_id` bigint unsigned NOT NULL COMMENT '所属整柜报关聚合ID', `result_type` varchar(32) NOT NULL COMMENT '结果类型:INSPECTION/SUPPLEMENT_REQUIRED/RELEASED/DETAINED/OTHER', `result_status` varchar(16) NOT NULL DEFAULT 'OPEN' COMMENT '结果状态:OPEN/RESOLVED/CANCELLED', `customs_entry_no` varchar(64) DEFAULT NULL COMMENT '报关单号快照', `occurred_at` datetime(3) NOT NULL COMMENT '海关事实发生时间', `resolution` varchar(1000) DEFAULT NULL COMMENT '处理结果或异常说明', `evidence_file_id` bigint unsigned DEFAULT NULL COMMENT '结果凭证File文件ID', `recorded_by` bigint unsigned NOT NULL COMMENT '平台录入人', `recorded_by_name` varchar(64) DEFAULT NULL COMMENT '平台录入人名称快照', `recorded_at` datetime(3) NOT NULL COMMENT '平台录入时间', `previous_result_id` bigint unsigned DEFAULT 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 '结果更新时间', PRIMARY KEY (`id`), KEY `idx_customs_clearance_result_batch` (`declaration_batch_id`,`occurred_at`,`id`), KEY `idx_customs_clearance_result_container` (`customs_container_id`,`result_type`,`result_status`), CONSTRAINT `fk_customs_clearance_result_batch` FOREIGN KEY (`declaration_batch_id`) REFERENCES `fl_customs_declaration_batch` (`id`), CONSTRAINT `chk_customs_clearance_result_status` CHECK ((`result_status` in (_utf8mb4'OPEN',_utf8mb4'RESOLVED',_utf8mb4'CANCELLED'))), CONSTRAINT `chk_customs_clearance_result_type` CHECK ((`result_type` in (_utf8mb4'INSPECTION',_utf8mb4'SUPPLEMENT_REQUIRED',_utf8mb4'RELEASED',_utf8mb4'DETAINED',_utf8mb4'OTHER'))) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='正式申报后的海关结果不可变事实'; USE `baiyue_firstleg`; USE `baiyue_firstleg`; CREATE TABLE `fl_customs_completion_action_history` ( `id` bigint unsigned NOT NULL COMMENT '客户回执动作历史ID', `completion_document_id` bigint unsigned NOT NULL COMMENT '报关行回执当前版本逻辑根ID', `receipt_version` int unsigned NOT NULL COMMENT '动作对应的回执文件版本', `action` varchar(16) NOT NULL COMMENT '客户动作:CONFIRM确认、REJECT打回', `reason` varchar(500) DEFAULT NULL COMMENT '客户打回原因;确认动作为空', `operator_id` bigint unsigned NOT NULL COMMENT '客户操作人ID', `operator_name` varchar(64) DEFAULT NULL COMMENT '客户操作人名称快照', `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '客户动作时间', PRIMARY KEY (`id`), KEY `idx_customs_completion_action_history` (`completion_document_id`,`receipt_version`,`created_at`,`id`), CONSTRAINT `fk_customs_completion_action_history_document` FOREIGN KEY (`completion_document_id`) REFERENCES `fl_customs_completion_document` (`id`), CONSTRAINT `chk_customs_completion_action_history_action` CHECK ((`action` in (_utf8mb4'CONFIRM',_utf8mb4'REJECT'))) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='客户报关行回执确认与打回不可变历史'; USE `baiyue_firstleg`; ALTER TABLE `fl_customs_completion_document` ADD COLUMN `customer_confirm_status` varchar(20) NOT NULL DEFAULT 'PENDING' COMMENT '客户回执确认状态:PENDING/CONFIRMED/REJECTED'; ALTER TABLE `fl_customs_completion_document` ADD COLUMN `customer_confirmed_by` bigint unsigned DEFAULT NULL COMMENT '客户确认人ID'; ALTER TABLE `fl_customs_completion_document` ADD COLUMN `customer_confirmed_by_name` varchar(64) DEFAULT NULL COMMENT '客户确认人名称快照'; ALTER TABLE `fl_customs_completion_document` ADD COLUMN `customer_confirmed_at` datetime(3) DEFAULT NULL COMMENT '客户确认时间'; ALTER TABLE `fl_customs_completion_document` ADD COLUMN `customer_reject_reason` varchar(500) DEFAULT NULL COMMENT '客户打回原因'; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; CREATE TABLE `fl_customs_declaration_batch` ( `id` bigint unsigned NOT NULL COMMENT '正式申报批次ID', `customs_container_id` bigint unsigned NOT NULL COMMENT '所属整柜报关聚合ID', `loading_plan_id` bigint unsigned NOT NULL COMMENT '装柜计划ID快照', `batch_no` varchar(64) DEFAULT NULL COMMENT '平台正式申报批次号', `status` varchar(32) NOT NULL COMMENT '批次状态:READY/SUBMITTED/ACKNOWLEDGED/RESULT_PENDING/CLOSED/CANCELLED', `source_version` int unsigned NOT NULL COMMENT '创建时整柜报关聚合版本', `source_snapshot_json` json NOT NULL COMMENT '提交时资料、回执和确认版本快照', `customs_entry_no` varchar(64) DEFAULT NULL COMMENT '报关单号', `submitted_by` bigint unsigned DEFAULT NULL COMMENT '正式申报提交人', `submitted_by_name` varchar(64) DEFAULT NULL COMMENT '正式申报提交人名称快照', `submitted_at` datetime(3) DEFAULT NULL COMMENT '正式申报提交时间', `acknowledged_by` bigint unsigned DEFAULT NULL COMMENT '报关行确认受理人', `acknowledged_by_name` varchar(64) DEFAULT NULL COMMENT '报关行确认受理人名称快照', `acknowledged_at` datetime(3) DEFAULT NULL COMMENT '报关行确认受理时间', `remark` varchar(500) DEFAULT NULL COMMENT '批次说明', `version` int unsigned NOT NULL DEFAULT '0' 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_customs_declaration_batch_container` (`customs_container_id`,`id`), KEY `idx_customs_declaration_batch_plan` (`loading_plan_id`,`status`,`created_at`), CONSTRAINT `fk_customs_declaration_batch_container` FOREIGN KEY (`customs_container_id`) REFERENCES `fl_customs_container` (`id`), CONSTRAINT `chk_customs_declaration_batch_status` CHECK ((`status` in (_utf8mb4'READY',_utf8mb4'SUBMITTED',_utf8mb4'ACKNOWLEDGED',_utf8mb4'RESULT_PENDING',_utf8mb4'CLOSED',_utf8mb4'CANCELLED'))) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='整柜正式申报批次事实'; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; ALTER TABLE `fl_fee_item` ADD COLUMN `default_price` decimal(12,2) DEFAULT NULL COMMENT '默认价格CNY;仅选费带入,实际费用可修改'; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; ALTER TABLE `fl_inbound_measurement` ADD KEY `idx_measure_inbound_status_id` (`tenant_id`,`inbound_id`,`status`,`id`); USE `baiyue_firstleg`; ALTER TABLE `fl_inbound_measurement_item` ADD KEY `idx_measure_item_candidate` (`tenant_id`,`measurement_id`,`inbound_detail_id`); USE `baiyue_firstleg`; ALTER TABLE `fl_inbound_order` ADD KEY `idx_inbound_smart_loading` (`warehouse_id`,`process_status`,`channel_code`,`expected_arrival_at`,`id`); USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; ALTER TABLE `fl_inbound_split_item` ADD KEY `idx_inbound_split_candidate` (`tenant_id`,`parent_inbound_id`,`source_inbound_detail_id`); USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; ALTER TABLE `fl_loading_plan_item` ADD UNIQUE KEY `uk_loading_item_plan_assignment` (`loading_plan_id`,`active_assignment_key`); ALTER TABLE `fl_loading_plan_item` ADD KEY `idx_loading_item_candidate` (`account_id`,`inbound_id`,`inbound_detail_id`,`deleted`); ALTER TABLE `fl_loading_plan_item` ADD KEY `idx_loading_item_pallet` (`pallet_id`,`deleted`); USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; ALTER TABLE `fl_ocean_booking` ADD UNIQUE KEY `uk_ocean_booking_bill_of_lading` (`bill_of_lading_no`); USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; CREATE TABLE `fl_sailing` ( `id` bigint NOT NULL, `sailing_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, `template_id` bigint DEFAULT NULL, `channel_id` bigint NOT NULL, `channel_code_snapshot` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, `channel_name_snapshot` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, `warehouse_id` bigint NOT NULL, `warehouse_name_snapshot` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `departure_port_code` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, `destination_port_code` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, `vessel_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `voyage_no` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `etd_at` datetime(3) NOT NULL, `warehouse_cutoff_at` datetime(3) NOT NULL, `eta_at` datetime(3) DEFAULT NULL, `status` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'OPEN', `source_type` varchar(24) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'MANUAL', `generated_key` varchar(192) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `planned_capacity_cbm` decimal(14,3) DEFAULT NULL, `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `created_by` bigint NOT NULL, `created_by_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updated_by` bigint NOT NULL, `updated_by_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), `version` int NOT NULL DEFAULT '0', PRIMARY KEY (`id`), UNIQUE KEY `uk_fl_sailing_no` (`sailing_no`), UNIQUE KEY `uk_fl_sailing_generated_key` (`generated_key`), UNIQUE KEY `uk_fl_sailing_business` (`warehouse_id`,`channel_code_snapshot`,`departure_port_code`,`destination_port_code`,`etd_at`,`voyage_no`), KEY `idx_fl_sailing_calendar` (`etd_at`,`warehouse_id`,`channel_id`,`status`), KEY `idx_fl_sailing_route` (`departure_port_code`,`destination_port_code`), CONSTRAINT `ck_fl_sailing_status` CHECK ((`status` in (_utf8mb4'DRAFT',_utf8mb4'OPEN',_utf8mb4'CLOSED',_utf8mb4'DEPARTED',_utf8mb4'CANCELLED',_utf8mb4'COMPLETED'))) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; USE `baiyue_firstleg`; CREATE TABLE `fl_sailing_assignment` ( `id` bigint unsigned NOT NULL COMMENT '归班事实ID', `tenant_id` bigint unsigned NOT NULL COMMENT '客户隔离键', `sailing_id` bigint unsigned DEFAULT NULL COMMENT '船期实例ID,UNMATCHED为空', `origin_sailing_id` bigint unsigned DEFAULT NULL COMMENT '异常重排/取消前的原船期实例ID', `inbound_id` bigint unsigned DEFAULT NULL COMMENT '归班对象入库单ID', `inbound_code` varchar(64) DEFAULT NULL COMMENT '入仓码快照,仅用于展示', `receipt_batch_id` bigint unsigned DEFAULT NULL COMMENT '收货批次事实ID', `forecast_id` bigint unsigned DEFAULT NULL COMMENT '货量预报事实ID', `assignment_source` varchar(24) NOT NULL DEFAULT 'AUTO' COMMENT '归班来源:AUTO/MANUAL/ROLLOVER', `assignment_version` int unsigned NOT NULL COMMENT '同一对象的归班版本', `match_status` varchar(24) NOT NULL COMMENT 'FORECAST_MATCHED/RECEIVED/LATE/UNMATCHED/SUPERSEDED', `volume_cbm` decimal(18,4) DEFAULT NULL COMMENT '已收实测体积', `forecast_volume_cbm` decimal(18,4) DEFAULT NULL COMMENT '未收有效预计体积', `route_source` varchar(32) DEFAULT NULL COMMENT '航线来源:INBOUND_FACT/FORECAST_FACT/CHANNEL_DEFAULT', `volume_source` varchar(32) DEFAULT NULL COMMENT 'MEASURED_ACTUAL或预报来源', `rule_version` varchar(64) NOT NULL COMMENT '自动归班规则版本', `matched_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `superseded_at` datetime(3) DEFAULT NULL, `locked_at` datetime(3) DEFAULT NULL COMMENT '截止/订舱/关闭后冻结时间', `lock_reason` varchar(32) DEFAULT NULL COMMENT 'CUTOFF/BOOKING_CONFIRMED/CLOSED', `operator_id` bigint unsigned DEFAULT NULL, `reason` varchar(500) DEFAULT NULL, `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), PRIMARY KEY (`id`), KEY `idx_sailing_assignment_current` (`tenant_id`,`sailing_id`,`match_status`,`matched_at`,`id`), KEY `idx_sailing_assignment_origin` (`tenant_id`,`origin_sailing_id`,`match_status`,`id`), KEY `idx_sailing_assignment_receipt` (`tenant_id`,`receipt_batch_id`,`assignment_version`,`id`), KEY `idx_sailing_assignment_forecast` (`tenant_id`,`forecast_id`,`assignment_version`,`id`), KEY `idx_sailing_assignment_inbound` (`tenant_id`,`inbound_id`,`match_status`,`id`), CONSTRAINT `chk_sailing_assignment_source` CHECK ((`assignment_source` in (_utf8mb4'AUTO',_utf8mb4'MANUAL',_utf8mb4'ROLLOVER'))), CONSTRAINT `chk_sailing_assignment_status` CHECK ((`match_status` in (_utf8mb4'FORECAST_MATCHED',_utf8mb4'RECEIVED',_utf8mb4'LATE',_utf8mb4'UNMATCHED',_utf8mb4'SUPERSEDED'))) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='船期日历自动归班事实及不可变版本历史'; USE `baiyue_firstleg`; CREATE TABLE `fl_sailing_booking_link` ( `id` bigint unsigned NOT NULL COMMENT '船期-订舱关联ID', `tenant_id` bigint unsigned NOT NULL COMMENT '平台关联隔离键', `sailing_id` bigint unsigned NOT NULL COMMENT '计划船期实例ID', `ocean_booking_id` bigint unsigned NOT NULL COMMENT '海运订舱ID', `link_status` varchar(24) NOT NULL DEFAULT 'ACTIVE' COMMENT '关联状态:ACTIVE/REVOKED', `active_booking_guard` tinyint DEFAULT NULL COMMENT 'ACTIVE为1,REVOKED为空,用于唯一约束', `booking_status_snapshot` varchar(24) NOT NULL COMMENT '关联时订舱状态快照;只有RELEASED可建立', `warehouse_id` bigint unsigned DEFAULT NULL COMMENT '关联仓库快照', `channel_code` varchar(64) DEFAULT NULL COMMENT '关联渠道快照', `departure_port_code` varchar(32) DEFAULT NULL COMMENT '关联起运港快照', `destination_port_code` varchar(32) DEFAULT NULL COMMENT '关联目的港快照', `linked_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `revoked_at` datetime(3) DEFAULT NULL, `operator_id` bigint unsigned DEFAULT NULL, `operator_name` varchar(64) DEFAULT NULL, `reason` varchar(500) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `uk_sailing_booking_active` (`ocean_booking_id`,`active_booking_guard`), KEY `idx_sailing_booking_link` (`sailing_id`,`link_status`,`ocean_booking_id`), KEY `idx_sailing_booking_booking` (`ocean_booking_id`,`link_status`,`id`), CONSTRAINT `chk_sailing_booking_link_guard` CHECK ((((`link_status` = _utf8mb4'ACTIVE') and (`active_booking_guard` = 1)) or ((`link_status` = _utf8mb4'REVOKED') and (`active_booking_guard` is null)))), CONSTRAINT `chk_sailing_booking_link_status` CHECK ((`link_status` in (_utf8mb4'ACTIVE',_utf8mb4'REVOKED'))), CONSTRAINT `chk_sailing_booking_released` CHECK ((`booking_status_snapshot` = _utf8mb4'RELEASED')) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='船期计划与已放舱订舱的最小关联及历史'; USE `baiyue_firstleg`; CREATE TABLE `fl_sailing_channel` ( `id` bigint NOT NULL, `channel_code` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, `channel_name` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, `source_type` varchar(24) COLLATE utf8mb4_unicode_ci NOT NULL, `mapped_channel_code` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `default_departure_port_code` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `default_destination_port_code` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `default_cutoff_days` tinyint NOT NULL DEFAULT '3', `status` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'ACTIVE', `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `created_by` bigint NOT NULL, `created_by_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updated_by` bigint NOT NULL, `updated_by_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), `version` int NOT NULL DEFAULT '0', PRIMARY KEY (`id`), UNIQUE KEY `uk_fl_sailing_channel_code` (`channel_code`), KEY `idx_fl_sailing_channel_status` (`status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; USE `baiyue_firstleg`; CREATE TABLE `fl_sailing_history` ( `id` bigint NOT NULL, `sailing_id` bigint NOT NULL, `action` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, `from_status` varchar(16) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `to_status` varchar(16) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `reason` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `operator_id` bigint DEFAULT NULL, `operator_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), PRIMARY KEY (`id`), KEY `idx_fl_sailing_history_sailing` (`sailing_id`,`created_at`,`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; USE `baiyue_firstleg`; CREATE TABLE `fl_sailing_inbound_volume_forecast` ( `id` bigint unsigned NOT NULL COMMENT '货量预报事实ID(forecastId)', `tenant_id` bigint unsigned NOT NULL COMMENT '客户隔离键,继承入库事实', `forecast_key` varchar(64) NOT NULL COMMENT '同一未收货对象的不可变业务键', `fact_version` int unsigned NOT NULL DEFAULT '1' COMMENT '预报修订版本', `inbound_id` bigint unsigned NOT NULL COMMENT '入库单ID', `receiving_warehouse_id` bigint unsigned NOT NULL COMMENT '预计收货仓ID', `channel_code` varchar(64) DEFAULT NULL COMMENT '预计渠道编码快照', `channel_name` varchar(128) DEFAULT NULL COMMENT '预计渠道名称快照', `departure_port_code` varchar(32) DEFAULT NULL COMMENT '预计起运港编码快照', `destination_port_code` varchar(32) DEFAULT NULL COMMENT '预计目的港编码快照', `expected_arrival_at` datetime(3) NOT NULL COMMENT '预计到仓时间', `forecast_volume_cbm` decimal(18,4) NOT NULL COMMENT '未收货预计体积m3,不得使用申报体积代替', `source_type` varchar(32) NOT NULL COMMENT '预报来源,例如OPERATIONS/UPSTREAM_MEASUREMENT;不得使用客户申报体积冒充预报', `fact_status` varchar(24) NOT NULL DEFAULT 'VALID' COMMENT '事实状态:VALID/SUPERSEDED/VOIDED/CONSUMED', `effective_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '本版本生效时间', `created_by` bigint unsigned DEFAULT NULL COMMENT '写入人或系统主体', `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_sailing_forecast_version` (`tenant_id`,`forecast_key`,`fact_version`), KEY `idx_sailing_forecast_current` (`tenant_id`,`forecast_key`,`fact_status`,`fact_version`), KEY `idx_sailing_forecast_match` (`tenant_id`,`receiving_warehouse_id`,`channel_code`,`expected_arrival_at`,`id`), KEY `idx_sailing_forecast_inbound` (`tenant_id`,`inbound_id`,`expected_arrival_at`,`id`), CONSTRAINT `chk_sailing_forecast_status` CHECK ((`fact_status` in (_utf8mb4'VALID',_utf8mb4'SUPERSEDED',_utf8mb4'VOIDED',_utf8mb4'CONSUMED'))), CONSTRAINT `chk_sailing_forecast_volume` CHECK ((`forecast_volume_cbm` > 0)) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='船期日历未收货量预报事实及版本历史'; USE `baiyue_firstleg`; CREATE TABLE `fl_sailing_receipt_batch_fact` ( `id` bigint unsigned NOT NULL COMMENT '稳定收货批次事实ID(receiptBatchId)', `tenant_id` bigint unsigned NOT NULL COMMENT '客户隔离键,继承入库事实', `receipt_batch_key` varchar(64) NOT NULL COMMENT '同一物理收货批次的不可变业务键', `fact_version` int unsigned NOT NULL DEFAULT '1' COMMENT '同一批次复测/冲正版本', `inbound_id` bigint unsigned NOT NULL COMMENT '入库单ID', `measurement_id` bigint unsigned DEFAULT NULL COMMENT '最终审核测量批次ID', `receiving_warehouse_id` bigint unsigned NOT NULL COMMENT '实际收货仓ID', `channel_code` varchar(64) DEFAULT NULL COMMENT '收货渠道编码快照', `channel_name` varchar(128) DEFAULT NULL COMMENT '收货渠道名称快照', `departure_port_code` varchar(32) DEFAULT NULL COMMENT '起运港编码快照', `destination_port_code` varchar(32) DEFAULT NULL COMMENT '目的港编码快照', `received_at` datetime(3) NOT NULL COMMENT '实际收货完成时间,不使用入库单inbounded_at替代', `actual_volume_cbm` decimal(18,4) NOT NULL COMMENT '最终审核实测体积m3', `fact_status` varchar(24) NOT NULL DEFAULT 'APPROVED' COMMENT '事实状态:APPROVED/REVERSED/VOIDED/SUPERSEDED', `reversal_of_fact_id` bigint unsigned DEFAULT NULL COMMENT '冲正所替代的事实ID', `source_type` varchar(32) NOT NULL DEFAULT 'FIRSTLEG_RECEIPT' COMMENT '事实来源', `created_by` bigint unsigned DEFAULT NULL COMMENT '写入人或系统主体', `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_sailing_receipt_batch_version` (`tenant_id`,`receipt_batch_key`,`fact_version`), KEY `idx_sailing_receipt_batch_current` (`tenant_id`,`receipt_batch_key`,`fact_status`,`fact_version`), KEY `idx_sailing_receipt_match` (`tenant_id`,`receiving_warehouse_id`,`channel_code`,`received_at`,`id`), KEY `idx_sailing_receipt_inbound` (`tenant_id`,`inbound_id`,`received_at`,`id`), CONSTRAINT `chk_sailing_receipt_status` CHECK ((`fact_status` in (_utf8mb4'APPROVED',_utf8mb4'REVERSED',_utf8mb4'VOIDED',_utf8mb4'SUPERSEDED'))), CONSTRAINT `chk_sailing_receipt_volume` CHECK ((`actual_volume_cbm` > 0)) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='船期日历稳定收货批次实测事实及版本历史'; USE `baiyue_firstleg`; CREATE TABLE `fl_sailing_template` ( `id` bigint NOT NULL, `template_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, `template_name` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, `channel_id` bigint NOT NULL, `channel_code_snapshot` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, `channel_name_snapshot` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL, `warehouse_id` bigint NOT NULL, `warehouse_name_snapshot` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `departure_port_code` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, `destination_port_code` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, `weekday` tinyint NOT NULL, `weekday_mask` tinyint NOT NULL DEFAULT '1', `etd_local_time` time NOT NULL, `cutoff_days` tinyint NOT NULL DEFAULT '3', `cutoff_local_time` time NOT NULL DEFAULT '18:00:00', `valid_from` date NOT NULL, `valid_to` date DEFAULT NULL, `voyage_rule` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `vessel_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `status` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'ACTIVE', `remark` varchar(1000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `created_by` bigint NOT NULL, `created_by_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `created_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updated_by` bigint NOT NULL, `updated_by_name` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `updated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), `version` int NOT NULL DEFAULT '0', PRIMARY KEY (`id`), UNIQUE KEY `uk_fl_sailing_template_no` (`template_no`), KEY `idx_fl_sailing_template_filter` (`warehouse_id`,`channel_id`,`status`,`weekday`), CONSTRAINT `ck_fl_sailing_template_cutoff_days` CHECK ((`cutoff_days` between 0 and 30)), CONSTRAINT `ck_fl_sailing_template_weekday` CHECK ((`weekday` between 1 and 7)) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; ALTER TABLE `fl_truck_appointment` ADD UNIQUE KEY `uk_truck_active_ocean_booking` (`active_ocean_booking_id`); ALTER TABLE `fl_truck_appointment` ADD KEY `idx_truck_appointment_ocean` (`ocean_booking_id`); USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`; USE `baiyue_firstleg`;