yujian
2020-05-06 a4637ae9d71aa4a624b217ed3a1483f0e3a3a7ed
fanli/src/main/java/com/yeshi/fanli/controller/client/v1/RecommendController.java
@@ -49,6 +49,7 @@
import com.yeshi.fanli.entity.goods.CommonGoods;
import com.yeshi.fanli.entity.goods.ScanHistoryV2;
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.entity.taobao.ClientTBPid;
import com.yeshi.fanli.entity.taobao.PidUser;
@@ -88,19 +89,19 @@
import com.yeshi.fanli.service.inter.homemodule.SpecialService;
import com.yeshi.fanli.service.inter.homemodule.SuperSpecialService;
import com.yeshi.fanli.service.inter.homemodule.SwiperPictureService;
import com.yeshi.fanli.service.inter.hongbao.HongBaoManageService;
import com.yeshi.fanli.service.inter.lable.QualityFlashSaleService;
import com.yeshi.fanli.service.inter.lable.QualityGoodsService;
import com.yeshi.fanli.service.inter.money.UserMoneyExtraService;
import com.yeshi.fanli.service.inter.monitor.MonitorService;
import com.yeshi.fanli.service.inter.order.OrderService;
import com.yeshi.fanli.service.inter.order.ShareGoodsActivityOrderService;
import com.yeshi.fanli.service.inter.order.config.HongBaoManageService;
import com.yeshi.fanli.service.inter.taobao.TLJBuyGoodsService;
import com.yeshi.fanli.service.inter.taobao.TaoBaoGoodsUpdateService;
import com.yeshi.fanli.service.inter.taobao.TaoBaoShopService;
import com.yeshi.fanli.service.inter.taobao.TaoBaoUnionConfigService;
import com.yeshi.fanli.service.inter.taobao.dataoke.DaTaoKeGoodsDetailService;
import com.yeshi.fanli.service.inter.taobao.dataoke.DaTaoKeGoodsDetailV2Service;
import com.yeshi.fanli.service.inter.tlj.ConfigTaoLiJinService;
import com.yeshi.fanli.service.inter.tlj.DeviceTaoLiJinRecordService;
import com.yeshi.fanli.service.inter.tlj.UserTaoLiJinOriginService;
import com.yeshi.fanli.service.inter.tlj.UserTaoLiJinRecordService;
import com.yeshi.fanli.service.inter.user.ShamUserService;
@@ -109,9 +110,9 @@
import com.yeshi.fanli.service.inter.user.UserGoodsStorageService;
import com.yeshi.fanli.service.inter.user.UserInfoExtraService;
import com.yeshi.fanli.service.inter.user.UserInfoService;
import com.yeshi.fanli.service.inter.user.UserMoneyExtraService;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.MoneyBigDecimalUtil;
import com.yeshi.fanli.util.RedisKeyEnum;
import com.yeshi.fanli.util.RedisManager;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.TaoBaoConstant;
@@ -242,7 +243,7 @@
   private TaoBaoShopService taoBaoShopService;
   @Resource
   private DaTaoKeGoodsDetailService daTaoKeGoodsDetailService;
   private DaTaoKeGoodsDetailV2Service daTaoKeGoodsDetailV2Service;
   @Resource
   private UserMoneyExtraService userMoneyExtraService;
@@ -252,9 +253,6 @@
   @Resource
   private ConfigTaoLiJinService configTaoLiJinService;
   @Resource
   private DeviceTaoLiJinRecordService deviceTaoLiJinRecordService;
   @Resource
   private DeviceSexService deviceSexService;
@@ -618,7 +616,7 @@
      // 获取淘客参数
      ClientTBPid clientTBPid = null;
      if (simpleGoods.getMaterialLibType() != null && simpleGoods.getMaterialLibType() == 1) {
      if (TaoBaoUtil.isSpecialGoods(simpleGoods.getMaterialLibType())) {
         String pid = TaoBaoConstant.TAOBAO_SPECIAL_PID_DEFAULT;
         clientTBPid = new ClientTBPid(TaoBaoConstant.TAOBAO_AUTH_APPKEY, TaoBaoConstant.TAOBAO_AUTH_APPSECRET,
               pid.split("_")[2], pid.split("_")[3]);
@@ -665,7 +663,7 @@
         taoBaoGoodsBriefExtra.setAuctionUrl(tb.getAuctionUrl());
         if (uid != null && !"".equals(uid.trim())) {
            CollectionGoodsV2 collectionGoods = collectionGoodsV2Service.findByUidAndAuctionId(Long.parseLong(uid),
                  Long.parseLong(id));
                  Long.parseLong(id), Constant.SOURCE_TYPE_TAOBAO);
            data.put("collection", collectionGoods != null ? true : false);
         }
@@ -683,11 +681,11 @@
         // taoBaoGoodsBriefExtra.setAuctionUrl(null);
         data.put("taobao", taobaoJson);
         String info = configService.get("detail_prompt");
         String info = configService.get(ConfigKeyEnum.detailPrompt.getKey());
         data.put("info", info);
         String onlyInfo = configService.get("only_info");
         String onlyInfo = configService.get(ConfigKeyEnum.onlyInfo.getKey());
         data.put("only", onlyInfo);
         data.put("helpUrl", configService.get("old_goods_detail_help_url"));
         data.put("helpUrl", configService.get(ConfigKeyEnum.oldGoodsDetailHelpUrl.getKey()));
         int showType = taoBaoGoodsBriefExtra.getShowType();
         String price = "";
@@ -702,7 +700,7 @@
         data.put("shareTitle", taoBaoGoodsBriefExtra.getTitle());
         data.put("shareContent", "¥" + price + "元");
         data.put("shareImg", taoBaoGoodsBriefExtra.getPictUrl());
         String html = configService.get("downAPP");
         String html = configService.get(ConfigKeyEnum.downAPP.getKey());
         data.put("downAPP", html);
         String shareSinaContent = configService.get("shareSinaContent");
         data.put("shareSina",
@@ -925,7 +923,7 @@
      // 判断收藏
      if (!StringUtil.isNullOrEmpty(uid)) {
         CollectionGoodsV2 collectionGoods = collectionGoodsV2Service.findByUidAndAuctionId(Long.parseLong(uid),
               Long.parseLong(id));
               Long.parseLong(id), Constant.SOURCE_TYPE_TAOBAO);
         data.put("collected", collectionGoods != null ? true : false);
      } else
         data.put("collected", false);
@@ -1077,7 +1075,7 @@
         return;
      }
      List<TaoBaoGoodsBrief> goodsList = TaoKeApiUtil.getRelationGoodsRecommend(id, 6);
      List<TaoBaoGoodsBrief> goodsList = TaoKeApiUtil.guessLikeByAuctionId(id, 6);
      if (goodsList == null)
         goodsList = new ArrayList<>();
@@ -1192,6 +1190,7 @@
   // 获取浏览记录
   @RequestMapping(value = "getscanhistory", method = RequestMethod.POST)
   public void getScanHistory(AcceptData acceptData, String uid, int page, PrintWriter out) {
      if (page < 0) {
         out.print(JsonUtil.loadFalseResult(1, "page不小于0"));
         return;
@@ -1203,49 +1202,61 @@
         out.print(JsonUtil.loadFalseResult(1, "不存在该系统"));
         return;
      }
      List<ScanHistoryV2> list = scanHistoryV2Service.getScanHistoryByDeviceOrUid(
            StringUtil.isNullOrEmpty(uid) ? null : Long.parseLong(uid), acceptData.getDevice(), page, 20);
      long count = scanHistoryV2Service.getCountByDeviceOrUid(
            StringUtil.isNullOrEmpty(uid) ? null : Long.parseLong(uid), acceptData.getDevice());
      JSONObject data = new JSONObject();
      data.put("count", count);
      JSONArray array = new JSONArray();
      try {
      GsonBuilder gsonBuilder = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder());
      gsonBuilder.excludeFieldsWithoutExposeAnnotation();
      gsonBuilder.registerTypeAdapter(Date.class, new JsonSerializer<Date>() {
         @Override
         public JsonElement serialize(Date value, Type theType, JsonSerializationContext context) {
            if (value == null) {
               return new JsonPrimitive("");
            } else {
               return new JsonPrimitive(value.getTime() + "");
         List<ScanHistoryV2> list = scanHistoryV2Service.getScanHistoryByDeviceOrUid(
               StringUtil.isNullOrEmpty(uid) ? null : Long.parseLong(uid), acceptData.getDevice(), page, 20,
               Constant.SOURCE_TYPE_TAOBAO);
         long count = scanHistoryV2Service.getCountByDeviceOrUid(
               StringUtil.isNullOrEmpty(uid) ? null : Long.parseLong(uid), acceptData.getDevice(),
               Constant.SOURCE_TYPE_TAOBAO);
         JSONObject data = new JSONObject();
         data.put("count", count);
         JSONArray array = new JSONArray();
         GsonBuilder gsonBuilder = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder());
         gsonBuilder.excludeFieldsWithoutExposeAnnotation();
         gsonBuilder.registerTypeAdapter(Date.class, new JsonSerializer<Date>() {
            @Override
            public JsonElement serialize(Date value, Type theType, JsonSerializationContext context) {
               if (value == null) {
                  return new JsonPrimitive("");
               } else {
                  return new JsonPrimitive(value.getTime() + "");
               }
            }
         });
         Gson gson = gsonBuilder.create();
         if (list != null) {
            BigDecimal proportion = manageService.getFanLiRate();
            for (ScanHistoryV2 sh : list) {
               TaoBaoGoodsBrief goods = TaoBaoUtil.convert(sh.getCommonGoods());
               goods.setId(sh.getId());
               TaoBaoGoodsBriefExtra extra = TaoBaoUtil.getTaoBaoGoodsBriefExtra(goods, proportion.toString(), "");
               extra.setCreatetime(sh.getCreateTime());
               array.add(gson.toJson(extra));
            }
         }
      });
      Gson gson = gsonBuilder.create();
      if (list != null) {
         BigDecimal proportion = manageService.getFanLiRate();
         for (ScanHistoryV2 sh : list) {
            TaoBaoGoodsBrief goods = TaoBaoUtil.convert(sh.getCommonGoods());
            goods.setId(sh.getId());
            TaoBaoGoodsBriefExtra extra = TaoBaoUtil.getTaoBaoGoodsBriefExtra(goods, proportion.toString(), "");
            extra.setCreatetime(sh.getCreateTime());
            array.add(gson.toJson(extra));
         }
         data.put("data", array);
         out.print(JsonUtil.loadTrueResult(data));
         return;
      } catch (Exception e) {
         LogHelper.errorDetailInfo(e);
         JSONObject data = new JSONObject();
         data.put("data", new JSONArray());
         data.put("count", 0);
         out.print(JsonUtil.loadTrueResult(data));
      }
      data.put("data", array);
      out.print(JsonUtil.loadTrueResult(data));
      return;
   }
   @RequestMapping(value = "deletescanhistory", method = RequestMethod.POST)
   public void deleteScanHistory(AcceptData acceptData, String type, String uid, String ids, PrintWriter out) {
      BusinessSystem sys = businessSystemService.getBusinessSystem(acceptData.getPlatform(),
            acceptData.getPackages());
      if (sys == null) {
         out.print(JsonUtil.loadFalseResult(1, "系统不存在"));
         return;
@@ -1296,8 +1307,7 @@
       * 
       */
      // if (Constant.IS_OUTNET) {
      String key = "linkParse-" + acceptData.getDevice() + "-" + id;
      String key = RedisKeyEnum.getRedisKey(RedisKeyEnum.taobaolinkParse, acceptData.getDevice() + "-" + id);
      String value = redisManager.getCommonString(key);
      if (!StringUtil.isNullOrEmpty(value)) {
         out.print(JsonUtil.loadFalseResult(11, "请求频率限制"));
@@ -1338,10 +1348,18 @@
         HttpServletRequest request, PrintWriter out) {
      int pageSize = Constant.PAGE_SIZE;
      JSONArray array = new JSONArray();
      Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder()).create();
      if (VersionUtil.greaterThan_1_5_70(acceptData.getPlatform(), acceptData.getVersion())) {
         List<TaoBaoGoodsBrief> goodsList = homeRecommendGoodsService.listGoodsByPage(null, acceptData.getDevice(),
               imei, idfa, page);
         if (page < 4) {// 前三页加入更新
            try {
               taoBaoGoodsUpdateService.addUpdateQueueAsync(goodsList);
            } catch (Exception e) {
            }
         }
         BigDecimal rate = hongBaoManageService.getFanLiRate();
         for (TaoBaoGoodsBrief goods : goodsList) {
@@ -1358,7 +1376,11 @@
         }
         if (page == 1) {
            List<TLJBuyGoods> list = homeRecommendGoodsService.getZiGouLiJianHotGoods(acceptData.getDevice());
            List<TLJBuyGoods> list = null;
            try {
               list = homeRecommendGoodsService.getZiGouLiJianHotGoods(acceptData.getDevice());
            } catch (Exception e) {
            }
            if (list != null && list.size() > 0)
               for (int i = list.size() - 1; i >= 0; i--) {
                  TLJBuyGoods goods = list.get(i);
@@ -1394,7 +1416,7 @@
         if (!StringUtil.isNullOrEmpty(imei) || !StringUtil.isNullOrEmpty(idfa)) {
            long startTime = java.lang.System.currentTimeMillis();
            TaoBaoSearchResult result = TaoKeApiUtil.guessDeviceLike(page, 50, imei, idfa);
            TaoBaoSearchResult result = TaoKeApiUtil.guessDeviceLike(page, 50, imei, idfa,"");
            if (result != null && result.getTaoBaoGoodsBriefs() != null) {
               // 筛选
@@ -1406,7 +1428,7 @@
               // filter
               try {
                  gList = daTaoKeGoodsDetailService.filterTaoBaoGoods(gList);
                  gList = daTaoKeGoodsDetailV2Service.filterTaoBaoGoods(gList);
               } catch (Exception e) {
               }
@@ -1574,7 +1596,8 @@
      if (!StringUtil.isNullOrEmpty(specialCard)) {
         try {
            listswiper = swiperPictureService.getByBannerCard(swiperCard);
            listswiper = swiperPictureService.getByBannerCardAndVersion(swiperCard, acceptData.getPlatform(),
                  Integer.parseInt(acceptData.getVersion()));
            if (listswiper == null) {
               listswiper = new ArrayList<SwiperPicture>();
@@ -1652,7 +1675,7 @@
      JSONObject invite = new JSONObject();
      JumpDetailV2 jumpDetail = jumpDetailV2Service.getByTypeCache("invite");
      invite.put("jumpDetail", jumpDetail);
      invite.put("picture", configService.get("home_invite_banner"));
      invite.put("picture", configService.get(ConfigKeyEnum.homeInviteBanner.getKey()));
      if ("ios".equalsIgnoreCase(acceptData.getPlatform())
            && configService.iosOnLining(Integer.parseInt(acceptData.getVersion()))) {
@@ -1694,7 +1717,7 @@
         JSONObject root = specialService.listCacheSpecialToIndex(acceptData, deviceSex);
         // 2、顶部轮播图
         List<SwiperPicture> topPicList = getSwiperByCard("index_top");
         List<SwiperPicture> topPicList = getSwiperByCard("index_top", acceptData);
         if (topPicList == null) {
            topPicList = new ArrayList<SwiperPicture>();
         }
@@ -1706,7 +1729,7 @@
               && configService.iosOnLining(Integer.parseInt(acceptData.getVersion()))) {
            // 如果IOS当前版本处于审核状态就不返回
         } else {
            invitePicList = getSwiperByCard("index_invite");
            invitePicList = getSwiperByCard("index_invite", acceptData);
         }
         if (invitePicList == null) {
@@ -1717,7 +1740,7 @@
         // 4、IOS的底部网页链接
         String platform = acceptData.getPlatform();
         if ("ios".equalsIgnoreCase(platform)) {
            root.put("htmlLink", configService.get("index_html_link_ios"));
            root.put("htmlLink", configService.get(ConfigKeyEnum.indexHtmlLinkIos.getKey()));
         }
         root.put("spikeGoods", getSpikeGoodsContent(acceptData));
@@ -1747,15 +1770,16 @@
         return null;
      }
      List<SwiperPicture> invitePicList = getSwiperByCard("index_invite");
      List<SwiperPicture> invitePicList = getSwiperByCard("index_invite", acceptData);
      return invitePicList;
   }
   public List<SwiperPicture> getSwiperByCard(String card) {
   public List<SwiperPicture> getSwiperByCard(String card, AcceptData acceptData) {
      List<SwiperPicture> swiperList = null;
      try {
         swiperList = swiperPictureService.getByBannerCard(card);
         swiperList = swiperPictureService.getByBannerCardAndVersion(card, acceptData.getPlatform(),
               Integer.parseInt(acceptData.getVersion()));
      } catch (Exception e) {
         try {
            LogHelper.errorDetailInfo(e);
@@ -1804,8 +1828,8 @@
      nextTime.set(Calendar.MILLISECOND, 0);
      JSONArray array = null;
      String timekey = String.format("spikeGoods_hour-%s-%s", acceptData.getPlatform(), acceptData.getVersion());
      String cachekey = String.format("spikeGoodsList-%s-%s", acceptData.getPlatform(), acceptData.getVersion());
      String timekey = RedisKeyEnum.getRedisKey(RedisKeyEnum.spikeGoodsHour,acceptData.getPlatform() +"-"+acceptData.getVersion());
      String cachekey = RedisKeyEnum.getRedisKey(RedisKeyEnum.spikeGoodsList,acceptData.getPlatform() +"-"+acceptData.getVersion());
      String timeValue = redisManager.getCommonString(timekey);
      if (timeValue == null || !timeValue.equals(hour + "")) {
@@ -1842,7 +1866,7 @@
                  .toJson(TaoBaoUtil.getTaoBaoGoodsBriefExtra(taoBaoGoodsBrief, proportion.toString(), null)));
            goods.put("jumpDetail", jumpDetail);
            JSONObject params = new JSONObject();
            params.put("url", configService.get("spike_goods_link") + "?id=" + taoBaoGoodsBrief.getAuctionId());
            params.put("url", configService.get(ConfigKeyEnum.spikeGoodsLink.getKey()) + "?id=" + taoBaoGoodsBrief.getAuctionId());
            goods.put("params", params);
            // 1.5.4及以后返回
@@ -1864,7 +1888,7 @@
      root.put("listgoods", array);
      JSONObject params = new JSONObject();
      params.put("url", configService.get("spike_goods_link"));
      params.put("url", configService.get(ConfigKeyEnum.spikeGoodsLink.getKey()));
      root.put("params", params);
      root.put("jumpDetail", jumpDetail);
@@ -2050,7 +2074,7 @@
      // 大淘客商品过滤
      try {
         goods = daTaoKeGoodsDetailService.filterTaoBaoGoods(goods);
         goods = daTaoKeGoodsDetailV2Service.filterTaoBaoGoods(goods).getGoods();
      } catch (Exception e) {
         LogHelper.errorDetailInfo(e);
      }
@@ -2079,7 +2103,8 @@
      if (uid == null) {
         data.put("collected", false);
      } else {
         CollectionGoodsV2 collectionGoods = collectionGoodsV2Service.findByUidAndAuctionId(uid, id);
         CollectionGoodsV2 collectionGoods = collectionGoodsV2Service.findByUidAndAuctionId(uid, id,
               Constant.SOURCE_TYPE_TAOBAO);
         data.put("collected", collectionGoods != null ? true : false);
      }
@@ -2159,6 +2184,8 @@
      // 红包
      if (hongBao == null) {
         BigDecimal proportion = manageService.getFanLiRate();
         if ("taolijin".equalsIgnoreCase(from))
            proportion = manageService.getTLJShareRate(System.currentTimeMillis());
         hongBao = TaoBaoUtil.getGoodsHongBaoInfo(tb, proportion);
      }
      goodsJson.put("hongBao", hongBao);
@@ -2219,14 +2246,14 @@
      // 是否加入选品库: 0未加入 1 已加入
      boolean storageState = false;
      if (uid != null) {
         storageState = userGoodsStorageService.isExistStorage(uid, id);
         storageState = userGoodsStorageService.isExistStorage(uid, id, Constant.SOURCE_TYPE_TAOBAO);
      }
      data.put("storageState", storageState);
      data.put("shareUrl", shareUrl);
      data.put("shareUsers", listShareUser);
      data.put("couponUsers", listCouponUser);
      data.put("detailWebUrl", "http://apph5.yeshitv.com/apppage/goods_img.html?id=" + id);
      data.put("detailWebUrl", "http://apph5.banliapp.com/apppage/goods_img.html?id=" + id);
      String noRebateHelpLink = null;
@@ -2247,7 +2274,7 @@
      // 推广红包
      if (from != null && from.equals("taolijin")) {
         // 计算推广红包
         String warningRate = configTaoLiJinService.getValueByKey("warning_value");
         String warningRate = configTaoLiJinService.getValueByKey("warning_value", null);
         BigDecimal spreadMoney = TaoLiJinUtil.getSpreadMoney(warningRate, goods);
         // 推广红包 不能小于1
@@ -2306,7 +2333,7 @@
            data.put("userHongbao", userMoneyExtra.getTlj().setScale(2).toString());
         }
         noRebateHelpLink = configTaoLiJinService.getValueByKey("share_goods_help_link");
         noRebateHelpLink = configTaoLiJinService.getValueByKey("share_goods_help_link", null);
         if (Constant.IS_TEST) {
            fanliValid = true;
@@ -2318,7 +2345,7 @@
         }
      } else if (from != null && from.equals("taolijin_buy")) {
         noRebateHelpLink = configService.get("zigoulijian_nofanli_help");
         noRebateHelpLink = configService.get(ConfigKeyEnum.zigoulijianNofanliHelp.getKey());
         // 查询分享库
         TLJBuyGoods buyGoods = tljBuyGoodsService.selectByAuctionIdAndDay(goods.getAuctionId(),
               TimeUtil.getGernalTime(System.currentTimeMillis(), "yyyy-MM-dd"));
@@ -2347,7 +2374,7 @@
      if (!StringUtil.isNullOrEmpty(noRebateHelpLink)) {
         data.put("noRebateHelpLink", noRebateHelpLink);
      } else {
         data.put("noRebateHelpLink", configService.get("no_rebate_help_link"));
         data.put("noRebateHelpLink", configService.get(ConfigKeyEnum.noRebateHelpLink.getKey()));
      }
      // 取消分享活动
@@ -2441,82 +2468,83 @@
   @RequestMapping(value = "getgoodsderivation", method = RequestMethod.POST)
   public void getRecommendGoods(AcceptData acceptData, long id, PrintWriter out) {
      BusinessSystem system = businessSystemService.getBusinessSystemCache(acceptData.getPlatform(),
            acceptData.getPackages());
      if (system == null) {
         out.print(JsonUtil.loadFalseResult(1, "系统不存在"));
         return;
      }
      List<TaoBaoGoodsBrief> goodsList = TaoKeApiUtil.getRelationGoodsRecommend(id, 10);
      // 初始化
      if (goodsList == null) {
         goodsList = new ArrayList<TaoBaoGoodsBrief>();
      }
      BigDecimal proportion = manageService.getFanLiRate();
      List<TaoBaoGoodsBriefExtra> listExtra = new ArrayList<TaoBaoGoodsBriefExtra>();
      TaoKeAppInfo app = new TaoKeAppInfo();
      app.setAppKey(TaoBaoConstant.TAOBAO_AUTH_APPKEY);
      app.setAppSecret(TaoBaoConstant.TAOBAO_AUTH_APPSECRET);
      app.setAdzoneId(TaoBaoConstant.TAOBAO_SPECIAL_PID_DEFAULT.split("_")[3]);
      app.setPid(TaoBaoConstant.TAOBAO_SPECIAL_PID_DEFAULT);
      List<Long> ids = new ArrayList<>();
      for (TaoBaoGoodsBrief goods : goodsList)
         ids.add(goods.getAuctionId());
      try {
         goodsList = TaoKeApiUtil.getBatchGoodsInfo(ids);
      } catch (TaoKeApiException e1) {
         e1.printStackTrace();
      } catch (TaobaoGoodsDownException e1) {
         e1.printStackTrace();
      }
      if (goodsList != null && goodsList.size() > 0)
         goodsList.parallelStream().forEach(goods -> {
            if (goods != null) {
               // 获取详情
               TaoBaoGoodsBrief taoBaoGoodsBrief = null;
               try {
                  taoBaoGoodsBrief = taoBaoGoodsCacheUtil.getCommonTaoBaoGoodsInfo(goods.getAuctionId());
               } catch (Exception e) {
                  e.printStackTrace();
         List<TaoBaoGoodsBrief> goodsList = TaoKeApiUtil.guessLikeByAuctionId(id, 10);
         // 初始化
         if (goodsList == null) {
            goodsList = new ArrayList<TaoBaoGoodsBrief>();
         }
         BigDecimal proportion = manageService.getFanLiRate();
         List<TaoBaoGoodsBriefExtra> listExtra = new ArrayList<TaoBaoGoodsBriefExtra>();
         TaoKeAppInfo app = new TaoKeAppInfo();
         app.setAppKey(TaoBaoConstant.TAOBAO_AUTH_APPKEY);
         app.setAppSecret(TaoBaoConstant.TAOBAO_AUTH_APPSECRET);
         app.setAdzoneId(TaoBaoConstant.TAOBAO_SPECIAL_PID_DEFAULT.split("_")[3]);
         app.setPid(TaoBaoConstant.TAOBAO_SPECIAL_PID_DEFAULT);
         List<Long> ids = new ArrayList<>();
         for (TaoBaoGoodsBrief goods : goodsList)
            ids.add(goods.getAuctionId());
         try {
            goodsList = TaoKeApiUtil.getBatchGoodsInfo(ids);
         } catch (TaoKeApiException e1) {
            e1.printStackTrace();
         } catch (TaobaoGoodsDownException e1) {
            e1.printStackTrace();
         }
         if (goodsList != null && goodsList.size() > 0)
            goodsList.parallelStream().forEach(goods -> {
               if (goods != null) {
                  // 获取详情
                  TaoBaoGoodsBrief taoBaoGoodsBrief = null;
                  try {
                     taoBaoGoodsBrief = taoBaoGoodsCacheUtil.getCommonTaoBaoGoodsInfo(goods.getAuctionId());
                  } catch (Exception e) {
                     e.printStackTrace();
                  }
                  if (taoBaoGoodsBrief == null) {
                     TaoBaoGoodsBrief newGoods = TaoKeApiUtil.specialConvertCoupon(goods.getAuctionId(), app);
                     goods.setCouponInfo(newGoods.getCouponInfo());
                     goods.setCouponLink(newGoods.getCouponLink());
                     goods.setTkRate(newGoods.getTkRate());
                     taoBaoGoodsBrief = goods;
                  }
                  if (taoBaoGoodsBrief != null) {
                     listExtra.add(
                           TaoBaoUtil.getTaoBaoGoodsBriefExtra(taoBaoGoodsBrief, proportion.toString(), ""));
                  }
               }
            });
               if (taoBaoGoodsBrief == null) {
                  TaoBaoGoodsBrief newGoods = TaoKeApiUtil.specialConvertCoupon(goods.getAuctionId(), app);
                  goods.setCouponInfo(newGoods.getCouponInfo());
                  goods.setCouponLink(newGoods.getCouponLink());
                  goods.setTkRate(newGoods.getTkRate());
                  taoBaoGoodsBrief = goods;
               }
         List<TaoBaoGoodsBrief> listQuality = new ArrayList<TaoBaoGoodsBrief>();
               if (taoBaoGoodsBrief != null) {
                  listExtra.add(TaoBaoUtil.getTaoBaoGoodsBriefExtra(taoBaoGoodsBrief, proportion.toString(), ""));
               }
            }
         });
         // 取偶数个数据
         if (listExtra.size() % 2 != 0) {
            listExtra.remove(listExtra.size() - 1);
         }
      List<TaoBaoGoodsBrief> listQuality = new ArrayList<TaoBaoGoodsBrief>();
         if (listQuality.size() % 2 != 0) {
            listQuality.remove(listQuality.size() - 1);
         }
      // 取偶数个数据
      if (listExtra.size() % 2 != 0) {
         listExtra.remove(listExtra.size() - 1);
         JSONObject data = new JSONObject();
         data.put("listQuality", JsonUtil.getApiCommonGson().toJson(listExtra));
         data.put("listGuess", JsonUtil.getApiCommonGson().toJson(listQuality));
         out.print(JsonUtil.loadTrueResult(data));
      } catch (Exception e) {
         JSONObject data = new JSONObject();
         data.put("listQuality", new JSONArray());
         data.put("listGuess", new JSONArray());
         out.print(JsonUtil.loadTrueResult(data));
      }
      if (listQuality.size() % 2 != 0) {
         listQuality.remove(listQuality.size() - 1);
      }
      JSONObject data = new JSONObject();
      data.put("listQuality", JsonUtil.getApiCommonGson().toJson(listExtra));
      data.put("listGuess", JsonUtil.getApiCommonGson().toJson(listQuality));
      out.print(JsonUtil.loadTrueResult(data));
   }
   /**
@@ -2526,61 +2554,35 @@
    * @param out
    */
   @RequestMapping(value = "getSpecialActivities")
   public void getSpecialActivities(AcceptData acceptData, Long uid, PrintWriter out) {
   public void getSpecialActivities(AcceptData acceptData, Long uid, PrintWriter out, String callback) {
      List<Special> listSpecial = specialService.listByVersion(0, Integer.MAX_VALUE, "special_activities",
            acceptData.getPlatform(), Integer.parseInt(acceptData.getVersion()));
      BusinessSystem system = businessSystemService.getBusinessSystemCache(acceptData.getPlatform(),
            acceptData.getPackages());
      if (system == null) {
         out.print(JsonUtil.loadFalseResult(1, "系统不存在"));
         return;
      List<Special> list = new ArrayList<Special>();
      if (listSpecial != null) {
         list.addAll(listSpecial);
      }
      try {
      for (int i = 0; i < list.size(); i++) {
         Special special = list.get(i);
         List<Special> list = new ArrayList<Special>();
         // 专题活动
         String specialCard = "special_activities";
         List<Special> listSpecial = specialService.listPageBySystemAndCard(0, Integer.MAX_VALUE, specialCard,
               system.getId());
         if (listSpecial != null) {
            list.addAll(listSpecial);
         JumpDetailV2 jumpDetail = special.getJumpDetail();
         if (jumpDetail != null) {
            jumpDetail.setNeedLogin(special.isJumpLogin());
            special.setJumpDetail(jumpDetail);
         }
         for (int i = 0; i < list.size(); i++) {
            Special special = list.get(i);
            JumpDetailV2 jumpDetail = special.getJumpDetail();
            if (jumpDetail != null) {
               jumpDetail.setNeedLogin(special.isJumpLogin());
               special.setJumpDetail(jumpDetail);
            }
            String name = special.getName();
            if (StringUtil.isNullOrEmpty(name)) {
               continue;
            }
            // 是否需要弹出框
            if (name.equals("账户等级特权")) {
               if (!VersionUtil.greaterThan_1_5_60(acceptData.getPlatform(), acceptData.getVersion())) {
                  list.remove(i);
                  i--;
               } else {
                  if (uid != null) {
                     special.setElastic(userTaoLiJinOriginService.hasRankHongBao(uid));
                  }
               }
            }
         String name = special.getName();
         if (StringUtil.isNullOrEmpty(name)) {
            continue;
         }
      }
         JSONObject root = new JSONObject();
         root.put("special", JsonUtil.getApiCommonGson().toJson(list));
      JSONObject root = new JSONObject();
      root.put("special", JsonUtil.getApiCommonGson().toJson(list));
      if (StringUtil.isNullOrEmpty(callback))
         out.print(JsonUtil.loadTrueResult(root));
      } catch (Exception e) {
         e.printStackTrace();
      }
      else
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(root));
   }
}