admin
2020-05-06 24a8d17e007545f7426c48352109aa1a9c6587ee
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/InviteControllerV2.java
@@ -13,9 +13,9 @@
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.yeshi.utils.DateUtil;
import org.yeshi.utils.JsonUtil;
import com.yeshi.fanli.dto.vip.UserVIPLevel;
import com.yeshi.fanli.dto.wx.WXAccountInfoDTO;
import com.yeshi.fanli.entity.accept.AcceptData;
import com.yeshi.fanli.entity.bus.msg.UserSystemMsg;
@@ -24,9 +24,12 @@
import com.yeshi.fanli.entity.bus.user.ThreeSaleExtraInfo;
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.entity.bus.user.UserInfoExtra;
import com.yeshi.fanli.entity.bus.user.UserInviteSeparate;
import com.yeshi.fanli.entity.bus.user.UserInviteValidNum;
import com.yeshi.fanli.entity.bus.user.UserInviteValidRecord;
import com.yeshi.fanli.entity.bus.user.WeiXinUser;
import com.yeshi.fanli.entity.bus.user.vip.UserLevelEnum;
import com.yeshi.fanli.entity.system.BusinessSystem;
import com.yeshi.fanli.entity.system.ConfigKeyEnum;
import com.yeshi.fanli.entity.system.SystemClientParams;
import com.yeshi.fanli.exception.user.UserAccountException;
import com.yeshi.fanli.exception.user.UserInfoExtraException;
@@ -39,15 +42,19 @@
import com.yeshi.fanli.service.inter.user.SpreadUserImgService;
import com.yeshi.fanli.service.inter.user.UserInfoExtraService;
import com.yeshi.fanli.service.inter.user.UserInfoService;
import com.yeshi.fanli.service.inter.user.UserInviteSeparateService;
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.invite.UserInviteValidNumService;
import com.yeshi.fanli.service.inter.user.invite.UserInviteValidRecordService;
import com.yeshi.fanli.service.inter.user.vip.UserVIPInfoService;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.RedisKeyEnum;
import com.yeshi.fanli.util.RedisManager;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.VersionUtil;
import com.yeshi.fanli.util.annotation.RequestSerializableByKey;
import com.yeshi.fanli.util.user.UserLevelUtil;
import com.yeshi.fanli.util.wx.WXLoginUtil;
import net.sf.json.JSONArray;
@@ -83,9 +90,6 @@
   @Resource
   private UserVIPInfoService userVIPInfoService;
   @Resource
   private UserInviteSeparateService userInviteSeparateService;
   @Resource
   private SpreadImgService spreadImgService;
@@ -96,6 +100,14 @@
   @Resource
   private SystemClientParamsService systemClientParamsService;
   
   @Resource
   private UserInviteService userInviteService;
   @Resource
   private UserInviteValidRecordService userInviteValidRecordService;
   @Resource
   private UserInviteValidNumService userInviteValidNumService;
   
   
   /**
@@ -135,8 +147,8 @@
         if (wxUnionId == null || wxUnionId.trim().length() == 0)
            throw new UserInfoExtraException(1, "微信授权失败");
         String activeWX = StringUtil.Md5("activeWX:" + weiXinUser.getUnionid());
         redisManager.cacheCommonString(activeWX, JsonUtil.getSimpleGson().toJson(weiXinUser), 60 * 20);
         String key = RedisKeyEnum.getRedisKey(RedisKeyEnum.emptyKey, StringUtil.Md5("activeWX:" + weiXinUser.getUnionid()));
         redisManager.cacheCommonString(key, JsonUtil.getSimpleGson().toJson(weiXinUser), 60 * 20);
         // 邀请关系用户信息
         UserInfo userInfo = userInfoExtraService.getInviterInfo(uid, wxUnionId);
@@ -145,7 +157,7 @@
         data.put("nickName", userInfo.getNickName());
         data.put("portrait", userInfo.getPortrait());
         data.put("tips", "确认要成为TA的直接粉丝吗?邀请关系一旦建立不可更改。");
         data.put("key", activeWX);
         data.put("key", key);
         out.print(JsonUtil.loadTrueResult(data));
      } catch (UserInfoExtraException e) {
         out.print(JsonUtil.loadFalseResult(e.getMsg()));
@@ -199,19 +211,24 @@
         out.print(JsonUtil.loadFalseResult("粉丝类型不正确"));
         return;
      }
      if (VersionUtil.greaterThan_2_1(acceptData.getPlatform(), acceptData.getVersion())) {
         getMyTeamNew(acceptData, page, uid, type, out);
         return;
      }
      long count = 0;
      List<ThreeSale> listTeam = null;
      if (type == 1) {
         listTeam = threeSaleSerivce.listFirstTeam((page - 1) * Constant.PAGE_SIZE, Constant.PAGE_SIZE, uid, 1);
         count = threeSaleSerivce.countFirstTeam(uid, 1);
         listTeam = threeSaleSerivce.listFirstTeam((page - 1) * Constant.PAGE_SIZE, Constant.PAGE_SIZE, uid);
         count = threeSaleSerivce.countFirstTeam(uid);
      } else if (type == 2) {
         listTeam = threeSaleSerivce.listSecondTeam((page - 1) * Constant.PAGE_SIZE, Constant.PAGE_SIZE, uid, 1);
         count = threeSaleSerivce.countSecondTeam(uid, 1);
         listTeam = threeSaleSerivce.listSecondTeam((page - 1) * Constant.PAGE_SIZE, Constant.PAGE_SIZE, uid);
         count = threeSaleSerivce.countSecondTeam(uid);
      }
      boolean needVIPInfo = false;
      if (VersionUtil.greaterThan_2_1(acceptData.getPlatform(), acceptData.getVersion()))
      if (VersionUtil.greaterThan_2_0_5(acceptData.getPlatform(), acceptData.getVersion()))
         needVIPInfo = true;
      // 组织数据
@@ -275,35 +292,6 @@
         // 添加是否为VIP
         if (vipMap != null && vipMap.get(worker.getId()) != null) {
            object.put("vip", vipMap.get(worker.getId()));
            if (vipMap.get(worker.getId())) {
               UserInviteSeparate separate = userInviteSeparateService.selectByWorkerIdAndBossId(worker.getId(), uid);
               if (separate != null && separate.getEndTime() != null) {
                  try {
                     JSONObject contentJson1 = new JSONObject();
                     contentJson1.put("color", "#888888");
                     contentJson1.put("content", "将于");
                     JSONObject contentJson2 = new JSONObject();
                     contentJson2.put("color", "#F14242");
                     contentJson2.put("content", DateUtil.dateDiff4(new Date(), separate.getEndTime()));
                     JSONObject contentJson3 = new JSONObject();
                     contentJson3.put("color", "#888888");
                     contentJson3.put("content", "后脱离邀请关系");
                     JSONArray array = new JSONArray();
                     array.add(contentJson1);
                     array.add(contentJson2);
                     array.add(contentJson3);
                     object.put("vipBreakTime",array);
                  } catch (Exception e) {
                     e.printStackTrace();
                  }
               }
            }
         }
         String fontColor1 = "#888888";
         JSONArray array = new JSONArray();
@@ -343,7 +331,7 @@
               } else {
                  if (!threeSaleExtraInfoSerivce.isRemindWorker(uid, workerId)) {
                     object.put("weiXinState", 1);
                     object.put("weiXinTip", "点击提醒TA,系统会发送一封站内信,提醒其添加微信号。");
                     object.put("weiXinTip", "点击提醒,系统会发送一封站内信,提醒其添加微信号。");
                  } else {
                     object.put("weiXinState", 2);
                     object.put("weiXinTip", "系统已发送提醒,邀请人添加微信后你可复制,如对方迟迟不添加,你可联系人工客服寻求帮助");
@@ -361,6 +349,186 @@
      return result;
   }
   private void getMyTeamNew(AcceptData acceptData, long page, long uid, int type, PrintWriter out) {
      if (type != 1 && type != 2) {
         out.print(JsonUtil.loadFalseResult("粉丝类型不正确"));
         return;
      }
      long count = 0;
      List<ThreeSale> listTeam = null;
      if (type == 1) {
         listTeam = threeSaleSerivce.listFirstTeam((page - 1) * Constant.PAGE_SIZE, Constant.PAGE_SIZE, uid);
         count = threeSaleSerivce.countFirstTeam(uid);
      } else if (type == 2) {
         listTeam = threeSaleSerivce.listSecondTeam((page - 1) * Constant.PAGE_SIZE, Constant.PAGE_SIZE, uid);
         count = threeSaleSerivce.countSecondTeam(uid);
      }
      JSONObject result = new JSONObject();
      result.put("count", count);
      result.put("list", organizeTeamNew(count, listTeam, uid, type, true));
      // 第一页判断是否激活 是否有队员
      if (type == 1 && page == 1) {
         boolean hasCode = false;
         UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
         if (userInfoExtra != null) {
            if (!StringUtil.isNullOrEmpty(userInfoExtra.getInviteCode()))
               hasCode = true;
         }
         result.put("hasCode", hasCode);
         result.put("hasTeam", count > 0 ? true : false);
      }
      out.print(JsonUtil.loadTrueResult(result));
   }
   /**
    *  加工数据
    * @param count
    * @param list
    * @param uid
    * @param type 查询粉丝类型 1直接 2间接
    * @param wxtip 是需要微信提示
    * @return
    */
   private JSONArray organizeTeamNew(long count, List<ThreeSale> list, Long uid, int type, boolean wxtip) {
      JSONArray resultArray = new JSONArray();
      if (list == null || list.size() == 0) {
         return resultArray;
      }
      Date todayTime = new Date();
      SimpleDateFormat sdf = new SimpleDateFormat("MM.dd HH:mm");
      SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm");
      SimpleDateFormat formatYears = new SimpleDateFormat("yyyy");
      List<Long> listWid = new ArrayList<>();
      for (ThreeSale threeSale : list) {
         listWid.add(threeSale.getWorker().getId());
      }
      // 查询有效粉丝id
      int validType = UserInviteValidRecord.TYPE_TWO;
      if (type == 1) {
         validType = UserInviteValidRecord.TYPE_ONE;
      }
      List<Long> listVid = userInviteValidRecordService.getValidWorkerIdsByUid(uid, listWid, validType);
      for (ThreeSale threeSale : list) {
         UserInfo worker = threeSale.getWorker();
         Long workerId = worker.getId();
         // 邀请成功时间
         Long succeedTime = threeSale.getSucceedTime();
         if (succeedTime == null) {
            succeedTime = threeSale.getCreateTime();
         }
         // 有效粉丝
         boolean validFans = false;
         if (listVid != null && listVid.size() > 0 && listVid.contains(workerId)) {
            validFans = true;
         }
         // 最近粉丝登录时间
         Date lastLoginTime = new Date(threeSale.getCreateTime());
         UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(workerId);
         if (userInfoExtra != null && userInfoExtra.getActiveTime() != null) {
            lastLoginTime = userInfoExtra.getActiveTime();
         }
         JSONObject loginJson = new JSONObject();
         if (formatYears.format(todayTime).equals(formatYears.format(lastLoginTime))) {
            loginJson.put("content", "最近登录 " + sdf.format(lastLoginTime)); // 本年
         } else {
            loginJson.put("content", "最近登录 " + format.format(lastLoginTime)); // 往年
         }
         loginJson.put("color", "#888888");
         JSONArray array = new JSONArray();
         array.add(loginJson);
         // 查询粉丝等级
         UserLevelEnum level = null;
         UserVIPLevel vipLevel = userInviteService.getVIPLevelByUid(workerId);
         if (vipLevel != null && vipLevel.getLevel() != null) {
            level = UserLevelUtil.getByLevel(vipLevel.getLevel());
         }
         if(level == null) {
            level = UserLevelEnum.daRen;
         }
         level = UserLevelUtil.getShowLevel(level);
         JSONObject object = new JSONObject();
         object.put("workerId", workerId);
         object.put("nickName", worker.getNickName());
         object.put("portrait", worker.getPortrait());
         object.put("inviteId", threeSale.getId());
         object.put("inviteTime", format.format(new Date(succeedTime)) + " 加入");
         object.put("state", 1);
         object.put("recentMsg", array);
         object.put("level", level.name());
         object.put("validFans", validFans);
         if (wxtip && type == 1 && threeSale.getState() != null && threeSale.getState()) {
            // 一级队员 查询昵称备注
            String memoName = null;
            ThreeSaleExtraInfo threeSaleExtraInfo = threeSale.getThreeSaleExtraInfo();
            if (threeSaleExtraInfo != null) {
               if (!StringUtil.isNullOrEmpty(threeSaleExtraInfo.getNickname())) {
                  memoName = threeSaleExtraInfo.getNickname();
               }
            }
            object.put("memoName", memoName);
            // 添加微信信息
            if (userInfoExtra != null && !StringUtil.isNullOrEmpty(userInfoExtra.getWeiXin())) {
               object.put("weiXin", userInfoExtra.getWeiXin());
               object.put("weiXinState", 3);
               object.put("weiXinTip", "添加TA的微信,你可教授TA如何通过板栗快省赚钱技巧。");
            } else {
               if (!threeSaleExtraInfoSerivce.isRemindWorker(uid, workerId)) {
                  object.put("weiXinState", 1);
                  object.put("weiXinTip", "点击提醒,系统会发送一封站内信,提醒其添加微信号。");
               } else {
                  object.put("weiXinState", 2);
                  object.put("weiXinTip", "系统已发送提醒,邀请人添加微信后你可复制,如对方迟迟不添加,你可联系人工客服寻求帮助");
               }
            }
         }
         resultArray.add(object);
      }
      return resultArray;
   }
   /**
    * 查看下级的直接粉丝
    * @param acceptData
    * @param page
    * @param uid 当前UId
    * @param tid 下级UId
    * @param out
    */
   @RequestMapping(value = "getOthersTeam", method = RequestMethod.POST)
   public void getOthersTeam(AcceptData acceptData, long page, Long uid, Long tid,  PrintWriter out) {
      if (tid == null) {
         out.print(JsonUtil.loadFalseResult("传递参数不正确"));
         return;
      }
      List<ThreeSale> listTeam = threeSaleSerivce.listFirstTeam((page - 1) * Constant.PAGE_SIZE, Constant.PAGE_SIZE, tid);
      long count = threeSaleSerivce.countFirstTeam(tid);
      JSONObject result = new JSONObject();
      result.put("count", count);
      result.put("list", organizeTeamNew(count, listTeam, tid, 1, false));
      out.print(JsonUtil.loadTrueResult(result));
   }
   /**
    * 用户队员统计- IOS
    * 
@@ -373,18 +541,19 @@
      JSONObject bossData = getBossInfo(uid, threeSaleSerivce.getMyBoss(uid));
      JSONObject resultData = new JSONObject();
      long firstTeam = threeSaleSerivce.countFirstTeam(uid, 1);
      long firstTeam = threeSaleSerivce.countFirstTeam(uid);
      long countSecond = threeSaleSerivce.countSecondTeam(uid);
      resultData.put("boss", bossData);
      resultData.put("helpLink", configService.get("team_help_url"));
      resultData.put("firstTeam", firstTeam);
      resultData.put("firstTeamTotal", threeSaleSerivce.countFirstTeam(uid, null));
      resultData.put("secondTeam", threeSaleSerivce.countSecondTeam(uid, 1));
      resultData.put("secondTeamTotal", threeSaleSerivce.countSecondTeam(uid, null));
      resultData.put("firstTeamTotal", firstTeam);
      resultData.put("secondTeam", countSecond);
      resultData.put("secondTeamTotal", countSecond);
      resultData.put("helpLink", configService.get(ConfigKeyEnum.teamHelpUrl.getKey()));
      boolean hasTeam = true;
      if (firstTeam <= 0) {
         hasTeam = false;
         resultData.put("invitelink", configService.get("invite_activation_url"));
         resultData.put("invitelink", configService.get(ConfigKeyEnum.inviteActivationUrl.getKey()));
      }
      resultData.put("hasTeam", hasTeam);
@@ -403,7 +572,7 @@
      resultData.put("hasCode", hasCode);
      if (!hasCode) {
         List<String> tipCode = new ArrayList<String>();
         resultData.put("helpLinkActivate", configService.get("team_help_url"));
         resultData.put("helpLinkActivate", configService.get(ConfigKeyEnum.teamHelpUrl.getKey()));
         tipCode.add("激活邀请功能后才可以邀请粉丝,直接粉丝是由你直接邀请,间接粉丝是由你的直接粉丝邀请。");
         tipCode.add("邀请激活功能,必须要有邀请码,邀请码可以通过金币兑换,也可以全网搜索。");
         resultData.put("tipCode", tipCode);
@@ -467,7 +636,7 @@
         } else {
            if (!threeSaleExtraInfoSerivce.isRemindBoss(boss.getId(), uid)) {
               bossData.put("weiXinState", 1);
               bossData.put("weiXinTip", "点击提醒TA,系统会发送一封站内信,提醒其添加微信号。");
               bossData.put("weiXinTip", "点击提醒,系统会发送一封站内信,提醒其添加微信号。");
            } else {
               bossData.put("weiXinState", 2);
               bossData.put("weiXinTip", "系统已发送提醒,邀请人添加微信后你可复制,如对方迟迟不添加,你可联系人工客服寻求帮助");
@@ -476,7 +645,7 @@
         bossData.put("inviteTime", "你于 " + sdf.format(inviteTime) + "接受了TA的邀请");
      } else {
         bossData.put("hasBoss", false);
         bossData.put("helpLink", configService.get("invite_code_hlep_link"));
         bossData.put("helpLink", configService.get(ConfigKeyEnum.inviteCodeHlepLink.getKey()));
         bossData.put("weiXinTip", "恭喜你,我们的优质用户;\r\n你并没有邀请人,但你的邀请激活功能是被默认开启的;\r\n你拥有独特的无邀请人激活码。");
      }
      return bossData;
@@ -615,10 +784,10 @@
         JSONObject data = new JSONObject();
         data.put("count", spreadImgService.countAll());
         data.put("inviteCode", inviteCode);
         data.put("helpLink", configService.get("invite_help_link"));
         data.put("helpLink", configService.get(ConfigKeyEnum.inviteHelpLink.getKey()));
         data.put("inviteRules",  values.getValue().replace("\n", "<br><br>"));
         data.put("imgUrlList", JsonUtil.getSimpleGsonWithDate().toJson(imgList));
         data.put("inviteLink", "http://a.app.qq.com/o/simple.jsp?pkgname=com.yeshi.ec.rebate");
         data.put("inviteLink", Constant.YINGYONGBAO_LINK);
         out.print(JsonUtil.loadTrue(0, JsonUtil.getSimpleGson().toJson(data), "成功"));
      } catch (Exception e) {
         LogHelper.errorDetailInfo(e);
@@ -626,5 +795,32 @@
      }
   }
   
   /**
    * 站内信提醒队员添加微信号
    *
    * @param acceptData
    * @param uid
    * @param inviteId
    * @param out
    */
   @RequestMapping(value = "tailorCode")
   public void tailorCode(AcceptData acceptData, String callback, Long uid, PrintWriter out) {
      if (uid == null) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("用户id缺失"));
         return;
      }
      // 有效粉丝
      int doneFirst = 0;
      UserInviteValidNum userInviteValidNum = userInviteValidNumService.selectByPrimaryKey(uid);
      if (userInviteValidNum != null) {
         doneFirst = userInviteValidNum.getNumFirst() == null ? 0 : userInviteValidNum.getNumFirst();
      }
      JSONObject data = new JSONObject();
      data.put("num", doneFirst);
      data.put("limit", Constant.INVITE_CODRE_TAILOR_LIMIT);
      JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
   }
   
}