| | |
| | | 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 |
| | |
| | | @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("注册成功"); |
| | | } |
| | | } |