From f8c73a38709f7120d11b04bd70c6af3ccc53014d Mon Sep 17 00:00:00 2001
From: zjk <852185829@qq.com>
Date: 星期二, 13 十月 2026 14:51:37 +0800
Subject: [PATCH] feat: 新增用户小程序会员个人中心及资料编辑页面
---
hugray-server/ruoyi-modules/ruoyi-user/src/main/java/com/ruoyi/user/service/impl/AccountUserServiceImpl.java | 75 +++++++++++++++++++++++++++++++++----
1 files changed, 66 insertions(+), 9 deletions(-)
diff --git a/hugray-server/ruoyi-modules/ruoyi-user/src/main/java/com/ruoyi/user/service/impl/AccountUserServiceImpl.java b/hugray-server/ruoyi-modules/ruoyi-user/src/main/java/com/ruoyi/user/service/impl/AccountUserServiceImpl.java
index ebd2a43..98a8af8 100644
--- a/hugray-server/ruoyi-modules/ruoyi-user/src/main/java/com/ruoyi/user/service/impl/AccountUserServiceImpl.java
+++ b/hugray-server/ruoyi-modules/ruoyi-user/src/main/java/com/ruoyi/user/service/impl/AccountUserServiceImpl.java
@@ -13,6 +13,10 @@
import com.ruoyi.user.config.UniversalCodeProperties;
import com.ruoyi.user.constant.ReferralConstants;
import com.ruoyi.user.domain.AccountUser;
+import com.ruoyi.user.domain.vo.AccountUserInfoVo;
+import com.ruoyi.user.domain.vo.EarningSummaryVo;
+import com.ruoyi.user.enums.MemberLevelEnum;
+import com.ruoyi.user.mapper.AccountEarningRecordMapper;
import com.ruoyi.user.mapper.AccountUserMapper;
import com.ruoyi.user.service.IAccountUserService;
@@ -28,6 +32,9 @@
@Autowired
private AccountUserMapper accountUserMapper;
+
+ @Autowired
+ private AccountEarningRecordMapper accountEarningRecordMapper;
@Autowired
private UniversalCodeProperties universalCodeProperties;
@@ -118,24 +125,74 @@
{
throw new ServiceException("手机号已注册,请前往登录");
}
- // STEP 2: 解析推荐人——命中通用推荐码则不绑定推荐人,否则按码定位并校验
- Long referrerUserId = resolveReferrerUserId(phone, referralCode);
- // STEP 3: 生成全局唯一的本人推荐码(库内查重,冲突重试)
+ // STEP 2: 判定是否命中通用推荐码(命中则不绑定推荐人,且直接发放 L4 会员等级)
+ boolean universalReferral = isUniversalReferralCode(referralCode);
+ // STEP 3: 解析推荐人——命中通用推荐码则不绑定推荐人,否则按码定位并校验
+ Long referrerUserId = resolveReferrerUserId(phone, referralCode, universalReferral);
+ // STEP 4: 生成全局唯一的本人推荐码(库内查重,冲突重试)
String myReferralCode = generateUniqueReferralCode();
- // STEP 4: 组装会员信息(C端无密码,账号=手机号),落库(userId 回填)
+ // STEP 5: 组装会员信息(C端无密码,账号=手机号;姓名注册未采集,落库留空,由用户后续在资料页完善)
AccountUser accountUser = new AccountUser();
accountUser.setUserName(phone);
accountUser.setPhone(phone);
- accountUser.setNickname(phone);
accountUser.setStatus(UserConstants.NORMAL);
accountUser.setMyReferralCode(myReferralCode);
- accountUser.setReferrerUserId(referrerUserId);
+ accountUser.setReferrerId(referrerUserId);
+ // 通用推荐码注册的会员直接发放 L4 等级;其余不设等级,走库默认值 C(普通用户)
+ if (universalReferral)
+ {
+ accountUser.setSystemLevel(MemberLevelEnum.L4.getCode());
+ }
accountUser.setCreateBy(phone);
if (insertAccountUser(accountUser) <= 0)
{
throw new ServiceException("注册失败,请稍后重试");
}
return accountUser;
+ }
+
+ @Override
+ public AccountUserInfoVo getAccountUserInfo(Long userId)
+ {
+ // STEP 1: 校验会员ID(登录态缺失时直接失败,避免无归属查询)
+ if (StringUtils.isNull(userId))
+ {
+ throw new ServiceException("获取会员信息失败");
+ }
+ // STEP 2: 按会员ID查询会员(逻辑删除已在 SQL 中过滤)
+ AccountUser accountUser = accountUserMapper.selectAccountUserById(userId);
+ if (StringUtils.isNull(accountUser))
+ {
+ throw new ServiceException("获取会员信息失败");
+ }
+ // STEP 3: 查询收益汇总(单位分),无任何流水时直接返回全零,避免前端 null 分支
+ EarningSummaryVo earnings = accountEarningRecordMapper.selectEarningSummary(userId);
+ if (StringUtils.isNull(earnings))
+ {
+ earnings = EarningSummaryVo.zero();
+ }
+ // STEP 4: 组装展示对象;等级为空或非法值统一兜底为 C(普通用户);手机号脱敏后下发
+ AccountUserInfoVo vo = new AccountUserInfoVo();
+ vo.setUserId(accountUser.getUserId());
+ vo.setNickname(accountUser.getNickname());
+ vo.setPhone(maskPhone(accountUser.getPhone()));
+ vo.setAvatar(accountUser.getAvatar());
+ vo.setMemberLevel(MemberLevelEnum.normalize(accountUser.getSystemLevel()));
+ vo.setEarnings(earnings);
+ // STEP 5: 返回个人中心展示数据
+ return vo;
+ }
+
+ /**
+ * 判定是否为通用推荐码
+ *
+ * @param referralCode 注册提交的推荐码
+ * @return true 表示命中通用推荐码
+ */
+ private boolean isUniversalReferralCode(String referralCode)
+ {
+ String universalCode = universalCodeProperties.getUniversalReferralCode();
+ return StringUtils.isNotEmpty(universalCode) && universalCode.equals(referralCode);
}
/**
@@ -146,13 +203,13 @@
*
* @param phone 注册手机号(仅用于日志留痕,脱敏输出)
* @param referralCode 推荐码
+ * @param universalReferral 是否已命中通用推荐码
* @return 推荐人用户ID;命中通用码时为 null
*/
- private Long resolveReferrerUserId(String phone, String referralCode)
+ private Long resolveReferrerUserId(String phone, String referralCode, boolean universalReferral)
{
- String universalCode = universalCodeProperties.getUniversalReferralCode();
// 命中通用推荐码:不绑定推荐人
- if (StringUtils.isNotEmpty(universalCode) && universalCode.equals(referralCode))
+ if (universalReferral)
{
log.warn("[REFERRAL] universal code hit, not binding referrer, phone={}", maskPhone(phone));
return null;
--
Gitblit v1.7.1