From 1d3cef3e21b2f401a31970e9e0dbb3679fa3d4f3 Mon Sep 17 00:00:00 2001 From: fbc <1009345994@qq.com> Date: Wed, 28 Sep 2022 12:12:11 +0800 Subject: [PATCH] =?UTF-8?q?v1.0=20:=20=E8=B0=83=E6=95=B4=E4=B8=89=E6=96=B9?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E6=97=B6=E6=B3=A8=E5=86=8C=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/accompany/core/model/Account.java | 14 +++++-- .../core/service/account/AccountService.java | 10 +---- .../oauth2/service/MyUserDetailsService.java | 2 +- .../service/MyUserDetailsServiceImpl.java | 3 +- .../service/account/AccountManageService.java | 41 +++++++------------ .../oauth2/controller/AccountController.java | 19 +++------ 6 files changed, 35 insertions(+), 54 deletions(-) diff --git a/accompany-base/accompany-core/src/main/java/com/accompany/core/model/Account.java b/accompany-base/accompany-core/src/main/java/com/accompany/core/model/Account.java index d5112dafd..49924c70c 100644 --- a/accompany-base/accompany-core/src/main/java/com/accompany/core/model/Account.java +++ b/accompany-base/accompany-core/src/main/java/com/accompany/core/model/Account.java @@ -39,12 +39,13 @@ public class Account { private String registerIp; + @Deprecated private String weixinOpenid; - + @Deprecated private String weixinUnionid; - + @Deprecated private String qqOpenid; - + @Deprecated private String qqUnionid; private String appleUid; @@ -93,4 +94,11 @@ public class Account { @TableField(value = "device_info") private String deviceInfo; + + @TableField(value = "third_login_type") + private Byte thirdLoginType; + @TableField(value = "open_id") + private String openId; + @TableField(value = "union_id") + private String unionId; } \ No newline at end of file diff --git a/accompany-base/accompany-core/src/main/java/com/accompany/core/service/account/AccountService.java b/accompany-base/accompany-core/src/main/java/com/accompany/core/service/account/AccountService.java index 4f18e15b6..ab94d961f 100644 --- a/accompany-base/accompany-core/src/main/java/com/accompany/core/service/account/AccountService.java +++ b/accompany-base/accompany-core/src/main/java/com/accompany/core/service/account/AccountService.java @@ -1,7 +1,6 @@ package com.accompany.core.service.account; import com.accompany.common.constant.ApplicationConstant; -import com.accompany.common.constant.Constant; import com.accompany.common.netease.neteaseacc.result.TokenRet; import com.accompany.common.redis.RedisKey; import com.accompany.common.utils.BlankUtil; @@ -45,17 +44,12 @@ public class AccountService extends ServiceImpl { /** * 获取第三方登录账号 * - * @param openId * @param unionId * @return */ - public Account getAccountByThird(Integer type, String openId, String unionId) { + public Account getAccountByThird(Byte type, String unionId) { QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.lambda().eq(Constant.AccountType.wx_account.intValue() == type, Account::getWeixinUnionid, unionId) - .eq(Constant.AccountType.apple_account.intValue() == type, Account::getAppleUid, unionId) - .and(Constant.AccountType.qq_account.intValue() == type, - queryWrapper -> queryWrapper.eq(Account::getQqOpenid, openId).or(). - eq(Account::getQqUnionid, unionId)); + wrapper.lambda().eq(Account::getThirdLoginType, type).eq(Account::getUnionId, unionId); List accounts = list(wrapper); if (CollectionUtils.isEmpty(accounts)) { return null; diff --git a/accompany-oauth2/accompany-oauth2-service/src/main/java/com/accompany/oauth2/service/MyUserDetailsService.java b/accompany-oauth2/accompany-oauth2-service/src/main/java/com/accompany/oauth2/service/MyUserDetailsService.java index 6469fc765..01ce021bd 100644 --- a/accompany-oauth2/accompany-oauth2-service/src/main/java/com/accompany/oauth2/service/MyUserDetailsService.java +++ b/accompany-oauth2/accompany-oauth2-service/src/main/java/com/accompany/oauth2/service/MyUserDetailsService.java @@ -13,7 +13,7 @@ public interface MyUserDetailsService extends UserDetailsService { UserDetails loadUserByPhone(String phone, String smsCode, DeviceInfo deviceInfo, String ipAddress) throws Exception; - UserDetails loadUserByOpenId(String openid, int type, DeviceInfo deviceInfo, String ipAddress, String unionId, + UserDetails loadUserByOpenId(String openid, Byte type, DeviceInfo deviceInfo, String ipAddress, String unionId, YiDunDto yiDunDto, ShuMeiDto shuMeiDto, String appleFullName) throws Exception; void login(String reqUserName, UserDetails userDetails, LoginTypeEnum loginTypeEnum, DeviceInfo deviceInfo, String ip, String openId, String unionId, String yiDunToken, String shuMeiDeviceId, String smsCode) throws Exception; diff --git a/accompany-oauth2/accompany-oauth2-service/src/main/java/com/accompany/oauth2/service/MyUserDetailsServiceImpl.java b/accompany-oauth2/accompany-oauth2-service/src/main/java/com/accompany/oauth2/service/MyUserDetailsServiceImpl.java index 496e016b4..a96a60d40 100644 --- a/accompany-oauth2/accompany-oauth2-service/src/main/java/com/accompany/oauth2/service/MyUserDetailsServiceImpl.java +++ b/accompany-oauth2/accompany-oauth2-service/src/main/java/com/accompany/oauth2/service/MyUserDetailsServiceImpl.java @@ -2,7 +2,6 @@ package com.accompany.oauth2.service; import com.accompany.common.constant.AppEnum; import com.accompany.common.constant.Constant; -import com.accompany.common.constant.SmsTypeEnum; import com.accompany.common.device.DeviceInfo; import com.accompany.common.redis.RedisKey; import com.accompany.common.status.BusiStatus; @@ -125,7 +124,7 @@ public class MyUserDetailsServiceImpl implements MyUserDetailsService { } @Override - public UserDetails loadUserByOpenId(String openid, int type, DeviceInfo deviceInfo, String ipAddress, String unionId, + public UserDetails loadUserByOpenId(String openid, Byte type, DeviceInfo deviceInfo, String ipAddress, String unionId, YiDunDto yiDunDto, ShuMeiDto shuMeiDto, String appleFullName) throws Exception { Account account = accountManageService.getOrGenAccountByOpenid(openid, type, deviceInfo, ipAddress, unionId, yiDunDto, shuMeiDto, appleFullName); diff --git a/accompany-oauth2/accompany-oauth2-service/src/main/java/com/accompany/oauth2/service/account/AccountManageService.java b/accompany-oauth2/accompany-oauth2-service/src/main/java/com/accompany/oauth2/service/account/AccountManageService.java index f8d14872d..ee61d9f50 100644 --- a/accompany-oauth2/accompany-oauth2-service/src/main/java/com/accompany/oauth2/service/account/AccountManageService.java +++ b/accompany-oauth2/accompany-oauth2-service/src/main/java/com/accompany/oauth2/service/account/AccountManageService.java @@ -135,8 +135,8 @@ public class AccountManageService { } - public Account getOrGenAccountByOpenid(String openid, int type, DeviceInfo deviceInfo, String ipAddress, String unionId, - YiDunDto yiDunDto, ShuMeiDto shuMeiDto, String appleFullName) throws Exception { + public Account getOrGenAccountByOpenid(String openid, Byte type, DeviceInfo deviceInfo, String ipAddress, String unionId, + YiDunDto yiDunDto, ShuMeiDto shuMeiDto, String appleFullName) throws Exception { log.info("getOrGenAccountByOpenid openId:{},type:{},unionId:{}",openid,type,unionId); final String locKey = RedisKey.lock_register_by_openid.getKey(openid, unionId, String.valueOf(type)); @@ -145,7 +145,7 @@ public class AccountManageService { if (BlankUtil.isBlank(lockVal)){ throw new ServiceException(BusiStatus.REQUEST_FAST); } - Account account = accountService.getAccountByThird(type, openid, unionId); + Account account = accountService.getAccountByThird(type, unionId); if (account == null) { int count = accountService.getRegisterIpCountByOneDay(ipAddress); if (count > maxRegisterCount) { @@ -159,22 +159,13 @@ public class AccountManageService { account.setRegisterIp(ipAddress); account.setSignTime(date); account.setState("1"); - if (type == Constant.AccountType.wx_account.byteValue()) { - account.setWeixinOpenid(openid); - if (!BlankUtil.isBlank(unionId)) { - account.setWeixinUnionid(unionId); - } - } else if (type == Constant.AccountType.qq_account.byteValue()) { - account.setQqOpenid(openid); - if (!BlankUtil.isBlank(unionId)) { - account.setQqUnionid(unionId); - } - } else if (type == Constant.AccountType.apple_account.byteValue()) { - account.setAppleUid(unionId); - account.setAppleFullName(appleFullName); - } account.setErbanNo(erBanNoService.getErBanNo()); account.setPhone(account.getErbanNo().toString()); + // 三方登录信息 + account.setThirdLoginType(type); + account.setUnionId(unionId); + account.setOpenId(openid); + account = fillDeviceInfo(account, deviceInfo); if (deviceInfo != null) { @@ -195,21 +186,17 @@ public class AccountManageService { log.info("TRIGGER USER REGISTER SUCCESS EVENT"); applicationContext.publishEvent(new UserRegisterSuccessEvent(account)); } else { - //account = fillDeviceInfo(account, deviceInfo); - // 已存在用户,先判断account中的微信unionId是否为空或者不一致,如果是的话则更新,不是则跳过 - Boolean bol = (BlankUtil.isBlank(account.getWeixinUnionid())) || !account.getWeixinUnionid().equals(unionId); - if (type == Constant.AccountType.wx_account.byteValue() && bol) { - log.info("account params uid={},old weixinUnionId={},new weixinUnionId={}", account.getUid(), account.getWeixinUnionid(), unionId); - account.setWeixinUnionid(unionId); - } else if (type == 2 && !BlankUtil.isBlank(unionId)) { - //更新存储qq的unionId - account.setQqUnionid(unionId); - } + // 已存在用户,先判断account中的unionId是否为空或者不一致,如果是的话则更新,不是则跳过 String state = account.getState(); if ("2".equals(state)) { throw new CustomOAuth2Exception(CustomOAuth2Exception.INVALID_USER, "用户账号异常,请联系官方客服uid=" + account.getUid()); } + Boolean bol = + (BlankUtil.isBlank(account.getUnionId())) || !account.getUnionId().equals(unionId); + if (bol) { + account.setUnionId(unionId); + } account.setLastLoginTime(new Date()); account.setUpdateTime(new Date()); accountMapper.updateById(account); diff --git a/accompany-oauth2/accompany-oauth2-web/src/main/java/com/accompany/oauth2/controller/AccountController.java b/accompany-oauth2/accompany-oauth2-web/src/main/java/com/accompany/oauth2/controller/AccountController.java index 0d2e0ddf0..254f7f616 100644 --- a/accompany-oauth2/accompany-oauth2-web/src/main/java/com/accompany/oauth2/controller/AccountController.java +++ b/accompany-oauth2/accompany-oauth2-web/src/main/java/com/accompany/oauth2/controller/AccountController.java @@ -395,18 +395,12 @@ public class AccountController extends BaseController { } @RequestMapping("third/login") - public ResponseEntity login(String openid, int type, DeviceInfo deviceInfo, HttpServletRequest request, + public ResponseEntity login(String openid, Integer type, DeviceInfo deviceInfo, HttpServletRequest request, String shuMeiDeviceId, String yiDunToken, AppEnum app) throws Exception { - logger.info("/acc/third/login?openid:{},type:{},shuMeiDeviceId:{},yiDunToken:{},app:{}" ,openid,type,shuMeiDeviceId,yiDunToken,app); + String unionId = request.getParameter("unionid"); + String appleFullName = request.getParameter("appleFullName"); + logger.info("/acc/third/login? app {} , type {}, unionId {}", app, type, unionId); checkAppVersion(deviceInfo); - if (type == Constant.AccountType.wx_account.byteValue()) { - logger.info("============thirdLogin weixin unionId={}", request.getParameter("unionid")); - } else if (type == Constant.AccountType.qq_account.byteValue()) { - logger.info("============thirdLogin qq unionId={}", request.getParameter("unionid")); - } else if (type == Constant.AccountType.apple_account.byteValue()) { - logger.info("============thirdLogin apple appleUid={}", request.getParameter("unionid")); - openid = request.getParameter("unionid"); - } if (StringUtils.isEmpty(openid) || type == 0) { throw new RuntimeException("参数异常"); } @@ -414,9 +408,8 @@ public class AccountController extends BaseController { YiDunDto yiDunDto = accountManageService.buildYiDunDto(oAuthConfig, ipAddress, yiDunToken, null,null, deviceInfo); ShuMeiDto shuMeiDto = accountManageService.buildShuMeiDto(oAuthConfig, deviceInfo, openid, ipAddress, openid, shuMeiDeviceId,"register"); - String unionId = request.getParameter("unionid"); - String appleFullName = request.getParameter("appleFullName"); - UserDetails userDetails = myUserDetailsService.loadUserByOpenId(openid, type, deviceInfo, ipAddress, unionId, yiDunDto, shuMeiDto, appleFullName); + + UserDetails userDetails = myUserDetailsService.loadUserByOpenId(openid, type.byteValue(), deviceInfo, ipAddress, unionId, yiDunDto, shuMeiDto, appleFullName); myUserDetailsService.login(null, userDetails, LoginTypeEnum.get(type), deviceInfo, ipAddress, openid, unionId, yiDunToken, shuMeiDeviceId,null); OAuth2AccessToken token = createAccessToken(userDetails);