-- ===============================================
-- 对账管理模块数据库表结构
-- V1__reconciliation_tables.sql
-- ===============================================

-- 对账单主表
CREATE TABLE `reconciliation_bill` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `bill_no` varchar(50) NOT NULL COMMENT '对账单号',
  `batch_no` varchar(50) DEFAULT NULL COMMENT '对账批次号',
  `platform` varchar(50) DEFAULT NULL COMMENT '平台编码',
  `shop_id` bigint DEFAULT NULL COMMENT '店铺ID',
  `shop_name` varchar(100) DEFAULT NULL COMMENT '店铺名称',
  `period_type` varchar(20) DEFAULT NULL COMMENT '对账周期类型: daily-日对账, weekly-周对账, monthly-月对账',
  `period_start` datetime DEFAULT NULL COMMENT '对账周期开始日期',
  `period_end` datetime DEFAULT NULL COMMENT '对账周期结束日期',
  `platform_order_count` int DEFAULT NULL COMMENT '平台账单总订单数',
  `platform_total_amount` decimal(15,2) DEFAULT NULL COMMENT '平台账单总金额',
  `internal_order_count` int DEFAULT NULL COMMENT '内部订单总数量',
  `internal_total_amount` decimal(15,2) DEFAULT NULL COMMENT '内部订单总金额',
  `difference_amount` decimal(15,2) DEFAULT NULL COMMENT '差异金额',
  `matched_count` int DEFAULT NULL COMMENT '匹配成功数量',
  `matched_amount` decimal(15,2) DEFAULT NULL COMMENT '匹配成功金额',
  `difference_count` int DEFAULT NULL COMMENT '差异订单数量',
  `reconciliation_status` varchar(20) DEFAULT NULL COMMENT '对账状态: pending-待对账, processing-对账中, completed-已完成, failed-对账失败',
  `result_status` varchar(20) DEFAULT NULL COMMENT '对账结果: consistent-一致, inconsistent-有差异, partial-部分一致',
  `reconciliation_start_time` datetime DEFAULT NULL COMMENT '对账开始时间',
  `reconciliation_end_time` datetime DEFAULT NULL COMMENT '对账结束时间',
  `confirm_time` datetime DEFAULT NULL COMMENT '确认时间',
  `confirm_user_id` bigint DEFAULT NULL COMMENT '确认人ID',
  `confirm_user_name` varchar(50) DEFAULT NULL COMMENT '确认人姓名',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  `tenant_id` bigint DEFAULT NULL COMMENT '租户ID',
  `created_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted_at` datetime DEFAULT NULL COMMENT '删除时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_bill_no` (`bill_no`),
  KEY `idx_platform_shop` (`platform`, `shop_id`),
  KEY `idx_period` (`period_start`, `period_end`),
  KEY `idx_status` (`reconciliation_status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='对账单主表';

-- 对账差异记录表
CREATE TABLE `reconciliation_difference` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `bill_id` bigint NOT NULL COMMENT '对账单ID',
  `bill_no` varchar(50) DEFAULT NULL COMMENT '对账单号',
  `difference_type` varchar(30) DEFAULT NULL COMMENT '差异类型: amount_difference-金额差异, missing_platform-平台缺失, missing_internal-内部缺失, status_mismatch-状态不匹配',
  `platform_order_sn` varchar(100) DEFAULT NULL COMMENT '平台订单号',
  `internal_order_id` bigint DEFAULT NULL COMMENT '内部订单ID',
  `internal_order_sn` varchar(50) DEFAULT NULL COMMENT '内部订单号',
  `platform_order_amount` decimal(15,2) DEFAULT NULL COMMENT '平台订单金额',
  `internal_order_amount` decimal(15,2) DEFAULT NULL COMMENT '内部订单金额',
  `difference_amount` decimal(15,2) DEFAULT NULL COMMENT '差异金额',
  `platform_order_status` varchar(30) DEFAULT NULL COMMENT '平台订单状态',
  `internal_order_status` varchar(30) DEFAULT NULL COMMENT '内部订单状态',
  `difference_reason` varchar(500) DEFAULT NULL COMMENT '差异原因',
  `handle_status` varchar(20) DEFAULT NULL COMMENT '处理状态: pending-待处理, investigating-调查中, resolved-已解决, write_off-已核销, write_back-已冲正',
  `handle_method` varchar(50) DEFAULT NULL COMMENT '处理方式',
  `handle_user_id` bigint DEFAULT NULL COMMENT '处理人ID',
  `handle_user_name` varchar(50) DEFAULT NULL COMMENT '处理人姓名',
  `handle_time` datetime DEFAULT NULL COMMENT '处理时间',
  `handle_remark` varchar(500) DEFAULT NULL COMMENT '处理备注',
  `related_bill_id` bigint DEFAULT NULL COMMENT '关联对账单ID',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  `tenant_id` bigint DEFAULT NULL COMMENT '租户ID',
  `created_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted_at` datetime DEFAULT NULL COMMENT '删除时间',
  PRIMARY KEY (`id`),
  KEY `idx_bill_id` (`bill_id`),
  KEY `idx_platform_order_sn` (`platform_order_sn`),
  KEY `idx_internal_order_id` (`internal_order_id`),
  KEY `idx_handle_status` (`handle_status`),
  KEY `idx_created_at` (`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='对账差异记录表';

-- 对账任务表
CREATE TABLE `reconciliation_task` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `task_no` varchar(50) NOT NULL COMMENT '任务编号',
  `task_type` varchar(20) DEFAULT NULL COMMENT '任务类型: auto-自动对账, manual-手动对账, scheduled-定时对账',
  `bill_id` bigint DEFAULT NULL COMMENT '关联对账单ID',
  `bill_no` varchar(50) DEFAULT NULL COMMENT '对账单号',
  `platform` varchar(50) DEFAULT NULL COMMENT '平台编码',
  `shop_id` bigint DEFAULT NULL COMMENT '店铺ID',
  `shop_name` varchar(100) DEFAULT NULL COMMENT '店铺名称',
  `task_status` varchar(20) DEFAULT NULL COMMENT '任务状态: pending-待执行, running-执行中, completed-已完成, failed-失败, cancelled-已取消',
  `progress` int DEFAULT 0 COMMENT '执行进度（0-100）',
  `current_step` varchar(100) DEFAULT NULL COMMENT '执行步骤',
  `start_time` datetime DEFAULT NULL COMMENT '任务开始时间',
  `end_time` datetime DEFAULT NULL COMMENT '任务结束时间',
  `duration_seconds` int DEFAULT NULL COMMENT '执行耗时（秒）',
  `result_message` varchar(500) DEFAULT NULL COMMENT '执行结果消息',
  `error_detail` text DEFAULT NULL COMMENT '错误详情',
  `trigger_user_id` bigint DEFAULT NULL COMMENT '触发人ID',
  `trigger_user_name` varchar(50) DEFAULT NULL COMMENT '触发人姓名',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  `tenant_id` bigint DEFAULT NULL COMMENT '租户ID',
  `created_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted_at` datetime DEFAULT NULL COMMENT '删除时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_task_no` (`task_no`),
  KEY `idx_bill_no` (`bill_no`),
  KEY `idx_task_status` (`task_status`),
  KEY `idx_platform_shop` (`platform`, `shop_id`),
  KEY `idx_created_at` (`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='对账任务表';

-- 订单对账记录表
CREATE TABLE `order_reconciliation_record` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `bill_id` bigint NOT NULL COMMENT '对账单ID',
  `bill_no` varchar(50) DEFAULT NULL COMMENT '对账单号',
  `platform_order_sn` varchar(100) DEFAULT NULL COMMENT '平台订单号',
  `order_id` bigint DEFAULT NULL COMMENT '内部订单ID',
  `order_short_id` varchar(50) DEFAULT NULL COMMENT '内部订单号',
  `platform` varchar(50) DEFAULT NULL COMMENT '平台编码',
  `shop_id` bigint DEFAULT NULL COMMENT '店铺ID',
  `shop_name` varchar(100) DEFAULT NULL COMMENT '店铺名称',
  `platform_order_amount` decimal(15,2) DEFAULT NULL COMMENT '平台订单金额',
  `internal_order_amount` decimal(15,2) DEFAULT NULL COMMENT '内部订单金额',
  `difference_amount` decimal(15,2) DEFAULT NULL COMMENT '差异金额',
  `check_status` varchar(20) DEFAULT NULL COMMENT '核对状态: matched-已匹配, unmatched-未匹配, difference-有差异, missing-缺失',
  `check_details` text DEFAULT NULL COMMENT '核对详情（JSON格式）',
  `check_time` datetime DEFAULT NULL COMMENT '核对时间',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  `tenant_id` bigint DEFAULT NULL COMMENT '租户ID',
  `created_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted_at` datetime DEFAULT NULL COMMENT '删除时间',
  PRIMARY KEY (`id`),
  KEY `idx_bill_id` (`bill_id`),
  KEY `idx_platform_order_sn` (`platform_order_sn`),
  KEY `idx_order_id` (`order_id`),
  KEY `idx_check_status` (`check_status`),
  KEY `idx_created_at` (`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='订单对账记录表';
