admin
2019-07-30 573c491b4a1ba60e12a5678a01c1546c0077c1ee
fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserAccountServiceImpl.java
@@ -57,6 +57,9 @@
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 {
@@ -66,7 +69,7 @@
   @Resource
   private UserInfoMapper userInfoMapper;
   @Resource
   private UserInfoService userInfoService;
@@ -99,10 +102,12 @@
   @Resource
   private UserAccountBindingHistoryService userAccountBindingHistoryService;
   @Resource
   private UserInfoDeleteRecordService userInfoDeleteRecordService;
   @Resource
   private JedisPool jedisPool;
   @Transactional
   @Override
@@ -548,8 +553,7 @@
      int addCount = 0;
      userAccountMsgNotificationService.connectSuccess(mainUser.getId(), lessUser.getId());
      userInfoDeleteRecordService.addDeleteRecord(lessUser.getId(), UserInfo.STATE_DELETE, "删除:账号被打通删除");
   }
@@ -671,6 +675,7 @@
   @Override
   public void addUser(UserInfo user) {
      Long maxUid = userInfoMapper.getMaxUid();
      if (maxUid == null)
         maxUid = 100000L;
@@ -691,14 +696,13 @@
         updateUserInfo.setNickName(Constant.systemCommonConfig.getDefaultNickName() + user.getId());
         userInfoMapper.updateByPrimaryKeySelective(updateUserInfo);
      }
      try {
         // 第一次登录时创建用户额外信息
         userInfoExtraService.createUserInfoExtra(user.getId());
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
   @Override
@@ -949,9 +953,12 @@
         String oldVcode = redisManager.getSMSVCode(phone, SMSHistory.TYPE_LOGIN);
         LogHelper.test("----------------------登录验证码: " + oldVcode);
         if (StringUtil.isNullOrEmpty(oldVcode) || !oldVcode.equalsIgnoreCase(vcode)) {
            throw new UserAccountException(1, "验证码错误,重新输入");
         }
         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();
@@ -972,31 +979,54 @@
      // 清理次数
      redisManager.removeCommonString("sendMSNLoginCount" + phone);
      // 查询是否存在该电话历史用户
      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);
      // 采用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();
               try {
                  // 第一次登录时创建用户额外信息
                  userInfoExtraService.createUserInfoExtra(userInfo.getId());
               } catch (Exception e) {
                  e.printStackTrace();
               }
            }
            return userInfo;
         }
      } catch (Exception e) {
         e.printStackTrace();
      } finally {
         jedis.del(watchKey);
         jedis.unwatch();
         jedisPool.returnResource(jedis);
      }
      return userInfo;
      throw new UserAccountException(10, "请稍后再试");
   }
   @Transactional
@@ -1024,39 +1054,62 @@
         throw new UserAccountException(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC);
      }
      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);
      // 采用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 {
         try {
            // 第一次登录时创建用户额外信息
            userInfoExtraService.createUserInfoExtra(userInfo.getId());
         } catch (Exception e) {
            e.printStackTrace();
            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();
               }
            }
            return userInfo;
         }
      } catch (Exception e) {
         e.printStackTrace();
      } finally {
         jedis.del(watchKey);
         jedis.unwatch();
         jedisPool.returnResource(jedis);
      }
      return userInfo;
      throw new UserAccountException(10, "请稍后再试");
   }
   /**
@@ -1124,12 +1177,12 @@
      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);
@@ -1149,14 +1202,14 @@
      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)
@@ -1181,8 +1234,6 @@
      userAccountMsgNotificationService.bindingSuccess(uid, MsgAccountDetailFactory.TYPE_WX);
   }
   @Override
   public void forbiddenUserAll(Long uid, String reason) {
      UserInfo currentInfo = userInfoService.selectByPKey(uid);
@@ -1196,7 +1247,7 @@
      currentInfo.setState(UserInfo.STATE_FORBIDDEN);
      currentInfo.setStateDesc(reason);
      userInfoService.updateByPrimaryKeySelective(currentInfo);
      // 插入记录
      userInfoDeleteRecordService.addDeleteRecord(uid, UserInfo.STATE_FORBIDDEN, reason);
@@ -1250,15 +1301,14 @@
         }
      }
   }
   @Override
   public void forbiddenUser(Long uid, String reason) {
      UserInfo currentInfo = userInfoService.selectByPKey(uid);
      if (currentInfo == null) {
         return;
      }
      if (currentInfo.getState() != UserInfo.STATE_NORMAL) {
         return;
      }
@@ -1266,19 +1316,18 @@
      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;
      }
@@ -1289,15 +1338,14 @@
      // 插入记录
      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;
      }