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 |  176 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 170 insertions(+), 6 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 6992f0c..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
@@ -41,22 +41,23 @@
 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.money.extract.BindingAccountService;
-import com.yeshi.fanli.service.inter.msg.UserAccountMsgNotificationService;
 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;
@@ -117,7 +118,8 @@
 	@Lazy
 	@Resource
 	private UserInfoModifyRecordService userInfoModifyRecordService;
-
+	
+	
 	@Transactional
 	@Override
 	public LoginResult login(HttpServletRequest request, AcceptData acceptData, Boolean first, String appId,
@@ -860,7 +862,7 @@
 		String defaultNickName = Constant.systemCommonConfig.getDefaultNickName();
 		if (!StringUtil.isNullOrEmpty(defaultNickName) && !StringUtil.isNullOrEmpty(weiXinUser.getNickname())) {
 			defaultNickName = defaultNickName + uid;
-			if ((defaultNickName.equals(user.getNickName()) || "杩斿埄鍒�".equals(user.getNickName()))) {
+			if ((defaultNickName.equals(user.getNickName()) || "鏉挎牀蹇渷".equals(user.getNickName()))) {
 				updateUserInfo.setNickName(weiXinUser.getNickname());
 			}
 		}
@@ -1155,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, "璇风◢鍚庡啀璇�");
+	}
+
+	
+	
 	/**
 	 * 鏇存柊璐︽埛鐧诲綍淇℃伅
 	 * 
@@ -1254,7 +1326,7 @@
 		String defaultNickName = Constant.systemCommonConfig.getDefaultNickName();
 		if (!StringUtil.isNullOrEmpty(defaultNickName) && !StringUtil.isNullOrEmpty(weiXinUser.getNickname())) {
 			defaultNickName = defaultNickName + uid;
-			if ((defaultNickName.equals(user.getNickName()) || "杩斿埄鍒�".equals(user.getNickName()))) {
+			if ((defaultNickName.equals(user.getNickName()) || "鏉挎牀蹇渷".equals(user.getNickName()))) {
 				updateUserInfo.setNickName(weiXinUser.getNickname());
 			}
 		}
@@ -1284,6 +1356,98 @@
 
 		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