-- ============================================
-- 物流追踪系统数据库表
-- ============================================

-- 1. 物流订单表（主表）
CREATE TABLE IF NOT EXISTS `zyt_express_tracking` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `order_id` int(11) NOT NULL DEFAULT '0' COMMENT '关联订单ID（prescription_order表）',
    `order_type` varchar(50) NOT NULL DEFAULT 'prescription' COMMENT '订单类型',
    `tracking_number` varchar(80) NOT NULL DEFAULT '' COMMENT '快递单号',
    `express_company` varchar(50) NOT NULL DEFAULT 'auto' COMMENT '快递公司编码',
    `express_company_name` varchar(100) NOT NULL DEFAULT '' COMMENT '快递公司名称',
    `recipient_phone` varchar(20) NOT NULL DEFAULT '' COMMENT '收件人手机号',
    `recipient_name` varchar(100) NOT NULL DEFAULT '' COMMENT '收件人姓名',
    `recipient_address` varchar(500) NOT NULL DEFAULT '' COMMENT '收件地址',
    
    -- 物流状态
    `current_state` varchar(10) NOT NULL DEFAULT '0' COMMENT '当前物流状态：0在途,1揽收,2疑难,3签收,4退签,5派件,6退回,7转投,8清关,10待清关,11清关中,12已清关,13清关异常,14拒签',
    `current_state_text` varchar(50) NOT NULL DEFAULT '' COMMENT '当前状态文本',
    `is_signed` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否已签收：0否，1是',
    `sign_time` int(11) NOT NULL DEFAULT '0' COMMENT '签收时间',
    
    -- 最新轨迹
    `latest_trace_time` varchar(50) NOT NULL DEFAULT '' COMMENT '最新轨迹时间',
    `latest_trace_context` varchar(500) NOT NULL DEFAULT '' COMMENT '最新轨迹内容',
    `latest_location` varchar(200) NOT NULL DEFAULT '' COMMENT '最新位置',
    
    -- 查询信息
    `last_query_time` int(11) NOT NULL DEFAULT '0' COMMENT '最后查询时间',
    `query_count` int(11) NOT NULL DEFAULT '0' COMMENT '查询次数',
    `data_source` varchar(50) NOT NULL DEFAULT '' COMMENT '数据来源：kuaidi100/official',
    
    -- 预计信息
    `estimated_arrival_time` varchar(50) NOT NULL DEFAULT '' COMMENT '预计到达时间',
    `total_time` varchar(50) NOT NULL DEFAULT '' COMMENT '总耗时',
    `remain_time` varchar(50) NOT NULL DEFAULT '' COMMENT '剩余时间',
    
    -- 自动更新控制
    `auto_update` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否自动更新：0否，1是',
    `update_interval` int(11) NOT NULL DEFAULT '1800' COMMENT '更新间隔（秒），默认30分钟',
    `next_update_time` int(11) NOT NULL DEFAULT '0' COMMENT '下次更新时间',
    
    -- 通知设置
    `notify_on_sign` tinyint(1) NOT NULL DEFAULT '1' COMMENT '签收时通知：0否，1是',
    `notify_on_problem` tinyint(1) NOT NULL DEFAULT '1' COMMENT '异常时通知：0否，1是',
    `notified_states` varchar(500) NOT NULL DEFAULT '' COMMENT '已通知的状态（JSON数组）',
    
    -- 扩展信息
    `route_info` text COMMENT '路由信息（JSON）',
    `extra_data` text COMMENT '扩展数据（JSON）',
    
    -- 时间戳
    `create_time` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
    `update_time` int(11) NOT NULL DEFAULT '0' COMMENT '更新时间',
    `delete_time` int(11) DEFAULT NULL COMMENT '删除时间',
    
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_tracking_number` (`tracking_number`),
    KEY `idx_order_id` (`order_id`),
    KEY `idx_state` (`current_state`),
    KEY `idx_auto_update` (`auto_update`, `next_update_time`),
    KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='物流追踪主表';

-- 2. 物流轨迹明细表
CREATE TABLE IF NOT EXISTS `zyt_express_trace` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `tracking_id` int(11) NOT NULL DEFAULT '0' COMMENT '关联tracking表ID',
    `tracking_number` varchar(80) NOT NULL DEFAULT '' COMMENT '快递单号（冗余，便于查询）',
    
    -- 轨迹信息
    `trace_time` varchar(50) NOT NULL DEFAULT '' COMMENT '轨迹时间',
    `trace_time_stamp` int(11) NOT NULL DEFAULT '0' COMMENT '轨迹时间戳',
    `trace_context` varchar(1000) NOT NULL DEFAULT '' COMMENT '轨迹内容',
    
    -- 状态信息
    `status` varchar(50) NOT NULL DEFAULT '' COMMENT '物流状态名称',
    `status_code` varchar(10) NOT NULL DEFAULT '' COMMENT '物流状态码',
    
    -- 位置信息
    `location` varchar(200) NOT NULL DEFAULT '' COMMENT '当前位置',
    `area_code` varchar(50) NOT NULL DEFAULT '' COMMENT '行政区域编码',
    `area_name` varchar(200) NOT NULL DEFAULT '' COMMENT '行政区域名称',
    `area_center` varchar(100) NOT NULL DEFAULT '' COMMENT '区域中心坐标',
    
    -- 扩展信息
    `extra_data` text COMMENT '扩展数据（JSON）',
    
    -- 时间戳
    `create_time` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
    
    PRIMARY KEY (`id`),
    KEY `idx_tracking_id` (`tracking_id`),
    KEY `idx_tracking_number` (`tracking_number`),
    KEY `idx_trace_time_stamp` (`trace_time_stamp`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='物流轨迹明细表';

-- 3. 物流状态变更记录表
CREATE TABLE IF NOT EXISTS `zyt_express_state_log` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `tracking_id` int(11) NOT NULL DEFAULT '0' COMMENT '关联tracking表ID',
    `tracking_number` varchar(80) NOT NULL DEFAULT '' COMMENT '快递单号',
    
    -- 状态变更
    `old_state` varchar(10) NOT NULL DEFAULT '' COMMENT '旧状态',
    `old_state_text` varchar(50) NOT NULL DEFAULT '' COMMENT '旧状态文本',
    `new_state` varchar(10) NOT NULL DEFAULT '' COMMENT '新状态',
    `new_state_text` varchar(50) NOT NULL DEFAULT '' COMMENT '新状态文本',
    
    -- 变更信息
    `change_time` int(11) NOT NULL DEFAULT '0' COMMENT '变更时间',
    `change_reason` varchar(500) NOT NULL DEFAULT '' COMMENT '变更原因（最新轨迹内容）',
    
    -- 通知信息
    `is_notified` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否已通知：0否，1是',
    `notify_time` int(11) NOT NULL DEFAULT '0' COMMENT '通知时间',
    `notify_result` varchar(500) NOT NULL DEFAULT '' COMMENT '通知结果',
    
    -- 时间戳
    `create_time` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
    
    PRIMARY KEY (`id`),
    KEY `idx_tracking_id` (`tracking_id`),
    KEY `idx_tracking_number` (`tracking_number`),
    KEY `idx_change_time` (`change_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='物流状态变更记录表';

-- 4. 物流查询日志表
CREATE TABLE IF NOT EXISTS `zyt_express_query_log` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `tracking_number` varchar(80) NOT NULL DEFAULT '' COMMENT '快递单号',
    `express_company` varchar(50) NOT NULL DEFAULT '' COMMENT '快递公司编码',
    
    -- 查询信息
    `query_type` varchar(50) NOT NULL DEFAULT 'manual' COMMENT '查询类型：manual手动，auto自动',
    `query_source` varchar(50) NOT NULL DEFAULT '' COMMENT '查询来源：kuaidi100/official',
    `query_time` int(11) NOT NULL DEFAULT '0' COMMENT '查询时间',
    
    -- 查询结果
    `is_success` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否成功：0否，1是',
    `error_code` varchar(50) NOT NULL DEFAULT '' COMMENT '错误码',
    `error_message` varchar(500) NOT NULL DEFAULT '' COMMENT '错误信息',
    
    -- 响应信息
    `response_time` int(11) NOT NULL DEFAULT '0' COMMENT '响应时间（毫秒）',
    `trace_count` int(11) NOT NULL DEFAULT '0' COMMENT '轨迹数量',
    
    -- 时间戳
    `create_time` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
    
    PRIMARY KEY (`id`),
    KEY `idx_tracking_number` (`tracking_number`),
    KEY `idx_query_time` (`query_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='物流查询日志表';
