From b44f60ae27bbe0b7aec29414c629747b7755e964 Mon Sep 17 00:00:00 2001 From: yujian <yujian@123.com> Date: 星期三, 09 十月 2019 09:52:38 +0800 Subject: [PATCH] Merge branch 'div' of ssh://193.112.35.168:29418/fanli-server into div --- fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserAccountServiceImpl.java | 299 +++++++++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 238 insertions(+), 61 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 d24e104..048b7c0 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 @@ -24,6 +24,8 @@ 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; import com.yeshi.fanli.entity.bus.user.BindingAccount; import com.yeshi.fanli.entity.bus.user.ForbiddenUserIdentifyCode; import com.yeshi.fanli.entity.bus.user.ForbiddenUserIdentifyCode.ForbiddenUserIdentifyCodeTypeEnum; @@ -36,25 +38,26 @@ import com.yeshi.fanli.entity.bus.user.UserInfo; import com.yeshi.fanli.entity.bus.user.UserInfoModifyRecord.ModifyTypeEnum; import com.yeshi.fanli.entity.bus.user.WeiXinUser; -import com.yeshi.fanli.exception.UserAccountException; import com.yeshi.fanli.exception.user.ForbiddenUserIdentifyCodeException; +import com.yeshi.fanli.exception.user.UserAccountException; import com.yeshi.fanli.log.LogHelper; -import com.yeshi.fanli.service.inter.hongbao.ThreeSaleSerivce; -import com.yeshi.fanli.service.inter.msg.UserAccountMsgNotificationService; -import com.yeshi.fanli.service.inter.user.BindingAccountService; +import com.yeshi.fanli.service.inter.money.extract.BindingAccountService; import com.yeshi.fanli.service.inter.user.ForbiddenUserIdentifyCodeService; import com.yeshi.fanli.service.inter.user.SpreadUserImgService; import com.yeshi.fanli.service.inter.user.UserAccountBindingHistoryService; import com.yeshi.fanli.service.inter.user.UserAccountService; -import com.yeshi.fanli.service.inter.user.UserExtraTaoBaoInfoService; import com.yeshi.fanli.service.inter.user.UserInfoDeleteRecordService; import com.yeshi.fanli.service.inter.user.UserInfoExtraService; import com.yeshi.fanli.service.inter.user.UserInfoModifyRecordService; import com.yeshi.fanli.service.inter.user.UserInfoService; +import com.yeshi.fanli.service.inter.user.invite.ThreeSaleSerivce; +import com.yeshi.fanli.service.inter.user.msg.UserAccountMsgNotificationService; +import com.yeshi.fanli.service.inter.user.tb.UserExtraTaoBaoInfoService; import com.yeshi.fanli.util.Constant; import com.yeshi.fanli.util.FileUtil; import com.yeshi.fanli.util.RedisManager; import com.yeshi.fanli.util.StringUtil; +import com.yeshi.fanli.util.ThreadUtil; import com.yeshi.fanli.util.TimeUtil; import com.yeshi.fanli.util.factory.msg.MsgAccountDetailFactory; import com.yeshi.fanli.util.wx.WXLoginUtil; @@ -111,16 +114,17 @@ @Resource private JedisPool jedisPool; - - + @Lazy @Resource private UserInfoModifyRecordService userInfoModifyRecordService; + @Transactional @Override - public LoginResult login(HttpServletRequest request, Boolean first, String appId, String code, String phone, - UserInfo tbUserInfo, boolean wxinstall, int loginType) throws UserAccountException { + public LoginResult login(HttpServletRequest request, AcceptData acceptData, Boolean first, String appId, + String code, String phone, UserInfo tbUserInfo, boolean wxinstall, int loginType) + throws UserAccountException { JSONObject logInfo = new JSONObject(); logInfo.put("appId", appId); @@ -182,7 +186,9 @@ case 2:// 寰俊 // 閫氳繃Code鎹㈠彇淇℃伅 - weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code); + WXAccountInfoDTO wxAccount = Constant.getWXAccount(acceptData.getPlatform(), acceptData.getVersion()); + weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code, wxAccount.getAppId(), + wxAccount.getAppSecret()); if (weiXinUser == null) throw new UserAccountException(1001, "鏃犳硶鑾峰彇鍒板井淇′釜浜轰俊鎭�"); LogHelper.test("寰俊鎺堟潈鐢ㄦ埛淇℃伅锛�" + new Gson().toJson(weiXinUser)); @@ -363,7 +369,7 @@ } } else {// 娌℃湁瀹夎寰俊 - LoginResult result = loginNoInstallWX(appId, code, phone, tbUserInfo, loginType); + LoginResult result = loginNoInstallWX(acceptData, appId, code, phone, tbUserInfo, loginType); if (result.getType() == LoginResult.TYPE_CREATE) session.setAttribute("LAST_LOGIN_USER", result.getUser()); return result; @@ -372,8 +378,8 @@ @Transactional @Override - public LoginResult loginNoInstallWX(String appId, String code, String phone, UserInfo tbUserInfo, int loginType) - throws UserAccountException { + public LoginResult loginNoInstallWX(AcceptData acceptData, String appId, String code, String phone, + UserInfo tbUserInfo, int loginType) throws UserAccountException { JSONObject logInfo = new JSONObject(); logInfo.put("appId", appId); logInfo.put("code", code); @@ -397,7 +403,9 @@ break; case 2:// 寰俊 // 閫氳繃Code鎹㈠彇淇℃伅 - weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code); + WXAccountInfoDTO wxAccount = Constant.getWXAccount(acceptData.getPlatform(), acceptData.getVersion()); + weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code, wxAccount.getAppId(), + wxAccount.getAppSecret()); if (weiXinUser == null) throw new UserAccountException(1001, "鏃犳硶鑾峰彇鍒板井淇′釜浜轰俊鎭�"); @@ -698,7 +706,7 @@ if (StringUtil.isNullOrEmpty(user.getPortrait())) user.setPortrait(Constant.systemCommonConfig.getDefaultPortrait()); userInfoMapper.insertSelective(user); - + // 鏄电О涓虹┖鏃� 榛樿鏄电О if (StringUtil.isNullOrEmpty(user.getNickName())) { UserInfo updateUserInfo = new UserInfo(user.getId()); @@ -712,14 +720,13 @@ } catch (Exception e) { e.printStackTrace(); } - - - if (!StringUtil.isNullOrEmpty(user.getPhone())) + + if (!StringUtil.isNullOrEmpty(user.getPhone())) userInfoModifyRecordService.addModifyRecord(uid, ModifyTypeEnum.bindPhone, user.getPhone()); - - if (!StringUtil.isNullOrEmpty(user.getWxUnionId())) + + if (!StringUtil.isNullOrEmpty(user.getWxUnionId())) userInfoModifyRecordService.addModifyRecord(uid, ModifyTypeEnum.bindWeiXin, user.getWxUnionId()); - + } @Override @@ -729,7 +736,7 @@ @Override public void bindPhone(Long uid, String phone) throws UserAccountException { - UserInfo user = userInfoMapper.selectByPrimaryKey(uid); + UserInfo user = userInfoMapper.selectAvailableByPrimaryKey(uid); if (user == null) throw new UserAccountException(4, "鐢ㄦ埛涓嶅瓨鍦�"); @@ -744,14 +751,13 @@ update.setPhone(phone); userInfoMapper.updateByPrimaryKeySelective(update); userAccountMsgNotificationService.bindingSuccess(uid, MsgAccountDetailFactory.TYPE_PHONE); - - + userInfoModifyRecordService.addModifyRecord(uid, ModifyTypeEnum.bindPhone, phone); } @Override public void unBindPhone(Long uid, String phone) throws UserAccountException { - UserInfo user = userInfoMapper.selectByPrimaryKey(uid); + UserInfo user = userInfoMapper.selectAvailableByPrimaryKey(uid); if (user == null) throw new UserAccountException(4, "鐢ㄦ埛涓嶅瓨鍦�"); @@ -773,7 +779,7 @@ @Override public void bindTaoBao(Long uid, String tbOpenId, String tbNickName, String tbPortrait) throws UserAccountException { - UserInfo user = userInfoMapper.selectByPrimaryKey(uid); + UserInfo user = userInfoMapper.selectAvailableByPrimaryKey(uid); if (user == null) throw new UserAccountException(4, "鐢ㄦ埛涓嶅瓨鍦�"); @@ -803,7 +809,7 @@ @Override public void unBindTaoBao(Long uid) throws UserAccountException { - UserInfo user = userInfoMapper.selectByPrimaryKey(uid); + UserInfo user = userInfoMapper.selectAvailableByPrimaryKey(uid); if (user == null) throw new UserAccountException(4, "鐢ㄦ埛涓嶅瓨鍦�"); if (StringUtil.isNullOrEmpty(user.getOpenid())) @@ -830,11 +836,13 @@ } @Override - public void changeWXBind(Long uid, String code) throws UserAccountException { - UserInfo user = userInfoMapper.selectByPrimaryKey(uid); + public void changeWXBind(AcceptData acceptData, Long uid, String code) throws UserAccountException { + UserInfo user = userInfoMapper.selectAvailableByPrimaryKey(uid); if (user == null) throw new UserAccountException(4, "鐢ㄦ埛涓嶅瓨鍦�"); - WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code); + WXAccountInfoDTO wxAccount = Constant.getWXAccount(acceptData.getPlatform(), acceptData.getVersion()); + WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code, wxAccount.getAppId(), + wxAccount.getAppSecret()); if (weiXinUser == null) throw new UserAccountException(10, "鑾峰彇寰俊鐢ㄦ埛淇℃伅澶辫触"); if (weiXinUser.getUnionid().equalsIgnoreCase(user.getWxUnionId())) @@ -842,18 +850,21 @@ UserInfo newUser = getUserInfoByWXUnionId(user.getAppId(), weiXinUser.getUnionid()); if (newUser != null) - throw new UserAccountException(13, "浜诧紝浣犺鏇存崲缁戝畾鐨勫井淇″彿宸茶鍏朵粬璐﹀彿缁戝畾"); + throw new UserAccountException(13, "璇ュ井淇″彿宸茶鍏朵粬璐﹀彿缁戝畾"); UserInfo updateUserInfo = new UserInfo(uid); updateUserInfo.setWxName(weiXinUser.getNickname()); updateUserInfo.setWxOpenId(weiXinUser.getOpenid()); updateUserInfo.setWxPic(weiXinUser.getHeadimgurl()); updateUserInfo.setWxUnionId(weiXinUser.getUnionid()); + // 灏嗛粯璁ゆ樀绉版浛鎹㈡垚寰俊鏄电О String defaultNickName = Constant.systemCommonConfig.getDefaultNickName(); - if (!StringUtil.isNullOrEmpty(weiXinUser.getNickname()) && !StringUtil.isNullOrEmpty(defaultNickName) - && (defaultNickName.equals(user.getNickName()) || "杩斿埄鍒�".equals(user.getNickName()))) { - updateUserInfo.setNickName(weiXinUser.getNickname()); + if (!StringUtil.isNullOrEmpty(defaultNickName) && !StringUtil.isNullOrEmpty(weiXinUser.getNickname())) { + defaultNickName = defaultNickName + uid; + if ((defaultNickName.equals(user.getNickName()) || "鏉挎牀蹇渷".equals(user.getNickName()))) { + updateUserInfo.setNickName(weiXinUser.getNickname()); + } } // 灏嗛粯璁ゅご鍍忔浛鎹㈡垚寰俊澶村儚 @@ -862,12 +873,11 @@ && defaultPortrait.equals(user.getPortrait())) { updateUserInfo.setPortrait(weiXinUser.getHeadimgurl()); } - + userInfoMapper.updateByPrimaryKeySelective(updateUserInfo); userAccountMsgNotificationService.changeBindingSuccess(uid, MsgAccountDetailFactory.TYPE_WX); - - + userInfoModifyRecordService.addModifyRecord(uid, ModifyTypeEnum.bindWeiXin, weiXinUser.getUnionid()); } @@ -878,7 +888,7 @@ TimeUtil.getGernalTime(System.currentTimeMillis(), "yyyyMMddHHmmss")); // 澶囦唤鐢ㄦ埛淇℃伅 - UserInfo user = userInfoMapper.selectByPrimaryKey(uid); + UserInfo user = userInfoMapper.selectAvailableByPrimaryKey(uid); // TODO 澶囦唤璧勯噾鏄庣粏 @@ -915,7 +925,7 @@ public void clearUserPortrait(Long uid) { if (uid == null) return; - UserInfo user = userInfoMapper.selectByPrimaryKey(uid); + UserInfo user = userInfoMapper.selectAvailableByPrimaryKey(uid); String prefix = String.format("/portrait/wx/%s_", user.getWxUnionId()); ObjectListing list = COSManager.getInstance().getObjectList(prefix, null, 30); if (list != null && list.getObjectSummaries() != null) @@ -930,7 +940,7 @@ public String repairPortrait(Long uid) { if (uid == null) return null; - UserInfo user = userInfoMapper.selectByPrimaryKey(uid); + UserInfo user = userInfoMapper.selectAvailableByPrimaryKey(uid); if (user == null) return null; String prefix = String.format("/portrait/wx/%s_", user.getWxUnionId()); @@ -1020,7 +1030,7 @@ if (exec == null || exec.size() == 0) { throw new UserAccountException(10, "璇风◢鍚庡啀璇�"); } else { - + // 鏌ヨ鏄惁瀛樺湪璇ョ數璇濆巻鍙茬敤鎴� UserInfo userInfo = userInfoMapper.getEffectiveUserInfoByPhone(phone); if (userInfo != null) { @@ -1029,7 +1039,7 @@ } else { userInfo = new UserInfo(); userInfo.setAppId(appId); - //userInfo.setNickName(Constant.systemCommonConfig.getDefaultNickName()); + // userInfo.setNickName(Constant.systemCommonConfig.getDefaultNickName()); userInfo.setPortrait(Constant.systemCommonConfig.getDefaultPortrait()); userInfo.setPhone(phone); userInfo.setLoginType(loginType); @@ -1043,10 +1053,10 @@ } catch (Exception e) { e.printStackTrace(); } - + userInfoModifyRecordService.addModifyRecord(userInfo.getId(), ModifyTypeEnum.bindPhone, phone); } - + return userInfo; } } catch (Exception e) { @@ -1061,8 +1071,8 @@ @Transactional @Override - public UserInfo loginWinXin(HttpServletRequest request, int loginType, String code, String appId) - throws UserAccountException { + public UserInfo loginWinXin(HttpServletRequest request, AcceptData acceptData, int loginType, String code, + String appId) throws UserAccountException { // 鏃ュ織淇℃伅 JSONObject logInfo = new JSONObject(); logInfo.put("appId", appId); @@ -1071,7 +1081,9 @@ LogHelper.lgoinInfo(logInfo.toString()); // 閫氳繃Code鎹㈠彇淇℃伅 - WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code); + WXAccountInfoDTO wxAccount = Constant.getWXAccount(acceptData.getPlatform(), acceptData.getVersion()); + WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code, wxAccount.getAppId(), + wxAccount.getAppSecret()); if (weiXinUser == null) { throw new UserAccountException(1, "寰俊甯愬彿鎺堟潈澶辫触"); } @@ -1129,8 +1141,9 @@ } catch (Exception e) { e.printStackTrace(); } - - userInfoModifyRecordService.addModifyRecord(userInfo.getId(), ModifyTypeEnum.bindWeiXin, weiXinUser.getUnionid()); + + userInfoModifyRecordService.addModifyRecord(userInfo.getId(), ModifyTypeEnum.bindWeiXin, + weiXinUser.getUnionid()); } return userInfo; } @@ -1144,6 +1157,76 @@ throw new UserAccountException(10, "璇风◢鍚庡啀璇�"); } + + @Transactional + @Override + public UserInfo loginWeiXinNew(HttpServletRequest request, AcceptData acceptData, int loginType, String wxCode, String appId) throws UserAccountException { + // 鏃ュ織淇℃伅 + JSONObject logInfo = new JSONObject(); + logInfo.put("appId", appId); + logInfo.put("wxCode", wxCode); + logInfo.put("loginType", loginType); + LogHelper.lgoinInfo(logInfo.toString()); + + // 閫氳繃Code鎹㈠彇淇℃伅 + WXAccountInfoDTO wxAccount = Constant.getWXAccount(acceptData.getPlatform(), acceptData.getVersion()); + WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(wxCode, 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); + } + + // 閲囩敤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); + } + throw new UserAccountException(10, "璇风◢鍚庡啀璇�"); + } + + + /** * 鏇存柊璐︽埛鐧诲綍淇℃伅 * @@ -1162,7 +1245,7 @@ @Override public void bindPhoneNew(Long uid, String phone) throws UserAccountException { - UserInfo user = userInfoMapper.selectByPrimaryKey(uid); + UserInfo user = userInfoMapper.selectAvailableByPrimaryKey(uid); if (user == null) { throw new UserAccountException(1, "鐢ㄦ埛涓嶅瓨鍦�"); } @@ -1196,19 +1279,20 @@ // 鍙戦�佹秷鎭� userAccountMsgNotificationService.bindingSuccess(uid, MsgAccountDetailFactory.TYPE_PHONE); - + userInfoModifyRecordService.addModifyRecord(uid, ModifyTypeEnum.bindPhone, phone); - + } @Override - public void bindWeiXin(Long uid, String code) throws UserAccountException { - UserInfo user = userInfoMapper.selectByPrimaryKey(uid); + public void bindWeiXin(AcceptData acceptData, Long uid, String code) throws UserAccountException { + UserInfo user = userInfoMapper.selectAvailableByPrimaryKey(uid); if (user == null) { throw new UserAccountException(1, "鐢ㄦ埛涓嶅瓨鍦�"); } - - WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code); + WXAccountInfoDTO wxAccount = Constant.getWXAccount(acceptData.getPlatform(), acceptData.getVersion()); + WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code, wxAccount.getAppId(), + wxAccount.getAppSecret()); if (weiXinUser == null) { throw new UserAccountException(2, "寰俊甯愬彿鎺堟潈澶辫触"); } @@ -1240,9 +1324,11 @@ // 灏嗛粯璁ゆ樀绉版浛鎹㈡垚寰俊鏄电О String defaultNickName = Constant.systemCommonConfig.getDefaultNickName(); - if (!StringUtil.isNullOrEmpty(weiXinUser.getNickname()) && !StringUtil.isNullOrEmpty(defaultNickName) - && (defaultNickName.equals(user.getNickName()) || "杩斿埄鍒�".equals(user.getNickName()))) { - updateUserInfo.setNickName(weiXinUser.getNickname()); + if (!StringUtil.isNullOrEmpty(defaultNickName) && !StringUtil.isNullOrEmpty(weiXinUser.getNickname())) { + defaultNickName = defaultNickName + uid; + if ((defaultNickName.equals(user.getNickName()) || "鏉挎牀蹇渷".equals(user.getNickName()))) { + updateUserInfo.setNickName(weiXinUser.getNickname()); + } } // 灏嗛粯璁ゅご鍍忔浛鎹㈡垚寰俊澶村儚 @@ -1267,10 +1353,101 @@ userAccountBindingHistoryService.addUserAccountBindingHistory(history); userAccountMsgNotificationService.bindingSuccess(uid, MsgAccountDetailFactory.TYPE_WX); - - + userInfoModifyRecordService.addModifyRecord(uid, ModifyTypeEnum.bindWeiXin, wxUnionId); } + + + @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 + .listByTypeAndIdentifyCode(ForbiddenUserIdentifyCodeTypeEnum.phone, phone); + if (identifyCode1 != null && identifyCode1.getEffective() != null && identifyCode1.getEffective()) + throw new UserAccountException(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC); + + String value = redisManager.getCommonString(key); + if (StringUtil.isNullOrEmpty(value)) + throw new UserAccountException(1, "寰俊鎺堟潈澶辨晥锛岃浣跨敤寰俊閲嶆柊鐧诲綍"); + + WeiXinUser weiXinUser = JsonUtil.getSimpleGson().fromJson(value, WeiXinUser.class); + 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); + } + throw new UserAccountException(10, "璇风◢鍚庡啀璇�"); + } + + @Override public void forbiddenUserAll(Long uid, String reason) { -- Gitblit v1.8.0