admin
2019-03-15 c9f28b430799cc8d40c7a7d99fd0f0eeecff6a5c
fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserAccountServiceImpl.java
@@ -4,55 +4,50 @@
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.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.AccountDetailsMapper;
import com.yeshi.fanli.dao.mybatis.AccountMessageMapper;
import com.yeshi.fanli.dao.mybatis.BindingAccountMapper;
import com.yeshi.fanli.dao.mybatis.MoneyRecordMapper;
import com.yeshi.fanli.dao.mybatis.PidOrderMapper;
import com.yeshi.fanli.dao.mybatis.ThreeSaleMapper;
import com.yeshi.fanli.dao.mybatis.UserConnectHistoryMapper;
import com.yeshi.fanli.dao.mybatis.UserInfoMapper;
import com.yeshi.fanli.dao.mybatis.hongbao.HongBaoMapper;
import com.yeshi.fanli.dao.mybatis.order.OrderItemMapper;
import com.yeshi.fanli.dao.mybatis.order.OrderMapper;
import com.yeshi.fanli.entity.bus.user.AccountDetails;
import com.yeshi.fanli.entity.bus.user.AccountMessage;
import com.yeshi.fanli.entity.bus.user.BindingAccount;
import com.yeshi.fanli.entity.bus.user.HongBao;
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.MoneyRecord;
import com.yeshi.fanli.entity.bus.user.Order;
import com.yeshi.fanli.entity.bus.user.OrderItem;
import com.yeshi.fanli.entity.bus.user.ThreeSale;
import com.yeshi.fanli.entity.bus.user.UserConnectHistory;
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.entity.bus.user.WeiXinUser;
import com.yeshi.fanli.entity.taobao.PidOrder;
import com.yeshi.fanli.exception.UserAccountException;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.hongbao.HongBaoService;
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.UserAccountService;
import com.yeshi.fanli.service.inter.user.UserExtraTaoBaoInfoService;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.FileUtil;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.TimeUtil;
import com.yeshi.fanli.util.factory.AccountDetailsFactory;
import com.yeshi.fanli.util.factory.msg.MsgAccountDetailFactory;
import com.yeshi.fanli.util.wx.WXLoginUtil;
import org.yeshi.utils.JsonUtil;
import org.yeshi.utils.tencentcloud.COSManager;
import net.sf.json.JSONObject;
@Service
public class UserAccountServiceImpl implements UserAccountService {
@@ -61,45 +56,44 @@
   private UserInfoMapper userInfoMapper;
   @Resource
   private BindingAccountMapper bindingAccountMapper;
   private BindingAccountService bindingAccountService;
   @Resource
   private UserConnectHistoryMapper userConnectHistoryMapper;
   @Resource
   private AccountDetailsMapper accountDetailsMapper;
   @Resource
   private HongBaoMapper hongBaoMapper;
   @Resource
   private OrderMapper orderMapper;
   @Resource
   private OrderItemMapper orderItemMapper;
   @Resource
   private ThreeSaleMapper threeSaleMapper;
   @Resource
   private PidOrderMapper pidOrderMapper;
   @Resource
   private HongBaoService hongBaoService;
   private ThreeSaleSerivce threeSaleSerivce;
   @Resource
   private AccountMessageMapper accountMessageMapper;
   @Resource
   private MoneyRecordMapper moneyRecordMapper;
   @Resource
   private SpreadUserImgService spreadUserImgService;
   @Resource
   private UserAccountMsgNotificationService userAccountMsgNotificationService;
   @Resource
   private UserExtraTaoBaoInfoService userExtraTaoBaoInfoService;
   @Resource
   private ForbiddenUserIdentifyCodeService forbiddenUserIdentifyCodeService;
   @Transactional
   @Override
   public LoginResult login(HttpSession session, Boolean first, String appId, String code, String phone,
   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");
      // 会话中上次登录的用户
@@ -109,7 +103,20 @@
         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);
@@ -141,12 +148,23 @@
            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) {
                  // 使分销关系生效
                  threeSaleMapper.effectThreeSale(userInfo.getId());
                  threeSaleSerivce.effective(userInfo);
                  // 更新头像与昵称
                  UserInfo updateUserInfo = new UserInfo(userInfo.getId());
                  updateUserInfo.setNickName(weiXinUser.getNickname());
@@ -154,6 +172,11 @@
                     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());
@@ -167,6 +190,9 @@
               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);
@@ -197,20 +223,24 @@
                     // 绑定关系
                     UserInfo updateUserInfo = new UserInfo(userInfo.getId());
                     if (!StringUtil.isNullOrEmpty(lastUser.getPhone()))
                     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");
                     // 使分销关系生效
                     threeSaleMapper.effectThreeSale(userInfo.getId());
                     threeSaleSerivce.effective(userInfo);
                     return new LoginResult(LoginResult.TYPE_NORMAL, userInfo);
                  } else {// 两个账号拥有不同的UID
@@ -224,7 +254,7 @@
                     result.setLessUser(lastUser);
                     // 使分销关系生效
                     threeSaleMapper.effectThreeSale(userInfo.getId());
                     threeSaleSerivce.effective(userInfo);
                     return result;
                  }
@@ -247,13 +277,27 @@
                     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);
@@ -292,10 +336,25 @@
   @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:// 微信
@@ -303,12 +362,29 @@
         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());
@@ -389,32 +465,21 @@
      if (!StringUtil.isNullOrEmpty(mainUser.getPhone()) && !StringUtil.isNullOrEmpty(lessUser.getPhone()))
         throw new UserAccountException(9, "两个账号都绑定了手机号码,请解绑其中一个");
      if (lessUser.getMyHongBao().compareTo(new BigDecimal("20")) >= 0
            && mainUser.getMyHongBao().compareTo(new BigDecimal("20")) > 0)
         throw new UserAccountException(10, String.format("账户ID:%s 的资金超过20元,为保证资金安全请联系客服打通", lessUser.getId() + ""));
      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() + ""));
      // 判定是否绑定了同一支付宝
      List<BindingAccount> mainUserAccountList = bindingAccountMapper.selectByUid(mainUser.getId());
      if (mainUserAccountList != null)
         for (int i = 0; i < mainUserAccountList.size(); i++) {
            if (mainUserAccountList.get(i).getType() == BindingAccount.TYPE_WXPAY) {
               mainUserAccountList.remove(i);
               i--;
            }
         }
      List<BindingAccount> lessUserAccountList = bindingAccountMapper.selectByUid(lessUser.getId());
      if (lessUserAccountList != null)
         for (int i = 0; i < lessUserAccountList.size(); i++) {
            if (lessUserAccountList.get(i).getType() == BindingAccount.TYPE_WXPAY) {
               lessUserAccountList.remove(i);
               i--;
            }
         }
      BindingAccount mainUserAccount = bindingAccountService.getBindingAccountByUidAndType(mainUser.getId(),
            BindingAccount.TYPE_ALIPAY);
      BindingAccount lessUserAccount = bindingAccountService.getBindingAccountByUidAndType(lessUser.getId(),
            BindingAccount.TYPE_ALIPAY);
      // 有不同的支付宝账号
      boolean hasDiffrentAlipayAccount = false;
      if (mainUserAccountList != null && mainUserAccountList.size() > 0 && lessUserAccountList != null
            && lessUserAccountList.size() > 0) {
         if (!mainUserAccountList.get(0).getAccount().equalsIgnoreCase(lessUserAccountList.get(0).getAccount()))
      if (mainUserAccount != null && lessUserAccount != null) {
         if (!mainUserAccount.getAccount().equalsIgnoreCase(lessUserAccount.getAccount()))
            hasDiffrentAlipayAccount = true;
      }
@@ -454,51 +519,10 @@
      userInfoMapper.connectUser(mainUser.getId(), lessUser.getId());
      // 查询是否有多余的新人红包
      List<HongBao> list = hongBaoMapper.selectByUidAndType(mainUser.getId(), HongBao.TYPE_XINREN);
      int subCount = 0;
      int addCount = 0;
      for (HongBao hb : list) {
         if (hb.getMoney().compareTo(new BigDecimal(0)) > 0)
            addCount++;
         if (hb.getMoney().compareTo(new BigDecimal(0)) < 0)
            subCount++;
      }
      // 有2个或者2个以上的新人红包
      if (addCount - subCount > 1) {
         // 扣除一个新人红包
         AccountDetails accountDetails = new AccountDetails();
         accountDetails.setCreateTime(TimeUtil.getGernalTime(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss"));
         accountDetails.setExtract(null);
         accountDetails.setMoney("-" + list.get(1).getMoney().toString());
         accountDetails.setOrderItem(null);
         accountDetails.setTitle(" 账号合并扣除重复新人红包");
         accountDetails.setType(AccountDetailsFactory.TUIKUAN);
         accountDetails.setUserInfo(mainUser);
         accountDetailsMapper.insertSelective(accountDetails);
         AccountMessage accountMessage = new AccountMessage();
         accountMessage.setContent(" 账号合并扣除重复新人红包" + list.get(1).getMoney().toString() + "元");
         accountMessage.setCreateTime(System.currentTimeMillis());
         accountMessage.setIsOpen(false);
         accountMessage.setSystemMsgId(0);
         accountMessage.setTitle(" 账号合并扣除重复新人红包");
         accountMessage.setUserInfo(mainUser);
         accountMessageMapper.insertSelective(accountMessage);
         userInfoMapper.subHongBaoByUid(mainUser.getId(), list.get(1).getMoney());
         HongBao hongBao = new HongBao(mainUser, new BigDecimal(0).subtract(list.get(1).getMoney()), null,
               HongBao.TYPE_XINREN, HongBao.STATE_YILINGQU, System.currentTimeMillis(), System.currentTimeMillis(),
               System.currentTimeMillis(), null, "账号合并扣除");
         hongBaoMapper.insertSelective(hongBao);
         MoneyRecord moneyRecord = new MoneyRecord(mainUser, hongBao, list.get(1).getMoney(), "账号合并扣除重复新人红包", "账号合并",
               System.currentTimeMillis(), 2);
         moneyRecordMapper.insertSelective(moneyRecord);
      }
      userAccountMsgNotificationService.connectSuccess(mainUser.getId(), lessUser.getId());
   }
   /**
@@ -508,8 +532,25 @@
    * @param unionId
    * @return
    */
   public UserInfo getUserInfoByWXUnionId(String appId, String unionId) {
      return userInfoMapper.getUserInfoByAppIdAndWXUnionId(appId, unionId);
   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;
   }
   /**
@@ -519,9 +560,26 @@
    * @param openId
    * @return
    */
   public UserInfo getUserInfoByTaoBaoOpenId(String appId, String openId) {
   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);
      return userInfoMapper.getUserInfoByAppIdAndTaoBaoOpenId(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;
   }
   /**
@@ -531,9 +589,26 @@
    * @param phone
    * @return
    */
   public UserInfo getUserInfoByPhone(String appId, String phone) {
   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);
      return userInfoMapper.getUserInfoByAppIdAndPhone(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) {
@@ -587,9 +662,6 @@
         updateUserInfo.setNickName(Constant.systemCommonConfig.getDefaultNickName() + user.getId());
         userInfoMapper.updateByPrimaryKeySelective(updateUserInfo);
      }
      // 添加新人红包
      hongBaoService.setNewUserHongBaoMyBatis(user, 1);
   }
   @Override
@@ -613,6 +685,7 @@
      UserInfo update = new UserInfo(user.getId());
      update.setPhone(phone);
      userInfoMapper.updateByPrimaryKeySelective(update);
      userAccountMsgNotificationService.bindingSuccess(uid, MsgAccountDetailFactory.TYPE_PHONE);
   }
   @Override
@@ -633,6 +706,7 @@
      UserInfo updateUserInfo = new UserInfo(uid);
      updateUserInfo.setPhone("");
      userInfoMapper.updateByPrimaryKeySelective(updateUserInfo);
      userAccountMsgNotificationService.unBindingSuccess(uid, MsgAccountDetailFactory.TYPE_PHONE);
   }
   @Override
@@ -642,8 +716,12 @@
      if (user == null)
         throw new UserAccountException(4, "用户不存在");
      if (!StringUtil.isNullOrEmpty(user.getOpenid()))
      if (!StringUtil.isNullOrEmpty(user.getOpenid()) && !user.getOpenid().equalsIgnoreCase(tbOpenId))
         throw new UserAccountException(5, "当前账号已经绑定了淘宝,请先解绑");
      // 绑定同一个淘宝号
      if (!StringUtil.isNullOrEmpty(user.getOpenid()) && user.getOpenid().equalsIgnoreCase(tbOpenId))
         return;
      UserInfo taoBaoUser = getUserInfoByTaoBaoOpenId(user.getAppId(), tbOpenId);
      if (taoBaoUser != null)
@@ -658,6 +736,8 @@
         update.setPortrait(tbPortrait);
      }
      userInfoMapper.updateByPrimaryKeySelective(update);
      userAccountMsgNotificationService.bindingSuccess(uid, MsgAccountDetailFactory.TYPE_TB);
   }
   @Override
@@ -682,6 +762,10 @@
      }
      userInfoMapper.updateByPrimaryKeySelective(update);
      userExtraTaoBaoInfoService.unBindUid(uid);
      userAccountMsgNotificationService.unBindingSuccess(uid, MsgAccountDetailFactory.TYPE_TB);
   }
   @Override
@@ -714,6 +798,8 @@
         updateUserInfo.setPortrait(Constant.systemCommonConfig.getDefaultPortrait());
      }
      userInfoMapper.updateByPrimaryKeySelective(updateUserInfo);
      userAccountMsgNotificationService.changeBindingSuccess(uid, MsgAccountDetailFactory.TYPE_WX);
   }
   @Override
@@ -725,19 +811,10 @@
      // 备份用户信息
      UserInfo user = userInfoMapper.selectByPrimaryKey(uid);
      // 备份资金明细
      List<AccountDetails> accountDetailsList = accountDetailsMapper.selectByUid(uid);
      // 备份红包信息
      List<HongBao> hongBaoList = hongBaoMapper.selectByUid(uid);
      // 备份订单,子订单信息
      List<Order> orderList = orderMapper.selectByUid(uid);
      List<OrderItem> orderItemList = orderItemMapper.selectByUid(uid);
      // TODO 备份资金明细
      // 备份邀请关系
      List<ThreeSale> threeSaleList = threeSaleMapper.selectByUid(uid);
      // 备份分享赚
      List<PidOrder> pidOrderList = pidOrderMapper.selectByUid(uid);
      List<ThreeSale> threeSaleList = new ArrayList<>();
      FileWriter fw = null;
      try {
@@ -747,23 +824,8 @@
         fw.write("#UserInfo" + "\r\n");
         fw.write(JsonUtil.getSimpleGsonWithDate().toJson(user) + "\r\n");
         fw.write("#AccountDetails" + "\r\n");
         fw.write(JsonUtil.getSimpleGsonWithDate().toJson(accountDetailsList) + "\r\n");
         fw.write("#HongBao" + "\r\n");
         fw.write(JsonUtil.getSimpleGsonWithDate().toJson(hongBaoList) + "\r\n");
         fw.write("#Order" + "\r\n");
         fw.write(JsonUtil.getSimpleGsonWithDate().toJson(orderList) + "\r\n");
         fw.write("#OrderItem" + "\r\n");
         fw.write(JsonUtil.getSimpleGsonWithDate().toJson(orderItemList) + "\r\n");
         fw.write("#ThreeSale" + "\r\n");
         fw.write(JsonUtil.getSimpleGsonWithDate().toJson(threeSaleList) + "\r\n");
         fw.write("#PidOrder" + "\r\n");
         fw.write(JsonUtil.getSimpleGsonWithDate().toJson(pidOrderList) + "\r\n");
         fw.close();