Merge "feat(invite code):添加邀请码功能,每个用户一个唯一的邀请码。当有新用户注册填写邀请码后,会为对应的用户进行奖励"
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
new file mode 100644
index 0000000..eb22abd
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserInviteController.java
@@ -0,0 +1,36 @@
+package com.ruoyi.web.controller.system;
+
+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 org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequestMapping("/system/user/invite")
+public class SysUserInviteController extends BaseController {
+    @Autowired
+    private ISysUserInviteService inviteService;
+
+    @PreAuthorize("@ss.hasPermi('system:user:invite:query')")
+    @GetMapping("/code")
+    public AjaxResult getInviteCode() {
+        SysUserInvite invite = inviteService.getInviteCode(getUserId());
+        if (invite == null) {
+            return AjaxResult.error("未找到邀请码");
+        }
+        return AjaxResult.success(invite.getCode());
+    }
+
+    @PreAuthorize("@ss.hasPermi('system:user:invite:query')")
+    @GetMapping("/user/{code}")
+    public AjaxResult getUserByInviteCode(@PathVariable String code) {
+        SysUserInvite invite = inviteService.getUserByInviteCode(code);
+        if (invite == null) {
+            return AjaxResult.error("邀请码不存在");
+        }
+        return AjaxResult.success(invite.getUserId());
+    }
+}
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserInvite.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserInvite.java
new file mode 100644
index 0000000..3432587
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserInvite.java
@@ -0,0 +1,15 @@
+package com.ruoyi.system.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-system/src/main/java/com/ruoyi/system/mapper/SysUserInviteMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserInviteMapper.java
new file mode 100644
index 0000000..b0239ca
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserInviteMapper.java
@@ -0,0 +1,8 @@
+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
new file mode 100644
index 0000000..d5b04f4
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserInviteService.java
@@ -0,0 +1,8 @@
+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
new file mode 100644
index 0000000..e499a5a
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserInviteServiceImpl.java
@@ -0,0 +1,23 @@
+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
diff --git a/ruoyi-system/src/main/resources/mapper/system/SysUserInviteMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysUserInviteMapper.xml
new file mode 100644
index 0000000..82da470
--- /dev/null
+++ b/ruoyi-system/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.system.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