admin
2020-02-23 b59fef5c00b15fdfdfa9d4be26e5bf6b41c75458
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/InviteControllerV2.java
@@ -5,14 +5,18 @@
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
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.wx.WXAccountInfoDTO;
import com.yeshi.fanli.entity.accept.AcceptData;
import com.yeshi.fanli.entity.bus.msg.UserSystemMsg;
import com.yeshi.fanli.entity.bus.msg.UserSystemMsgTypeEnum;
@@ -20,16 +24,33 @@
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.WeiXinUser;
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;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.config.ConfigService;
import com.yeshi.fanli.service.inter.hongbao.ThreeSaleExtraInfoSerivce;
import com.yeshi.fanli.service.inter.hongbao.ThreeSaleSerivce;
import com.yeshi.fanli.service.inter.config.SpreadImgService;
import com.yeshi.fanli.service.inter.config.SystemClientParamsService;
import com.yeshi.fanli.service.inter.msg.UserSystemMsgService;
import com.yeshi.fanli.service.inter.push.PushService;
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.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.wx.WXLoginUtil;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
@@ -37,6 +58,9 @@
@Controller
@RequestMapping("api/v2/invite")
public class InviteControllerV2 {
   @Resource
   private RedisManager redisManager;
   @Resource
   private ConfigService configService;
@@ -59,6 +83,23 @@
   @Resource
   private ThreeSaleExtraInfoSerivce threeSaleExtraInfoSerivce;
   @Resource
   private UserVIPInfoService userVIPInfoService;
   @Resource
   private UserInviteSeparateService userInviteSeparateService;
   @Resource
   private SpreadImgService spreadImgService;
   @Resource
   private SpreadUserImgService spreadUserImgService;
   @Resource
   private SystemClientParamsService systemClientParamsService;
   /**
    * 邀请码验证
    * 
@@ -71,7 +112,7 @@
         JSONObject data = new JSONObject();
         data.put("nickName", userInfo.getNickName());
         data.put("portrait", userInfo.getPortrait());
         data.put("tips", "确认要成为TA的一级队员吗?邀请关系一旦建立不可更改。");
         data.put("tips", "确认要成为TA的直接粉丝吗?邀请关系一旦建立不可更改。");
         out.print(JsonUtil.loadTrueResult(data));
      } catch (UserInfoExtraException e) {
         out.print(JsonUtil.loadFalseResult(e.getMsg()));
@@ -79,22 +120,71 @@
   }
   /**
    * 邀请码微信
    * 邀请码微信验证
    * 
    * @param out
    */
   @RequestMapping(value = "verifyWX")
   public void verifyWX(AcceptData acceptData, Long uid, String code, PrintWriter out) {
      try {
         UserInfo userInfo = userInfoExtraService.getInviterInfo(
               Constant.getWXAccount(acceptData.getPlatform(), acceptData.getVersion()), uid, code);
         WXAccountInfoDTO wxAccount = Constant.getWXAccount(acceptData.getPlatform(), acceptData.getVersion());
         // 获取微信信息
         WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUser(code, wxAccount.getAppId(), wxAccount.getAppSecret());
         if (weiXinUser == null)
            throw new UserInfoExtraException(1, "微信授权失败");
         String wxUnionId = weiXinUser.getUnionid();
         if (wxUnionId == null || wxUnionId.trim().length() == 0)
            throw new UserInfoExtraException(1, "微信授权失败");
         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);
         JSONObject data = new JSONObject();
         data.put("nickName", userInfo.getNickName());
         data.put("portrait", userInfo.getPortrait());
         data.put("tips", "确认要成为TA的一级队员吗?邀请关系一旦建立不可更改。");
         data.put("tips", "确认要成为TA的直接粉丝吗?邀请关系一旦建立不可更改。");
         data.put("key", key);
         out.print(JsonUtil.loadTrueResult(data));
      } catch (UserInfoExtraException e) {
         out.print(JsonUtil.loadFalseResult(e.getMsg()));
      }
   }
   /**
    * 微信激活
    *
    * @param acceptData
    * @param uid
    * @param key
    *            验证返回的key
    * @param out
    */
   @RequestSerializableByKey(key = "'activeInviteWX-'+#uid")
   @RequestMapping(value = "activeInviteWX")
   public void activeInviteWX(AcceptData acceptData, Long uid, String key, PrintWriter out) {
      try {
         String value = redisManager.getCommonString(key);
         if (StringUtil.isNullOrEmpty(value))
            throw new UserAccountException(1, "微信授权失效");
         WeiXinUser weiXinUser = JsonUtil.getSimpleGson().fromJson(value, WeiXinUser.class);
         if (weiXinUser == null)
            throw new UserAccountException(1, "微信授权失效");
         userInfoExtraService.activeInviteWX(uid, weiXinUser);
         // 删除缓存
         redisManager.removeCommonString(key);
         out.print(JsonUtil.loadTrueResult("邀请码激活成功"));
      } catch (UserInfoExtraException e) {
         out.print(JsonUtil.loadFalseResult(e.getMsg()));
      } catch (Exception e) {
         out.print(JsonUtil.loadFalseResult("邀请码激活失败"));
         e.printStackTrace();
      }
   }
@@ -108,7 +198,7 @@
   @RequestMapping(value = "getMyTeam", method = RequestMethod.POST)
   public void getMyTeam(AcceptData acceptData, long page, long uid, int type, PrintWriter out) {
      if (type != 1 && type != 2) {
         out.print(JsonUtil.loadFalseResult("队员类型不正确"));
         out.print(JsonUtil.loadFalseResult("粉丝类型不正确"));
         return;
      }
@@ -122,8 +212,12 @@
         count = threeSaleSerivce.countSecondTeam(uid, 1);
      }
      boolean needVIPInfo = false;
      if (VersionUtil.greaterThan_2_0_5(acceptData.getPlatform(), acceptData.getVersion()))
         needVIPInfo = true;
      // 组织数据
      JSONObject resultData = organizeTeam(count, listTeam, uid, type);
      JSONObject resultData = organizeTeam(count, listTeam, uid, type,needVIPInfo);
      // 第一页判断是否激活 是否有队员
      if (type == 1 && page == 1) {
@@ -148,7 +242,7 @@
    * @param type
    * @return
    */
   private JSONObject organizeTeam(long count, List<ThreeSale> list, Long uid, int type) {
   private JSONObject organizeTeam(long count, List<ThreeSale> list, Long uid, int type, boolean needVipInfo) {
      JSONObject result = new JSONObject();
      JSONArray resultArray = new JSONArray();
@@ -157,6 +251,14 @@
      SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm");
      SimpleDateFormat formatYears = new SimpleDateFormat("yyyy");
      List<Long> workerIdList = new ArrayList<>();
      Map<Long, Boolean> vipMap = null;
      if (needVipInfo) {
         for (ThreeSale threeSale : list)
            workerIdList.add(threeSale.getWorker().getId());
         if (workerIdList.size() > 0)
            vipMap = userVIPInfoService.listByUids(workerIdList);
      }
      for (ThreeSale threeSale : list) {
         UserInfo worker = threeSale.getWorker();
         if (worker == null) {
@@ -172,7 +274,39 @@
         Date inviteTime = new Date(threeSale.getCreateTime());
         object.put("inviteTime", format.format(inviteTime) + " 加入");
         // 添加是否为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();
         if (threeSale.getState()) {
@@ -207,7 +341,7 @@
               if (userInfoExtra != null && !StringUtil.isNullOrEmpty(userInfoExtra.getWeiXin())) {
                  object.put("weiXin", userInfoExtra.getWeiXin());
                  object.put("weiXinState", 3);
                  object.put("weiXinTip", "添加TA的微信,你可教授TA如何通过返利券赚钱技巧。");
                  object.put("weiXinTip", "添加TA的微信,你可教授TA如何通过板栗快省赚钱技巧。");
               } else {
                  if (!threeSaleExtraInfoSerivce.isRemindWorker(uid, workerId)) {
                     object.put("weiXinState", 1);
@@ -238,12 +372,12 @@
    */
   @RequestMapping(value = "countMyTeam", method = RequestMethod.POST)
   public void countMyTeam(AcceptData acceptData, long uid, PrintWriter out) {
      JSONObject bossData = getBossInfo(acceptData, uid, threeSaleSerivce.getMyBoss(uid));
      JSONObject bossData = getBossInfo(uid, threeSaleSerivce.getMyBoss(uid));
      JSONObject resultData = new JSONObject();
      long firstTeam = threeSaleSerivce.countFirstTeam(uid, 1);
      resultData.put("boss", bossData);
      resultData.put("helpLink", configService.get("team_help_url"));
      resultData.put("helpLink", configService.get(ConfigKeyEnum.teamHelpUrl.getKey()));
      resultData.put("firstTeam", firstTeam);
      resultData.put("firstTeamTotal", threeSaleSerivce.countFirstTeam(uid, null));
      resultData.put("secondTeam", threeSaleSerivce.countSecondTeam(uid, 1));
@@ -252,7 +386,7 @@
      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);
@@ -271,8 +405,8 @@
      resultData.put("hasCode", hasCode);
      if (!hasCode) {
         List<String> tipCode = new ArrayList<String>();
         resultData.put("helpLinkActivate", configService.get("team_help_url"));
         tipCode.add("激活邀请功能后才可以邀请队员,一级队员是由你直接邀请,二级队员是由你的一级队员邀请。");
         resultData.put("helpLinkActivate", configService.get(ConfigKeyEnum.teamHelpUrl.getKey()));
         tipCode.add("激活邀请功能后才可以邀请粉丝,直接粉丝是由你直接邀请,间接粉丝是由你的直接粉丝邀请。");
         tipCode.add("邀请激活功能,必须要有邀请码,邀请码可以通过金币兑换,也可以全网搜索。");
         resultData.put("tipCode", tipCode);
      }
@@ -280,16 +414,33 @@
      // 未添加微信号
      List<String> tipWeiXin = new ArrayList<String>();
      if (!bdWeiXin) {
         tipWeiXin.add("添加微信号后,你的邀请人和一级队员可通过微信号与你建立联系;");
         tipWeiXin.add("你也可以向邀请人学习或向一级队员教授赚钱技巧。");
         tipWeiXin.add("添加微信号后,你的邀请人和直接粉丝可通过微信号与你建立联系;");
         tipWeiXin.add("你也可以向邀请人学习或向直接粉丝教授赚钱技巧。");
      }
      resultData.put("tipWeiXin", tipWeiXin);
      resultData.put("tipWeiXinAdd", "添加微信号后,你的邀请人和一级队员可以通过微信与你建立联系。");
      resultData.put("tipWeiXinAdd", "添加微信号后,你的邀请人和直接粉丝可以通过微信与你建立联系。");
      resultData.put("bdWeiXin", bdWeiXin);
      out.print(JsonUtil.loadTrueResult(resultData));
   }
   /**
    * 获取用户信息
    * @param acceptData
    * @param uid
    * @param out
    */
   @RequestMapping(value = "getBossInfo", method = RequestMethod.POST)
   public void getBossInfo(AcceptData acceptData, Long uid, PrintWriter out) {
      if (uid == null || uid <= 0) {
         out.print(JsonUtil.loadFalseResult("用户未登录"));
         return;
      }
      JSONObject bossData = getBossInfo(uid, threeSaleSerivce.getMyBoss(uid));
      out.print(JsonUtil.loadTrueResult(bossData));
   }
   /**
    * 上级信息组织
    * 
@@ -298,7 +449,7 @@
    * @param threeSale
    * @return
    */
   private JSONObject getBossInfo(AcceptData acceptData, long uid, ThreeSale threeSale) {
   private JSONObject getBossInfo(long uid, ThreeSale threeSale) {
      JSONObject bossData = new JSONObject();
      if (threeSale != null && threeSale.getBoss() != null) {
         UserInfo boss = threeSale.getBoss();
@@ -314,7 +465,7 @@
         if (userInfoExtra != null && !StringUtil.isNullOrEmpty(userInfoExtra.getWeiXin())) {
            bossData.put("weiXin", userInfoExtra.getWeiXin());
            bossData.put("weiXinState", 3);
            bossData.put("weiXinTip", "添加TA的微信,你可向TA学习如何通过返利券赚钱。");
            bossData.put("weiXinTip", "添加TA的微信,你可向TA学习如何通过板栗快省赚钱。");
         } else {
            if (!threeSaleExtraInfoSerivce.isRemindBoss(boss.getId(), uid)) {
               bossData.put("weiXinState", 1);
@@ -327,7 +478,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;
@@ -376,13 +527,13 @@
      Long bossId = null;
      Long workerId = null;
      String title = "队员提醒消息";
      String title = "粉丝提醒消息";
      String content = "";
      if (remindBoss) {
         // 提示队长
         bossId = remindId;
         workerId = uid;
         content = "你的一级队员" + userInfo.getNickName()
         content = "你的直接粉丝" + userInfo.getNickName()
               + ",提醒你添加微信号,以便于和你取得联系和学习省钱技巧,赶快去添加吧;注:请升级到本软件最新版本在“我的-我的信息”中添加。";
      } else {
         // 提示队员
@@ -429,4 +580,75 @@
         out.print(JsonUtil.loadFalseResult("提醒失败"));
      }
   }
   @RequestSerializableByKey(key = "'getInviteImgs-'+#uid")
   @RequestMapping(value = "/getInviteImgs", method = RequestMethod.POST)
   public void getInviteImgs(AcceptData acceptData, Long uid, Integer page, PrintWriter out, HttpServletRequest request) {
      if (uid == null || uid <= 0) {
         out.print(JsonUtil.loadFalseResult("用户未登录"));
         return;
      }
      if (page == null || page < 1)
         page = 1;
      try {
         String inviteCode = userInfoExtraService.getInviteCodeByUid(uid);
         if (StringUtil.isNullOrEmpty(inviteCode)) {
            out.print(JsonUtil.loadFalseResult("邀请码未激活"));
            return;
         }
         int count = 3;
         if (page > 1)
            count = Integer.MAX_VALUE;
         // 邀请图
         List<String> imgList = spreadUserImgService.getUserSpreadImgToPage(uid, page, count, request);
         // 邀请规则
         BusinessSystem system = new BusinessSystem();
         system.setId(4L);
         system.setPlatform(1);
         system.setCreatetime(java.lang.System.currentTimeMillis());
         SystemClientParams values = systemClientParamsService.getSystemClientParamsBySystemAndKey(system, "inviteRules");
         JSONObject data = new JSONObject();
         data.put("count", spreadImgService.countAll());
         data.put("inviteCode", inviteCode);
         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", Constant.YINGYONGBAO_LINK);
         out.print(JsonUtil.loadTrue(0, JsonUtil.getSimpleGson().toJson(data), "成功"));
      } catch (Exception e) {
         LogHelper.errorDetailInfo(e);
         out.print(JsonUtil.loadFalseResult("邀请信息获取失败"));
      }
   }
   /**
    * 站内信提醒队员添加微信号
    *
    * @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;
      }
      JSONObject data = new JSONObject();
      data.put("num", threeSaleSerivce.countFirstTeam(uid, 1));
      data.put("limit", Constant.INVITE_CODRE_TAILOR_LIMIT);
      JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
   }
}