Browse Source

Merge branch 'app_sfq' into develop

songfuqiang 2 years ago
parent
commit
0c1eea95f8
17 changed files with 421 additions and 26 deletions
  1. 36 0
      backend-core/src/main/java/cn/kdan/pdf/backend/core/controller/AdvertisementController.java
  2. 34 0
      backend-core/src/main/java/cn/kdan/pdf/backend/core/controller/AvatarController.java
  3. 27 0
      backend-core/src/main/java/cn/kdan/pdf/backend/core/controller/DeviceController.java
  4. 45 0
      backend-core/src/main/java/cn/kdan/pdf/backend/core/enums/LanguageEnum.java
  5. 22 0
      backend-core/src/main/java/cn/kdan/pdf/backend/core/params/QueryAdvertisementParam.java
  6. 25 0
      backend-core/src/main/java/cn/kdan/pdf/backend/core/pojo/app/AdvertisementVo.java
  7. 19 0
      backend-core/src/main/java/cn/kdan/pdf/backend/core/service/AdvertisementService.java
  8. 26 0
      backend-core/src/main/java/cn/kdan/pdf/backend/core/service/AvatarService.java
  9. 6 0
      backend-core/src/main/java/cn/kdan/pdf/backend/core/service/MemberService.java
  10. 4 2
      backend-core/src/main/java/cn/kdan/pdf/backend/core/service/SocialAccountService.java
  11. 47 0
      backend-core/src/main/java/cn/kdan/pdf/backend/core/service/impl/AdvertisementServiceImpl.java
  12. 6 3
      backend-core/src/main/java/cn/kdan/pdf/backend/core/service/impl/AuthServiceImpl.java
  13. 40 0
      backend-core/src/main/java/cn/kdan/pdf/backend/core/service/impl/AvatarServiceImpl.java
  14. 11 6
      backend-core/src/main/java/cn/kdan/pdf/backend/core/service/impl/MemberServiceImpl.java
  15. 2 13
      backend-core/src/main/java/cn/kdan/pdf/backend/core/service/impl/PricingServiceImpl.java
  16. 35 2
      backend-core/src/main/java/cn/kdan/pdf/backend/core/service/impl/SocialAccountServiceImpl.java
  17. 36 0
      backend-core/src/main/java/cn/kdan/pdf/backend/core/utils/CommonBusinessUtils.java

+ 36 - 0
backend-core/src/main/java/cn/kdan/pdf/backend/core/controller/AdvertisementController.java

@@ -0,0 +1,36 @@
+package cn.kdan.pdf.backend.core.controller;
+
+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 constant.CommonConstant;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import pojo.AppRequestParam;
+import pojo.AppResultMap;
+
+/**
+ * @author sfq
+ * @description
+ */
+@RestController
+@RequestMapping("/advertisement")
+public class AdvertisementController {
+
+    @Autowired
+    private AdvertisementService advertisementService;
+
+    /**
+     * 条件查询广告数据
+     * @param param 查询条件
+     * @return 广告信息
+     */
+    @PostMapping("/fetchOne")
+    public AppResultMap<AdvertisementVo> fetchOne(@RequestBody AppRequestParam<QueryAdvertisementParam> param){
+        return new AppResultMap<>(CommonConstant.SUCCESS,CommonConstant.CODE_SUCCESS,advertisementService.fetchOne(param.getData()));
+    }
+
+}

+ 34 - 0
backend-core/src/main/java/cn/kdan/pdf/backend/core/controller/AvatarController.java

@@ -0,0 +1,34 @@
+package cn.kdan.pdf.backend.core.controller;
+
+import cn.kdan.pdf.backend.core.model.Avatars;
+import cn.kdan.pdf.backend.core.service.AvatarService;
+import constant.CommonConstant;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import pojo.AppResultMap;
+
+import java.util.List;
+
+/**
+ * @author sfq
+ * @description
+ */
+@RestController
+@RequestMapping("/avatar")
+public class AvatarController {
+
+    @Autowired
+    private AvatarService avatarService;
+
+    /**
+     * 查询头像列表
+     * @return 头像列表信息
+     */
+    @GetMapping("/list")
+    public AppResultMap<List<Avatars>> list(){
+        return new AppResultMap(CommonConstant.SUCCESS,CommonConstant.CODE_SUCCESS,avatarService.list());
+    }
+
+}

+ 27 - 0
backend-core/src/main/java/cn/kdan/pdf/backend/core/controller/DeviceController.java

@@ -0,0 +1,27 @@
+package cn.kdan.pdf.backend.core.controller;
+
+import cn.kdan.pdf.backend.core.service.DeviceService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import pojo.AppRequestParam;
+import pojo.AppResultMap;
+
+/**
+ * @author sfq
+ * @description
+ */
+@RestController
+@RequestMapping("/device")
+public class DeviceController {
+
+    @Autowired
+    private DeviceService deviceService;
+
+    @PutMapping("/updateInfo")
+    public AppResultMap updateInfo(AppRequestParam param){
+        return new AppResultMap();
+    }
+
+}

+ 45 - 0
backend-core/src/main/java/cn/kdan/pdf/backend/core/enums/LanguageEnum.java

@@ -0,0 +1,45 @@
+package cn.kdan.pdf.backend.core.enums;
+
+/**
+ * @author : sfq
+ * @date : 2022/12/14 19:47
+ * @description 'zh-CN': 0, 'en': 1
+ */
+public enum LanguageEnum {
+
+    /**
+     * web端
+     */
+    ZH_CN("zh-CN",0),
+    /**
+     * 安卓端
+     */
+    EN("en",1);
+
+    private final String name;
+    private final Integer value;
+
+    LanguageEnum(String name, Integer value){
+        this.name = name;
+        this.value = value;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public Integer getValue() {
+        return value;
+    }
+
+    public static Integer getCodeByName(String name){
+        Integer value = 0;
+        for (LanguageEnum languageEnum : LanguageEnum.values()) {
+            if(languageEnum.getName().equals(name)){
+                value = languageEnum.getValue();
+            }
+        }
+        return value;
+    }
+
+}

+ 22 - 0
backend-core/src/main/java/cn/kdan/pdf/backend/core/params/QueryAdvertisementParam.java

@@ -0,0 +1,22 @@
+package cn.kdan.pdf.backend.core.params;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+/**
+ * @author sfq
+ * @description
+ */
+@Data
+public class QueryAdvertisementParam {
+
+    private String slug;
+
+    private String dimension;
+
+    private String language;
+
+    @JsonProperty("version_name")
+    private String versionName;
+
+}

+ 25 - 0
backend-core/src/main/java/cn/kdan/pdf/backend/core/pojo/app/AdvertisementVo.java

@@ -0,0 +1,25 @@
+package cn.kdan.pdf.backend.core.pojo.app;
+
+import lombok.Data;
+
+import java.util.Map;
+
+/**
+ * @author sfq
+ * @description
+ */
+@Data
+public class AdvertisementVo {
+
+    private String id;
+    private String slug;
+    private String language;
+    private String title;
+    private String dimension;
+    private String linkText;
+    private String linkUrl;
+    private String description;
+    private String imageUrl;
+    private Map<String, String> imageUrls;
+
+}

+ 19 - 0
backend-core/src/main/java/cn/kdan/pdf/backend/core/service/AdvertisementService.java

@@ -0,0 +1,19 @@
+package cn.kdan.pdf.backend.core.service;
+
+import cn.kdan.pdf.backend.core.params.QueryAdvertisementParam;
+import cn.kdan.pdf.backend.core.pojo.app.AdvertisementVo;
+
+/**
+ * @author : sfq
+ * @date : 2022/12/14 17:45
+ */
+public interface AdvertisementService {
+
+    /**
+     * 查询广告数据
+     * @param param 查询条件
+     * @return 广告信息
+     */
+    AdvertisementVo fetchOne(QueryAdvertisementParam param);
+
+}

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

@@ -0,0 +1,26 @@
+package cn.kdan.pdf.backend.core.service;
+
+import cn.kdan.pdf.backend.core.model.Avatars;
+
+import java.util.List;
+
+/**
+ * @author : sfq
+ * @date : 2022/12/14 16:32
+ */
+public interface AvatarService {
+
+    /**
+     * 查询头像列表信息
+     * @return 头像信息集合
+     */
+    List<Avatars> list();
+
+    /**
+     * 根据用户id查询头像路径
+     * @param memberId 用户id
+     * @return 头像路径
+     */
+    String selectByMemberId(String memberId);
+
+}

+ 6 - 0
backend-core/src/main/java/cn/kdan/pdf/backend/core/service/MemberService.java

@@ -103,4 +103,10 @@ public interface MemberService {
      * @return 用户信息
      */
     MemberVo appModifyName(String name);
+
+    /**
+     * 根据用户id删除用户
+     * @param memberId 用户ID
+     */
+    void deleteByMemberId(String memberId);
 }

+ 4 - 2
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);
 
     /**
      * 解绑账号
@@ -51,5 +53,5 @@ public interface SocialAccountService {
      * @param param 绑定参数
      * @return socialAccount的id
      */
-    String unbindSocialAccount(Members currentUser, BindAccountParam param);
+    String unbindSocialAccount(Members currentUser, BindAccountParam param, SocialAccountVo accountVo);
 }

+ 47 - 0
backend-core/src/main/java/cn/kdan/pdf/backend/core/service/impl/AdvertisementServiceImpl.java

@@ -0,0 +1,47 @@
+package cn.kdan.pdf.backend.core.service.impl;
+
+import cn.kdan.pdf.backend.core.enums.LanguageEnum;
+import cn.kdan.pdf.backend.core.mapper.AdvertisementsMapper;
+import cn.kdan.pdf.backend.core.model.Advertisements;
+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.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.List;
+
+/**
+ * @author sfq
+ * @description
+ */
+@Service
+public class AdvertisementServiceImpl implements AdvertisementService {
+
+    @Autowired
+    private AdvertisementsMapper advertisementsMapper;
+
+    @Override
+    public AdvertisementVo fetchOne(QueryAdvertisementParam param) {
+        AdvertisementVo vo = new AdvertisementVo();
+        String dimension = param.getDimension();
+        String slug = param.getSlug();
+        String versionName = param.getVersionName();
+        String language = param.getLanguage();
+        language = CommonBusinessUtils.judgeLanguage(language);
+        AdvertisementsExample example = new AdvertisementsExample();
+        example.createCriteria().andDimensionEqualTo(dimension).andSlugEqualTo(slug).andLanguageEqualTo(LanguageEnum.getCodeByName(language));
+        List<Advertisements> advertisementList = advertisementsMapper.selectByExample(example);
+        if(CollectionUtils.isEmpty(advertisementList)){
+            Advertisements adv = advertisementList.get(0);
+            BeanUtils.copyProperties(adv,vo);
+            vo.setImageUrl(adv.getImage());
+        }
+        return vo;
+    }
+
+}

+ 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) {
@@ -292,22 +294,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 {
@@ -320,9 +323,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("账号/密码输入有误");
                     }

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

@@ -0,0 +1,40 @@
+package cn.kdan.pdf.backend.core.service.impl;
+
+import cn.kdan.pdf.backend.core.mapper.AvatarsMapper;
+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;
+
+/**
+ * @author sfq
+ * @description
+ */
+@Service
+public class AvatarServiceImpl implements AvatarService {
+
+    @Resource
+    private AvatarsMapper avatarsMapper;
+
+    @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();
+    }
+}

+ 11 - 6
backend-core/src/main/java/cn/kdan/pdf/backend/core/service/impl/MemberServiceImpl.java

@@ -537,15 +537,14 @@ 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;
     }
 
     @Override
+    @Transactional(rollbackFor = BackendRuntimeException.class)
     public BindAccountVo unbindAccount(BindAccountParam param) {
         BindAccountVo bindAccountVo = new BindAccountVo();
         MemberVo memberVo = new MemberVo();
@@ -561,15 +560,14 @@ public class MemberServiceImpl implements MemberService {
             currentUser.setPhone("");
             update(currentUser);
         } else {
-            String accountId = socialAccountService.unbindSocialAccount(currentUser,param);
-            SocialAccounts socialAccounts = socialAccountService.selectByAccountId(accountId);
-            BeanUtils.copyProperties(socialAccounts,accountVo);
+            String accountId = socialAccountService.unbindSocialAccount(currentUser, param, accountVo);
             bindAccountVo.setSocialAccount(accountVo);
         }
         return bindAccountVo;
     }
 
     @Override
+    @Transactional(rollbackFor = BackendRuntimeException.class)
     public MemberVo appModifyName(String name) {
         modifyNickname(name);
         Members currentUser = getCurrentUser();
@@ -592,4 +590,11 @@ public class MemberServiceImpl implements MemberService {
         }
         return vo;
     }
+
+    @Override
+    @Transactional(rollbackFor = BackendRuntimeException.class)
+    public void deleteByMemberId(String memberId) {
+        membersMapper.deleteByPrimaryKey(memberId);
+    }
+
 }

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

@@ -12,6 +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.CommonBusinessUtils;
 import enums.CommonEnum;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
@@ -37,14 +38,6 @@ public class PricingServiceImpl implements PricingService {
     @Autowired
     private MemberService memberService;
 
-    /**
-     * 语言(zh、zh-CN、zh-Hans表示汉语,en表示英语)
-     */
-    private final static String ZH = "zh";
-    private final static String ZH_CN = "zh-CN";
-    private final static String ZH_HANS = "zh-Hans";
-    private final static String EN = "en";
-
     /**
      * 1个月
      */
@@ -61,11 +54,7 @@ public class PricingServiceImpl implements PricingService {
             client = ClientEnum.WEB.value();
         }
         String language = req.getLanguage();
-        if ("".equals(language) || ZH.equals(language) || ZH_CN.equals(language) || ZH_HANS.equals(language)) {
-            language = ZH_CN;
-        } else {
-            language = EN;
-        }
+        language = CommonBusinessUtils.judgeLanguage(language);
 
         Members member = memberService.getCurrentUser();
         PricingsExample example = new PricingsExample();

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

@@ -6,15 +6,21 @@ 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.MemberService;
 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;
@@ -30,6 +36,8 @@ public class SocialAccountServiceImpl implements SocialAccountService {
 
     @Resource
     private SocialAccountsMapper socialAccountsMapper;
+    @Resource
+    private MemberService memberService;
 
     @Override
     public SocialAccounts selectByAccountId(String accountId) {
@@ -70,18 +78,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());
@@ -89,15 +104,25 @@ public class SocialAccountServiceImpl implements SocialAccountService {
                 socialAccount.setAvatar(userInfo.getFigureUrl());
                 insertSocialAccount(socialAccount);
             } else{
+                //如果有第三方账号,需要先将原用户账号删除,再进行绑定当前用户账号
+                String memberId = socialAccount.getMemberId();
+                memberService.deleteByMemberId(memberId);
                 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));
@@ -105,9 +130,13 @@ public class SocialAccountServiceImpl implements SocialAccountService {
                 socialAccount.setName(userInfo.getNickname());
                 insertSocialAccount(socialAccount);
             } else{
+                //如果有第三方账号,需要先将原用户账号删除,再进行绑定当前用户账号
+                String memberId = socialAccount.getMemberId();
+                memberService.deleteByMemberId(memberId);
                 socialAccount.setMemberId(member.getId());
                 updateSocialAccount(socialAccount);
             }
+            BeanUtils.copyProperties(socialAccount,socialAccountVo);
         }
         return accountId;
     }
@@ -124,16 +153,19 @@ public class SocialAccountServiceImpl implements SocialAccountService {
     }
 
     @Override
-    public String unbindSocialAccount(Members currentUser, BindAccountParam param) {
+    public String unbindSocialAccount(Members currentUser, BindAccountParam param, SocialAccountVo accountVo) {
         String accountId = "";
         String accessToken = param.getAccessToken();
         String openid = param.getOpenid();
         String provider = param.getProvider();
+        accountVo.setProvider(provider);
         SocialAccountsExample example = new SocialAccountsExample();
         if(ProviderEnum.TENCENT.getName().equals(provider)){
             Tencent userInfo = TencentUtils.getUserInfo(accessToken);
             String unionId = userInfo.getUnionId();
             accountId = unionId;
+            SocialAccounts socialAccount = selectByAccountId(accountId);
+            BeanUtils.copyProperties(socialAccount,accountVo);
             example.createCriteria().andAccountIdEqualTo(unionId);
             socialAccountsMapper.deleteByExample(example);
         } else {
@@ -141,6 +173,7 @@ public class SocialAccountServiceImpl implements SocialAccountService {
             String unionId = userInfo.getUnionId();
             accountId = unionId;
             SocialAccounts socialAccount = selectByAccountId(unionId);
+            BeanUtils.copyProperties(socialAccount,accountVo);
             example.createCriteria().andAccountIdEqualTo(unionId);
             socialAccountsMapper.deleteByExample(example);
         }

+ 36 - 0
backend-core/src/main/java/cn/kdan/pdf/backend/core/utils/CommonBusinessUtils.java

@@ -0,0 +1,36 @@
+package cn.kdan.pdf.backend.core.utils;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author sfq
+ * @description
+ */
+@Component
+@Slf4j
+public class CommonBusinessUtils {
+
+    /**
+     * 语言(zh、zh-CN、zh-Hans表示汉语,en表示英语)
+     */
+    private final static String ZH = "zh";
+    private final static String ZH_CN = "zh-CN";
+    private final static String ZH_HANS = "zh-Hans";
+    private final static String EN = "en";
+
+    /**
+     * 判断语言
+     * @param language 语言类型
+     * @return 语言类型
+     */
+    public static String judgeLanguage(String language){
+        if ("".equals(language) || ZH.equals(language) || ZH_CN.equals(language) || ZH_HANS.equals(language)) {
+            language = ZH_CN;
+        } else {
+            language = EN;
+        }
+        return language;
+    }
+
+}