Browse Source

注册接口优化,兼容后台导入用户绑定openId

wulei 3 months ago
parent
commit
349eb37771

+ 50 - 18
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/user/service/impl/BizUserServiceImpl.java

@@ -187,10 +187,10 @@ public class BizUserServiceImpl extends ServiceImpl<BizUserMapper, BizUser> impl
         if (ObjectUtil.isNotEmpty(bizUserPageParam.getUserStatus())) {
             queryWrapper.lambda().eq(BizUser::getUserStatus, bizUserPageParam.getUserStatus());
         }
-        if (ObjectUtil.isNotEmpty(bizUserPageParam.getBeginTime()) && ObjectUtil.isNotEmpty(bizUserPageParam.getEndTime())){
-            queryWrapper.lambda().between(BizUser::getCreateTime,bizUserPageParam.getBeginTime()+ " 00:00:00",bizUserPageParam.getEndTime()+" 23:59:59");
+        if (ObjectUtil.isNotEmpty(bizUserPageParam.getBeginTime()) && ObjectUtil.isNotEmpty(bizUserPageParam.getEndTime())) {
+            queryWrapper.lambda().between(BizUser::getCreateTime, bizUserPageParam.getBeginTime() + " 00:00:00", bizUserPageParam.getEndTime() + " 23:59:59");
         }
-        queryWrapper.lambda().in(BizUser::getUserType, 3,2);
+        queryWrapper.lambda().in(BizUser::getUserType, 3, 2);
         queryWrapper.lambda().eq(CommonEntity::getDeleteFlag, CommonDeleteFlagEnum.NOT_DELETE);
         queryWrapper.lambda().orderByDesc(CommonEntity::getCreateTime);
         Page<BizMemberUserResult> bizMemberUserResultPage = baseMapper.memberPage(CommonPageRequest.defaultPage(), queryWrapper);
@@ -199,23 +199,23 @@ public class BizUserServiceImpl extends ServiceImpl<BizUserMapper, BizUser> impl
                 bizMemberUserResult.setPhone(CommonCryptogramUtil.doSm4CbcDecrypt(bizMemberUserResult.getPhone()));
             }
             String warnSwitch = devConfigApi.getValueByKey("warnSwitch");
-            if(ObjectUtil.isNotEmpty(warnSwitch) && StringUtils.equals(warnSwitch,"true")){
+            if (ObjectUtil.isNotEmpty(warnSwitch) && StringUtils.equals(warnSwitch, "true")) {
                 //查询推荐的所有用户id
                 List<String> idList = Lists.newArrayList();
-                this.list(new QueryWrapper<BizUser>().lambda().eq(BizUser::getReferralUser, bizMemberUserResult.getId())).forEach(user->idList.add(user.getId()));
-                if(ObjectUtil.isNotEmpty(idList)){
+                this.list(new QueryWrapper<BizUser>().lambda().eq(BizUser::getReferralUser, bizMemberUserResult.getId())).forEach(user -> idList.add(user.getId()));
+                if (ObjectUtil.isNotEmpty(idList)) {
                     long count = consumptionRecordService.count(new QueryWrapper<ConsumptionRecord>().lambda().
                             eq(ConsumptionRecord::getConsumptionOperate, "2").
                             eq(ConsumptionRecord::getAdjustType, "2").
                             in(ConsumptionRecord::getUserId, idList));
-                    if(count > Long.parseLong(devConfigApi.getValueByKey("warnCount"))){
+                    if (count > Long.parseLong(devConfigApi.getValueByKey("warnCount"))) {
                         //如果查询到的退款次数大于配置的次数,开始预警
                         bizMemberUserResult.setDisableFlag("1");
-                    }else{
+                    } else {
                         bizMemberUserResult.setDisableFlag("2");
                     }
                 }
-            }else{
+            } else {
                 bizMemberUserResult.setDisableFlag("2");
             }
 
@@ -860,14 +860,36 @@ public class BizUserServiceImpl extends ServiceImpl<BizUserMapper, BizUser> impl
             referralUserId = referralUser.getId();
             bizUser.setReferralUser(referralUserId);
         }
-        // 校验openId或者手机号是否存在
-        if (ObjectUtil.isNotNull(baseMapper.selectOne(new LambdaQueryWrapper<BizUser>()
+        // 直接校验openid是否重复,防止接口被重复强调用
+        BizUser openIdUser = baseMapper.selectOne(new LambdaQueryWrapper<BizUser>()
                 .eq(BizUser::getOpenId, wxUserRegisterParam.getOpenId())
-                .or()
-                .eq(BizUser::getAccount, wxUserRegisterParam.getPhone())
-                .last("limit 1")))) {
+                .last("limit 1"));
+        if (ObjectUtil.isNotNull(openIdUser)) {
+            log.error("触发openId相同校验 ,禁止注册 =========");
             throw new CommonException("该手机号已注册,请勿重复注册");
         }
+
+        BizUser oldUser = baseMapper.selectOne(new LambdaQueryWrapper<BizUser>()
+                .eq(BizUser::getAccount, wxUserRegisterParam.getPhone())
+                .last("limit 1"));
+        if (ObjectUtil.isNotNull(oldUser)) {
+            //校验手机号且openId已存在,不允许重复注册
+            if (ObjectUtil.isNotEmpty(oldUser.getOpenId())) {
+                log.error("触发手机号存在,但是已有openId校验,禁止注册 ==========");
+                throw new CommonException("该手机号已注册,请勿重复注册");
+            } else {
+                //无openId情况,后台导入的会员,直接更新绑定用户信息的openId
+                oldUser.setOpenId(wxUserRegisterParam.getOpenId());
+                baseMapper.updateById(oldUser);
+                //校验通过删除缓存
+                commonCacheOperator.remove(wxUserRegisterParam.getPhone());
+                //若填写了推荐人编码,绑定推荐人关系
+                if (ObjectUtil.isNotEmpty(wxUserRegisterParam.getReferralCode())) {
+                    binReferrer(referralUserId, oldUser.getId());
+                }
+                return;
+            }
+        }
         bizUser.setAccount(wxUserRegisterParam.getPhone());
         bizUser.setPhone(wxUserRegisterParam.getPhone());
         bizUser.setAvatar(CommonAvatarUtil.generateImg(wxUserRegisterParam.getName()));
@@ -883,15 +905,25 @@ public class BizUserServiceImpl extends ServiceImpl<BizUserMapper, BizUser> impl
         sysRoleApi.grantUserRole(bizUser.getId(), roleId);
         //保存推荐人关系
         if (ObjectUtil.isNotEmpty(wxUserRegisterParam.getReferralCode())) {
-            BizRecommendRecord bizRecommendRecord = new BizRecommendRecord();
-            bizRecommendRecord.setRecommendUserId(referralUserId);
-            bizRecommendRecord.setAcceptUserId(bizUser.getId());
-            bizRecommendRecordMapper.insert(bizRecommendRecord);
+            binReferrer(referralUserId, bizUser.getId());
         }
         //校验通过删除缓存
         commonCacheOperator.remove(wxUserRegisterParam.getPhone());
     }
 
+    /**
+     * 绑定推荐人
+     * @param referralUserId 推荐人id
+     * @param userId 被推荐人
+     */
+    private void binReferrer(String referralUserId, String userId) {
+        BizRecommendRecord bizRecommendRecord = new BizRecommendRecord();
+        bizRecommendRecord.setRecommendUserId(referralUserId);
+        bizRecommendRecord.setAcceptUserId(userId);
+        bizRecommendRecordMapper.insert(bizRecommendRecord);
+    }
+
+
     @Override
     public void smsSend(SmsSendParam smsSendParam) {
         // 查询缓存是否存在