| | |
| | | import java.io.File;
|
| | | import java.io.FileWriter;
|
| | | import java.io.IOException;
|
| | | import java.io.InputStream;
|
| | | import java.math.BigDecimal;
|
| | | import java.util.ArrayList;
|
| | | import java.util.Date;
|
| | |
| | | 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.yeshi.fanli.util.FileUtil;
|
| | | 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;
|
| | |
| | | updateUserInfo.setLastLoginTime(System.currentTimeMillis());
|
| | | updateUserInfo.setLoginType(loginType);
|
| | | updateUserInfo.setLastLoginIp(request.getRemoteHost());
|
| | | // 更新openId
|
| | | updateUserInfo.setOpenid(weiXinUser.getOpenid());
|
| | |
|
| | | userInfoMapper.updateByPrimaryKeySelective(updateUserInfo);
|
| | | // 删除邀请图片
|
| | |
| | | addUser(userInfo);
|
| | | }
|
| | |
|
| | | @Transactional
|
| | | @Override
|
| | | public void addUser(UserInfo user) {
|
| | |
|
| | |
| | | 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
|
| | |
| | | } finally {
|
| | | jedis.del(watchKey);
|
| | | jedis.unwatch();
|
| | | jedisPool.returnResource(jedis);
|
| | | jedis.close();
|
| | | }
|
| | | throw new UserAccountException(10, "请稍后再试");
|
| | | }
|
| | |
| | |
|
| | | // 通过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, "微信帐号授权失败");
|
| | | }
|
| | |
| | | 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("/portrait/wx/%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());
|
| | |
| | | } finally {
|
| | | jedis.del(watchKey);
|
| | | jedis.unwatch();
|
| | | jedisPool.returnResource(jedis);
|
| | | jedis.close();
|
| | | }
|
| | | throw new UserAccountException(10, "请稍后再试");
|
| | | }
|
| | |
|
| | | @Transactional
|
| | | @Override
|
| | | public UserInfo loginWeiXinNew(HttpServletRequest request, AcceptData acceptData, int loginType, String wxCode,
|
| | | String appId) throws UserAccountException {
|
| | | // 日志信息
|
| | | JSONObject logInfo = new JSONObject();
|
| | | logInfo.put("appId", appId);
|
| | | logInfo.put("wxCode", wxCode);
|
| | | logInfo.put("loginType", loginType);
|
| | | LogHelper.lgoinInfo(logInfo.toString());
|
| | |
|
| | | // 通过Code换取信息
|
| | | WXAccountInfoDTO wxAccount = Constant.getWXAccount(acceptData.getPlatform(), acceptData.getVersion());
|
| | | WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUser(wxCode, wxAccount.getAppId(), wxAccount.getAppSecret());
|
| | | if (weiXinUser == null) {
|
| | | throw new UserAccountException(1, "微信帐号授权失败");
|
| | | }
|
| | | LogHelper.test("微信授权用户信息:" + new Gson().toJson(weiXinUser));
|
| | |
|
| | | // 判断微信unionid是否被封禁
|
| | | ForbiddenUserIdentifyCode identifyCode = forbiddenUserIdentifyCodeService
|
| | | .listByTypeAndIdentifyCode(ForbiddenUserIdentifyCodeTypeEnum.wxUnionId, weiXinUser.getUnionid());
|
| | | if (identifyCode != null && identifyCode.getEffective() != null && identifyCode.getEffective()) {
|
| | | throw new UserAccountException(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC);
|
| | | }
|
| | |
|
| | | UserInfo userInfo = userInfoMapper.getEffectiveUserInfoByWXUnionId(weiXinUser.getUnionid());
|
| | | if (userInfo == null) {
|
| | | String longinKey = StringUtil.Md5("WXLogin:" + weiXinUser.getUnionid());
|
| | | redisManager.cacheCommonString(longinKey, JsonUtil.getSimpleGson().toJson(weiXinUser), 60 * 20);
|
| | | throw new UserAccountException(101, longinKey);
|
| | | }
|
| | | // 更新账户登录信息
|
| | | updateLonginInfo(userInfo, loginType, request);
|
| | | Long uid = userInfo.getId();
|
| | | ThreadUtil.run(new Runnable() {
|
| | | public void run() {
|
| | | // 删除邀请分享图
|
| | | spreadUserImgService.deleteImgUrl(uid);
|
| | | }
|
| | | });
|
| | | return userInfo;
|
| | | }
|
| | |
|
| | | /**
|
| | |
| | | throw new UserAccountException(1, "用户不存在");
|
| | | }
|
| | | 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(2, "微信帐号授权失败");
|
| | | }
|
| | |
| | | if (newUser != null) {
|
| | | throw new UserAccountException(4, "该微信号已被其他帐号绑定");
|
| | | }
|
| | | } else if (wxUnionId.equals(wxUnionIdExist)) {
|
| | | } else if (wxUnionId.equalsIgnoreCase(wxUnionIdExist)) {
|
| | | throw new UserAccountException(3, "微信帐号一致无需更换");
|
| | | }
|
| | |
|
| | |
| | | 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("/portrait/wx/%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);
|
| | |
|
| | |
| | | }
|
| | |
|
| | | @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, "号码已经被占用");
|
| | |
|
| | | // 判断手机号码是否被封禁
|
| | | ForbiddenUserIdentifyCode identifyCode1 = forbiddenUserIdentifyCodeService
|
| | | .listByTypeAndIdentifyCode(ForbiddenUserIdentifyCodeTypeEnum.phone, phone);
|
| | | if (identifyCode1 != null && identifyCode1.getEffective() != null && identifyCode1.getEffective())
|
| | | throw new UserAccountException(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC);
|
| | |
|
| | | String value = redisManager.getCommonString(key);
|
| | | if (StringUtil.isNullOrEmpty(value))
|
| | | throw new UserAccountException(1, "微信授权失效,请使用微信重新登录");
|
| | |
|
| | | WeiXinUser weiXinUser = JsonUtil.getSimpleGson().fromJson(value, WeiXinUser.class);
|
| | | if (weiXinUser == null)
|
| | | throw new UserAccountException(1, "微信授权失效,请使用微信重新登录");
|
| | |
|
| | | UserInfo userInfo = userInfoMapper.getEffectiveUserInfoByWXUnionId(weiXinUser.getUnionid());
|
| | | // 直接用的微信登录
|
| | | if (userInfo != null)
|
| | | throw new UserAccountException(10, "该微信号已被占用");
|
| | |
|
| | | String portrait = null;
|
| | | if (!StringUtil.isNullOrEmpty(weiXinUser.getHeadimgurl())) {
|
| | | InputStream asInputStream = HttpUtil.getAsInputStream(weiXinUser.getHeadimgurl());
|
| | | if (asInputStream != null) {
|
| | | FileUploadResult result = COSManager.getInstance().uploadFile(asInputStream, String
|
| | | .format("/portrait/wx/%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());
|
| | | }
|
| | | });
|
| | | // 删除缓存
|
| | | redisManager.removeCommonString(key);
|
| | |
|
| | | return userInfo;
|
| | | }
|
| | |
|
| | | @Override
|
| | | public void forbiddenUserAll(Long uid, String reason) {
|
| | | UserInfo currentInfo = userInfoService.selectByPKey(uid);
|
| | | if (currentInfo == null) {
|