migration-v11.sql 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. -- ============================================
  2. -- 迁移 v11:运营活动统一配置(邀请有礼 / 签到送会员 / 比价抽奖)
  3. -- 设计原则:所有活动均"可关闭",关闭时各业务保持原有逻辑不变(往上加限制)
  4. -- 活动时间窗统一:2026-07-10 ~ 2026-07-31
  5. -- ============================================
  6. -- ========== 一、邀请有礼活动 ==========
  7. CREATE TABLE IF NOT EXISTS `t_activity_invite_config` (
  8. `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  9. `enabled` TINYINT NOT NULL DEFAULT 0 COMMENT '是否启用活动:0-停用(走原逻辑) 1-启用',
  10. `start_time` DATETIME NOT NULL COMMENT '活动开始时间',
  11. `end_time` DATETIME NOT NULL COMMENT '活动结束时间',
  12. `inviter_reward_days` INT NOT NULL DEFAULT 30 COMMENT '邀请人奖励会员天数',
  13. `invitee_reward_days` INT NOT NULL DEFAULT 30 COMMENT '被邀请人奖励会员天数',
  14. `max_inviter_reward` INT NOT NULL DEFAULT 30 COMMENT '邀请人最多获得邀请奖励次数',
  15. `reward_trigger` VARCHAR(20) NOT NULL DEFAULT 'REGISTRATION' COMMENT '奖励触发模式:REGISTRATION-注册即发(原逻辑) LICENSE_APPROVED-资质审核通过后发',
  16. `require_miniapp_inviter` TINYINT NOT NULL DEFAULT 0 COMMENT '是否要求邀请人为开邻药惠购小程序用户:0-不要求 1-要求',
  17. `remark` VARCHAR(500) DEFAULT NULL,
  18. `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
  19. `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  20. PRIMARY KEY (`id`)
  21. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='邀请有礼活动配置(全局唯一)';
  22. INSERT INTO `t_activity_invite_config` (`id`, `enabled`, `start_time`, `end_time`,
  23. `inviter_reward_days`, `invitee_reward_days`, `max_inviter_reward`, `reward_trigger`, `require_miniapp_inviter`, `remark`)
  24. VALUES (1, 0, '2026-07-10 00:00:00', '2026-07-31 23:59:59', 30, 30, 30, 'LICENSE_APPROVED', 0,
  25. '邀请有礼:默认关闭。启用后需被邀请人资质审核通过才发奖,邀请人最多30次')
  26. ON DUPLICATE KEY UPDATE id = id;
  27. -- 邀请有礼奖励发放记录(活动模式 LICENSE_APPROVED 下,邀请人在被邀请人资质通过后获得的奖励)
  28. CREATE TABLE IF NOT EXISTS `t_activity_invite_reward_record` (
  29. `id` BIGINT NOT NULL AUTO_INCREMENT,
  30. `inviter_id` BIGINT NOT NULL COMMENT '邀请人ID',
  31. `invitee_id` BIGINT NOT NULL COMMENT '被邀请人ID',
  32. `license_id` BIGINT DEFAULT NULL COMMENT '触发奖励的资质记录ID',
  33. `reward_days` INT NOT NULL COMMENT '奖励会员天数',
  34. `grant_id` BIGINT DEFAULT NULL COMMENT '关联会员发放记录ID(预留)',
  35. `status` TINYINT NOT NULL DEFAULT 0 COMMENT '状态:0-正常 1-已撤销(反作弊)',
  36. `revoke_reason` VARCHAR(500) DEFAULT NULL COMMENT '撤销原因',
  37. `revoker_id` BIGINT DEFAULT NULL COMMENT '撤销操作人ID',
  38. `revoke_time` DATETIME DEFAULT NULL COMMENT '撤销时间',
  39. `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
  40. `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  41. PRIMARY KEY (`id`),
  42. UNIQUE KEY `uk_invitee` (`invitee_id`) COMMENT '同一被邀请人资质通过仅奖励邀请人一次'
  43. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='邀请有礼活动奖励发放记录';
  44. -- ========== 二、签到送高级会员活动(周期制) ==========
  45. CREATE TABLE IF NOT EXISTS `t_activity_checkin_cycle_config` (
  46. `id` BIGINT NOT NULL AUTO_INCREMENT,
  47. `enabled` TINYINT NOT NULL DEFAULT 0 COMMENT '是否启用:0-停用 1-启用',
  48. `start_time` DATETIME NOT NULL COMMENT '活动开始时间',
  49. `end_time` DATETIME NOT NULL COMMENT '活动结束时间',
  50. `cycle_mode` VARCHAR(20) NOT NULL DEFAULT 'FRI_THU' COMMENT '周期模式:FRI_THU-周五至下周四',
  51. `required_days` INT NOT NULL DEFAULT 4 COMMENT '周期内需累计签到天数',
  52. `reward_days` INT NOT NULL DEFAULT 7 COMMENT '奖励高级会员天数',
  53. `max_reward_count` INT NOT NULL DEFAULT 3 COMMENT '每用户最多领取次数',
  54. `remark` VARCHAR(500) DEFAULT NULL,
  55. `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
  56. `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  57. PRIMARY KEY (`id`)
  58. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='签到送会员活动配置(全局唯一)';
  59. INSERT INTO `t_activity_checkin_cycle_config` (`id`, `enabled`, `start_time`, `end_time`,
  60. `cycle_mode`, `required_days`, `reward_days`, `max_reward_count`, `remark`)
  61. VALUES (1, 0, '2026-07-10 00:00:00', '2026-07-31 23:59:59', 'FRI_THU', 4, 7, 3,
  62. '签到送会员:每周五至下周四为一周期,累计4天签到得7天高级会员,周期结束后第一天发放,最多3次')
  63. ON DUPLICATE KEY UPDATE id = id;
  64. -- 签到周期奖励记录(每用户每周期一条,记录是否已发放)
  65. CREATE TABLE IF NOT EXISTS `t_activity_checkin_cycle_record` (
  66. `id` BIGINT NOT NULL AUTO_INCREMENT,
  67. `user_id` BIGINT NOT NULL,
  68. `cycle_start` DATE NOT NULL COMMENT '周期起始日(周五)',
  69. `cycle_end` DATE NOT NULL COMMENT '周期截止日(周四)',
  70. `checkin_count` INT NOT NULL DEFAULT 0 COMMENT '周期内签到天数',
  71. `reward_granted` TINYINT NOT NULL DEFAULT 0 COMMENT '是否已发放奖励:0-未 1-已',
  72. `grant_time` DATETIME DEFAULT NULL COMMENT '发放时间',
  73. `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
  74. PRIMARY KEY (`id`),
  75. UNIQUE KEY `uk_user_cycle` (`user_id`, `cycle_start`)
  76. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='签到周期奖励记录';
  77. -- ========== 三、比价抽奖活动 ==========
  78. CREATE TABLE IF NOT EXISTS `t_activity_lottery_config` (
  79. `id` BIGINT NOT NULL AUTO_INCREMENT,
  80. `enabled` TINYINT NOT NULL DEFAULT 0 COMMENT '是否启用:0-停用 1-启用',
  81. `start_time` DATETIME NOT NULL,
  82. `end_time` DATETIME NOT NULL,
  83. `daily_max_chance` INT NOT NULL DEFAULT 1 COMMENT '每用户每日最多抽奖机会数',
  84. `require_membership_level` VARCHAR(20) NOT NULL DEFAULT 'PRO' COMMENT '参与所需最低会员等级(PRO/ULTRA)',
  85. `remark` VARCHAR(500) DEFAULT NULL,
  86. `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
  87. `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  88. PRIMARY KEY (`id`)
  89. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='比价抽奖活动配置(全局唯一)';
  90. INSERT INTO `t_activity_lottery_config` (`id`, `enabled`, `start_time`, `end_time`,
  91. `daily_max_chance`, `require_membership_level`, `remark`)
  92. VALUES (1, 0, '2026-07-10 00:00:00', '2026-07-31 23:59:59', 1, 'PRO',
  93. '比价抽奖:高级会员每自然日首次成功比价获得1次抽奖机会,先到先得')
  94. ON DUPLICATE KEY UPDATE id = id;
  95. -- 抽奖机会表(每用户每日首次比价产生一条机会)
  96. CREATE TABLE IF NOT EXISTS `t_activity_lottery_chance` (
  97. `id` BIGINT NOT NULL AUTO_INCREMENT,
  98. `user_id` BIGINT NOT NULL,
  99. `chance_date` DATE NOT NULL COMMENT '获得机会的日期',
  100. `source` VARCHAR(20) NOT NULL DEFAULT 'COMPARE' COMMENT '机会来源:COMPARE-比价',
  101. `used` TINYINT NOT NULL DEFAULT 0 COMMENT '是否已使用:0-未 1-已',
  102. `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
  103. PRIMARY KEY (`id`),
  104. UNIQUE KEY `uk_user_date_source` (`user_id`, `chance_date`, `source`) COMMENT '每日每来源仅1次机会'
  105. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='比价抽奖机会表';
  106. -- 奖品池
  107. CREATE TABLE IF NOT EXISTS `t_activity_lottery_prize` (
  108. `id` BIGINT NOT NULL AUTO_INCREMENT,
  109. `name` VARCHAR(50) NOT NULL COMMENT '奖品名称',
  110. `reward_type` VARCHAR(20) NOT NULL COMMENT '奖励类型:MEMBERSHIP-会员 EMPTY-未中奖',
  111. `reward_amount` INT NOT NULL DEFAULT 0 COMMENT '奖励数量(爬虫次数等)',
  112. `reward_days` INT DEFAULT NULL COMMENT '奖励会员天数(MEMBERSHIP类型)',
  113. `reward_level` VARCHAR(20) DEFAULT NULL COMMENT '奖励会员等级(MEMBERSHIP类型)',
  114. `probability_weight` INT NOT NULL DEFAULT 1 COMMENT '中奖概率权重',
  115. `enabled` TINYINT NOT NULL DEFAULT 1,
  116. `sort` INT NOT NULL DEFAULT 0,
  117. `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
  118. `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  119. PRIMARY KEY (`id`)
  120. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='抽奖奖品池';
  121. -- 默认奖品池
  122. INSERT INTO `t_activity_lottery_prize` (`name`, `reward_type`, `reward_amount`, `reward_days`, `reward_level`, `probability_weight`, `enabled`, `sort`)
  123. VALUES
  124. ('高级会员7天', 'MEMBERSHIP', 0, 7, 'PRO', 10, 1, 1),
  125. ('高级会员3天', 'MEMBERSHIP', 0, 3, 'PRO', 20, 1, 2),
  126. ('高级会员1天', 'MEMBERSHIP', 0, 1, 'PRO', 40, 1, 3),
  127. ('谢谢参与', 'EMPTY', 0, NULL, NULL, 100, 1, 4);
  128. -- 抽奖记录表
  129. CREATE TABLE IF NOT EXISTS `t_activity_lottery_record` (
  130. `id` BIGINT NOT NULL AUTO_INCREMENT,
  131. `user_id` BIGINT NOT NULL,
  132. `prize_id` BIGINT DEFAULT NULL,
  133. `prize_name` VARCHAR(50) NOT NULL,
  134. `reward_type` VARCHAR(20) NOT NULL,
  135. `reward_amount` INT NOT NULL DEFAULT 0,
  136. `reward_days` INT DEFAULT NULL,
  137. `reward_level` VARCHAR(20) DEFAULT NULL,
  138. `chance_id` BIGINT DEFAULT NULL COMMENT '关联抽奖机会ID',
  139. `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
  140. PRIMARY KEY (`id`),
  141. KEY `idx_user` (`user_id`, `create_time`)
  142. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='抽奖记录表';