yujian
2019-09-23 aec36e0e136b55ffeb1d22dd3d7f5c2443b806aa
fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserAccountServiceImpl.java
@@ -12,6 +12,7 @@
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;
@@ -23,6 +24,8 @@
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;
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;
@@ -31,19 +34,25 @@
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.exception.user.UserAccountException;
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.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.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.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.Constant;
import com.yeshi.fanli.util.FileUtil;
import com.yeshi.fanli.util.RedisManager;
@@ -53,6 +62,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 {
@@ -62,6 +74,9 @@
   @Resource
   private UserInfoMapper userInfoMapper;
   @Resource
   private UserInfoService userInfoService;
   @Resource
   private BindingAccountService bindingAccountService;
@@ -93,10 +108,21 @@
   @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 {
   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);
@@ -158,7 +184,9 @@
         case 2:// 微信
               // 通过Code换取信息
            weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code);
            WXAccountInfoDTO wxAccount = Constant.getWXAccount(acceptData.getPlatform(), acceptData.getVersion());
            weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code, wxAccount.getAppId(),
                  wxAccount.getAppSecret());
            if (weiXinUser == null)
               throw new UserAccountException(1001, "无法获取到微信个人信息");
            LogHelper.test("微信授权用户信息:" + new Gson().toJson(weiXinUser));
@@ -339,7 +367,7 @@
         }
      } else {// 没有安装微信
         LoginResult result = loginNoInstallWX(appId, code, phone, tbUserInfo, loginType);
         LoginResult result = loginNoInstallWX(acceptData, appId, code, phone, tbUserInfo, loginType);
         if (result.getType() == LoginResult.TYPE_CREATE)
            session.setAttribute("LAST_LOGIN_USER", result.getUser());
         return result;
@@ -348,8 +376,8 @@
   @Transactional
   @Override
   public LoginResult loginNoInstallWX(String appId, String code, String phone, UserInfo tbUserInfo, int loginType)
         throws UserAccountException {
   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);
@@ -373,7 +401,9 @@
         break;
      case 2:// 微信
            // 通过Code换取信息
         weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code);
         WXAccountInfoDTO wxAccount = Constant.getWXAccount(acceptData.getPlatform(), acceptData.getVersion());
         weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code, wxAccount.getAppId(),
               wxAccount.getAppSecret());
         if (weiXinUser == null)
            throw new UserAccountException(1001, "无法获取到微信个人信息");
@@ -537,6 +567,8 @@
      int addCount = 0;
      userAccountMsgNotificationService.connectSuccess(mainUser.getId(), lessUser.getId());
      userInfoDeleteRecordService.addDeleteRecord(lessUser.getId(), UserInfo.STATE_DELETE, "删除:账号被打通删除");
   }
   /**
@@ -657,6 +689,7 @@
   @Override
   public void addUser(UserInfo user) {
      Long maxUid = userInfoMapper.getMaxUid();
      if (maxUid == null)
         maxUid = 100000L;
@@ -670,13 +703,28 @@
      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
@@ -686,7 +734,7 @@
   @Override
   public void bindPhone(Long uid, String phone) throws UserAccountException {
      UserInfo user = userInfoMapper.selectByPrimaryKey(uid);
      UserInfo user = userInfoMapper.selectAvailableByPrimaryKey(uid);
      if (user == null)
         throw new UserAccountException(4, "用户不存在");
@@ -701,11 +749,13 @@
      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);
      UserInfo user = userInfoMapper.selectAvailableByPrimaryKey(uid);
      if (user == null)
         throw new UserAccountException(4, "用户不存在");
@@ -727,7 +777,7 @@
   @Override
   public void bindTaoBao(Long uid, String tbOpenId, String tbNickName, String tbPortrait)
         throws UserAccountException {
      UserInfo user = userInfoMapper.selectByPrimaryKey(uid);
      UserInfo user = userInfoMapper.selectAvailableByPrimaryKey(uid);
      if (user == null)
         throw new UserAccountException(4, "用户不存在");
@@ -757,7 +807,7 @@
   @Override
   public void unBindTaoBao(Long uid) throws UserAccountException {
      UserInfo user = userInfoMapper.selectByPrimaryKey(uid);
      UserInfo user = userInfoMapper.selectAvailableByPrimaryKey(uid);
      if (user == null)
         throw new UserAccountException(4, "用户不存在");
      if (StringUtil.isNullOrEmpty(user.getOpenid()))
@@ -784,11 +834,13 @@
   }
   @Override
   public void changeWXBind(Long uid, String code) throws UserAccountException {
      UserInfo user = userInfoMapper.selectByPrimaryKey(uid);
   public void changeWXBind(AcceptData acceptData, Long uid, String code) throws UserAccountException {
      UserInfo user = userInfoMapper.selectAvailableByPrimaryKey(uid);
      if (user == null)
         throw new UserAccountException(4, "用户不存在");
      WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code);
      WXAccountInfoDTO wxAccount = Constant.getWXAccount(acceptData.getPlatform(), acceptData.getVersion());
      WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code, wxAccount.getAppId(),
            wxAccount.getAppSecret());
      if (weiXinUser == null)
         throw new UserAccountException(10, "获取微信用户信息失败");
      if (weiXinUser.getUnionid().equalsIgnoreCase(user.getWxUnionId()))
@@ -796,25 +848,35 @@
      UserInfo newUser = getUserInfoByWXUnionId(user.getAppId(), weiXinUser.getUnionid());
      if (newUser != null)
         throw new UserAccountException(13, "亲,你要更换绑定的微信号已被其他账号绑定");
         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());
      // 将默认昵称替换成微信昵称
      String defaultNickName = Constant.systemCommonConfig.getDefaultNickName();
      if (!StringUtil.isNullOrEmpty(defaultNickName) && !StringUtil.isNullOrEmpty(weiXinUser.getNickname())) {
         defaultNickName = defaultNickName + uid;
         if ((defaultNickName.equals(user.getNickName()) || "板栗快省".equals(user.getNickName()))) {
            updateUserInfo.setNickName(weiXinUser.getNickname());
         }
      }
      if (StringUtil.isNullOrEmpty(weiXinUser.getHeadimgurl())) {
         updateUserInfo.setPortrait(Constant.systemCommonConfig.getDefaultPortrait());
      // 将默认头像替换成微信头像
      String defaultPortrait = Constant.systemCommonConfig.getDefaultPortrait();
      if (!StringUtil.isNullOrEmpty(weiXinUser.getHeadimgurl()) && !StringUtil.isNullOrEmpty(defaultPortrait)
            && defaultPortrait.equals(user.getPortrait())) {
         updateUserInfo.setPortrait(weiXinUser.getHeadimgurl());
      }
      userInfoMapper.updateByPrimaryKeySelective(updateUserInfo);
      userAccountMsgNotificationService.changeBindingSuccess(uid, MsgAccountDetailFactory.TYPE_WX);
      userInfoModifyRecordService.addModifyRecord(uid, ModifyTypeEnum.bindWeiXin, weiXinUser.getUnionid());
   }
   @Override
@@ -824,7 +886,7 @@
            TimeUtil.getGernalTime(System.currentTimeMillis(), "yyyyMMddHHmmss"));
      // 备份用户信息
      UserInfo user = userInfoMapper.selectByPrimaryKey(uid);
      UserInfo user = userInfoMapper.selectAvailableByPrimaryKey(uid);
      // TODO 备份资金明细
@@ -861,7 +923,7 @@
   public void clearUserPortrait(Long uid) {
      if (uid == null)
         return;
      UserInfo user = userInfoMapper.selectByPrimaryKey(uid);
      UserInfo user = userInfoMapper.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)
@@ -876,7 +938,7 @@
   public String repairPortrait(Long uid) {
      if (uid == null)
         return null;
      UserInfo user = userInfoMapper.selectByPrimaryKey(uid);
      UserInfo user = userInfoMapper.selectAvailableByPrimaryKey(uid);
      if (user == null)
         return null;
      String prefix = String.format("/portrait/wx/%s_", user.getWxUnionId());
@@ -917,7 +979,7 @@
      phone = phone.replaceAll(" ", "");
      // 苹果应用商店上线测试号码
      if ("17316780233".equalsIgnoreCase(phone) && "258168".equalsIgnoreCase(vcode)) {
      if ("17316780233".equalsIgnoreCase(phone) && "2581".equalsIgnoreCase(vcode)) {
         ;
      } else {
@@ -927,11 +989,14 @@
         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();
      logInfo.put("appId", appId);
      logInfo.put("phone", phone);
@@ -944,45 +1009,68 @@
      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);
      // 查询是否存在该电话历史用户
      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 {
         try {
            // 第一次登录时创建用户额外信息
            userInfoExtraService.createUserInfoExtra(userInfo.getId());
         } catch (Exception e) {
            e.printStackTrace();
            // 查询是否存在该电话历史用户
            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);
      }
      return userInfo;
      throw new UserAccountException(10, "请稍后再试");
   }
   @Transactional
   @Override
   public UserInfo loginWinXin(HttpServletRequest request, int loginType, String code, String appId)
         throws UserAccountException {
   public UserInfo loginWinXin(HttpServletRequest request, AcceptData acceptData, int loginType, String code,
         String appId) throws UserAccountException {
      // 日志信息
      JSONObject logInfo = new JSONObject();
      logInfo.put("appId", appId);
@@ -991,7 +1079,9 @@
      LogHelper.lgoinInfo(logInfo.toString());
      // 通过Code换取信息
      WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code);
      WXAccountInfoDTO wxAccount = Constant.getWXAccount(acceptData.getPlatform(), acceptData.getVersion());
      WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code, wxAccount.getAppId(),
            wxAccount.getAppSecret());
      if (weiXinUser == null) {
         throw new UserAccountException(1, "微信帐号授权失败");
      }
@@ -1004,35 +1094,65 @@
         throw new UserAccountException(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC);
      }
      UserInfo userInfo = userInfoMapper.getEffectiveUserInfoByWXUnionId(weiXinUser.getUnionid());
      // 直接用的微信登录
      if (userInfo != null) {
         // 更新账户登录信息
         updateLonginInfo(userInfo, loginType, request);
      } 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());
         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();
               }
               userInfoModifyRecordService.addModifyRecord(userInfo.getId(), ModifyTypeEnum.bindWeiXin,
                     weiXinUser.getUnionid());
            }
            return userInfo;
         }
      } catch (Exception e) {
         e.printStackTrace();
      } finally {
         jedis.del(watchKey);
         jedis.unwatch();
         jedisPool.returnResource(jedis);
      }
      return userInfo;
      throw new UserAccountException(10, "请稍后再试");
   }
   /**
@@ -1053,7 +1173,7 @@
   @Override
   public void bindPhoneNew(Long uid, String phone) throws UserAccountException {
      UserInfo user = userInfoMapper.selectByPrimaryKey(uid);
      UserInfo user = userInfoMapper.selectAvailableByPrimaryKey(uid);
      if (user == null) {
         throw new UserAccountException(1, "用户不存在");
      }
@@ -1087,25 +1207,29 @@
      // 发送消息
      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);
   public void bindWeiXin(AcceptData acceptData, Long uid, String code) throws UserAccountException {
      UserInfo user = userInfoMapper.selectAvailableByPrimaryKey(uid);
      if (user == null) {
         throw new UserAccountException(1, "用户不存在");
      }
      WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code);
      WXAccountInfoDTO wxAccount = Constant.getWXAccount(acceptData.getPlatform(), acceptData.getVersion());
      WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code, wxAccount.getAppId(),
            wxAccount.getAppSecret());
      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);
@@ -1125,14 +1249,21 @@
      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());
      // 将默认昵称替换成微信昵称
      String defaultNickName = Constant.systemCommonConfig.getDefaultNickName();
      if (!StringUtil.isNullOrEmpty(defaultNickName) && !StringUtil.isNullOrEmpty(weiXinUser.getNickname())) {
         defaultNickName = defaultNickName + uid;
         if ((defaultNickName.equals(user.getNickName()) || "板栗快省".equals(user.getNickName()))) {
            updateUserInfo.setNickName(weiXinUser.getNickname());
         }
      }
      if (StringUtil.isNullOrEmpty(weiXinUser.getHeadimgurl())) {
         updateUserInfo.setPortrait(Constant.systemCommonConfig.getDefaultPortrait());
      // 将默认头像替换成微信头像
      String defaultPortrait = Constant.systemCommonConfig.getDefaultPortrait();
      if (!StringUtil.isNullOrEmpty(weiXinUser.getHeadimgurl()) && !StringUtil.isNullOrEmpty(defaultPortrait)
            && defaultPortrait.equals(user.getPortrait())) {
         updateUserInfo.setPortrait(weiXinUser.getHeadimgurl());
      }
      userInfoMapper.updateByPrimaryKeySelective(updateUserInfo);
@@ -1150,6 +1281,130 @@
      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);
   }
}