diff --git a/ruoyi-admin/src/main/java/com/ruoyi/authentication/domain/SysActivity.java b/ruoyi-admin/src/main/java/com/ruoyi/authentication/domain/SysActivity.java
new file mode 100644
index 0000000..ce2f706
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/authentication/domain/SysActivity.java
@@ -0,0 +1,27 @@
+package com.ruoyi.authentication.domain;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class SysActivity extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+    private Long activityId;
+    private String activityName;
+    private Integer rewardBonus;
+    private String conditionValue; // 上传：如“100GB”，下载：torrent_id
+    private Date startTime;
+    private Date endTime;
+    private Integer status; // 1=进行中，0=已结束
+    private String activityType; // UPLOAD, DOWNLOAD
+
+    @Data
+    public static class LeaderboardEntry {
+        private Long userId;
+        private String userName;
+        private Integer score;
+    }
+}
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/authentication/domain/SysActivityRecord.java b/ruoyi-admin/src/main/java/com/ruoyi/authentication/domain/SysActivityRecord.java
new file mode 100644
index 0000000..6a85303
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/authentication/domain/SysActivityRecord.java
@@ -0,0 +1,17 @@
+package com.ruoyi.authentication.domain;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class SysActivityRecord extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+    private Long recordId;
+    private Long activityId;
+    private Long userId;
+    private Integer rewardBonus;
+    private Date completeTime;
+}
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserInvite.java b/ruoyi-admin/src/main/java/com/ruoyi/authentication/domain/SysUserInvite.java
similarity index 85%
rename from ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserInvite.java
rename to ruoyi-admin/src/main/java/com/ruoyi/authentication/domain/SysUserInvite.java
index 3432587..984f485 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserInvite.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/authentication/domain/SysUserInvite.java
@@ -1,4 +1,4 @@
-package com.ruoyi.system.domain;
+package com.ruoyi.authentication.domain;
 
 import com.ruoyi.common.core.domain.BaseEntity;
 import lombok.Data;
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/authentication/domain/UserScore.java b/ruoyi-admin/src/main/java/com/ruoyi/authentication/domain/UserScore.java
index f7049d1..eb60ec5 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/authentication/domain/UserScore.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/authentication/domain/UserScore.java
@@ -1,11 +1,11 @@
 package com.ruoyi.authentication.domain;
 
-import java.util.Date;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
 import com.ruoyi.common.annotation.Excel;
 import com.ruoyi.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import java.util.Date;
 
 /**
  * 【请填写功能名称】对象 user_score
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/authentication/mapper/SysActivityMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/authentication/mapper/SysActivityMapper.java
new file mode 100644
index 0000000..5716e95
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/authentication/mapper/SysActivityMapper.java
@@ -0,0 +1,13 @@
+package com.ruoyi.authentication.mapper;
+
+import com.ruoyi.authentication.domain.SysActivity;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface SysActivityMapper {
+    List<SysActivity> selectActivityList(SysActivity activity);
+    SysActivity selectActivityById(Long activityId);
+    List<SysActivity.LeaderboardEntry> selectLeaderboard();
+}
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/authentication/mapper/SysActivityRecordMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/authentication/mapper/SysActivityRecordMapper.java
new file mode 100644
index 0000000..87cf1a2
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/authentication/mapper/SysActivityRecordMapper.java
@@ -0,0 +1,11 @@
+package com.ruoyi.authentication.mapper;
+
+import com.ruoyi.authentication.domain.SysActivityRecord;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface SysActivityRecordMapper {
+    SysActivityRecord checkParticipation(Long activityId, Long userId);
+    int insertActivityRecord(SysActivityRecord record);
+    int checkTorrentDownload(Long userId, String torrentId);
+}
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/authentication/mapper/SysUserInviteMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/authentication/mapper/SysUserInviteMapper.java
new file mode 100644
index 0000000..93f1af0
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/authentication/mapper/SysUserInviteMapper.java
@@ -0,0 +1,10 @@
+package com.ruoyi.authentication.mapper;
+
+import com.ruoyi.authentication.domain.SysUserInvite;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface SysUserInviteMapper {
+    SysUserInvite selectInviteByUserId(Long userId);
+    SysUserInvite selectInviteByCode(String code);
+}
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/authentication/mapper/UserScoreMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/authentication/mapper/UserScoreMapper.java
index 4c15e5e..6a704a5 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/authentication/mapper/UserScoreMapper.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/authentication/mapper/UserScoreMapper.java
@@ -1,7 +1,9 @@
 package com.ruoyi.authentication.mapper;
 
-import java.util.List;
 import com.ruoyi.authentication.domain.UserScore;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
 
 /**
  * 【请填写功能名称】Mapper接口
@@ -9,6 +11,7 @@
  * @author ruoyi
  * @date 2025-04-25
  */
+@Mapper
 public interface UserScoreMapper 
 {
     /**
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/authentication/service/ISysActivityService.java b/ruoyi-admin/src/main/java/com/ruoyi/authentication/service/ISysActivityService.java
new file mode 100644
index 0000000..985fa28
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/authentication/service/ISysActivityService.java
@@ -0,0 +1,12 @@
+package com.ruoyi.authentication.service;
+
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.authentication.domain.SysActivity;
+
+import java.util.List;
+
+public interface ISysActivityService {
+    List<SysActivity> selectActivityList(SysActivity activity);
+    AjaxResult participateActivity(Long activityId, Long userId);
+    List<SysActivity.LeaderboardEntry> getLeaderboard();
+}
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/authentication/service/ISysUserInviteService.java b/ruoyi-admin/src/main/java/com/ruoyi/authentication/service/ISysUserInviteService.java
new file mode 100644
index 0000000..bb71552
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/authentication/service/ISysUserInviteService.java
@@ -0,0 +1,8 @@
+package com.ruoyi.authentication.service;
+
+import com.ruoyi.authentication.domain.SysUserInvite;
+
+public interface ISysUserInviteService {
+    SysUserInvite getInviteCode(Long userId);
+    SysUserInvite getUserByInviteCode(String code);
+}
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/authentication/service/IUserScoreService.java b/ruoyi-admin/src/main/java/com/ruoyi/authentication/service/IUserScoreService.java
index b93e41e..b8fce0e 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/authentication/service/IUserScoreService.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/authentication/service/IUserScoreService.java
@@ -1,9 +1,9 @@
 package com.ruoyi.authentication.service;
 
-import java.util.List;
-
 import com.ruoyi.authentication.domain.UserScore;
 
+import java.util.List;
+
 /**
  * 【请填写功能名称】Service接口
  * 
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/authentication/service/impl/SysActivityServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/authentication/service/impl/SysActivityServiceImpl.java
new file mode 100644
index 0000000..fe82294
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/authentication/service/impl/SysActivityServiceImpl.java
@@ -0,0 +1,141 @@
+package com.ruoyi.authentication.service.impl;
+
+import com.ruoyi.authentication.domain.UserScore;
+import com.ruoyi.authentication.service.IUserScoreService;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.authentication.domain.SysActivity;
+import com.ruoyi.authentication.domain.SysActivityRecord;
+import com.ruoyi.system.domain.SysUserMessage;
+import com.ruoyi.authentication.mapper.SysActivityMapper;
+import com.ruoyi.authentication.mapper.SysActivityRecordMapper;
+import com.ruoyi.authentication.service.ISysActivityService;
+import com.ruoyi.system.service.ISysUserMessageService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+import java.util.List;
+
+@Service
+public class SysActivityServiceImpl implements ISysActivityService {
+    @Autowired
+    private SysActivityMapper activityMapper;
+    @Autowired
+    private SysActivityRecordMapper activityRecordMapper;
+    @Autowired
+    private IUserScoreService userScoreService;
+    @Autowired
+    private ISysUserMessageService messageService;
+
+    @Override
+    public List<SysActivity> selectActivityList(SysActivity activity) {
+        return activityMapper.selectActivityList(activity);
+    }
+
+    @Override
+    @Transactional
+    public AjaxResult participateActivity(Long activityId, Long userId) {
+        SysActivity activity = activityMapper.selectActivityById(activityId);
+        if (activity == null || activity.getStatus() == 0) {
+            return AjaxResult.error("活动不存在或已结束");
+        }
+        if (activity.getEndTime() != null && activity.getEndTime().before(new Date())) {
+            return AjaxResult.error("活动已过期");
+        }
+        if (activityRecordMapper.checkParticipation(activityId, userId) != null) {
+            return AjaxResult.error("已参与过该活动");
+        }
+
+        // 验证任务完成
+        boolean completed = checkTaskCompletion(activity, userId);
+        if (!completed) {
+            return AjaxResult.error("未满足任务条件");
+        }
+
+        // 记录参与
+        SysActivityRecord record = new SysActivityRecord();
+        record.setActivityId(activityId);
+        record.setUserId(userId);
+        record.setRewardBonus(activity.getRewardBonus());
+        activityRecordMapper.insertActivityRecord(record);
+
+        // 更新积分（仅更新 bonus，score 由生成列自动计算）
+        UserScore userScore = userScoreService.selectUserScoreByUserId(userId);
+        if (userScore != null) {
+            userScore.setBonus(userScore.getBonus() + activity.getRewardBonus().longValue()); // Integer 转 Long
+            userScoreService.updateUserScore(userScore);
+        } else {
+            userScore = new UserScore();
+            userScore.setUserId(userId);
+            userScore.setUploaded("0"); // String 类型
+            userScore.setDownloaded("0"); // String 类型
+            userScore.setBonus(activity.getRewardBonus().longValue()); // Integer 转 Long
+            userScoreService.insertUserScore(userScore);
+        }
+
+        // 发送通知
+        SysUserMessage message = new SysUserMessage();
+        message.setSenderId(0L); // 系统用户
+        message.setReceiverId(userId);
+        message.setContent("您完成了活动[" + activity.getActivityName() + "]，获得" + activity.getRewardBonus() + "积分！");
+        messageService.sendMessage(message);
+
+        return AjaxResult.success("任务完成，获得" + activity.getRewardBonus() + "积分");
+    }
+
+    @Override
+    public List<SysActivity.LeaderboardEntry> getLeaderboard() {
+        return activityMapper.selectLeaderboard();
+    }
+
+    private boolean checkTaskCompletion(SysActivity activity, Long userId) {
+        UserScore userScore = userScoreService.selectUserScoreByUserId(userId);
+        if (userScore == null) return false;
+
+        if ("UPLOAD".equals(activity.getActivityType())) {
+            long conditionValue = parseDataSize(activity.getConditionValue());
+            long uploadedValue = parseUserDataSize(userScore.getUploaded());
+            return uploadedValue >= conditionValue; // long 与 long 比较
+        } else if ("DOWNLOAD".equals(activity.getActivityType())) {
+            return checkTorrentDownload(userId, activity.getConditionValue());
+        }
+        return false;
+    }
+
+    private long parseDataSize(String data) {
+        if (data == null || data.isEmpty()) return 0;
+        try {
+            data = data.toUpperCase();
+            long value = Long.parseLong(data.replaceAll("[^0-9]", ""));
+            if (data.endsWith("KB")) return value * 1024;
+            if (data.endsWith("MB")) return value * 1024 * 1024;
+            if (data.endsWith("GB")) return value * 1024 * 1024 * 1024;
+            return value;
+        } catch (NumberFormatException e) {
+            return 0;
+        }
+    }
+
+    private long parseUserDataSize(String data) {
+        if (data == null || data.isEmpty()) return 0;
+        try {
+            // 支持格式：纯数字（如 "1073741824"）或带单位（如 "1GB"）
+            data = data.toUpperCase();
+            if (data.matches("\\d+")) {
+                return Long.parseLong(data); // 纯数字，视为字节数
+            }
+            long value = Long.parseLong(data.replaceAll("[^0-9]", ""));
+            if (data.endsWith("KB")) return value * 1024;
+            if (data.endsWith("MB")) return value * 1024 * 1024;
+            if (data.endsWith("GB")) return value * 1024 * 1024 * 1024;
+            return value;
+        } catch (NumberFormatException e) {
+            return 0;
+        }
+    }
+
+    private boolean checkTorrentDownload(Long userId, String torrentId) {
+        return activityRecordMapper.checkTorrentDownload(userId, torrentId) > 0;
+    }
+}
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/authentication/service/impl/SysUserInviteServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/authentication/service/impl/SysUserInviteServiceImpl.java
new file mode 100644
index 0000000..1e63a0d
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/authentication/service/impl/SysUserInviteServiceImpl.java
@@ -0,0 +1,49 @@
+package com.ruoyi.authentication.service.impl;
+
+import com.ruoyi.authentication.domain.UserScore;
+import com.ruoyi.authentication.service.IUserScoreService;
+import com.ruoyi.authentication.domain.SysUserInvite;
+import com.ruoyi.authentication.mapper.SysUserInviteMapper;
+import com.ruoyi.authentication.service.ISysUserInviteService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service
+public class SysUserInviteServiceImpl implements ISysUserInviteService {
+    @Autowired
+    private SysUserInviteMapper inviteMapper;
+
+    @Autowired
+    private IUserScoreService userScoreService;
+
+    @Override
+    public SysUserInvite getInviteCode(Long userId) {
+        return inviteMapper.selectInviteByUserId(userId);
+    }
+
+    @Override
+    @Transactional
+    public SysUserInvite getUserByInviteCode(String code) {
+        SysUserInvite invite = inviteMapper.selectInviteByCode(code);
+        if (invite != null) {
+            // 更新邀请人的积分
+            UserScore userScore = userScoreService.selectUserScoreByUserId(invite.getUserId());
+            if (userScore != null) {
+                userScore.setBonus(userScore.getBonus() + 10);
+                userScore.setScore(userScore.getScore() + 10);
+                userScoreService.updateUserScore(userScore);
+            } else {
+                // 如果没有积分记录，创建新记录
+                userScore = new UserScore();
+                userScore.setUserId(invite.getUserId());
+                userScore.setUploaded("0");
+                userScore.setDownloaded("0");
+                userScore.setBonus(10L);
+                userScore.setScore(10L);
+                userScoreService.insertUserScore(userScore);
+            }
+        }
+        return invite;
+    }
+}
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/authentication/service/impl/UserScoreServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/authentication/service/impl/UserScoreServiceImpl.java
index 4a41923..ca846a8 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/authentication/service/impl/UserScoreServiceImpl.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/authentication/service/impl/UserScoreServiceImpl.java
@@ -1,12 +1,12 @@
 package com.ruoyi.authentication.service.impl;
 
-import java.util.List;
-
 import com.ruoyi.authentication.domain.UserScore;
 import com.ruoyi.authentication.mapper.UserScoreMapper;
+import com.ruoyi.authentication.service.IUserScoreService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import com.ruoyi.authentication.service.IUserScoreService;
+
+import java.util.List;
 
 /**
  * 【请填写功能名称】Service业务层处理
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysActivityController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysActivityController.java
new file mode 100644
index 0000000..e78085c
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysActivityController.java
@@ -0,0 +1,41 @@
+package com.ruoyi.web.controller.system;
+
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.authentication.domain.SysActivity;
+import com.ruoyi.authentication.service.ISysActivityService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/system/activity")
+public class SysActivityController extends BaseController {
+    @Autowired
+    private ISysActivityService activityService;
+
+    @PreAuthorize("@ss.hasPermi('system:activity:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(SysActivity activity) {
+        startPage();
+        List<SysActivity> list = activityService.selectActivityList(activity);
+        return getDataTable(list);
+    }
+
+    @PreAuthorize("@ss.hasPermi('system:activity:participate')")
+    @PostMapping("/participate/{activityId}")
+    public AjaxResult participate(@PathVariable Long activityId) {
+        return activityService.participateActivity(activityId, getUserId());
+    }
+
+    @PreAuthorize("@ss.hasPermi('system:activity:leaderboard')")
+    @GetMapping("/leaderboard")
+    public TableDataInfo leaderboard() {
+        startPage();
+        List<SysActivity.LeaderboardEntry> list = activityService.getLeaderboard();
+        return getDataTable(list);
+    }
+}
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserInviteController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserInviteController.java
index eb22abd..7ef246d 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserInviteController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserInviteController.java
@@ -2,8 +2,8 @@
 
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
-import com.ruoyi.system.domain.SysUserInvite;
-import com.ruoyi.system.service.ISysUserInviteService;
+import com.ruoyi.authentication.domain.SysUserInvite;
+import com.ruoyi.authentication.service.ISysUserInviteService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
diff --git a/ruoyi-admin/src/main/resources/mapper/system/SysActivityMapper.xml b/ruoyi-admin/src/main/resources/mapper/system/SysActivityMapper.xml
new file mode 100644
index 0000000..c09494d
--- /dev/null
+++ b/ruoyi-admin/src/main/resources/mapper/system/SysActivityMapper.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.authentication.mapper.SysActivityMapper">
+    <resultMap id="ActivityMap" type="com.ruoyi.authentication.domain.SysActivity">
+        <id property="activityId" column="activity_id"/>
+        <result property="activityName" column="activity_name"/>
+        <result property="rewardBonus" column="reward_bonus"/>
+        <result property="conditionValue" column="condition_value"/>
+        <result property="startTime" column="start_time"/>
+        <result property="endTime" column="end_time"/>
+        <result property="status" column="status"/>
+        <result property="activityType" column="activity_type"/>
+    </resultMap>
+
+    <resultMap id="LeaderboardMap" type="com.ruoyi.authentication.domain.SysActivity$LeaderboardEntry">
+        <result property="userId" column="user_id"/>
+        <result property="userName" column="user_name"/>
+        <result property="score" column="score"/>
+    </resultMap>
+
+    <select id="selectActivityList" resultMap="ActivityMap">
+        select activity_id, activity_name, reward_bonus, condition_value, start_time, end_time, status, activity_type
+        from activity
+        where 1=1
+        <if test="activityType != null and activityType != ''">and activity_type = #{activityType}</if>
+        <if test="status != null">and status = #{status}</if>
+    </select>
+
+    <select id="selectActivityById" resultMap="ActivityMap">
+        select activity_id, activity_name, reward_bonus, condition_value, start_time, end_time, status, activity_type
+        from activity
+        where activity_id = #{activityId}
+    </select>
+
+    <select id="selectLeaderboard" resultMap="LeaderboardMap">
+        select u.user_id, u.user_name, s.score
+        from sys_user u
+                 join user_score s on u.user_id = s.user_id
+        order by s.score desc
+            limit 100
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/resources/mapper/system/SysActivityRecordMapper.xml b/ruoyi-admin/src/main/resources/mapper/system/SysActivityRecordMapper.xml
new file mode 100644
index 0000000..f260cd1
--- /dev/null
+++ b/ruoyi-admin/src/main/resources/mapper/system/SysActivityRecordMapper.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.authentication.mapper.SysActivityRecordMapper">
+    <resultMap id="ActivityRecordMap" type="com.ruoyi.authentication.domain.SysActivityRecord">
+        <id property="recordId" column="record_id"/>
+        <result property="activityId" column="activity_id"/>
+        <result property="userId" column="user_id"/>
+        <result property="rewardBonus" column="reward_bonus"/>
+        <result property="completeTime" column="complete_time"/>
+    </resultMap>
+
+    <select id="checkParticipation" resultMap="ActivityRecordMap">
+        select record_id, activity_id, user_id, reward_bonus, complete_time
+        from activity_record
+        where activity_id = #{activityId} and user_id = #{userId}
+    </select>
+
+    <insert id="insertActivityRecord">
+        insert into activity_record (activity_id, user_id, reward_bonus, complete_time)
+        values (#{activityId}, #{userId}, #{rewardBonus}, sysdate())
+    </insert>
+
+    <select id="checkTorrentDownload" resultType="int">
+        select count(*) from torrent_download
+        where user_id = #{userId} and torrent_id = #{torrentId}
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/ruoyi-system/src/main/resources/mapper/system/SysUserInviteMapper.xml b/ruoyi-admin/src/main/resources/mapper/system/SysUserInviteMapper.xml
similarity index 88%
rename from ruoyi-system/src/main/resources/mapper/system/SysUserInviteMapper.xml
rename to ruoyi-admin/src/main/resources/mapper/system/SysUserInviteMapper.xml
index 82da470..5059af0 100644
--- a/ruoyi-system/src/main/resources/mapper/system/SysUserInviteMapper.xml
+++ b/ruoyi-admin/src/main/resources/mapper/system/SysUserInviteMapper.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ruoyi.system.mapper.SysUserInviteMapper">
-    <resultMap id="SysUserInviteMap" type="com.ruoyi.system.domain.SysUserInvite">
+    <resultMap id="SysUserInviteMap" type="com.ruoyi.authentication.domain.SysUserInvite">
         <id property="codeId" column="code_id"/>
         <result property="code" column="code"/>
         <result property="userId" column="user_id"/>
diff --git a/ruoyi-system/pom.xml b/ruoyi-system/pom.xml
index a10ba16..d2a2482 100644
--- a/ruoyi-system/pom.xml
+++ b/ruoyi-system/pom.xml
@@ -47,6 +47,7 @@
             <scope>provided</scope>
         </dependency>
 
+
     </dependencies>
 
 </project>
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserInviteMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserInviteMapper.java
deleted file mode 100644
index b0239ca..0000000
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserInviteMapper.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package com.ruoyi.system.mapper;
-
-import com.ruoyi.system.domain.SysUserInvite;
-
-public interface SysUserInviteMapper {
-    SysUserInvite selectInviteByUserId(Long userId);
-    SysUserInvite selectInviteByCode(String code);
-}
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserInviteService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserInviteService.java
deleted file mode 100644
index d5b04f4..0000000
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserInviteService.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package com.ruoyi.system.service;
-
-import com.ruoyi.system.domain.SysUserInvite;
-
-public interface ISysUserInviteService {
-    SysUserInvite getInviteCode(Long userId);
-    SysUserInvite getUserByInviteCode(String code);
-}
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserInviteServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserInviteServiceImpl.java
deleted file mode 100644
index e499a5a..0000000
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserInviteServiceImpl.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.ruoyi.system.service.impl;
-
-import com.ruoyi.system.domain.SysUserInvite;
-import com.ruoyi.system.mapper.SysUserInviteMapper;
-import com.ruoyi.system.service.ISysUserInviteService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-@Service
-public class SysUserInviteServiceImpl implements ISysUserInviteService {
-    @Autowired
-    private SysUserInviteMapper inviteMapper;
-
-    @Override
-    public SysUserInvite getInviteCode(Long userId) {
-        return inviteMapper.selectInviteByUserId(userId);
-    }
-
-    @Override
-    public SysUserInvite getUserByInviteCode(String code) {
-        return inviteMapper.selectInviteByCode(code);
-    }
-}
\ No newline at end of file
