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