-- 套票（冻结/可用、分期释放）相关表
-- 说明：项目使用了 MyBatis-Plus 的 tenant 拦截；表内显式保留 tenant_id 字段并建议建立联合唯一索引。

-- 1) 套票模板（按商品配置）
CREATE TABLE IF NOT EXISTS shop_ticket_template (
  id INT AUTO_INCREMENT PRIMARY KEY,
  goods_id INT NOT NULL,
  name VARCHAR(100) NOT NULL,

  enabled TINYINT(1) NOT NULL DEFAULT 1,
  unit_name VARCHAR(20) NOT NULL DEFAULT '桶',

  -- 起售/起送
  min_buy_qty INT NOT NULL DEFAULT 1,
  start_send_qty INT NOT NULL DEFAULT 1,

  -- 买赠：买1送4 => gift_multiplier=4
  gift_multiplier INT NOT NULL DEFAULT 0,
  -- 是否把购买量也计入套票总量（默认仅计入赠送量）
  include_buy_qty TINYINT(1) NOT NULL DEFAULT 0,

  -- 释放规则：二选一
  -- A) 每期释放数量（默认每月释放10）
  monthly_release_qty INT NOT NULL DEFAULT 10,
  -- B) 总共释放多少期（若配置>0，则按期数平均分摊）
  release_periods INT NULL,

  -- 首期释放时机：0=支付成功当刻；1=下个月同日
  first_release_mode INT NOT NULL DEFAULT 0,

  comments VARCHAR(255) NULL,
  sort_number INT NOT NULL DEFAULT 0,
  user_id INT NULL,

  deleted INT NOT NULL DEFAULT 0,
  tenant_id INT NOT NULL,
  create_time DATETIME NULL,
  update_time DATETIME NULL,

  UNIQUE KEY uk_ticket_template_tenant_goods (tenant_id, goods_id),
  KEY idx_ticket_template_tenant (tenant_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 2) 用户套票账户（一次购买通常生成一条）
CREATE TABLE IF NOT EXISTS shop_user_ticket (
  id BIGINT AUTO_INCREMENT PRIMARY KEY,
  template_id INT NOT NULL,
  goods_id INT NOT NULL,

  user_id INT NOT NULL,
  order_id INT NULL,
  order_no VARCHAR(64) NULL,
  order_goods_id INT NULL,

  total_qty INT NOT NULL DEFAULT 0,
  available_qty INT NOT NULL DEFAULT 0,
  frozen_qty INT NOT NULL DEFAULT 0,
  used_qty INT NOT NULL DEFAULT 0,
  released_qty INT NOT NULL DEFAULT 0,

  status INT NOT NULL DEFAULT 0,

  deleted INT NOT NULL DEFAULT 0,
  tenant_id INT NOT NULL,
  create_time DATETIME NULL,
  update_time DATETIME NULL,

  KEY idx_user_ticket_user (tenant_id, user_id),
  KEY idx_user_ticket_order (tenant_id, order_no),
  UNIQUE KEY uk_user_ticket_order_goods (tenant_id, template_id, order_no, order_goods_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 3) 释放计划/释放记录（每期一条，幂等执行）
CREATE TABLE IF NOT EXISTS shop_user_ticket_release (
  id BIGINT AUTO_INCREMENT PRIMARY KEY,
  user_ticket_id BIGINT NOT NULL,
  user_id INT NOT NULL,
  period_no INT NOT NULL,

  release_qty INT NOT NULL,
  release_time DATETIME NOT NULL,

  status INT NOT NULL DEFAULT 0, -- 0待释放 1已释放 2作废
  released_time DATETIME NULL,

  tenant_id INT NOT NULL,
  create_time DATETIME NULL,
  update_time DATETIME NULL,

  UNIQUE KEY uk_ticket_release_period (tenant_id, user_ticket_id, period_no),
  KEY idx_ticket_release_due (status, release_time),
  KEY idx_ticket_release_user (tenant_id, user_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 4) 套票变更流水（发放/释放/消费/回滚等）
CREATE TABLE IF NOT EXISTS shop_user_ticket_log (
  id BIGINT AUTO_INCREMENT PRIMARY KEY,
  user_ticket_id BIGINT NOT NULL,
  user_id INT NOT NULL,

  change_type INT NOT NULL, -- 10发放 20释放 30消费 40回滚/退款
  change_available INT NOT NULL DEFAULT 0,
  change_frozen INT NOT NULL DEFAULT 0,
  change_used INT NOT NULL DEFAULT 0,

  available_after INT NOT NULL DEFAULT 0,
  frozen_after INT NOT NULL DEFAULT 0,
  used_after INT NOT NULL DEFAULT 0,

  order_id INT NULL,
  order_no VARCHAR(64) NULL,
  remark VARCHAR(255) NULL,

  tenant_id INT NOT NULL,
  create_time DATETIME NULL,
  update_time DATETIME NULL,

  KEY idx_ticket_log_user (tenant_id, user_id),
  KEY idx_ticket_log_ticket (tenant_id, user_ticket_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

