From 0140571d040178c6a1c4c6f66f8df0dcb46ab5ac Mon Sep 17 00:00:00 2001 From: KKSU <15274802129@163.com> Date: Tue, 18 Feb 2025 11:01:09 +0800 Subject: [PATCH] feat(user): 重构用户注册逻辑并添加钱包功能 --- src/main/java/cc/mrbird/febs/user/service/Impl/ChatMemberServiceImpl.java | 142 +++++++++++++---------------------------------- 1 files changed, 39 insertions(+), 103 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/user/service/Impl/ChatMemberServiceImpl.java b/src/main/java/cc/mrbird/febs/user/service/Impl/ChatMemberServiceImpl.java index e7963ea..3f2896a 100644 --- a/src/main/java/cc/mrbird/febs/user/service/Impl/ChatMemberServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/user/service/Impl/ChatMemberServiceImpl.java @@ -1,30 +1,24 @@ package cc.mrbird.febs.user.service.Impl; import cc.mrbird.febs.common.entity.FebsResponse; -import cc.mrbird.febs.common.enumerates.YesOrNoEnum; import cc.mrbird.febs.common.exception.FebsException; -import cc.mrbird.febs.common.utils.AppContants; import cc.mrbird.febs.common.utils.ShareCodeUtil; -import cc.mrbird.febs.mall.entity.MallMember; -import cc.mrbird.febs.mall.entity.MallMemberWallet; -import cc.mrbird.febs.mall.entity.RunVip; +import cc.mrbird.febs.common.utils.ValidateEntityUtils; +import cc.mrbird.febs.mall.service.impl.CommonService; +import cc.mrbird.febs.user.contant.MemberConstant; import cc.mrbird.febs.user.entity.ChatMember; import cc.mrbird.febs.user.mapper.ChatMemberMapper; import cc.mrbird.febs.user.req.ApiRegisterDto; +import cc.mrbird.febs.user.service.AsyncService; import cc.mrbird.febs.user.service.IChatMemberService; -import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.crypto.SecureUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; - -import java.math.BigDecimal; -import java.util.List; @Slf4j @Service @@ -32,116 +26,58 @@ @Transactional public class ChatMemberServiceImpl extends ServiceImpl<ChatMemberMapper, ChatMember> implements IChatMemberService { + private final CommonService commonService; + private final AsyncService asyncService; + @Override public FebsResponse register(ApiRegisterDto apiRegisterDto) { String account = apiRegisterDto.getAccount(); - - MallMember mallMember = this.baseMapper.selectInfoByAccount(account); - if (mallMember != null) { - throw new FebsException("手机号已注册"); - } - /** - * 验证两次密码是否一致 - */ - String password = registerDto.getPassword(); - String passwordAgain = registerDto.getPasswordAgain(); - if(!password.equals(passwordAgain)){ - throw new FebsException("密码不一致"); - } - - //邀请码为admin的时候(后台添加用户),不需要验证验证码 - if (!"admin".equals(registerDto.getRegistType())) { - String code = registerDto.getCode(); + String password = apiRegisterDto.getPassword(); + String passwordAgain = apiRegisterDto.getPasswordAgain(); + String refInviteId = apiRegisterDto.getInviteId(); + String code = apiRegisterDto.getCode(); + //后台添加用户,不需要验证验证码 + Integer addType = apiRegisterDto.getAddType(); + if (MemberConstant.ADD_TYPE_NORMAL == addType) { boolean flags = commonService.verifyCode(account, code); if (!flags) { throw new FebsException("验证码错误"); } } + ValidateEntityUtils.ensureEqual(password, passwordAgain, "两次密码不一致"); + ValidateEntityUtils.ensureUnique(account, ChatMember::getEmail, this.baseMapper::selectCount, "邮箱已使用"); - mallMember = new MallMember(); - mallMember.setPassword(SecureUtil.md5(registerDto.getPassword())); + ChatMember chatMember = new ChatMember(); + chatMember.setEmail(account); + chatMember.setPassword(SecureUtil.md5(password)); + chatMember.setName(account); + chatMember.setSex(MemberConstant.UNKNOWN); - // 判断账号类型 - if (AppContants.ACCOUNT_TYPE_MOBILE.equals(registerDto.getType())) { - mallMember.setPhone(registerDto.getAccount()); - } else { - mallMember.setEmail(registerDto.getAccount()); - } //对于邀请码的验证和上级联系人的验证 Integer count = this.baseMapper.selectCount(null); if (count != null && count != 0) { - if(StrUtil.isEmpty(registerDto.getInviteId())){ - throw new FebsException("请输入邀请码"); - } - String inviteId = registerDto.getInviteId(); - MallMember inviteMember = this.baseMapper.selectInfoByInviteId(inviteId); - if (inviteMember == null) { - throw new FebsException("邀请码不存在"); - } - mallMember.setReferrerId(registerDto.getInviteId()); -// if(!StrUtil.isEmpty(registerDto.getInviteId())){ -// String inviteId = registerDto.getInviteId(); -// MallMember inviteMember = this.baseMapper.selectInfoByInviteId(inviteId); -// if (inviteMember == null) { -// throw new FebsException("邀请码不存在"); -// } -// mallMember.setReferrerId(registerDto.getInviteId()); -// } - } - mallMember.setName(account); - mallMember.setAvatar("https://res.runstep.cc/rslogo.png"); - mallMember.setAccountStatus(YesOrNoEnum.YES.getValue()); - mallMember.setAccountType(MallMember.ACCOUNT_TYPE_NORMAL); - mallMember.setSex("男"); - mallMember.setDirector(YesOrNoEnum.NO.getValue()); - mallMember.setDirectorTime(DateUtil.date()); - mallMember.setBindPhone(account); - - this.baseMapper.insert(mallMember); - - String inviteId = ShareCodeUtil.toSerialCode(mallMember.getId()); - mallMember.setInviteId(inviteId); - - //推荐人和推荐人链 - boolean flag = false; - String parentId = mallMember.getReferrerId(); - if (StrUtil.isBlank(parentId)) { - flag = true; - } - String ids = ""; - while (!flag) { - if (StrUtil.isBlank(ids)) { - ids += parentId; - } else { - ids += ("," + parentId); - } - MallMember parentMember = this.baseMapper.selectInfoByInviteId(parentId); - if (parentMember == null) { - break; - } - parentId = parentMember.getReferrerId(); - if (StrUtil.isBlank(parentMember.getReferrerId())) { - flag = true; + if(StrUtil.isNotEmpty(refInviteId)){ + ChatMember chatMemberInvite = ValidateEntityUtils.ensureColumnReturnEntity(refInviteId, ChatMember::getInviteId, this.baseMapper::selectOne, "邀请码不存在"); + chatMember.setReferrerId(chatMemberInvite.getInviteId()); } } + chatMember.setAccountStatus(MemberConstant.ACCOUNT_STATUS_NORMAL); + chatMember.setAccountType(MemberConstant.ACCOUNT_TYPE_NORMAL); + // --todo 默认头像为空 +// chatMember.setAvatar("https://res.runstep.cc/rslogo.png"); + chatMember.setDirector(MemberConstant.DIRECTER_YES); + chatMember.setLastLoginTime(DateUtil.date()); + // -- todo 默认主账号的角色设置没有设置 + chatMember.setRoleId(0L); + this.baseMapper.insert(chatMember); - if (StrUtil.isNotBlank(ids)) { - mallMember.setReferrerIds(ids); - } - //会员VIP等级 - List<RunVip> runVips = runVipMapper.selectList(new LambdaQueryWrapper<RunVip>().orderByAsc(RunVip::getOrderNumber)); - if (StrUtil.isBlank(mallMember.getLevel()) && CollUtil.isNotEmpty(runVips)) { - RunVip runVip = runVips.get(0); - mallMember.setLevel(runVip.getVipCode()); - } - this.baseMapper.updateById(mallMember); + //公司ID默认为主账号的会员ID + chatMember.setCompanyId(chatMember.getId()); + chatMember.setInviteId(ShareCodeUtil.toSerialCode(chatMember.getId())); + //推荐人链 + asyncService.initMemberReferrerIds(chatMember.getId(),chatMember.getReferrerId()); + asyncService.initWallet(chatMember.getId()); - MallMemberWallet wallet = new MallMemberWallet(); - wallet.setBalance(BigDecimal.ZERO); - wallet.setMemberId(mallMember.getId()); - mallMemberWalletMapper.insert(wallet); - - agentProducer.sendNodeUpMsg(mallMember.getId()); return new FebsResponse().success().message("注册成功"); } } -- Gitblit v1.9.1