From 573c491b4a1ba60e12a5678a01c1546c0077c1ee Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期二, 30 七月 2019 09:07:42 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserAccountServiceImpl.java |  349 +++++++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 282 insertions(+), 67 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 99a733e..9185a59 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
@@ -31,9 +31,11 @@
 import com.yeshi.fanli.entity.bus.user.ThreeSale;
 import com.yeshi.fanli.entity.bus.user.UserAccountBindingHistory;
 import com.yeshi.fanli.entity.bus.user.UserConnectHistory;
+import com.yeshi.fanli.entity.bus.user.UserExtraTaoBaoInfo;
 import com.yeshi.fanli.entity.bus.user.UserInfo;
 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.log.LogHelper;
 import com.yeshi.fanli.service.inter.hongbao.ThreeSaleSerivce;
 import com.yeshi.fanli.service.inter.msg.UserAccountMsgNotificationService;
@@ -43,7 +45,9 @@
 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.UserInfoService;
 import com.yeshi.fanli.util.Constant;
 import com.yeshi.fanli.util.FileUtil;
 import com.yeshi.fanli.util.RedisManager;
@@ -53,6 +57,9 @@
 import com.yeshi.fanli.util.wx.WXLoginUtil;
 
 import net.sf.json.JSONObject;
+import redis.clients.jedis.Jedis;
+import redis.clients.jedis.JedisPool;
+import redis.clients.jedis.Transaction;
 
 @Service
 public class UserAccountServiceImpl implements UserAccountService {
@@ -62,6 +69,9 @@
 
 	@Resource
 	private UserInfoMapper userInfoMapper;
+
+	@Resource
+	private UserInfoService userInfoService;
 
 	@Resource
 	private BindingAccountService bindingAccountService;
@@ -92,6 +102,12 @@
 
 	@Resource
 	private UserAccountBindingHistoryService userAccountBindingHistoryService;
+
+	@Resource
+	private UserInfoDeleteRecordService userInfoDeleteRecordService;
+
+	@Resource
+	private JedisPool jedisPool;
 
 	@Transactional
 	@Override
@@ -537,6 +553,8 @@
 		int addCount = 0;
 
 		userAccountMsgNotificationService.connectSuccess(mainUser.getId(), lessUser.getId());
+
+		userInfoDeleteRecordService.addDeleteRecord(lessUser.getId(), UserInfo.STATE_DELETE, "鍒犻櫎锛氳处鍙疯鎵撻�氬垹闄�");
 	}
 
 	/**
@@ -657,6 +675,7 @@
 
 	@Override
 	public void addUser(UserInfo user) {
+
 		Long maxUid = userInfoMapper.getMaxUid();
 		if (maxUid == null)
 			maxUid = 100000L;
@@ -676,6 +695,13 @@
 			UserInfo updateUserInfo = new UserInfo(user.getId());
 			updateUserInfo.setNickName(Constant.systemCommonConfig.getDefaultNickName() + user.getId());
 			userInfoMapper.updateByPrimaryKeySelective(updateUserInfo);
+		}
+
+		try {
+			// 绗竴娆$櫥褰曟椂鍒涘缓鐢ㄦ埛棰濆淇℃伅
+			userInfoExtraService.createUserInfoExtra(user.getId());
+		} catch (Exception e) {
+			e.printStackTrace();
 		}
 	}
 
@@ -917,7 +943,7 @@
 		phone = phone.replaceAll(" ", "");
 
 		// 鑻规灉搴旂敤鍟嗗簵涓婄嚎娴嬭瘯鍙风爜
-		if ("17316780233".equalsIgnoreCase(phone) && "258168".equalsIgnoreCase(vcode)) {
+		if ("17316780233".equalsIgnoreCase(phone) && "2581".equalsIgnoreCase(vcode)) {
 			;
 		} else {
 
@@ -927,11 +953,13 @@
 
 			String oldVcode = redisManager.getSMSVCode(phone, SMSHistory.TYPE_LOGIN);
 			LogHelper.test("----------------------鐧诲綍楠岃瘉鐮侊細 " + oldVcode);
-			if (StringUtil.isNullOrEmpty(oldVcode) || !oldVcode.equalsIgnoreCase(vcode)) {
-				throw new UserAccountException(1, "楠岃瘉鐮侀敊璇紝閲嶆柊杈撳叆");
-			}
+			if (!Constant.IS_TEST)
+				if (StringUtil.isNullOrEmpty(oldVcode) || !oldVcode.equalsIgnoreCase(vcode)) {
+					throw new UserAccountException(1, "楠岃瘉鐮侀敊璇紝閲嶆柊杈撳叆");
+				} else {// 楠岃瘉鐮佽緭鍏ユ纭�
+					redisManager.clearSMSVCode(phone, SMSHistory.TYPE_LOGIN);
+				}
 		}
-		redisManager.clearSMSFrequencyLimit(phone, SMSHistory.TYPE_LOGIN);
 
 		JSONObject logInfo = new JSONObject();
 		logInfo.put("appId", appId);
@@ -946,31 +974,59 @@
 			throw new UserAccountException(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC);
 		}
 
-		// 鏌ヨ鏄惁瀛樺湪璇ョ數璇濆巻鍙茬敤鎴�
-		UserInfo userInfo = userInfoMapper.getEffectiveUserInfoByPhone(phone);
-		if (userInfo != null) {
-			// 鏇存柊璐︽埛鐧诲綍淇℃伅
-			updateLonginInfo(userInfo, loginType, request);
-		} else {
-			userInfo = new UserInfo();
-			userInfo.setAppId(appId);
-			userInfo.setNickName(Constant.systemCommonConfig.getDefaultNickName());
-			userInfo.setPortrait(Constant.systemCommonConfig.getDefaultPortrait());
-			userInfo.setPhone(phone);
-			userInfo.setLoginType(loginType);
-			userInfo.setState(UserInfo.STATE_NORMAL);
-			// 鍒涘缓鐢ㄦ埛
-			addUser(userInfo);
+		// 娓呯┖闄愬埗
+		redisManager.clearSMSFrequencyLimit(phone, SMSHistory.TYPE_LOGIN);
+		// 娓呯悊娆℃暟
+		redisManager.removeCommonString("sendMSNLoginCount" + phone);
 
-			try {
-				// 绗竴娆$櫥褰曟椂鍒涘缓鐢ㄦ埛棰濆淇℃伅
-				userInfoExtraService.createUserInfoExtra(userInfo.getId());
-			} catch (Exception e) {
-				e.printStackTrace();
+		// 閲囩敤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 {
+					userInfo = new UserInfo();
+					userInfo.setAppId(appId);
+					userInfo.setNickName(Constant.systemCommonConfig.getDefaultNickName());
+					userInfo.setPortrait(Constant.systemCommonConfig.getDefaultPortrait());
+					userInfo.setPhone(phone);
+					userInfo.setLoginType(loginType);
+					userInfo.setState(UserInfo.STATE_NORMAL);
+					// 鍒涘缓鐢ㄦ埛
+					addUser(userInfo);
+
+					try {
+						// 绗竴娆$櫥褰曟椂鍒涘缓鐢ㄦ埛棰濆淇℃伅
+						userInfoExtraService.createUserInfoExtra(userInfo.getId());
+					} catch (Exception e) {
+						e.printStackTrace();
+					}
+				}
+			
+				return userInfo;
 			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		} finally {
+			jedis.del(watchKey);
+			jedis.unwatch();
+			jedisPool.returnResource(jedis);
 		}
-
-		return userInfo;
+		throw new UserAccountException(10, "璇风◢鍚庡啀璇�");
 	}
 
 	@Transactional
@@ -998,35 +1054,62 @@
 			throw new UserAccountException(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC);
 		}
 
-		UserInfo userInfo = userInfoMapper.getEffectiveUserInfoByWXUnionId(weiXinUser.getUnionid());
-		// 鐩存帴鐢ㄧ殑寰俊鐧诲綍
-		if (userInfo != null) {
-			// 鏇存柊璐︽埛鐧诲綍淇℃伅
-			updateLonginInfo(userInfo, loginType, request);
-		} else {
-			// 鍒涘缓鏂拌处鎴�
-			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(loginType);
-			userInfo.setLastLoginIp(request.getRemoteHost());
-			userInfo.setState(UserInfo.STATE_NORMAL);
-			addUser(userInfo);
+		// 閲囩敤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 {
 
-			try {
-				// 绗竴娆$櫥褰曟椂鍒涘缓鐢ㄦ埛棰濆淇℃伅
-				userInfoExtraService.createUserInfoExtra(userInfo.getId());
-			} catch (Exception e) {
-				e.printStackTrace();
+				UserInfo userInfo = userInfoMapper.getEffectiveUserInfoByWXUnionId(weiXinUser.getUnionid());
+				// 鐩存帴鐢ㄧ殑寰俊鐧诲綍
+				if (userInfo != null) {
+					LogHelper.test("寰俊unionID瀛樺湪:" + weiXinUser.getUnionid());
+					// 鏇存柊璐︽埛鐧诲綍淇℃伅
+					updateLonginInfo(userInfo, loginType, request);
+					// 鍒犻櫎閭�璇峰垎浜浘
+					spreadUserImgService.deleteImgUrl(userInfo.getId());
+				} else {
+					LogHelper.test("寰俊unionID涓嶅瓨鍦�:" + weiXinUser.getUnionid());
+					// 鍒涘缓鏂拌处鎴�
+					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(loginType);
+					userInfo.setLastLoginIp(request.getRemoteHost());
+					userInfo.setState(UserInfo.STATE_NORMAL);
+					addUser(userInfo);
+
+					try {
+						// 绗竴娆$櫥褰曟椂鍒涘缓鐢ㄦ埛棰濆淇℃伅
+						userInfoExtraService.createUserInfoExtra(userInfo.getId());
+					} catch (Exception e) {
+						e.printStackTrace();
+					}
+				}
+				return userInfo;
 			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		} finally {
+			jedis.del(watchKey);
+			jedis.unwatch();
+			jedisPool.returnResource(jedis);
 		}
-		return userInfo;
+		throw new UserAccountException(10, "璇风◢鍚庡啀璇�");
 	}
 
 	/**
@@ -1095,17 +1178,22 @@
 			throw new UserAccountException(2, "寰俊甯愬彿鎺堟潈澶辫触");
 		}
 
-		if (weiXinUser.getUnionid().equalsIgnoreCase(user.getWxUnionId())) {
+		String wxUnionId = weiXinUser.getUnionid();
+		if (StringUtil.isNullOrEmpty(wxUnionId)) {
+			throw new UserAccountException(2, "寰俊甯愬彿鎺堟潈澶辫触");
+		}
+
+		String wxUnionIdExist = user.getWxUnionId();
+		if (StringUtil.isNullOrEmpty(wxUnionIdExist)) {
+			UserInfo newUser = userInfoMapper.getEffectiveUserInfoByWXUnionId(wxUnionId);
+			if (newUser != null) {
+				throw new UserAccountException(4, "璇ュ井淇″彿宸茶鍏朵粬甯愬彿缁戝畾");
+			}
+		} else if (wxUnionId.equals(wxUnionIdExist)) {
 			throw new UserAccountException(3, "寰俊甯愬彿涓�鑷存棤闇�鏇存崲");
 		}
 
-		UserInfo newUser = userInfoMapper.getEffectiveUserInfoByWXUnionId(weiXinUser.getUnionid());
-		if (newUser != null) {
-			throw new UserAccountException(4, "璇ュ井淇″彿宸茶鍏朵粬甯愬彿缁戝畾");
-		}
-
-		String wxUnionId = user.getWxUnionId();
-		if (!StringUtil.isNullOrEmpty(wxUnionId) && StringUtil.isNullOrEmpty(user.getPhone())) {
+		if (StringUtil.isNullOrEmpty(user.getPhone())) {
 			throw new UserAccountException(5, "璇ュ笎鍙锋病鏈夌粦瀹氭墜鏈哄彿鐮侊紝闇�缁戝畾鎵嬫満鍙风爜鎵嶈兘瀹屾垚寰俊鏇存崲");
 		}
 
@@ -1114,14 +1202,19 @@
 		updateUserInfo.setWxOpenId(weiXinUser.getOpenid());
 		updateUserInfo.setWxPic(weiXinUser.getHeadimgurl());
 		updateUserInfo.setWxUnionId(weiXinUser.getUnionid());
-		updateUserInfo.setNickName(weiXinUser.getNickname());
-		updateUserInfo.setPortrait(weiXinUser.getHeadimgurl());
-		if (StringUtil.isNullOrEmpty(weiXinUser.getNickname())) {
-			updateUserInfo.setNickName(Constant.systemCommonConfig.getDefaultNickName());
+
+		// 灏嗛粯璁ゆ樀绉版浛鎹㈡垚寰俊鏄电О
+		String defaultNickName = Constant.systemCommonConfig.getDefaultNickName();
+		if (!StringUtil.isNullOrEmpty(weiXinUser.getNickname()) && !StringUtil.isNullOrEmpty(defaultNickName)
+				&& defaultNickName.equals(user.getNickName())) {
+			updateUserInfo.setNickName(weiXinUser.getNickname());
 		}
 
-		if (StringUtil.isNullOrEmpty(weiXinUser.getHeadimgurl())) {
-			updateUserInfo.setPortrait(Constant.systemCommonConfig.getDefaultPortrait());
+		// 灏嗛粯璁ゅご鍍忔浛鎹㈡垚寰俊澶村儚
+		String defaultPortrait = Constant.systemCommonConfig.getDefaultPortrait();
+		if (!StringUtil.isNullOrEmpty(weiXinUser.getHeadimgurl()) && !StringUtil.isNullOrEmpty(defaultPortrait)
+				&& defaultPortrait.equals(user.getPortrait())) {
+			updateUserInfo.setPortrait(weiXinUser.getHeadimgurl());
 		}
 		userInfoMapper.updateByPrimaryKeySelective(updateUserInfo);
 
@@ -1141,4 +1234,126 @@
 		userAccountMsgNotificationService.bindingSuccess(uid, MsgAccountDetailFactory.TYPE_WX);
 	}
 
+	@Override
+	public void forbiddenUserAll(Long uid, String reason) {
+		UserInfo currentInfo = userInfoService.selectByPKey(uid);
+		if (currentInfo == null) {
+			return;
+		}
+		if (currentInfo.getState() != UserInfo.STATE_NORMAL) {
+			return;
+		}
+
+		currentInfo.setState(UserInfo.STATE_FORBIDDEN);
+		currentInfo.setStateDesc(reason);
+		userInfoService.updateByPrimaryKeySelective(currentInfo);
+
+		// 鎻掑叆璁板綍
+		userInfoDeleteRecordService.addDeleteRecord(uid, UserInfo.STATE_FORBIDDEN, reason);
+
+		// 鍔犲叆灏佺鐨勮处鍙峰垪琛�
+		ForbiddenUserIdentifyCode forbiddenUserIdentifyCode = new ForbiddenUserIdentifyCode();
+		forbiddenUserIdentifyCode.setType(ForbiddenUserIdentifyCodeTypeEnum.wxUnionId);
+		forbiddenUserIdentifyCode.setIdentifyCode(currentInfo.getWxUnionId());
+		forbiddenUserIdentifyCode.setBeiZhu(currentInfo.getWxName());
+		try {
+			forbiddenUserIdentifyCodeService.forbiddenIdentifyCode(forbiddenUserIdentifyCode);
+		} catch (ForbiddenUserIdentifyCodeException e) {
+			e.printStackTrace();
+		}
+
+		// 鐢佃瘽鍙风爜
+		forbiddenUserIdentifyCode = new ForbiddenUserIdentifyCode();
+		forbiddenUserIdentifyCode.setType(ForbiddenUserIdentifyCodeTypeEnum.phone);
+		forbiddenUserIdentifyCode.setIdentifyCode(currentInfo.getPhone());
+		try {
+			forbiddenUserIdentifyCodeService.forbiddenIdentifyCode(forbiddenUserIdentifyCode);
+		} catch (ForbiddenUserIdentifyCodeException e) {
+			e.printStackTrace();
+		}
+
+		// 娣樺疂
+		UserExtraTaoBaoInfo taoBao = userExtraTaoBaoInfoService.getByUid(uid);
+		if (taoBao != null && !StringUtil.isNullOrEmpty(taoBao.getTaoBaoUid())) {
+			forbiddenUserIdentifyCode = new ForbiddenUserIdentifyCode();
+			forbiddenUserIdentifyCode.setType(ForbiddenUserIdentifyCodeTypeEnum.taobaoUid);
+			forbiddenUserIdentifyCode.setIdentifyCode(taoBao.getTaoBaoUid());
+			try {
+				forbiddenUserIdentifyCodeService.forbiddenIdentifyCode(forbiddenUserIdentifyCode);
+			} catch (ForbiddenUserIdentifyCodeException e) {
+				e.printStackTrace();
+			}
+		}
+
+		// 鏌ヨ鏀粯瀹濈粦瀹�
+		List<BindingAccount> list = bindingAccountService.getBindingAccountByUid(uid);
+		if (list != null) {
+			for (BindingAccount ba : list) {
+				forbiddenUserIdentifyCode = new ForbiddenUserIdentifyCode();
+				forbiddenUserIdentifyCode.setType(ForbiddenUserIdentifyCodeTypeEnum.alipayAccount);
+				forbiddenUserIdentifyCode.setIdentifyCode(ba.getAccount());
+				forbiddenUserIdentifyCode.setBeiZhu(ba.getName());
+				try {
+					forbiddenUserIdentifyCodeService.forbiddenIdentifyCode(forbiddenUserIdentifyCode);
+				} catch (ForbiddenUserIdentifyCodeException e) {
+					e.printStackTrace();
+				}
+			}
+		}
+	}
+
+	@Override
+	public void forbiddenUser(Long uid, String reason) {
+		UserInfo currentInfo = userInfoService.selectByPKey(uid);
+		if (currentInfo == null) {
+			return;
+		}
+
+		if (currentInfo.getState() != UserInfo.STATE_NORMAL) {
+			return;
+		}
+
+		currentInfo.setState(UserInfo.STATE_FORBIDDEN);
+		currentInfo.setStateDesc(reason);
+		userInfoService.updateByPrimaryKeySelective(currentInfo);
+
+		// 鎻掑叆璁板綍
+		userInfoDeleteRecordService.addDeleteRecord(uid, UserInfo.STATE_FORBIDDEN, reason);
+	}
+
+	@Override
+	public void DeleteUser(Long uid, String reason) {
+		UserInfo currentInfo = userInfoService.selectByPKey(uid);
+		if (currentInfo == null) {
+			return;
+		}
+
+		if (currentInfo.getState() != UserInfo.STATE_NORMAL) {
+			return;
+		}
+
+		currentInfo.setState(UserInfo.STATE_DELETE);
+		currentInfo.setStateDesc(reason);
+		userInfoService.updateByPrimaryKeySelective(currentInfo);
+		// 鎻掑叆璁板綍
+		userInfoDeleteRecordService.addDeleteRecord(uid, UserInfo.STATE_DELETE, reason);
+	}
+
+	@Override
+	public void DeleteUserOutOfDate(Long uid, String reason) {
+		UserInfo currentInfo = userInfoService.selectByPKey(uid);
+		if (currentInfo == null) {
+			return;
+		}
+
+		if (currentInfo.getState() != UserInfo.STATE_NORMAL) {
+			return;
+		}
+
+		currentInfo.setState(UserInfo.STATE_DELETE_OUT_OF_DATE);
+		currentInfo.setStateDesc(reason);
+		userInfoService.updateByPrimaryKeySelective(currentInfo);
+		// 鎻掑叆璁板綍
+		userInfoDeleteRecordService.addDeleteRecord(uid, UserInfo.STATE_DELETE_OUT_OF_DATE, reason);
+	}
 }

--
Gitblit v1.8.0