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