From 0641cc9bc9bb8cf0cd21b5d4862bcea7d9090e15 Mon Sep 17 00:00:00 2001
From: yujian <yujian@163.com>
Date: 星期二, 30 六月 2020 18:07:38 +0800
Subject: [PATCH] 拉新红包消息
---
fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserAccountServiceImpl.java | 677 +++++++++++++++++++++++++++++++-------------------------
1 files changed, 374 insertions(+), 303 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 048b7c0..4bc9603 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,11 +1,6 @@
package com.yeshi.fanli.service.impl.user;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Date;
+import java.io.InputStream;
import java.util.List;
import javax.annotation.Resource;
@@ -15,14 +10,14 @@
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import org.yeshi.utils.HttpUtil;
import org.yeshi.utils.JsonUtil;
+import org.yeshi.utils.entity.FileUploadResult;
import org.yeshi.utils.tencentcloud.COSManager;
import com.google.gson.Gson;
import com.qcloud.cos.model.COSObjectSummary;
import com.qcloud.cos.model.ObjectListing;
-import com.yeshi.fanli.dao.mybatis.AccountMessageMapper;
-import com.yeshi.fanli.dao.mybatis.UserConnectHistoryMapper;
import com.yeshi.fanli.dao.mybatis.UserInfoMapper;
import com.yeshi.fanli.dto.wx.WXAccountInfoDTO;
import com.yeshi.fanli.entity.accept.AcceptData;
@@ -31,9 +26,7 @@
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;
@@ -54,11 +47,11 @@
import com.yeshi.fanli.service.inter.user.msg.UserAccountMsgNotificationService;
import com.yeshi.fanli.service.inter.user.tb.UserExtraTaoBaoInfoService;
import com.yeshi.fanli.util.Constant;
-import com.yeshi.fanli.util.FileUtil;
+import com.yeshi.fanli.util.FilePathEnum;
+import com.yeshi.fanli.util.RedisKeyEnum;
import com.yeshi.fanli.util.RedisManager;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.ThreadUtil;
-import com.yeshi.fanli.util.TimeUtil;
import com.yeshi.fanli.util.factory.msg.MsgAccountDetailFactory;
import com.yeshi.fanli.util.wx.WXLoginUtil;
@@ -83,13 +76,7 @@
private BindingAccountService bindingAccountService;
@Resource
- private UserConnectHistoryMapper userConnectHistoryMapper;
-
- @Resource
private ThreeSaleSerivce threeSaleSerivce;
-
- @Resource
- private AccountMessageMapper accountMessageMapper;
@Resource
private SpreadUserImgService spreadUserImgService;
@@ -118,9 +105,8 @@
@Lazy
@Resource
private UserInfoModifyRecordService userInfoModifyRecordService;
-
-
- @Transactional
+
+ @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)
@@ -155,9 +141,7 @@
}
userInfo = getUserInfoByTaoBaoOpenId(appId, tbUserInfo.getOpenid());
// 鍒ゆ柇鐢ㄦ埛鏄惁琚垹闄�
- if (userInfo != null && userInfo.getState() != null
- && (userInfo.getState() == UserInfo.STATE_DELETE_OUT_OF_DATE
- || userInfo.getState() == UserInfo.STATE_DELETE))
+ if (userInfo != null && userInfo.getState() != null && (userInfo.getState() != UserInfo.STATE_NORMAL))
userInfo = null;
if (userInfo == null) {// 鍘熷厛鐨勮处鍙蜂笉瀛樺湪
userInfo = new UserInfo();
@@ -200,9 +184,7 @@
userInfo = getUserInfoByWXUnionId(appId, weiXinUser.getUnionid());
// 鍒ゆ柇鐢ㄦ埛鏄惁琚垹闄�
- if (userInfo != null && userInfo.getState() != null
- && (userInfo.getState() == UserInfo.STATE_DELETE_OUT_OF_DATE
- || userInfo.getState() == UserInfo.STATE_DELETE))
+ if (userInfo != null && userInfo.getState() != null && (userInfo.getState() != UserInfo.STATE_NORMAL))
userInfo = null;
// 鐩存帴鐢ㄧ殑寰俊鐧诲綍
if (lastUser == null) {
@@ -220,6 +202,8 @@
updateUserInfo.setLastLoginTime(System.currentTimeMillis());
updateUserInfo.setLoginType(loginType);
updateUserInfo.setLastLoginIp(request.getRemoteHost());
+ // 鏇存柊openId
+ updateUserInfo.setOpenid(weiXinUser.getOpenid());
userInfoMapper.updateByPrimaryKeySelective(updateUserInfo);
// 鍒犻櫎閭�璇峰浘鐗�
@@ -337,9 +321,7 @@
userInfo = getUserInfoByPhone(appId, phone);
// 鍒ゆ柇鐢ㄦ埛鏄惁琚垹闄�
- if (userInfo != null && userInfo.getState() != null
- && (userInfo.getState() == UserInfo.STATE_DELETE_OUT_OF_DATE
- || userInfo.getState() == UserInfo.STATE_DELETE))
+ if (userInfo != null && userInfo.getState() != null && (userInfo.getState() != UserInfo.STATE_NORMAL))
userInfo = null;
if (userInfo == null) {// 鍘熷厛鐨勮处鍙蜂笉瀛樺湪
@@ -376,7 +358,7 @@
}
}
- @Transactional
+ @Transactional(rollbackFor = Exception.class)
@Override
public LoginResult loginNoInstallWX(AcceptData acceptData, String appId, String code, String phone,
UserInfo tbUserInfo, int loginType) throws UserAccountException {
@@ -428,8 +410,7 @@
}
// 鍒ゆ柇鐢ㄦ埛鏄惁琚垹闄�
- if (userInfo != null && userInfo.getState() != null && (userInfo.getState() == UserInfo.STATE_DELETE_OUT_OF_DATE
- || userInfo.getState() == UserInfo.STATE_DELETE))
+ if (userInfo != null && userInfo.getState() != null && (userInfo.getState() != UserInfo.STATE_NORMAL))
userInfo = null;
if (userInfo != null) {
@@ -466,113 +447,6 @@
}
}
- @Override
- public void connectUsers(HttpSession session) throws UserAccountException {
- UserInfo mainUser = (UserInfo) session.getAttribute("WEIXIN_USERINFO");
- UserInfo lessUser = (UserInfo) session.getAttribute("LAST_LOGIN_USER");
-
- int lessUserLoginType = lessUser.getLoginType();
-
- if (mainUser == null || lessUser == null || mainUser.getId() == null || lessUser.getId() == null)
- throw new UserAccountException(30001, "缂哄皯鎵撻�氳处鍙�");
-
- mainUser = userInfoMapper.selectByPrimaryKeyForUpdate(mainUser.getId());
- lessUser = userInfoMapper.selectByPrimaryKeyForUpdate(lessUser.getId());
-
- session.removeAttribute("WEIXIN_USERINFO");
- session.removeAttribute("LAST_LOGIN_USER");
-
- if (mainUser == null || lessUser == null)
- throw new UserAccountException(30002, "缂哄皯鎵撻�氳处鍙�");
-
- // 鍒ゆ柇鏄惁鏈夌粦瀹氱浉鍚岀被鍨嬬殑璐﹀彿
- if (lessUserLoginType == 1) {// 娆¤处鍙蜂互娣樺疂鐧诲綍
- if (!StringUtil.isNullOrEmpty(mainUser.getPhone()) && !StringUtil.isNullOrEmpty(lessUser.getPhone())
- && !lessUser.getPhone().equalsIgnoreCase(mainUser.getPhone()))
- throw new UserAccountException(30003, "璇峰厛瑙i櫎鍏朵腑涓�涓处鍙风殑鎵嬫満缁戝畾");
-
- } else if (lessUserLoginType == 3) {// 娆¤处鍙蜂互鎵嬫満鍙风櫥褰�
- if (!StringUtil.isNullOrEmpty(mainUser.getOpenid()) && !StringUtil.isNullOrEmpty(lessUser.getOpenid())
- && !lessUser.getOpenid().equalsIgnoreCase(mainUser.getOpenid()))
- throw new UserAccountException(30003, "璇峰厛瑙i櫎鍏朵腑涓�涓处鍙风殑娣樺疂缁戝畾");
- }
- connectUsers(mainUser, lessUser);
- }
-
- @Transactional
- @Override
- public void connectUsers(UserInfo mainUser, UserInfo lessUser) throws UserAccountException {
- mainUser = userInfoMapper.selectByPrimaryKeyForUpdate(mainUser.getId());
- lessUser = userInfoMapper.selectByPrimaryKeyForUpdate(lessUser.getId());
-
- if (!StringUtil.isNullOrEmpty(mainUser.getOpenid()) && !StringUtil.isNullOrEmpty(lessUser.getOpenid()))
- throw new UserAccountException(9, "涓や釜璐﹀彿閮界粦瀹氫簡娣樺疂锛岃瑙g粦鍏朵腑涓�涓�");
-
- if (!StringUtil.isNullOrEmpty(mainUser.getPhone()) && !StringUtil.isNullOrEmpty(lessUser.getPhone()))
- throw new UserAccountException(9, "涓や釜璐﹀彿閮界粦瀹氫簡鎵嬫満鍙风爜锛岃瑙g粦鍏朵腑涓�涓�");
-
- if (lessUser.getMyHongBao().compareTo(new BigDecimal("10")) >= 0
- && mainUser.getMyHongBao().compareTo(new BigDecimal("10")) > 0)
- throw new UserAccountException(10, String.format("璐︽埛ID:%s 鐨勮祫閲戣秴杩�10鍏冿紝涓轰繚璇佽祫閲戝畨鍏ㄨ鑱旂郴瀹㈡湇鎵撻��", lessUser.getId() + ""));
-
- // 鍒ゅ畾鏄惁缁戝畾浜嗗悓涓�鏀粯瀹�
- BindingAccount mainUserAccount = bindingAccountService.getBindingAccountByUidAndType(mainUser.getId(),
- BindingAccount.TYPE_ALIPAY);
-
- BindingAccount lessUserAccount = bindingAccountService.getBindingAccountByUidAndType(lessUser.getId(),
- BindingAccount.TYPE_ALIPAY);
-
- // 鏈変笉鍚岀殑鏀粯瀹濊处鍙�
- boolean hasDiffrentAlipayAccount = false;
- if (mainUserAccount != null && lessUserAccount != null) {
- if (!mainUserAccount.getAccount().equalsIgnoreCase(lessUserAccount.getAccount()))
- hasDiffrentAlipayAccount = true;
- }
-
- if (hasDiffrentAlipayAccount)
- throw new UserAccountException(10, "涓や釜璐︽埛閮界粦瀹氫簡鏀粯瀹濓紝璇峰厛瑙g粦鍏朵腑涓�涓�");
-
- // 鍒ゅ畾鏄惁鏈夐噸鍙犵殑璐﹀彿
- UserInfo updateUser = new UserInfo(mainUser.getId());
- if (!StringUtil.isNullOrEmpty(lessUser.getOpenid())) {
- updateUser.setOpenid(lessUser.getOpenid());
- updateUser.setTbName(lessUser.getTbName());
- updateUser.setTbPic(lessUser.getTbPic());
- }
-
- if (!StringUtil.isNullOrEmpty(lessUser.getPhone())) {
- updateUser.setPhone(lessUser.getPhone());
- }
-
- // 澶囦唤鍘熸潵鐨勭敤鎴蜂俊鎭�
- String logUrl = backupUserImportantInfo(lessUser.getId());
-
- // 娣诲姞鎵撻�氳褰�
- UserConnectHistory userConnectHistory = new UserConnectHistory();
- userConnectHistory.setCreateTime(new Date());
- userConnectHistory.setLessUser(lessUser);
- userConnectHistory.setMainUser(mainUser);
- userConnectHistory.setLogUrl(logUrl);
- userConnectHistoryMapper.insertSelective(userConnectHistory);
-
- userInfoMapper.updateByPrimaryKeySelective(updateUser);
- // 鍒犻櫎鍘熸潵鐨勮处鍙�
- UserInfo updateLessUser = new UserInfo(lessUser.getId());
- updateLessUser.setState(UserInfo.STATE_DELETE);
- updateLessUser.setStateDesc("璐﹀彿琚墦閫氬垹闄�");
- userInfoMapper.updateByPrimaryKeySelective(updateLessUser);
- // 铻嶅悎涓氬姟
- userInfoMapper.connectUser(mainUser.getId(), lessUser.getId());
-
- // 鏌ヨ鏄惁鏈夊浣欑殑鏂颁汉绾㈠寘
- int subCount = 0;
- int addCount = 0;
-
- userAccountMsgNotificationService.connectSuccess(mainUser.getId(), lessUser.getId());
-
- userInfoDeleteRecordService.addDeleteRecord(lessUser.getId(), UserInfo.STATE_DELETE, "鍒犻櫎锛氳处鍙疯鎵撻�氬垹闄�");
- }
-
/**
* 鏍规嵁绯荤粺涓巙nionid瀵绘壘鐢ㄦ埛
*
@@ -590,8 +464,7 @@
List<UserInfo> list = userInfoMapper.listByAppIdAndWXUnionId(appId, unionId);
// 鍓旈櫎琚垹闄ゆ帀鐨勭敤鎴�
for (int i = 0; i < list.size(); i++) {
- if (list.get(i).getState() == UserInfo.STATE_DELETE
- || list.get(i).getState() == UserInfo.STATE_DELETE_OUT_OF_DATE) {
+ if (list.get(i).getState() == UserInfo.STATE_NORMAL) {
list.remove(i);
i--;
}
@@ -618,8 +491,7 @@
// 鍓旈櫎琚垹闄ゆ帀鐨勭敤鎴�
for (int i = 0; i < list.size(); i++) {
- if (list.get(i).getState() == UserInfo.STATE_DELETE
- || list.get(i).getState() == UserInfo.STATE_DELETE_OUT_OF_DATE) {
+ if (list.get(i).getState() != UserInfo.STATE_NORMAL) {
list.remove(i);
i--;
}
@@ -647,8 +519,7 @@
// 鍓旈櫎琚垹闄ゆ帀鐨勭敤鎴�
for (int i = 0; i < list.size(); i++) {
- if (list.get(i).getState() == UserInfo.STATE_DELETE
- || list.get(i).getState() == UserInfo.STATE_DELETE_OUT_OF_DATE) {
+ if (list.get(i).getState() != UserInfo.STATE_NORMAL) {
list.remove(i);
i--;
}
@@ -666,6 +537,7 @@
userInfoMapper.updateByPrimaryKeySelective(userInfo);
}
+ @Transactional(rollbackFor = Exception.class)
@Override
public void register(UserInfo userInfo) throws UserAccountException {
if (!StringUtil.isNullOrEmpty(userInfo.getPhone())) {
@@ -689,6 +561,7 @@
addUser(userInfo);
}
+ @Transactional
@Override
public void addUser(UserInfo user) {
@@ -721,12 +594,12 @@
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
@@ -882,46 +755,6 @@
}
@Override
- public String backupUserImportantInfo(Long uid) {
-
- String logPath = String.format(FileUtil.getCacheDir() + "/benfen_%s_" + uid + ".log",
- TimeUtil.getGernalTime(System.currentTimeMillis(), "yyyyMMddHHmmss"));
-
- // 澶囦唤鐢ㄦ埛淇℃伅
- UserInfo user = userInfoMapper.selectAvailableByPrimaryKey(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;
@@ -969,7 +802,7 @@
return user.getPortrait();
}
- @Transactional
+ @Transactional(rollbackFor = Exception.class)
@Override
public UserInfo loginPhone(HttpServletRequest request, int loginType, String vcode, String phone, String appId)
throws UserAccountException {
@@ -1015,7 +848,8 @@
// 娓呯┖闄愬埗
redisManager.clearSMSFrequencyLimit(phone, SMSHistory.TYPE_LOGIN);
// 娓呯悊娆℃暟
- redisManager.removeCommonString("sendMSNLoginCount" + phone);
+ String key = RedisKeyEnum.getRedisKey(RedisKeyEnum.SMSLoginCount, phone);
+ redisManager.removeCommonString(key);
// 閲囩敤redis浜嬪姟闃叉涓�涓墜鏈哄彿澶氭娉ㄥ唽闂
String watchKey = StringUtil.Md5("REGISTER:" + phone);
@@ -1053,10 +887,8 @@
} catch (Exception e) {
e.printStackTrace();
}
-
userInfoModifyRecordService.addModifyRecord(userInfo.getId(), ModifyTypeEnum.bindPhone, phone);
}
-
return userInfo;
}
} catch (Exception e) {
@@ -1064,12 +896,98 @@
} finally {
jedis.del(watchKey);
jedis.unwatch();
- jedisPool.returnResource(jedis);
+ jedis.close();
}
throw new UserAccountException(10, "璇风◢鍚庡啀璇�");
}
- @Transactional
+
+ @Transactional(rollbackFor = Exception.class)
+ @Override
+ public UserInfo loginPhoneNew(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);
+ // 娓呯悊娆℃暟
+ String key = RedisKeyEnum.getRedisKey(RedisKeyEnum.SMSLoginCount, phone);
+ redisManager.removeCommonString(key);
+
+ // 閲囩敤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 {
+ // 缁戝畾寰俊
+ String keylogin = RedisKeyEnum.getRedisKey(RedisKeyEnum.emptyKey, StringUtil.Md5("phoneLogin:" + phone));
+ redisManager.cacheCommonString(keylogin, phone, 60 * 20);
+ throw new UserAccountException(102, keylogin);
+ }
+ return userInfo;
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ jedis.del(watchKey);
+ jedis.unwatch();
+ jedis.close();
+ }
+ throw new UserAccountException(10, "璇风◢鍚庡啀璇�");
+ }
+
+
+
+ @Transactional(rollbackFor = Exception.class)
@Override
public UserInfo loginWinXin(HttpServletRequest request, AcceptData acceptData, int loginType, String code,
String appId) throws UserAccountException {
@@ -1082,8 +1000,7 @@
// 閫氳繃Code鎹㈠彇淇℃伅
WXAccountInfoDTO wxAccount = Constant.getWXAccount(acceptData.getPlatform(), acceptData.getVersion());
- WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code, wxAccount.getAppId(),
- wxAccount.getAppSecret());
+ WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUser(code, wxAccount.getAppId(), wxAccount.getAppSecret());
if (weiXinUser == null) {
throw new UserAccountException(1, "寰俊甯愬彿鎺堟潈澶辫触");
}
@@ -1120,9 +1037,27 @@
spreadUserImgService.deleteImgUrl(userInfo.getId());
} else {
LogHelper.test("寰俊unionID涓嶅瓨鍦�:" + weiXinUser.getUnionid());
+
+ String portrait = null;
+ if (!StringUtil.isNullOrEmpty(weiXinUser.getHeadimgurl())) {
+ InputStream asInputStream = HttpUtil.getAsInputStream(weiXinUser.getHeadimgurl());
+ if (asInputStream != null) {
+ FileUploadResult result = COSManager.getInstance().uploadFile(asInputStream,
+ String.format(FilePathEnum.userWXPortrait.getPath() + "%s_%s.jpg",
+ weiXinUser.getUnionid(), System.currentTimeMillis() + ""));
+ if (result != null && !StringUtil.isNullOrEmpty(result.getUrl()))
+ portrait = result.getUrl();
+ } else {
+ portrait = weiXinUser.getHeadimgurl();
+ }
+ }
+
+ if (StringUtil.isNullOrEmpty(portrait))
+ portrait = Constant.systemCommonConfig.getDefaultPortrait();
+
// 鍒涘缓鏂拌处鎴�
userInfo = new UserInfo();
- userInfo.setPortrait(weiXinUser.getHeadimgurl());
+ userInfo.setPortrait(portrait);
userInfo.setAppId(appId);
userInfo.setNickName(weiXinUser.getNickname());
userInfo.setWxName(weiXinUser.getNickname());
@@ -1152,15 +1087,15 @@
} finally {
jedis.del(watchKey);
jedis.unwatch();
- jedisPool.returnResource(jedis);
+ jedis.close();
}
throw new UserAccountException(10, "璇风◢鍚庡啀璇�");
}
-
- @Transactional
+ @Transactional(rollbackFor = Exception.class)
@Override
- public UserInfo loginWeiXinNew(HttpServletRequest request, AcceptData acceptData, int loginType, String wxCode, String appId) throws UserAccountException {
+ public UserInfo loginWeiXinNew(HttpServletRequest request, AcceptData acceptData, int loginType, String wxCode,
+ String appId) throws UserAccountException {
// 鏃ュ織淇℃伅
JSONObject logInfo = new JSONObject();
logInfo.put("appId", appId);
@@ -1170,8 +1105,7 @@
// 閫氳繃Code鎹㈠彇淇℃伅
WXAccountInfoDTO wxAccount = Constant.getWXAccount(acceptData.getPlatform(), acceptData.getVersion());
- WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(wxCode, wxAccount.getAppId(),
- wxAccount.getAppSecret());
+ WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUser(wxCode, wxAccount.getAppId(), wxAccount.getAppSecret());
if (weiXinUser == null) {
throw new UserAccountException(1, "寰俊甯愬彿鎺堟潈澶辫触");
}
@@ -1184,49 +1118,25 @@
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, "璇风◢鍚庡啀璇�");
-
- UserInfo userInfo = userInfoMapper.getEffectiveUserInfoByWXUnionId(weiXinUser.getUnionid());
- if (userInfo == null) {
- redisManager.cacheCommonString(watchKey, JsonUtil.getSimpleGson().toJson(weiXinUser), 60 * 20);
- throw new UserAccountException(101, watchKey);
- }
-
- LogHelper.test("寰俊unionID瀛樺湪:" + weiXinUser.getUnionid());
- // 鏇存柊璐︽埛鐧诲綍淇℃伅
- updateLonginInfo(userInfo, loginType, request);
- Long uid = userInfo.getId();
- ThreadUtil.run(new Runnable() {
- public void run() {
- // 鍒犻櫎閭�璇峰垎浜浘
- spreadUserImgService.deleteImgUrl(uid);
- }
- });
- return userInfo;
-
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- jedis.del(watchKey);
- jedis.unwatch();
- jedisPool.returnResource(jedis);
+ UserInfo userInfo = userInfoMapper.getEffectiveUserInfoByWXUnionId(weiXinUser.getUnionid());
+ if (userInfo == null) {
+ String key = RedisKeyEnum.getRedisKey(RedisKeyEnum.emptyKey,
+ StringUtil.Md5("WXLogin:" + weiXinUser.getUnionid()));
+ redisManager.cacheCommonString(key, JsonUtil.getSimpleGson().toJson(weiXinUser), 60 * 20);
+ throw new UserAccountException(101, key);
}
- throw new UserAccountException(10, "璇风◢鍚庡啀璇�");
+ // 鏇存柊璐︽埛鐧诲綍淇℃伅
+ updateLonginInfo(userInfo, loginType, request);
+ Long uid = userInfo.getId();
+ ThreadUtil.run(new Runnable() {
+ public void run() {
+ // 鍒犻櫎閭�璇峰垎浜浘
+ spreadUserImgService.deleteImgUrl(uid);
+ }
+ });
+ return userInfo;
}
-
-
/**
* 鏇存柊璐︽埛鐧诲綍淇℃伅
*
@@ -1284,15 +1194,30 @@
}
+ @Transactional(rollbackFor = UserAccountException.class)
@Override
public void bindWeiXin(AcceptData acceptData, Long uid, String code) throws UserAccountException {
+ WXAccountInfoDTO wxAccount = Constant.getWXAccount(acceptData.getPlatform(), acceptData.getVersion());
+ WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUser(code, wxAccount.getAppId(), wxAccount.getAppSecret());
+ if (weiXinUser == null) {
+ throw new UserAccountException(2, "寰俊甯愬彿鎺堟潈澶辫触");
+ }
+
+ String wxUnionId = weiXinUser.getUnionid();
+ if (StringUtil.isNullOrEmpty(wxUnionId)) {
+ throw new UserAccountException(2, "寰俊甯愬彿鎺堟潈澶辫触");
+ }
+ bindWeiXin(uid, weiXinUser);
+ }
+
+ @Transactional(rollbackFor = UserAccountException.class)
+ @Override
+ public void bindWeiXin(Long uid, WeiXinUser weiXinUser) throws UserAccountException {
UserInfo user = userInfoMapper.selectAvailableByPrimaryKey(uid);
if (user == null) {
throw new UserAccountException(1, "鐢ㄦ埛涓嶅瓨鍦�");
}
- WXAccountInfoDTO wxAccount = Constant.getWXAccount(acceptData.getPlatform(), acceptData.getVersion());
- WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code, wxAccount.getAppId(),
- wxAccount.getAppSecret());
+
if (weiXinUser == null) {
throw new UserAccountException(2, "寰俊甯愬彿鎺堟潈澶辫触");
}
@@ -1308,7 +1233,7 @@
if (newUser != null) {
throw new UserAccountException(4, "璇ュ井淇″彿宸茶鍏朵粬甯愬彿缁戝畾");
}
- } else if (wxUnionId.equals(wxUnionIdExist)) {
+ } else if (wxUnionId.equalsIgnoreCase(wxUnionIdExist)) {
throw new UserAccountException(3, "寰俊甯愬彿涓�鑷存棤闇�鏇存崲");
}
@@ -1335,7 +1260,21 @@
String defaultPortrait = Constant.systemCommonConfig.getDefaultPortrait();
if (!StringUtil.isNullOrEmpty(weiXinUser.getHeadimgurl()) && !StringUtil.isNullOrEmpty(defaultPortrait)
&& defaultPortrait.equals(user.getPortrait())) {
- updateUserInfo.setPortrait(weiXinUser.getHeadimgurl());
+ String headimgurl = weiXinUser.getHeadimgurl();
+ InputStream asInputStream = HttpUtil.getAsInputStream(headimgurl);
+ if (asInputStream == null) {
+ LogHelper.test("寰俊澶村儚涓嬭浇澶辫触: " + weiXinUser.getUnionid() + " " + headimgurl);
+ } else {
+ FileUploadResult result = COSManager.getInstance().uploadFile(asInputStream,
+ String.format(FilePathEnum.userWXPortrait.getPath() + "%s_%s.jpg", weiXinUser.getUnionid(),
+ System.currentTimeMillis() + ""));
+ if (result != null && !StringUtil.isNullOrEmpty(result.getUrl())) {
+ headimgurl = result.getUrl();
+ } else {
+ LogHelper.test("寰俊澶村儚涓婁紶澶辫触: " + weiXinUser.getUnionid() + " " + headimgurl);
+ }
+ }
+ updateUserInfo.setPortrait(headimgurl);
}
userInfoMapper.updateByPrimaryKeySelective(updateUserInfo);
@@ -1356,49 +1295,66 @@
userInfoModifyRecordService.addModifyRecord(uid, ModifyTypeEnum.bindWeiXin, wxUnionId);
}
-
-
+
@Override
- public UserInfo bindPhoneToLogin(String phone, String key, String appId, HttpServletRequest request) throws UserAccountException {
- UserInfo phoneUser = userInfoMapper.getEffectiveUserInfoByPhone(phone);
- if (phoneUser != null)
- throw new UserAccountException(1, "鍙风爜宸茬粡琚崰鐢�");
-
+ public UserInfo bindPhoneToLogin(String phone, String key, String appId, HttpServletRequest request)
+ throws UserAccountException {
+
// 鍒ゆ柇鎵嬫満鍙风爜鏄惁琚皝绂�
ForbiddenUserIdentifyCode identifyCode1 = forbiddenUserIdentifyCodeService
.listByTypeAndIdentifyCode(ForbiddenUserIdentifyCodeTypeEnum.phone, phone);
if (identifyCode1 != null && identifyCode1.getEffective() != null && identifyCode1.getEffective())
throw new UserAccountException(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC);
-
+
String value = redisManager.getCommonString(key);
if (StringUtil.isNullOrEmpty(value))
throw new UserAccountException(1, "寰俊鎺堟潈澶辨晥锛岃浣跨敤寰俊閲嶆柊鐧诲綍");
-
+
WeiXinUser weiXinUser = JsonUtil.getSimpleGson().fromJson(value, WeiXinUser.class);
if (weiXinUser == null)
throw new UserAccountException(1, "寰俊鎺堟潈澶辨晥锛岃浣跨敤寰俊閲嶆柊鐧诲綍");
-
- 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, "璇风◢鍚庡啀璇�");
- UserInfo userInfo = userInfoMapper.getEffectiveUserInfoByWXUnionId(weiXinUser.getUnionid());
- // 鐩存帴鐢ㄧ殑寰俊鐧诲綍
- if (userInfo != null)
- throw new UserAccountException(10, "璇ュ井淇″彿宸茶鍗犵敤");
-
+ UserInfo userInfo = userInfoMapper.getEffectiveUserInfoByWXUnionId(weiXinUser.getUnionid());
+ // 鐩存帴鐢ㄧ殑寰俊鐧诲綍
+ if (userInfo != null)
+ throw new UserAccountException(10, "璇ュ井淇″彿宸茶鍗犵敤");
+
+ String portrait = null;
+ if (!StringUtil.isNullOrEmpty(weiXinUser.getHeadimgurl())) {
+ InputStream asInputStream = HttpUtil.getAsInputStream(weiXinUser.getHeadimgurl());
+ if (asInputStream != null) {
+ FileUploadResult result = COSManager.getInstance().uploadFile(asInputStream,
+ String.format(FilePathEnum.userWXPortrait.getPath() + "%s_%s.jpg", weiXinUser.getUnionid(),
+ System.currentTimeMillis() + ""));
+ if (result != null && !StringUtil.isNullOrEmpty(result.getUrl()))
+ portrait = result.getUrl();
+ } else {
+ portrait = weiXinUser.getHeadimgurl();
+ }
+ }
+
+ if (StringUtil.isNullOrEmpty(portrait))
+ portrait = Constant.systemCommonConfig.getDefaultPortrait();
+
+ // 鏄惁闇�瑕佸垱寤烘柊璐︽埛
+ UserInfo phoneUser = userInfoMapper.getEffectiveUserInfoByPhone(phone);
+ if (phoneUser != null) {
+ // 缁戝畾寰俊
+ if (StringUtil.isNullOrEmpty(phoneUser.getWxUnionId())) {
+ try {
+ bindWeiXin(phoneUser.getId(), weiXinUser);
+ } catch (Exception e) {
+ throw new UserAccountException(1, "寰俊缁戝畾澶辫触");
+ }
+ } else {
+ throw new UserAccountException(1, "璇ュ井淇″凡琚粦瀹�");
+ }
+ userInfo = userInfoMapper.selectAvailableByPrimaryKey(phoneUser.getId());
+ } else {
// 鍒涘缓鏂拌处鎴�
userInfo = new UserInfo();
- userInfo.setPortrait(weiXinUser.getHeadimgurl());
+ userInfo.setPhone(phone);
+ userInfo.setPortrait(portrait);
userInfo.setAppId(appId);
userInfo.setNickName(weiXinUser.getNickname());
userInfo.setWxName(weiXinUser.getNickname());
@@ -1410,44 +1366,158 @@
userInfo.setLastLoginIp(request.getRemoteHost());
userInfo.setState(UserInfo.STATE_NORMAL);
addUser(userInfo);
-
- Long uid = userInfo.getId();
- ThreadUtil.run(new Runnable() {
- public void run() {
- try {
- // 绗竴娆$櫥褰曟椂鍒涘缓鐢ㄦ埛棰濆淇℃伅
- userInfoExtraService.createUserInfoExtra(uid);
- } catch (Exception e) {
- e.printStackTrace();
- }
-
- // 鍔犲叆缁戝畾璁板綍
- UserAccountBindingHistory history = new UserAccountBindingHistory();
- history.setContent(phone);
- history.setType(UserAccountBindingHistory.TYPE_PHONE);
- history.setUid(uid);
- history.setFirst(true);
- userAccountBindingHistoryService.addUserAccountBindingHistory(history);
+ }
- userInfoModifyRecordService.addModifyRecord(uid, ModifyTypeEnum.bindPhone, phone);
- userInfoModifyRecordService.addModifyRecord(uid, ModifyTypeEnum.bindWeiXin, weiXinUser.getUnionid());
+ Long uid = userInfo.getId();
+ ThreadUtil.run(new Runnable() {
+ public void run() {
+ try {
+ // 绗竴娆$櫥褰曟椂鍒涘缓鐢ㄦ埛棰濆淇℃伅
+ userInfoExtraService.createUserInfoExtra(uid);
+ } catch (Exception e) {
+ e.printStackTrace();
}
- });
- // 鍒犻櫎缂撳瓨
- redisManager.removeCommonString(key);
-
- return userInfo;
+
+ // 鍔犲叆缁戝畾璁板綍
+ UserAccountBindingHistory history = new UserAccountBindingHistory();
+ history.setContent(phone);
+ history.setType(UserAccountBindingHistory.TYPE_PHONE);
+ history.setUid(uid);
+ history.setFirst(true);
+ userAccountBindingHistoryService.addUserAccountBindingHistory(history);
+
+ userInfoModifyRecordService.addModifyRecord(uid, ModifyTypeEnum.bindPhone, phone);
+ userInfoModifyRecordService.addModifyRecord(uid, ModifyTypeEnum.bindWeiXin, weiXinUser.getUnionid());
+ }
+ });
+ // 鍒犻櫎缂撳瓨
+ redisManager.removeCommonString(key);
+
+ return userInfo;
+ }
+
+
+ @Override
+ public UserInfo bindWXToLogin(HttpServletRequest request, 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());
+
+ // 閫氳繃Code鎹㈠彇淇℃伅
+ WXAccountInfoDTO wxAccount = Constant.getWXAccount(acceptData.getPlatform(), acceptData.getVersion());
+ WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUser(code, wxAccount.getAppId(), wxAccount.getAppSecret());
+ if (weiXinUser == null) {
+ throw new UserAccountException(1, "寰俊甯愬彿鎺堟潈澶辫触");
+ }
+ LogHelper.test("寰俊鎺堟潈鐢ㄦ埛淇℃伅锛�" + new Gson().toJson(weiXinUser));
+
+ // 鍒ゆ柇寰俊unionid鏄惁琚皝绂�
+ ForbiddenUserIdentifyCode identifyCode = forbiddenUserIdentifyCodeService
+ .listByTypeAndIdentifyCode(ForbiddenUserIdentifyCodeTypeEnum.wxUnionId, weiXinUser.getUnionid());
+ if (identifyCode != null && identifyCode.getEffective() != null && identifyCode.getEffective()) {
+ throw new UserAccountException(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC);
+ }
+
+ String phone = redisManager.getCommonString(key);
+ if (StringUtil.isNullOrEmpty(phone))
+ throw new UserAccountException(1, "鎵嬫満鍙风櫥褰曞け鏁堬紝璇蜂娇鍙戦�佺煭淇$櫥褰�");
+
+ // 閲囩敤redis浜嬪姟闃叉涓�涓井淇″彿澶氭娉ㄥ唽闂
+ String watchKey = StringUtil.Md5("REGISTER:" + weiXinUser.getUnionid());
+ Jedis jedis = 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) {
+ // 缁戝畾寰俊
+ if (!StringUtil.isNullOrEmpty(userInfo.getPhone()) && !phone.equals(userInfo.getPhone().trim())) {
+ throw new UserAccountException(1, "璇ュ井淇″凡琚粦瀹�");
+ }
+ // 鍒犻櫎閭�璇峰垎浜浘
+ //spreadUserImgService.deleteImgUrl(userInfo.getId());
+ } else {
+ LogHelper.test("寰俊unionID涓嶅瓨鍦�:" + weiXinUser.getUnionid());
+
+ String portrait = null;
+ if (!StringUtil.isNullOrEmpty(weiXinUser.getHeadimgurl())) {
+ InputStream asInputStream = HttpUtil.getAsInputStream(weiXinUser.getHeadimgurl());
+ if (asInputStream != null) {
+ FileUploadResult result = COSManager.getInstance().uploadFile(asInputStream,
+ String.format(FilePathEnum.userWXPortrait.getPath() + "%s_%s.jpg",
+ weiXinUser.getUnionid(), System.currentTimeMillis() + ""));
+ if (result != null && !StringUtil.isNullOrEmpty(result.getUrl()))
+ portrait = result.getUrl();
+ } else {
+ portrait = weiXinUser.getHeadimgurl();
+ }
+ }
+
+ if (StringUtil.isNullOrEmpty(portrait))
+ portrait = Constant.systemCommonConfig.getDefaultPortrait();
+
+ // 鍒涘缓鏂拌处鎴�
+ userInfo = new UserInfo();
+ userInfo.setPhone(phone);
+ userInfo.setPortrait(portrait);
+ userInfo.setAppId(appId);
+ userInfo.setNickName(weiXinUser.getNickname());
+ userInfo.setWxName(weiXinUser.getNickname());
+ userInfo.setWxOpenId(weiXinUser.getOpenid());
+ userInfo.setWxUnionId(weiXinUser.getUnionid());
+ userInfo.setWxPic(weiXinUser.getHeadimgurl());
+ userInfo.setLastLoginTime(System.currentTimeMillis());
+ userInfo.setLoginType(2);
+ userInfo.setLastLoginIp(request.getRemoteHost());
+ userInfo.setState(UserInfo.STATE_NORMAL);
+ addUser(userInfo);
+
+ Long uid = userInfo.getId();
+ ThreadUtil.run(new Runnable() {
+ public void run() {
+ try {
+ // 绗竴娆$櫥褰曟椂鍒涘缓鐢ㄦ埛棰濆淇℃伅
+ userInfoExtraService.createUserInfoExtra(uid);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ // 鍔犲叆缁戝畾璁板綍
+ UserAccountBindingHistory history = new UserAccountBindingHistory();
+ history.setContent(phone);
+ history.setType(UserAccountBindingHistory.TYPE_PHONE);
+ history.setUid(uid);
+ history.setFirst(true);
+ userAccountBindingHistoryService.addUserAccountBindingHistory(history);
+
+ userInfoModifyRecordService.addModifyRecord(uid, ModifyTypeEnum.bindPhone, phone);
+ userInfoModifyRecordService.addModifyRecord(uid, ModifyTypeEnum.bindWeiXin, weiXinUser.getUnionid());
+ }
+ });
+ }
+ return userInfo;
+ }
} catch (Exception e) {
e.printStackTrace();
} finally {
jedis.del(watchKey);
jedis.unwatch();
- jedisPool.returnResource(jedis);
+ jedis.close();
}
throw new UserAccountException(10, "璇风◢鍚庡啀璇�");
}
-
-
@Override
public void forbiddenUserAll(Long uid, String reason) {
@@ -1571,4 +1641,5 @@
// 鎻掑叆璁板綍
userInfoDeleteRecordService.addDeleteRecord(uid, UserInfo.STATE_DELETE_OUT_OF_DATE, reason);
}
+
}
--
Gitblit v1.8.0