From 651f2856e9ae10aacbfb8327d967aacbb6d58333 Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期三, 12 四月 2023 18:13:58 +0800
Subject: [PATCH] 大淘客API修复/唯品会订单爬取策略修改
---
fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserAccountServiceImpl.java | 3287 ++++++++++++++++++++++++++++++++++-------------------------
1 files changed, 1,896 insertions(+), 1,391 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 e0d3640..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,1391 +1,1896 @@
-package com.yeshi.fanli.service.impl.user;
-
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-
-import javax.annotation.Resource;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-
-import org.springframework.context.annotation.Lazy;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import org.yeshi.utils.JsonUtil;
-import org.yeshi.utils.tencentcloud.COSManager;
-
-import com.google.gson.Gson;
-import com.qcloud.cos.model.COSObjectSummary;
-import com.qcloud.cos.model.ObjectListing;
-import com.yeshi.fanli.dao.mybatis.AccountMessageMapper;
-import com.yeshi.fanli.dao.mybatis.UserConnectHistoryMapper;
-import com.yeshi.fanli.dao.mybatis.UserInfoMapper;
-import com.yeshi.fanli.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.ThreeSale;
-import com.yeshi.fanli.entity.bus.user.UserAccountBindingHistory;
-import com.yeshi.fanli.entity.bus.user.UserConnectHistory;
-import com.yeshi.fanli.entity.bus.user.UserExtraTaoBaoInfo;
-import com.yeshi.fanli.entity.bus.user.UserInfo;
-import com.yeshi.fanli.entity.bus.user.UserInfoModifyRecord.ModifyTypeEnum;
-import com.yeshi.fanli.entity.bus.user.WeiXinUser;
-import com.yeshi.fanli.exception.UserAccountException;
-import com.yeshi.fanli.exception.user.ForbiddenUserIdentifyCodeException;
-import com.yeshi.fanli.log.LogHelper;
-import com.yeshi.fanli.service.inter.hongbao.ThreeSaleSerivce;
-import com.yeshi.fanli.service.inter.msg.UserAccountMsgNotificationService;
-import com.yeshi.fanli.service.inter.user.BindingAccountService;
-import com.yeshi.fanli.service.inter.user.ForbiddenUserIdentifyCodeService;
-import com.yeshi.fanli.service.inter.user.SpreadUserImgService;
-import com.yeshi.fanli.service.inter.user.UserAccountBindingHistoryService;
-import com.yeshi.fanli.service.inter.user.UserAccountService;
-import com.yeshi.fanli.service.inter.user.UserExtraTaoBaoInfoService;
-import com.yeshi.fanli.service.inter.user.UserInfoDeleteRecordService;
-import com.yeshi.fanli.service.inter.user.UserInfoExtraService;
-import com.yeshi.fanli.service.inter.user.UserInfoModifyRecordService;
-import com.yeshi.fanli.service.inter.user.UserInfoService;
-import com.yeshi.fanli.util.Constant;
-import com.yeshi.fanli.util.FileUtil;
-import com.yeshi.fanli.util.RedisManager;
-import com.yeshi.fanli.util.StringUtil;
-import com.yeshi.fanli.util.TimeUtil;
-import com.yeshi.fanli.util.factory.msg.MsgAccountDetailFactory;
-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 UserConnectHistoryMapper userConnectHistoryMapper;
-
- @Resource
- private ThreeSaleSerivce threeSaleSerivce;
-
- @Resource
- private AccountMessageMapper accountMessageMapper;
-
- @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
- @Override
- public LoginResult login(HttpServletRequest request, 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(appId, tbUserInfo.getOpenid());
- // 鍒ゆ柇鐢ㄦ埛鏄惁琚垹闄�
- if (userInfo != null && userInfo.getState() != null
- && (userInfo.getState() == UserInfo.STATE_DELETE_OUT_OF_DATE
- || userInfo.getState() == UserInfo.STATE_DELETE))
- 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);
- 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鎹㈠彇淇℃伅
- weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code);
- 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(appId, weiXinUser.getUnionid());
- // 鍒ゆ柇鐢ㄦ埛鏄惁琚垹闄�
- if (userInfo != null && userInfo.getState() != null
- && (userInfo.getState() == UserInfo.STATE_DELETE_OUT_OF_DATE
- || userInfo.getState() == UserInfo.STATE_DELETE))
- 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());
-
- userInfoMapper.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());
- 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());
- userInfoMapper.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());
- 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(appId, phone);
- // 鍒ゆ柇鐢ㄦ埛鏄惁琚垹闄�
- if (userInfo != null && userInfo.getState() != null
- && (userInfo.getState() == UserInfo.STATE_DELETE_OUT_OF_DATE
- || userInfo.getState() == UserInfo.STATE_DELETE))
- 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);
- 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(appId, code, phone, tbUserInfo, loginType);
- if (result.getType() == LoginResult.TYPE_CREATE)
- session.setAttribute("LAST_LOGIN_USER", result.getUser());
- return result;
- }
- }
-
- @Transactional
- @Override
- public LoginResult loginNoInstallWX(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(appId, tbUserInfo.getOpenid());
- break;
- case 2:// 寰俊
- // 閫氳繃Code鎹㈠彇淇℃伅
- weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code);
- 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(appId, 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(appId, phone);
- break;
- }
-
- // 鍒ゆ柇鐢ㄦ埛鏄惁琚垹闄�
- if (userInfo != null && userInfo.getState() != null && (userInfo.getState() == UserInfo.STATE_DELETE_OUT_OF_DATE
- || userInfo.getState() == UserInfo.STATE_DELETE))
- userInfo = null;
-
- if (userInfo != null) {
- UserInfo updateUserInfo = new UserInfo(userInfo.getId());
- updateUserInfo.setLastLoginTime(System.currentTimeMillis());
- userInfoMapper.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;
- }
- return new LoginResult(LoginResult.TYPE_CREATE, userInfo);
- }
- }
-
- @Override
- public void connectUsers(HttpSession session) throws UserAccountException {
- UserInfo mainUser = (UserInfo) session.getAttribute("WEIXIN_USERINFO");
- UserInfo lessUser = (UserInfo) session.getAttribute("LAST_LOGIN_USER");
-
- int lessUserLoginType = lessUser.getLoginType();
-
- if (mainUser == null || lessUser == null || mainUser.getId() == null || lessUser.getId() == null)
- throw new UserAccountException(30001, "缂哄皯鎵撻�氳处鍙�");
-
- mainUser = userInfoMapper.selectByPrimaryKeyForUpdate(mainUser.getId());
- lessUser = userInfoMapper.selectByPrimaryKeyForUpdate(lessUser.getId());
-
- session.removeAttribute("WEIXIN_USERINFO");
- session.removeAttribute("LAST_LOGIN_USER");
-
- if (mainUser == null || lessUser == null)
- throw new UserAccountException(30002, "缂哄皯鎵撻�氳处鍙�");
-
- // 鍒ゆ柇鏄惁鏈夌粦瀹氱浉鍚岀被鍨嬬殑璐﹀彿
- if (lessUserLoginType == 1) {// 娆¤处鍙蜂互娣樺疂鐧诲綍
- if (!StringUtil.isNullOrEmpty(mainUser.getPhone()) && !StringUtil.isNullOrEmpty(lessUser.getPhone())
- && !lessUser.getPhone().equalsIgnoreCase(mainUser.getPhone()))
- throw new UserAccountException(30003, "璇峰厛瑙i櫎鍏朵腑涓�涓处鍙风殑鎵嬫満缁戝畾");
-
- } else if (lessUserLoginType == 3) {// 娆¤处鍙蜂互鎵嬫満鍙风櫥褰�
- if (!StringUtil.isNullOrEmpty(mainUser.getOpenid()) && !StringUtil.isNullOrEmpty(lessUser.getOpenid())
- && !lessUser.getOpenid().equalsIgnoreCase(mainUser.getOpenid()))
- throw new UserAccountException(30003, "璇峰厛瑙i櫎鍏朵腑涓�涓处鍙风殑娣樺疂缁戝畾");
- }
- connectUsers(mainUser, lessUser);
- }
-
- @Transactional
- @Override
- public void connectUsers(UserInfo mainUser, UserInfo lessUser) throws UserAccountException {
- mainUser = userInfoMapper.selectByPrimaryKeyForUpdate(mainUser.getId());
- lessUser = userInfoMapper.selectByPrimaryKeyForUpdate(lessUser.getId());
-
- if (!StringUtil.isNullOrEmpty(mainUser.getOpenid()) && !StringUtil.isNullOrEmpty(lessUser.getOpenid()))
- throw new UserAccountException(9, "涓や釜璐﹀彿閮界粦瀹氫簡娣樺疂锛岃瑙g粦鍏朵腑涓�涓�");
-
- if (!StringUtil.isNullOrEmpty(mainUser.getPhone()) && !StringUtil.isNullOrEmpty(lessUser.getPhone()))
- throw new UserAccountException(9, "涓や釜璐﹀彿閮界粦瀹氫簡鎵嬫満鍙风爜锛岃瑙g粦鍏朵腑涓�涓�");
-
- if (lessUser.getMyHongBao().compareTo(new BigDecimal("10")) >= 0
- && mainUser.getMyHongBao().compareTo(new BigDecimal("10")) > 0)
- throw new UserAccountException(10, String.format("璐︽埛ID:%s 鐨勮祫閲戣秴杩�10鍏冿紝涓轰繚璇佽祫閲戝畨鍏ㄨ鑱旂郴瀹㈡湇鎵撻��", lessUser.getId() + ""));
-
- // 鍒ゅ畾鏄惁缁戝畾浜嗗悓涓�鏀粯瀹�
- BindingAccount mainUserAccount = bindingAccountService.getBindingAccountByUidAndType(mainUser.getId(),
- BindingAccount.TYPE_ALIPAY);
-
- BindingAccount lessUserAccount = bindingAccountService.getBindingAccountByUidAndType(lessUser.getId(),
- BindingAccount.TYPE_ALIPAY);
-
- // 鏈変笉鍚岀殑鏀粯瀹濊处鍙�
- boolean hasDiffrentAlipayAccount = false;
- if (mainUserAccount != null && lessUserAccount != null) {
- if (!mainUserAccount.getAccount().equalsIgnoreCase(lessUserAccount.getAccount()))
- hasDiffrentAlipayAccount = true;
- }
-
- if (hasDiffrentAlipayAccount)
- throw new UserAccountException(10, "涓や釜璐︽埛閮界粦瀹氫簡鏀粯瀹濓紝璇峰厛瑙g粦鍏朵腑涓�涓�");
-
- // 鍒ゅ畾鏄惁鏈夐噸鍙犵殑璐﹀彿
- UserInfo updateUser = new UserInfo(mainUser.getId());
- if (!StringUtil.isNullOrEmpty(lessUser.getOpenid())) {
- updateUser.setOpenid(lessUser.getOpenid());
- updateUser.setTbName(lessUser.getTbName());
- updateUser.setTbPic(lessUser.getTbPic());
- }
-
- if (!StringUtil.isNullOrEmpty(lessUser.getPhone())) {
- updateUser.setPhone(lessUser.getPhone());
- }
-
- // 澶囦唤鍘熸潵鐨勭敤鎴蜂俊鎭�
- String logUrl = backupUserImportantInfo(lessUser.getId());
-
- // 娣诲姞鎵撻�氳褰�
- UserConnectHistory userConnectHistory = new UserConnectHistory();
- userConnectHistory.setCreateTime(new Date());
- userConnectHistory.setLessUser(lessUser);
- userConnectHistory.setMainUser(mainUser);
- userConnectHistory.setLogUrl(logUrl);
- userConnectHistoryMapper.insertSelective(userConnectHistory);
-
- userInfoMapper.updateByPrimaryKeySelective(updateUser);
- // 鍒犻櫎鍘熸潵鐨勮处鍙�
- UserInfo updateLessUser = new UserInfo(lessUser.getId());
- updateLessUser.setState(UserInfo.STATE_DELETE);
- updateLessUser.setStateDesc("璐﹀彿琚墦閫氬垹闄�");
- userInfoMapper.updateByPrimaryKeySelective(updateLessUser);
- // 铻嶅悎涓氬姟
- userInfoMapper.connectUser(mainUser.getId(), lessUser.getId());
-
- // 鏌ヨ鏄惁鏈夊浣欑殑鏂颁汉绾㈠寘
- int subCount = 0;
- int addCount = 0;
-
- userAccountMsgNotificationService.connectSuccess(mainUser.getId(), lessUser.getId());
-
- userInfoDeleteRecordService.addDeleteRecord(lessUser.getId(), UserInfo.STATE_DELETE, "鍒犻櫎锛氳处鍙疯鎵撻�氬垹闄�");
- }
-
- /**
- * 鏍规嵁绯荤粺涓巙nionid瀵绘壘鐢ㄦ埛
- *
- * @param appId
- * @param unionId
- * @return
- */
- @Override
- public UserInfo getUserInfoByWXUnionId(String appId, String unionId) throws UserAccountException {
- if (StringUtil.isNullOrEmpty(appId))
- throw new UserAccountException(1, "appId涓虹┖");
- if (StringUtil.isNullOrEmpty(unionId))
- throw new UserAccountException(2, "unionId涓虹┖");
-
- List<UserInfo> list = userInfoMapper.listByAppIdAndWXUnionId(appId, unionId);
- // 鍓旈櫎琚垹闄ゆ帀鐨勭敤鎴�
- for (int i = 0; i < list.size(); i++) {
- if (list.get(i).getState() == UserInfo.STATE_DELETE
- || list.get(i).getState() == UserInfo.STATE_DELETE_OUT_OF_DATE) {
- list.remove(i);
- i--;
- }
- }
- if (list.size() > 0)
- return list.get(list.size() - 1);
- else
- return null;
- }
-
- /**
- * 鏍规嵁绯荤粺鍜屾窐瀹濈殑Openid瀵绘壘鐢ㄦ埛
- *
- * @param appId
- * @param openId
- * @return
- */
- public UserInfo getUserInfoByTaoBaoOpenId(String appId, String openId) throws UserAccountException {
- if (StringUtil.isNullOrEmpty(appId))
- throw new UserAccountException(1, "appId涓虹┖");
- if (StringUtil.isNullOrEmpty(openId))
- throw new UserAccountException(2, "openId涓虹┖");
- List<UserInfo> list = userInfoMapper.listByAppIdAndTaoBaoOpenId(appId, openId);
-
- // 鍓旈櫎琚垹闄ゆ帀鐨勭敤鎴�
- for (int i = 0; i < list.size(); i++) {
- if (list.get(i).getState() == UserInfo.STATE_DELETE
- || list.get(i).getState() == UserInfo.STATE_DELETE_OUT_OF_DATE) {
- list.remove(i);
- i--;
- }
- }
- if (list.size() > 0)
- return list.get(list.size() - 1);
- else
- return null;
-
- }
-
- /**
- * 鏍规嵁绯荤粺鍜岀數璇濆彿鐮佸鎵剧敤鎴�
- *
- * @param appId
- * @param phone
- * @return
- */
- public UserInfo getUserInfoByPhone(String appId, String phone) throws UserAccountException {
- if (StringUtil.isNullOrEmpty(appId))
- throw new UserAccountException(1, "appId涓虹┖");
- if (StringUtil.isNullOrEmpty(phone))
- throw new UserAccountException(2, "phone涓虹┖");
- List<UserInfo> list = userInfoMapper.listByAppIdAndPhone(appId, phone);
-
- // 鍓旈櫎琚垹闄ゆ帀鐨勭敤鎴�
- for (int i = 0; i < list.size(); i++) {
- if (list.get(i).getState() == UserInfo.STATE_DELETE
- || list.get(i).getState() == UserInfo.STATE_DELETE_OUT_OF_DATE) {
- 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());
- userInfoMapper.updateByPrimaryKeySelective(userInfo);
- }
-
- @Override
- public void register(UserInfo userInfo) throws UserAccountException {
- if (!StringUtil.isNullOrEmpty(userInfo.getPhone())) {
- UserInfo user = getUserInfoByPhone(userInfo.getAppId(), userInfo.getPhone());
- if (user != null)
- throw new UserAccountException(50001, "鐢佃瘽鍙风爜宸茬粡琚粦瀹�");
- }
-
- if (!StringUtil.isNullOrEmpty(userInfo.getOpenid())) {
- UserInfo user = getUserInfoByTaoBaoOpenId(userInfo.getAppId(), userInfo.getOpenid());
- if (user != null)
- throw new UserAccountException(50002, "娣樺疂鍙峰凡缁忚缁戝畾");
- }
-
- if (!StringUtil.isNullOrEmpty(userInfo.getWxUnionId())) {
- UserInfo user = getUserInfoByWXUnionId(userInfo.getAppId(), userInfo.getWxUnionId());
- if (user != null)
- throw new UserAccountException(50003, "寰俊鍙峰凡缁忚娉ㄥ唽");
- }
-
- addUser(userInfo);
- }
-
- @Override
- public void addUser(UserInfo user) {
-
- Long maxUid = userInfoMapper.getMaxUid();
- if (maxUid == null)
- maxUid = 100000L;
- long dd = (long) (Math.random() * 100);
- if (dd == 0) {
- dd = 1;
- }
- long uid = maxUid + dd;
- user.setId(uid);
- user.setCreatetime(System.currentTimeMillis());
- user.setRank(0);
- if (StringUtil.isNullOrEmpty(user.getPortrait()))
- user.setPortrait(Constant.systemCommonConfig.getDefaultPortrait());
-
- userInfoMapper.insertSelective(user);
- if (StringUtil.isNullOrEmpty(user.getNickName())) {
- UserInfo updateUserInfo = new UserInfo(user.getId());
- updateUserInfo.setNickName(Constant.systemCommonConfig.getDefaultNickName() + user.getId());
- userInfoMapper.updateByPrimaryKeySelective(updateUserInfo);
- }
-
- try {
- // 绗竴娆$櫥褰曟椂鍒涘缓鐢ㄦ埛棰濆淇℃伅
- userInfoExtraService.createUserInfoExtra(user.getId());
- } catch (Exception e) {
- e.printStackTrace();
- }
-
-
- if (!StringUtil.isNullOrEmpty(user.getPhone()))
- userInfoModifyRecordService.addModifyRecord(uid, ModifyTypeEnum.bindPhone, user.getPhone());
-
- if (!StringUtil.isNullOrEmpty(user.getWxUnionId()))
- userInfoModifyRecordService.addModifyRecord(uid, ModifyTypeEnum.bindWeiXin, user.getWxUnionId());
-
- }
-
- @Override
- public void updateUserSelective(UserInfo user) {
- userInfoMapper.updateByPrimaryKeySelective(user);
- }
-
- @Override
- public void bindPhone(Long uid, String phone) throws UserAccountException {
- UserInfo user = userInfoMapper.selectByPrimaryKey(uid);
- if (user == null)
- throw new UserAccountException(4, "鐢ㄦ埛涓嶅瓨鍦�");
-
- if (!StringUtil.isNullOrEmpty(user.getPhone()))
- throw new UserAccountException(5, "褰撳墠璐﹀彿宸茬粡缁戝畾浜嗘墜鏈哄彿锛岃鍏堣В缁�");
-
- UserInfo phoneUser = getUserInfoByPhone(user.getAppId(), phone);
- if (phoneUser != null)
- throw new UserAccountException(6, "褰撳墠鐢佃瘽鍙风爜宸茬粡琚粦瀹�");
-
- UserInfo update = new UserInfo(user.getId());
- update.setPhone(phone);
- userInfoMapper.updateByPrimaryKeySelective(update);
- userAccountMsgNotificationService.bindingSuccess(uid, MsgAccountDetailFactory.TYPE_PHONE);
-
-
- userInfoModifyRecordService.addModifyRecord(uid, ModifyTypeEnum.bindPhone, phone);
- }
-
- @Override
- public void unBindPhone(Long uid, String phone) throws UserAccountException {
- UserInfo user = userInfoMapper.selectByPrimaryKey(uid);
- 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("");
- userInfoMapper.updateByPrimaryKeySelective(updateUserInfo);
- userAccountMsgNotificationService.unBindingSuccess(uid, MsgAccountDetailFactory.TYPE_PHONE);
- }
-
- @Override
- public void bindTaoBao(Long uid, String tbOpenId, String tbNickName, String tbPortrait)
- throws UserAccountException {
- UserInfo user = userInfoMapper.selectByPrimaryKey(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.getAppId(), 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);
- }
- userInfoMapper.updateByPrimaryKeySelective(update);
-
- userAccountMsgNotificationService.bindingSuccess(uid, MsgAccountDetailFactory.TYPE_TB);
- }
-
- @Override
- public void unBindTaoBao(Long uid) throws UserAccountException {
- UserInfo user = userInfoMapper.selectByPrimaryKey(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());
- }
-
- userInfoMapper.updateByPrimaryKeySelective(update);
-
- userExtraTaoBaoInfoService.unBindUid(uid);
-
- userAccountMsgNotificationService.unBindingSuccess(uid, MsgAccountDetailFactory.TYPE_TB);
- }
-
- @Override
- public void changeWXBind(Long uid, String code) throws UserAccountException {
- UserInfo user = userInfoMapper.selectByPrimaryKey(uid);
- if (user == null)
- throw new UserAccountException(4, "鐢ㄦ埛涓嶅瓨鍦�");
- WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code);
- if (weiXinUser == null)
- throw new UserAccountException(10, "鑾峰彇寰俊鐢ㄦ埛淇℃伅澶辫触");
- if (weiXinUser.getUnionid().equalsIgnoreCase(user.getWxUnionId()))
- throw new UserAccountException(12, "浜诧紝璇风櫥褰曞叾瀹冨井淇″彿杩涜鏇存崲缁戝畾");
-
- UserInfo newUser = getUserInfoByWXUnionId(user.getAppId(), 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());
- updateUserInfo.setNickName(weiXinUser.getNickname());
- updateUserInfo.setPortrait(weiXinUser.getHeadimgurl());
- if (StringUtil.isNullOrEmpty(weiXinUser.getNickname())) {
- updateUserInfo.setNickName(Constant.systemCommonConfig.getDefaultNickName());
- }
-
- if (StringUtil.isNullOrEmpty(weiXinUser.getHeadimgurl())) {
- updateUserInfo.setPortrait(Constant.systemCommonConfig.getDefaultPortrait());
- }
- userInfoMapper.updateByPrimaryKeySelective(updateUserInfo);
-
- userAccountMsgNotificationService.changeBindingSuccess(uid, MsgAccountDetailFactory.TYPE_WX);
-
-
- userInfoModifyRecordService.addModifyRecord(uid, ModifyTypeEnum.bindWeiXin, weiXinUser.getUnionid());
- }
-
- @Override
- public String backupUserImportantInfo(Long uid) {
-
- String logPath = String.format(FileUtil.getCacheDir() + "/benfen_%s_" + uid + ".log",
- TimeUtil.getGernalTime(System.currentTimeMillis(), "yyyyMMddHHmmss"));
-
- // 澶囦唤鐢ㄦ埛淇℃伅
- UserInfo user = userInfoMapper.selectByPrimaryKey(uid);
-
- // TODO 澶囦唤璧勯噾鏄庣粏
-
- // 澶囦唤閭�璇峰叧绯�
- List<ThreeSale> threeSaleList = new ArrayList<>();
-
- FileWriter fw = null;
- try {
- // 璁剧疆涓�:True,琛ㄧず鍐欏叆鐨勬椂鍊欒拷鍔犳暟鎹�
- fw = new FileWriter(new File(logPath), true);
-
- fw.write("#UserInfo" + "\r\n");
- fw.write(JsonUtil.getSimpleGsonWithDate().toJson(user) + "\r\n");
-
- fw.write("#ThreeSale" + "\r\n");
- fw.write(JsonUtil.getSimpleGsonWithDate().toJson(threeSaleList) + "\r\n");
-
- fw.close();
-
- String logUrl = COSManager.getInstance()
- .uploadFile(new File(logPath), "beifen/" + new File(logPath).getName()).getUrl();
- return logUrl;
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- if (new File(logPath).exists())
- new File(logPath).delete();
- }
-
- return null;
- }
-
- @Override
- public void clearUserPortrait(Long uid) {
- if (uid == null)
- return;
- UserInfo user = userInfoMapper.selectByPrimaryKey(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 = userInfoMapper.selectByPrimaryKey(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);
- userInfoMapper.updateByPrimaryKeySelective(updateUser);
- return portrait;
- }
- }
-
- return user.getPortrait();
- }
-
- @Transactional
- @Override
- public UserInfo loginPhone(HttpServletRequest request, int loginType, String vcode, String phone, String appId)
- throws UserAccountException {
-
- // 绌洪娓呯悊
- if (phone == null || phone.trim().length() == 0) {
- throw new UserAccountException(1, "璇疯緭鍏ユ墜鏈哄彿鐮�");
- }
- phone = phone.replaceAll(" ", "");
-
- // 鑻规灉搴旂敤鍟嗗簵涓婄嚎娴嬭瘯鍙风爜
- if ("17316780233".equalsIgnoreCase(phone) && "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);
- // 娓呯悊娆℃暟
- redisManager.removeCommonString("sendMSNLoginCount" + phone);
-
- // 閲囩敤redis浜嬪姟闃叉涓�涓墜鏈哄彿澶氭娉ㄥ唽闂
- String watchKey = StringUtil.Md5("REGISTER:" + phone);
- Jedis jedis = jedisPool.getResource();
- try {
- jedis.watch(watchKey);
- if (jedis.get(watchKey) != null && Integer.parseInt(jedis.get(watchKey)) > 1)
- throw new UserAccountException(10, "璇风◢鍚庡啀璇�");
- Transaction tran = jedis.multi();
- tran.incr(watchKey);
- List<Object> exec = tran.exec();
- if (exec == null || exec.size() == 0) {
- throw new UserAccountException(10, "璇风◢鍚庡啀璇�");
- } else {
-
- // 鏌ヨ鏄惁瀛樺湪璇ョ數璇濆巻鍙茬敤鎴�
- UserInfo userInfo = userInfoMapper.getEffectiveUserInfoByPhone(phone);
- if (userInfo != null) {
- // 鏇存柊璐︽埛鐧诲綍淇℃伅
- updateLonginInfo(userInfo, loginType, request);
- } else {
- userInfo = new UserInfo();
- userInfo.setAppId(appId);
- userInfo.setNickName(Constant.systemCommonConfig.getDefaultNickName());
- userInfo.setPortrait(Constant.systemCommonConfig.getDefaultPortrait());
- userInfo.setPhone(phone);
- userInfo.setLoginType(loginType);
- userInfo.setState(UserInfo.STATE_NORMAL);
- // 鍒涘缓鐢ㄦ埛
- addUser(userInfo);
-
- try {
- // 绗竴娆$櫥褰曟椂鍒涘缓鐢ㄦ埛棰濆淇℃伅
- userInfoExtraService.createUserInfoExtra(userInfo.getId());
- } catch (Exception e) {
- e.printStackTrace();
- }
-
- userInfoModifyRecordService.addModifyRecord(userInfo.getId(), ModifyTypeEnum.bindPhone, phone);
- }
-
- return userInfo;
- }
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- jedis.del(watchKey);
- jedis.unwatch();
- jedisPool.returnResource(jedis);
- }
- throw new UserAccountException(10, "璇风◢鍚庡啀璇�");
- }
-
- @Transactional
- @Override
- public UserInfo loginWinXin(HttpServletRequest request, int loginType, String code, String appId)
- throws UserAccountException {
- // 鏃ュ織淇℃伅
- JSONObject logInfo = new JSONObject();
- logInfo.put("appId", appId);
- logInfo.put("code", code);
- logInfo.put("loginType", loginType);
- LogHelper.lgoinInfo(logInfo.toString());
-
- // 閫氳繃Code鎹㈠彇淇℃伅
- WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code);
- if (weiXinUser == null) {
- throw new UserAccountException(1, "寰俊甯愬彿鎺堟潈澶辫触");
- }
- LogHelper.test("寰俊鎺堟潈鐢ㄦ埛淇℃伅锛�" + new Gson().toJson(weiXinUser));
-
- // 鍒ゆ柇寰俊unionid鏄惁琚皝绂�
- ForbiddenUserIdentifyCode identifyCode = forbiddenUserIdentifyCodeService
- .listByTypeAndIdentifyCode(ForbiddenUserIdentifyCodeTypeEnum.wxUnionId, weiXinUser.getUnionid());
- if (identifyCode != null && identifyCode.getEffective() != null && identifyCode.getEffective()) {
- throw new UserAccountException(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC);
- }
-
- // 閲囩敤redis浜嬪姟闃叉涓�涓井淇″彿澶氭娉ㄥ唽闂
- String watchKey = StringUtil.Md5("REGISTER:" + weiXinUser.getUnionid());
- Jedis jedis = jedisPool.getResource();
- try {
- jedis.watch(watchKey);
- if (jedis.get(watchKey) != null && Integer.parseInt(jedis.get(watchKey)) > 1)
- throw new UserAccountException(10, "璇风◢鍚庡啀璇�");
- Transaction tran = jedis.multi();
- tran.incr(watchKey);
- List<Object> exec = tran.exec();
- if (exec == null || exec.size() == 0) {
- throw new UserAccountException(10, "璇风◢鍚庡啀璇�");
- } else {
-
- UserInfo userInfo = userInfoMapper.getEffectiveUserInfoByWXUnionId(weiXinUser.getUnionid());
- // 鐩存帴鐢ㄧ殑寰俊鐧诲綍
- if (userInfo != null) {
- LogHelper.test("寰俊unionID瀛樺湪:" + weiXinUser.getUnionid());
- // 鏇存柊璐︽埛鐧诲綍淇℃伅
- updateLonginInfo(userInfo, loginType, request);
- // 鍒犻櫎閭�璇峰垎浜浘
- spreadUserImgService.deleteImgUrl(userInfo.getId());
- } else {
- LogHelper.test("寰俊unionID涓嶅瓨鍦�:" + weiXinUser.getUnionid());
- // 鍒涘缓鏂拌处鎴�
- userInfo = new UserInfo();
- userInfo.setPortrait(weiXinUser.getHeadimgurl());
- userInfo.setAppId(appId);
- userInfo.setNickName(weiXinUser.getNickname());
- userInfo.setWxName(weiXinUser.getNickname());
- userInfo.setWxOpenId(weiXinUser.getOpenid());
- userInfo.setWxUnionId(weiXinUser.getUnionid());
- userInfo.setWxPic(weiXinUser.getHeadimgurl());
- userInfo.setLastLoginTime(System.currentTimeMillis());
- userInfo.setLoginType(loginType);
- userInfo.setLastLoginIp(request.getRemoteHost());
- userInfo.setState(UserInfo.STATE_NORMAL);
- addUser(userInfo);
-
- try {
- // 绗竴娆$櫥褰曟椂鍒涘缓鐢ㄦ埛棰濆淇℃伅
- userInfoExtraService.createUserInfoExtra(userInfo.getId());
- } catch (Exception e) {
- e.printStackTrace();
- }
-
- userInfoModifyRecordService.addModifyRecord(userInfo.getId(), ModifyTypeEnum.bindWeiXin, weiXinUser.getUnionid());
- }
- return userInfo;
- }
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- jedis.del(watchKey);
- jedis.unwatch();
- jedisPool.returnResource(jedis);
- }
- throw new UserAccountException(10, "璇风◢鍚庡啀璇�");
- }
-
- /**
- * 鏇存柊璐︽埛鐧诲綍淇℃伅
- *
- * @param userInfo
- * @param loginType
- * @param request
- */
- public void updateLonginInfo(UserInfo userInfo, int loginType, HttpServletRequest request) {
- // 璁剧疆鐧诲綍鏃堕棿涓庣櫥褰曠被鍨�
- UserInfo updateUserInfo = new UserInfo(userInfo.getId());
- updateUserInfo.setLastLoginTime(System.currentTimeMillis());
- updateUserInfo.setLoginType(loginType);
- updateUserInfo.setLastLoginIp(request.getRemoteHost());
- userInfoMapper.updateByPrimaryKeySelective(updateUserInfo);
- }
-
- @Override
- public void bindPhoneNew(Long uid, String phone) throws UserAccountException {
- UserInfo user = userInfoMapper.selectByPrimaryKey(uid);
- if (user == null) {
- throw new UserAccountException(1, "鐢ㄦ埛涓嶅瓨鍦�");
- }
-
- String hasPhone = user.getPhone();
- if (!StringUtil.isNullOrEmpty(hasPhone) && hasPhone.equals(phone)) {
- throw new UserAccountException(2, "鎮ㄥ凡缁忕粦瀹氫簡璇ョ數璇濆彿鐮�");
- }
-
- UserInfo phoneUser = userInfoMapper.getEffectiveUserInfoByPhone(phone);
- if (phoneUser != null) {
- throw new UserAccountException(2, "鍙风爜宸茬粡琚崰鐢�");
- }
-
- // 鏇存柊鐢佃瘽鍙风爜
- UserInfo update = new UserInfo(user.getId());
- update.setPhone(phone);
- userInfoMapper.updateByPrimaryKeySelective(update);
- // 鍔犲叆缁戝畾璁板綍
- 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);
-
- }
-
- @Override
- public void bindWeiXin(Long uid, String code) throws UserAccountException {
- UserInfo user = userInfoMapper.selectByPrimaryKey(uid);
- if (user == null) {
- throw new UserAccountException(1, "鐢ㄦ埛涓嶅瓨鍦�");
- }
-
- WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code);
- if (weiXinUser == null) {
- throw new UserAccountException(2, "寰俊甯愬彿鎺堟潈澶辫触");
- }
-
- String wxUnionId = weiXinUser.getUnionid();
- if (StringUtil.isNullOrEmpty(wxUnionId)) {
- throw new UserAccountException(2, "寰俊甯愬彿鎺堟潈澶辫触");
- }
-
- String wxUnionIdExist = user.getWxUnionId();
- if (StringUtil.isNullOrEmpty(wxUnionIdExist)) {
- UserInfo newUser = userInfoMapper.getEffectiveUserInfoByWXUnionId(wxUnionId);
- if (newUser != null) {
- throw new UserAccountException(4, "璇ュ井淇″彿宸茶鍏朵粬甯愬彿缁戝畾");
- }
- } else if (wxUnionId.equals(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(weiXinUser.getNickname()) && !StringUtil.isNullOrEmpty(defaultNickName)
- && defaultNickName.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());
- }
- userInfoMapper.updateByPrimaryKeySelective(updateUserInfo);
-
- // 鍔犲叆缁戝畾璁板綍
- UserAccountBindingHistory history = new UserAccountBindingHistory();
- history.setContent(weiXinUser.getUnionid());
- history.setType(UserAccountBindingHistory.TYPE_WX);
- history.setUid(uid);
-
- // 涔嬪墠宸茬粡缁戝畾鐢佃瘽鍙风爜
- if (!StringUtil.isNullOrEmpty(user.getWxUnionId()))
- history.setFirst(false);
- else
- history.setFirst(true);
- userAccountBindingHistoryService.addUserAccountBindingHistory(history);
-
- userAccountMsgNotificationService.bindingSuccess(uid, MsgAccountDetailFactory.TYPE_WX);
-
-
- userInfoModifyRecordService.addModifyRecord(uid, ModifyTypeEnum.bindWeiXin, wxUnionId);
- }
-
- @Override
- public 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