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-admin/src/main/java/com/ruoyi/authentication/domain/SysUserInvite.java b/ruoyi-admin/src/main/java/com/ruoyi/authentication/domain/SysUserInvite.java
new file mode 100644
index 0000000..984f485
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/authentication/domain/SysUserInvite.java
@@ -0,0 +1,15 @@
+package com.ruoyi.authentication.domain;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+
+@Data
+public class SysUserInvite extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+    private Long codeId;
+
+    private String code;
+
+    private Long userId;
+}
\ No newline at end of file
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-admin/src/main/resources/mapper/system/SysUserInviteMapper.xml b/ruoyi-admin/src/main/resources/mapper/system/SysUserInviteMapper.xml
new file mode 100644
index 0000000..5059af0
--- /dev/null
+++ b/ruoyi-admin/src/main/resources/mapper/system/SysUserInviteMapper.xml
@@ -0,0 +1,21 @@
+<?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.authentication.domain.SysUserInvite">
+        <id property="codeId" column="code_id"/>
+        <result property="code" column="code"/>
+        <result property="userId" column="user_id"/>
+    </resultMap>
+
+    <select id="selectInviteByUserId" resultMap="SysUserInviteMap">
+        select code_id, code, user_id
+        from invite_codes
+        where user_id = #{userId}
+    </select>
+
+    <select id="selectInviteByCode" resultMap="SysUserInviteMap">
+        select code_id, code, user_id
+        from invite_codes
+        where code = #{code}
+    </select>
+</mapper>
\ No newline at end of file
