admin
2019-08-13 f77b296544517db3f2cb56aab9c754d4810cc35d
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/RecommendControllerV2.java
@@ -16,8 +16,6 @@
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.yeshi.fanli.dto.jd.JDFilter;
import com.yeshi.fanli.dto.jd.JDSearchFilter;
import com.yeshi.fanli.dto.jd.JDSearchResult;
import com.yeshi.fanli.dto.pdd.PDDGoodsDetail;
import com.yeshi.fanli.dto.pdd.PDDGoodsResult;
@@ -38,9 +36,12 @@
import com.yeshi.fanli.service.inter.homemodule.SpecialService;
import com.yeshi.fanli.service.inter.homemodule.SwiperPictureService;
import com.yeshi.fanli.service.inter.hongbao.HongBaoManageService;
import com.yeshi.fanli.service.inter.jd.JDGoodsService;
import com.yeshi.fanli.service.inter.lable.QualityFlashSaleService;
import com.yeshi.fanli.service.inter.lable.QualityGoodsService;
import com.yeshi.fanli.service.inter.monitor.MonitorService;
import com.yeshi.fanli.service.inter.pdd.PDDGoodsService;
import com.yeshi.fanli.service.inter.taobao.TaoBaoGoodsUpdateService;
import com.yeshi.fanli.service.inter.taobao.dataoke.DaTaoKeGoodsDetailService;
import com.yeshi.fanli.tag.PageEntity;
import com.yeshi.fanli.util.Constant;
@@ -50,9 +51,6 @@
import com.yeshi.fanli.util.VersionUtil;
import com.yeshi.fanli.util.factory.MonitorFactory;
import com.yeshi.fanli.util.factory.goods.GoodsDetailVOFactory;
import com.yeshi.fanli.util.jd.JDApiUtil;
import com.yeshi.fanli.util.jd.JDUtil;
import com.yeshi.fanli.util.pinduoduo.PinDuoDuoApiUtil;
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
import com.yeshi.fanli.vo.goods.GoodsDetailVO;
@@ -75,13 +73,13 @@
   @Resource
   private RedisManager redisManager;
   @Resource
   private HomeRecommendGoodsService homeRecommendGoodsService;
   @Resource
   private ConfigService configService;
   @Resource
   private MonitorService monitorService;
@@ -93,20 +91,28 @@
   @Resource
   private RecommendGoodsDeleteHistoryService recommendGoodsDeleteHistoryService;
   @Resource
   private JumpDetailV2Service jumpDetailV2Service;
   @Resource
   private DeviceSexService deviceSexService;
   @Resource
   private SpecialService specialService;
   @Resource
   private SwiperPictureService swiperPictureService;
   @Resource
   private JDGoodsService jdGoodsService;
   @Resource
   private PDDGoodsService pddGoodsService;
   @Resource
   private TaoBaoGoodsUpdateService taoBaoGoodsUpdateService;
   /**
    * 新版推荐专题管理(1.5.3)
    * 
@@ -123,10 +129,16 @@
         JSONObject root = specialService.listCacheSpecialToIndex(acceptData, deviceSex);
         // 2、顶部轮播图
         List<SwiperPicture> topPicList = swiperPictureService.getByBannerCard("index_top");
         if (topPicList == null) {
            topPicList = new ArrayList<SwiperPicture>();
         List<SwiperPicture> oldtopPicList = swiperPictureService.getByBannerCard("index_top");
         List<SwiperPicture> topPicList = new ArrayList<>();
         if (oldtopPicList != null && oldtopPicList.size() > 0)
            topPicList.addAll(oldtopPicList);
         if ("ios".equalsIgnoreCase(acceptData.getPlatform())) {
            SwiperPicture notifyReName = swiperPictureService.selectByPrimaryKey(162L);
            if (notifyReName != null)
               topPicList.add(0, notifyReName);
         }
         root.put("topPicList", JsonUtil.getApiCommonGson().toJson(topPicList));
         // 3、邀请有奖
@@ -161,9 +173,7 @@
         }
      }
   }
   /**
    * 限时秒杀 1.5.3
    * 
@@ -175,8 +185,6 @@
      JSONObject root = getSpikeGoodsContent(acceptData);
      out.print(JsonUtil.loadTrueResult(root));
   }
   private JSONObject getSpikeGoodsContent(AcceptData acceptData) {
      // 下一次倒计时的时间
@@ -233,7 +241,7 @@
         BigDecimal fanLiRate = hongBaoManageService.getFanLiRate();
         BigDecimal shareRate = hongBaoManageService.getShareRate();
         Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder())
               .excludeFieldsWithoutExposeAnnotation().setDateFormat("yyyy-MM-dd").create();
@@ -250,11 +258,12 @@
            if (taoBaoGoodsBrief == null) {
               continue;
            }
            GoodsDetailVO detailVO = GoodsDetailVOFactory.convertTaoBao(taoBaoGoodsBrief, null, fanLiRate, shareRate);
            GoodsDetailVO detailVO = GoodsDetailVOFactory.convertTaoBao(taoBaoGoodsBrief, null, fanLiRate,
                  shareRate);
            JSONObject params = new JSONObject();
            params.put("url", configService.get("spike_goods_link") + "?id=" + taoBaoGoodsBrief.getAuctionId());
            JSONObject goods = new JSONObject();
            goods.put("goods", gson.toJson(detailVO));
            goods.put("params", params);
@@ -286,41 +295,47 @@
      return root;
   }
   /**
    * 首页底部商品推荐
    *
    * @param acceptData
    * @param out
    */
   @RequestMapping(value = "getGoodList")
   public void getGoodList(AcceptData acceptData, Integer goodsType, Integer page,   HttpServletRequest request, PrintWriter out) {
   public void getGoodList(AcceptData acceptData, Integer goodsType, Integer page, HttpServletRequest request,
         PrintWriter out) {
      if (goodsType == null || page == null) {
         out.print(JsonUtil.loadFalseResult("参数信息不正常"));
         return;
      }
      if (goodsType == Constant.SOURCE_TYPE_TAOBAO) {
         taoBaoGuessUserLikeByDevice(acceptData, page, request, out);
         return;
      try {
         if (goodsType == Constant.SOURCE_TYPE_TAOBAO) {
            taoBaoGuessUserLikeByDevice(acceptData, page, request, out);
            return;
         }
         if (goodsType == Constant.SOURCE_TYPE_JD) {
            getIndexJDGoods(acceptData, page, out);
            return;
         }
         if (goodsType == Constant.SOURCE_TYPE_PDD) {
            getIndexPDDGoods(acceptData, page, out);
            return;
         }
         out.print(JsonUtil.loadFalseResult("商品类型错误"));
      } catch (Exception e) {
         LogHelper.errorDetailInfo(e);
         JSONObject data = new JSONObject();
         data.put("list", new JSONArray());
         data.put("count", 0);
         out.print(JsonUtil.loadTrueResult(data));
      }
      if (goodsType == Constant.SOURCE_TYPE_JD) {
         getIndexJDGoods(acceptData, page, out);
         return;
      }
      if (goodsType == Constant.SOURCE_TYPE_PDD) {
         searchPDDGoods(acceptData, page, out);
         return;
      }
      out.print(JsonUtil.loadFalseResult("商品类型错误"));
   }
   /**
    * 根据设备信息获取猜你喜欢的内容
    * 
@@ -330,16 +345,24 @@
    * @param idfa
    *            -IOS的idfa广告标识信息
    */
   public void taoBaoGuessUserLikeByDevice(AcceptData acceptData, int page, HttpServletRequest request, PrintWriter out) {
   public void taoBaoGuessUserLikeByDevice(AcceptData acceptData, int page, HttpServletRequest request,
         PrintWriter out) {
      int pageSize = Constant.PAGE_SIZE;
      JSONArray array = new JSONArray();
      Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder()).create();
      String idfa = acceptData.getIdfa();
      String imei = acceptData.getImei();
      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 fanLiRate = hongBaoManageService.getFanLiRate();
         BigDecimal shareRate = hongBaoManageService.getShareRate();
@@ -361,20 +384,22 @@
               for (int i = list.size() - 1; i >= 0; i--) {
                  TLJBuyGoods goods = list.get(i);
                  BigDecimal rateBuy = TaoBaoConstant.OWN_BUY_WITHOUT_FANLI_RATE;
                  GoodsDetailVO detailVO = GoodsDetailVOFactory.convertTaoBao(goods.getGoods(), null, rateBuy, rateBuy);
                  String hongBao = TaoBaoUtil.getGoodsHongBaoInfo(goods.getGoods(),TaoBaoConstant.OWN_BUY_WITHOUT_FANLI_RATE);
                  GoodsDetailVO detailVO = GoodsDetailVOFactory.convertTaoBao(goods.getGoods(), null, rateBuy,
                        rateBuy);
                  String hongBao = TaoBaoUtil.getGoodsHongBaoInfo(goods.getGoods(),
                        TaoBaoConstant.OWN_BUY_WITHOUT_FANLI_RATE);
                  ReduceHongBao reduceHongBao = new ReduceHongBao();
                  reduceHongBao.setLeft(goods.getLeftHongBaoCount());
                  reduceHongBao.setMoney(hongBao);
                  reduceHongBao.setName("付款立减 ");
                  reduceHongBao.setTip("");
                  reduceHongBao.setTotal(goods.getTotalHongBaoCount());
                  OtherInfo otherInfo = new OtherInfo();
                  otherInfo.setReduceHongBao(reduceHongBao);
                  detailVO.setOtherInfo(otherInfo);
                  detailVO.setPictureTag(new ClientTextStyleVO("立减TOP" + (i + 1), "#E5005C", "#FCE431", null));
                  detailVO.setRecommend(true);
@@ -414,20 +439,21 @@
               if (gList != null) {
                  BigDecimal fanLiRate = hongBaoManageService.getFanLiRate();
                  BigDecimal shareRate = hongBaoManageService.getShareRate();
                  for (TaoBaoGoodsBrief goods : gList) {
                     if (!StringUtil.isNullOrEmpty(goods.getCouponInfo()) && goods.getCouponAmount() != null
                           && goods.getCouponAmount().compareTo(new BigDecimal("5")) >= 0
                           && goods.getBiz30day() > 1000
                           && !StringUtil.isNullOrEmpty(goods.getPictUrlWhite())) {
                        GoodsDetailVO detailVO = GoodsDetailVOFactory.convertTaoBao(goods, null, fanLiRate, shareRate);
                        GoodsDetailVO detailVO = GoodsDetailVOFactory.convertTaoBao(goods, null, fanLiRate,
                              shareRate);
                        detailVO.setRecommend(true);
                        goodsList.add(detailVO);
                     }
                  }
               }
               try {
                  monitorService.addClientAPIMonitor(MonitorFactory.createClientAPI(request, 0,
                        (int) (java.lang.System.currentTimeMillis() - startTime), "推荐数量:" + goodsList.size()));
@@ -464,32 +490,16 @@
      data.put("count", 1000);
      out.print(JsonUtil.loadTrueResult(data));
   }
   /**
    * 京东首页商品
    *
    * @param acceptData
    * @param page
    * @param out
    */
   private void getIndexJDGoods(AcceptData acceptData, int page, PrintWriter out) {
      JDSearchResult result = null;
      String way = configService.get("jd_api_search_key");
      if ("1".equals(way)) {
         JDFilter filterAPI = new JDFilter();
         filterAPI.setPageIndex(page);
         filterAPI.setPageSize(20);
         result = JDApiUtil.queryByKey(filterAPI);
      } else {
         // 网页爬取
         JDSearchFilter jdfilter = new JDSearchFilter();
         jdfilter.setPageNo(page);
         jdfilter.setPageSize(Constant.PAGE_SIZE);
         result = JDUtil.searchByKey(jdfilter);
      }
      JDSearchResult result = jdGoodsService.getIndexJDGoods(page);
      long count = 0;
      JSONObject data = new JSONObject();
      JSONArray array = new JSONArray();
@@ -506,8 +516,7 @@
            Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder())
                  .excludeFieldsWithoutExposeAnnotation().setDateFormat("yyyy-MM-dd").create();
            for (JDGoods goods : goodsList) {
               GoodsDetailVO goodsDetailVO = GoodsDetailVOFactory.convertJDGoods(goods, null, fanLiRate,
                     shareRate);
               GoodsDetailVO goodsDetailVO = GoodsDetailVOFactory.convertJDGoods(goods, fanLiRate, shareRate);
               array.add(gson.toJson(goodsDetailVO));
            }
         }
@@ -518,16 +527,15 @@
      out.print(JsonUtil.loadTrueResult(data));
   }
   /**
    *   爆款排行商品-实时热销榜
    * 爆款排行商品-实时热销榜
    *
    * @param acceptData
    * @param page
    * @param out
    */
   private void searchPDDGoods(AcceptData acceptData, int page, PrintWriter out) {
      PDDGoodsResult result = PinDuoDuoApiUtil.getTopList(PinDuoDuoApiUtil.PID_FANLI, page-1, Constant.PAGE_SIZE, 1);
   private void getIndexPDDGoods(AcceptData acceptData, int page, PrintWriter out) {
      PDDGoodsResult result = pddGoodsService.getTopGoodsList(page, 1);
      int count = 0;
      JSONArray array = new JSONArray();
      if (result != null) {
@@ -539,8 +547,7 @@
            BigDecimal shareRate = hongBaoManageService.getShareRate();
            for (PDDGoodsDetail goods : goodsList) {
               GoodsDetailVO goodsDetailVO = GoodsDetailVOFactory.convertPDDGoods(goods, null, fanLiRate,
                     shareRate);
               GoodsDetailVO goodsDetailVO = GoodsDetailVOFactory.convertPDDGoods(goods, fanLiRate, shareRate);
               array.add(gson.toJson(goodsDetailVO));
            }
         }
@@ -551,5 +558,5 @@
      data.put("count", count);
      out.print(JsonUtil.loadTrueResult(data));
   }
}