Procházet zdrojové kódy

Merge remote-tracking branch 'origin/develop' into develop

tangxiangan před 2 roky
rodič
revize
34e8ad1356

+ 2 - 0
backend-core/src/main/java/cn/kdan/pdf/backend/core/constant/MissionConstant.java

@@ -10,4 +10,6 @@ public interface MissionConstant {
     String EXCEPTION_MSG_NO_ENOUGH_CREDIT = "No Enough Credit";
 
     String LOCK_KEY = "PRE_DEDUCTION_LOCK_KEY_";
+
+    String UNKNOWN_ERROR_MSG = "未知错误,如重试失败请进官方客服QQ群:188917181获得即时帮助。";
 }

+ 26 - 1
backend-core/src/main/java/cn/kdan/pdf/backend/core/controller/MembersController.java

@@ -11,8 +11,10 @@ import cn.kdan.pdf.backend.core.model.member.ModifyPasswordReq;
 import cn.kdan.pdf.backend.core.params.BindAccountParam;
 import cn.kdan.pdf.backend.core.params.UserResetPwdParams;
 import cn.kdan.pdf.backend.core.pojo.app.BindAccountVo;
+import cn.kdan.pdf.backend.core.pojo.app.MemberVo;
 import cn.kdan.pdf.backend.core.service.AuthService;
 import cn.kdan.pdf.backend.core.service.MemberService;
+import com.sun.org.apache.xpath.internal.objects.XString;
 import constant.CommonConstant;
 import exception.BackendRuntimeException;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -152,7 +154,30 @@ public class MembersController {
      */
     @PostMapping("/unbindAccount")
     public AppResultMap<BindAccountVo> unbindAccount(@RequestBody AppRequestParam<BindAccountParam> param){
-        return null;
+        BindAccountVo bindAccountVo = memberService.unbindAccount(param.getData());
+        return new AppResultMap<>(CommonConstant.SUCCESS,CommonConstant.CODE_SUCCESS,bindAccountVo);
+    }
+
+    /**
+     * app端获取用户信息
+     * @param subscription 1:不显示订阅信息 0:显示订阅信息
+     * @param withSocial 如果是QQ、微信登录,传入字段可实现第三方登录的信息。0:不显示, 1:显示
+     * @return 用户信息
+     */
+    @GetMapping("appGetMemberInfo")
+    public AppResultMap<MemberInfoResp> appGetMemberInfo(@RequestParam("subscription") String subscription, @RequestParam("withSocial") String withSocial){
+        return new AppResultMap<>(CommonConstant.SUCCESS,CommonConstant.CODE_SUCCESS,memberService.getMemberDetail(null));
     }
 
+    /**
+     * app端修改昵称
+     * @param param 用户输入新昵称
+     * @return 用户信息
+     */
+    @PutMapping("appModifyName")
+    public AppResultMap<MemberVo> appModifyName(@RequestParam("name") AppRequestParam<String> param){
+        return new AppResultMap<>(CommonConstant.SUCCESS,CommonConstant.CODE_SUCCESS,memberService.appModifyName(param.getData()));
+    }
+
+
 }

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

@@ -8,6 +8,7 @@ import cn.kdan.pdf.backend.core.model.member.ModifyPasswordReq;
 import cn.kdan.pdf.backend.core.params.BindAccountParam;
 import cn.kdan.pdf.backend.core.params.UserResetPwdParams;
 import cn.kdan.pdf.backend.core.pojo.app.BindAccountVo;
+import cn.kdan.pdf.backend.core.pojo.app.MemberVo;
 
 public interface MemberService {
 
@@ -96,4 +97,10 @@ public interface MemberService {
      */
     BindAccountVo unbindAccount(BindAccountParam param);
 
+    /**
+     * 修改用户昵称
+     * @param name 用户输入新昵称
+     * @return 用户信息
+     */
+    MemberVo appModifyName(String name);
 }

+ 8 - 0
backend-core/src/main/java/cn/kdan/pdf/backend/core/service/SocialAccountService.java

@@ -44,4 +44,12 @@ public interface SocialAccountService {
      * @param param 绑定参数
      */
     String bindSocialAccount(Members member, BindAccountParam param);
+
+    /**
+     * 解绑账号
+     * @param currentUser 当前用户
+     * @param param 绑定参数
+     * @return socialAccount的id
+     */
+    String unbindSocialAccount(Members currentUser, BindAccountParam param);
 }

+ 22 - 17
backend-core/src/main/java/cn/kdan/pdf/backend/core/service/impl/AuthServiceImpl.java

@@ -126,14 +126,6 @@ public class AuthServiceImpl implements AuthService {
         Members members = userService.getById(userId);
         Set<SimpleGrantedAuthority> authorities = new LinkedHashSet<>();
         String account = members.getId();
-//        if(!StringUtils.isEmpty(members.getPhone())){
-//            account = members.getPhone();
-//        }else if(!StringUtils.isEmpty(members.getEmail())){
-//            account = members.getEmail();
-//        } else{
-//            SocialAccounts socialAccount = socialAccountService.selectByMemberId(userId);
-//            account = socialAccount.getAccountId();
-//        }
         CustomUserDetails principal = new CustomUserDetails(members.getId(),
                 account,
                 members.getPasswordDigest(),
@@ -296,15 +288,28 @@ public class AuthServiceImpl implements AuthService {
             Members member = userService.getByAccount(attribute.getAccount());
             String mobileRegex = CommonConstant.mobileRegex;
             //如果members为空并且account为手机号,新增一条members数据;邮箱不支持注册,只允许输入账号密码登录
-            if(ObjectUtils.isEmpty(member) && account.matches(mobileRegex)){
-                member.setName(String.valueOf(System.currentTimeMillis()).substring(0, 10));
-                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("");
+            if(account.matches(mobileRegex)){
+                if(ObjectUtils.isEmpty(member)) {
+                    member = new Members();
+                    member.setName(String.valueOf(System.currentTimeMillis()).substring(0, 10));
+                    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("");
+                }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();
+                    }
+                }
             }else {
                 //如果用户存在将用户id返回,否则其他情况(邮箱登录)全部抛异常:用户未注册
                 if (ObjectUtils.isNotEmpty(member)) {

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

@@ -489,7 +489,6 @@ public class MemberServiceImpl implements MemberService {
         return memberId;
     }
 
-    //todo 先做绑定第三方账号
     @Override
     @Transactional(rollbackFor = BackendRuntimeException.class)
     public BindAccountVo bindAccount(BindAccountParam param) {
@@ -499,6 +498,8 @@ public class MemberServiceImpl implements MemberService {
         Members currentUser = getCurrentUser();
         BeanUtils.copyProperties(currentUser,memberVo);
         memberVo.setStatus("verified");
+        bindAccountVo.setMember(memberVo);
+
         String provider = param.getProvider();
         if("phone".equals(provider)){
             String phone = param.getPhone();
@@ -537,18 +538,58 @@ public class MemberServiceImpl implements MemberService {
         } else{
             //绑定第三方账号
             String accountId = socialAccountService.bindSocialAccount(currentUser,param);
+            SocialAccounts socialAccounts = socialAccountService.selectByAccountId(accountId);
+            BeanUtils.copyProperties(socialAccounts,socialAccountVo);
+            bindAccountVo.setSocialAccount(socialAccountVo);
         }
+        return bindAccountVo;
+    }
 
-        SocialAccounts socialAccounts = socialAccountService.selectByMemberId(currentUser.getId(), ProviderEnum.getCodeByName(provider));
-        BeanUtils.copyProperties(socialAccounts,socialAccountVo);
+    @Override
+    public BindAccountVo unbindAccount(BindAccountParam param) {
+        BindAccountVo bindAccountVo = new BindAccountVo();
+        MemberVo memberVo = new MemberVo();
+        SocialAccountVo accountVo = new SocialAccountVo();
 
+        Members currentUser = getCurrentUser();
+        BeanUtils.copyProperties(currentUser,memberVo);
+        memberVo.setStatus("verified");
         bindAccountVo.setMember(memberVo);
-        bindAccountVo.setSocialAccount(socialAccountVo);
+
+        String provider = param.getProvider();
+        if("phone".equals(provider)){
+            currentUser.setPhone("");
+            update(currentUser);
+        } else {
+            String accountId = socialAccountService.unbindSocialAccount(currentUser,param);
+            SocialAccounts socialAccounts = socialAccountService.selectByAccountId(accountId);
+            BeanUtils.copyProperties(socialAccounts,accountVo);
+            bindAccountVo.setSocialAccount(accountVo);
+        }
         return bindAccountVo;
     }
 
     @Override
-    public BindAccountVo unbindAccount(BindAccountParam param) {
-        return null;
+    public MemberVo appModifyName(String name) {
+        modifyNickname(name);
+        Members currentUser = getCurrentUser();
+        return createMemberVo(currentUser);
+    }
+
+    /**
+     * 返回一个memberVo对象
+     * @param member 当前用户
+     * @return memberVo
+     */
+    public MemberVo createMemberVo(Members member){
+        MemberVo vo = new MemberVo();
+        BeanUtils.copyProperties(member,vo);
+        AvatarsExample example = new AvatarsExample();
+        example.createCriteria().andMemberIdEqualTo(member.getId());
+        List<Avatars> avatars = avatarsMapper.selectByExample(example);
+        if(!CollectionUtils.isEmpty(avatars)){
+            vo.setAvatarUrl(avatars.get(0).getAvatar());
+        }
+        return vo;
     }
 }

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

@@ -1,6 +1,7 @@
 package cn.kdan.pdf.backend.core.service.impl;
 
 import cn.kdan.pdf.backend.core.client.ComPdfKitClient;
+import cn.kdan.pdf.backend.core.constant.MissionConstant;
 import cn.kdan.pdf.backend.core.constant.MissionFilesConstant;
 import cn.kdan.pdf.backend.core.enums.MissionFileStatusEnum;
 import cn.kdan.pdf.backend.core.mapper.ext.ExtMissionFilesMapper;
@@ -74,7 +75,7 @@ public class MissionFileServiceImpl implements MissionFilesService {
             missionFilesMapper.updateByPrimaryKeySelective(missionFile);
         } catch (Exception e) {
             missionFile.setStatus(MissionFileStatusEnum.FAILED.value());
-            missionFile.setFailReason(e.getMessage());
+            missionFile.setFailReason(MissionConstant.UNKNOWN_ERROR_MSG);
             missionFilesMapper.updateByPrimaryKeySelective(missionFile);
             throw new BackendRuntimeException(e.getMessage());
         }

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

@@ -122,4 +122,28 @@ public class SocialAccountServiceImpl implements SocialAccountService {
         socialAccount.setUpdatedAt(new Date());
         socialAccountsMapper.updateByExample(socialAccount,example);
     }
+
+    @Override
+    public String unbindSocialAccount(Members currentUser, BindAccountParam param) {
+        String accountId = "";
+        String accessToken = param.getAccessToken();
+        String openid = param.getOpenid();
+        String provider = param.getProvider();
+        SocialAccountsExample example = new SocialAccountsExample();
+        if(ProviderEnum.TENCENT.getName().equals(provider)){
+            Tencent userInfo = TencentUtils.getUserInfo(accessToken);
+            String unionId = userInfo.getUnionId();
+            accountId = unionId;
+            example.createCriteria().andAccountIdEqualTo(unionId);
+            socialAccountsMapper.deleteByExample(example);
+        } else {
+            Wechat userInfo = WechatUtils.getUserInfo(openid, accessToken);
+            String unionId = userInfo.getUnionId();
+            accountId = unionId;
+            SocialAccounts socialAccount = selectByAccountId(unionId);
+            example.createCriteria().andAccountIdEqualTo(unionId);
+            socialAccountsMapper.deleteByExample(example);
+        }
+        return accountId;
+    }
 }