-- TEST ONLY. Rebuild the explicitly authorized appointment header and item tables. -- The new command-history table MUST NOT already exist; check this before executing any DROP. -- If it exists, stop and inspect the prior outcome. Do not clear command history or blindly retry. -- Requires explicit approval; never run against production or as automatic startup SQL. -- Caller must verify the TEST connection before executing. USE baiyue_lastleg; DROP TABLE ll_inbound_fba_appointment_item; DROP TABLE ll_inbound_fba_appointment; CREATE TABLE ll_inbound_fba_appointment ( id BIGINT NOT NULL COMMENT '主键ID', appointment_no VARCHAR(64) NOT NULL COMMENT '系统预约业务单号,不是外部约号', confirmation_no VARCHAR(128) NULL COMMENT '收货方正式外部确认号', planned_date DATE NULL COMMENT '计划当地日期,可只有日期而无时段', planned_at DATETIME(3) NULL COMMENT '计划开始当地时间,待定可空', planned_end_at DATETIME(3) NULL COMMENT '计划结束当地时间', appointment_at DATETIME(3) NULL COMMENT '对方确认开始当地时间', appointment_end_at DATETIME(3) NULL COMMENT '对方确认结束当地时间', appointment_start_utc DATETIME(3) NULL COMMENT '确认开始UTC时间点', appointment_end_utc DATETIME(3) NULL COMMENT '确认结束UTC时间点', timezone VARCHAR(64) NULL COMMENT '目的仓权威IANA时区,未维护不得确认', origin_warehouse_id VARCHAR(64) NOT NULL COMMENT '实际起运仓', version INT NOT NULL DEFAULT 0 COMMENT '并发版本', appointment_status VARCHAR(32) NOT NULL DEFAULT 'PENDING' COMMENT 'PENDING安排/SUCCESS对方确认/FAILED/CANCELLED', appointment_remark VARCHAR(1000) NULL COMMENT '备注或取消原因', fba_warehouse_code VARCHAR(128) NOT NULL COMMENT 'FBA目的仓编码', selected_count INT NOT NULL DEFAULT 0 COMMENT '真实货源票数', created_by VARCHAR(128) NOT NULL COMMENT '登录操作人', created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建UTC时间', updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '更新UTC时间', PRIMARY KEY (id), UNIQUE KEY uk_ll_fba_appointment_no (appointment_no), UNIQUE KEY uk_ll_fba_external_confirmation (fba_warehouse_code,confirmation_no), KEY idx_ll_fba_appointment_list (appointment_at,appointment_status,fba_warehouse_code), KEY idx_ll_fba_appointment_planned (planned_at,appointment_status) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='FBA预约安排与正式确认唯一主记录'; CREATE TABLE ll_inbound_fba_appointment_item ( id BIGINT NOT NULL COMMENT '记录主键', appointment_id BIGINT NOT NULL COMMENT '预约主记录标识', source_key VARCHAR(160) NOT NULL COMMENT '稳定ORDER或BOOKING货源键', source_version VARCHAR(160) NULL COMMENT '保存时核实的来源版本', customer_id VARCHAR(128) NOT NULL COMMENT '本票所属客户', order_id BIGINT NULL COMMENT '尚未形成尾程订单时为空', inbound_code VARCHAR(128) NULL COMMENT '真实入仓码,不伪造', fba_warehouse_code VARCHAR(128) NOT NULL COMMENT '目的FBA仓编码', package_count INT NULL COMMENT '所选整票预报箱数,未知保持空', active TINYINT(1) NOT NULL DEFAULT 1 COMMENT '取消或失败后释放货源占用', active_source_key VARCHAR(160) GENERATED ALWAYS AS (CASE WHEN active=1 THEN source_key ELSE NULL END) STORED COMMENT '有效货源唯一占用键', active_order_id BIGINT GENERATED ALWAYS AS (CASE WHEN active=1 THEN order_id ELSE NULL END) STORED COMMENT '有效订单唯一占用键', created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建UTC时间', PRIMARY KEY (id), UNIQUE KEY uk_ll_fba_item_source (appointment_id,source_key), UNIQUE KEY uk_ll_fba_active_source (active_source_key), UNIQUE KEY uk_ll_fba_active_order (active_order_id), KEY idx_ll_fba_item_source_lookup (source_key,customer_id), KEY idx_ll_fba_item_customer_order (customer_id,order_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='入仓前后共用的预约真实货源'; CREATE TABLE ll_fba_appointment_command ( command_key VARCHAR(128) NOT NULL COMMENT '持久化幂等键', request_hash CHAR(64) NOT NULL COMMENT '操作、操作者和请求摘要', operation VARCHAR(96) NOT NULL COMMENT '操作类型及目标业务号', operator_id VARCHAR(128) NOT NULL COMMENT '登录操作人', appointment_no VARCHAR(64) NULL COMMENT '系统预约业务单号', response_json LONGTEXT NULL 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='预约命令与变更历史';