From 30d8e227e8d823b6c38c3b9c90ac2df03b63befe Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期二, 25 二月 2025 16:41:22 +0800 Subject: [PATCH] 淘宝转链接口更新 --- fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserAccountServiceImpl.java | 3539 ++++++++++++++++++++++++++++++++--------------------------- 1 files changed, 1,896 insertions(+), 1,643 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 b29eca8..3e8adb6 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,1643 +1,1896 @@ -package com.yeshi.fanli.service.impl.user; - -import java.io.InputStream; -import java.util.List; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpSession; - -import com.yeshi.fanli.entity.SystemEnum; -import com.yeshi.fanli.util.*; -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.SystemUtil; -import org.yeshi.utils.entity.FileUploadResult; -import org.yeshi.utils.entity.ProxyIP; -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.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.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.user.ForbiddenUserIdentifyCodeException; -import com.yeshi.fanli.exception.user.UserAccountException; -import com.yeshi.fanli.log.LogHelper; -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.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.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 { - - @Resource - private RedisManager redisManager; - -// @Resource -// private UserInfoMapper userInfoMapper; - - @Resource - private UserInfoService userInfoService; - - @Resource - private BindingAccountService bindingAccountService; - - @Resource - private ThreeSaleSerivce threeSaleSerivce; - - @Resource - private SpreadUserImgService spreadUserImgService; - - @Resource - private UserAccountMsgNotificationService userAccountMsgNotificationService; - - @Resource - private UserExtraTaoBaoInfoService userExtraTaoBaoInfoService; - - @Resource - private ForbiddenUserIdentifyCodeService forbiddenUserIdentifyCodeService; - - @Resource - private UserInfoExtraService userInfoExtraService; - - @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, 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); - logInfo.put("code", code); - logInfo.put("phone", phone); - if (tbUserInfo != null) - logInfo.put("tbUserInfo", tbUserInfo.getId()); - logInfo.put("loginType", loginType); - LogHelper.lgoinInfo(logInfo.toString()); - - HttpSession session = request.getSession(); - if (first != null && first == true) - session.removeAttribute("LAST_LOGIN_USER"); - // 浼氳瘽涓笂娆$櫥褰曠殑鐢ㄦ埛 - if (wxinstall) {// 瀹夎浜嗗井淇$殑鐘舵�� - UserInfo lastUser = (UserInfo) session.getAttribute("LAST_LOGIN_USER"); - UserInfo userInfo = null; - WeiXinUser weiXinUser = null; - switch (loginType) { - case 1:// 娣樺疂 - // 鍒ゆ柇娣樺疂鏄惁琚皝绂� - if (!StringUtil.isNullOrEmpty(tbUserInfo.getTaoBaoUid())) { - ForbiddenUserIdentifyCode identifyCode = forbiddenUserIdentifyCodeService.listByTypeAndIdentifyCode( - ForbiddenUserIdentifyCodeTypeEnum.taobaoUid, tbUserInfo.getTaoBaoUid()); - if (identifyCode != null && identifyCode.getEffective() != null && identifyCode.getEffective()) - throw new UserAccountException(Constant.CODE_FORBIDDEN_USER, - Constant.FORBIDDEN_USER_REASON_DESC); - } - userInfo = getUserInfoByTaoBaoOpenId(SystemInfoUtil.getSystem(acceptData.getPlatform(), acceptData.getPackages()), tbUserInfo.getOpenid()); - // 鍒ゆ柇鐢ㄦ埛鏄惁琚垹闄� - if (userInfo != null && userInfo.getState() != null && (userInfo.getState() != UserInfo.STATE_NORMAL)) - userInfo = null; - if (userInfo == null) {// 鍘熷厛鐨勮处鍙蜂笉瀛樺湪 - userInfo = new UserInfo(); - userInfo.setAppId(appId); - userInfo.setTbName(tbUserInfo.getTbName()); - userInfo.setOpenid(tbUserInfo.getOpenid()); - userInfo.setTbPic(tbUserInfo.getTbPic()); - userInfo.setNickName(tbUserInfo.getNickName()); - userInfo.setPortrait(tbUserInfo.getPortrait()); - userInfo.setLoginType(loginType); - userInfo.setSystem(SystemInfoUtil.getSystem(acceptData)); - session.setAttribute("LAST_LOGIN_USER", userInfo); - // 闇�瑕佸井淇$櫥褰� - return new LoginResult(LoginResult.TYPE_WX, userInfo); - } else {// 鍘熷厛鐨勮处鍙峰瓨鍦� - // 鍒ゅ畾鏄惁缁戝畾浜嗗井淇� - if (StringUtil.isNullOrEmpty(userInfo.getWxUnionId())) {// 娌℃湁缁戝畾寰俊 - userInfo.setLoginType(loginType); - session.setAttribute("LAST_LOGIN_USER", userInfo); - // 闇�瑕佸井淇$櫥褰� - return new LoginResult(LoginResult.TYPE_WX, userInfo); - } else {// 缁戝畾浜嗗井淇� - updateLatestLoginTime(userInfo.getId()); - return new LoginResult(LoginResult.TYPE_NORMAL, userInfo); - } - } - - case 2:// 寰俊 - // 閫氳繃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)); - // 鍒ゆ柇寰俊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 = getUserInfoByWXUnionId(SystemInfoUtil.getSystem(acceptData.getPlatform(), acceptData.getPackages()), weiXinUser.getUnionid()); - // 鍒ゆ柇鐢ㄦ埛鏄惁琚垹闄� - if (userInfo != null && userInfo.getState() != null && (userInfo.getState() != UserInfo.STATE_NORMAL)) - userInfo = null; - // 鐩存帴鐢ㄧ殑寰俊鐧诲綍 - if (lastUser == null) { - if (userInfo != null) { - // 浣垮垎閿�鍏崇郴鐢熸晥 - threeSaleSerivce.effective(userInfo); - // 鏇存柊澶村儚涓庢樀绉� - UserInfo updateUserInfo = new UserInfo(userInfo.getId()); - updateUserInfo.setNickName(weiXinUser.getNickname()); - if (!StringUtil.isNullOrEmpty(weiXinUser.getHeadimgurl())) - updateUserInfo.setPortrait(weiXinUser.getHeadimgurl()); - updateUserInfo.setWxPic(weiXinUser.getHeadimgurl()); - updateUserInfo.setWxName(weiXinUser.getNickname()); - // 璁剧疆鐧诲綍鏃堕棿涓庣櫥褰曠被鍨� - updateUserInfo.setLastLoginTime(System.currentTimeMillis()); - updateUserInfo.setLoginType(loginType); - updateUserInfo.setLastLoginIp(request.getRemoteHost()); - // 鏇存柊openId - updateUserInfo.setOpenid(weiXinUser.getOpenid()); - userInfoService.updateByPrimaryKeySelective(updateUserInfo); - // 鍒犻櫎閭�璇峰浘鐗� - spreadUserImgService.deleteImgUrl(userInfo.getId()); - return new LoginResult(LoginResult.TYPE_NORMAL, userInfo); - } - 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.setSystem(SystemInfoUtil.getSystem(acceptData)); - addUser(userInfo); - - return new LoginResult(LoginResult.TYPE_NORMAL, userInfo); - } else { - // 鏈細璇濋噰鐢ㄨ繃鍏朵粬璐﹀彿鐧诲綍 - if (userInfo != null)// 寰俊璐﹀彿瀛樺湪 - { - if (lastUser.getLoginType() == 2) { - session.removeAttribute("LAST_LOGIN_USER"); - throw new UserAccountException(1002, "寰俊涓嶈兘缁戝畾寰俊"); - } - if (lastUser.getLoginType() == 1 && !StringUtil.isNullOrEmpty(userInfo.getOpenid())) { - session.removeAttribute("LAST_LOGIN_USER"); - throw new UserAccountException(1003, "璇ュ井淇″凡缁忕粦瀹氫簡娣樺疂璐﹀彿锛岃鍏堣В缁�"); - } - if (lastUser.getLoginType() == 3 && !StringUtil.isNullOrEmpty(userInfo.getPhone())) { - session.removeAttribute("LAST_LOGIN_USER"); - throw new UserAccountException(1003, "璇ュ井淇″凡缁忕粦瀹氫簡鐢佃瘽鍙风爜锛岃鍏堣В缁�"); - } - - // 鍒犻櫎閭�璇峰浘鐗� - spreadUserImgService.deleteImgUrl(userInfo.getId()); - // 杩樻病鏈夌粦瀹氬悓绫诲瀷鐨勮处鍙� - - // 涓や釜璐﹀彿娌℃湁鍚屾椂鏈夌嫭绔嬬殑UID - if (lastUser.getId() == null || lastUser.getId() == 0 - || lastUser.getId() == userInfo.getId().longValue()) { - // 缁戝畾鍏崇郴 - UserInfo updateUserInfo = new UserInfo(userInfo.getId()); - - if (!StringUtil.isNullOrEmpty(lastUser.getPhone())) { - updateUserInfo.setPhone(lastUser.getPhone()); - userAccountMsgNotificationService.bindingSuccess(userInfo.getId(), - MsgAccountDetailFactory.TYPE_PHONE); - } - if (!StringUtil.isNullOrEmpty(lastUser.getOpenid())) { - updateUserInfo.setOpenid(lastUser.getOpenid()); - updateUserInfo.setTbName(lastUser.getTbName()); - updateUserInfo.setTbPic(lastUser.getTbPic()); - userAccountMsgNotificationService.bindingSuccess(userInfo.getId(), - MsgAccountDetailFactory.TYPE_TB); - } - updateUserInfo.setLastLoginTime(System.currentTimeMillis()); - userInfoService.updateByPrimaryKeySelective(updateUserInfo); - session.removeAttribute("LAST_LOGIN_USER"); - - // 浣垮垎閿�鍏崇郴鐢熸晥 - threeSaleSerivce.effective(userInfo); - - return new LoginResult(LoginResult.TYPE_NORMAL, userInfo); - } else {// 涓や釜璐﹀彿鎷ユ湁涓嶅悓鐨刄ID - // 璇㈤棶鏄惁鎵撻�� - // 鏆傚瓨寰俊璐﹀彿 - // session.setAttribute("WEIXIN_USERINFO", - // userInfo); - session.removeAttribute("LAST_LOGIN_USER"); - LoginResult result = new LoginResult(LoginResult.TYPE_CONNECT, lastUser); - result.setMainUser(userInfo); - result.setLessUser(lastUser); - - // 浣垮垎閿�鍏崇郴鐢熸晥 - threeSaleSerivce.effective(userInfo); - return result; - } - - } 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()); - if (!StringUtil.isNullOrEmpty(lastUser.getPhone())) - userInfo.setPhone(lastUser.getPhone()); - - if (!StringUtil.isNullOrEmpty(lastUser.getOpenid())) { - userInfo.setOpenid(lastUser.getOpenid()); - userInfo.setTbName(lastUser.getTbName()); - userInfo.setTbPic(lastUser.getTbPic()); - } - userInfo.setLastLoginTime(System.currentTimeMillis()); - userInfo.setLoginType(loginType); - userInfo.setLastLoginIp(request.getRemoteHost()); - userInfo.setSystem(SystemInfoUtil.getSystem(acceptData)); - addUser(userInfo); - session.removeAttribute("LAST_LOGIN_USER"); - return new LoginResult(LoginResult.TYPE_NORMAL, userInfo); - } - } - case 3:// 鎵嬫満鍙风爜 - // 鍒ゆ柇鎵嬫満鍙风爜鏄惁琚皝绂� - 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 = getUserInfoByPhone(SystemInfoUtil.getSystem(acceptData.getPlatform(), acceptData.getPackages()), phone); - // 鍒ゆ柇鐢ㄦ埛鏄惁琚垹闄� - if (userInfo != null && userInfo.getState() != null && (userInfo.getState() != UserInfo.STATE_NORMAL)) - userInfo = null; - - if (userInfo == null) {// 鍘熷厛鐨勮处鍙蜂笉瀛樺湪 - userInfo = new UserInfo(); - userInfo.setAppId(appId); - userInfo.setNickName(Constant.systemCommonConfig.getDefaultNickName()); - userInfo.setPortrait(Constant.systemCommonConfig.getDefaultPortrait()); - userInfo.setPhone(phone); - userInfo.setLoginType(loginType); - userInfo.setSystem(SystemInfoUtil.getSystem(acceptData)); - session.setAttribute("LAST_LOGIN_USER", userInfo); - // 璇㈤棶鏄惁缁戝畾寰俊 - return new LoginResult(LoginResult.TYPE_WX, userInfo); - } else {// 鍘熷厛鐨勮处鍙峰瓨鍦� - // 鍒ゅ畾鏄惁缁戝畾浜嗗井淇� - if (StringUtil.isNullOrEmpty(userInfo.getWxUnionId())) {// 娌℃湁缁戝畾寰俊 - userInfo.setLoginType(loginType); - session.setAttribute("LAST_LOGIN_USER", userInfo); - // 闇�瑕佸井淇$櫥褰� - return new LoginResult(LoginResult.TYPE_WX, userInfo); - } else {// 缁戝畾浜嗗井淇� - updateLatestLoginTime(userInfo.getId()); - return new LoginResult(LoginResult.TYPE_NORMAL, userInfo); - } - } - default: - return null; - } - - } else {// 娌℃湁瀹夎寰俊 - 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(rollbackFor = Exception.class) - @Override - 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); - logInfo.put("phone", phone); - if (tbUserInfo != null) - logInfo.put("tbUserInfo", tbUserInfo.getId()); - logInfo.put("loginType", loginType); - LogHelper.lgoinInfo(logInfo.toString()); - - UserInfo userInfo = null; - WeiXinUser weiXinUser = null; - switch (loginType) { - case 1:// 娣樺疂 - if (!StringUtil.isNullOrEmpty(tbUserInfo.getTaoBaoUid())) { - ForbiddenUserIdentifyCode identifyCode = forbiddenUserIdentifyCodeService.listByTypeAndIdentifyCode( - ForbiddenUserIdentifyCodeTypeEnum.taobaoUid, tbUserInfo.getTaoBaoUid()); - if (identifyCode != null && identifyCode.getEffective() != null && identifyCode.getEffective()) - throw new UserAccountException(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC); - } - userInfo = getUserInfoByTaoBaoOpenId(SystemInfoUtil.getSystem(acceptData.getPlatform(), acceptData.getPackages()), tbUserInfo.getOpenid()); - break; - case 2:// 寰俊 - // 閫氳繃Code鎹㈠彇淇℃伅 - WXAccountInfoDTO wxAccount = Constant.getWXAccount(acceptData.getPlatform(), acceptData.getVersion()); - weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code, wxAccount.getAppId(), - wxAccount.getAppSecret()); - if (weiXinUser == null) - throw new UserAccountException(1001, "鏃犳硶鑾峰彇鍒板井淇′釜浜轰俊鎭�"); - - // 鍒ゆ柇鏄惁琚皝绂� - ForbiddenUserIdentifyCode identifyCode = forbiddenUserIdentifyCodeService - .listByTypeAndIdentifyCode(ForbiddenUserIdentifyCodeTypeEnum.phone, phone); - if (identifyCode != null && identifyCode.getEffective() != null && identifyCode.getEffective()) - throw new UserAccountException(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC); - - userInfo = getUserInfoByWXUnionId(SystemInfoUtil.getSystem(acceptData.getPlatform(), acceptData.getPackages()), weiXinUser.getUnionid()); - break; - case 3:// 鎵嬫満鍙风爜 - // 鍒ゆ柇鏄惁琚皝绂� - 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 = getUserInfoByPhone(SystemInfoUtil.getSystem(acceptData.getPlatform(), acceptData.getPackages()), phone); - break; - } - - // 鍒ゆ柇鐢ㄦ埛鏄惁琚垹闄� - if (userInfo != null && userInfo.getState() != null && (userInfo.getState() != UserInfo.STATE_NORMAL)) - userInfo = null; - - if (userInfo != null) { - UserInfo updateUserInfo = new UserInfo(userInfo.getId()); - updateUserInfo.setLastLoginTime(System.currentTimeMillis()); - userInfoService.updateByPrimaryKeySelective(updateUserInfo); - return new LoginResult(LoginResult.TYPE_NORMAL, userInfo); - } else {// 璇㈤棶鏄惁鍒涘缓鐢ㄦ埛 - userInfo = new UserInfo(); - userInfo.setAppId(appId); - switch (loginType) { - case 1:// 娣樺疂 - userInfo.setTbName(tbUserInfo.getNickName()); - userInfo.setTbPic(tbUserInfo.getPortrait()); - userInfo.setNickName(tbUserInfo.getNickName()); - userInfo.setPortrait(tbUserInfo.getPortrait()); - break; - case 2:// 寰俊 - userInfo.setPortrait(weiXinUser.getHeadimgurl()); - userInfo.setNickName(weiXinUser.getNickname()); - userInfo.setWxName(weiXinUser.getNickname()); - userInfo.setWxOpenId(weiXinUser.getOpenid()); - userInfo.setWxUnionId(weiXinUser.getUnionid()); - userInfo.setWxPic(weiXinUser.getHeadimgurl()); - break; - case 3:// 鎵嬫満鍙风爜 - // 榛樿澶村儚涓庢樀绉� - userInfo.setPortrait(Constant.systemCommonConfig.getDefaultPortrait()); - userInfo.setNickName(Constant.systemCommonConfig.getDefaultNickName()); - userInfo.setPhone(phone); - break; - } - userInfo.setSystem(SystemInfoUtil.getSystem(acceptData)); - return new LoginResult(LoginResult.TYPE_CREATE, userInfo); - } - } - - - /** - * 鏍规嵁绯荤粺涓巙nionid瀵绘壘鐢ㄦ埛 - * @param system - * @param unionId - * @return - * @throws UserAccountException - */ - @Override - public UserInfo getUserInfoByWXUnionId(SystemEnum system, String unionId) throws UserAccountException { - if (system == null) - throw new UserAccountException(1, "绯荤粺"); - if (StringUtil.isNullOrEmpty(unionId)) - throw new UserAccountException(2, "unionId涓虹┖"); - - List<UserInfo> list = userInfoService.listBySystemAndWXUnionId(system, unionId); - // 鍓旈櫎琚垹闄ゆ帀鐨勭敤鎴� - for (int i = 0; i < list.size(); i++) { - if (list.get(i).getState() == UserInfo.STATE_NORMAL) { - list.remove(i); - i--; - } - } - if (list.size() > 0) - return list.get(list.size() - 1); - else - return null; - } - - - /** - *鏍规嵁绯荤粺鍜屾窐瀹濈殑Openid瀵绘壘鐢ㄦ埛 - * @param system - * @param openId - * @return - * @throws UserAccountException - */ - public UserInfo getUserInfoByTaoBaoOpenId(SystemEnum system, String openId) throws UserAccountException { - if (system == null) - throw new UserAccountException(1, "绯荤粺涓虹┖"); - if (StringUtil.isNullOrEmpty(openId)) - throw new UserAccountException(2, "openId涓虹┖"); - List<UserInfo> list = userInfoService.listBySystemAndTaoBaoOpenId(system, openId); - - // 鍓旈櫎琚垹闄ゆ帀鐨勭敤鎴� - for (int i = 0; i < list.size(); i++) { - if (list.get(i).getState() != UserInfo.STATE_NORMAL) { - list.remove(i); - i--; - } - } - if (list.size() > 0) - return list.get(list.size() - 1); - else - return null; - - } - - /** - * 鏍规嵁绯荤粺鍜岀數璇濆彿鐮佸鎵剧敤鎴� - * @param system - * @param phone - * @return - * @throws UserAccountException - */ - public UserInfo getUserInfoByPhone(SystemEnum system, String phone) throws UserAccountException { - if (system == null) - throw new UserAccountException(1, "绯荤粺涓虹┖"); - if (StringUtil.isNullOrEmpty(phone)) - throw new UserAccountException(2, "phone涓虹┖"); - List<UserInfo> list = userInfoService.listBySystemAndPhone(system, phone); - - // 鍓旈櫎琚垹闄ゆ帀鐨勭敤鎴� - for (int i = 0; i < list.size(); i++) { - if (list.get(i).getState() != UserInfo.STATE_NORMAL) { - list.remove(i); - i--; - } - } - if (list.size() > 0) - return list.get(list.size() - 1); - else - return null; - - } - - private void updateLatestLoginTime(Long uid) { - UserInfo userInfo = new UserInfo(uid); - userInfo.setLastLoginTime(System.currentTimeMillis()); - userInfoService.updateByPrimaryKeySelective(userInfo); - } - - @Transactional(rollbackFor = Exception.class) - @Override - public void register(UserInfo userInfo) throws UserAccountException { - if (!StringUtil.isNullOrEmpty(userInfo.getPhone())) { - UserInfo user = getUserInfoByPhone(userInfo.getSystem(), userInfo.getPhone()); - if (user != null) - throw new UserAccountException(50001, "鐢佃瘽鍙风爜宸茬粡琚粦瀹�"); - } - - if (!StringUtil.isNullOrEmpty(userInfo.getOpenid())) { - UserInfo user = getUserInfoByTaoBaoOpenId(userInfo.getSystem(), userInfo.getOpenid()); - if (user != null) - throw new UserAccountException(50002, "娣樺疂鍙峰凡缁忚缁戝畾"); - } - - if (!StringUtil.isNullOrEmpty(userInfo.getWxUnionId())) { - UserInfo user = getUserInfoByWXUnionId(userInfo.getSystem(), userInfo.getWxUnionId()); - if (user != null) - throw new UserAccountException(50003, "寰俊鍙峰凡缁忚娉ㄥ唽"); - } - - addUser(userInfo); - } - - @Transactional - @Override - public void addUser(UserInfo user) { - user.setCreatetime(System.currentTimeMillis()); - user.setRank(0); - if (StringUtil.isNullOrEmpty(user.getPortrait())) - user.setPortrait(Constant.systemCommonConfig.getDefaultPortrait()); - userInfoService.createUser(user,user.getSystem()); - // 鏄电О涓虹┖鏃� 榛樿鏄电О - if (StringUtil.isNullOrEmpty(user.getNickName())) { - UserInfo updateUserInfo = new UserInfo(user.getId()); - updateUserInfo.setNickName(Constant.systemCommonConfig.getDefaultNickName() + user.getId()); - userInfoService.updateByPrimaryKeySelective(updateUserInfo); - } - - try { - // 绗竴娆$櫥褰曟椂鍒涘缓鐢ㄦ埛棰濆淇℃伅 - userInfoExtraService.createUserInfoExtra(user.getId()); - } catch (Exception e) { - e.printStackTrace(); - } - - // 娣诲姞璐﹀彿缁戝畾鍘嗗彶 - if (!StringUtil.isNullOrEmpty(user.getPhone())) - userInfoModifyRecordService.addModifyRecord(user.getId(), ModifyTypeEnum.bindPhone, user.getPhone()); - - if (!StringUtil.isNullOrEmpty(user.getWxUnionId())) - userInfoModifyRecordService.addModifyRecord(user.getId(), ModifyTypeEnum.bindWeiXin, user.getWxUnionId()); - } - - @Override - public void updateUserSelective(UserInfo user) { - userInfoService.updateByPrimaryKeySelective(user); - } - - @Override - public void bindPhone(Long uid, String phone) throws UserAccountException { - UserInfo user = userInfoService.selectAvailableByPrimaryKey(uid); - if (user == null) - throw new UserAccountException(4, "鐢ㄦ埛涓嶅瓨鍦�"); - - if (!StringUtil.isNullOrEmpty(user.getPhone())) - throw new UserAccountException(5, "褰撳墠璐﹀彿宸茬粡缁戝畾浜嗘墜鏈哄彿锛岃鍏堣В缁�"); - - UserInfo phoneUser = getUserInfoByPhone(user.getSystem(), phone); - if (phoneUser != null) - throw new UserAccountException(6, "褰撳墠鐢佃瘽鍙风爜宸茬粡琚粦瀹�"); - - UserInfo update = new UserInfo(user.getId()); - update.setPhone(phone); - userInfoService.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 = userInfoService.selectAvailableByPrimaryKey(uid); - if (user == null) - throw new UserAccountException(4, "鐢ㄦ埛涓嶅瓨鍦�"); - - if (StringUtil.isNullOrEmpty(user.getPhone())) - throw new UserAccountException(4, "灏氭湭缁戝畾鐢佃瘽鍙风爜"); - - if (!user.getPhone().equalsIgnoreCase(phone)) - throw new UserAccountException(4, "鍘熺粦瀹氭墜鏈哄彿杈撳叆閿欒"); - - if (StringUtil.isNullOrEmpty(user.getWxUnionId()) && StringUtil.isNullOrEmpty(user.getOpenid())) - throw new UserAccountException(5, "涓嶈兘瑙i櫎缁戝畾"); - - UserInfo updateUserInfo = new UserInfo(uid); - updateUserInfo.setPhone(""); - userInfoService.updateByPrimaryKeySelective(updateUserInfo); - userAccountMsgNotificationService.unBindingSuccess(uid, MsgAccountDetailFactory.TYPE_PHONE); - } - - @Override - public void bindTaoBao(Long uid, String tbOpenId, String tbNickName, String tbPortrait) - throws UserAccountException { - UserInfo user = userInfoService.selectAvailableByPrimaryKey(uid); - if (user == null) - throw new UserAccountException(4, "鐢ㄦ埛涓嶅瓨鍦�"); - - if (!StringUtil.isNullOrEmpty(user.getOpenid()) && !user.getOpenid().equalsIgnoreCase(tbOpenId)) - throw new UserAccountException(5, "褰撳墠璐﹀彿宸茬粡缁戝畾浜嗘窐瀹濓紝璇峰厛瑙g粦"); - - // 缁戝畾鍚屼竴涓窐瀹濆彿 - if (!StringUtil.isNullOrEmpty(user.getOpenid()) && user.getOpenid().equalsIgnoreCase(tbOpenId)) - return; - - UserInfo taoBaoUser = getUserInfoByTaoBaoOpenId(user.getSystem(), tbOpenId); - if (taoBaoUser != null) - throw new UserAccountException(6, "褰撳墠娣樺疂鍙峰凡缁忚缁戝畾"); - UserInfo update = new UserInfo(user.getId()); - update.setOpenid(tbOpenId); - update.setTbName(tbNickName); - update.setTbPic(tbPortrait); - // 濡傛灉娌℃湁缁戝畾寰俊灏变互娣樺疂鐨勫ご鍍忓拰鏄电О浣滀负鐢ㄦ埛鐨勫ご鍍忎笌鏄电О - if (StringUtil.isNullOrEmpty(user.getWxUnionId())) { - update.setNickName(tbNickName); - update.setPortrait(tbPortrait); - } - userInfoService.updateByPrimaryKeySelective(update); - - userAccountMsgNotificationService.bindingSuccess(uid, MsgAccountDetailFactory.TYPE_TB); - } - - @Override - public void unBindTaoBao(Long uid) throws UserAccountException { - UserInfo user = userInfoService.selectAvailableByPrimaryKey(uid); - if (user == null) - throw new UserAccountException(4, "鐢ㄦ埛涓嶅瓨鍦�"); - if (StringUtil.isNullOrEmpty(user.getOpenid())) - throw new UserAccountException(5, "褰撳墠璐﹀彿灏氭湭缁戝畾娣樺疂"); - - if (StringUtil.isNullOrEmpty(user.getWxUnionId()) && StringUtil.isNullOrEmpty(user.getPhone())) - throw new UserAccountException(5, "涓嶈兘鎺ヨЕ缁戝畾"); - - UserInfo update = new UserInfo(user.getId()); - update.setOpenid(""); - update.setTbName(""); - update.setTbPic(""); - // 鍒ゆ柇鏄惁鏈夊井淇$粦瀹� - if (StringUtil.isNullOrEmpty(user.getWxUnionId())) { - update.setNickName(Constant.systemCommonConfig.getDefaultNickName() + user.getId()); - update.setPortrait(Constant.systemCommonConfig.getDefaultPortrait()); - } - - userInfoService.updateByPrimaryKeySelective(update); - - userExtraTaoBaoInfoService.unBindUid(uid); - - userAccountMsgNotificationService.unBindingSuccess(uid, MsgAccountDetailFactory.TYPE_TB); - } - - @Override - public void changeWXBind(AcceptData acceptData, Long uid, String code) throws UserAccountException { - UserInfo user = userInfoService.selectAvailableByPrimaryKey(uid); - if (user == null) - throw new UserAccountException(4, "鐢ㄦ埛涓嶅瓨鍦�"); - 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())) - throw new UserAccountException(12, "浜诧紝璇风櫥褰曞叾瀹冨井淇″彿杩涜鏇存崲缁戝畾"); - - UserInfo newUser = getUserInfoByWXUnionId(user.getSystem(), weiXinUser.getUnionid()); - if (newUser != null) - 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()); - - // 灏嗛粯璁ゆ樀绉版浛鎹㈡垚寰俊鏄电О - 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()); - } - } - - // 灏嗛粯璁ゅご鍍忔浛鎹㈡垚寰俊澶村儚 - String defaultPortrait = Constant.systemCommonConfig.getDefaultPortrait(); - if (!StringUtil.isNullOrEmpty(weiXinUser.getHeadimgurl()) && !StringUtil.isNullOrEmpty(defaultPortrait) - && defaultPortrait.equals(user.getPortrait())) { - updateUserInfo.setPortrait(weiXinUser.getHeadimgurl()); - } - - userInfoService.updateByPrimaryKeySelective(updateUserInfo); - - userAccountMsgNotificationService.changeBindingSuccess(uid, MsgAccountDetailFactory.TYPE_WX); - - userInfoModifyRecordService.addModifyRecord(uid, ModifyTypeEnum.bindWeiXin, weiXinUser.getUnionid()); - } - - @Override - public void clearUserPortrait(Long uid) { - if (uid == null) - return; - UserInfo user = userInfoService.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) - for (COSObjectSummary object : list.getObjectSummaries()) { - if (user.getWxPic() != null && !user.getWxPic().contains(object.getKey())) { - COSManager.getInstance().deleteFile(object.getKey()); - } - } - } - - @Override - public String repairPortrait(Long uid) { - if (uid == null) - return null; - UserInfo user = userInfoService.selectAvailableByPrimaryKey(uid); - if (user == null) - return null; - String prefix = String.format("/portrait/wx/%s_", user.getWxUnionId()); - ObjectListing list = COSManager.getInstance().getObjectList(prefix, null, 30); - // 鏌ヨ澶村儚鏂囦欢鏄惁杩樺瓨鍦� - boolean exist = false; - if (list != null && list.getObjectSummaries() != null) - for (COSObjectSummary object : list.getObjectSummaries()) { - if (user.getPortrait().contains(object.getKey())) { - exist = true; - break; - } - } - - if (!exist && list.getObjectSummaries() != null && list.getObjectSummaries().size() > 0) { - COSObjectSummary object = list.getObjectSummaries().get(list.getObjectSummaries().size() - 1); - String portrait = String.format("https://%s.file.myqcloud.com/%s", object.getBucketName(), object.getKey()); - if (!StringUtil.isNullOrEmpty(portrait)) { - UserInfo updateUser = new UserInfo(uid); - updateUser.setPortrait(portrait); - userInfoService.updateByPrimaryKeySelective(updateUser); - return portrait; - } - } - - return user.getPortrait(); - } - - @Transactional(rollbackFor = Exception.class) - @Override - public UserInfo loginPhone(ProxyIP ipInfo, AcceptData acceptData, 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) && "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); - 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); - } - - // 娓呯┖闄愬埗 - redisManager.clearSMSFrequencyLimit(phone, SMSHistory.TYPE_LOGIN); - // 娓呯悊娆℃暟 - String key = RedisKeyEnum.getRedisKey(RedisKeyEnum.SMSLoginCount, phone); - redisManager.removeCommonString(key); - - // 閲囩敤redis浜嬪姟闃叉涓�涓墜鏈哄彿澶氭娉ㄥ唽闂 - String watchKey = StringUtil.Md5("REGISTER:" + phone); - Jedis jedis = redisManager.getJedis(); - 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 = userInfoService.getEffectiveUserInfoByPhone(phone, SystemInfoUtil.getSystem(acceptData.getPlatform(), acceptData.getPackages())); - if (userInfo != null) { - // 鏇存柊璐︽埛鐧诲綍淇℃伅 - updateLonginInfo(userInfo, loginType, ipInfo); - } 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); - userInfo.setSystem(SystemInfoUtil.getSystem(acceptData)); - // 鍒涘缓鐢ㄦ埛 - 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(rollbackFor = Exception.class) - @Override - public UserInfo loginPhoneNew(ProxyIP ipInfo, AcceptData acceptData, 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) && "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); - 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); - } - // 娓呯┖闄愬埗 - redisManager.clearSMSFrequencyLimit(phone, SMSHistory.TYPE_LOGIN); - // 娓呯悊娆℃暟 - String key = RedisKeyEnum.getRedisKey(RedisKeyEnum.SMSLoginCount, phone); - redisManager.removeCommonString(key); - - // 閲囩敤redis浜嬪姟闃叉涓�涓墜鏈哄彿澶氭娉ㄥ唽闂 - String watchKey = StringUtil.Md5("REGISTER:" + phone); - Jedis jedis = redisManager.getJedis(); - 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 = userInfoService.getEffectiveUserInfoByPhone(phone, SystemInfoUtil.getSystem(acceptData.getPlatform(), acceptData.getPackages())); - if (userInfo != null) { - // 鏇存柊璐︽埛鐧诲綍淇℃伅 - updateLonginInfo(userInfo, loginType, ipInfo); - } else { - // 缁戝畾寰俊 - String keylogin = RedisKeyEnum.getRedisKey(RedisKeyEnum.emptyKey, StringUtil.Md5("phoneLogin:" + phone)); - redisManager.cacheCommonString(keylogin, phone, 60 * 20); - throw new UserAccountException(102, keylogin); - } - 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 loginWinXin(ProxyIP ipInfo, AcceptData acceptData, 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鎹㈠彇淇℃伅 - 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 = redisManager.getJedis(); - 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 = userInfoService.getEffectiveUserInfoByWXUnionId(weiXinUser.getUnionid(), SystemInfoUtil.getSystem(acceptData.getPlatform(), acceptData.getPackages())); - // 鐩存帴鐢ㄧ殑寰俊鐧诲綍 - if (userInfo != null) { - LogHelper.test("寰俊unionID瀛樺湪:" + weiXinUser.getUnionid()); - // 鏇存柊璐︽埛鐧诲綍淇℃伅 - updateLonginInfo(userInfo, loginType,ipInfo ); - // 鍒犻櫎閭�璇峰垎浜浘 - 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(ipInfo.getIp()); - userInfo.setState(UserInfo.STATE_NORMAL); - userInfo.setSystem(SystemInfoUtil.getSystem(acceptData)); - 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(ProxyIP ipInfo, 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 = userInfoService.getEffectiveUserInfoByWXUnionId(weiXinUser.getUnionid(), SystemInfoUtil.getSystem(acceptData)); - 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, ipInfo); - Long uid = userInfo.getId(); - ThreadUtil.run(new Runnable() { - public void run() { - // 鍒犻櫎閭�璇峰垎浜浘 - spreadUserImgService.deleteImgUrl(uid); - } - }); - return userInfo; - } - - /** - * 鏇存柊璐︽埛鐧诲綍淇℃伅 - * - * @param userInfo - * @param loginType - * @param ipInfo - */ - private void updateLonginInfo(UserInfo userInfo, int loginType, ProxyIP ipInfo) { - // 璁剧疆鐧诲綍鏃堕棿涓庣櫥褰曠被鍨� - UserInfo updateUserInfo = new UserInfo(userInfo.getId()); - updateUserInfo.setLastLoginTime(System.currentTimeMillis()); - updateUserInfo.setLoginType(loginType); - updateUserInfo.setLastLoginIp(ipInfo.getIp()); - userInfoService.updateByPrimaryKeySelective(updateUserInfo); - } - - @Override - public void bindPhoneNew(Long uid, String phone) throws UserAccountException { - UserInfo user = userInfoService.selectAvailableByPrimaryKey(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 = userInfoService.getEffectiveUserInfoByPhone(phone,user.getSystem()); - if (phoneUser != null) { - throw new UserAccountException(2, "鍙风爜宸茬粡琚崰鐢�"); - } - - // 鏇存柊鐢佃瘽鍙风爜 - UserInfo update = new UserInfo(user.getId()); - update.setPhone(phone); - userInfoService.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(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, "寰俊甯愬彿鎺堟潈澶辫触"); - } - - 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 = userInfoService.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 = userInfoService.getEffectiveUserInfoByWXUnionId(wxUnionId, user.getSystem()); - if (newUser != null) { - throw new UserAccountException(4, "璇ュ井淇″彿宸茶鍏朵粬甯愬彿缁戝畾"); - } - } else if (wxUnionId.equalsIgnoreCase(wxUnionIdExist)) { - throw new UserAccountException(3, "寰俊甯愬彿涓�鑷存棤闇�鏇存崲"); - } - - 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()); - - // 灏嗛粯璁ゆ樀绉版浛鎹㈡垚寰俊鏄电О - 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()); - } - } - - // 灏嗛粯璁ゅご鍍忔浛鎹㈡垚寰俊澶村儚 - 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); - } - userInfoService.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(ProxyIP ipinfo, AcceptData acceptData, String phone, String key) - 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, "寰俊鎺堟潈澶辨晥锛岃浣跨敤寰俊閲嶆柊鐧诲綍"); - - SystemEnum system = SystemInfoUtil.getSystem(acceptData); - - UserInfo userInfo = userInfoService.getEffectiveUserInfoByWXUnionId(weiXinUser.getUnionid(), system); - // 鐩存帴鐢ㄧ殑寰俊鐧诲綍 - 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 = userInfoService.getEffectiveUserInfoByPhone(phone, system); - 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 = userInfoService.selectAvailableByPrimaryKey(phoneUser.getId()); - } else { - // 鍒涘缓鏂拌处鎴� - userInfo = new UserInfo(); - userInfo.setPhone(phone); - userInfo.setPortrait(portrait); - userInfo.setAppId(null); - 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(ipinfo.getIp()); - userInfo.setState(UserInfo.STATE_NORMAL); - userInfo.setSystem(system); - 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 UserInfo bindWXToLogin(ProxyIP ipInfo, AcceptData acceptData, String code, String appId, String key) throws UserAccountException { - // 鏃ュ織淇℃伅 - JSONObject logInfo = new JSONObject(); - logInfo.put("appId", appId); - logInfo.put("code", code); - logInfo.put("loginType", 2); - LogHelper.lgoinInfo(logInfo.toString()); - - SystemEnum system = SystemInfoUtil.getSystem(acceptData); - - // 閫氳繃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); - } - - String phone = redisManager.getCommonString(key); - if (StringUtil.isNullOrEmpty(phone)) - throw new UserAccountException(1, "鎵嬫満鍙风櫥褰曞け鏁堬紝璇蜂娇鍙戦�佺煭淇$櫥褰�"); - - // 閲囩敤redis浜嬪姟闃叉涓�涓井淇″彿澶氭娉ㄥ唽闂 - String watchKey = StringUtil.Md5("REGISTER:" + weiXinUser.getUnionid()); - Jedis jedis = redisManager.getJedis(); - 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 = userInfoService.getEffectiveUserInfoByWXUnionId(weiXinUser.getUnionid(), system); - // 鐩存帴鐢ㄧ殑寰俊鐧诲綍 - if (userInfo != null) { - // 缁戝畾寰俊 - if (!StringUtil.isNullOrEmpty(userInfo.getPhone()) && !phone.equals(userInfo.getPhone().trim())) { - throw new UserAccountException(1, "璇ュ井淇″凡琚粦瀹�"); - } - // 鍒犻櫎閭�璇峰垎浜浘 - //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.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(ipInfo.getIp()); - userInfo.setState(UserInfo.STATE_NORMAL); - userInfo.setSystem(system); - 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()); - } - }); - } - return userInfo; - } - } catch (Exception e) { - e.printStackTrace(); - } finally { - jedis.del(watchKey); - jedis.unwatch(); - jedis.close(); - } - throw new UserAccountException(10, "璇风◢鍚庡啀璇�"); - } - - @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); - } - -} +package com.yeshi.fanli.service.impl.user; + +import java.io.InputStream; +import java.util.List; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; + +import com.yeshi.fanli.entity.SystemEnum; +import com.yeshi.fanli.entity.config.SMSConfig; +import com.yeshi.fanli.entity.system.BusinessSystem; +import com.yeshi.fanli.entity.system.ConfigKeyEnum; +import com.yeshi.fanli.service.inter.config.ConfigService; +import com.yeshi.fanli.service.inter.config.SystemConfigService; +import com.yeshi.fanli.util.*; +import com.yeshi.fanli.vo.taobao.TaoBaoUser; +import com.yeshi.fanli.vo.user.QQUserInfoVO; +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.entity.ProxyIP; +import org.yeshi.utils.entity.wx.WeiXinUser; +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.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.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.exception.user.ForbiddenUserIdentifyCodeException; +import com.yeshi.fanli.exception.user.UserAccountException; +import com.yeshi.fanli.log.LogHelper; +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.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.factory.msg.MsgAccountDetailFactory; +import com.yeshi.fanli.util.wx.MyWXLoginUtil; + +import net.sf.json.JSONObject; +import org.yeshi.utils.wx.WXAppLoginUtil; +import redis.clients.jedis.Jedis; +import redis.clients.jedis.Transaction; + +@Service +public class UserAccountServiceImpl implements UserAccountService { + + @Resource + private RedisManager redisManager; + + @Resource + private UserInfoService userInfoService; + + @Resource + private BindingAccountService bindingAccountService; + + @Resource + private ThreeSaleSerivce threeSaleSerivce; + + @Resource + private SpreadUserImgService spreadUserImgService; + + @Resource + private UserAccountMsgNotificationService userAccountMsgNotificationService; + + @Resource + private UserExtraTaoBaoInfoService userExtraTaoBaoInfoService; + + @Resource + private ForbiddenUserIdentifyCodeService forbiddenUserIdentifyCodeService; + + @Resource + private UserInfoExtraService userInfoExtraService; + + @Resource + private UserAccountBindingHistoryService userAccountBindingHistoryService; + + @Resource + private UserInfoDeleteRecordService userInfoDeleteRecordService; + + + @Resource + private ConfigService configService; + + @Lazy + @Resource + private UserInfoModifyRecordService userInfoModifyRecordService; + + + @Resource + private SystemConfigService systemConfigService; + + @Transactional(rollbackFor = Exception.class) + @Override + 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); + logInfo.put("code", code); + logInfo.put("phone", phone); + if (tbUserInfo != null) + logInfo.put("tbUserInfo", tbUserInfo.getId()); + logInfo.put("loginType", loginType); + LogHelper.lgoinInfo(logInfo.toString()); + + HttpSession session = request.getSession(); + if (first != null && first == true) { + session.removeAttribute("LAST_LOGIN_USER"); + } + + String defaultPortrait = userInfoService.getDefaultPortrait(acceptData.getSystem()); + + // 浼氳瘽涓笂娆$櫥褰曠殑鐢ㄦ埛 + if (wxinstall) {// 瀹夎浜嗗井淇$殑鐘舵�� + UserInfo lastUser = (UserInfo) session.getAttribute("LAST_LOGIN_USER"); + UserInfo userInfo = null; + WeiXinUser weiXinUser = null; + switch (loginType) { + case 1:// 娣樺疂 + // 鍒ゆ柇娣樺疂鏄惁琚皝绂� + if (!StringUtil.isNullOrEmpty(tbUserInfo.getTaoBaoUid())) { + ForbiddenUserIdentifyCode identifyCode = forbiddenUserIdentifyCodeService.listByTypeAndIdentifyCode( + ForbiddenUserIdentifyCodeTypeEnum.taobaoUid, tbUserInfo.getTaoBaoUid()); + if (identifyCode != null && identifyCode.getEffective() != null && identifyCode.getEffective()) + throw new UserAccountException(Constant.CODE_FORBIDDEN_USER, + Constant.FORBIDDEN_USER_REASON_DESC); + } + userInfo = getUserInfoByTaoBaoOpenId(SystemInfoUtil.getSystem(acceptData.getPlatform(), acceptData.getPackages()), tbUserInfo.getOpenid()); + // 鍒ゆ柇鐢ㄦ埛鏄惁琚垹闄� + if (userInfo != null && userInfo.getState() != null && (userInfo.getState() != UserInfo.STATE_NORMAL)) + userInfo = null; + if (userInfo == null) {// 鍘熷厛鐨勮处鍙蜂笉瀛樺湪 + userInfo = new UserInfo(); + userInfo.setAppId(appId); + userInfo.setTbName(tbUserInfo.getTbName()); + userInfo.setOpenid(tbUserInfo.getOpenid()); + userInfo.setTbPic(tbUserInfo.getTbPic()); + userInfo.setNickName(tbUserInfo.getNickName()); + userInfo.setPortrait(tbUserInfo.getPortrait()); + userInfo.setLoginType(loginType); + userInfo.setSystem(SystemInfoUtil.getSystem(acceptData)); + session.setAttribute("LAST_LOGIN_USER", userInfo); + // 闇�瑕佸井淇$櫥褰� + return new LoginResult(LoginResult.TYPE_WX, userInfo); + } else {// 鍘熷厛鐨勮处鍙峰瓨鍦� + // 鍒ゅ畾鏄惁缁戝畾浜嗗井淇� + if (StringUtil.isNullOrEmpty(userInfo.getWxUnionId())) {// 娌℃湁缁戝畾寰俊 + userInfo.setLoginType(loginType); + session.setAttribute("LAST_LOGIN_USER", userInfo); + // 闇�瑕佸井淇$櫥褰� + return new LoginResult(LoginResult.TYPE_WX, userInfo); + } else {// 缁戝畾浜嗗井淇� + updateLatestLoginTime(userInfo.getId()); + return new LoginResult(LoginResult.TYPE_NORMAL, userInfo); + } + } + + case 2:// 寰俊 + // 閫氳繃Code鎹㈠彇淇℃伅 + WXAccountInfoDTO wxAccount = Constant.getWXAccount(acceptData.getPlatform(), acceptData.getVersion()); + weiXinUser = MyWXLoginUtil.getWeiXinUserWithSavePortrait(code, wxAccount.getAppId(), + wxAccount.getAppSecret()); + if (weiXinUser == null) + throw new UserAccountException(1001, "鏃犳硶鑾峰彇鍒板井淇′釜浜轰俊鎭�"); + 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 = getUserInfoByWXUnionId(SystemInfoUtil.getSystem(acceptData.getPlatform(), acceptData.getPackages()), weiXinUser.getUnionid()); + // 鍒ゆ柇鐢ㄦ埛鏄惁琚垹闄� + if (userInfo != null && userInfo.getState() != null && (userInfo.getState() != UserInfo.STATE_NORMAL)) + userInfo = null; + // 鐩存帴鐢ㄧ殑寰俊鐧诲綍 + if (lastUser == null) { + if (userInfo != null) { + // 浣垮垎閿�鍏崇郴鐢熸晥 + threeSaleSerivce.effective(userInfo); + // 鏇存柊澶村儚涓庢樀绉� + UserInfo updateUserInfo = new UserInfo(userInfo.getId()); + updateUserInfo.setNickName(weiXinUser.getNickname()); + if (!StringUtil.isNullOrEmpty(weiXinUser.getHeadimgurl())) + updateUserInfo.setPortrait(weiXinUser.getHeadimgurl()); + updateUserInfo.setWxPic(weiXinUser.getHeadimgurl()); + updateUserInfo.setWxName(weiXinUser.getNickname()); + // 璁剧疆鐧诲綍鏃堕棿涓庣櫥褰曠被鍨� + updateUserInfo.setLastLoginTime(System.currentTimeMillis()); + updateUserInfo.setLoginType(loginType); + updateUserInfo.setLastLoginIp(request.getRemoteHost()); + // 鏇存柊openId + updateUserInfo.setOpenid(weiXinUser.getOpenid()); + userInfoService.updateByPrimaryKeySelective(updateUserInfo); + // 鍒犻櫎閭�璇峰浘鐗� + spreadUserImgService.deleteImgUrl(userInfo.getId()); + return new LoginResult(LoginResult.TYPE_NORMAL, userInfo); + } + 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.setSystem(SystemInfoUtil.getSystem(acceptData)); + addUser(userInfo); + + return new LoginResult(LoginResult.TYPE_NORMAL, userInfo); + } else { + // 鏈細璇濋噰鐢ㄨ繃鍏朵粬璐﹀彿鐧诲綍 + if (userInfo != null)// 寰俊璐﹀彿瀛樺湪 + { + if (lastUser.getLoginType() == 2) { + session.removeAttribute("LAST_LOGIN_USER"); + throw new UserAccountException(1002, "寰俊涓嶈兘缁戝畾寰俊"); + } + if (lastUser.getLoginType() == 1 && !StringUtil.isNullOrEmpty(userInfo.getOpenid())) { + session.removeAttribute("LAST_LOGIN_USER"); + throw new UserAccountException(1003, "璇ュ井淇″凡缁忕粦瀹氫簡娣樺疂璐﹀彿锛岃鍏堣В缁�"); + } + if (lastUser.getLoginType() == 3 && !StringUtil.isNullOrEmpty(userInfo.getPhone())) { + session.removeAttribute("LAST_LOGIN_USER"); + throw new UserAccountException(1003, "璇ュ井淇″凡缁忕粦瀹氫簡鐢佃瘽鍙风爜锛岃鍏堣В缁�"); + } + + // 鍒犻櫎閭�璇峰浘鐗� + spreadUserImgService.deleteImgUrl(userInfo.getId()); + // 杩樻病鏈夌粦瀹氬悓绫诲瀷鐨勮处鍙� + + // 涓や釜璐﹀彿娌℃湁鍚屾椂鏈夌嫭绔嬬殑UID + if (lastUser.getId() == null || lastUser.getId() == 0 + || lastUser.getId() == userInfo.getId().longValue()) { + // 缁戝畾鍏崇郴 + UserInfo updateUserInfo = new UserInfo(userInfo.getId()); + + if (!StringUtil.isNullOrEmpty(lastUser.getPhone())) { + updateUserInfo.setPhone(lastUser.getPhone()); + userAccountMsgNotificationService.bindingSuccess(userInfo.getId(), + MsgAccountDetailFactory.TYPE_PHONE); + } + if (!StringUtil.isNullOrEmpty(lastUser.getOpenid())) { + updateUserInfo.setOpenid(lastUser.getOpenid()); + updateUserInfo.setTbName(lastUser.getTbName()); + updateUserInfo.setTbPic(lastUser.getTbPic()); + userAccountMsgNotificationService.bindingSuccess(userInfo.getId(), + MsgAccountDetailFactory.TYPE_TB); + } + updateUserInfo.setLastLoginTime(System.currentTimeMillis()); + userInfoService.updateByPrimaryKeySelective(updateUserInfo); + session.removeAttribute("LAST_LOGIN_USER"); + + // 浣垮垎閿�鍏崇郴鐢熸晥 + threeSaleSerivce.effective(userInfo); + + return new LoginResult(LoginResult.TYPE_NORMAL, userInfo); + } else {// 涓や釜璐﹀彿鎷ユ湁涓嶅悓鐨刄ID + // 璇㈤棶鏄惁鎵撻�� + // 鏆傚瓨寰俊璐﹀彿 + // session.setAttribute("WEIXIN_USERINFO", + // userInfo); + session.removeAttribute("LAST_LOGIN_USER"); + LoginResult result = new LoginResult(LoginResult.TYPE_CONNECT, lastUser); + result.setMainUser(userInfo); + result.setLessUser(lastUser); + + // 浣垮垎閿�鍏崇郴鐢熸晥 + threeSaleSerivce.effective(userInfo); + return result; + } + + } 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()); + if (!StringUtil.isNullOrEmpty(lastUser.getPhone())) + userInfo.setPhone(lastUser.getPhone()); + + if (!StringUtil.isNullOrEmpty(lastUser.getOpenid())) { + userInfo.setOpenid(lastUser.getOpenid()); + userInfo.setTbName(lastUser.getTbName()); + userInfo.setTbPic(lastUser.getTbPic()); + } + userInfo.setLastLoginTime(System.currentTimeMillis()); + userInfo.setLoginType(loginType); + userInfo.setLastLoginIp(request.getRemoteHost()); + userInfo.setSystem(SystemInfoUtil.getSystem(acceptData)); + addUser(userInfo); + session.removeAttribute("LAST_LOGIN_USER"); + return new LoginResult(LoginResult.TYPE_NORMAL, userInfo); + } + } + case 3:// 鎵嬫満鍙风爜 + // 鍒ゆ柇鎵嬫満鍙风爜鏄惁琚皝绂� + 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 = getUserInfoByPhone(SystemInfoUtil.getSystem(acceptData.getPlatform(), acceptData.getPackages()), phone); + // 鍒ゆ柇鐢ㄦ埛鏄惁琚垹闄� + if (userInfo != null && userInfo.getState() != null && (userInfo.getState() != UserInfo.STATE_NORMAL)) + userInfo = null; + + if (userInfo == null) {// 鍘熷厛鐨勮处鍙蜂笉瀛樺湪 + userInfo = new UserInfo(); + userInfo.setAppId(appId); + userInfo.setNickName(null); + userInfo.setPortrait(defaultPortrait); + userInfo.setPhone(phone); + userInfo.setLoginType(loginType); + userInfo.setSystem(SystemInfoUtil.getSystem(acceptData)); + session.setAttribute("LAST_LOGIN_USER", userInfo); + // 璇㈤棶鏄惁缁戝畾寰俊 + return new LoginResult(LoginResult.TYPE_WX, userInfo); + } else {// 鍘熷厛鐨勮处鍙峰瓨鍦� + // 鍒ゅ畾鏄惁缁戝畾浜嗗井淇� + if (StringUtil.isNullOrEmpty(userInfo.getWxUnionId())) {// 娌℃湁缁戝畾寰俊 + userInfo.setLoginType(loginType); + session.setAttribute("LAST_LOGIN_USER", userInfo); + // 闇�瑕佸井淇$櫥褰� + return new LoginResult(LoginResult.TYPE_WX, userInfo); + } else {// 缁戝畾浜嗗井淇� + updateLatestLoginTime(userInfo.getId()); + return new LoginResult(LoginResult.TYPE_NORMAL, userInfo); + } + } + default: + return null; + } + + } else {// 娌℃湁瀹夎寰俊 + 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(rollbackFor = Exception.class) + @Override + 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); + logInfo.put("phone", phone); + if (tbUserInfo != null) + logInfo.put("tbUserInfo", tbUserInfo.getId()); + logInfo.put("loginType", loginType); + LogHelper.lgoinInfo(logInfo.toString()); + + String defaultPortrait = userInfoService.getDefaultPortrait(acceptData.getSystem()); + + UserInfo userInfo = null; + WeiXinUser weiXinUser = null; + switch (loginType) { + case 1:// 娣樺疂 + if (!StringUtil.isNullOrEmpty(tbUserInfo.getTaoBaoUid())) { + ForbiddenUserIdentifyCode identifyCode = forbiddenUserIdentifyCodeService.listByTypeAndIdentifyCode( + ForbiddenUserIdentifyCodeTypeEnum.taobaoUid, tbUserInfo.getTaoBaoUid()); + if (identifyCode != null && identifyCode.getEffective() != null && identifyCode.getEffective()) + throw new UserAccountException(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC); + } + userInfo = getUserInfoByTaoBaoOpenId(SystemInfoUtil.getSystem(acceptData.getPlatform(), acceptData.getPackages()), tbUserInfo.getOpenid()); + break; + case 2:// 寰俊 + // 閫氳繃Code鎹㈠彇淇℃伅 + WXAccountInfoDTO wxAccount = Constant.getWXAccount(acceptData.getPlatform(), acceptData.getVersion()); + weiXinUser = MyWXLoginUtil.getWeiXinUserWithSavePortrait(code, wxAccount.getAppId(), + wxAccount.getAppSecret()); + if (weiXinUser == null) + throw new UserAccountException(1001, "鏃犳硶鑾峰彇鍒板井淇′釜浜轰俊鎭�"); + + // 鍒ゆ柇鏄惁琚皝绂� + ForbiddenUserIdentifyCode identifyCode = forbiddenUserIdentifyCodeService + .listByTypeAndIdentifyCode(ForbiddenUserIdentifyCodeTypeEnum.phone, phone); + if (identifyCode != null && identifyCode.getEffective() != null && identifyCode.getEffective()) + throw new UserAccountException(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC); + + userInfo = getUserInfoByWXUnionId(SystemInfoUtil.getSystem(acceptData.getPlatform(), acceptData.getPackages()), weiXinUser.getUnionid()); + break; + case 3:// 鎵嬫満鍙风爜 + // 鍒ゆ柇鏄惁琚皝绂� + 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 = getUserInfoByPhone(SystemInfoUtil.getSystem(acceptData.getPlatform(), acceptData.getPackages()), phone); + break; + } + + // 鍒ゆ柇鐢ㄦ埛鏄惁琚垹闄� + if (userInfo != null && userInfo.getState() != null && (userInfo.getState() != UserInfo.STATE_NORMAL)) + userInfo = null; + + if (userInfo != null) { + UserInfo updateUserInfo = new UserInfo(userInfo.getId()); + updateUserInfo.setLastLoginTime(System.currentTimeMillis()); + userInfoService.updateByPrimaryKeySelective(updateUserInfo); + return new LoginResult(LoginResult.TYPE_NORMAL, userInfo); + } else {// 璇㈤棶鏄惁鍒涘缓鐢ㄦ埛 + userInfo = new UserInfo(); + userInfo.setAppId(appId); + switch (loginType) { + case 1:// 娣樺疂 + userInfo.setTbName(tbUserInfo.getNickName()); + userInfo.setTbPic(tbUserInfo.getPortrait()); + userInfo.setNickName(tbUserInfo.getNickName()); + userInfo.setPortrait(tbUserInfo.getPortrait()); + break; + case 2:// 寰俊 + userInfo.setPortrait(weiXinUser.getHeadimgurl()); + userInfo.setNickName(weiXinUser.getNickname()); + userInfo.setWxName(weiXinUser.getNickname()); + userInfo.setWxOpenId(weiXinUser.getOpenid()); + userInfo.setWxUnionId(weiXinUser.getUnionid()); + userInfo.setWxPic(weiXinUser.getHeadimgurl()); + break; + case 3:// 鎵嬫満鍙风爜 + // 榛樿澶村儚涓庢樀绉� + userInfo.setPortrait(defaultPortrait); + userInfo.setNickName(null); + userInfo.setPhone(phone); + break; + } + userInfo.setSystem(SystemInfoUtil.getSystem(acceptData)); + return new LoginResult(LoginResult.TYPE_CREATE, userInfo); + } + } + + + /** + * 鏍规嵁绯荤粺涓巙nionid瀵绘壘鐢ㄦ埛 + * + * @param system + * @param unionId + * @return + * @throws UserAccountException + */ + @Override + public UserInfo getUserInfoByWXUnionId(SystemEnum system, String unionId) throws UserAccountException { + if (system == null) + throw new UserAccountException(1, "绯荤粺"); + if (StringUtil.isNullOrEmpty(unionId)) + throw new UserAccountException(2, "unionId涓虹┖"); + + List<UserInfo> list = userInfoService.listBySystemAndWXUnionId(system, unionId); + // 鍓旈櫎琚垹闄ゆ帀鐨勭敤鎴� + for (int i = 0; i < list.size(); i++) { + if (list.get(i).getState() == UserInfo.STATE_NORMAL) { + list.remove(i); + i--; + } + } + if (list.size() > 0) + return list.get(list.size() - 1); + else + return null; + } + + + /** + * 鏍规嵁绯荤粺鍜屾窐瀹濈殑Openid瀵绘壘鐢ㄦ埛 + * + * @param system + * @param openId + * @return + * @throws UserAccountException + */ + public UserInfo getUserInfoByTaoBaoOpenId(SystemEnum system, String openId) throws UserAccountException { + if (system == null) + throw new UserAccountException(1, "绯荤粺涓虹┖"); + if (StringUtil.isNullOrEmpty(openId)) + throw new UserAccountException(2, "openId涓虹┖"); + List<UserInfo> list = userInfoService.listBySystemAndTaoBaoOpenId(system, openId); + + // 鍓旈櫎琚垹闄ゆ帀鐨勭敤鎴� + for (int i = 0; i < list.size(); i++) { + if (list.get(i).getState() != UserInfo.STATE_NORMAL) { + list.remove(i); + i--; + } + } + if (list.size() > 0) + return list.get(list.size() - 1); + else + return null; + + } + + /** + * 鏍规嵁绯荤粺鍜岀數璇濆彿鐮佸鎵剧敤鎴� + * + * @param system + * @param phone + * @return + * @throws UserAccountException + */ + public UserInfo getUserInfoByPhone(SystemEnum system, String phone) throws UserAccountException { + if (system == null) + throw new UserAccountException(1, "绯荤粺涓虹┖"); + if (StringUtil.isNullOrEmpty(phone)) + throw new UserAccountException(2, "phone涓虹┖"); + List<UserInfo> list = userInfoService.listBySystemAndPhone(system, phone); + + // 鍓旈櫎琚垹闄ゆ帀鐨勭敤鎴� + for (int i = 0; i < list.size(); i++) { + if (list.get(i).getState() != UserInfo.STATE_NORMAL) { + list.remove(i); + i--; + } + } + if (list.size() > 0) + return list.get(list.size() - 1); + else + return null; + + } + + private void updateLatestLoginTime(Long uid) { + UserInfo userInfo = new UserInfo(uid); + userInfo.setLastLoginTime(System.currentTimeMillis()); + userInfoService.updateByPrimaryKeySelective(userInfo); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void register(UserInfo userInfo) throws UserAccountException { + if (!StringUtil.isNullOrEmpty(userInfo.getPhone())) { + UserInfo user = getUserInfoByPhone(userInfo.getSystem(), userInfo.getPhone()); + if (user != null) + throw new UserAccountException(50001, "鐢佃瘽鍙风爜宸茬粡琚粦瀹�"); + } + + if (!StringUtil.isNullOrEmpty(userInfo.getOpenid())) { + UserInfo user = getUserInfoByTaoBaoOpenId(userInfo.getSystem(), userInfo.getOpenid()); + if (user != null) + throw new UserAccountException(50002, "娣樺疂鍙峰凡缁忚缁戝畾"); + } + + if (!StringUtil.isNullOrEmpty(userInfo.getWxUnionId())) { + UserInfo user = getUserInfoByWXUnionId(userInfo.getSystem(), userInfo.getWxUnionId()); + if (user != null) + throw new UserAccountException(50003, "寰俊鍙峰凡缁忚娉ㄥ唽"); + } + + addUser(userInfo); + } + + @Transactional + @Override + public void addUser(UserInfo user) { + user.setCreatetime(System.currentTimeMillis()); + user.setRank(0); + if (StringUtil.isNullOrEmpty(user.getPortrait())) { + String defaultPortrait = userInfoService.getDefaultPortrait(user.getSystem()); + user.setPortrait(defaultPortrait); + } + userInfoService.createUser(user, user.getSystem()); + // 鏄电О涓虹┖鏃� 榛樿鏄电О + if (StringUtil.isNullOrEmpty(user.getNickName())) { + UserInfo updateUserInfo = new UserInfo(user.getId()); + String defaultNickName = userInfoService.getDefaultNickName(user.getSystem(), user.getId()); + updateUserInfo.setNickName(defaultNickName); + userInfoService.updateByPrimaryKeySelective(updateUserInfo); + } + + try { + // 绗竴娆$櫥褰曟椂鍒涘缓鐢ㄦ埛棰濆淇℃伅 + userInfoExtraService.createUserInfoExtra(user.getId()); + } catch (Exception e) { + e.printStackTrace(); + } + + // 娣诲姞璐﹀彿缁戝畾鍘嗗彶 + if (!StringUtil.isNullOrEmpty(user.getPhone())) + userInfoModifyRecordService.addModifyRecord(user.getId(), ModifyTypeEnum.bindPhone, user.getPhone()); + + if (!StringUtil.isNullOrEmpty(user.getWxUnionId())) + userInfoModifyRecordService.addModifyRecord(user.getId(), ModifyTypeEnum.bindWeiXin, user.getWxUnionId()); + } + + @Override + public void updateUserSelective(UserInfo user) { + userInfoService.updateByPrimaryKeySelective(user); + } + + @Override + public void bindPhone(Long uid, String phone) throws UserAccountException { + UserInfo user = userInfoService.selectAvailableByPrimaryKey(uid); + if (user == null) + throw new UserAccountException(4, "鐢ㄦ埛涓嶅瓨鍦�"); + + if (!StringUtil.isNullOrEmpty(user.getPhone())) + throw new UserAccountException(5, "褰撳墠璐﹀彿宸茬粡缁戝畾浜嗘墜鏈哄彿锛岃鍏堣В缁�"); + + UserInfo phoneUser = getUserInfoByPhone(user.getSystem(), phone); + if (phoneUser != null) + throw new UserAccountException(6, "褰撳墠鐢佃瘽鍙风爜宸茬粡琚粦瀹�"); + + UserInfo update = new UserInfo(user.getId()); + update.setPhone(phone); + userInfoService.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 = userInfoService.selectAvailableByPrimaryKey(uid); + if (user == null) + throw new UserAccountException(4, "鐢ㄦ埛涓嶅瓨鍦�"); + + if (StringUtil.isNullOrEmpty(user.getPhone())) + throw new UserAccountException(4, "灏氭湭缁戝畾鐢佃瘽鍙风爜"); + + if (!user.getPhone().equalsIgnoreCase(phone)) + throw new UserAccountException(4, "鍘熺粦瀹氭墜鏈哄彿杈撳叆閿欒"); + + if (StringUtil.isNullOrEmpty(user.getWxUnionId()) && StringUtil.isNullOrEmpty(user.getOpenid())) + throw new UserAccountException(5, "涓嶈兘瑙i櫎缁戝畾"); + + UserInfo updateUserInfo = new UserInfo(uid); + updateUserInfo.setPhone(""); + userInfoService.updateByPrimaryKeySelective(updateUserInfo); + userAccountMsgNotificationService.unBindingSuccess(uid, MsgAccountDetailFactory.TYPE_PHONE); + } + + @Override + public void bindTaoBao(Long uid, String tbOpenId, String tbNickName, String tbPortrait) + throws UserAccountException { + UserInfo user = userInfoService.selectAvailableByPrimaryKey(uid); + if (user == null) + throw new UserAccountException(4, "鐢ㄦ埛涓嶅瓨鍦�"); + + if (!StringUtil.isNullOrEmpty(user.getOpenid()) && !user.getOpenid().equalsIgnoreCase(tbOpenId)) + throw new UserAccountException(5, "褰撳墠璐﹀彿宸茬粡缁戝畾浜嗘窐瀹濓紝璇峰厛瑙g粦"); + + // 缁戝畾鍚屼竴涓窐瀹濆彿 + if (!StringUtil.isNullOrEmpty(user.getOpenid()) && user.getOpenid().equalsIgnoreCase(tbOpenId)) + return; + + UserInfo taoBaoUser = getUserInfoByTaoBaoOpenId(user.getSystem(), tbOpenId); + if (taoBaoUser != null) + throw new UserAccountException(6, "褰撳墠娣樺疂鍙峰凡缁忚缁戝畾"); + UserInfo update = new UserInfo(user.getId()); + update.setOpenid(tbOpenId); + update.setTbName(tbNickName); + update.setTbPic(tbPortrait); + // 濡傛灉娌℃湁缁戝畾寰俊灏变互娣樺疂鐨勫ご鍍忓拰鏄电О浣滀负鐢ㄦ埛鐨勫ご鍍忎笌鏄电О + if (StringUtil.isNullOrEmpty(user.getWxUnionId())) { + update.setNickName(tbNickName); + update.setPortrait(tbPortrait); + } + userInfoService.updateByPrimaryKeySelective(update); + + userAccountMsgNotificationService.bindingSuccess(uid, MsgAccountDetailFactory.TYPE_TB); + } + + @Override + public void unBindTaoBao(Long uid) throws UserAccountException { + UserInfo user = userInfoService.selectAvailableByPrimaryKey(uid); + if (user == null) + throw new UserAccountException(4, "鐢ㄦ埛涓嶅瓨鍦�"); + if (StringUtil.isNullOrEmpty(user.getOpenid())) + throw new UserAccountException(5, "褰撳墠璐﹀彿灏氭湭缁戝畾娣樺疂"); + + if (StringUtil.isNullOrEmpty(user.getWxUnionId()) && StringUtil.isNullOrEmpty(user.getPhone())) + throw new UserAccountException(5, "涓嶈兘鎺ヨЕ缁戝畾"); + + UserInfo update = new UserInfo(user.getId()); + update.setOpenid(""); + update.setTbName(""); + update.setTbPic(""); + // 鍒ゆ柇鏄惁鏈夊井淇$粦瀹� + if (StringUtil.isNullOrEmpty(user.getWxUnionId())) { + update.setNickName(userInfoService.getDefaultNickName(user.getSystem(), user.getId())); + update.setPortrait(userInfoService.getDefaultPortrait(user.getSystem())); + } + + userInfoService.updateByPrimaryKeySelective(update); + + userExtraTaoBaoInfoService.unBindUid(uid); + + userAccountMsgNotificationService.unBindingSuccess(uid, MsgAccountDetailFactory.TYPE_TB); + } + + @Override + public void changeWXBind(AcceptData acceptData, Long uid, String code) throws UserAccountException { + UserInfo user = userInfoService.selectAvailableByPrimaryKey(uid); + if (user == null) + throw new UserAccountException(4, "鐢ㄦ埛涓嶅瓨鍦�"); + WXAccountInfoDTO wxAccount = Constant.getWXAccount(acceptData.getPlatform(), acceptData.getVersion()); + WeiXinUser weiXinUser = MyWXLoginUtil.getWeiXinUserWithSavePortrait(code, wxAccount.getAppId(), + wxAccount.getAppSecret()); + if (weiXinUser == null) + throw new UserAccountException(10, "鑾峰彇寰俊鐢ㄦ埛淇℃伅澶辫触"); + if (weiXinUser.getUnionid().equalsIgnoreCase(user.getWxUnionId())) + throw new UserAccountException(12, "浜诧紝璇风櫥褰曞叾瀹冨井淇″彿杩涜鏇存崲缁戝畾"); + + UserInfo newUser = getUserInfoByWXUnionId(user.getSystem(), weiXinUser.getUnionid()); + if (newUser != null) + 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()); + + // 灏嗛粯璁ゆ樀绉版浛鎹㈡垚寰俊鏄电О + if (!StringUtil.isNullOrEmpty(weiXinUser.getNickname())) { + String defaultNickName = userInfoService.getDefaultNickName(user.getSystem(), uid); + if ((defaultNickName.equals(user.getNickName()) || "鏉挎牀蹇渷".equals(user.getNickName()))) { + updateUserInfo.setNickName(weiXinUser.getNickname()); + } + } + + // 灏嗛粯璁ゅご鍍忔浛鎹㈡垚寰俊澶村儚 + String defaultPortrait = userInfoService.getDefaultPortrait(user.getSystem()); + if (!StringUtil.isNullOrEmpty(weiXinUser.getHeadimgurl()) && !StringUtil.isNullOrEmpty(defaultPortrait) + && defaultPortrait.equals(user.getPortrait())) { + updateUserInfo.setPortrait(weiXinUser.getHeadimgurl()); + } + + userInfoService.updateByPrimaryKeySelective(updateUserInfo); + + userAccountMsgNotificationService.changeBindingSuccess(uid, MsgAccountDetailFactory.TYPE_WX); + + userInfoModifyRecordService.addModifyRecord(uid, ModifyTypeEnum.bindWeiXin, weiXinUser.getUnionid()); + } + + @Override + public void clearUserPortrait(Long uid) { + if (uid == null) + return; + UserInfo user = userInfoService.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) + for (COSObjectSummary object : list.getObjectSummaries()) { + if (user.getWxPic() != null && !user.getWxPic().contains(object.getKey())) { + COSManager.getInstance().deleteFile(object.getKey()); + } + } + } + + @Override + public String repairPortrait(Long uid) { + if (uid == null) + return null; + UserInfo user = userInfoService.selectAvailableByPrimaryKey(uid); + if (user == null) + return null; + String prefix = String.format("/portrait/wx/%s_", user.getWxUnionId()); + ObjectListing list = COSManager.getInstance().getObjectList(prefix, null, 30); + // 鏌ヨ澶村儚鏂囦欢鏄惁杩樺瓨鍦� + boolean exist = false; + if (list != null && list.getObjectSummaries() != null) + for (COSObjectSummary object : list.getObjectSummaries()) { + if (user.getPortrait().contains(object.getKey())) { + exist = true; + break; + } + } + + if (!exist && list.getObjectSummaries() != null && list.getObjectSummaries().size() > 0) { + COSObjectSummary object = list.getObjectSummaries().get(list.getObjectSummaries().size() - 1); + String portrait = String.format("https://%s.file.myqcloud.com/%s", object.getBucketName(), object.getKey()); + if (!StringUtil.isNullOrEmpty(portrait)) { + UserInfo updateUser = new UserInfo(uid); + updateUser.setPortrait(portrait); + userInfoService.updateByPrimaryKeySelective(updateUser); + return portrait; + } + } + return user.getPortrait(); + } + + @Override + public String getMobile(String vcode, String phone, String aliAccessToken, SystemEnum system, int vcodeType) throws UserAccountException { + if (!StringUtil.isNullOrEmpty(aliAccessToken)) { + + + String mobile = AliyunOneKeyLoginUtil.getMobile(aliAccessToken, ""); + if (StringUtil.isNullOrEmpty(mobile)) { + throw new UserAccountException(1, "鎵嬫満鍙疯幏鍙栧け璐�"); + } + return mobile; + } else { + // 绌洪娓呯悊 + if (phone == null || phone.trim().length() == 0) { + throw new UserAccountException(1, "璇疯緭鍏ユ墜鏈哄彿鐮�"); + } + phone = phone.replaceAll(" ", ""); + boolean isDemo = false; + //鏌ヨ涓婄嚎娴嬭瘯鐨勫彿鐮佷笌楠岃瘉鐮� + String demoLogin = configService.getValue(ConfigKeyEnum.demoLoginUser, system); + if (!StringUtil.isNullOrEmpty(demoLogin)) { + String demoPhone = demoLogin.split("#")[0]; + String demoCode = demoLogin.split("#")[1]; + if (phone.equalsIgnoreCase(demoPhone) && demoCode.equalsIgnoreCase(vcode)) { + isDemo = true; + } + } + // 鑻规灉搴旂敤鍟嗗簵涓婄嚎娴嬭瘯鍙风爜 + if (!isDemo) { + if (StringUtil.isNullOrEmpty(vcode)) { + throw new UserAccountException(1, "璇疯緭鍏ラ獙璇佺爜"); + } + + String oldVcode = redisManager.getSMSVCode(phone, vcodeType); + LogHelper.test("----------------------鐧诲綍楠岃瘉鐮侊細 " + oldVcode); + if (!Constant.IS_TEST) + if (StringUtil.isNullOrEmpty(oldVcode) || !oldVcode.equalsIgnoreCase(vcode)) { + throw new UserAccountException(1, "楠岃瘉鐮侀敊璇紝閲嶆柊杈撳叆"); + } else {// 楠岃瘉鐮佽緭鍏ユ纭� + redisManager.clearSMSVCode(phone, vcodeType); + } + } + return phone; + } + + } + + + @Transactional(rollbackFor = Exception.class) + @Override + public UserInfo loginPhone(ProxyIP ipInfo, int loginType, String vcode, String phone, String aliAccessToken, BusinessSystem businessSystem) + throws UserAccountException { + String mobile = getMobile(vcode, phone, aliAccessToken, businessSystem.getSystem(), SMSHistory.TYPE_LOGIN); + JSONObject logInfo = new JSONObject(); + logInfo.put("appId", businessSystem.getAppid()); + logInfo.put("phone", mobile); + logInfo.put("loginType", loginType); + LogHelper.lgoinInfo(logInfo.toString()); + + // 鍒ゆ柇鎵嬫満鍙风爜鏄惁琚皝绂� + ForbiddenUserIdentifyCode identifyCode1 = forbiddenUserIdentifyCodeService + .listByTypeAndIdentifyCode(ForbiddenUserIdentifyCodeTypeEnum.phone, mobile); + if (identifyCode1 != null && identifyCode1.getEffective() != null && identifyCode1.getEffective()) { + throw new UserAccountException(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC); + } + + // 娓呯┖闄愬埗 + redisManager.clearSMSFrequencyLimit(mobile, SMSHistory.TYPE_LOGIN); + // 娓呯悊娆℃暟 + String key = RedisKeyEnum.getRedisKey(RedisKeyEnum.SMSLoginCount, mobile); + redisManager.removeCommonString(key); + + // 閲囩敤redis浜嬪姟闃叉涓�涓墜鏈哄彿澶氭娉ㄥ唽闂 + String watchKey = StringUtil.Md5("REGISTER:" + mobile); + Jedis jedis = redisManager.getJedis(); + 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 = userInfoService.getEffectiveUserInfoByPhone(mobile, businessSystem.getSystem()); + if (userInfo != null) { + // 鏇存柊璐︽埛鐧诲綍淇℃伅 + updateLonginInfo(userInfo, loginType, ipInfo); + } else { + userInfo = new UserInfo(); + userInfo.setAppId(businessSystem.getAppid()); + userInfo.setPortrait(null); + userInfo.setPhone(mobile); + userInfo.setLoginType(loginType); + userInfo.setState(UserInfo.STATE_NORMAL); + userInfo.setSystem(businessSystem.getSystem()); + // 鍒涘缓鐢ㄦ埛 + addUser(userInfo); + + try { + // 绗竴娆$櫥褰曟椂鍒涘缓鐢ㄦ埛棰濆淇℃伅 + userInfoExtraService.createUserInfoExtra(userInfo.getId()); + } catch (Exception e) { + e.printStackTrace(); + } + userInfoModifyRecordService.addModifyRecord(userInfo.getId(), ModifyTypeEnum.bindPhone, mobile); + } + return userInfo; + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + jedis.del(watchKey); + jedis.unwatch(); + jedis.close(); + } + throw new UserAccountException(10, "璇风◢鍚庡啀璇�"); + } + + @Override + public UserInfo loginTB(ProxyIP ipInfo, TaoBaoUser taoBaoUser, BusinessSystem businessSystem) throws UserAccountException { + + if (StringUtil.isNullOrEmpty(taoBaoUser.getUserid())) + throw new UserAccountException(1, "娣樺疂鎺堟潈淇℃伅涓嶅畬鏁�"); + + UserInfo userInfo = userInfoService.getEffectiveUserInfoByOpenId(taoBaoUser.getOpenId(), businessSystem.getSystem()); + if (userInfo != null) { + // 鏇存柊璐︽埛鐧诲綍淇℃伅 + updateLonginInfo(userInfo, 1, ipInfo); + } else { + userInfo = new UserInfo(); + userInfo.setNickName(taoBaoUser.getNick()); + userInfo.setPortrait(taoBaoUser.getAvatarUrl()); + userInfo.setAppId(businessSystem.getAppid()); + userInfo.setTaoBaoUid(taoBaoUser.getUserid()); + userInfo.setOpenid(taoBaoUser.getOpenId()); + userInfo.setLoginType(1); + userInfo.setState(UserInfo.STATE_NORMAL); + userInfo.setSystem(businessSystem.getSystem()); + // 鍒涘缓鐢ㄦ埛 + addUser(userInfo); + try { + // 绗竴娆$櫥褰曟椂鍒涘缓鐢ㄦ埛棰濆淇℃伅 + userInfoExtraService.createUserInfoExtra(userInfo.getId()); + } catch (Exception e) { + e.printStackTrace(); + } + } + return userInfo; + } + + + @Transactional(rollbackFor = Exception.class) + @Override + public UserInfo loginPhoneNew(ProxyIP ipInfo, AcceptData acceptData, 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) && "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); + 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); + } + // 娓呯┖闄愬埗 + redisManager.clearSMSFrequencyLimit(phone, SMSHistory.TYPE_LOGIN); + // 娓呯悊娆℃暟 + String key = RedisKeyEnum.getRedisKey(RedisKeyEnum.SMSLoginCount, phone); + redisManager.removeCommonString(key); + + // 閲囩敤redis浜嬪姟闃叉涓�涓墜鏈哄彿澶氭娉ㄥ唽闂 + String watchKey = StringUtil.Md5("REGISTER:" + phone); + Jedis jedis = redisManager.getJedis(); + 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 = userInfoService.getEffectiveUserInfoByPhone(phone, SystemInfoUtil.getSystem(acceptData.getPlatform(), acceptData.getPackages())); + if (userInfo != null) { + // 鏇存柊璐︽埛鐧诲綍淇℃伅 + updateLonginInfo(userInfo, loginType, ipInfo); + } else { + // 缁戝畾寰俊 + String keylogin = RedisKeyEnum.getRedisKey(RedisKeyEnum.emptyKey, StringUtil.Md5("phoneLogin:" + phone)); + redisManager.cacheCommonString(keylogin, phone, 60 * 20); + throw new UserAccountException(102, keylogin); + } + 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 loginWeiXin(ProxyIP ipInfo, int loginType, String code, + BusinessSystem businessSystem) throws UserAccountException { + // 鏃ュ織淇℃伅 + JSONObject logInfo = new JSONObject(); + logInfo.put("appId", businessSystem.getAppid()); + logInfo.put("code", code); + logInfo.put("loginType", loginType); + LogHelper.lgoinInfo(logInfo.toString()); + + // 閫氳繃Code鎹㈠彇淇℃伅 + WeiXinUser weiXinUser = WXAppLoginUtil.getWeiXinUser(code, businessSystem.getWxAppId(), businessSystem.getWxAppSecret()); + 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 = redisManager.getJedis(); + 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 = userInfoService.getEffectiveUserInfoByWXUnionId(weiXinUser.getUnionid(), businessSystem.getSystem()); + // 鐩存帴鐢ㄧ殑寰俊鐧诲綍 + if (userInfo != null) { + LogHelper.test("寰俊unionID瀛樺湪:" + weiXinUser.getUnionid()); + // 鏇存柊璐︽埛鐧诲綍淇℃伅 + updateLonginInfo(userInfo, loginType, ipInfo); + // 鍒犻櫎閭�璇峰垎浜浘 + 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 = userInfoService.getDefaultPortrait(businessSystem.getSystem()); + + // 鍒涘缓鏂拌处鎴� + userInfo = new UserInfo(); + userInfo.setPortrait(portrait); + userInfo.setAppId(businessSystem.getAppid()); + 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(ipInfo.getIp()); + userInfo.setState(UserInfo.STATE_NORMAL); + userInfo.setSystem(businessSystem.getSystem()); + 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(ProxyIP ipInfo, int loginType, String wxCode, + BusinessSystem businessSystem) throws UserAccountException { + // 鏃ュ織淇℃伅 + JSONObject logInfo = new JSONObject(); + logInfo.put("appId", businessSystem.getAppid()); + logInfo.put("wxCode", wxCode); + logInfo.put("loginType", loginType); + LogHelper.lgoinInfo(logInfo.toString()); + + // 閫氳繃Code鎹㈠彇淇℃伅 + WeiXinUser weiXinUser = WXAppLoginUtil.getWeiXinUser(wxCode, businessSystem.getWxAppId(), businessSystem.getWxAppSecret()); + 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 = userInfoService.getEffectiveUserInfoByWXUnionId(weiXinUser.getUnionid(), businessSystem.getSystem()); + if (userInfo == null) { + String key = RedisKeyEnum.getRedisKey(RedisKeyEnum.emptyKey, + "WXLogin#" + StringUtil.Md5(weiXinUser.getUnionid())); + redisManager.cacheCommonString(key, JsonUtil.getSimpleGson().toJson(weiXinUser), 60 * 20); + throw new UserAccountException(UserAccountException.CODE_NEED_BIND_PHONE, key); + } + // 鏇存柊璐︽埛鐧诲綍淇℃伅 + updateLonginInfo(userInfo, loginType, ipInfo); + Long uid = userInfo.getId(); + ThreadUtil.run(new Runnable() { + public void run() { + // 鍒犻櫎閭�璇峰垎浜浘 + spreadUserImgService.deleteImgUrl(uid); + } + }); + return userInfo; + } + + @Override + public UserInfo loginQQ(ProxyIP ipInfo, int loginType, QQUserInfoVO qqUserInfo, BusinessSystem businessSystem) throws UserAccountException { + // 閫氳繃Code鎹㈠彇淇℃伅 + if (qqUserInfo == null) { + throw new UserAccountException(1, "QQ淇℃伅涓虹┖"); + } + + UserInfo userInfo = userInfoService.getEffectiveUserInfoByQQOpenId(qqUserInfo.getOpenid(), businessSystem.getSystem()); + if (userInfo == null) { + String key = RedisKeyEnum.getRedisKey(RedisKeyEnum.emptyKey, + "QQLogin#" + StringUtil.Md5(qqUserInfo.getOpenid())); + redisManager.cacheCommonString(key, JsonUtil.getSimpleGson().toJson(qqUserInfo), 60 * 20); + throw new UserAccountException(UserAccountException.CODE_NEED_BIND_PHONE, key); + } + // 鏇存柊璐︽埛鐧诲綍淇℃伅 + updateLonginInfo(userInfo, loginType, ipInfo); + Long uid = userInfo.getId(); + ThreadUtil.run(new Runnable() { + public void run() { + // 鍒犻櫎閭�璇峰垎浜浘 + spreadUserImgService.deleteImgUrl(uid); + } + }); + return userInfo; + } + + /** + * 鏇存柊璐︽埛鐧诲綍淇℃伅 + * + * @param userInfo + * @param loginType + * @param ipInfo + */ + private void updateLonginInfo(UserInfo userInfo, int loginType, ProxyIP ipInfo) { + // 璁剧疆鐧诲綍鏃堕棿涓庣櫥褰曠被鍨� + UserInfo updateUserInfo = new UserInfo(userInfo.getId()); + updateUserInfo.setLastLoginTime(System.currentTimeMillis()); + updateUserInfo.setLoginType(loginType); + updateUserInfo.setLastLoginIp(ipInfo.getIp()); + userInfoService.updateByPrimaryKeySelective(updateUserInfo); + } + + @Override + public void bindPhoneNew(Long uid, String phone) throws UserAccountException { + UserInfo user = userInfoService.selectAvailableByPrimaryKey(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 = userInfoService.getEffectiveUserInfoByPhone(phone, user.getSystem()); + if (phoneUser != null) { + throw new UserAccountException(2, "鍙风爜宸茬粡琚崰鐢�"); + } + + // 鏇存柊鐢佃瘽鍙风爜 + UserInfo update = new UserInfo(user.getId()); + update.setPhone(phone); + userInfoService.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(BusinessSystem system, Long uid, String code) throws UserAccountException { + WeiXinUser weiXinUser = WXAppLoginUtil.getWeiXinUser(code, system.getWxAppId(), system.getWxAppSecret()); + if (weiXinUser == null) { + throw new UserAccountException(2, "寰俊甯愬彿鎺堟潈澶辫触"); + } + + 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 = userInfoService.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 = userInfoService.getEffectiveUserInfoByWXUnionId(wxUnionId, user.getSystem()); + if (newUser != null) { + throw new UserAccountException(4, "璇ュ井淇″彿宸茶鍏朵粬甯愬彿缁戝畾"); + } + } else if (wxUnionId.equalsIgnoreCase(wxUnionIdExist)) { + throw new UserAccountException(3, "寰俊甯愬彿涓�鑷存棤闇�鏇存崲"); + } + + 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()); + + // 灏嗛粯璁ゆ樀绉版浛鎹㈡垚寰俊鏄电О + String defaultNickName = userInfoService.getDefaultNickName(user.getSystem(), user.getId()); + if (!StringUtil.isNullOrEmpty(defaultNickName) && !StringUtil.isNullOrEmpty(weiXinUser.getNickname())) { + defaultNickName = defaultNickName + uid; + if ((defaultNickName.equals(user.getNickName()) || "鏉挎牀蹇渷".equals(user.getNickName()))) { + updateUserInfo.setNickName(weiXinUser.getNickname()); + } + } + + // 灏嗛粯璁ゅご鍍忔浛鎹㈡垚寰俊澶村儚 + String defaultPortrait = userInfoService.getDefaultPortrait(user.getSystem()); + 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); + } + userInfoService.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 void bindQQ(Long uid, QQUserInfoVO qqUser) throws UserAccountException { + UserInfo user = userInfoService.selectAvailableByPrimaryKey(uid); + if (user == null) { + throw new UserAccountException(1, "鐢ㄦ埛涓嶅瓨鍦�"); + } + + if (qqUser == null || StringUtil.isNullOrEmpty(qqUser.getOpenid())) { + throw new UserAccountException(2, "qq鐢ㄦ埛淇℃伅涓虹┖"); + } + + + String qqOpenIdExist = user.getQqOpenId(); + + if (StringUtil.isNullOrEmpty(qqOpenIdExist)) { + UserInfo newUser = userInfoService.getEffectiveUserInfoByQQOpenId(qqUser.getOpenid(), user.getSystem()); + if (newUser != null) { + throw new UserAccountException(4, "璇Q鍙峰凡琚叾浠栧笎鍙风粦瀹�"); + } + } else if (qqUser.getOpenid().equalsIgnoreCase(qqOpenIdExist)) { + throw new UserAccountException(3, "QQ甯愬彿涓�鑷存棤闇�鏇存崲"); + } + + if (StringUtil.isNullOrEmpty(user.getPhone())) { + throw new UserAccountException(5, "璇ュ笎鍙锋病鏈夌粦瀹氭墜鏈哄彿鐮侊紝闇�缁戝畾鎵嬫満鍙风爜鎵嶈兘瀹屾垚QQ鏇存崲"); + } + + UserInfo updateUserInfo = new UserInfo(uid); + updateUserInfo.setQqNickName(qqUser.getNickname()); + updateUserInfo.setQqOpenId(qqUser.getOpenid()); + + // 灏嗛粯璁ゆ樀绉版浛鎹㈡垚寰俊鏄电О + String defaultNickName = userInfoService.getDefaultNickName(user.getSystem(), user.getId()); + if (!StringUtil.isNullOrEmpty(defaultNickName) && !StringUtil.isNullOrEmpty(qqUser.getNickname())) { + defaultNickName = defaultNickName + uid; + if ((defaultNickName.equals(user.getNickName()) || "鏉挎牀蹇渷".equals(user.getNickName()))) { + updateUserInfo.setNickName(qqUser.getNickname()); + } + } + + // 灏嗛粯璁ゅご鍍忔浛鎹㈡垚QQ澶村儚 + String defaultPortrait = userInfoService.getDefaultPortrait(user.getSystem()); + if (!StringUtil.isNullOrEmpty(qqUser.getFigureurl_2()) && !StringUtil.isNullOrEmpty(defaultPortrait) + && defaultPortrait.equals(user.getPortrait())) { + String headimgurl = qqUser.getFigureurl_2(); + updateUserInfo.setPortrait(headimgurl); + } + userInfoService.updateByPrimaryKeySelective(updateUserInfo); + + // 鍔犲叆缁戝畾璁板綍 + UserAccountBindingHistory history = new UserAccountBindingHistory(); + history.setContent(qqUser.getOpenid()); + history.setType(UserAccountBindingHistory.TYPE_QQ); + history.setUid(uid); + + // 涔嬪墠宸茬粡缁戝畾鐢佃瘽鍙风爜 + if (!StringUtil.isNullOrEmpty(user.getQqOpenId())) + history.setFirst(false); + else + history.setFirst(true); + userAccountBindingHistoryService.addUserAccountBindingHistory(history); + + userAccountMsgNotificationService.bindingSuccess(uid, MsgAccountDetailFactory.TYPE_QQ); + + userInfoModifyRecordService.addModifyRecord(uid, ModifyTypeEnum.bindQQ, user.getQqOpenId()); + } + + @Override + public UserInfo bindPhoneToLogin(ProxyIP ipinfo, AcceptData acceptData, String phone, String key) + 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); + + int loginType = 0; + String loginName = ""; + if (key.contains("QQLogin#")) { + //qq鐧诲綍 + loginType = 4; + loginName = "QQ"; + } else { + //寰俊鐧诲綍 + loginType = 2; + loginName = "寰俊"; + } + + + String value = redisManager.getCommonString(key); + if (StringUtil.isNullOrEmpty(value)) + throw new UserAccountException(1, String.format("%s鎺堟潈澶辨晥锛岃浣跨敤%s閲嶆柊鐧诲綍", loginName, loginName)); + + SystemEnum system = SystemInfoUtil.getSystem(acceptData); + String thirdPortrait; + String thirdCode; + String thirdNickName; + QQUserInfoVO qqUser = null; + WeiXinUser weiXinUser = null; + if (loginType == 4) { + qqUser = JsonUtil.getSimpleGson().fromJson(value, QQUserInfoVO.class); + + if (qqUser == null) + throw new UserAccountException(1, "QQ鎺堟潈澶辨晥锛岃浣跨敤QQ閲嶆柊鎺堟潈鐧诲綍"); + + thirdPortrait = qqUser.getFigureurl_2(); + thirdCode = qqUser.getOpenid(); + thirdNickName = qqUser.getNickname(); + + UserInfo userInfo = userInfoService.getEffectiveUserInfoByQQOpenId(qqUser.getOpenid(), system); + // 鐩存帴鐢ㄧ殑QQ鐧诲綍 + if (userInfo != null) + throw new UserAccountException(10, "璇Q鍙峰凡琚崰鐢�"); + + } else { + weiXinUser = JsonUtil.getSimpleGson().fromJson(value, WeiXinUser.class); + if (weiXinUser == null) + throw new UserAccountException(1, "涓夋柟鎺堟潈澶辨晥锛岃浣跨敤涓夋柟閲嶆柊鎺堟潈鐧诲綍"); + + thirdPortrait = weiXinUser.getHeadimgurl(); + thirdCode = weiXinUser.getUnionid(); + thirdNickName = weiXinUser.getNickname(); + + UserInfo userInfo = userInfoService.getEffectiveUserInfoByWXUnionId(weiXinUser.getUnionid(), system); + // 鐩存帴鐢ㄧ殑寰俊鐧诲綍 + if (userInfo != null) + throw new UserAccountException(10, "璇ュ井淇″彿宸茶鍗犵敤"); + } + + String portrait = null; + if (!StringUtil.isNullOrEmpty(thirdPortrait)) { + InputStream asInputStream = HttpUtil.getAsInputStream(thirdPortrait); + if (asInputStream != null) { + String path = ""; + if (loginType == 4) { + path = String.format(FilePathEnum.userQQPortrait.getPath() + "%s_%s.jpg", thirdCode, + System.currentTimeMillis() + ""); + } else { + path = String.format(FilePathEnum.userWXPortrait.getPath() + "%s_%s.jpg", thirdCode, + System.currentTimeMillis() + ""); + } + + FileUploadResult result = COSManager.getInstance().uploadFile(asInputStream, path); + if (result != null && !StringUtil.isNullOrEmpty(result.getUrl())) + portrait = result.getUrl(); + } else { + portrait = thirdPortrait; + } + } + + if (StringUtil.isNullOrEmpty(portrait)) { + portrait = userInfoService.getDefaultPortrait(system); + } + // 鏄惁闇�瑕佸垱寤烘柊璐︽埛 + UserInfo phoneUser = userInfoService.getEffectiveUserInfoByPhone(phone, system); + UserInfo userInfo = null; + if (phoneUser != null) { + // 缁戝畾寰俊 + if (weiXinUser != null) { + if (StringUtil.isNullOrEmpty(phoneUser.getWxUnionId())) { + try { + bindWeiXin(phoneUser.getId(), weiXinUser); + } catch (Exception e) { + throw new UserAccountException(1, "寰俊缁戝畾澶辫触"); + } + } else { + throw new UserAccountException(1, "璇ュ井淇″凡琚粦瀹�"); + } + } + if (qqUser != null) { + if (StringUtil.isNullOrEmpty(phoneUser.getQqOpenId())) { + try { + bindQQ(phoneUser.getId(), qqUser); + } catch (Exception e) { + throw new UserAccountException(1, "QQ缁戝畾澶辫触"); + } + } else { + throw new UserAccountException(1, "璇Q宸茶缁戝畾"); + } + } + + userInfo = userInfoService.selectAvailableByPrimaryKey(phoneUser.getId()); + } else { + // 鍒涘缓鏂拌处鎴� + userInfo = new UserInfo(); + userInfo.setPhone(phone); + userInfo.setPortrait(portrait); + userInfo.setAppId(null); + if (weiXinUser != null) { + userInfo.setNickName(weiXinUser.getNickname()); + userInfo.setWxName(weiXinUser.getNickname()); + userInfo.setWxOpenId(weiXinUser.getOpenid()); + userInfo.setWxUnionId(weiXinUser.getUnionid()); + userInfo.setWxPic(weiXinUser.getHeadimgurl()); + userInfo.setLoginType(2); + } + + if (qqUser != null) { + userInfo.setQqOpenId(qqUser.getOpenid()); + userInfo.setQqNickName(qqUser.getNickname()); + userInfo.setLoginType(4); + } + userInfo.setLastLoginTime(System.currentTimeMillis()); + userInfo.setLastLoginIp(ipinfo.getIp()); + userInfo.setState(UserInfo.STATE_NORMAL); + userInfo.setSystem(system); + addUser(userInfo); + } + + Long uid = userInfo.getId(); + final WeiXinUser tempWeiXinUser = weiXinUser; + final QQUserInfoVO tempQQUser = qqUser; + 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); + if (tempWeiXinUser != null) + userInfoModifyRecordService.addModifyRecord(uid, ModifyTypeEnum.bindWeiXin, tempWeiXinUser.getUnionid()); + if (tempQQUser != null) + userInfoModifyRecordService.addModifyRecord(uid, ModifyTypeEnum.bindQQ, tempQQUser.getOpenid()); + } + }); + // 鍒犻櫎缂撳瓨 + redisManager.removeCommonString(key); + + return userInfo; + } + + + @Override + public UserInfo bindWXToLogin(ProxyIP ipInfo, AcceptData acceptData, String code, String appId, String key) throws + UserAccountException { + // 鏃ュ織淇℃伅 + JSONObject logInfo = new JSONObject(); + logInfo.put("appId", appId); + logInfo.put("code", code); + logInfo.put("loginType", 2); + LogHelper.lgoinInfo(logInfo.toString()); + + SystemEnum system = SystemInfoUtil.getSystem(acceptData); + + // 閫氳繃Code鎹㈠彇淇℃伅 + WXAccountInfoDTO wxAccount = Constant.getWXAccount(acceptData.getPlatform(), acceptData.getVersion()); + WeiXinUser weiXinUser = WXAppLoginUtil.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); + } + + String phone = redisManager.getCommonString(key); + if (StringUtil.isNullOrEmpty(phone)) + throw new UserAccountException(1, "鎵嬫満鍙风櫥褰曞け鏁堬紝璇蜂娇鍙戦�佺煭淇$櫥褰�"); + + // 閲囩敤redis浜嬪姟闃叉涓�涓井淇″彿澶氭娉ㄥ唽闂 + String watchKey = StringUtil.Md5("REGISTER:" + weiXinUser.getUnionid()); + Jedis jedis = redisManager.getJedis(); + 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 = userInfoService.getEffectiveUserInfoByWXUnionId(weiXinUser.getUnionid(), system); + // 鐩存帴鐢ㄧ殑寰俊鐧诲綍 + if (userInfo != null) { + // 缁戝畾寰俊 + if (!StringUtil.isNullOrEmpty(userInfo.getPhone()) && !phone.equals(userInfo.getPhone().trim())) { + throw new UserAccountException(1, "璇ュ井淇″凡琚粦瀹�"); + } + // 鍒犻櫎閭�璇峰垎浜浘 + //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 = userInfoService.getDefaultPortrait(system); + } + // 鍒涘缓鏂拌处鎴� + 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(ipInfo.getIp()); + userInfo.setState(UserInfo.STATE_NORMAL); + userInfo.setSystem(system); + 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()); + } + }); + } + return userInfo; + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + jedis.del(watchKey); + jedis.unwatch(); + jedis.close(); + } + throw new UserAccountException(10, "璇风◢鍚庡啀璇�"); + } + + @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 unRegisterUser(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_DELETE, reason); + } + + @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