admin
2020-05-20 98b1a0affd69bbe63223c21fdd2c404e8bedfccb
fanli/src/main/java/com/yeshi/fanli/controller/client/v1/UserInfoController.java
@@ -40,21 +40,27 @@
import com.yeshi.fanli.dto.HongBaoDTO;
import com.yeshi.fanli.dto.money.AccountDetails;
import com.yeshi.fanli.dto.order.OrderItem;
import com.yeshi.fanli.dto.user.UserInviteLevelEnum;
import com.yeshi.fanli.dto.wx.WXAccountInfoDTO;
import com.yeshi.fanli.entity.AppVersionInfo;
import com.yeshi.fanli.entity.accept.AcceptData;
import com.yeshi.fanli.entity.bus.user.AccountMessage;
import com.yeshi.fanli.entity.bus.user.BindRemind;
import com.yeshi.fanli.entity.bus.user.BindingAccount;
import com.yeshi.fanli.entity.bus.user.Extract;
import com.yeshi.fanli.entity.bus.user.ExtractRecord;
import com.yeshi.fanli.entity.bus.user.LostOrder;
import com.yeshi.fanli.entity.bus.user.PreviewInfo.PreviewEnum;
import com.yeshi.fanli.entity.bus.user.SMSHistory;
import com.yeshi.fanli.entity.bus.user.ThreeSale;
import com.yeshi.fanli.entity.bus.user.ThreeSaleExtraInfo;
import com.yeshi.fanli.entity.bus.user.UserActiveLog;
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.entity.bus.user.UserInfoExtra;
import com.yeshi.fanli.entity.bus.user.WeiXinUser;
import com.yeshi.fanli.entity.bus.user.UserInfoModifyRecord.ModifyTypeEnum;
import com.yeshi.fanli.entity.bus.user.WeiXinUser;
import com.yeshi.fanli.entity.bus.user.vip.GiveVIPApplyInfo;
import com.yeshi.fanli.entity.bus.user.vip.UserLevelEnum;
import com.yeshi.fanli.entity.common.AdminUser;
import com.yeshi.fanli.entity.common.Config;
import com.yeshi.fanli.entity.goods.CollectionGoodsV2;
@@ -62,35 +68,40 @@
import com.yeshi.fanli.entity.money.UserMoneyDetail;
import com.yeshi.fanli.entity.order.HongBaoOrder;
import com.yeshi.fanli.entity.system.BusinessSystem;
import com.yeshi.fanli.entity.system.ConfigKeyEnum;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBriefExtra;
import com.yeshi.fanli.exception.BindingAccountException;
import com.yeshi.fanli.exception.goods.CollectionGoodsException;
import com.yeshi.fanli.exception.taobao.TaoKeApiException;
import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException;
import com.yeshi.fanli.exception.user.BindingAccountException;
import com.yeshi.fanli.exception.user.UserCustomSettingsException;
import com.yeshi.fanli.exception.user.UserInfoException;
import com.yeshi.fanli.exception.user.UserInfoExtraException;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.AdminUserService;
import com.yeshi.fanli.service.inter.common.JumpDetailV2Service;
import com.yeshi.fanli.service.inter.config.AppVersionService;
import com.yeshi.fanli.service.inter.config.BusinessSystemService;
import com.yeshi.fanli.service.inter.config.ConfigService;
import com.yeshi.fanli.service.inter.count.HongBaoV2CountService;
import com.yeshi.fanli.service.inter.goods.CollectionGoodsV2Service;
import com.yeshi.fanli.service.inter.hongbao.HongBaoManageService;
import com.yeshi.fanli.service.inter.hongbao.HongBaoV2Service;
import com.yeshi.fanli.service.inter.hongbao.ThreeSaleExtraInfoSerivce;
import com.yeshi.fanli.service.inter.hongbao.ThreeSaleSerivce;
import com.yeshi.fanli.service.inter.money.UserMoneyDetailService;
import com.yeshi.fanli.service.inter.money.extract.BindingAccountService;
import com.yeshi.fanli.service.inter.money.extract.ExtractRecordService;
import com.yeshi.fanli.service.inter.money.extract.ExtractService;
import com.yeshi.fanli.service.inter.order.HongBaoOrderService;
import com.yeshi.fanli.service.inter.order.HongBaoV2Service;
import com.yeshi.fanli.service.inter.order.LostOrderService;
import com.yeshi.fanli.service.inter.order.OrderService;
import com.yeshi.fanli.service.inter.order.config.HongBaoManageService;
import com.yeshi.fanli.service.inter.redpack.RedPackBalanceService;
import com.yeshi.fanli.service.inter.redpack.RedPackForbidService;
import com.yeshi.fanli.service.inter.tlj.UserTaoLiJinDetailService;
import com.yeshi.fanli.service.inter.user.AccountMessageService;
import com.yeshi.fanli.service.inter.user.BindingAccountService;
import com.yeshi.fanli.service.inter.user.ExtractRecordService;
import com.yeshi.fanli.service.inter.user.ExtractService;
import com.yeshi.fanli.service.inter.user.BindRemindService;
import com.yeshi.fanli.service.inter.user.MaskKeyService;
import com.yeshi.fanli.service.inter.user.PreviewInfoService;
import com.yeshi.fanli.service.inter.user.ShamUserService;
import com.yeshi.fanli.service.inter.user.SpreadUserImgService;
import com.yeshi.fanli.service.inter.user.UserAccountService;
@@ -99,10 +110,19 @@
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.UserMoneyDetailService;
import com.yeshi.fanli.service.inter.user.UserRankService;
import com.yeshi.fanli.service.inter.user.UserShareGoodsRecordService;
import com.yeshi.fanli.service.inter.user.invite.TeamFansInfoService;
import com.yeshi.fanli.service.inter.user.invite.ThreeSaleExtraInfoSerivce;
import com.yeshi.fanli.service.inter.user.invite.ThreeSaleSerivce;
import com.yeshi.fanli.service.inter.user.invite.UserInviteService;
import com.yeshi.fanli.service.inter.user.vip.GiveVIPApplyInfoService;
import com.yeshi.fanli.service.inter.user.vip.UserVIPInfoService;
import com.yeshi.fanli.service.inter.user.vip.UserVipConfigService;
import com.yeshi.fanli.service.manger.user.UserLevelManager;
import com.yeshi.fanli.util.AESUtil;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.FilePathEnum;
import com.yeshi.fanli.util.GsonUtil;
import com.yeshi.fanli.util.HongBaoUtil;
import com.yeshi.fanli.util.RedisManager;
@@ -121,6 +141,7 @@
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
import com.yeshi.fanli.util.wx.WXLoginUtil;
import com.yeshi.fanli.vo.user.MineInfoVO;
import com.yeshi.fanli.vo.user.UserInfoExtraVO;
import com.yeshi.fanli.vo.user.UserSettingsVO;
@@ -221,9 +242,44 @@
   @Resource
   private UserInfoModifyRecordService userInfoModifyRecordService;
   private static final String PASSWORD_MAX_ERROR = "password_max_error";
   private static final String EXTRACT_MIN_MONEY = "extract_min_money";
   private static final String EXTRACT_MAX_MONEY = "extract_max_money";
   @Resource
   private BindRemindService bindRemindService;
   @Resource
   private RedPackBalanceService redPackBalanceService;
   @Resource
   private UserRankService userRankService;
   @Resource
   private UserVIPInfoService userVIPInfoService;
   @Resource
   private UserVipConfigService userVipConfigService;
   @Resource
   private RedPackForbidService redPackForbidService;
   @Resource
   private UserInviteService userInviteService;
   @Resource
   private TeamFansInfoService teamFansInfoService;
   @Resource
   private UserLevelManager userLevelManager;
   @Resource
   private JumpDetailV2Service jumpDetailV2Service;
   @Resource
   private GiveVIPApplyInfoService giveVIPApplyInfoService;
   @Resource
   private PreviewInfoService previewInfoService;
   private static final String EXTRACT_MIN_MONEY = ConfigKeyEnum.extractMoneyMin.getKey();
   private static final String EXTRACT_MAX_MONEY = ConfigKeyEnum.extractMoneyMAX.getKey();
   /**
    * 获取用户信息
@@ -265,6 +321,8 @@
            userActiveLog.setVersionCode(acceptData.getVersion());
            userActiveLog.setOsVersion(acceptData.getOsVersion());
            userActiveLog.setDeviceType(acceptData.getDeviceType());
            userActiveLog.setDevice(acceptData.getDevice());
            userActiveLogService.addUserActiveLog(userActiveLog);
            outUserInfo(acceptData, out, remotIP, find, acceptData.getDevice());
@@ -293,7 +351,9 @@
         int loginType = form.getLoginType();
         // WeiXinUserParam wxParam = null;
         // 如果是微信登陆,那需要先获取到微信的unionid
         WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code);
         WXAccountInfoDTO account = Constant.getWXAccount(acceptData.getPlatform(), acceptData.getVersion());
         WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code, account.getAppId(),
               account.getAppSecret());
         if (loginType == Constant.WEIXIN && StringUtil.isNullOrEmpty(form.getWxUnionId())) {
            // wxParam = WXinUtil.getWxParam(code);
            if (weiXinUser == null) {
@@ -333,7 +393,7 @@
            form.setPortrait(weiXinUser.getHeadimgurl());
            String wxHeadImg = COSManager.getInstance()
                  .uploadFile(HttpUtil.getAsInputStream(weiXinUser.getHeadimgurl()),
                        Constant.WXHEADURL + UUID.randomUUID().toString())
                        FilePathEnum.userPortrait.getPath() + UUID.randomUUID().toString())
                  .getUrl();
            form.setWxPic(wxHeadImg);
            form.setNickName(weiXinUser.getNickname());
@@ -388,7 +448,11 @@
                                     * StringUtil.isNullOrEmpty(form
                                     * .getWxOpenId())
                                     */) {
            WeiXinUser xinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code);
            WXAccountInfoDTO account = Constant.getWXAccount(acceptData.getPlatform(), acceptData.getVersion());
            WeiXinUser xinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code, account.getAppId(),
                  account.getAppSecret());
            if (xinUser == null) {
               out.print(JsonUtil.loadFalseResult("登录失败"));
               return;
@@ -400,7 +464,7 @@
            form.setWxName(xinUser.getNickname());
            String wxHeadImg = COSManager.getInstance()
                  .uploadFile(HttpUtil.getAsInputStream(xinUser.getHeadimgurl()),
                        Constant.WXHEADURL + UUID.randomUUID().toString())
                        FilePathEnum.userPortrait + UUID.randomUUID().toString())
                  .getUrl();
            form.setWxPic(wxHeadImg);
         } else if (formLoginType == Constant.TAOBAO) {
@@ -562,7 +626,7 @@
         data.put("inviteList", String.format("http://%s/%s/client/share/friends_new_online.html",
               Constant.systemCommonConfig.getProjectHost(), Constant.systemCommonConfig.getProjectName()));
      else
         data.put("inviteList", configService.get("team_list"));
         data.put("inviteList", configService.get(ConfigKeyEnum.teamList.getKey()));
      // 界面状态
      UserSettingsVO mySettings = null;
@@ -601,7 +665,9 @@
            welfareCenterNews = userInfoExtra.getCouponNews();
         }
         if (userInfoExtra.getInviteCode() != null && userInfoExtra.getInviteCode().trim().length() > 0) {
         if (!StringUtil.isNullOrEmpty(userInfoExtra.getInviteCodeVip())) {
            invitCode = userInfoExtra.getInviteCodeVip();
         } else {
            invitCode = userInfoExtra.getInviteCode();
         }
      }
@@ -615,13 +681,8 @@
      final UserInfo uuser = user;
      ThreadUtil.run(new Runnable() {
         public void run() {
            try {
               // 获取邀请码:若无邀请码且存在有效的队员关系 则自动生成邀请码
               userInfoExtraService.getUserInviteCode(uuser.getId());
            } catch (UserInfoExtraException e) {
               e.printStackTrace();
            }
            // 获取邀请码:若无邀请码且存在有效的队员关系 则自动生成邀请码
            userInfoExtraService.getInviteCodeByUid(uuser.getId());
            LogHelper.userInfo(GsonUtil.toJsonExpose(uuser));
            uuser.setLastLoginIp(remotIP);
@@ -647,7 +708,9 @@
      }
      int loginType = form.getLoginType();
      if (loginType == Constant.WEIXIN) {
         WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code);
         WXAccountInfoDTO account = Constant.getWXAccount(acceptData.getPlatform(), acceptData.getVersion());
         WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code, account.getAppId(),
               account.getAppSecret());
         if (weiXinUser == null) {
            out.print(JsonUtil.loadFalseResult("绑定失败,用户异常请重试!"));
@@ -668,7 +731,7 @@
         find.setWxUnionId(weiXinUser.getUnionid());
         String wxHeadImg = COSManager.getInstance()
               .uploadFile(HttpUtil.getAsInputStream(weiXinUser.getHeadimgurl()),
                     Constant.WXHEADURL + UUID.randomUUID().toString())
                     FilePathEnum.userPortrait.getPath() + UUID.randomUUID().toString())
               .getUrl();
         find.setWxPic(wxHeadImg);
      } else { // 绑定淘宝
@@ -760,8 +823,8 @@
      data.put("maxError", 1);
      String minMoney = configService.get(EXTRACT_MIN_MONEY); // 单笔提现的最小金额
      String maxMoney = configService.get(EXTRACT_MAX_MONEY); // 单笔提现的最小金额
      String maxDayMoney = configService.get("extract_money_day"); // 每日最大提现金额
      int maxDayCount = Integer.parseInt(configService.get("extract_count_day"));
      String maxDayMoney = configService.get(ConfigKeyEnum.extractMoneyDay.getKey()); // 每日最大提现金额
      int maxDayCount = Integer.parseInt(configService.get(ConfigKeyEnum.extractDayCount.getKey()));
      ExtractRecord extractRecord = extractRecordService.getExtractRecordByUid(uid);
      boolean canExtract = true;
      String errorMsg = "";
@@ -822,8 +885,8 @@
      }
      String minMoney = configService.get(EXTRACT_MIN_MONEY); // 单笔提现的最小金额
      String maxDayMoney = configService.get("extract_money_day"); // 每日最大提现金额
      int maxDayCount = Integer.parseInt(configService.get("extract_count_day"));
      String maxDayMoney = configService.get(ConfigKeyEnum.extractMoneyDay.getKey()); // 每日最大提现金额
      int maxDayCount = Integer.parseInt(configService.get(ConfigKeyEnum.extractDayCount.getKey()));
      ExtractRecord extractRecord = extractRecordService.getExtractRecordByUid(uid);
      boolean canExtract = true;
      String errorMsg = "";
@@ -1105,11 +1168,13 @@
         return;
      }
      // 判断手机验证码的正确性
      String oldCode = redisManager.getSMSVCode(user.getPhone(), SMSHistory.TYPE_LOGIN);
      if (StringUtil.isNullOrEmpty(oldCode) || !oldCode.equalsIgnoreCase(vcode)) {
         out.print(JsonUtil.loadFalseResult(90001, "验证码错误"));
         return;
      if (!Constant.IS_TEST) {
         // 判断手机验证码的正确性
         String oldCode = redisManager.getSMSVCode(user.getPhone(), SMSHistory.TYPE_LOGIN);
         if (StringUtil.isNullOrEmpty(oldCode) || !oldCode.equalsIgnoreCase(vcode)) {
            out.print(JsonUtil.loadFalseResult(90001, "验证码错误"));
            return;
         }
      }
      BusinessSystem system = businessSystemService.getBusinessSystemCache(acceptData.getPlatform(),
@@ -1180,7 +1245,7 @@
               }
               long[] targetUids = new long[] { 3L, 4L };
               Config config = configService.getConfig("extract_code_email_from");
               Config config = configService.getConfig(ConfigKeyEnum.extractCodeEmailFrom.getKey());
               String[] sts = config.getValue().split(",");
               String account = sts[0];
               String pwd = sts[1];
@@ -1199,9 +1264,9 @@
      } else if (etype == 3) {
         out.print(JsonUtil.loadFalseResult("提现金额大于我的红包"));
      } else if (etype == 111) {
         out.print(JsonUtil.loadFalseResult("更换了手机号后7天内不允许提现"));
         out.print(JsonUtil.loadFalseResult("修改手机号后,7天内无法提现"));
      } else if (etype == 110) {
         out.print(JsonUtil.loadFalseResult("有维权订单尚未扣款"));
         out.print(JsonUtil.loadFalseResult("有售后订单尚未扣款"));
      }
   }
@@ -1638,19 +1703,17 @@
         JSONObject resultData = new JSONObject();
         if (type == 1) {
            resultData = threeSaleSerivce.getMyFirstTeam((page - 1) * pageSize, pageSize, uid, null);
            resultData = threeSaleSerivce.getMyFirstTeam((page - 1) * pageSize, pageSize, uid);
         } else if (type == 2) {
            resultData = threeSaleSerivce.getMySecondTeam((page - 1) * pageSize, pageSize, uid, null);
            resultData = threeSaleSerivce.getMySecondTeam((page - 1) * pageSize, pageSize, uid);
         }
         // 安卓系统返回所有数据
         String platform = acceptData.getPlatform();
         if ("android".equalsIgnoreCase(platform)) {
            long firstTeam = threeSaleSerivce.countFirstTeam(uid, 1);
            long firstTeamTotal = threeSaleSerivce.countFirstTeam(uid, null);
            long firstTeam = threeSaleSerivce.countFirstTeam(uid);
            long secondTeam = threeSaleSerivce.countSecondTeam(uid, 1);
            long secondTeamTotal = threeSaleSerivce.countSecondTeam(uid, null);
            long secondTeam = threeSaleSerivce.countSecondTeam(uid);
            JSONObject bossData = null;
            ThreeSale threeSale = threeSaleSerivce.getMyBoss(uid);
@@ -1668,31 +1731,29 @@
               bossData.put("inviteTime", "邀请时间: " + sdf.format(inviteTime));
            }
            String helpLink = configService.get("team_help_url");
            String helpLink = configService.get(ConfigKeyEnum.teamHelpUrl.getKey());
            if (helpLink == null) {
               helpLink = "";
            }
            boolean hasCode = false;
            String inviteCode = userInfoExtraService.getUserInviteCode(uid);
            String inviteCode = userInfoExtraService.getInviteCodeByUid(uid);
            if (inviteCode != null && inviteCode.trim().length() > 0) {
               hasCode = true; // 已有邀请码
            } else {
               // 邀请激活链接
               resultData.put("activationlink", configService.get("invite_activation_url"));
               resultData.put("activationlink", configService.get(ConfigKeyEnum.inviteActivationUrl.getKey()));
            }
            resultData.put("hasCode", hasCode);
            resultData.put("helpLink", helpLink);
            resultData.put("firstTeam", firstTeam);
            resultData.put("firstTeamTotal", firstTeamTotal);
            resultData.put("firstTeamTotal", firstTeam);
            resultData.put("secondTeam", secondTeam);
            resultData.put("secondTeamTotal", secondTeamTotal);
            resultData.put("secondTeamTotal", secondTeam);
            resultData.put("boss", bossData);
         }
         out.print(JsonUtil.loadTrueResult(resultData));
      } catch (UserInfoExtraException e) {
         out.print(JsonUtil.loadFalseResult(e.getMsg()));
      } catch (Exception e) {
         out.print(JsonUtil.loadFalseResult("统计失败"));
         e.printStackTrace();
@@ -1715,17 +1776,17 @@
         JSONObject resultData = new JSONObject();
         if (type == 1) {
            resultData = threeSaleSerivce.getMyFirstTeam((page - 1) * pageSize, pageSize, uid, 1);
            resultData = threeSaleSerivce.getMyFirstTeam((page - 1) * pageSize, pageSize, uid);
         } else if (type == 2) {
            resultData = threeSaleSerivce.getMySecondTeam((page - 1) * pageSize, pageSize, uid, 1);
            resultData = threeSaleSerivce.getMySecondTeam((page - 1) * pageSize, pageSize, uid);
         }
         // 安卓系统返回所有数据
         String platform = acceptData.getPlatform();
         if ("android".equalsIgnoreCase(platform)) {
            long firstTeam = threeSaleSerivce.countFirstTeam(uid, 1);
            long firstTeam = threeSaleSerivce.countFirstTeam(uid);
            long secondTeam = threeSaleSerivce.countSecondTeam(uid, 1);
            long secondTeam = threeSaleSerivce.countSecondTeam(uid);
            JSONObject bossData = null;
            ThreeSale threeSale = threeSaleSerivce.getMyBoss(uid);
@@ -1743,18 +1804,18 @@
               bossData.put("inviteTime", "邀请时间: " + sdf.format(inviteTime));
            }
            String helpLink = configService.get("team_help_url");
            String helpLink = configService.get(ConfigKeyEnum.teamHelpUrl.getKey());
            if (helpLink == null) {
               helpLink = "";
            }
            boolean hasCode = false;
            String inviteCode = userInfoExtraService.getUserInviteCode(uid);
            String inviteCode = userInfoExtraService.getInviteCodeByUid(uid);
            if (inviteCode != null && inviteCode.trim().length() > 0) {
               hasCode = true; // 已有邀请码
            } else {
               // 邀请激活链接
               resultData.put("activationlink", configService.get("invite_activation_url"));
               resultData.put("activationlink", configService.get(ConfigKeyEnum.inviteActivationUrl.getKey()));
            }
            resultData.put("hasCode", hasCode);
@@ -1764,8 +1825,6 @@
            resultData.put("boss", bossData);
         }
         out.print(JsonUtil.loadTrueResult(resultData));
      } catch (UserInfoExtraException e) {
         out.print(JsonUtil.loadFalseResult(e.getMsg()));
      } catch (Exception e) {
         out.print(JsonUtil.loadFalseResult("统计失败"));
         e.printStackTrace();
@@ -1782,11 +1841,9 @@
   @RequestMapping(value = "countMyTeam", method = RequestMethod.POST)
   public void countMyTeam(AcceptData acceptData, long uid, PrintWriter out) {
      try {
         long firstTeam = threeSaleSerivce.countFirstTeam(uid, 1);
         long firstTeamTotal = threeSaleSerivce.countFirstTeam(uid, null);
         long firstTeam = threeSaleSerivce.countFirstTeam(uid);
         long secondTeam = threeSaleSerivce.countSecondTeam(uid, 1);
         long secondTeamTotal = threeSaleSerivce.countSecondTeam(uid, null);
         long secondTeam = threeSaleSerivce.countSecondTeam(uid);
         JSONObject bossData = new JSONObject();
         ThreeSale threeSale = threeSaleSerivce.getMyBoss(uid);
         if (threeSale != null) {
@@ -1804,31 +1861,29 @@
         JSONObject resultData = new JSONObject();
         String helpLink = configService.get("team_help_url");
         String helpLink = configService.get(ConfigKeyEnum.teamHelpUrl.getKey());
         if (helpLink == null) {
            helpLink = "";
         }
         resultData.put("helpLink", helpLink);
         resultData.put("firstTeam", firstTeam);
         resultData.put("firstTeamTotal", firstTeamTotal);
         resultData.put("firstTeamTotal", firstTeam);
         resultData.put("secondTeam", secondTeam);
         resultData.put("secondTeamTotal", secondTeamTotal);
         resultData.put("secondTeamTotal", secondTeam);
         resultData.put("boss", bossData);
         boolean hasCode = false;
         String inviteCode = userInfoExtraService.getUserInviteCode(uid);
         String inviteCode = userInfoExtraService.getInviteCodeByUid(uid);
         if (inviteCode != null && inviteCode.trim().length() > 0) {
            hasCode = true; // 已有邀请码
         } else {
            // 邀请激活链接
            resultData.put("activationlink", configService.get("invite_activation_url"));
            resultData.put("activationlink", configService.get(ConfigKeyEnum.inviteActivationUrl.getKey()));
         }
         resultData.put("hasCode", hasCode);
         out.print(JsonUtil.loadTrueResult(resultData));
      } catch (UserInfoExtraException e) {
         out.print(JsonUtil.loadFalseResult(e.getMsg()));
      } catch (Exception e) {
         out.print(JsonUtil.loadFalseResult("统计失败"));
         e.printStackTrace();
@@ -1847,21 +1902,33 @@
    */
   @RequestMapping(value = "setextrainfo", method = RequestMethod.POST)
   public void setExtraInfo(AcceptData acceptData, long uid, long inviteId, String memoName, PrintWriter out) {
      List<ThreeSale> listThreeSale = threeSaleSerivce.listbyIdAndBossId(inviteId, uid, null);
      if (listThreeSale == null || listThreeSale.size() == 0) {
      ThreeSale threeSale = threeSaleSerivce.selectByPrimaryKey(inviteId);
      if (threeSale == null) {
         out.print(JsonUtil.loadFalseResult("该记录不存在"));
         return;
      }
      UserInfo worker = listThreeSale.get(0).getWorker();
      UserInfo worker = threeSale.getWorker();
      if (worker == null) {
         out.print(JsonUtil.loadFalseResult("该记录不存在"));
         return;
      }
      int type = 1;
      if (threeSale.getBoss().getId() != uid) {
         type = 2;
      }
      ThreeSaleExtraInfo extraInfo = threeSaleExtraInfoSerivce.getbyBossIdAndWorkerId(uid, worker.getId());
      if (extraInfo == null) {
         extraInfo = new ThreeSaleExtraInfo();
         Long bossUid = threeSale.getBoss().getId();
         if (uid == bossUid) {
            extraInfo.setType(1); // 直接
         } else {
            extraInfo.setType(2); // 间接
         }
         extraInfo.setWorker(worker);
         extraInfo.setNickname(memoName);
         extraInfo.setCreateTime(new Date());
@@ -1875,43 +1942,11 @@
         updateInfo.setUpdateTime(new Date());
         threeSaleExtraInfoSerivce.updateByPrimaryKeySelective(updateInfo);
      }
      // 更新粉丝记录信息
      teamFansInfoService.updateMemoName(worker.getId(), type, memoName);
      out.print(JsonUtil.loadTrueResult("保存成功"));
   }
   /**
    * 删除队员关系
    *
    * @param acceptData
    * @param uid
    * @param inviteId
    *            邀请id
    * @param out
    */
   @RequestMapping(value = "removethreesale", method = RequestMethod.POST)
   public void removethreesale(AcceptData acceptData, long uid, long inviteId, PrintWriter out) {
      try {
         List<ThreeSale> listThreeSale = threeSaleSerivce.listbyIdAndBossId(inviteId, uid, 1);
         if (listThreeSale == null || listThreeSale.size() == 0) {
            out.print(JsonUtil.loadFalseResult("操作数据无效"));
            return;
         }
         UserInfo worker = listThreeSale.get(0).getWorker();
         if (worker == null) {
            out.print(JsonUtil.loadFalseResult("操作数据无效"));
            return;
         }
         // 删除关系
         threeSaleSerivce.deleteByPrimaryKey(inviteId);
         // 删除备注
         threeSaleExtraInfoSerivce.deleteByBossIdAndWorkerId(uid, worker.getId());
         out.print(JsonUtil.loadTrueResult("删除成功"));
      } catch (Exception e) {
         out.print(JsonUtil.loadFalseResult("删除失败"));
         e.printStackTrace();
      }
   }
   /**
@@ -2004,17 +2039,17 @@
      try {
         String inviteCode = userInfoExtraService.getUserInviteCode(uid);
         String inviteCode = userInfoExtraService.getInviteCodeByUid(uid);
         JSONObject inviteData = new JSONObject();
         if (inviteCode == null || inviteCode.trim().length() == 0) {
            // 无邀请码
            inviteData.put("content", "邀请激活");
            inviteData.put("link", configService.get("invite_activation_url"));
            inviteData.put("link", configService.get(ConfigKeyEnum.inviteActivationUrl.getKey()));
         } else {
            // 已有邀请码
            inviteData.put("content", "邀请码");
            inviteData.put("link", configService.get("invite_activation_success_url"));
            inviteData.put("link", configService.get(ConfigKeyEnum.inviteActivationSuccessUrl.getKey()));
         }
         JSONObject data = new JSONObject();
@@ -2022,8 +2057,6 @@
         out.print(JsonUtil.loadTrueResult(data));
      } catch (UserInfoExtraException e) {
         out.print(JsonUtil.loadFalseResult(e.getMsg()));
      } catch (Exception e) {
         out.print(JsonUtil.loadFalseResult("获取失败"));
         e.printStackTrace();
@@ -2064,6 +2097,7 @@
         userActiveLog.setVersionCode(acceptData.getVersion());
         userActiveLog.setOsVersion(acceptData.getOsVersion());
         userActiveLog.setDeviceType(acceptData.getDeviceType());
         userActiveLog.setDevice(acceptData.getDevice());
         userActiveLogService.addUserActiveLog(userActiveLog);
         // 处理用户信息
@@ -2096,6 +2130,10 @@
            mySettings.setNoInvitationBonus(0);
         }
         if (mySettings.getNoDisplayPhoneNum() == null) {
            mySettings.setNoDisplayPhoneNum(0);
         }
         if (mySettings.getOpenSpreadHongBao() == null) {
            if (userTaoLiJinDetailService.countDetail(uid) > 0) {
               mySettings.setOpenSpreadHongBao(1);
@@ -2105,6 +2143,7 @@
         }
         data.put("moduleState", mySettings);
         boolean tailor = false;
         int welfareCenterNews = 0;
         String invitCode = null;
         UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
@@ -2112,8 +2151,11 @@
            if (userInfoExtra.getCouponNews() != null) {
               welfareCenterNews = userInfoExtra.getCouponNews();
            }
            if (userInfoExtra.getInviteCode() != null && userInfoExtra.getInviteCode().trim().length() > 0) {
            // vip邀请码优先
            if (!StringUtil.isNullOrEmpty(userInfoExtra.getInviteCodeVip())) {
               invitCode = userInfoExtra.getInviteCodeVip();
            } else if (!StringUtil.isNullOrEmpty(userInfoExtra.getInviteCode())) {
               tailor = true;
               invitCode = userInfoExtra.getInviteCode();
            }
@@ -2135,25 +2177,142 @@
               if (!StringUtil.isNullOrEmpty(userInfoExtra.getWeiXin()))
                  userInfo.setWeiXin(userInfoExtra.getWeiXin());
            }
            // 二维码
            userInfo.setErCode(userInfoExtra.getErCode());
         }
         // 显示邀请码特制入口
         data.put("tailor", tailor);
         // 1.6.5 之后返回 微信号提示
         if (VersionUtil.greaterThan_1_6_5(acceptData.getPlatform(), acceptData.getVersion()))
            userInfo.setWeiXinTip("添加微信号后,你的邀请人和一级队员可以通过微信与你建立联系。");
            userInfo.setWeiXinTip("添加微信号后,你的邀请人和直接粉丝可以通过微信与你建立联系。");
         // 查询是否为VIP
         if (VersionUtil.greaterThan_2_0_5(acceptData.getPlatform(), acceptData.getVersion())) {
            userInfo.setVip(userVIPInfoService.isVIP(uid));
            boolean verifyForbid = redPackForbidService.verifyForbid(uid);
            data.put("redPackLock", verifyForbid);
         }
         data.put("user", JsonUtil.getConvertBigDecimalToStringBuilder(gsonBuilder).create().toJson(userInfo));
         data.put("invitCode", invitCode); // 邀请码
         if (!StringUtil.isNullOrEmpty(userInfoExtra.getInviteCodeVip()))
            data.put("invitCodeUpdated", true);// 邀请码是否已经修改过
         else
            data.put("invitCodeUpdated", false);
         data.put("welfareCenterNews", welfareCenterNews);// 福利中心消息
         data.put("vipLink", userVipConfigService.getValueByKey("vip_link"));// 超级会员升级链接
         // 2.0.1之后绑定手机号
         if (VersionUtil.greaterThan_2_0_1(acceptData.getPlatform(), acceptData.getVersion())) {
            boolean bindPhone = false;
            if (StringUtil.isNullOrEmpty(userInfo.getPhone()))
               bindPhone = bindRemindService.bindRemind(uid, BindRemind.TYPE_PHONE);
            data.put("bindPhone", bindPhone);
         }
         if (!StringUtil.isNullOrEmpty(invitCode)) {
            // 2.0.6 返回邀请人
            if (VersionUtil.greaterThan_2_0_6(acceptData.getPlatform(), acceptData.getVersion())) {
               String bossName = "";
               ThreeSale threeSale = threeSaleSerivce.getMyBoss(uid);
               if (threeSale != null && threeSale.getBoss() != null) {
                  bossName = threeSale.getBoss().getNickName();
               }
               data.put("bossName", bossName);
            }
         }
         if (VersionUtil.greaterThan_2_0_7(acceptData.getPlatform(), acceptData.getVersion())) {
            UserInviteLevelEnum level = null;
            // VIP预览信息
            if (VersionUtil.greaterThan_2_1_1(acceptData.getPlatform(), acceptData.getVersion())) {
               String redisContent = previewInfoService.getRedisContent(uid, PreviewEnum.mineInfo);
               if (!StringUtil.isNullOrEmpty(redisContent)) {
                  MineInfoVO vo = new Gson().fromJson(redisContent, MineInfoVO.class);
                  if (vo != null) {
                     if (!StringUtil.isNullOrEmpty(vo.getBalance()))
                        userInfo.setMyHongBao(new BigDecimal(vo.getBalance()));
                     if (!StringUtil.isNullOrEmpty(vo.getLevel()))
                        for (UserInviteLevelEnum levelEnum : UserInviteLevelEnum.values()) {
                           if (levelEnum.name().equals(vo.getLevel())) {
                              level = levelEnum;
                              break;
                           }
                        }
                  }
               }
            }
            if (level == null) {
               if (VersionUtil.greaterThan_2_1(acceptData.getPlatform(), acceptData.getVersion())) {
                  level = userInviteService.getUserInviteLevelNew(uid);
               } else {
                  level = userInviteService.getUserInviteLevel(uid);
               }
            }
            JSONObject inviteLevel = new JSONObject();
            inviteLevel.put("level", level.name());
            inviteLevel.put("link", level.getLink());
            data.put("inviteLevel", inviteLevel);
         }
         if (VersionUtil.greaterThan_2_1_1(acceptData.getPlatform(), acceptData.getVersion())) {
            data.put("fansCountLink", configService.get(ConfigKeyEnum.teamStatisticsLink.getKey()));
            // 会员动作
            // 查询是否为超级会员,是的话返回超会管理链接
            UserLevelEnum level = userLevelManager.getUserLevel(uid);
            JSONObject vipAction = null;
            String managerLink = userVipConfigService.getValueByKey("vip_manager_link");
            if ((level == UserLevelEnum.superVIP || level == UserLevelEnum.tearcher)
                  && !StringUtil.isNullOrEmpty(managerLink)) {
               vipAction = new JSONObject();
               vipAction.put("name", "超会管理");
               vipAction.put("jumpDetail",
                     jumpDetailV2Service.getByTypeCache("web",
                           acceptData.getPlatform().equalsIgnoreCase("android") ? 1 : 2,
                           Integer.parseInt(acceptData.getVersion())));
               JSONObject params = new JSONObject();
               params.put("url", userVipConfigService.getValueByKey("vip_manager_link"));
               vipAction.put("params", params);
            } else {
               // 查询是否可以提交会员申请,是的话返回资料填写页面
               List<GiveVIPApplyInfo> list = giveVIPApplyInfoService.listByStateAndTargetUid(uid,
                     GiveVIPApplyInfo.STATE_NO_INFO, 1, 20);
               if (list != null && list.size() > 0) {
                  String link = userVipConfigService.getValueByKey("apply_vip_upload_info_link");
                  if (!StringUtil.isNullOrEmpty(link)) {
                     vipAction = new JSONObject();
                     vipAction.put("name", "申请会员");
                     vipAction.put("jumpDetail",
                           jumpDetailV2Service.getByTypeCache("web",
                                 acceptData.getPlatform().equalsIgnoreCase("android") ? 1 : 2,
                                 Integer.parseInt(acceptData.getVersion())));
                     JSONObject params = new JSONObject();
                     params.put("url", link.replace("[ID]", list.get(0).getId()));
                     vipAction.put("params", params);
                  }
               }
            }
            if (vipAction != null)
               data.put("vipAction", vipAction);
         }
         data.put("user", JsonUtil.getConvertBigDecimalToStringBuilder(gsonBuilder).create().toJson(userInfo));
         out.print(JsonUtil.loadTrueResult(data));
         final UserInfo uuser = userInfo;
         ThreadUtil.run(new Runnable() {
            public void run() {
               try {
                  // 获取邀请码:若无邀请码且存在有效的队员关系 则自动生成邀请码
                  userInfoExtraService.getUserInviteCode(uuser.getId());
               } catch (UserInfoExtraException e) {
                  e.printStackTrace();
               }
               // 获取邀请码:若无邀请码且存在有效的队员关系 则自动生成邀请码
               userInfoExtraService.getInviteCodeByUid(uuser.getId());
               // 更新用户附加信息,老用户不存在的需要添加
               try {
@@ -2168,7 +2327,7 @@
         out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
      } catch (Exception e) {
         out.print(JsonUtil.loadFalseResult("获取失败"));
         e.printStackTrace();
         LogHelper.errorDetailInfo(e);
      }
   }
@@ -2259,7 +2418,7 @@
    */
   @RequestMapping(value = "saveInfo")
   public void saveInfo(AcceptData acceptData, String nickName, String weiXin, Integer sex, Long uid,
         PrintWriter out) {
         String inviteCode, MultipartFile qrCodeFile, HttpServletRequest request, PrintWriter out) {
      try {
         if (uid == null) {
            out.print(JsonUtil.loadFalseResult("用户未登录"));
@@ -2312,6 +2471,29 @@
               userInfoModifyRecordService.addModifyRecord(uid, ModifyTypeEnum.gender, sex + "");
            }
         }
         // 修改邀请码
         if (!StringUtil.isNullOrEmpty(inviteCode)) {// 邀请码不为空
            inviteCode = inviteCode.trim();
            if (inviteCode.length() >= 4 && inviteCode.length() <= 12) {
               try {
                  userInfoExtraService.updateInviteCodeVip(inviteCode, uid);
                  out.print(JsonUtil.loadTrueResult("保存成功"));
                  return;
               } catch (UserInfoExtraException e) {
                  out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMessage()));
               }
            } else {
               out.print(JsonUtil.loadFalseResult(1, "邀请码必须为4到12位"));
               return;
            }
         }
         // 二维码
         if (qrCodeFile != null) {
            userInfoExtraService.uploadERCode(qrCodeFile, uid);
         }
         out.print(JsonUtil.loadTrueResult("保存成功"));
      } catch (UserInfoException e) {
         out.print(JsonUtil.loadFalseResult(e.getMsg()));