-- ===============================================
-- 运单服务数据库初始化脚本
-- 数据库: erp_db
-- ===============================================

-- ----------------------------
-- 1. 运单表 waybills
-- ----------------------------
CREATE TABLE IF NOT EXISTS `waybills` (
    `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `order_id` BIGINT NOT NULL COMMENT '订单ID',
    `express_code` VARCHAR(50) NOT NULL COMMENT '快递公司编码',
    `waybill_no` VARCHAR(100) NOT NULL COMMENT '运单号',
    `print_content` TEXT COMMENT '电子面单打印内容(JSON)',
    `status` VARCHAR(20) NOT NULL DEFAULT 'unused' COMMENT '状态: unused-未使用, used-已使用, cancelled-已取消, void-已作废',
    `used_at` DATETIME COMMENT '使用时间',
    `cancelled_at` DATETIME COMMENT '取消时间',
    `cancel_reason` VARCHAR(500) COMMENT '取消原因',
    `voided_at` DATETIME COMMENT '作废时间',
    `void_reason` VARCHAR(500) COMMENT '作废原因',
    `tenant_id` BIGINT COMMENT '租户ID',
    `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted_at` DATETIME COMMENT '删除时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_waybill_no` (`waybill_no`),
    KEY `idx_order_id` (`order_id`),
    KEY `idx_express_code` (`express_code`),
    KEY `idx_status` (`status`),
    KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='运单表';

-- ----------------------------
-- 2. 运单状态跟踪表 waybill_status
-- ----------------------------
CREATE TABLE IF NOT EXISTS `waybill_status` (
    `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `waybill_no` VARCHAR(100) NOT NULL COMMENT '运单号',
    `carrier` VARCHAR(50) COMMENT '快递公司编码',
    `status` VARCHAR(30) COMMENT '状态',
    `location` VARCHAR(255) COMMENT '当前位置',
    `description` VARCHAR(500) COMMENT '状态描述',
    `last_trace_time` DATETIME COMMENT '最后轨迹时间',
    `signed_time` DATETIME COMMENT '签收时间',
    `receiver_name` VARCHAR(100) COMMENT '签收人姓名',
    `receiver_phone` VARCHAR(20) COMMENT '签收人电话',
    `tenant_id` BIGINT COMMENT '租户ID',
    `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_waybill_no` (`waybill_no`),
    KEY `idx_carrier` (`carrier`),
    KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='运单状态跟踪表';

-- ----------------------------
-- 3. 物流轨迹明细表 logistics_traces
-- ----------------------------
CREATE TABLE IF NOT EXISTS `logistics_traces` (
    `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `waybill_no` VARCHAR(100) NOT NULL COMMENT '运单号',
    `carrier` VARCHAR(50) COMMENT '快递公司编码',
    `status` VARCHAR(50) COMMENT '状态',
    `location` VARCHAR(255) COMMENT '地点',
    `description` VARCHAR(500) COMMENT '轨迹描述',
    `trace_time` DATETIME COMMENT '轨迹时间',
    `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    PRIMARY KEY (`id`),
    KEY `idx_waybill_no` (`waybill_no`),
    KEY `idx_trace_time` (`trace_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='物流轨迹明细表';

-- ----------------------------
-- 4. 打印日志表 print_logs
-- ----------------------------
CREATE TABLE IF NOT EXISTS `print_logs` (
    `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `order_id` BIGINT NOT NULL COMMENT '订单ID',
    `action` VARCHAR(20) NOT NULL COMMENT '操作类型: print-打印, reprint-补打, change-换单',
    `operator_id` BIGINT COMMENT '操作人ID',
    `old_waybill_no` VARCHAR(100) COMMENT '原运单号',
    `new_waybill_no` VARCHAR(100) COMMENT '新运单号',
    `reason` VARCHAR(500) COMMENT '原因',
    `tenant_id` BIGINT COMMENT '租户ID',
    `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    PRIMARY KEY (`id`),
    KEY `idx_order_id` (`order_id`),
    KEY `idx_action` (`action`),
    KEY `idx_operator_id` (`operator_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='打印日志表';

-- ===============================================
-- 运单状态说明
-- ===============================================
-- waybills.status:
--   unused    - 未使用（面单申请后默认状态）
--   used     - 已使用（扫描出库等操作后）
--   cancelled - 已取消（向快递公司取消成功）
--   void     - 已作废（系统内部作废）
--
-- waybill_status.status:
--   pending          - 待揽收
--   in_transit       - 运输中
--   out_for_delivery - 派送中
--   signed           - 已签收
--   rejected         - 拒收
--   returned         - 退回
--   exception        - 异常
-- ===============================================
