From cd637932a970e7935b17d41568fe89c92775bccc Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期五, 06 十二月 2019 17:18:27 +0800
Subject: [PATCH] 双12活动添加,邀请码发布修改,爬单新规则添加

---
 fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserAccountServiceImpl.java |  197 +++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 182 insertions(+), 15 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..a495f1f 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
@@ -3,6 +3,7 @@
 import java.io.File;
 import java.io.FileWriter;
 import java.io.IOException;
+import java.io.InputStream;
 import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Date;
@@ -15,7 +16,9 @@
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.yeshi.utils.HttpUtil;
 import org.yeshi.utils.JsonUtil;
+import org.yeshi.utils.entity.FileUploadResult;
 import org.yeshi.utils.tencentcloud.COSManager;
 
 import com.google.gson.Gson;
@@ -41,22 +44,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;
@@ -218,6 +222,8 @@
 						updateUserInfo.setLastLoginTime(System.currentTimeMillis());
 						updateUserInfo.setLoginType(loginType);
 						updateUserInfo.setLastLoginIp(request.getRemoteHost());
+						// 鏇存柊openId
+						updateUserInfo.setOpenid(weiXinUser.getOpenid());
 
 						userInfoMapper.updateByPrimaryKeySelective(updateUserInfo);
 						// 鍒犻櫎閭�璇峰浘鐗�
@@ -664,6 +670,7 @@
 		userInfoMapper.updateByPrimaryKeySelective(userInfo);
 	}
 
+	@Transactional
 	@Override
 	public void register(UserInfo userInfo) throws UserAccountException {
 		if (!StringUtil.isNullOrEmpty(userInfo.getPhone())) {
@@ -687,6 +694,7 @@
 		addUser(userInfo);
 	}
 
+	@Transactional
 	@Override
 	public void addUser(UserInfo user) {
 
@@ -719,12 +727,12 @@
 			e.printStackTrace();
 		}
 
+		// 娣诲姞璐﹀彿缁戝畾鍘嗗彶
 		if (!StringUtil.isNullOrEmpty(user.getPhone()))
 			userInfoModifyRecordService.addModifyRecord(uid, ModifyTypeEnum.bindPhone, user.getPhone());
 
 		if (!StringUtil.isNullOrEmpty(user.getWxUnionId()))
 			userInfoModifyRecordService.addModifyRecord(uid, ModifyTypeEnum.bindWeiXin, user.getWxUnionId());
-
 	}
 
 	@Override
@@ -860,7 +868,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());
 			}
 		}
@@ -1062,7 +1070,7 @@
 		} finally {
 			jedis.del(watchKey);
 			jedis.unwatch();
-			jedisPool.returnResource(jedis);
+			jedis.close();
 		}
 		throw new UserAccountException(10, "璇风◢鍚庡啀璇�");
 	}
@@ -1080,8 +1088,7 @@
 
 		// 閫氳繃Code鎹㈠彇淇℃伅
 		WXAccountInfoDTO wxAccount = Constant.getWXAccount(acceptData.getPlatform(), acceptData.getVersion());
-		WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code, wxAccount.getAppId(),
-				wxAccount.getAppSecret());
+		WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUser(code, wxAccount.getAppId(), wxAccount.getAppSecret());
 		if (weiXinUser == null) {
 			throw new UserAccountException(1, "寰俊甯愬彿鎺堟潈澶辫触");
 		}
@@ -1118,9 +1125,27 @@
 					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("/portrait/wx/%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.setPortrait(weiXinUser.getHeadimgurl());
+					userInfo.setPortrait(portrait);
 					userInfo.setAppId(appId);
 					userInfo.setNickName(weiXinUser.getNickname());
 					userInfo.setWxName(weiXinUser.getNickname());
@@ -1150,9 +1175,53 @@
 		} finally {
 			jedis.del(watchKey);
 			jedis.unwatch();
-			jedisPool.returnResource(jedis);
+			jedis.close();
 		}
 		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.getWeiXinUser(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);
+		}
+
+		UserInfo userInfo = userInfoMapper.getEffectiveUserInfoByWXUnionId(weiXinUser.getUnionid());
+		if (userInfo == null) {
+			String longinKey = StringUtil.Md5("WXLogin:" + weiXinUser.getUnionid());
+			redisManager.cacheCommonString(longinKey, JsonUtil.getSimpleGson().toJson(weiXinUser), 60 * 20);
+			throw new UserAccountException(101, longinKey);
+		}
+		// 鏇存柊璐︽埛鐧诲綍淇℃伅
+		updateLonginInfo(userInfo, loginType, request);
+		Long uid = userInfo.getId();
+		ThreadUtil.run(new Runnable() {
+			public void run() {
+				// 鍒犻櫎閭�璇峰垎浜浘
+				spreadUserImgService.deleteImgUrl(uid);
+			}
+		});
+		return userInfo;
 	}
 
 	/**
@@ -1219,8 +1288,7 @@
 			throw new UserAccountException(1, "鐢ㄦ埛涓嶅瓨鍦�");
 		}
 		WXAccountInfoDTO wxAccount = Constant.getWXAccount(acceptData.getPlatform(), acceptData.getVersion());
-		WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code, wxAccount.getAppId(),
-				wxAccount.getAppSecret());
+		WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUser(code, wxAccount.getAppId(), wxAccount.getAppSecret());
 		if (weiXinUser == null) {
 			throw new UserAccountException(2, "寰俊甯愬彿鎺堟潈澶辫触");
 		}
@@ -1236,7 +1304,7 @@
 			if (newUser != null) {
 				throw new UserAccountException(4, "璇ュ井淇″彿宸茶鍏朵粬甯愬彿缁戝畾");
 			}
-		} else if (wxUnionId.equals(wxUnionIdExist)) {
+		} else if (wxUnionId.equalsIgnoreCase(wxUnionIdExist)) {
 			throw new UserAccountException(3, "寰俊甯愬彿涓�鑷存棤闇�鏇存崲");
 		}
 
@@ -1254,7 +1322,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());
 			}
 		}
@@ -1263,7 +1331,20 @@
 		String defaultPortrait = Constant.systemCommonConfig.getDefaultPortrait();
 		if (!StringUtil.isNullOrEmpty(weiXinUser.getHeadimgurl()) && !StringUtil.isNullOrEmpty(defaultPortrait)
 				&& defaultPortrait.equals(user.getPortrait())) {
-			updateUserInfo.setPortrait(weiXinUser.getHeadimgurl());
+			String headimgurl = weiXinUser.getHeadimgurl();
+			InputStream asInputStream = HttpUtil.getAsInputStream(headimgurl);
+			if (asInputStream == null) {
+				LogHelper.test("寰俊澶村儚涓嬭浇澶辫触: " + weiXinUser.getUnionid() + " " + headimgurl);
+			} else {
+				FileUploadResult result = COSManager.getInstance().uploadFile(asInputStream, String
+						.format("/portrait/wx/%s_%s.jpg", weiXinUser.getUnionid(), System.currentTimeMillis() + ""));
+				if (result != null && !StringUtil.isNullOrEmpty(result.getUrl())) {
+					headimgurl = result.getUrl();
+				} else {
+					LogHelper.test("寰俊澶村儚涓婁紶澶辫触: " + weiXinUser.getUnionid() + " " + headimgurl);
+				}
+			}
+			updateUserInfo.setPortrait(headimgurl);
 		}
 		userInfoMapper.updateByPrimaryKeySelective(updateUserInfo);
 
@@ -1286,6 +1367,92 @@
 	}
 
 	@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, "寰俊鎺堟潈澶辨晥锛岃浣跨敤寰俊閲嶆柊鐧诲綍");
+
+		UserInfo userInfo = userInfoMapper.getEffectiveUserInfoByWXUnionId(weiXinUser.getUnionid());
+		// 鐩存帴鐢ㄧ殑寰俊鐧诲綍
+		if (userInfo != null)
+			throw new UserAccountException(10, "璇ュ井淇″彿宸茶鍗犵敤");
+
+		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("/portrait/wx/%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());
+			}
+		});
+		// 鍒犻櫎缂撳瓨
+		redisManager.removeCommonString(key);
+
+		return userInfo;
+	}
+
+	@Override
 	public void forbiddenUserAll(Long uid, String reason) {
 		UserInfo currentInfo = userInfoService.selectByPKey(uid);
 		if (currentInfo == null) {

--
Gitblit v1.8.0