-- =====================================================
-- 会员营销模块数据库表设计
-- 模块：business-marketing
-- 版本：1.0.0（P0）
-- 创建时间：2026-06-25
-- 说明：店铺= sys_tn_tenant_info 商户租户；本脚本仅含营销扩展与会员-租户关系、核销流水
-- 基础字段：id, create_by, create_date, update_by, update_date, del_flag, remarks, tenant_code, tenant_id
-- 执行顺序：marketing.sql → marketing_coupon_scene_seed.sql → marketing_mock_data.sql → marketing_menu_permission.sql
-- 模拟数据主键号段：101=场景种子；102～133=marketing_mock_data.sql 业务链演示数据
-- =====================================================

-- ----
-- 1. 会员-店铺（租户）关系
-- ----
DROP TABLE IF EXISTS `app_member_tenant`;
CREATE TABLE `app_member_tenant` (
  `id` VARCHAR(64) NOT NULL COMMENT '主键ID',

  `member_id` VARCHAR(64) NOT NULL COMMENT '会员ID，关联 app_member.id',
  `member_no` VARCHAR(32) DEFAULT NULL COMMENT '会员编号（冗余）',
  `bind_status` TINYINT NOT NULL DEFAULT 1 COMMENT '绑定状态：0-未绑定 1-已绑定 2-已解绑',
  `join_source` VARCHAR(32) NOT NULL DEFAULT 'QR_SCAN' COMMENT '入会来源：QR_SCAN-扫码 ADMIN-后台 IMPORT-导入 MINI_APPLY-小程序申请',
  `channel_code` VARCHAR(64) DEFAULT NULL COMMENT '推广渠道编码',
  `member_role` VARCHAR(32) NOT NULL DEFAULT 'CUSTOMER' COMMENT '店铺内角色：CUSTOMER-顾客 CLERK-店员 MANAGER-店长',
  `join_date` DATETIME DEFAULT NULL COMMENT '入会/绑定时间',
  `unbind_date` DATETIME DEFAULT NULL COMMENT '解绑时间',

  `create_by` VARCHAR(64) DEFAULT NULL COMMENT '创建者',
  `create_date` DATETIME DEFAULT NULL COMMENT '创建时间',
  `update_by` VARCHAR(64) DEFAULT NULL COMMENT '更新者',
  `update_date` DATETIME DEFAULT NULL COMMENT '更新时间',
  `del_flag` CHAR(1) DEFAULT '0' COMMENT '删除标记：0-正常 1-删除',
  `remarks` VARCHAR(255) DEFAULT NULL COMMENT '备注信息',
  `tenant_code` VARCHAR(64) DEFAULT NULL COMMENT '店铺租户编码（冗余，关联 sys_tn_tenant_info）',
  `tenant_id` VARCHAR(64) NOT NULL COMMENT '店铺租户ID，关联 sys_tn_tenant_info.id',

  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_member_tenant` (`member_id`, `tenant_id`),
  KEY `idx_member_id` (`member_id`),
  KEY `idx_tenant_id` (`tenant_id`),
  KEY `idx_bind_status` (`bind_status`),
  KEY `idx_member_role` (`member_role`),
  KEY `idx_join_date` (`join_date`),
  KEY `idx_create_date` (`create_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='会员-店铺租户关系表';

-- ----
-- 2. 店铺营销扩展配置（不修改 sys_tn_tenant_info 主表）
-- ----
DROP TABLE IF EXISTS `cfg_marketing_tenant_ext`;
CREATE TABLE `cfg_marketing_tenant_ext` (
  `id` VARCHAR(64) NOT NULL COMMENT '主键ID',

  `marketing_enabled` TINYINT NOT NULL DEFAULT 0 COMMENT '是否开通会员营销：0-否 1-是',
  `auto_join_on_qr` TINYINT NOT NULL DEFAULT 1 COMMENT '扫码是否免审直绑：0-否 1-是',
  `welcome_title` VARCHAR(128) DEFAULT NULL COMMENT '落地页标题',
  `welcome_subtitle` VARCHAR(255) DEFAULT NULL COMMENT '落地页副标题',
  `logo_url` VARCHAR(500) DEFAULT NULL COMMENT '店铺Logo URL',

  `create_by` VARCHAR(64) DEFAULT NULL COMMENT '创建者',
  `create_date` DATETIME DEFAULT NULL COMMENT '创建时间',
  `update_by` VARCHAR(64) DEFAULT NULL COMMENT '更新者',
  `update_date` DATETIME DEFAULT NULL COMMENT '更新时间',
  `del_flag` CHAR(1) DEFAULT '0' COMMENT '删除标记：0-正常 1-删除',
  `remarks` VARCHAR(255) DEFAULT NULL COMMENT '备注信息',
  `tenant_code` VARCHAR(64) DEFAULT NULL COMMENT '店铺租户编码（冗余）',
  `tenant_id` VARCHAR(64) NOT NULL COMMENT '店铺租户ID',

  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_tenant_id` (`tenant_id`),
  KEY `idx_marketing_enabled` (`marketing_enabled`),
  KEY `idx_create_date` (`create_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='店铺营销扩展配置';

-- ----
-- 3. 店铺推广二维码
-- ----
DROP TABLE IF EXISTS `cfg_marketing_tenant_qrcode`;
CREATE TABLE `cfg_marketing_tenant_qrcode` (
  `id` VARCHAR(64) NOT NULL COMMENT '主键ID',

  `channel_code` VARCHAR(64) NOT NULL DEFAULT 'DEFAULT' COMMENT '渠道编码：DEFAULT/POSTER/STAFF_xxx',
  `channel_name` VARCHAR(64) DEFAULT NULL COMMENT '渠道名称',
  `wx_scene` VARCHAR(64) NOT NULL COMMENT '微信小程序 scene 参数（≤32字符，建议 tenantCode+channel 编码）',
  `qrcode_url` VARCHAR(500) DEFAULT NULL COMMENT '小程序码图片URL',
  `page_path` VARCHAR(255) DEFAULT NULL COMMENT '小程序落地页路径',
  `status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态：0-停用 1-启用',
  `expire_date` DATETIME DEFAULT NULL COMMENT '过期时间（可选）',
  `scan_count` BIGINT NOT NULL DEFAULT 0 COMMENT '累计扫描次数（可选统计）',

  `create_by` VARCHAR(64) DEFAULT NULL COMMENT '创建者',
  `create_date` DATETIME DEFAULT NULL COMMENT '创建时间',
  `update_by` VARCHAR(64) DEFAULT NULL COMMENT '更新者',
  `update_date` DATETIME DEFAULT NULL COMMENT '更新时间',
  `del_flag` CHAR(1) DEFAULT '0' COMMENT '删除标记：0-正常 1-删除',
  `remarks` VARCHAR(255) DEFAULT NULL COMMENT '备注信息',
  `tenant_code` VARCHAR(64) DEFAULT NULL COMMENT '店铺租户编码（冗余）',
  `tenant_id` VARCHAR(64) NOT NULL COMMENT '店铺租户ID',

  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_tenant_channel` (`tenant_id`, `channel_code`),
  KEY `idx_wx_scene` (`wx_scene`),
  KEY `idx_status` (`status`),
  KEY `idx_tenant_id` (`tenant_id`),
  KEY `idx_create_date` (`create_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='店铺推广二维码';

-- ----
-- 4. 会员券线下核销流水
-- ----
DROP TABLE IF EXISTS `app_member_coupon_verify_log`;
CREATE TABLE `app_member_coupon_verify_log` (
  `id` VARCHAR(64) NOT NULL COMMENT '主键ID',

  `member_coupon_id` VARCHAR(64) NOT NULL COMMENT '会员券ID，关联 app_member_coupon.id',
  `coupon_template_id` VARCHAR(64) DEFAULT NULL COMMENT '券模板ID（冗余）',
  `coupon_name` VARCHAR(128) DEFAULT NULL COMMENT '优惠券名称（冗余）',
  `member_id` VARCHAR(64) NOT NULL COMMENT '会员ID',
  `verify_type` VARCHAR(32) NOT NULL DEFAULT 'OFFLINE_SCAN' COMMENT '核销类型：OFFLINE_SCAN-线下扫码',
  `verify_time` DATETIME NOT NULL COMMENT '核销时间',
  `operator_id` VARCHAR(64) DEFAULT NULL COMMENT '操作人ID（店员 sys_user）',
  `operator_name` VARCHAR(64) DEFAULT NULL COMMENT '操作人姓名（冗余）',
  `verify_token` VARCHAR(128) DEFAULT NULL COMMENT '核销令牌/幂等业务号',
  `verify_tenant_id` VARCHAR(64) NOT NULL COMMENT '实际核销租户ID（须与券归属 tenant_id 一致）',
  `verify_tenant_code` VARCHAR(64) DEFAULT NULL COMMENT '实际核销租户编码（冗余）',

  `create_by` VARCHAR(64) DEFAULT NULL COMMENT '创建者',
  `create_date` DATETIME DEFAULT NULL COMMENT '创建时间',
  `update_by` VARCHAR(64) DEFAULT NULL COMMENT '更新者',
  `update_date` DATETIME DEFAULT NULL COMMENT '更新时间',
  `del_flag` CHAR(1) DEFAULT '0' COMMENT '删除标记：0-正常 1-删除',
  `remarks` VARCHAR(255) DEFAULT NULL COMMENT '备注信息',
  `tenant_code` VARCHAR(64) DEFAULT NULL COMMENT '券归属租户编码（冗余）',
  `tenant_id` VARCHAR(64) NOT NULL COMMENT '券归属租户ID',

  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_verify_token` (`verify_token`),
  KEY `idx_member_coupon_id` (`member_coupon_id`),
  KEY `idx_member_id` (`member_id`),
  KEY `idx_tenant_id` (`tenant_id`),
  KEY `idx_verify_tenant_id` (`verify_tenant_id`),
  KEY `idx_verify_time` (`verify_time`),
  KEY `idx_create_date` (`create_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='会员券线下核销流水';
