From c7edf6dd7b3e913af333942b2b908adeed0ac1bb Mon Sep 17 00:00:00 2001 From: yujian <yujian@123.com> Date: 星期三, 09 十月 2019 15:51:33 +0800 Subject: [PATCH] 微信激活 -用户登录 --- fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserAccountServiceImpl.java | 225 +++++++++++++++++++++++++++++--------------------------- 1 files changed, 116 insertions(+), 109 deletions(-) diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserAccountServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserAccountServiceImpl.java index 048b7c0..2c47f55 100644 --- a/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserAccountServiceImpl.java +++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserAccountServiceImpl.java @@ -3,6 +3,7 @@ import java.io.File; import java.io.FileWriter; import java.io.IOException; +import java.io.InputStream; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; @@ -15,7 +16,9 @@ import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.yeshi.utils.HttpUtil; import org.yeshi.utils.JsonUtil; +import org.yeshi.utils.entity.FileUploadResult; import org.yeshi.utils.tencentcloud.COSManager; import com.google.gson.Gson; @@ -1082,7 +1085,7 @@ // 閫氳繃Code鎹㈠彇淇℃伅 WXAccountInfoDTO wxAccount = Constant.getWXAccount(acceptData.getPlatform(), acceptData.getVersion()); - WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code, wxAccount.getAppId(), + WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUser(code, wxAccount.getAppId(), wxAccount.getAppSecret()); if (weiXinUser == null) { throw new UserAccountException(1, "寰俊甯愬彿鎺堟潈澶辫触"); @@ -1120,9 +1123,26 @@ spreadUserImgService.deleteImgUrl(userInfo.getId()); } else { LogHelper.test("寰俊unionID涓嶅瓨鍦�:" + weiXinUser.getUnionid()); + + String portrait = null; + if (!StringUtil.isNullOrEmpty(weiXinUser.getHeadimgurl())) { + InputStream asInputStream = HttpUtil.getAsInputStream(weiXinUser.getHeadimgurl()); + if (asInputStream != null) { + FileUploadResult result = COSManager.getInstance().uploadFile(asInputStream, + String.format("/portrait/wx/%s_%s.jpg", weiXinUser.getUnionid(), System.currentTimeMillis() + "")); + if (result != null && !StringUtil.isNullOrEmpty(result.getUrl())) + portrait = result.getUrl(); + } else { + portrait = weiXinUser.getHeadimgurl(); + } + } + + if (StringUtil.isNullOrEmpty(portrait)) + portrait = Constant.systemCommonConfig.getDefaultPortrait(); + // 鍒涘缓鏂拌处鎴� userInfo = new UserInfo(); - userInfo.setPortrait(weiXinUser.getHeadimgurl()); + userInfo.setPortrait(portrait); userInfo.setAppId(appId); userInfo.setNickName(weiXinUser.getNickname()); userInfo.setWxName(weiXinUser.getNickname()); @@ -1170,7 +1190,7 @@ // 閫氳繃Code鎹㈠彇淇℃伅 WXAccountInfoDTO wxAccount = Constant.getWXAccount(acceptData.getPlatform(), acceptData.getVersion()); - WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(wxCode, wxAccount.getAppId(), + WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUser(wxCode, wxAccount.getAppId(), wxAccount.getAppSecret()); if (weiXinUser == null) { throw new UserAccountException(1, "寰俊甯愬彿鎺堟潈澶辫触"); @@ -1184,45 +1204,23 @@ throw new UserAccountException(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC); } - // 閲囩敤redis浜嬪姟闃叉涓�涓井淇″彿澶氭娉ㄥ唽闂 - String watchKey = StringUtil.Md5("REGISTER:" + weiXinUser.getUnionid()); - Jedis jedis = jedisPool.getResource(); - try { - jedis.watch(watchKey); - if (jedis.get(watchKey) != null && Integer.parseInt(jedis.get(watchKey)) > 1) - throw new UserAccountException(10, "璇风◢鍚庡啀璇�"); - Transaction tran = jedis.multi(); - tran.incr(watchKey); - List<Object> exec = tran.exec(); - if (exec == null || exec.size() == 0) - throw new UserAccountException(10, "璇风◢鍚庡啀璇�"); - - UserInfo userInfo = userInfoMapper.getEffectiveUserInfoByWXUnionId(weiXinUser.getUnionid()); - if (userInfo == null) { - redisManager.cacheCommonString(watchKey, JsonUtil.getSimpleGson().toJson(weiXinUser), 60 * 20); - throw new UserAccountException(101, watchKey); - } - - LogHelper.test("寰俊unionID瀛樺湪:" + weiXinUser.getUnionid()); - // 鏇存柊璐︽埛鐧诲綍淇℃伅 - updateLonginInfo(userInfo, loginType, request); - Long uid = userInfo.getId(); - ThreadUtil.run(new Runnable() { - public void run() { - // 鍒犻櫎閭�璇峰垎浜浘 - spreadUserImgService.deleteImgUrl(uid); - } - }); - return userInfo; - - } catch (Exception e) { - e.printStackTrace(); - } finally { - jedis.del(watchKey); - jedis.unwatch(); - jedisPool.returnResource(jedis); + + UserInfo userInfo = userInfoMapper.getEffectiveUserInfoByWXUnionId(weiXinUser.getUnionid()); + if (userInfo == null) { + String longinKey = StringUtil.Md5("WXLogin:" + weiXinUser.getUnionid()); + redisManager.cacheCommonString(longinKey, JsonUtil.getSimpleGson().toJson(weiXinUser), 60 * 20); + throw new UserAccountException(101, longinKey); } - throw new UserAccountException(10, "璇风◢鍚庡啀璇�"); + // 鏇存柊璐︽埛鐧诲綍淇℃伅 + updateLonginInfo(userInfo, loginType, request); + Long uid = userInfo.getId(); + ThreadUtil.run(new Runnable() { + public void run() { + // 鍒犻櫎閭�璇峰垎浜浘 + spreadUserImgService.deleteImgUrl(uid); + } + }); + return userInfo; } @@ -1291,7 +1289,7 @@ throw new UserAccountException(1, "鐢ㄦ埛涓嶅瓨鍦�"); } WXAccountInfoDTO wxAccount = Constant.getWXAccount(acceptData.getPlatform(), acceptData.getVersion()); - WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code, wxAccount.getAppId(), + WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUser(code, wxAccount.getAppId(), wxAccount.getAppSecret()); if (weiXinUser == null) { throw new UserAccountException(2, "寰俊甯愬彿鎺堟潈澶辫触"); @@ -1335,7 +1333,20 @@ String defaultPortrait = Constant.systemCommonConfig.getDefaultPortrait(); if (!StringUtil.isNullOrEmpty(weiXinUser.getHeadimgurl()) && !StringUtil.isNullOrEmpty(defaultPortrait) && defaultPortrait.equals(user.getPortrait())) { - updateUserInfo.setPortrait(weiXinUser.getHeadimgurl()); + String headimgurl = weiXinUser.getHeadimgurl(); + InputStream asInputStream = HttpUtil.getAsInputStream(headimgurl); + if (asInputStream == null) { + LogHelper.test("寰俊澶村儚涓嬭浇澶辫触: " +weiXinUser.getUnionid()+ " " + headimgurl); + } else { + FileUploadResult result = COSManager.getInstance().uploadFile(asInputStream, + String.format("/portrait/wx/%s_%s.jpg", weiXinUser.getUnionid(), System.currentTimeMillis() + "")); + if (result != null && !StringUtil.isNullOrEmpty(result.getUrl())) { + headimgurl = result.getUrl(); + } else { + LogHelper.test("寰俊澶村儚涓婁紶澶辫触: " +weiXinUser.getUnionid()+ " " + headimgurl); + } + } + updateUserInfo.setPortrait(headimgurl); } userInfoMapper.updateByPrimaryKeySelective(updateUserInfo); @@ -1378,73 +1389,69 @@ if (weiXinUser == null) throw new UserAccountException(1, "寰俊鎺堟潈澶辨晥锛岃浣跨敤寰俊閲嶆柊鐧诲綍"); - String watchKey = StringUtil.Md5("REGISTER:" + weiXinUser.getUnionid()); - Jedis jedis = jedisPool.getResource(); - try { - jedis.watch(watchKey); - if (jedis.get(watchKey) != null && Integer.parseInt(jedis.get(watchKey)) > 1) - throw new UserAccountException(10, "璇风◢鍚庡啀璇�"); - - Transaction tran = jedis.multi(); - tran.incr(watchKey); - List<Object> exec = tran.exec(); - if (exec == null || exec.size() == 0) - throw new UserAccountException(10, "璇风◢鍚庡啀璇�"); - - UserInfo userInfo = userInfoMapper.getEffectiveUserInfoByWXUnionId(weiXinUser.getUnionid()); - // 鐩存帴鐢ㄧ殑寰俊鐧诲綍 - if (userInfo != null) - throw new UserAccountException(10, "璇ュ井淇″彿宸茶鍗犵敤"); - - // 鍒涘缓鏂拌处鎴� - userInfo = new UserInfo(); - userInfo.setPortrait(weiXinUser.getHeadimgurl()); - userInfo.setAppId(appId); - userInfo.setNickName(weiXinUser.getNickname()); - userInfo.setWxName(weiXinUser.getNickname()); - userInfo.setWxOpenId(weiXinUser.getOpenid()); - userInfo.setWxUnionId(weiXinUser.getUnionid()); - userInfo.setWxPic(weiXinUser.getHeadimgurl()); - userInfo.setLastLoginTime(System.currentTimeMillis()); - userInfo.setLoginType(2); - userInfo.setLastLoginIp(request.getRemoteHost()); - userInfo.setState(UserInfo.STATE_NORMAL); - addUser(userInfo); - - Long uid = userInfo.getId(); - ThreadUtil.run(new Runnable() { - public void run() { - try { - // 绗竴娆$櫥褰曟椂鍒涘缓鐢ㄦ埛棰濆淇℃伅 - userInfoExtraService.createUserInfoExtra(uid); - } catch (Exception e) { - e.printStackTrace(); - } - - // 鍔犲叆缁戝畾璁板綍 - UserAccountBindingHistory history = new UserAccountBindingHistory(); - history.setContent(phone); - history.setType(UserAccountBindingHistory.TYPE_PHONE); - history.setUid(uid); - history.setFirst(true); - userAccountBindingHistoryService.addUserAccountBindingHistory(history); - - userInfoModifyRecordService.addModifyRecord(uid, ModifyTypeEnum.bindPhone, phone); - userInfoModifyRecordService.addModifyRecord(uid, ModifyTypeEnum.bindWeiXin, weiXinUser.getUnionid()); - } - }); - // 鍒犻櫎缂撳瓨 - redisManager.removeCommonString(key); - - return userInfo; - } catch (Exception e) { - e.printStackTrace(); - } finally { - jedis.del(watchKey); - jedis.unwatch(); - jedisPool.returnResource(jedis); + UserInfo userInfo = userInfoMapper.getEffectiveUserInfoByWXUnionId(weiXinUser.getUnionid()); + // 鐩存帴鐢ㄧ殑寰俊鐧诲綍 + if (userInfo != null) + throw new UserAccountException(10, "璇ュ井淇″彿宸茶鍗犵敤"); + + String portrait = null; + if (!StringUtil.isNullOrEmpty(weiXinUser.getHeadimgurl())) { + InputStream asInputStream = HttpUtil.getAsInputStream(weiXinUser.getHeadimgurl()); + if (asInputStream != null) { + FileUploadResult result = COSManager.getInstance().uploadFile(asInputStream, + String.format("/portrait/wx/%s_%s.jpg", weiXinUser.getUnionid(), System.currentTimeMillis() + "")); + if (result != null && !StringUtil.isNullOrEmpty(result.getUrl())) + portrait = result.getUrl(); + } else { + portrait = weiXinUser.getHeadimgurl(); + } } - throw new UserAccountException(10, "璇风◢鍚庡啀璇�"); + + if (StringUtil.isNullOrEmpty(portrait)) + portrait = Constant.systemCommonConfig.getDefaultPortrait(); + + // 鍒涘缓鏂拌处鎴� + userInfo = new UserInfo(); + userInfo.setPhone(phone); + userInfo.setPortrait(portrait); + userInfo.setAppId(appId); + userInfo.setNickName(weiXinUser.getNickname()); + userInfo.setWxName(weiXinUser.getNickname()); + userInfo.setWxOpenId(weiXinUser.getOpenid()); + userInfo.setWxUnionId(weiXinUser.getUnionid()); + userInfo.setWxPic(weiXinUser.getHeadimgurl()); + userInfo.setLastLoginTime(System.currentTimeMillis()); + userInfo.setLoginType(2); + userInfo.setLastLoginIp(request.getRemoteHost()); + userInfo.setState(UserInfo.STATE_NORMAL); + addUser(userInfo); + + Long uid = userInfo.getId(); + ThreadUtil.run(new Runnable() { + public void run() { + try { + // 绗竴娆$櫥褰曟椂鍒涘缓鐢ㄦ埛棰濆淇℃伅 + userInfoExtraService.createUserInfoExtra(uid); + } catch (Exception e) { + e.printStackTrace(); + } + + // 鍔犲叆缁戝畾璁板綍 + UserAccountBindingHistory history = new UserAccountBindingHistory(); + history.setContent(phone); + history.setType(UserAccountBindingHistory.TYPE_PHONE); + history.setUid(uid); + history.setFirst(true); + userAccountBindingHistoryService.addUserAccountBindingHistory(history); + + userInfoModifyRecordService.addModifyRecord(uid, ModifyTypeEnum.bindPhone, phone); + userInfoModifyRecordService.addModifyRecord(uid, ModifyTypeEnum.bindWeiXin, weiXinUser.getUnionid()); + } + }); + // 鍒犻櫎缂撳瓨 + redisManager.removeCommonString(key); + + return userInfo; } -- Gitblit v1.8.0