From 98b1a0affd69bbe63223c21fdd2c404e8bedfccb Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期三, 20 五月 2020 17:25:08 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/div' into 2.1.2 --- fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserAccountServiceImpl.java | 969 +++++++++++++++++++++++++++++++++++++------------------- 1 files changed, 645 insertions(+), 324 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 a995194..3b02d4f 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 @@ -1,55 +1,64 @@ package com.yeshi.fanli.service.impl.user; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.Date; +import java.io.InputStream; import java.util.List; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; +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; 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; import com.yeshi.fanli.entity.bus.user.BindingAccount; 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.ThreeSale; -import com.yeshi.fanli.entity.bus.user.UserConnectHistory; +import com.yeshi.fanli.entity.bus.user.SMSHistory; +import com.yeshi.fanli.entity.bus.user.UserAccountBindingHistory; +import com.yeshi.fanli.entity.bus.user.UserExtraTaoBaoInfo; import com.yeshi.fanli.entity.bus.user.UserInfo; +import com.yeshi.fanli.entity.bus.user.UserInfoModifyRecord.ModifyTypeEnum; 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.exception.user.UserAccountException; import com.yeshi.fanli.log.LogHelper; -import com.yeshi.fanli.service.inter.hongbao.ThreeSaleSerivce; -import com.yeshi.fanli.service.inter.msg.UserAccountMsgNotificationService; -import com.yeshi.fanli.service.inter.user.BindingAccountService; +import com.yeshi.fanli.service.inter.money.extract.BindingAccountService; 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.FilePathEnum; +import com.yeshi.fanli.util.RedisKeyEnum; import com.yeshi.fanli.util.RedisManager; import com.yeshi.fanli.util.StringUtil; -import com.yeshi.fanli.util.TimeUtil; +import com.yeshi.fanli.util.ThreadUtil; import com.yeshi.fanli.util.factory.msg.MsgAccountDetailFactory; 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 { @@ -61,16 +70,13 @@ private UserInfoMapper userInfoMapper; @Resource + private UserInfoService userInfoService; + + @Resource private BindingAccountService bindingAccountService; @Resource - private UserConnectHistoryMapper userConnectHistoryMapper; - - @Resource private ThreeSaleSerivce threeSaleSerivce; - - @Resource - private AccountMessageMapper accountMessageMapper; @Resource private SpreadUserImgService spreadUserImgService; @@ -83,14 +89,28 @@ @Resource private ForbiddenUserIdentifyCodeService forbiddenUserIdentifyCodeService; - + @Resource private UserInfoExtraService userInfoExtraService; - @Transactional + @Resource + private UserAccountBindingHistoryService userAccountBindingHistoryService; + + @Resource + private UserInfoDeleteRecordService userInfoDeleteRecordService; + + @Resource + private JedisPool jedisPool; + + @Lazy + @Resource + private UserInfoModifyRecordService userInfoModifyRecordService; + + @Transactional(rollbackFor = Exception.class) @Override - public LoginResult login(HttpServletRequest request, Boolean first, String appId, String code, String phone, - UserInfo tbUserInfo, boolean wxinstall, int loginType) throws UserAccountException { + public LoginResult login(HttpServletRequest request, AcceptData acceptData, Boolean first, String appId, + String code, String phone, UserInfo tbUserInfo, boolean wxinstall, int loginType) + throws UserAccountException { JSONObject logInfo = new JSONObject(); logInfo.put("appId", appId); @@ -121,9 +141,7 @@ } userInfo = getUserInfoByTaoBaoOpenId(appId, tbUserInfo.getOpenid()); // 鍒ゆ柇鐢ㄦ埛鏄惁琚垹闄� - if (userInfo != null && userInfo.getState() != null - && (userInfo.getState() == UserInfo.STATE_DELETE_OUT_OF_DATE - || userInfo.getState() == UserInfo.STATE_DELETE)) + if (userInfo != null && userInfo.getState() != null && (userInfo.getState() != UserInfo.STATE_NORMAL)) userInfo = null; if (userInfo == null) {// 鍘熷厛鐨勮处鍙蜂笉瀛樺湪 userInfo = new UserInfo(); @@ -152,7 +170,9 @@ case 2:// 寰俊 // 閫氳繃Code鎹㈠彇淇℃伅 - weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code); + WXAccountInfoDTO wxAccount = Constant.getWXAccount(acceptData.getPlatform(), acceptData.getVersion()); + weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code, wxAccount.getAppId(), + wxAccount.getAppSecret()); if (weiXinUser == null) throw new UserAccountException(1001, "鏃犳硶鑾峰彇鍒板井淇′釜浜轰俊鎭�"); LogHelper.test("寰俊鎺堟潈鐢ㄦ埛淇℃伅锛�" + new Gson().toJson(weiXinUser)); @@ -164,9 +184,7 @@ userInfo = getUserInfoByWXUnionId(appId, weiXinUser.getUnionid()); // 鍒ゆ柇鐢ㄦ埛鏄惁琚垹闄� - if (userInfo != null && userInfo.getState() != null - && (userInfo.getState() == UserInfo.STATE_DELETE_OUT_OF_DATE - || userInfo.getState() == UserInfo.STATE_DELETE)) + if (userInfo != null && userInfo.getState() != null && (userInfo.getState() != UserInfo.STATE_NORMAL)) userInfo = null; // 鐩存帴鐢ㄧ殑寰俊鐧诲綍 if (lastUser == null) { @@ -184,6 +202,8 @@ updateUserInfo.setLastLoginTime(System.currentTimeMillis()); updateUserInfo.setLoginType(loginType); updateUserInfo.setLastLoginIp(request.getRemoteHost()); + // 鏇存柊openId + updateUserInfo.setOpenid(weiXinUser.getOpenid()); userInfoMapper.updateByPrimaryKeySelective(updateUserInfo); // 鍒犻櫎閭�璇峰浘鐗� @@ -301,9 +321,7 @@ userInfo = getUserInfoByPhone(appId, phone); // 鍒ゆ柇鐢ㄦ埛鏄惁琚垹闄� - if (userInfo != null && userInfo.getState() != null - && (userInfo.getState() == UserInfo.STATE_DELETE_OUT_OF_DATE - || userInfo.getState() == UserInfo.STATE_DELETE)) + if (userInfo != null && userInfo.getState() != null && (userInfo.getState() != UserInfo.STATE_NORMAL)) userInfo = null; if (userInfo == null) {// 鍘熷厛鐨勮处鍙蜂笉瀛樺湪 @@ -333,17 +351,17 @@ } } else {// 娌℃湁瀹夎寰俊 - LoginResult result = loginNoInstallWX(appId, code, phone, tbUserInfo, loginType); + LoginResult result = loginNoInstallWX(acceptData, appId, code, phone, tbUserInfo, loginType); if (result.getType() == LoginResult.TYPE_CREATE) session.setAttribute("LAST_LOGIN_USER", result.getUser()); return result; } } - @Transactional + @Transactional(rollbackFor = Exception.class) @Override - public LoginResult loginNoInstallWX(String appId, String code, String phone, UserInfo tbUserInfo, int loginType) - throws UserAccountException { + public LoginResult loginNoInstallWX(AcceptData acceptData, String appId, String code, String phone, + UserInfo tbUserInfo, int loginType) throws UserAccountException { JSONObject logInfo = new JSONObject(); logInfo.put("appId", appId); logInfo.put("code", code); @@ -367,7 +385,9 @@ break; case 2:// 寰俊 // 閫氳繃Code鎹㈠彇淇℃伅 - weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code); + WXAccountInfoDTO wxAccount = Constant.getWXAccount(acceptData.getPlatform(), acceptData.getVersion()); + weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code, wxAccount.getAppId(), + wxAccount.getAppSecret()); if (weiXinUser == null) throw new UserAccountException(1001, "鏃犳硶鑾峰彇鍒板井淇′釜浜轰俊鎭�"); @@ -390,8 +410,7 @@ } // 鍒ゆ柇鐢ㄦ埛鏄惁琚垹闄� - if (userInfo != null && userInfo.getState() != null && (userInfo.getState() == UserInfo.STATE_DELETE_OUT_OF_DATE - || userInfo.getState() == UserInfo.STATE_DELETE)) + if (userInfo != null && userInfo.getState() != null && (userInfo.getState() != UserInfo.STATE_NORMAL)) userInfo = null; if (userInfo != null) { @@ -428,111 +447,6 @@ } } - @Override - public void connectUsers(HttpSession session) throws UserAccountException { - UserInfo mainUser = (UserInfo) session.getAttribute("WEIXIN_USERINFO"); - UserInfo lessUser = (UserInfo) session.getAttribute("LAST_LOGIN_USER"); - - int lessUserLoginType = lessUser.getLoginType(); - - if (mainUser == null || lessUser == null || mainUser.getId() == null || lessUser.getId() == null) - throw new UserAccountException(30001, "缂哄皯鎵撻�氳处鍙�"); - - mainUser = userInfoMapper.selectByPrimaryKeyForUpdate(mainUser.getId()); - lessUser = userInfoMapper.selectByPrimaryKeyForUpdate(lessUser.getId()); - - session.removeAttribute("WEIXIN_USERINFO"); - session.removeAttribute("LAST_LOGIN_USER"); - - if (mainUser == null || lessUser == null) - throw new UserAccountException(30002, "缂哄皯鎵撻�氳处鍙�"); - - // 鍒ゆ柇鏄惁鏈夌粦瀹氱浉鍚岀被鍨嬬殑璐﹀彿 - if (lessUserLoginType == 1) {// 娆¤处鍙蜂互娣樺疂鐧诲綍 - if (!StringUtil.isNullOrEmpty(mainUser.getPhone()) && !StringUtil.isNullOrEmpty(lessUser.getPhone()) - && !lessUser.getPhone().equalsIgnoreCase(mainUser.getPhone())) - throw new UserAccountException(30003, "璇峰厛瑙i櫎鍏朵腑涓�涓处鍙风殑鎵嬫満缁戝畾"); - - } else if (lessUserLoginType == 3) {// 娆¤处鍙蜂互鎵嬫満鍙风櫥褰� - if (!StringUtil.isNullOrEmpty(mainUser.getOpenid()) && !StringUtil.isNullOrEmpty(lessUser.getOpenid()) - && !lessUser.getOpenid().equalsIgnoreCase(mainUser.getOpenid())) - throw new UserAccountException(30003, "璇峰厛瑙i櫎鍏朵腑涓�涓处鍙风殑娣樺疂缁戝畾"); - } - connectUsers(mainUser, lessUser); - } - - @Transactional - @Override - public void connectUsers(UserInfo mainUser, UserInfo lessUser) throws UserAccountException { - mainUser = userInfoMapper.selectByPrimaryKeyForUpdate(mainUser.getId()); - lessUser = userInfoMapper.selectByPrimaryKeyForUpdate(lessUser.getId()); - - if (!StringUtil.isNullOrEmpty(mainUser.getOpenid()) && !StringUtil.isNullOrEmpty(lessUser.getOpenid())) - throw new UserAccountException(9, "涓や釜璐﹀彿閮界粦瀹氫簡娣樺疂锛岃瑙g粦鍏朵腑涓�涓�"); - - if (!StringUtil.isNullOrEmpty(mainUser.getPhone()) && !StringUtil.isNullOrEmpty(lessUser.getPhone())) - throw new UserAccountException(9, "涓や釜璐﹀彿閮界粦瀹氫簡鎵嬫満鍙风爜锛岃瑙g粦鍏朵腑涓�涓�"); - - if (lessUser.getMyHongBao().compareTo(new BigDecimal("10")) >= 0 - && mainUser.getMyHongBao().compareTo(new BigDecimal("10")) > 0) - throw new UserAccountException(10, String.format("璐︽埛ID:%s 鐨勮祫閲戣秴杩�10鍏冿紝涓轰繚璇佽祫閲戝畨鍏ㄨ鑱旂郴瀹㈡湇鎵撻��", lessUser.getId() + "")); - - // 鍒ゅ畾鏄惁缁戝畾浜嗗悓涓�鏀粯瀹� - BindingAccount mainUserAccount = bindingAccountService.getBindingAccountByUidAndType(mainUser.getId(), - BindingAccount.TYPE_ALIPAY); - - BindingAccount lessUserAccount = bindingAccountService.getBindingAccountByUidAndType(lessUser.getId(), - BindingAccount.TYPE_ALIPAY); - - // 鏈変笉鍚岀殑鏀粯瀹濊处鍙� - boolean hasDiffrentAlipayAccount = false; - if (mainUserAccount != null && lessUserAccount != null) { - if (!mainUserAccount.getAccount().equalsIgnoreCase(lessUserAccount.getAccount())) - hasDiffrentAlipayAccount = true; - } - - if (hasDiffrentAlipayAccount) - throw new UserAccountException(10, "涓や釜璐︽埛閮界粦瀹氫簡鏀粯瀹濓紝璇峰厛瑙g粦鍏朵腑涓�涓�"); - - // 鍒ゅ畾鏄惁鏈夐噸鍙犵殑璐﹀彿 - UserInfo updateUser = new UserInfo(mainUser.getId()); - if (!StringUtil.isNullOrEmpty(lessUser.getOpenid())) { - updateUser.setOpenid(lessUser.getOpenid()); - updateUser.setTbName(lessUser.getTbName()); - updateUser.setTbPic(lessUser.getTbPic()); - } - - if (!StringUtil.isNullOrEmpty(lessUser.getPhone())) { - updateUser.setPhone(lessUser.getPhone()); - } - - // 澶囦唤鍘熸潵鐨勭敤鎴蜂俊鎭� - String logUrl = backupUserImportantInfo(lessUser.getId()); - - // 娣诲姞鎵撻�氳褰� - UserConnectHistory userConnectHistory = new UserConnectHistory(); - userConnectHistory.setCreateTime(new Date()); - userConnectHistory.setLessUser(lessUser); - userConnectHistory.setMainUser(mainUser); - userConnectHistory.setLogUrl(logUrl); - userConnectHistoryMapper.insertSelective(userConnectHistory); - - userInfoMapper.updateByPrimaryKeySelective(updateUser); - // 鍒犻櫎鍘熸潵鐨勮处鍙� - UserInfo updateLessUser = new UserInfo(lessUser.getId()); - updateLessUser.setState(UserInfo.STATE_DELETE); - updateLessUser.setStateDesc("璐﹀彿琚墦閫氬垹闄�"); - userInfoMapper.updateByPrimaryKeySelective(updateLessUser); - // 铻嶅悎涓氬姟 - userInfoMapper.connectUser(mainUser.getId(), lessUser.getId()); - - // 鏌ヨ鏄惁鏈夊浣欑殑鏂颁汉绾㈠寘 - int subCount = 0; - int addCount = 0; - - userAccountMsgNotificationService.connectSuccess(mainUser.getId(), lessUser.getId()); - } - /** * 鏍规嵁绯荤粺涓巙nionid瀵绘壘鐢ㄦ埛 * @@ -550,8 +464,7 @@ List<UserInfo> list = userInfoMapper.listByAppIdAndWXUnionId(appId, unionId); // 鍓旈櫎琚垹闄ゆ帀鐨勭敤鎴� for (int i = 0; i < list.size(); i++) { - if (list.get(i).getState() == UserInfo.STATE_DELETE - || list.get(i).getState() == UserInfo.STATE_DELETE_OUT_OF_DATE) { + if (list.get(i).getState() == UserInfo.STATE_NORMAL) { list.remove(i); i--; } @@ -578,8 +491,7 @@ // 鍓旈櫎琚垹闄ゆ帀鐨勭敤鎴� for (int i = 0; i < list.size(); i++) { - if (list.get(i).getState() == UserInfo.STATE_DELETE - || list.get(i).getState() == UserInfo.STATE_DELETE_OUT_OF_DATE) { + if (list.get(i).getState() != UserInfo.STATE_NORMAL) { list.remove(i); i--; } @@ -607,8 +519,7 @@ // 鍓旈櫎琚垹闄ゆ帀鐨勭敤鎴� for (int i = 0; i < list.size(); i++) { - if (list.get(i).getState() == UserInfo.STATE_DELETE - || list.get(i).getState() == UserInfo.STATE_DELETE_OUT_OF_DATE) { + if (list.get(i).getState() != UserInfo.STATE_NORMAL) { list.remove(i); i--; } @@ -626,6 +537,7 @@ userInfoMapper.updateByPrimaryKeySelective(userInfo); } + @Transactional(rollbackFor = Exception.class) @Override public void register(UserInfo userInfo) throws UserAccountException { if (!StringUtil.isNullOrEmpty(userInfo.getPhone())) { @@ -649,8 +561,10 @@ addUser(userInfo); } + @Transactional @Override public void addUser(UserInfo user) { + Long maxUid = userInfoMapper.getMaxUid(); if (maxUid == null) maxUid = 100000L; @@ -664,13 +578,28 @@ user.setRank(0); if (StringUtil.isNullOrEmpty(user.getPortrait())) user.setPortrait(Constant.systemCommonConfig.getDefaultPortrait()); - userInfoMapper.insertSelective(user); + + // 鏄电О涓虹┖鏃� 榛樿鏄电О if (StringUtil.isNullOrEmpty(user.getNickName())) { 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(); + } + + // 娣诲姞璐﹀彿缁戝畾鍘嗗彶 + 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 @@ -680,7 +609,7 @@ @Override public void bindPhone(Long uid, String phone) throws UserAccountException { - UserInfo user = userInfoMapper.selectByPrimaryKey(uid); + UserInfo user = userInfoMapper.selectAvailableByPrimaryKey(uid); if (user == null) throw new UserAccountException(4, "鐢ㄦ埛涓嶅瓨鍦�"); @@ -695,11 +624,13 @@ update.setPhone(phone); userInfoMapper.updateByPrimaryKeySelective(update); userAccountMsgNotificationService.bindingSuccess(uid, MsgAccountDetailFactory.TYPE_PHONE); + + userInfoModifyRecordService.addModifyRecord(uid, ModifyTypeEnum.bindPhone, phone); } @Override public void unBindPhone(Long uid, String phone) throws UserAccountException { - UserInfo user = userInfoMapper.selectByPrimaryKey(uid); + UserInfo user = userInfoMapper.selectAvailableByPrimaryKey(uid); if (user == null) throw new UserAccountException(4, "鐢ㄦ埛涓嶅瓨鍦�"); @@ -721,7 +652,7 @@ @Override public void bindTaoBao(Long uid, String tbOpenId, String tbNickName, String tbPortrait) throws UserAccountException { - UserInfo user = userInfoMapper.selectByPrimaryKey(uid); + UserInfo user = userInfoMapper.selectAvailableByPrimaryKey(uid); if (user == null) throw new UserAccountException(4, "鐢ㄦ埛涓嶅瓨鍦�"); @@ -751,7 +682,7 @@ @Override public void unBindTaoBao(Long uid) throws UserAccountException { - UserInfo user = userInfoMapper.selectByPrimaryKey(uid); + UserInfo user = userInfoMapper.selectAvailableByPrimaryKey(uid); if (user == null) throw new UserAccountException(4, "鐢ㄦ埛涓嶅瓨鍦�"); if (StringUtil.isNullOrEmpty(user.getOpenid())) @@ -778,11 +709,13 @@ } @Override - public void changeWXBind(Long uid, String code) throws UserAccountException { - UserInfo user = userInfoMapper.selectByPrimaryKey(uid); + public void changeWXBind(AcceptData acceptData, Long uid, String code) throws UserAccountException { + UserInfo user = userInfoMapper.selectAvailableByPrimaryKey(uid); if (user == null) throw new UserAccountException(4, "鐢ㄦ埛涓嶅瓨鍦�"); - WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code); + WXAccountInfoDTO wxAccount = Constant.getWXAccount(acceptData.getPlatform(), acceptData.getVersion()); + WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code, wxAccount.getAppId(), + wxAccount.getAppSecret()); if (weiXinUser == null) throw new UserAccountException(10, "鑾峰彇寰俊鐢ㄦ埛淇℃伅澶辫触"); if (weiXinUser.getUnionid().equalsIgnoreCase(user.getWxUnionId())) @@ -790,72 +723,42 @@ UserInfo newUser = getUserInfoByWXUnionId(user.getAppId(), weiXinUser.getUnionid()); if (newUser != null) - throw new UserAccountException(13, "浜诧紝浣犺鏇存崲缁戝畾鐨勫井淇″彿宸茶鍏朵粬璐﹀彿缁戝畾"); + throw new UserAccountException(13, "璇ュ井淇″彿宸茶鍏朵粬璐﹀彿缁戝畾"); 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()); + + // 灏嗛粯璁ゆ樀绉版浛鎹㈡垚寰俊鏄电О + String defaultNickName = Constant.systemCommonConfig.getDefaultNickName(); + if (!StringUtil.isNullOrEmpty(defaultNickName) && !StringUtil.isNullOrEmpty(weiXinUser.getNickname())) { + defaultNickName = defaultNickName + uid; + if ((defaultNickName.equals(user.getNickName()) || "鏉挎牀蹇渷".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); userAccountMsgNotificationService.changeBindingSuccess(uid, MsgAccountDetailFactory.TYPE_WX); - } - @Override - public String backupUserImportantInfo(Long uid) { - - String logPath = String.format(FileUtil.getCacheDir() + "/benfen_%s_" + uid + ".log", - TimeUtil.getGernalTime(System.currentTimeMillis(), "yyyyMMddHHmmss")); - - // 澶囦唤鐢ㄦ埛淇℃伅 - UserInfo user = userInfoMapper.selectByPrimaryKey(uid); - - // TODO 澶囦唤璧勯噾鏄庣粏 - - // 澶囦唤閭�璇峰叧绯� - List<ThreeSale> threeSaleList = new ArrayList<>(); - - FileWriter fw = null; - try { - // 璁剧疆涓�:True,琛ㄧず鍐欏叆鐨勬椂鍊欒拷鍔犳暟鎹� - fw = new FileWriter(new File(logPath), true); - - fw.write("#UserInfo" + "\r\n"); - fw.write(JsonUtil.getSimpleGsonWithDate().toJson(user) + "\r\n"); - - fw.write("#ThreeSale" + "\r\n"); - fw.write(JsonUtil.getSimpleGsonWithDate().toJson(threeSaleList) + "\r\n"); - - fw.close(); - - String logUrl = COSManager.getInstance() - .uploadFile(new File(logPath), "beifen/" + new File(logPath).getName()).getUrl(); - return logUrl; - } catch (IOException e) { - e.printStackTrace(); - } finally { - if (new File(logPath).exists()) - new File(logPath).delete(); - } - - return null; + userInfoModifyRecordService.addModifyRecord(uid, ModifyTypeEnum.bindWeiXin, weiXinUser.getUnionid()); } @Override public void clearUserPortrait(Long uid) { if (uid == null) return; - UserInfo user = userInfoMapper.selectByPrimaryKey(uid); + UserInfo user = userInfoMapper.selectAvailableByPrimaryKey(uid); String prefix = String.format("/portrait/wx/%s_", user.getWxUnionId()); ObjectListing list = COSManager.getInstance().getObjectList(prefix, null, 30); if (list != null && list.getObjectSummaries() != null) @@ -870,7 +773,7 @@ public String repairPortrait(Long uid) { if (uid == null) return null; - UserInfo user = userInfoMapper.selectByPrimaryKey(uid); + UserInfo user = userInfoMapper.selectAvailableByPrimaryKey(uid); if (user == null) return null; String prefix = String.format("/portrait/wx/%s_", user.getWxUnionId()); @@ -899,36 +802,36 @@ return user.getPortrait(); } - - - @Transactional + @Transactional(rollbackFor = Exception.class) @Override - public UserInfo loginPhone(HttpServletRequest request,int loginType, String vcode, String phone, - String appId) throws UserAccountException { + 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); - + + // 鑻规灉搴旂敤鍟嗗簵涓婄嚎娴嬭瘯鍙风爜 + 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); @@ -942,37 +845,68 @@ 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); - - - try { - // 绗竴娆$櫥褰曟椂鍒涘缓鐢ㄦ埛棰濆淇℃伅 - userInfoExtraService.createUserInfoExtra(userInfo.getId()); - } catch (Exception e) { - e.printStackTrace(); - } - } + // 娓呯┖闄愬埗 + redisManager.clearSMSFrequencyLimit(phone, SMSHistory.TYPE_LOGIN); + // 娓呯悊娆℃暟 + String key = RedisKeyEnum.getRedisKey(RedisKeyEnum.SMSLoginCount, phone); + redisManager.removeCommonString(key); - return userInfo; + // 閲囩敤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(); + } + + userInfoModifyRecordService.addModifyRecord(userInfo.getId(), ModifyTypeEnum.bindPhone, phone); + } + + return userInfo; + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + jedis.del(watchKey); + jedis.unwatch(); + jedis.close(); + } + throw new UserAccountException(10, "璇风◢鍚庡啀璇�"); } - - @Transactional + + @Transactional(rollbackFor = Exception.class) @Override - public UserInfo loginWinXin(HttpServletRequest request,int loginType, String code, String appId) throws UserAccountException { + public UserInfo loginWinXin(HttpServletRequest request, AcceptData acceptData, int loginType, String code, + String appId) throws UserAccountException { // 鏃ュ織淇℃伅 JSONObject logInfo = new JSONObject(); logInfo.put("appId", appId); @@ -981,7 +915,113 @@ LogHelper.lgoinInfo(logInfo.toString()); // 閫氳繃Code鎹㈠彇淇℃伅 - WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(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); + } + + // 閲囩敤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) { + LogHelper.test("寰俊unionID瀛樺湪:" + weiXinUser.getUnionid()); + // 鏇存柊璐︽埛鐧诲綍淇℃伅 + updateLonginInfo(userInfo, loginType, request); + // 鍒犻櫎閭�璇峰垎浜浘 + 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.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(loginType); + userInfo.setLastLoginIp(request.getRemoteHost()); + userInfo.setState(UserInfo.STATE_NORMAL); + addUser(userInfo); + + try { + // 绗竴娆$櫥褰曟椂鍒涘缓鐢ㄦ埛棰濆淇℃伅 + userInfoExtraService.createUserInfoExtra(userInfo.getId()); + } catch (Exception e) { + e.printStackTrace(); + } + + userInfoModifyRecordService.addModifyRecord(userInfo.getId(), ModifyTypeEnum.bindWeiXin, + weiXinUser.getUnionid()); + } + 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 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, "寰俊甯愬彿鎺堟潈澶辫触"); } @@ -995,38 +1035,27 @@ } 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); - - try { - // 绗竴娆$櫥褰曟椂鍒涘缓鐢ㄦ埛棰濆淇℃伅 - userInfoExtraService.createUserInfoExtra(userInfo.getId()); - } catch (Exception e) { - e.printStackTrace(); - } + if (userInfo == null) { + 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); } + // 鏇存柊璐︽埛鐧诲綍淇℃伅 + updateLonginInfo(userInfo, loginType, request); + Long uid = userInfo.getId(); + ThreadUtil.run(new Runnable() { + public void run() { + // 鍒犻櫎閭�璇峰垎浜浘 + spreadUserImgService.deleteImgUrl(uid); + } + }); return userInfo; } - + /** * 鏇存柊璐︽埛鐧诲綍淇℃伅 + * * @param userInfo * @param loginType * @param request @@ -1039,15 +1068,14 @@ updateUserInfo.setLastLoginIp(request.getRemoteHost()); userInfoMapper.updateByPrimaryKeySelective(updateUserInfo); } - - + @Override public void bindPhoneNew(Long uid, String phone) throws UserAccountException { - UserInfo user = userInfoMapper.selectByPrimaryKey(uid); + UserInfo user = userInfoMapper.selectAvailableByPrimaryKey(uid); if (user == null) { throw new UserAccountException(1, "鐢ㄦ埛涓嶅瓨鍦�"); } - + String hasPhone = user.getPhone(); if (!StringUtil.isNullOrEmpty(hasPhone) && hasPhone.equals(phone)) { throw new UserAccountException(2, "鎮ㄥ凡缁忕粦瀹氫簡璇ョ數璇濆彿鐮�"); @@ -1057,61 +1085,354 @@ if (phoneUser != null) { throw new UserAccountException(2, "鍙风爜宸茬粡琚崰鐢�"); } - + // 鏇存柊鐢佃瘽鍙风爜 UserInfo update = new UserInfo(user.getId()); update.setPhone(phone); userInfoMapper.updateByPrimaryKeySelective(update); - + // 鍔犲叆缁戝畾璁板綍 + UserAccountBindingHistory history = new UserAccountBindingHistory(); + history.setContent(phone); + history.setType(UserAccountBindingHistory.TYPE_PHONE); + history.setUid(uid); + + // 涔嬪墠宸茬粡缁戝畾鐢佃瘽鍙风爜 + if (!StringUtil.isNullOrEmpty(user.getPhone())) + history.setFirst(false); + else + history.setFirst(true); + userAccountBindingHistoryService.addUserAccountBindingHistory(history); + // 鍙戦�佹秷鎭� userAccountMsgNotificationService.bindingSuccess(uid, MsgAccountDetailFactory.TYPE_PHONE); + + userInfoModifyRecordService.addModifyRecord(uid, ModifyTypeEnum.bindPhone, phone); + } - - + + @Transactional(rollbackFor = UserAccountException.class) @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); + public void bindWeiXin(AcceptData acceptData, Long uid, String code) throws UserAccountException { + WXAccountInfoDTO wxAccount = Constant.getWXAccount(acceptData.getPlatform(), acceptData.getVersion()); + WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUser(code, wxAccount.getAppId(), wxAccount.getAppSecret()); if (weiXinUser == null) { throw new UserAccountException(2, "寰俊甯愬彿鎺堟潈澶辫触"); } - - if (weiXinUser.getUnionid().equalsIgnoreCase(user.getWxUnionId())) { + + String wxUnionId = weiXinUser.getUnionid(); + if (StringUtil.isNullOrEmpty(wxUnionId)) { + throw new UserAccountException(2, "寰俊甯愬彿鎺堟潈澶辫触"); + } + bindWeiXin(uid, weiXinUser); + } + + @Transactional(rollbackFor = UserAccountException.class) + @Override + 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, "寰俊甯愬彿鎺堟潈澶辫触"); + } + + 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.equalsIgnoreCase(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, "璇ュ笎鍙锋病鏈夌粦瀹氭墜鏈哄彿鐮侊紝闇�缁戝畾鎵嬫満鍙风爜鎵嶈兘瀹屾垚寰俊鏇存崲"); } - - + 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()); + + // 灏嗛粯璁ゆ樀绉版浛鎹㈡垚寰俊鏄电О + String defaultNickName = Constant.systemCommonConfig.getDefaultNickName(); + if (!StringUtil.isNullOrEmpty(defaultNickName) && !StringUtil.isNullOrEmpty(weiXinUser.getNickname())) { + defaultNickName = defaultNickName + uid; + if ((defaultNickName.equals(user.getNickName()) || "鏉挎牀蹇渷".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())) { + 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(FilePathEnum.userWXPortrait.getPath() + "%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); + // 鍔犲叆缁戝畾璁板綍 + UserAccountBindingHistory history = new UserAccountBindingHistory(); + history.setContent(weiXinUser.getUnionid()); + history.setType(UserAccountBindingHistory.TYPE_WX); + history.setUid(uid); + + // 涔嬪墠宸茬粡缁戝畾鐢佃瘽鍙风爜 + if (!StringUtil.isNullOrEmpty(user.getWxUnionId())) + history.setFirst(false); + else + history.setFirst(true); + userAccountBindingHistoryService.addUserAccountBindingHistory(history); + userAccountMsgNotificationService.bindingSuccess(uid, MsgAccountDetailFactory.TYPE_WX); + + userInfoModifyRecordService.addModifyRecord(uid, ModifyTypeEnum.bindWeiXin, wxUnionId); } - + + @Override + public UserInfo bindPhoneToLogin(String phone, String key, String appId, HttpServletRequest request) + throws UserAccountException { + + // 鍒ゆ柇鎵嬫満鍙风爜鏄惁琚皝绂� + 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(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 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() { + 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) { + 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