Browse Source

用户模块 修正登录逻辑和绑定账号逻辑

songfuqiang 2 years ago
parent
commit
0a4c8b5478

+ 7 - 0
backend-core/src/main/java/cn/kdan/pdf/backend/core/service/AvatarService.java

@@ -16,4 +16,11 @@ public interface AvatarService {
      */
     List<Avatars> list();
 
+    /**
+     * 根据用户id查询头像路径
+     * @param memberId 用户id
+     * @return 头像路径
+     */
+    String selectByMemberId(String memberId);
+
 }

+ 3 - 1
backend-core/src/main/java/cn/kdan/pdf/backend/core/service/SocialAccountService.java

@@ -3,6 +3,7 @@ package cn.kdan.pdf.backend.core.service;
 import cn.kdan.pdf.backend.core.model.Members;
 import cn.kdan.pdf.backend.core.model.SocialAccounts;
 import cn.kdan.pdf.backend.core.params.BindAccountParam;
+import cn.kdan.pdf.backend.core.pojo.app.SocialAccountVo;
 
 /**
  * @author : SongFuQiang
@@ -42,8 +43,9 @@ public interface SocialAccountService {
      * 绑定社交账号
      * @param member 当前用户
      * @param param 绑定参数
+     * @param socialAccountVo 社交账号返回信息
      */
-    String bindSocialAccount(Members member, BindAccountParam param);
+    String bindSocialAccount(Members member, BindAccountParam param, SocialAccountVo socialAccountVo);
 
     /**
      * 解绑账号

+ 2 - 3
backend-core/src/main/java/cn/kdan/pdf/backend/core/service/impl/AdvertisementServiceImpl.java

@@ -7,13 +7,12 @@ import cn.kdan.pdf.backend.core.model.AdvertisementsExample;
 import cn.kdan.pdf.backend.core.params.QueryAdvertisementParam;
 import cn.kdan.pdf.backend.core.pojo.app.AdvertisementVo;
 import cn.kdan.pdf.backend.core.service.AdvertisementService;
-import cn.kdan.pdf.backend.core.utils.CommonUtils;
+import cn.kdan.pdf.backend.core.utils.CommonBusinessUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
-import java.util.Collection;
 import java.util.List;
 
 /**
@@ -33,7 +32,7 @@ public class AdvertisementServiceImpl implements AdvertisementService {
         String slug = param.getSlug();
         String versionName = param.getVersionName();
         String language = param.getLanguage();
-        language = CommonUtils.judgeLanguage(language);
+        language = CommonBusinessUtils.judgeLanguage(language);
         AdvertisementsExample example = new AdvertisementsExample();
         example.createCriteria().andDimensionEqualTo(dimension).andSlugEqualTo(slug).andLanguageEqualTo(LanguageEnum.getCodeByName(language));
         List<Advertisements> advertisementList = advertisementsMapper.selectByExample(example);

+ 6 - 3
backend-core/src/main/java/cn/kdan/pdf/backend/core/service/impl/AuthServiceImpl.java

@@ -99,6 +99,8 @@ public class AuthServiceImpl implements AuthService {
     private LocationService locationService;
     @Resource
     private MemberServiceImpl memberService;
+    @Resource
+    private AvatarService avatarService;
 
     @Override
     public OauthClientDetails getById(String clientId) {
@@ -289,22 +291,23 @@ public class AuthServiceImpl implements AuthService {
                 if(ObjectUtils.isEmpty(member)) {
                     member = new Members();
                     member.setName(String.valueOf(System.currentTimeMillis()).substring(0, 10));
+                    member.setPhone(account);
                     memberId = memberService.insertMembers(member, password);
                     memberVo.setName(member.getName());
                     memberVo.setEmail(member.getEmail());
                     memberVo.setPhone(member.getPhone());
                     memberVo.setPhoneZone(member.getPhoneZone());
                     memberVo.setTimeZone(member.getTimeZone());
-                    memberVo.setAvatarUrl("");
+                    memberVo.setAvatarUrl(avatarService.selectByMemberId(memberId));
                 }else {
                     if("false".equals(password)){
                         memberVo.setName(member.getName());
                         memberVo.setEmail(member.getEmail());
                         memberVo.setPhone(member.getPhone());
                         memberVo.setPhoneZone(member.getPhoneZone());
-                        memberVo.setAvatarUrl("");
                         memberVo.setTimeZone(member.getTimeZone());
                         memberId = member.getId();
+                        memberVo.setAvatarUrl(avatarService.selectByMemberId(memberId));
                     }
                 }
             }else {
@@ -317,9 +320,9 @@ public class AuthServiceImpl implements AuthService {
                         memberVo.setEmail(member.getEmail());
                         memberVo.setPhone(member.getPhone());
                         memberVo.setPhoneZone(member.getPhoneZone());
-                        memberVo.setAvatarUrl("");
                         memberVo.setTimeZone(member.getTimeZone());
                         memberId = member.getId();
+                        memberVo.setAvatarUrl(avatarService.selectByMemberId(memberId));
                     }else {
                         throw new BackendRuntimeException("账号/密码输入有误");
                     }

+ 13 - 0
backend-core/src/main/java/cn/kdan/pdf/backend/core/service/impl/AvatarServiceImpl.java

@@ -5,6 +5,7 @@ import cn.kdan.pdf.backend.core.model.Avatars;
 import cn.kdan.pdf.backend.core.model.AvatarsExample;
 import cn.kdan.pdf.backend.core.service.AvatarService;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
 import java.util.List;
@@ -22,6 +23,18 @@ public class AvatarServiceImpl implements AvatarService {
     @Override
     public List<Avatars> list() {
         AvatarsExample example = new AvatarsExample();
+        example.createCriteria().andMemberIdIsNull();
         return avatarsMapper.selectByExample(example);
     }
+
+    @Override
+    public String selectByMemberId(String memberId) {
+        AvatarsExample example = new AvatarsExample();
+        example.createCriteria().andMemberIdEqualTo(memberId);
+        List<Avatars> avatars = avatarsMapper.selectByExample(example);
+        if(CollectionUtils.isEmpty(avatars)){
+            return "";
+        }
+        return avatars.get(0).getAvatar();
+    }
 }

+ 1 - 3
backend-core/src/main/java/cn/kdan/pdf/backend/core/service/impl/MemberServiceImpl.java

@@ -534,9 +534,7 @@ public class MemberServiceImpl implements MemberService {
             }
         } else{
             //绑定第三方账号
-            String accountId = socialAccountService.bindSocialAccount(currentUser,param);
-            SocialAccounts socialAccounts = socialAccountService.selectByAccountId(accountId);
-            BeanUtils.copyProperties(socialAccounts,socialAccountVo);
+            String accountId = socialAccountService.bindSocialAccount(currentUser, param, socialAccountVo);
             bindAccountVo.setSocialAccount(socialAccountVo);
         }
         return bindAccountVo;

+ 2 - 2
backend-core/src/main/java/cn/kdan/pdf/backend/core/service/impl/PricingServiceImpl.java

@@ -12,7 +12,7 @@ import cn.kdan.pdf.backend.core.service.MemberService;
 import cn.kdan.pdf.backend.core.service.PricingDiscountService;
 import cn.kdan.pdf.backend.core.service.PricingService;
 import cn.kdan.pdf.backend.core.service.SubscriptionService;
-import cn.kdan.pdf.backend.core.utils.CommonUtils;
+import cn.kdan.pdf.backend.core.utils.CommonBusinessUtils;
 import enums.CommonEnum;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
@@ -54,7 +54,7 @@ public class PricingServiceImpl implements PricingService {
             client = ClientEnum.WEB.value();
         }
         String language = req.getLanguage();
-        language = CommonUtils.judgeLanguage(language);
+        language = CommonBusinessUtils.judgeLanguage(language);
 
         Members member = memberService.getCurrentUser();
         PricingsExample example = new PricingsExample();

+ 21 - 1
backend-core/src/main/java/cn/kdan/pdf/backend/core/service/impl/SocialAccountServiceImpl.java

@@ -6,15 +6,20 @@ import cn.kdan.pdf.backend.core.model.Members;
 import cn.kdan.pdf.backend.core.model.SocialAccounts;
 import cn.kdan.pdf.backend.core.model.SocialAccountsExample;
 import cn.kdan.pdf.backend.core.params.BindAccountParam;
+import cn.kdan.pdf.backend.core.pojo.app.SocialAccountVo;
 import cn.kdan.pdf.backend.core.pojo.third.Tencent;
 import cn.kdan.pdf.backend.core.pojo.third.Wechat;
 import cn.kdan.pdf.backend.core.service.SocialAccountService;
 import cn.kdan.pdf.backend.core.utils.TencentUtils;
 import cn.kdan.pdf.backend.core.utils.WechatUtils;
+import exception.BackendRuntimeException;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.ObjectUtils;
+import org.springframework.util.StringUtils;
+import utils.CommonUtils;
 
 import javax.annotation.Resource;
 import java.util.Date;
@@ -70,18 +75,25 @@ public class SocialAccountServiceImpl implements SocialAccountService {
     }
 
     @Override
-    public String bindSocialAccount(Members member, BindAccountParam param) {
+    public String bindSocialAccount(Members member, BindAccountParam param, SocialAccountVo socialAccountVo) {
         String accountId = "";
         String accessToken = param.getAccessToken();
         String openid = param.getOpenid();
         String provider = param.getProvider();
+        socialAccountVo.setProvider(provider);
         if(ProviderEnum.TENCENT.getName().equals(provider)){
             Tencent userInfo = TencentUtils.getUserInfo(accessToken);
             String unionId = userInfo.getUnionId();
+            if(StringUtils.isEmpty(unionId)){
+                log.info("未找到第三方账号,accessToken:{},openid:{}",accessToken,openid);
+                throw new BackendRuntimeException("未找到第三方账号");
+            }
             accountId = unionId;
             SocialAccounts socialAccount = selectByAccountId(unionId);
             //看看有没有该账号,没有就新增一条,有就更新用户id
             if(ObjectUtils.isEmpty(socialAccount)){
+                socialAccount = new SocialAccounts();
+                socialAccount.setId(CommonUtils.generateId());
                 socialAccount.setAccountId(unionId);
                 socialAccount.setMemberId(member.getId());
                 socialAccount.setName(userInfo.getNickname());
@@ -92,12 +104,19 @@ public class SocialAccountServiceImpl implements SocialAccountService {
                 socialAccount.setMemberId(member.getId());
                 updateSocialAccount(socialAccount);
             }
+            BeanUtils.copyProperties(socialAccount,socialAccountVo);
         }else{
             Wechat userInfo = WechatUtils.getUserInfo(openid, accessToken);
             String unionId = userInfo.getUnionId();
+            if(StringUtils.isEmpty(unionId)){
+                log.info("未找到第三方账号,accessToken:{},openid:{}",accessToken,openid);
+                throw new BackendRuntimeException("未找到第三方账号");
+            }
             accountId = unionId;
             SocialAccounts socialAccount = selectByAccountId(unionId);
             if(ObjectUtils.isEmpty(socialAccount)){
+                socialAccount = new SocialAccounts();
+                socialAccount.setId(CommonUtils.generateId());
                 socialAccount.setAvatar(userInfo.getHeadImgUrl());
                 socialAccount.setAccountId(unionId);
                 socialAccount.setProvider(ProviderEnum.getCodeByName(provider));
@@ -108,6 +127,7 @@ public class SocialAccountServiceImpl implements SocialAccountService {
                 socialAccount.setMemberId(member.getId());
                 updateSocialAccount(socialAccount);
             }
+            BeanUtils.copyProperties(socialAccount,socialAccountVo);
         }
         return accountId;
     }

+ 1 - 1
backend-core/src/main/java/cn/kdan/pdf/backend/core/utils/CommonUtils.java

@@ -9,7 +9,7 @@ import org.springframework.stereotype.Component;
  */
 @Component
 @Slf4j
-public class CommonUtils {
+public class CommonBusinessUtils {
 
     /**
      * 语言(zh、zh-CN、zh-Hans表示汉语,en表示英语)