From f94a5a1d3fe9bde0e599d41f2d97caea1b08a88d Mon Sep 17 00:00:00 2001 From: yujian <yujian@163.com> Date: 星期一, 29 六月 2020 15:48:12 +0800 Subject: [PATCH] 免单调整 --- fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserAccountServiceImpl.java | 313 +++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 259 insertions(+), 54 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 b394cc1..4bc9603 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 @@ -18,8 +18,6 @@ import com.google.gson.Gson; import com.qcloud.cos.model.COSObjectSummary; import com.qcloud.cos.model.ObjectListing; -import com.yeshi.fanli.dao.mybatis.AccountMessageMapper; -import com.yeshi.fanli.dao.mybatis.UserConnectHistoryMapper; import com.yeshi.fanli.dao.mybatis.UserInfoMapper; import com.yeshi.fanli.dto.wx.WXAccountInfoDTO; import com.yeshi.fanli.entity.accept.AcceptData; @@ -78,13 +76,7 @@ private BindingAccountService bindingAccountService; @Resource - private UserConnectHistoryMapper userConnectHistoryMapper; - - @Resource private ThreeSaleSerivce threeSaleSerivce; - - @Resource - private AccountMessageMapper accountMessageMapper; @Resource private SpreadUserImgService spreadUserImgService; @@ -149,8 +141,7 @@ } userInfo = getUserInfoByTaoBaoOpenId(appId, tbUserInfo.getOpenid()); // 鍒ゆ柇鐢ㄦ埛鏄惁琚垹闄� - if (userInfo != null && userInfo.getState() != null - && (userInfo.getState() != UserInfo.STATE_NORMAL)) + if (userInfo != null && userInfo.getState() != null && (userInfo.getState() != UserInfo.STATE_NORMAL)) userInfo = null; if (userInfo == null) {// 鍘熷厛鐨勮处鍙蜂笉瀛樺湪 userInfo = new UserInfo(); @@ -193,9 +184,7 @@ userInfo = getUserInfoByWXUnionId(appId, weiXinUser.getUnionid()); // 鍒ゆ柇鐢ㄦ埛鏄惁琚垹闄� - if (userInfo != null && userInfo.getState() != null - && (userInfo.getState() != UserInfo.STATE_NORMAL - )) + if (userInfo != null && userInfo.getState() != null && (userInfo.getState() != UserInfo.STATE_NORMAL)) userInfo = null; // 鐩存帴鐢ㄧ殑寰俊鐧诲綍 if (lastUser == null) { @@ -332,8 +321,7 @@ userInfo = getUserInfoByPhone(appId, phone); // 鍒ゆ柇鐢ㄦ埛鏄惁琚垹闄� - if (userInfo != null && userInfo.getState() != null - && (userInfo.getState() != UserInfo.STATE_NORMAL)) + if (userInfo != null && userInfo.getState() != null && (userInfo.getState() != UserInfo.STATE_NORMAL)) userInfo = null; if (userInfo == null) {// 鍘熷厛鐨勮处鍙蜂笉瀛樺湪 @@ -459,7 +447,6 @@ } } - /** * 鏍规嵁绯荤粺涓巙nionid瀵绘壘鐢ㄦ埛 * @@ -532,7 +519,7 @@ // 鍓旈櫎琚垹闄ゆ帀鐨勭敤鎴� for (int i = 0; i < list.size(); i++) { - if (list.get(i).getState() !=UserInfo.STATE_NORMAL) { + if (list.get(i).getState() != UserInfo.STATE_NORMAL) { list.remove(i); i--; } @@ -864,7 +851,6 @@ String key = RedisKeyEnum.getRedisKey(RedisKeyEnum.SMSLoginCount, phone); redisManager.removeCommonString(key); - // 閲囩敤redis浜嬪姟闃叉涓�涓墜鏈哄彿澶氭娉ㄥ唽闂 String watchKey = StringUtil.Md5("REGISTER:" + phone); Jedis jedis = jedisPool.getResource(); @@ -901,10 +887,8 @@ } catch (Exception e) { e.printStackTrace(); } - userInfoModifyRecordService.addModifyRecord(userInfo.getId(), ModifyTypeEnum.bindPhone, phone); } - return userInfo; } } catch (Exception e) { @@ -917,6 +901,92 @@ throw new UserAccountException(10, "璇风◢鍚庡啀璇�"); } + + @Transactional(rollbackFor = Exception.class) + @Override + public UserInfo loginPhoneNew(HttpServletRequest request, int loginType, String vcode, String phone, String appId) + throws UserAccountException { + // 绌洪娓呯悊 + if (phone == null || phone.trim().length() == 0) { + throw new UserAccountException(1, "璇疯緭鍏ユ墜鏈哄彿鐮�"); + } + phone = phone.replaceAll(" ", ""); + + // 鑻规灉搴旂敤鍟嗗簵涓婄嚎娴嬭瘯鍙风爜 + if ("17316780233".equalsIgnoreCase(phone) && "2581".equalsIgnoreCase(vcode)) { + ; + } else { + if (StringUtil.isNullOrEmpty(vcode)) { + throw new UserAccountException(1, "璇疯緭鍏ラ獙璇佺爜"); + } + + String oldVcode = redisManager.getSMSVCode(phone, SMSHistory.TYPE_LOGIN); + LogHelper.test("----------------------鐧诲綍楠岃瘉鐮侊細 " + oldVcode); + if (!Constant.IS_TEST) + if (StringUtil.isNullOrEmpty(oldVcode) || !oldVcode.equalsIgnoreCase(vcode)) { + throw new UserAccountException(1, "楠岃瘉鐮侀敊璇紝閲嶆柊杈撳叆"); + } else {// 楠岃瘉鐮佽緭鍏ユ纭� + redisManager.clearSMSVCode(phone, SMSHistory.TYPE_LOGIN); + } + } + + JSONObject logInfo = new JSONObject(); + logInfo.put("appId", appId); + logInfo.put("phone", phone); + logInfo.put("loginType", loginType); + LogHelper.lgoinInfo(logInfo.toString()); + + // 鍒ゆ柇鎵嬫満鍙风爜鏄惁琚皝绂� + ForbiddenUserIdentifyCode identifyCode1 = forbiddenUserIdentifyCodeService + .listByTypeAndIdentifyCode(ForbiddenUserIdentifyCodeTypeEnum.phone, phone); + if (identifyCode1 != null && identifyCode1.getEffective() != null && identifyCode1.getEffective()) { + throw new UserAccountException(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC); + } + // 娓呯┖闄愬埗 + redisManager.clearSMSFrequencyLimit(phone, SMSHistory.TYPE_LOGIN); + // 娓呯悊娆℃暟 + String key = RedisKeyEnum.getRedisKey(RedisKeyEnum.SMSLoginCount, phone); + redisManager.removeCommonString(key); + + // 閲囩敤redis浜嬪姟闃叉涓�涓墜鏈哄彿澶氭娉ㄥ唽闂 + String watchKey = StringUtil.Md5("REGISTER:" + phone); + 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, "璇风◢鍚庡啀璇�"); + } else { + + // 鏌ヨ鏄惁瀛樺湪璇ョ數璇濆巻鍙茬敤鎴� + UserInfo userInfo = userInfoMapper.getEffectiveUserInfoByPhone(phone); + if (userInfo != null) { + // 鏇存柊璐︽埛鐧诲綍淇℃伅 + updateLonginInfo(userInfo, loginType, request); + } else { + // 缁戝畾寰俊 + String keylogin = RedisKeyEnum.getRedisKey(RedisKeyEnum.emptyKey, StringUtil.Md5("phoneLogin:" + phone)); + redisManager.cacheCommonString(keylogin, phone, 60 * 20); + throw new UserAccountException(102, keylogin); + } + return userInfo; + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + jedis.del(watchKey); + jedis.unwatch(); + jedis.close(); + } + throw new UserAccountException(10, "璇风◢鍚庡啀璇�"); + } + + + @Transactional(rollbackFor = Exception.class) @Override public UserInfo loginWinXin(HttpServletRequest request, AcceptData acceptData, int loginType, String code, @@ -973,8 +1043,8 @@ InputStream asInputStream = HttpUtil.getAsInputStream(weiXinUser.getHeadimgurl()); if (asInputStream != null) { FileUploadResult result = COSManager.getInstance().uploadFile(asInputStream, - String.format(FilePathEnum.userWXPortrait.getPath() + "%s_%s.jpg", weiXinUser.getUnionid(), - System.currentTimeMillis() + "")); + String.format(FilePathEnum.userWXPortrait.getPath() + "%s_%s.jpg", + weiXinUser.getUnionid(), System.currentTimeMillis() + "")); if (result != null && !StringUtil.isNullOrEmpty(result.getUrl())) portrait = result.getUrl(); } else { @@ -1050,7 +1120,8 @@ UserInfo userInfo = userInfoMapper.getEffectiveUserInfoByWXUnionId(weiXinUser.getUnionid()); if (userInfo == null) { - String key = RedisKeyEnum.getRedisKey(RedisKeyEnum.emptyKey, StringUtil.Md5("WXLogin:" + weiXinUser.getUnionid())); + String key = RedisKeyEnum.getRedisKey(RedisKeyEnum.emptyKey, + StringUtil.Md5("WXLogin:" + weiXinUser.getUnionid())); redisManager.cacheCommonString(key, JsonUtil.getSimpleGson().toJson(weiXinUser), 60 * 20); throw new UserAccountException(101, key); } @@ -1123,7 +1194,7 @@ } - @Transactional(rollbackFor=UserAccountException.class) + @Transactional(rollbackFor = UserAccountException.class) @Override public void bindWeiXin(AcceptData acceptData, Long uid, String code) throws UserAccountException { WXAccountInfoDTO wxAccount = Constant.getWXAccount(acceptData.getPlatform(), acceptData.getVersion()); @@ -1138,18 +1209,15 @@ } bindWeiXin(uid, weiXinUser); } - - - - - @Transactional(rollbackFor=UserAccountException.class) + + @Transactional(rollbackFor = UserAccountException.class) @Override - public void bindWeiXin(Long uid,WeiXinUser weiXinUser) throws UserAccountException { + public void bindWeiXin(Long uid, WeiXinUser weiXinUser) throws UserAccountException { UserInfo user = userInfoMapper.selectAvailableByPrimaryKey(uid); if (user == null) { throw new UserAccountException(1, "鐢ㄦ埛涓嶅瓨鍦�"); } - + if (weiXinUser == null) { throw new UserAccountException(2, "寰俊甯愬彿鎺堟潈澶辫触"); } @@ -1197,8 +1265,9 @@ if (asInputStream == null) { LogHelper.test("寰俊澶村儚涓嬭浇澶辫触: " + weiXinUser.getUnionid() + " " + headimgurl); } else { - FileUploadResult result = COSManager.getInstance().uploadFile(asInputStream, String - .format(FilePathEnum.userWXPortrait.getPath() + "%s_%s.jpg", weiXinUser.getUnionid(), System.currentTimeMillis() + "")); + FileUploadResult result = COSManager.getInstance().uploadFile(asInputStream, + String.format(FilePathEnum.userWXPortrait.getPath() + "%s_%s.jpg", weiXinUser.getUnionid(), + System.currentTimeMillis() + "")); if (result != null && !StringUtil.isNullOrEmpty(result.getUrl())) { headimgurl = result.getUrl(); } else { @@ -1230,9 +1299,6 @@ @Override public UserInfo bindPhoneToLogin(String phone, String key, String appId, HttpServletRequest request) throws UserAccountException { - UserInfo phoneUser = userInfoMapper.getEffectiveUserInfoByPhone(phone); - if (phoneUser != null) - throw new UserAccountException(1, "鍙风爜宸茬粡琚崰鐢�"); // 鍒ゆ柇鎵嬫満鍙风爜鏄惁琚皝绂� ForbiddenUserIdentifyCode identifyCode1 = forbiddenUserIdentifyCodeService @@ -1257,8 +1323,9 @@ if (!StringUtil.isNullOrEmpty(weiXinUser.getHeadimgurl())) { InputStream asInputStream = HttpUtil.getAsInputStream(weiXinUser.getHeadimgurl()); if (asInputStream != null) { - FileUploadResult result = COSManager.getInstance().uploadFile(asInputStream, String - .format(FilePathEnum.userWXPortrait.getPath() +"%s_%s.jpg", weiXinUser.getUnionid(), System.currentTimeMillis() + "")); + FileUploadResult result = COSManager.getInstance().uploadFile(asInputStream, + String.format(FilePathEnum.userWXPortrait.getPath() + "%s_%s.jpg", weiXinUser.getUnionid(), + System.currentTimeMillis() + "")); if (result != null && !StringUtil.isNullOrEmpty(result.getUrl())) portrait = result.getUrl(); } else { @@ -1269,21 +1336,37 @@ 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); + // 鏄惁闇�瑕佸垱寤烘柊璐︽埛 + UserInfo phoneUser = userInfoMapper.getEffectiveUserInfoByPhone(phone); + if (phoneUser != null) { + // 缁戝畾寰俊 + if (StringUtil.isNullOrEmpty(phoneUser.getWxUnionId())) { + try { + bindWeiXin(phoneUser.getId(), weiXinUser); + } catch (Exception e) { + throw new UserAccountException(1, "寰俊缁戝畾澶辫触"); + } + } else { + throw new UserAccountException(1, "璇ュ井淇″凡琚粦瀹�"); + } + userInfo = userInfoMapper.selectAvailableByPrimaryKey(phoneUser.getId()); + } else { + // 鍒涘缓鏂拌处鎴� + 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() { @@ -1311,6 +1394,129 @@ redisManager.removeCommonString(key); return userInfo; + } + + + @Override + public UserInfo bindWXToLogin(HttpServletRequest request, AcceptData acceptData, String code, String appId, String key) throws UserAccountException { + // 鏃ュ織淇℃伅 + JSONObject logInfo = new JSONObject(); + logInfo.put("appId", appId); + logInfo.put("code", code); + logInfo.put("loginType", 2); + LogHelper.lgoinInfo(logInfo.toString()); + + // 閫氳繃Code鎹㈠彇淇℃伅 + WXAccountInfoDTO wxAccount = Constant.getWXAccount(acceptData.getPlatform(), acceptData.getVersion()); + WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUser(code, wxAccount.getAppId(), wxAccount.getAppSecret()); + if (weiXinUser == null) { + throw new UserAccountException(1, "寰俊甯愬彿鎺堟潈澶辫触"); + } + LogHelper.test("寰俊鎺堟潈鐢ㄦ埛淇℃伅锛�" + new Gson().toJson(weiXinUser)); + + // 鍒ゆ柇寰俊unionid鏄惁琚皝绂� + ForbiddenUserIdentifyCode identifyCode = forbiddenUserIdentifyCodeService + .listByTypeAndIdentifyCode(ForbiddenUserIdentifyCodeTypeEnum.wxUnionId, weiXinUser.getUnionid()); + if (identifyCode != null && identifyCode.getEffective() != null && identifyCode.getEffective()) { + throw new UserAccountException(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC); + } + + String phone = redisManager.getCommonString(key); + if (StringUtil.isNullOrEmpty(phone)) + throw new UserAccountException(1, "鎵嬫満鍙风櫥褰曞け鏁堬紝璇蜂娇鍙戦�佺煭淇$櫥褰�"); + + // 閲囩敤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, "璇风◢鍚庡啀璇�"); + } else { + + UserInfo userInfo = userInfoMapper.getEffectiveUserInfoByWXUnionId(weiXinUser.getUnionid()); + // 鐩存帴鐢ㄧ殑寰俊鐧诲綍 + if (userInfo != null) { + // 缁戝畾寰俊 + if (!StringUtil.isNullOrEmpty(userInfo.getPhone()) && !phone.equals(userInfo.getPhone().trim())) { + throw new UserAccountException(1, "璇ュ井淇″凡琚粦瀹�"); + } + // 鍒犻櫎閭�璇峰垎浜浘 + //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(FilePathEnum.userWXPortrait.getPath() + "%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.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()); + } + }); + } + return userInfo; + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + jedis.del(watchKey); + jedis.unwatch(); + jedis.close(); + } + throw new UserAccountException(10, "璇风◢鍚庡啀璇�"); } @Override @@ -1435,6 +1641,5 @@ // 鎻掑叆璁板綍 userInfoDeleteRecordService.addDeleteRecord(uid, UserInfo.STATE_DELETE_OUT_OF_DATE, reason); } - } -- Gitblit v1.8.0