admin
2019-12-19 833ec62ccef409ddeee5594af855ea050060257d
fanli/src/main/java/com/yeshi/fanli/controller/client/v1/UserInfoController.java
@@ -40,9 +40,11 @@
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.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;
@@ -53,6 +55,7 @@
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.UserInfoModifyRecord.ModifyTypeEnum;
import com.yeshi.fanli.entity.bus.user.WeiXinUser;
import com.yeshi.fanli.entity.common.AdminUser;
import com.yeshi.fanli.entity.common.Config;
@@ -63,10 +66,10 @@
import com.yeshi.fanli.entity.system.BusinessSystem;
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;
@@ -77,18 +80,20 @@
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.ShamUserService;
import com.yeshi.fanli.service.inter.user.SpreadUserImgService;
@@ -96,9 +101,13 @@
import com.yeshi.fanli.service.inter.user.UserActiveLogService;
import com.yeshi.fanli.service.inter.user.UserCustomSettingsService;
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.ThreeSaleExtraInfoSerivce;
import com.yeshi.fanli.service.inter.user.invite.ThreeSaleSerivce;
import com.yeshi.fanli.service.inter.user.vip.UserVIPInfoService;
import com.yeshi.fanli.util.AESUtil;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.GsonUtil;
@@ -108,8 +117,10 @@
import com.yeshi.fanli.util.ThreadUtil;
import com.yeshi.fanli.util.TimeUtil;
import com.yeshi.fanli.util.Utils;
import com.yeshi.fanli.util.VersionUtil;
import com.yeshi.fanli.util.account.UserUtil;
import com.yeshi.fanli.util.annotation.RequestSerializableByKey;
import com.yeshi.fanli.util.annotation.UserActive;
import com.yeshi.fanli.util.email.MailSenderUtil;
import com.yeshi.fanli.util.factory.AccountDetailsFactory;
import com.yeshi.fanli.util.factory.HongBaoFactory;
@@ -207,13 +218,30 @@
   @Resource
   private AccountMessageService accountMessageService;
   @Resource
   private MaskKeyService maskKeyService;
   @Resource
   private UserTaoLiJinDetailService userTaoLiJinDetailService;
   @Resource
   private UserInfoModifyRecordService userInfoModifyRecordService;
   @Resource
   private BindRemindService bindRemindService;
   @Resource
   private RedPackBalanceService redPackBalanceService;
   @Resource
   private UserRankService userRankService;
   @Resource
   private UserVIPInfoService userVIPInfoService;
   
   @Resource
   private RedPackForbidService redPackForbidService;
   private static final String PASSWORD_MAX_ERROR = "password_max_error";
   private static final String EXTRACT_MIN_MONEY = "extract_min_money";
@@ -259,6 +287,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());
@@ -287,7 +317,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) {
@@ -382,7 +414,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;
@@ -595,7 +631,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();
         }
      }
@@ -609,13 +647,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);
@@ -641,7 +674,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("绑定失败,用户异常请重试!"));
@@ -770,8 +805,8 @@
      data.put("canExtract", canExtract);
      data.put("extractErrorMsg", errorMsg);
      data.put("minMoney", minMoney);//单笔最低
      data.put("maxMoney", maxMoney);//单笔最高
      data.put("minMoney", minMoney);// 单笔最低
      data.put("maxMoney", maxMoney);// 单笔最高
      data.put("maxDayCount", maxDayCount);
      data.put("bindingAccountList", gson.toJson(filterBindingAccount(bindingAccountList)));
@@ -1078,7 +1113,7 @@
    * @param type
    * @param out
    */
   @RequestSerializableByKey(key="uid")
   @RequestSerializableByKey(key = "#uid")
   @RequestMapping(value = "extractmoneynew", method = RequestMethod.POST)
   public void extractMoneyNew(AcceptData acceptData, long uid, BigDecimal money, String vcode,
         HttpServletRequest request, int type, PrintWriter out) {
@@ -1193,9 +1228,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(Constant.znxConfig.getExtractWrongMsg()));
         out.print(JsonUtil.loadFalseResult("有售后订单尚未扣款"));
      }
   }
@@ -1343,7 +1378,7 @@
      // count>0 有消息
      int count = accountMessageService.getCanOpenCount(uid);
      out.print(JsonUtil.loadTrueResult(count));
      ThreadUtil.run(new Runnable() {
         @Override
         public void run() {
@@ -1359,35 +1394,33 @@
   @RequestMapping("collectionGoods")
   public void collectionGoods(AcceptData acceptData, long uid, long auctionId, int type, PrintWriter out) {
      CollectionGoodsV2 find = collectionGoodsV2Service.findByUidAndAuctionId(uid, auctionId);
      if (type == 1) {
         if (find != null) {
            out.print(JsonUtil.loadFalseResult(""));
            return;
         }
         try {
            TaoBaoGoodsBrief taoBaoGoodsBrief = redisManager.getTaoBaoGoodsBrief(auctionId);
            collectionGoodsV2Service.addCollection(uid, taoBaoGoodsBrief);
            out.print(JsonUtil.loadTrueResult("收藏成功"));
         } catch (TaobaoGoodsDownException e) {
            out.print(JsonUtil.loadFalseResult(1, "商品已下架"));
         } catch (CollectionGoodsException e1) {
            out.print(JsonUtil.loadFalseResult(e1.getCode(), e1.getMsg()));
         }
      } else {
         if (find == null) {
            out.print(JsonUtil.loadTrueResult("取消收藏成功"));
            return;
         } else {
      try {
         CollectionGoodsV2 find = collectionGoodsV2Service.findByUidAndAuctionId(uid, auctionId,
               Constant.SOURCE_TYPE_TAOBAO);
         if (type == 1) {
            if (find != null) {
               out.print(JsonUtil.loadFalseResult(""));
               return;
            }
            try {
               collectionGoodsV2Service.cancelCollectionByAuctionId(uid, auctionId);
               TaoBaoGoodsBrief taoBaoGoodsBrief = redisManager.getTaoBaoGoodsBrief(auctionId);
               collectionGoodsV2Service.addCollection(uid, taoBaoGoodsBrief);
               out.print(JsonUtil.loadTrueResult("收藏成功"));
            } catch (TaobaoGoodsDownException e) {
               out.print(JsonUtil.loadFalseResult(1, "商品已下架"));
            }
         } else {
            if (find == null) {
               out.print(JsonUtil.loadTrueResult("取消收藏成功"));
            } catch (CollectionGoodsException e) {
               out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
               return;
            } else {
               collectionGoodsV2Service.cancelCollectionByAuctionId(uid, auctionId, Constant.SOURCE_TYPE_TAOBAO);
               out.print(JsonUtil.loadTrueResult("取消收藏成功"));
            }
         }
      } catch (CollectionGoodsException e1) {
         out.print(JsonUtil.loadFalseResult(e1.getCode(), e1.getMsg()));
      }
   }
   /**
@@ -1400,30 +1433,40 @@
    * @param out
    */
   @RequestMapping("collectionGoodsJp")
   public void collectionGoodsJp(String callback, AcceptData acceptData, Long uid, Long auctionId, PrintWriter out) {
   public void collectionGoodsJp(String callback, AcceptData acceptData, Long uid, Long auctionId, Integer goodsType,
         PrintWriter out) {
      if (uid == null || auctionId == null) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(""));
         return;
      }
      CollectionGoodsV2 find = collectionGoodsV2Service.findByUidAndAuctionId(uid, auctionId);
      if (goodsType == null) {
         goodsType = Constant.SOURCE_TYPE_TAOBAO;
      }
      CollectionGoodsV2 find = collectionGoodsV2Service.findByUidAndAuctionId(uid, auctionId, goodsType);
      if (find == null) {
         // 添加收藏
         try {
            TaoBaoGoodsBrief taoBaoGoodsBrief = redisManager.getTaoBaoGoodsBrief(auctionId);
            collectionGoodsV2Service.addCollection(uid, taoBaoGoodsBrief);
            JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(1));
         } catch (TaobaoGoodsDownException e) {
            JsonUtil.printMode(out, callback, (JsonUtil.loadFalseResult(1, "商品已下架")));
         } catch (CollectionGoodsException e1) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(e1.getCode(), e1.getMsg()));
         if (goodsType == Constant.SOURCE_TYPE_JD) {
         } else if (goodsType == Constant.SOURCE_TYPE_PDD) {
         } else {
            try {
               TaoBaoGoodsBrief taoBaoGoodsBrief = redisManager.getTaoBaoGoodsBrief(auctionId);
               collectionGoodsV2Service.addCollection(uid, taoBaoGoodsBrief);
               JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(1));
            } catch (TaobaoGoodsDownException e) {
               JsonUtil.printMode(out, callback, (JsonUtil.loadFalseResult(1, "商品已下架")));
            } catch (CollectionGoodsException e1) {
               JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(e1.getCode(), e1.getMsg()));
            }
         }
      } else {
         // 取消收藏
         try {
            collectionGoodsV2Service.cancelCollectionByAuctionId(uid, auctionId);
            collectionGoodsV2Service.cancelCollectionByAuctionId(uid, auctionId, goodsType);
            JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult("取消收藏成功"));
         } catch (CollectionGoodsException e) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
@@ -1436,11 +1479,11 @@
   public void collectionGoodsList(AcceptData acceptData, long uid, int page, PrintWriter out) {
      List<CollectionGoodsV2> collectionGoodsList = collectionGoodsV2Service.getCollectionGoodsList(uid, page + 1,
            Constant.PAGE_SIZE);
            Constant.PAGE_SIZE, Constant.SOURCE_TYPE_TAOBAO);
      List<TaoBaoGoodsBriefExtra> list = new ArrayList<TaoBaoGoodsBriefExtra>();
      long count = collectionGoodsV2Service.getCollectionGoodsCount(uid);
      long count = collectionGoodsV2Service.getCollectionGoodsCount(uid, Constant.SOURCE_TYPE_TAOBAO);
      JSONObject data = new JSONObject();
      List<TaoBaoGoodsBrief> listTaoKeGoods = new ArrayList<TaoBaoGoodsBrief>();
@@ -1517,14 +1560,16 @@
   }
   @RequestMapping("deleteCollectionGoods")
   public void deleteCollectionGoods(AcceptData acceptData, String ids, Integer type, long uid, PrintWriter out) {
   public void deleteCollectionGoods(AcceptData acceptData, String ids, Integer type, long uid, Integer goodsType,
         PrintWriter out) {
      if (type != null && type == 1) {
         clearConllectionGoods(acceptData, uid, out);
      } else {
         if (!StringUtil.isNullOrEmpty(ids)) {
            Arrays.asList(ids.split(",")).parallelStream().forEach(auctionIdStr -> {
               try {
                  collectionGoodsV2Service.cancelCollectionByAuctionId(uid, Long.parseLong(auctionIdStr));
                  collectionGoodsV2Service.cancelCollectionByAuctionId(uid, Long.parseLong(auctionIdStr),
                        goodsType);
               } catch (Exception e) {
                  e.printStackTrace();
               }
@@ -1658,7 +1703,7 @@
            }
            boolean hasCode = false;
            String inviteCode = userInfoExtraService.getUserInviteCode(uid);
            String inviteCode = userInfoExtraService.getInviteCodeByUid(uid);
            if (inviteCode != null && inviteCode.trim().length() > 0) {
               hasCode = true; // 已有邀请码
            } else {
@@ -1675,8 +1720,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();
@@ -1733,7 +1776,7 @@
            }
            boolean hasCode = false;
            String inviteCode = userInfoExtraService.getUserInviteCode(uid);
            String inviteCode = userInfoExtraService.getInviteCodeByUid(uid);
            if (inviteCode != null && inviteCode.trim().length() > 0) {
               hasCode = true; // 已有邀请码
            } else {
@@ -1748,8 +1791,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();
@@ -1800,7 +1841,7 @@
         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 {
@@ -1811,13 +1852,10 @@
         out.print(JsonUtil.loadTrueResult(resultData));
      } catch (UserInfoExtraException e) {
         out.print(JsonUtil.loadFalseResult(e.getMsg()));
      } catch (Exception e) {
         out.print(JsonUtil.loadFalseResult("统计失败"));
         e.printStackTrace();
      }
   }
   /**
@@ -1832,48 +1870,35 @@
    */
   @RequestMapping(value = "setextrainfo", method = RequestMethod.POST)
   public void setExtraInfo(AcceptData acceptData, long uid, long inviteId, String memoName, PrintWriter out) {
      try {
         List<ThreeSale> listThreeSale = threeSaleSerivce.listbyIdAndBossId(inviteId, uid, null);
         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;
         }
         List<ThreeSaleExtraInfo> list = threeSaleExtraInfoSerivce.listbyBossIdAndWorkerId(uid, worker.getId());
         if (list == null || list.size() == 0) {
            ThreeSaleExtraInfo extraInfo = new ThreeSaleExtraInfo();
            extraInfo.setWorker(worker);
            extraInfo.setNickname(memoName);
            extraInfo.setCreateTime(new Date());
            extraInfo.setUpdateTime(new Date());
            UserInfo boss = new UserInfo(uid);
            extraInfo.setBoss(boss);
            threeSaleExtraInfoSerivce.insert(extraInfo);
         } else {
            ThreeSaleExtraInfo extraInfo = list.get(0);
            extraInfo.setNickname(memoName);
            extraInfo.setUpdateTime(new Date());
            threeSaleExtraInfoSerivce.updateByPrimaryKey(extraInfo);
         }
         out.print(JsonUtil.loadTrueResult("保存成功"));
      } catch (Exception e) {
         out.print(JsonUtil.loadFalseResult("保存失败"));
         e.printStackTrace();
      List<ThreeSale> listThreeSale = threeSaleSerivce.listbyIdAndBossId(inviteId, uid, null);
      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;
      }
      ThreeSaleExtraInfo extraInfo = threeSaleExtraInfoSerivce.getbyBossIdAndWorkerId(uid, worker.getId());
      if (extraInfo == null) {
         extraInfo = new ThreeSaleExtraInfo();
         extraInfo.setWorker(worker);
         extraInfo.setNickname(memoName);
         extraInfo.setCreateTime(new Date());
         extraInfo.setUpdateTime(new Date());
         extraInfo.setBoss(new UserInfo(uid));
         threeSaleExtraInfoSerivce.insertSelective(extraInfo);
      } else {
         ThreeSaleExtraInfo updateInfo = new ThreeSaleExtraInfo();
         updateInfo.setId(extraInfo.getId());
         updateInfo.setNickname(memoName);
         updateInfo.setUpdateTime(new Date());
         threeSaleExtraInfoSerivce.updateByPrimaryKeySelective(updateInfo);
      }
      out.print(JsonUtil.loadTrueResult("保存成功"));
   }
   /**
@@ -2002,7 +2027,7 @@
      try {
         String inviteCode = userInfoExtraService.getUserInviteCode(uid);
         String inviteCode = userInfoExtraService.getInviteCodeByUid(uid);
         JSONObject inviteData = new JSONObject();
         if (inviteCode == null || inviteCode.trim().length() == 0) {
@@ -2020,8 +2045,6 @@
         out.print(JsonUtil.loadTrueResult(data));
      } catch (UserInfoExtraException e) {
         out.print(JsonUtil.loadFalseResult(e.getMsg()));
      } catch (Exception e) {
         out.print(JsonUtil.loadFalseResult("获取失败"));
         e.printStackTrace();
@@ -2036,6 +2059,7 @@
    * @param requst
    * @param out
    */
   @UserActive(uid = "#uid")
   @RequestMapping(value = "getuserinfoNew", method = RequestMethod.POST)
   public void getuserinfoNew(AcceptData acceptData, Long uid, HttpServletRequest requst, PrintWriter out) {
      try {
@@ -2061,6 +2085,7 @@
         userActiveLog.setVersionCode(acceptData.getVersion());
         userActiveLog.setOsVersion(acceptData.getOsVersion());
         userActiveLog.setDeviceType(acceptData.getDeviceType());
         userActiveLog.setDevice(acceptData.getDevice());
         userActiveLogService.addUserActiveLog(userActiveLog);
         // 处理用户信息
@@ -2068,8 +2093,6 @@
         GsonBuilder gsonBuilder = new GsonBuilder().excludeFieldsWithoutExposeAnnotation();
         JSONObject data = new JSONObject();
         data.put("user", JsonUtil.getConvertBigDecimalToStringBuilder(gsonBuilder).create().toJson(userInfo));
         // 界面状态
         UserSettingsVO mySettings = null;
         try {
@@ -2094,18 +2117,15 @@
         if (mySettings.getNoInvitationBonus() == null) {
            mySettings.setNoInvitationBonus(0);
         }
         if (mySettings.getOpenSpreadHongBao() == null) {
            if(userTaoLiJinDetailService.countDetail(uid) > 0) {
            if (userTaoLiJinDetailService.countDetail(uid) > 0) {
               mySettings.setOpenSpreadHongBao(1);
            } else {
               mySettings.setOpenSpreadHongBao(0);
            }
         }
         data.put("moduleState", mySettings);
         int welfareCenterNews = 0;
         String invitCode = null;
@@ -2114,11 +2134,13 @@
            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())) {
               invitCode = userInfoExtra.getInviteCode();
            }
            if (userInfoExtra.getUserRank() != null) {
               String picture = userInfoExtra.getUserRank().getPicture();
               String icon = userInfoExtra.getUserRank().getIcon();
@@ -2128,21 +2150,55 @@
               userInfo.setRankNamePicture(null);
               userInfo.setRankIcon(null);
            }
            // 1.6.5 之后返回性别、微信号
            if (VersionUtil.greaterThan_1_6_5(acceptData.getPlatform(), acceptData.getVersion())) {
               if (userInfoExtra.getSex() != null)
                  userInfo.setSex(userInfoExtra.getSex());
               if (!StringUtil.isNullOrEmpty(userInfoExtra.getWeiXin()))
                  userInfo.setWeiXin(userInfoExtra.getWeiXin());
            }
         }
         // 1.6.5 之后返回 微信号提示
         if (VersionUtil.greaterThan_1_6_5(acceptData.getPlatform(), acceptData.getVersion()))
            userInfo.setWeiXinTip("添加微信号后,你的邀请人和直接粉丝可以通过微信与你建立联系。");
         // 查询是否为VIP
         if (VersionUtil.greaterThan_2_1(acceptData.getPlatform(), acceptData.getVersion())) {
            userInfo.setVip(userVIPInfoService.isVIP(uid));
         }
         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", configService.get("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);
         }
         // 2.0.2 版本
         if (VersionUtil.greaterThan_2_1(acceptData.getPlatform(), acceptData.getVersion())) {
            boolean verifyForbid = redPackForbidService.verifyForbid(uid);
            data.put("redPackLock", verifyForbid);
         }
         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 {
@@ -2187,9 +2243,9 @@
      }
   }
   /**
    * 用户更换头像
    *
    * @param acceptData
    * @param fileList
    * @param uid
@@ -2197,22 +2253,23 @@
    * @param out
    */
   @RequestMapping(value = "uploadPortrait")
   public void uploadPortrait(AcceptData acceptData, MultipartFile file, Long uid, HttpServletRequest request, PrintWriter out) {
   public void uploadPortrait(AcceptData acceptData, MultipartFile file, Long uid, HttpServletRequest request,
         PrintWriter out) {
      try {
         if (uid == null) {
            out.print(JsonUtil.loadFalseResult("用户未登录"));
            return;
         }
         if (file == null) {
            out.print(JsonUtil.loadFalseResult("上传文件不能为空"));
            return;
         }
         userInfoService.uploadPortrait(file, uid);
         out.print(JsonUtil.loadTrueResult("保存成功"));
      } catch (UserInfoException e) {
         out.print(JsonUtil.loadFalseResult(e.getMsg()));
         try {
@@ -2236,37 +2293,92 @@
         }
      }
   }
   /**
    * 更换昵称
    * 更换基础信息
    *
    * @param acceptData
    * @param nickName
    * @param uid
    * @param out
    */
   @RequestMapping(value = "saveInfo")
   public void saveInfo(AcceptData acceptData, String nickName, Long uid, PrintWriter out) {
   public void saveInfo(AcceptData acceptData, String nickName, String weiXin, Integer sex, Long uid,
         String inviteCode, PrintWriter out) {
      try {
         if (uid == null) {
            out.print(JsonUtil.loadFalseResult("用户未登录"));
            return;
         }
         if (StringUtil.isNullOrEmpty(nickName)) {
            out.print(JsonUtil.loadFalseResult("昵称不能为空"));
            return;
         // 修改昵称
         if (!StringUtil.isNullOrEmpty(nickName)) {
            if (nickName.length() > 200) {
               out.print(JsonUtil.loadFalseResult("昵称过长"));
               return;
            }
            if (maskKeyService.examineContent(nickName)) {
               out.print(JsonUtil.loadFalseResult("不能包含敏感词汇"));
               return;
            }
            userInfoService.saveUserInfo(nickName, uid);
            userInfoModifyRecordService.addModifyRecord(uid, ModifyTypeEnum.nickName, nickName);
         }
         if (nickName.length() > 200) {
            out.print(JsonUtil.loadFalseResult("昵称过长"));
            return;
         // 修改微信号
         if (!StringUtil.isNullOrEmpty(weiXin)) {
            if (weiXin.length() > 32) {
               out.print(JsonUtil.loadFalseResult("微信号过长"));
               return;
            }
            UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
            if (userInfoExtra != null) {
               UserInfoExtra extra = new UserInfoExtra();
               extra.setId(userInfoExtra.getId());
               extra.setWeiXin(weiXin);
               userInfoExtraService.saveUserInfoExtra(extra);
               userInfoModifyRecordService.addModifyRecord(uid, ModifyTypeEnum.setWeiXinNum, weiXin);
            }
         }
         if(maskKeyService.examineContent(nickName)) {
            out.print(JsonUtil.loadFalseResult("不能包含敏感词汇"));
            return;
         // 修改性别
         if (sex != null && sex > 0 && sex < 3) {
            UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
            if (userInfoExtra != null) {
               UserInfoExtra extra = new UserInfoExtra();
               extra.setId(userInfoExtra.getId());
               extra.setSex(sex);
               userInfoExtraService.saveUserInfoExtra(extra);
               userInfoModifyRecordService.addModifyRecord(uid, ModifyTypeEnum.gender, sex + "");
            }
         }
         userInfoService.saveUserInfo(nickName, uid);
         if (!StringUtil.isNullOrEmpty(inviteCode)) {// 邀请码不为空
            inviteCode = inviteCode.trim();
            if (inviteCode.length() >= 4 && inviteCode.length() <= 12) {
               if (!userVIPInfoService.isVIP(uid)) {
                  out.print(JsonUtil.loadFalseResult(20, "只有超级会员才能修改"));
                  return;
               }
               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;
            }
         }
         out.print(JsonUtil.loadTrueResult("保存成功"));
      } catch (UserInfoException e) {
         out.print(JsonUtil.loadFalseResult(e.getMsg()));