From 8ea6a7dd1fcdbd4e22c564ed63a5a8023510161a Mon Sep 17 00:00:00 2001
From: zjk <852185829@qq.com>
Date: 星期三, 14 十月 2026 08:56:45 +0800
Subject: [PATCH] feat: 新增实名认证、企业认证、我的邀请与头像上传功能

---
 hugray-server/ruoyi-modules/ruoyi-user/src/main/java/com/ruoyi/user/controller/AccountProfileController.java |  144 +++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 143 insertions(+), 1 deletions(-)

diff --git a/hugray-server/ruoyi-modules/ruoyi-user/src/main/java/com/ruoyi/user/controller/AccountProfileController.java b/hugray-server/ruoyi-modules/ruoyi-user/src/main/java/com/ruoyi/user/controller/AccountProfileController.java
index c2f4ea8..72258a6 100644
--- a/hugray-server/ruoyi-modules/ruoyi-user/src/main/java/com/ruoyi/user/controller/AccountProfileController.java
+++ b/hugray-server/ruoyi-modules/ruoyi-user/src/main/java/com/ruoyi/user/controller/AccountProfileController.java
@@ -1,12 +1,27 @@
 package com.ruoyi.user.controller;
 
+import java.util.List;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.web.controller.BaseController;
+import com.ruoyi.common.core.web.page.TableDataInfo;
 import com.ruoyi.common.security.utils.SecurityUtils;
+import com.ruoyi.user.domain.dto.AccountCertificationApplyDto;
+import com.ruoyi.user.domain.dto.AccountUserAvatarDto;
+import com.ruoyi.user.domain.dto.CompanyCertificationApplyDto;
+import com.ruoyi.user.domain.vo.AccountCertificationStatusVo;
+import com.ruoyi.user.domain.vo.AccountInviteeVo;
+import com.ruoyi.user.domain.vo.AccountReferrerVo;
 import com.ruoyi.user.domain.vo.AccountUserInfoVo;
+import com.ruoyi.user.domain.vo.CompanyCertificationStatusVo;
+import com.ruoyi.user.domain.vo.InviteCodeVo;
+import com.ruoyi.user.service.IAccountCertificationApplyService;
 import com.ruoyi.user.service.IAccountUserService;
 
 /**
@@ -22,10 +37,13 @@
  */
 @RestController
 @RequestMapping("/user")
-public class AccountProfileController
+public class AccountProfileController extends BaseController
 {
     @Autowired
     private IAccountUserService accountUserService;
+
+    @Autowired
+    private IAccountCertificationApplyService accountCertificationApplyService;
 
     /**
      * 查询当前登录会员的个人中心信息
@@ -39,4 +57,128 @@
     {
         return R.ok(accountUserService.getAccountUserInfo(SecurityUtils.getUserId()));
     }
+
+    /**
+     * 更新当前登录会员头像
+     *
+     * 头像文件由小程序直传文件服务(POST /file/upload)后,将返回的 url 通过本接口写回;
+     * 会员身份取自登录态,不接受前端传入 userId。
+     *
+     * @param dto 头像更新入参(仅含 avatar)
+     * @return 操作结果
+     */
+    @PostMapping("/avatar")
+    public R<Void> updateAvatar(@Validated @RequestBody AccountUserAvatarDto dto)
+    {
+        accountUserService.updateAvatar(SecurityUtils.getUserId(), dto.getAvatar());
+        return R.ok();
+    }
+
+    /**
+     * 查询当前登录会员的实名认证状态
+     *
+     * 供实名认证页进入时回填:姓名、身份证号、审核状态(0待审核/1已通过/2已驳回)与驳回原因。
+     * 从未提交过申请时返回各字段为空的对象,前端按「未认证」渲染空表单。
+     * 会员身份取自登录态,不接受前端传入 userId。
+     *
+     * @return 认证状态(realName / idCard / auditStatus / auditRemark)
+     */
+    @GetMapping("/certification")
+    public R<AccountCertificationStatusVo> certification()
+    {
+        return R.ok(accountCertificationApplyService.getCertificationStatus(SecurityUtils.getUserId()));
+    }
+
+    /**
+     * 提交实名认证(个人主体)
+     *
+     * 只做基础的姓名必填与身份证号格式校验(@Validated 拦下非法入参),不做三方实名核验;
+     * 提交后落一条待审核的认证申请,出现在管理后台「主体认证审核」列表。
+     * 会员身份取自登录态,不接受前端传入 userId;已有待审核申请时拒绝重复提交。
+     *
+     * @param dto 认证申请入参(仅含 realName、idCard)
+     * @return 操作结果
+     */
+    @PostMapping("/certification")
+    public R<Void> submitCertification(@Validated @RequestBody AccountCertificationApplyDto dto)
+    {
+        accountCertificationApplyService.submitPersonalCertification(
+            SecurityUtils.getUserId(), dto.getRealName(), dto.getIdCard());
+        return R.ok();
+    }
+
+    /**
+     * 查询当前登录会员的企业/个体认证状态
+     *
+     * 供企业认证向导页进入时回填:整份企业资料 + 审核状态(0待审核/1已通过/2已驳回)与驳回原因。
+     * 从未提交过申请时返回各字段为空的对象,前端按「未认证」渲染空表单。
+     * 会员身份取自登录态,不接受前端传入 userId。
+     *
+     * @return 企业/个体认证状态(整份资料 + auditStatus / auditRemark)
+     */
+    @GetMapping("/company-certification")
+    public R<CompanyCertificationStatusVo> companyCertification()
+    {
+        return R.ok(accountCertificationApplyService.getCompanyCertificationStatus(SecurityUtils.getUserId()));
+    }
+
+    /**
+     * 提交企业/个体工商户认证(主体类型 2/3)
+     *
+     * 只做最基础的必填校验(@Validated 拦下空值与非法枚举),不做格式与三方核验,真实性由后台人工审核把关;
+     * 提交后落一条待审核的认证申请,出现在管理后台「主体认证审核」列表。
+     * 会员身份取自登录态,不接受前端传入 userId;已有待审核的企业申请时拒绝重复提交。
+     *
+     * @param dto 企业认证申请入参
+     * @return 操作结果
+     */
+    @PostMapping("/company-certification")
+    public R<Void> submitCompanyCertification(@Validated @RequestBody CompanyCertificationApplyDto dto)
+    {
+        accountCertificationApplyService.submitCompanyCertification(SecurityUtils.getUserId(), dto);
+        return R.ok();
+    }
+
+    /**
+     * 查询本人邀请码
+     *
+     * 供「我的邀请」页「邀请码」Tab 展示;会员身份取自登录态,不接受前端传入 userId。
+     *
+     * @return 邀请码展示对象
+     */
+    @GetMapping("/invite-code")
+    public R<InviteCodeVo> inviteCode()
+    {
+        return R.ok(accountUserService.getInviteCode(SecurityUtils.getUserId()));
+    }
+
+    /**
+     * 查询本人直接下级(被邀请人)列表
+     *
+     * 分页返回(pageNum 默认 1、pageSize 默认 10),按绑定时间倒序;
+     * 会员身份取自登录态,不接受前端传入 userId。
+     *
+     * @return 分页数据(rows 为 AccountInviteeVo 列表,total 为总数)
+     */
+    @GetMapping("/invitees")
+    public TableDataInfo invitees()
+    {
+        startPage();
+        List<AccountInviteeVo> list = accountUserService.getInvitees(SecurityUtils.getUserId());
+        return getDataTable(list);
+    }
+
+    /**
+     * 查询本人上级(推荐人)信息
+     *
+     * 供「我的邀请」页「邀请我的」Tab 展示;无上级时返回各字段为 null 的对象;
+     * 会员身份取自登录态,不接受前端传入 userId。
+     *
+     * @return 上级展示对象
+     */
+    @GetMapping("/referrer")
+    public R<AccountReferrerVo> referrer()
+    {
+        return R.ok(accountUserService.getReferrer(SecurityUtils.getUserId()));
+    }
 }

--
Gitblit v1.7.1