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