Forráskód Böngészése

用户模块 修改绑定账号逻辑(已绑定第三方的手机号不允许再被第三方绑定、已充过钱的第三方账号不允许被绑定)

songfuqiang 2 éve
szülő
commit
715342e1fc

+ 58 - 42
backend-core/src/main/java/cn/kdan/pdf/backend/core/service/impl/MemberServiceImpl.java

@@ -544,48 +544,8 @@ public class MemberServiceImpl implements MemberService {
 
         String provider = param.getProvider();
         if("phone".equals(provider)){
-            String phone = param.getPhone();
-            if(StringUtils.isEmpty(phone)){
-                throw new BackendRuntimeException("手机号不能为空");
-            }
-            Members member = userService.getByAccount(phone);
-            if(member != null){
-                //不允许绑定自己
-                if(member.getId().equals(currentUser.getId())) {
-                    throw new BackendRuntimeException("不允许绑定自己");
-                }else{
-                    if(member.getTotalPoints() <= 10 && SubscriberTypeEnum.no.value().equals(member.getSubscriberType())){
-                        //删除该手机的账号数据,然后更新手机到当前用户
-                        membersMapper.deleteByPrimaryKey(member.getId());
-                        //更新当前账号的手机号为phone参数
-                        if(!StringUtils.isEmpty(param.getPhoneZone())){
-                            currentUser.setPhoneZone(param.getPhoneZone());
-                        }
-                        currentUser.setPhone(phone);
-                        currentUser.setUpdatedAt(new Date());
-                        update(currentUser);
-                    }else{
-                        throw new BackendRuntimeException("不允许绑定该账号,因为充过钱了!");
-                    }
-                }
-            }else{
-                //直接更新当前账号的手机号为phone参数
-                if(!StringUtils.isEmpty(param.getPhoneZone())){
-                    currentUser.setPhoneZone(param.getPhoneZone());
-                }
-                currentUser.setPhone(phone);
-                currentUser.setUpdatedAt(new Date());
-                update(currentUser);
-            }
-            memberVo.setPhone(phone);
-            List<SocialAccounts> list = socialAccountService.selectByMemberId(currentUser.getId());
-            for (SocialAccounts account : list) {
-                SocialAccountVo vo = new SocialAccountVo();
-                vo.setProvider(ProviderEnum.getNameByCode(account.getProvider()));
-                vo.setName(account.getName());
-                vo.setAccountId(account.getAccountId());
-                socialAccounts.add(vo);
-            }
+            bindPhone(param, socialAccounts, currentUser);
+            memberVo.setPhone(param.getPhone());
         } else{
             //绑定第三方账号
             socialAccounts = socialAccountService.bindSocialAccount(currentUser, param, socialAccounts);
@@ -594,6 +554,62 @@ public class MemberServiceImpl implements MemberService {
         return bindAccountVo;
     }
 
+    /**
+     * 手机号绑定
+     * @param param 入参
+     * @param socialAccounts 社交账号
+     * @param currentUser 当前用户
+     */
+    private void bindPhone(BindAccountParam param, List<SocialAccountVo> socialAccounts, Members currentUser) {
+        String phone = param.getPhone();
+        if(StringUtils.isEmpty(phone)){
+            throw new BackendRuntimeException("手机号不能为空");
+        }
+        Members member = userService.getByAccount(phone);
+        if(member != null){
+            //不允许绑定自己
+            if(member.getId().equals(currentUser.getId())) {
+                throw new BackendRuntimeException("不允许绑定自己");
+            }else{
+                if(member.getTotalPoints() <= 10 && SubscriberTypeEnum.no.value().equals(member.getSubscriberType())){
+                    // 当该手机用户已经绑定了第三方账号的时候,不允许此次绑定
+                    List<SocialAccounts> list = socialAccountService.selectByMemberId(member.getId());
+                    if(!CollectionUtils.isEmpty(list)){
+                        throw new BackendRuntimeException("该账号已被绑定,不允许再次绑定");
+                    }
+                    //删除该手机的账号数据,然后更新手机到当前用户
+                    membersMapper.deleteByPrimaryKey(member.getId());
+                    //更新当前账号的手机号为phone参数
+                    if(!StringUtils.isEmpty(param.getPhoneZone())){
+                        currentUser.setPhoneZone(param.getPhoneZone());
+                    }
+                    currentUser.setPhone(phone);
+                    currentUser.setUpdatedAt(new Date());
+                    update(currentUser);
+                }else{
+                    throw new BackendRuntimeException("不允许绑定该账号,因为充过钱了!");
+                }
+            }
+        }else{
+            //直接更新当前账号的手机号为phone参数
+            if(!StringUtils.isEmpty(param.getPhoneZone())){
+                currentUser.setPhoneZone(param.getPhoneZone());
+            }
+            currentUser.setPhone(phone);
+            currentUser.setUpdatedAt(new Date());
+            update(currentUser);
+        }
+
+        List<SocialAccounts> list = socialAccountService.selectByMemberId(currentUser.getId());
+        for (SocialAccounts account : list) {
+            SocialAccountVo vo = new SocialAccountVo();
+            vo.setProvider(ProviderEnum.getNameByCode(account.getProvider()));
+            vo.setName(account.getName());
+            vo.setAccountId(account.getAccountId());
+            socialAccounts.add(vo);
+        }
+    }
+
     @Override
     @Transactional(rollbackFor = BackendRuntimeException.class)
     public BindAccountVo unbindAccount(BindAccountParam param) {

+ 14 - 0
backend-core/src/main/java/cn/kdan/pdf/backend/core/service/impl/SocialAccountServiceImpl.java

@@ -1,6 +1,7 @@
 package cn.kdan.pdf.backend.core.service.impl;
 
 import cn.kdan.pdf.backend.core.enums.ProviderEnum;
+import cn.kdan.pdf.backend.core.enums.SubscriberTypeEnum;
 import cn.kdan.pdf.backend.core.mapper.SocialAccountsMapper;
 import cn.kdan.pdf.backend.core.model.Members;
 import cn.kdan.pdf.backend.core.model.SocialAccounts;
@@ -109,6 +110,7 @@ public class SocialAccountServiceImpl implements SocialAccountService {
             } else{
                 //如果有第三方账号,需要先将原用户账号删除,再进行绑定当前用户账号
                 String memberId = socialAccount.getMemberId();
+                verifyMemberPayed(memberId);
                 memberService.deleteByMemberId(memberId);
                 socialAccount.setMemberId(member.getId());
                 updateSocialAccount(socialAccount);
@@ -133,6 +135,7 @@ public class SocialAccountServiceImpl implements SocialAccountService {
             } else{
                 //如果有第三方账号,需要先将原用户账号删除,再进行绑定当前用户账号
                 String memberId = socialAccount.getMemberId();
+                verifyMemberPayed(memberId);
                 memberService.deleteByMemberId(memberId);
                 socialAccount.setMemberId(member.getId());
                 updateSocialAccount(socialAccount);
@@ -149,6 +152,17 @@ public class SocialAccountServiceImpl implements SocialAccountService {
         return socialAccounts;
     }
 
+    /**
+     * 判断用户是否付费过
+     * @param memberId 用户id
+     */
+    public void verifyMemberPayed(String memberId){
+        Members member = memberService.getById(memberId);
+        if(member.getTotalPoints() > 10 || SubscriberTypeEnum.yes.value().equals(member.getSubscriberType())){
+            throw new BackendRuntimeException("不允许绑定该账号,因为充过钱了!");
+        }
+    }
+
     /**
      * 根据accountId更新社交账号
      * @param socialAccount 社交账号信息