-- ============================================
-- 投诉系统表结构 - 统一创建
-- ============================================
-- 说明：投诉系统统一使用 complaint_ 前缀
-- 执行时间：2025-XX-XX
-- ============================================

-- ============================================
-- 1. 投诉主表（complaint_main）
-- ============================================
-- 作用：统一管理所有类型的投诉，包含投诉人的基本信息和通用状态
CREATE TABLE `complaint_main` (
  `id` CHAR(36) NOT NULL COMMENT 'UUID主键',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `delete_time` datetime DEFAULT NULL COMMENT '删除时间',
  `del_state` tinyint NOT NULL DEFAULT '0' COMMENT '删除状态：0=未删除，1=已删除',
  `version` bigint NOT NULL DEFAULT '0' COMMENT '版本号（乐观锁）',

/* 业务字段 */

`type` varchar(20) NOT NULL COMMENT '投诉类型：alipay=支付宝投诉，manual=主动投诉',
  `order_id` CHAR(36) DEFAULT NULL COMMENT '关联订单ID（如果有相关订单）',
  `name` varchar(100) DEFAULT NULL COMMENT '投诉人姓名',
  `contact` varchar(50) DEFAULT NULL COMMENT '联系方式（手机号、邮箱等）',
  `content` text DEFAULT NULL COMMENT '投诉内容',
  `status` varchar(50) DEFAULT NULL COMMENT '投诉状态（通用状态，如：pending=待处理，processing=处理中，resolved=已解决，closed=已关闭）',
  `status_description` varchar(200) DEFAULT NULL COMMENT '状态描述',
  `remark` text DEFAULT NULL COMMENT '处理备注',
  `handler_id` CHAR(36) DEFAULT NULL COMMENT '处理人ID（关联管理员或其他处理人员）',
  `handle_time` datetime DEFAULT NULL COMMENT '处理时间',
  
  PRIMARY KEY (`id`),
  KEY `idx_type` (`type`) COMMENT '优化按投诉类型查询',
  KEY `idx_order_id` (`order_id`) COMMENT '优化按订单查询',
  KEY `idx_status` (`status`) COMMENT '优化按状态查询',
  KEY `idx_name` (`name`) COMMENT '优化按姓名查询',
  KEY `idx_contact` (`contact`) COMMENT '优化按联系方式查询',
  KEY `idx_create_time` (`create_time`) COMMENT '优化按创建时间查询',
  KEY `idx_handler_id` (`handler_id`) COMMENT '优化按处理人查询'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='投诉主表';

-- ============================================
-- 2. 支付宝投诉表（complaint_alipay）
-- ============================================
-- 作用：存储支付宝投诉的详细信息
CREATE TABLE `complaint_alipay` (
  `id` CHAR(36) NOT NULL COMMENT 'UUID主键',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `delete_time` datetime DEFAULT NULL COMMENT '删除时间',
  `del_state` tinyint NOT NULL DEFAULT '0' COMMENT '删除状态：0=未删除，1=已删除',
  `version` bigint NOT NULL DEFAULT '0' COMMENT '版本号（乐观锁）',

/* 业务字段 */

`complaint_id` CHAR(36) NOT NULL COMMENT '关联投诉主表ID（关联complaint_main.id）',
  `alipay_id` bigint NOT NULL COMMENT '支付宝投诉主表的主键id（支付宝返回的id）',
  `task_id` varchar(100) NOT NULL COMMENT '投诉单号id（支付宝返回的task_id，用于唯一标识）',
  `opposite_pid` varchar(50) DEFAULT NULL COMMENT '被投诉人pid',
  `opposite_name` varchar(200) DEFAULT NULL COMMENT '投诉单中被投诉方的名称',
  `complain_amount` decimal(10,2) DEFAULT NULL COMMENT '投诉单涉及交易总金额（单位：人民币元）',
  `gmt_complain` datetime DEFAULT NULL COMMENT '投诉时间',
  `gmt_process` datetime DEFAULT NULL COMMENT '处理时间',
  `gmt_overdue` datetime DEFAULT NULL COMMENT '过期时间',
  `complain_content` text DEFAULT NULL COMMENT '用户投诉内容',
  `trade_no` varchar(100) DEFAULT NULL COMMENT '投诉交易单号',
  `status` varchar(50) DEFAULT NULL COMMENT '投诉状态（支付宝返回的状态）',
  `status_description` varchar(200) DEFAULT NULL COMMENT '投诉单状态枚举值描述',
  `process_code` varchar(50) DEFAULT NULL COMMENT '商家处理结果码',
  `process_message` varchar(500) DEFAULT NULL COMMENT '商家处理结果码对应描述',
  `process_remark` text DEFAULT NULL COMMENT '商家处理备注',
  `process_img_url_list` text DEFAULT NULL COMMENT '商家处理备注图片url列表（JSON数组字符串）',
  `gmt_risk_finish_time` datetime DEFAULT NULL COMMENT '推送时间',
  `complain_url` varchar(500) DEFAULT NULL COMMENT '投诉网址',
  `certify_info` text DEFAULT NULL COMMENT '投诉凭证图片信息（JSON数组字符串）',
  
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_task_id` (`task_id`) COMMENT '投诉单号唯一索引',
  UNIQUE KEY `uk_alipay_id` (`alipay_id`) COMMENT '支付宝id唯一索引',
  KEY `idx_complaint_id` (`complaint_id`) COMMENT '优化按投诉主表查询',
  KEY `idx_opposite_pid` (`opposite_pid`) COMMENT '优化按被投诉人查询',
  KEY `idx_trade_no` (`trade_no`) COMMENT '优化按交易单号查询',
  KEY `idx_status` (`status`) COMMENT '优化按状态查询',
  KEY `idx_gmt_complain` (`gmt_complain`) COMMENT '优化按投诉时间查询（用于轮询新投诉）',
  KEY `idx_create_time` (`create_time`) COMMENT '优化按创建时间查询'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='支付宝投诉表';

-- ============================================
-- 3. 支付宝投诉交易信息表（complaint_alipay_trade）
-- ============================================
-- 作用：存储支付宝投诉涉及的交易信息（一个投诉可能涉及多个交易）
CREATE TABLE `complaint_alipay_trade` (
  `id` CHAR(36) NOT NULL COMMENT 'UUID主键',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `delete_time` datetime DEFAULT NULL COMMENT '删除时间',
  `del_state` tinyint NOT NULL DEFAULT '0' COMMENT '删除状态：0=未删除，1=已删除',
  `version` bigint NOT NULL DEFAULT '0' COMMENT '版本号（乐观锁）',

/* 业务字段 */

`complaint_id` CHAR(36) NOT NULL COMMENT '投诉主表ID（关联complaint_alipay.id）',
  `alipay_trade_id` bigint DEFAULT NULL COMMENT '交易信息表主键id（支付宝返回的id）',
  `alipay_complaint_record_id` bigint DEFAULT NULL COMMENT '投诉主表id（支付宝返回的complaint_record_id）',
  `trade_no` varchar(100) DEFAULT NULL COMMENT '支付宝交易单号',
  `out_no` varchar(100) DEFAULT NULL COMMENT '商家订单号',
  `gmt_trade` datetime DEFAULT NULL COMMENT '交易时间',
  `gmt_refund` datetime DEFAULT NULL COMMENT '退款时间',
  `status` varchar(50) DEFAULT NULL COMMENT '交易投诉状态',
  `status_description` varchar(200) DEFAULT NULL COMMENT '交易投诉状态描述',
  `amount` decimal(10,2) DEFAULT NULL COMMENT '交易单金额（单位：人民币元）',
  
  PRIMARY KEY (`id`),
  KEY `idx_complaint_id` (`complaint_id`) COMMENT '优化按投诉主表查询',
  KEY `idx_trade_no` (`trade_no`) COMMENT '优化按交易单号查询',
  KEY `idx_out_no` (`out_no`) COMMENT '优化按商家订单号查询',
  KEY `idx_status` (`status`) COMMENT '优化按状态查询'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='支付宝投诉交易信息表';

-- ============================================
-- 4. 主动投诉表（complaint_manual）
-- ============================================
-- 作用：存储主动投诉的详细信息
CREATE TABLE `complaint_manual` (
  `id` CHAR(36) NOT NULL COMMENT 'UUID主键',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `delete_time` datetime DEFAULT NULL COMMENT '删除时间',
  `del_state` tinyint NOT NULL DEFAULT '0' COMMENT '删除状态：0=未删除，1=已删除',
  `version` bigint NOT NULL DEFAULT '0' COMMENT '版本号（乐观锁）',

/* 业务字段 */

`complaint_id` CHAR(36) NOT NULL COMMENT '关联投诉主表ID（关联complaint_main.id）',
  `user_id` CHAR(36) DEFAULT NULL COMMENT '关联用户ID（如果有相关用户）',
  `subject` varchar(200) DEFAULT NULL COMMENT '投诉主题',
  `priority` varchar(20) DEFAULT NULL COMMENT '优先级：low=低，medium=中，high=高，urgent=紧急',
  `source` varchar(50) DEFAULT NULL COMMENT '投诉来源：web=网站，phone=电话，email=邮件，other=其他',
  `attachment_urls` text DEFAULT NULL COMMENT '附件URL列表（JSON数组字符串）',
  
  PRIMARY KEY (`id`),
  KEY `idx_complaint_id` (`complaint_id`) COMMENT '优化按投诉主表查询',
  KEY `idx_user_id` (`user_id`) COMMENT '优化按用户查询',
  KEY `idx_priority` (`priority`) COMMENT '优化按优先级查询',
  KEY `idx_source` (`source`) COMMENT '优化按来源查询'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='主动投诉表';

-- ============================================
-- 表关系说明
-- ============================================
-- 1. complaint_main (投诉主表)
--    ├── 包含：投诉类型、订单ID、姓名、联系方式、投诉内容、状态等通用信息
--    │
--    ├── type: alipay
--    │   └── complaint_alipay (支付宝投诉表)
--    │       └── complaint_alipay_trade (支付宝投诉交易信息表)
--    │
--    └── type: manual
--        └── complaint_manual (主动投诉表)
--
-- 2. 关联关系：
--    - complaint_main.order_id -> order.id (订单关联)
--    - complaint_alipay.complaint_id -> complaint_main.id
--    - complaint_alipay_trade.complaint_id -> complaint_alipay.id
--    - complaint_manual.complaint_id -> complaint_main.id
--    - complaint_manual.user_id -> user.id (用户关联)
--
-- 3. 字段说明：
--    - 主表统一存储：姓名、联系方式、投诉内容、通用状态
--    - 子表存储：特定类型的详细信息
--    - 订单关联：在主表中统一管理，方便查询
-- ============================================