From 1da17d215d48e3e3aa9e8d7a3ef526904764f408 Mon Sep 17 00:00:00 2001
From: yujian <yujian>
Date: 星期一, 08 四月 2019 14:06:12 +0800
Subject: [PATCH] 1.5.3部分需求 提交

---
 fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserAccountServiceImpl.java |  206 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 206 insertions(+), 0 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 94f15bd..28434e3 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
@@ -27,6 +27,7 @@
 import com.yeshi.fanli.entity.bus.user.ForbiddenUserIdentifyCode;
 import com.yeshi.fanli.entity.bus.user.ForbiddenUserIdentifyCode.ForbiddenUserIdentifyCodeTypeEnum;
 import com.yeshi.fanli.entity.bus.user.LoginResult;
+import com.yeshi.fanli.entity.bus.user.SMSHistory;
 import com.yeshi.fanli.entity.bus.user.ThreeSale;
 import com.yeshi.fanli.entity.bus.user.UserConnectHistory;
 import com.yeshi.fanli.entity.bus.user.UserInfo;
@@ -42,6 +43,7 @@
 import com.yeshi.fanli.service.inter.user.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.TimeUtil;
 import com.yeshi.fanli.util.factory.msg.MsgAccountDetailFactory;
@@ -51,6 +53,9 @@
 
 @Service
 public class UserAccountServiceImpl implements UserAccountService {
+
+	@Resource
+	private RedisManager redisManager;
 
 	@Resource
 	private UserInfoMapper userInfoMapper;
@@ -532,6 +537,7 @@
 	 * @param unionId
 	 * @return
 	 */
+	@Override
 	public UserInfo getUserInfoByWXUnionId(String appId, String unionId) throws UserAccountException {
 		if (StringUtil.isNullOrEmpty(appId))
 			throw new UserAccountException(1, "appId涓虹┖");
@@ -890,4 +896,204 @@
 		return user.getPortrait();
 	}
 
+	
+	
+	@Transactional
+	@Override
+	public UserInfo loginPhone(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) && "258168".equalsIgnoreCase(vcode)) {
+			;
+		} else {
+
+			if (StringUtil.isNullOrEmpty(vcode)) {
+				throw new UserAccountException(1, "璇疯緭鍏ラ獙璇佺爜");
+			}
+
+			String oldVcode = redisManager.getSMSVCode(phone, SMSHistory.TYPE_LOGIN);
+			LogHelper.test("----------------------鐧诲綍楠岃瘉鐮侊細 " + oldVcode);
+			if (StringUtil.isNullOrEmpty(oldVcode) || !oldVcode.equalsIgnoreCase(vcode)) {
+				throw new UserAccountException(1, "楠岃瘉鐮侀敊璇紝閲嶆柊杈撳叆");
+			}
+		}
+		redisManager.clearSMSFrequencyLimit(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);
+		}
+
+		// 鏌ヨ鏄惁瀛樺湪璇ョ數璇濆巻鍙茬敤鎴�
+		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);
+		}
+
+		return userInfo;
+	}
+	
+	@Transactional
+	@Override
+	public UserInfo loginWinXin(HttpServletRequest request,int loginType, String code, String appId) throws UserAccountException {
+		// 鏃ュ織淇℃伅
+		JSONObject logInfo = new JSONObject();
+		logInfo.put("appId", appId);
+		logInfo.put("code", code);
+		logInfo.put("loginType", loginType);
+		LogHelper.lgoinInfo(logInfo.toString());
+
+		// 閫氳繃Code鎹㈠彇淇℃伅
+		WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code);
+		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) {
+			// 鏇存柊璐︽埛鐧诲綍淇℃伅
+			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);
+		}
+		return userInfo;
+	}
+	
+	/**
+	 * 鏇存柊璐︽埛鐧诲綍淇℃伅
+	 * @param userInfo
+	 * @param loginType
+	 * @param request
+	 */
+	public void updateLonginInfo(UserInfo userInfo, int loginType, HttpServletRequest request) {
+		// 璁剧疆鐧诲綍鏃堕棿涓庣櫥褰曠被鍨�
+		UserInfo updateUserInfo = new UserInfo(userInfo.getId());
+		updateUserInfo.setLastLoginTime(System.currentTimeMillis());
+		updateUserInfo.setLoginType(loginType);
+		updateUserInfo.setLastLoginIp(request.getRemoteHost());
+		userInfoMapper.updateByPrimaryKeySelective(updateUserInfo);
+	}
+	
+	
+	@Override
+	public void bindPhoneNew(Long uid, String phone) throws UserAccountException {
+		UserInfo user = userInfoMapper.selectByPrimaryKey(uid);
+		if (user == null) {
+			throw new UserAccountException(1, "鐢ㄦ埛涓嶅瓨鍦�");
+		}
+		
+		String hasPhone = user.getPhone();
+		if (!StringUtil.isNullOrEmpty(hasPhone) && hasPhone.equals(phone)) {
+			throw new UserAccountException(2, "鎮ㄥ凡缁忕粦瀹氫簡璇ョ數璇濆彿鐮�");
+		}
+
+		UserInfo phoneUser = userInfoMapper.getEffectiveUserInfoByPhone(phone);
+		if (phoneUser != null) {
+			throw new UserAccountException(2, "鍙风爜宸茬粡琚崰鐢�");
+		}
+		
+		// 鏇存柊鐢佃瘽鍙风爜
+		UserInfo update = new UserInfo(user.getId());
+		update.setPhone(phone);
+		userInfoMapper.updateByPrimaryKeySelective(update);
+		
+		// 鍙戦�佹秷鎭�
+		userAccountMsgNotificationService.bindingSuccess(uid, MsgAccountDetailFactory.TYPE_PHONE);
+	}
+	
+	
+	@Override
+	public void bindWeiXin(Long uid, String code) throws UserAccountException {
+		UserInfo user = userInfoMapper.selectByPrimaryKey(uid);
+		if (user == null) {
+			throw new UserAccountException(1, "鐢ㄦ埛涓嶅瓨鍦�");
+		}
+		
+		WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code);
+		if (weiXinUser == null) {
+			throw new UserAccountException(2, "寰俊甯愬彿鎺堟潈澶辫触");
+		}
+		
+		if (weiXinUser.getUnionid().equalsIgnoreCase(user.getWxUnionId())) {
+			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())) {
+			throw new UserAccountException(5, "璇ュ笎鍙锋病鏈夌粦瀹氭墜鏈哄彿鐮侊紝闇�缁戝畾鎵嬫満鍙风爜鎵嶈兘瀹屾垚寰俊鏇存崲");
+		}
+		
+		
+		UserInfo updateUserInfo = new UserInfo(uid);
+		updateUserInfo.setWxName(weiXinUser.getNickname());
+		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());
+		}
+
+		if (StringUtil.isNullOrEmpty(weiXinUser.getHeadimgurl())) {
+			updateUserInfo.setPortrait(Constant.systemCommonConfig.getDefaultPortrait());
+		}
+		userInfoMapper.updateByPrimaryKeySelective(updateUserInfo);
+
+		userAccountMsgNotificationService.bindingSuccess(uid, MsgAccountDetailFactory.TYPE_WX);
+	}
+	
 }

--
Gitblit v1.8.0