Преглед на файлове

抽奖活动,邀请有礼活动,签到活动这几种更新

liuchengsen преди 1 месец
родител
ревизия
f6a5c4ca2f

+ 2 - 1
zhijiayun-activity/src/main/java/com/xuekairui/activity/controller/AdminActivityController.java

@@ -1,5 +1,6 @@
 package com.xuekairui.activity.controller;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.xuekairui.activity.dto.ActivityCheckinCycleConfigRequest;
 import com.xuekairui.activity.dto.ActivityInviteConfigRequest;
 import com.xuekairui.activity.dto.ActivityLotteryConfigRequest;
@@ -114,7 +115,7 @@ public class AdminActivityController {
      * GET /api/admin/activity/lottery/records?page=1&size=20&userId=1
      */
     @GetMapping("/lottery/records")
-    public Result<com.baomidou.mybatisplus.extension.plugins.pagination.Page<ActivityLotteryRecord>> listLotteryRecords(
+    public Result<Page<ActivityLotteryRecord>> listLotteryRecords(
             @RequestParam(defaultValue = "1") int page,
             @RequestParam(defaultValue = "20") int size,
             @RequestParam(required = false) Long userId) {

+ 4 - 3
zhijiayun-activity/src/main/java/com/xuekairui/activity/service/ActivityLotteryService.java

@@ -2,6 +2,7 @@ package com.xuekairui.activity.service;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.xuekairui.activity.dto.ActivityLotteryConfigRequest;
 import com.xuekairui.activity.dto.ActivityLotteryPrizeRequest;
 import com.xuekairui.activity.dto.ActivityLotteryResultResponse;
@@ -257,10 +258,10 @@ public class ActivityLotteryService {
     /**
      * 运营端:分页查询所有用户抽奖记录(支持按用户ID筛选)
      */
-    public com.baomidou.mybatisplus.extension.plugins.pagination.Page<ActivityLotteryRecord> listAllRecords(
+    public Page<ActivityLotteryRecord> listAllRecords(
             Long userId, int pageNum, int pageSize) {
-        com.baomidou.mybatisplus.extension.plugins.pagination.Page<ActivityLotteryRecord> page =
-                new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(pageNum, pageSize);
+        Page<ActivityLotteryRecord> page =
+                new Page<>(pageNum, pageSize);
         LambdaQueryWrapper<ActivityLotteryRecord> wrapper = new LambdaQueryWrapper<>();
         if (userId != null) {
             wrapper.eq(ActivityLotteryRecord::getUserId, userId);

+ 8 - 0
zhijiayun-gateway/src/main/resources/db/migration-v10.sql

@@ -7,11 +7,19 @@
 CREATE TABLE IF NOT EXISTS `t_checkin_config` (
     `id`                   BIGINT        NOT NULL AUTO_INCREMENT COMMENT '主键ID',
     `enabled`              TINYINT       NOT NULL DEFAULT 1 COMMENT '是否启用签到:0-停用 1-启用',
+    `start_time`           DATETIME      DEFAULT NULL COMMENT '活动开始时间',
+    `end_time`             DATETIME      DEFAULT NULL COMMENT '活动结束时间',
     `reward_type`          VARCHAR(20)   NOT NULL DEFAULT 'MEMBERSHIP' COMMENT '奖励类型:MEMBERSHIP-会员天数',
+    `reward_level`         VARCHAR(20)   NOT NULL DEFAULT 'PRO' COMMENT '奖励会员等级',
     `base_reward`          INT           NOT NULL DEFAULT 1 COMMENT '基础签到奖励会员天数(每日)',
     `continuous_reward`    INT           NOT NULL DEFAULT 1 COMMENT '连续签到额外会员天数(满足连续天数后每日叠加)',
     `continuous_threshold` INT           NOT NULL DEFAULT 7 COMMENT '连续签到额外奖励触发阈值(天)',
     `continuous_cap`       INT           NOT NULL DEFAULT 30 COMMENT '连续签到最大累计额外天数上限',
+    `max_reward_count`     INT           NOT NULL DEFAULT 3 COMMENT '每用户最多领取次数',
+    `cycle_mode`           VARCHAR(20)   NOT NULL DEFAULT 'FRI_THU' COMMENT '周期模式默认值',
+    `required_days`        INT           NOT NULL DEFAULT 4 COMMENT '周期需签到天数默认值',
+    `reward_mode`          VARCHAR(20)   NOT NULL DEFAULT 'CUMULATIVE' COMMENT '达标模式:CUMULATIVE-累计/CONSECUTIVE-连续',
+    `reward_days`          INT           NOT NULL DEFAULT 7 COMMENT '周期达标奖励天数默认值',
     `remark`               VARCHAR(500)  DEFAULT NULL COMMENT '备注说明',
     `create_time`          DATETIME      DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
     `update_time`          DATETIME      DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',

+ 55 - 24
zhijiayun-gateway/src/main/resources/db/migration-v12.sql

@@ -8,30 +8,61 @@
 -- ============================================
 
 -- 1. 签到配置表字段变更(保留旧字段兼容,增加新字段)
-ALTER TABLE `t_checkin_config`
-    ADD COLUMN IF NOT EXISTS `start_time`        DATETIME     DEFAULT NULL COMMENT '活动开始时间' AFTER `enabled`,
-    ADD COLUMN IF NOT EXISTS `end_time`          DATETIME     DEFAULT NULL COMMENT '活动结束时间' AFTER `start_time`,
-    ADD COLUMN IF NOT EXISTS `reward_level`      VARCHAR(20)  NOT NULL DEFAULT 'PRO' COMMENT '奖励会员等级' AFTER `reward_type`,
-    ADD COLUMN IF NOT EXISTS `max_reward_count`  INT          NOT NULL DEFAULT 3 COMMENT '每用户最多领取次数' AFTER `continuous_cap`,
-    ADD COLUMN IF NOT EXISTS `cycle_mode`        VARCHAR(20)  NOT NULL DEFAULT 'FRI_THU' COMMENT '周期模式默认值' AFTER `max_reward_count`,
-    ADD COLUMN IF NOT EXISTS `required_days`     INT          NOT NULL DEFAULT 4 COMMENT '周期需签到天数默认值' AFTER `cycle_mode`,
-    ADD COLUMN IF NOT EXISTS `reward_mode`       VARCHAR(20)  NOT NULL DEFAULT 'CUMULATIVE' COMMENT '达标模式:CUMULATIVE-累计/CONSECUTIVE-连续' AFTER `required_days`;
-
--- 更新已有默认配置
-UPDATE `t_checkin_config` SET
-    `start_time` = COALESCE(`start_time`, '2026-07-10 00:00:00'),
-    `end_time` = COALESCE(`end_time`, '2026-07-31 23:59:59'),
-    `reward_level` = COALESCE(`reward_level`, 'PRO'),
-    `max_reward_count` = COALESCE(`max_reward_count`, 3),
-    `cycle_mode` = COALESCE(`cycle_mode`, 'FRI_THU'),
-    `required_days` = COALESCE(`required_days`, 4),
-    `reward_mode` = COALESCE(`reward_mode`, 'CUMULATIVE')
-WHERE `id` = 1;
-
--- 2. 签到记录表新增 period_id 字段
-ALTER TABLE `t_checkin_record`
-    ADD COLUMN IF NOT EXISTS `period_id` BIGINT DEFAULT NULL COMMENT '所属周期ID' AFTER `checkin_date`,
-    ADD INDEX IF NOT EXISTS `idx_period` (`period_id`);
+-- start_time
+SET @col_exists = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
+    WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 't_checkin_config' AND COLUMN_NAME = 'start_time');
+SET @sql = IF(@col_exists = 0, "ALTER TABLE `t_checkin_config` ADD COLUMN `start_time` DATETIME DEFAULT NULL COMMENT '活动开始时间' AFTER `enabled`", 'SELECT 1');
+PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
+
+-- end_time
+SET @col_exists = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
+    WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 't_checkin_config' AND COLUMN_NAME = 'end_time');
+SET @sql = IF(@col_exists = 0, "ALTER TABLE `t_checkin_config` ADD COLUMN `end_time` DATETIME DEFAULT NULL COMMENT '活动结束时间' AFTER `start_time`", 'SELECT 1');
+PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
+
+-- reward_level
+SET @col_exists = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
+    WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 't_checkin_config' AND COLUMN_NAME = 'reward_level');
+SET @sql = IF(@col_exists = 0, "ALTER TABLE `t_checkin_config` ADD COLUMN `reward_level` VARCHAR(20) NOT NULL DEFAULT 'PRO' COMMENT '奖励会员等级' AFTER `reward_type`", 'SELECT 1');
+PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
+
+-- max_reward_count
+SET @col_exists = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
+    WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 't_checkin_config' AND COLUMN_NAME = 'max_reward_count');
+SET @sql = IF(@col_exists = 0, "ALTER TABLE `t_checkin_config` ADD COLUMN `max_reward_count` INT NOT NULL DEFAULT 3 COMMENT '每用户最多领取次数' AFTER `continuous_cap`", 'SELECT 1');
+PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
+
+-- cycle_mode
+SET @col_exists = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
+    WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 't_checkin_config' AND COLUMN_NAME = 'cycle_mode');
+SET @sql = IF(@col_exists = 0, "ALTER TABLE `t_checkin_config` ADD COLUMN `cycle_mode` VARCHAR(20) NOT NULL DEFAULT 'FRI_THU' COMMENT '周期模式默认值' AFTER `max_reward_count`", 'SELECT 1');
+PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
+
+-- required_days
+SET @col_exists = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
+    WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 't_checkin_config' AND COLUMN_NAME = 'required_days');
+SET @sql = IF(@col_exists = 0, "ALTER TABLE `t_checkin_config` ADD COLUMN `required_days` INT NOT NULL DEFAULT 4 COMMENT '周期需签到天数默认值' AFTER `cycle_mode`", 'SELECT 1');
+PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
+
+-- reward_mode
+SET @col_exists = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
+    WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 't_checkin_config' AND COLUMN_NAME = 'reward_mode');
+SET @sql = IF(@col_exists = 0, "ALTER TABLE `t_checkin_config` ADD COLUMN `reward_mode` VARCHAR(20) NOT NULL DEFAULT 'CUMULATIVE' COMMENT '达标模式:CUMULATIVE-累计/CONSECUTIVE-连续' AFTER `required_days`", 'SELECT 1');
+PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
+
+
+
+
+-- 2. 签到记录表新增 period_id 字段及索引
+SET @col_exists = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
+    WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 't_checkin_record' AND COLUMN_NAME = 'period_id');
+SET @sql = IF(@col_exists = 0, "ALTER TABLE `t_checkin_record` ADD COLUMN `period_id` BIGINT DEFAULT NULL COMMENT '所属周期ID' AFTER `checkin_date`", 'SELECT 1');
+PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
+
+SET @idx_exists = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS
+    WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 't_checkin_record' AND INDEX_NAME = 'idx_period');
+SET @sql = IF(@idx_exists = 0, "ALTER TABLE `t_checkin_record` ADD INDEX `idx_period` (`period_id`)", 'SELECT 1');
+PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
 
 -- 3. 新建签到周期表
 CREATE TABLE IF NOT EXISTS `t_checkin_period` (

+ 0 - 1
zhijiayun-test/src/main/resources/static/activity-test.html

@@ -691,7 +691,6 @@ const FIELD_DESC = {
         ['data.records[].rewardAmount', 'Integer', '奖励数量'],
         ['data.records[].rewardDays', 'Integer', '会员奖励天数'],
         ['data.records[].rewardLevel', 'String', '会员奖励等级'],
-        ['data.records[].win', 'Boolean', '是否中奖(EMPTY=未中奖)'],
         ['data.records[].createTime', 'DateTime', '抽奖时间'],
         ['data.total', 'Long', '总记录数'],
         ['data.current', 'Long', '当前页'],