-- 营销模块数据库表
-- 创建时间：2026-03-17

-- 1. 营销活动表
CREATE TABLE IF NOT EXISTS `t_marketing_activity` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `activity_name` varchar(100) NOT NULL COMMENT '活动名称',
  `activity_type` tinyint NOT NULL COMMENT '活动类型：1-首单立减 2-优惠折扣 3-商品满减',
  `activity_desc` varchar(500) DEFAULT NULL COMMENT '活动描述',
  `start_time` datetime NOT NULL COMMENT '开始时间',
  `end_time` datetime NOT NULL COMMENT '结束时间',
  `status` tinyint NOT NULL DEFAULT 0 COMMENT '状态：0-草稿 1-已发布 2-进行中 3-已暂停 4-已结束',
  `discount_value` decimal(10,2) DEFAULT NULL COMMENT '优惠值（折扣比例/减免金额）',
  `min_amount` decimal(10,2) DEFAULT NULL COMMENT '最低消费金额（满减门槛）',
  `max_discount` decimal(10,2) DEFAULT NULL COMMENT '最大优惠金额',
  `apply_scope` tinyint NOT NULL DEFAULT 1 COMMENT '适用范围：1-全部门店 2-指定门店',
  `device_scope` tinyint NOT NULL DEFAULT 1 COMMENT '设备范围：1-全部设备 2-指定设备',
  `product_scope` tinyint NOT NULL DEFAULT 1 COMMENT '商品范围：1-全部商品 2-指定商品',
  `total_budget` decimal(10,2) DEFAULT NULL COMMENT '活动总预算',
  `used_budget` decimal(10,2) DEFAULT 0 COMMENT '已使用预算',
  `creator_id` bigint NOT NULL COMMENT '创建人ID',
  `creator_name` varchar(50) DEFAULT NULL COMMENT '创建人姓名',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` tinyint NOT NULL DEFAULT 0 COMMENT '删除标记：0-正常 1-已删除',
  PRIMARY KEY (`id`),
  KEY `idx_status` (`status`),
  KEY `idx_time` (`start_time`, `end_time`),
  KEY `idx_creator` (`creator_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='营销活动表';

-- 2. 活动门店关联表
CREATE TABLE IF NOT EXISTS `t_activity_shop` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `activity_id` bigint NOT NULL COMMENT '活动ID',
  `shop_id` bigint NOT NULL COMMENT '门店ID',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_activity_shop` (`activity_id`, `shop_id`),
  KEY `idx_shop` (`shop_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动门店关联表';

-- 3. 活动商品关联表
CREATE TABLE IF NOT EXISTS `t_activity_product` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `activity_id` bigint NOT NULL COMMENT '活动ID',
  `product_id` bigint NOT NULL COMMENT '商品ID',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_activity_product` (`activity_id`, `product_id`),
  KEY `idx_product` (`product_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动商品关联表';

-- 3.1 活动设备关联表
CREATE TABLE IF NOT EXISTS `t_activity_device` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `activity_id` bigint NOT NULL COMMENT '活动ID',
  `device_id` varchar(50) NOT NULL COMMENT '设备ID',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_activity_device` (`activity_id`, `device_id`),
  KEY `idx_device` (`device_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='活动设备关联表';

-- 4. 优惠券模板表
CREATE TABLE IF NOT EXISTS `t_coupon_template` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `coupon_name` varchar(100) NOT NULL COMMENT '优惠券名称',
  `coupon_type` tinyint NOT NULL COMMENT '优惠券类型：1-满减券 2-折扣券 3-立减券 4-商品券',
  `coupon_desc` varchar(500) DEFAULT NULL COMMENT '优惠券描述',
  `discount_value` decimal(10,2) NOT NULL COMMENT '优惠值（金额/折扣比例）',
  `min_amount` decimal(10,2) DEFAULT 0 COMMENT '最低消费金额',
  `max_discount` decimal(10,2) DEFAULT NULL COMMENT '最大优惠金额',
  `total_count` int NOT NULL COMMENT '发放总量',
  `remain_count` int NOT NULL COMMENT '剩余数量',
  `receive_limit` int DEFAULT 1 COMMENT '每人限领数量',
  `valid_type` tinyint NOT NULL COMMENT '有效期类型：1-固定时间 2-相对时间',
  `valid_start_time` datetime DEFAULT NULL COMMENT '有效期开始时间',
  `valid_end_time` datetime DEFAULT NULL COMMENT '有效期结束时间',
  `valid_days` int DEFAULT NULL COMMENT '有效天数（相对时间）',
  `apply_scope` tinyint NOT NULL DEFAULT 1 COMMENT '适用范围：1-全部门店 2-指定门店',
  `product_scope` tinyint NOT NULL DEFAULT 1 COMMENT '商品范围：1-全部商品 2-指定商品',
  `activity_id` bigint DEFAULT NULL COMMENT '关联活动ID',
  `status` tinyint NOT NULL DEFAULT 1 COMMENT '状态：0-禁用 1-启用',
  `creator_id` bigint NOT NULL COMMENT '创建人ID',
  `creator_name` varchar(50) DEFAULT NULL COMMENT '创建人姓名',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` tinyint NOT NULL DEFAULT 0 COMMENT '删除标记：0-正常 1-已删除',
  PRIMARY KEY (`id`),
  KEY `idx_activity` (`activity_id`),
  KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='优惠券模板表';

-- 5. 用户优惠券表
CREATE TABLE IF NOT EXISTS `t_user_coupon` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `coupon_code` varchar(32) NOT NULL COMMENT '优惠券编码',
  `template_id` bigint NOT NULL COMMENT '优惠券模板ID',
  `user_id` bigint NOT NULL COMMENT '用户ID',
  `order_id` bigint DEFAULT NULL COMMENT '使用订单ID',
  `status` tinyint NOT NULL DEFAULT 0 COMMENT '状态：0-未使用 1-已使用 2-已过期',
  `receive_time` datetime NOT NULL COMMENT '领取时间',
  `use_time` datetime DEFAULT NULL COMMENT '使用时间',
  `valid_start_time` datetime NOT NULL COMMENT '有效期开始时间',
  `valid_end_time` datetime NOT NULL COMMENT '有效期结束时间',
  `discount_amount` decimal(10,2) DEFAULT NULL COMMENT '实际优惠金额',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_coupon_code` (`coupon_code`),
  KEY `idx_user` (`user_id`),
  KEY `idx_template` (`template_id`),
  KEY `idx_status` (`status`),
  KEY `idx_valid_time` (`valid_end_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户优惠券表';

-- 6. 优惠券发放记录表
CREATE TABLE IF NOT EXISTS `t_coupon_distribute` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `template_id` bigint NOT NULL COMMENT '优惠券模板ID',
  `distribute_type` tinyint NOT NULL COMMENT '发放类型：1-主动领取 2-系统发放 3-定向发放',
  `target_type` tinyint NOT NULL COMMENT '目标类型：1-全部用户 2-新用户 3-指定用户',
  `target_count` int NOT NULL COMMENT '目标用户数',
  `success_count` int NOT NULL DEFAULT 0 COMMENT '成功发放数',
  `operator_id` bigint NOT NULL COMMENT '操作人ID',
  `operator_name` varchar(50) DEFAULT NULL COMMENT '操作人姓名',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  KEY `idx_template` (`template_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='优惠券发放记录表';

-- 7. 优惠券门店关联表
CREATE TABLE IF NOT EXISTS `t_coupon_shop` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `template_id` bigint NOT NULL COMMENT '优惠券模板ID',
  `shop_id` bigint NOT NULL COMMENT '门店ID',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_coupon_shop` (`template_id`, `shop_id`),
  KEY `idx_shop` (`shop_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='优惠券门店关联表';

-- 8. 优惠券商品关联表
CREATE TABLE IF NOT EXISTS `t_coupon_product` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `template_id` bigint NOT NULL COMMENT '优惠券模板ID',
  `product_id` bigint NOT NULL COMMENT '商品ID',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_coupon_product` (`template_id`, `product_id`),
  KEY `idx_product` (`product_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='优惠券商品关联表';

-- 9. 营销活动统计表
CREATE TABLE IF NOT EXISTS `t_marketing_statistics` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `activity_id` bigint NOT NULL COMMENT '活动ID',
  `stat_date` date NOT NULL COMMENT '统计日期',
  `participant_count` int NOT NULL DEFAULT 0 COMMENT '参与人数',
  `new_user_count` int NOT NULL DEFAULT 0 COMMENT '新增用户数',
  `order_count` int NOT NULL DEFAULT 0 COMMENT '订单数',
  `order_amount` decimal(12,2) NOT NULL DEFAULT 0 COMMENT '订单金额',
  `discount_amount` decimal(12,2) NOT NULL DEFAULT 0 COMMENT '优惠金额',
  `actual_amount` decimal(12,2) NOT NULL DEFAULT 0 COMMENT '实付金额',
  `coupon_receive_count` int NOT NULL DEFAULT 0 COMMENT '优惠券领取数',
  `coupon_use_count` int NOT NULL DEFAULT 0 COMMENT '优惠券使用数',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_activity_date` (`activity_id`, `stat_date`),
  KEY `idx_stat_date` (`stat_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='营销活动统计表';

-- ============================================================
-- 邀请有礼模块
-- ============================================================

-- 10. 邀请活动配置表
CREATE TABLE IF NOT EXISTS `t_invite_activity` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `activity_name` varchar(100) NOT NULL COMMENT '活动名称',
  `activity_desc` varchar(500) DEFAULT NULL COMMENT '活动描述',
  `start_time` datetime NOT NULL COMMENT '开始时间',
  `end_time` datetime NOT NULL COMMENT '结束时间',
  `status` tinyint NOT NULL DEFAULT 0 COMMENT '状态：0-草稿 1-已发布 2-进行中 3-已暂停 4-已结束',
  `coupon_template_id` bigint DEFAULT NULL COMMENT '奖励优惠券模板ID',
  `daily_limit` int NOT NULL DEFAULT 10 COMMENT '每人每日最大邀请数',
  `total_limit` int NOT NULL DEFAULT 50 COMMENT '每人活动期间最大邀请总数',
  `require_first_order` tinyint NOT NULL DEFAULT 1 COMMENT '是否要求完成首单：0-否 1-是',
  `min_order_amount` decimal(10,2) NOT NULL DEFAULT 0 COMMENT '首单最低金额要求（0表示不限制）',
  `invite_code_prefix` varchar(10) DEFAULT NULL COMMENT '邀请码前缀',
  `apply_scope` tinyint NOT NULL DEFAULT 1 COMMENT '适用范围：1-全平台 2-指定门店',
  `product_scope` tinyint NOT NULL DEFAULT 1 COMMENT '商品范围：1-全部商品 2-指定商品',
  `total_invite_count` int NOT NULL DEFAULT 0 COMMENT '总邀请次数',
  `valid_invite_count` int NOT NULL DEFAULT 0 COMMENT '有效邀请数（已激活）',
  `reward_count` int NOT NULL DEFAULT 0 COMMENT '奖励发放总数',
  `creator_id` bigint NOT NULL COMMENT '创建人ID',
  `creator_name` varchar(50) DEFAULT NULL COMMENT '创建人姓名',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` tinyint NOT NULL DEFAULT 0 COMMENT '删除标记：0-正常 1-已删除',
  PRIMARY KEY (`id`),
  KEY `idx_status` (`status`),
  KEY `idx_time` (`start_time`, `end_time`),
  KEY `idx_creator` (`creator_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='邀请活动配置表';

-- 11. 邀请记录表
CREATE TABLE IF NOT EXISTS `t_invite_record` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `activity_id` bigint NOT NULL COMMENT '邀请活动ID',
  `inviter_user_id` bigint NOT NULL COMMENT '邀请人用户ID',
  `invitee_user_id` bigint NOT NULL COMMENT '被邀请人用户ID',
  `invite_code` varchar(32) NOT NULL COMMENT '邀请码',
  `status` tinyint NOT NULL DEFAULT 0 COMMENT '状态：0-待激活 1-已激活 2-奖励已发放 3-发放失败 4-已取消',
  `invite_time` datetime NOT NULL COMMENT '邀请时间',
  `activate_time` datetime DEFAULT NULL COMMENT '激活时间（首单完成时间）',
  `source_channel` varchar(50) DEFAULT NULL COMMENT '来源渠道',
  `device_info` varchar(200) DEFAULT NULL COMMENT '设备信息',
  `ip_address` varchar(50) DEFAULT NULL COMMENT 'IP地址',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注（失败原因等）',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  KEY `idx_activity` (`activity_id`),
  KEY `idx_inviter` (`inviter_user_id`),
  KEY `idx_invitee` (`invitee_user_id`),
  KEY `idx_status` (`status`),
  KEY `idx_invite_time` (`invite_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='邀请记录表';

-- 12. 邀请奖励发放记录表
CREATE TABLE IF NOT EXISTS `t_invite_reward` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `activity_id` bigint NOT NULL COMMENT '邀请活动ID',
  `record_id` bigint NOT NULL COMMENT '关联的邀请记录ID',
  `inviter_user_id` bigint NOT NULL COMMENT '邀请人用户ID',
  `coupon_template_id` bigint NOT NULL COMMENT '优惠券模板ID',
  `user_coupon_id` bigint DEFAULT NULL COMMENT '发放的用户优惠券ID',
  `coupon_code` varchar(32) DEFAULT NULL COMMENT '优惠券编码',
  `status` tinyint NOT NULL DEFAULT 0 COMMENT '状态：0-待发放 1-已发放 2-发放失败 3-已补发',
  `fail_reason` varchar(500) DEFAULT NULL COMMENT '失败原因',
  `distribute_time` datetime DEFAULT NULL COMMENT '发放时间',
  `retry_count` int NOT NULL DEFAULT 0 COMMENT '重试次数',
  `operator_id` bigint DEFAULT NULL COMMENT '手动补发操作人ID（自动发放时为空）',
  `operator_name` varchar(50) DEFAULT NULL COMMENT '操作人姓名',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  KEY `idx_activity` (`activity_id`),
  KEY `idx_record` (`record_id`),
  KEY `idx_inviter` (`inviter_user_id`),
  KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='邀请奖励发放记录表';

-- ============================================================
-- 修改现有表结构
-- ============================================================

-- 为优惠券模板表添加邀请活动相关字段
ALTER TABLE `t_coupon_template`
  ADD COLUMN `invite_activity_id` bigint DEFAULT NULL COMMENT '关联的邀请活动ID（非空表示该券为邀请奖励券）' AFTER `activity_id`,
  ADD COLUMN `is_invite_only` tinyint NOT NULL DEFAULT 0 COMMENT '是否仅限邀请奖励发放：0-否 1-是' AFTER `invite_activity_id`;

-- ============================================================
-- 邀请有礼活动双向奖励机制扩展（2026-04-03）
-- 支持邀请人和被邀请人双方均可获得奖励
-- ============================================================

-- 为邀请活动配置表添加被邀请人奖励字段
ALTER TABLE `t_invite_activity`
  ADD COLUMN `invitee_coupon_template_id` bigint DEFAULT NULL COMMENT '被邀请人优惠券模板ID（支持双向奖励时配置）' AFTER `coupon_template_id`;

-- 为邀请奖励发放记录表添加奖励类型和触发条件字段
ALTER TABLE `t_invite_reward`
  ADD COLUMN `reward_type` tinyint NOT NULL DEFAULT 0 COMMENT '奖励类型：0-邀请人奖励 1-被邀请人奖励' AFTER `inviter_user_id`,
  ADD COLUMN `trigger_type` tinyint NOT NULL DEFAULT 0 COMMENT '触发条件：0-首单完成 1-邀请绑定' AFTER `reward_type`;
