yujian
2019-07-30 dadacf7c1065876248bec86cf17c06ca4be1b97c
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/RecommendControllerV2.java
@@ -6,30 +6,27 @@
import java.util.Calendar;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
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.JsonUtil;
import org.yeshi.utils.taobao.TbImgUtil;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.yeshi.fanli.dto.jd.JDSearchResult;
import com.yeshi.fanli.dto.pdd.PDDGoodsDetail;
import com.yeshi.fanli.dto.pdd.PDDGoodsResult;
import com.yeshi.fanli.entity.accept.AcceptData;
import com.yeshi.fanli.entity.bus.homemodule.SwiperPicture;
import com.yeshi.fanli.entity.bus.lable.QualityFactory;
import com.yeshi.fanli.entity.common.JumpDetailV2;
import com.yeshi.fanli.entity.taobao.SearchFilter;
import com.yeshi.fanli.entity.jd.JDGoods;
import com.yeshi.fanli.entity.taobao.TLJBuyGoods;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
import com.yeshi.fanli.entity.taobao.TaoBaoSearchResult;
import com.yeshi.fanli.entity.taobao.dataoke.DaTaoKeDetail;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.common.JumpDetailV2Service;
import com.yeshi.fanli.service.inter.config.ConfigService;
@@ -39,15 +36,17 @@
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.dataoke.DaTaoKeGoodsDetailService;
import com.yeshi.fanli.tag.PageEntity;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.RedisManager;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.TaoBaoConstant;
import com.yeshi.fanli.util.Utils;
import com.yeshi.fanli.util.VersionUtil;
import com.yeshi.fanli.util.factory.MonitorFactory;
import com.yeshi.fanli.util.factory.goods.GoodsDetailVOFactory;
@@ -104,6 +103,12 @@
   @Resource
   private SwiperPictureService swiperPictureService;
   
   @Resource
   private JDGoodsService jdGoodsService;
   @Resource
   private PDDGoodsService pddGoodsService;
   
   /**
    * 新版推荐专题管理(1.5.3)
@@ -293,8 +298,7 @@
    * @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("参数信息不正常"));
@@ -307,39 +311,15 @@
      }
      
      if (goodsType == Constant.SOURCE_TYPE_JD) {
         getIndexJDGoods(acceptData, page, out);
         return;
      }
      
      if (goodsType == Constant.SOURCE_TYPE_PDD) {
         getIndexPDDGoods(acceptData, page, out);
         return;
      }
      List<QualityFactory> listQuery = qualityGoodsService.listFreeGoods((page - 1) * 20, 20);
      if (listQuery == null) {
         listQuery = new ArrayList<QualityFactory>();
      }
      JSONArray array = new JSONArray();
      if (listQuery.size() > 0) {
         Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder())
               .excludeFieldsWithoutExposeAnnotation().setDateFormat("yyyy-MM-dd").create();
         BigDecimal fanLiRate = hongBaoManageService.getFanLiRate();
         BigDecimal shareRate = hongBaoManageService.getShareRate();
         for (QualityFactory qualityFactory : listQuery) {
            TaoBaoGoodsBrief goods = qualityFactory.getTaoBaoGoodsBrief();
            if (goods == null) {
               continue;
            }
            array.add(gson.toJson(GoodsDetailVOFactory.convertTaoBao(goods, null, fanLiRate, shareRate)));
         }
      }
      long count = qualityGoodsService.countFreeGoods();
      JSONObject root = new JSONObject();
      root.put("count", count);
      root.put("list", array);
      out.print(JsonUtil.loadTrueResult(root));
      out.print(JsonUtil.loadFalseResult("商品类型错误"));
   }
   
   
@@ -391,7 +371,7 @@
                  ReduceHongBao reduceHongBao = new ReduceHongBao();
                  reduceHongBao.setLeft(goods.getLeftHongBaoCount());
                  reduceHongBao.setMoney(hongBao);
                  reduceHongBao.setName("付款立减 " + hongBao);
                  reduceHongBao.setName("付款立减 ");
                  reduceHongBao.setTip("");
                  reduceHongBao.setTotal(goods.getTotalHongBaoCount());
                  
@@ -490,139 +470,72 @@
   
   
   
   /**
    * 粘贴板信息推荐
    *
    * 京东首页商品
    * @param acceptData
    * @param url
    *            商品链接
    * @param page
    * @param out
    */
   @RequestMapping(value = "getNewGoodsInfo", method = RequestMethod.POST)
   public void getNewGoodsInfo(AcceptData acceptData, String text, PrintWriter out) {
      if (StringUtil.isNullOrEmpty(text)) {
         out.print(JsonUtil.loadFalseResult("值为空"));
         return;
      }
      if (text.length() > 256) {
         out.print(JsonUtil.loadFalseResult("值过长"));
         return;
      }
      TaoBaoGoodsBrief tb = null;
      String URL_REGEX = "(((http|https)://)|(www\\.))[a-zA-Z0-9\\._-]+\\.[a-zA-Z]{2,6}(:[0-9]{1,4})?(/[a-zA-Z0-9\\&%_\\./-~-]*)?";
      Pattern p = Pattern.compile(URL_REGEX);
      Matcher matcher = p.matcher(text);
      if (!matcher.find()) {// 不包含链接
         // 商品详情
         // 发现
         // 没有链接,标题过长也不处理
         if (text.startsWith("【") && text.contains("】")) {
            int end = text.indexOf("】");
            if (end > 2)
               text = text.substring(1, end);
   private void getIndexJDGoods(AcceptData acceptData, int page, PrintWriter out) {
      JDSearchResult result = jdGoodsService.getIndexJDGoods(page);
      long count = 0;
      JSONObject data = new JSONObject();
      JSONArray array = new JSONArray();
      if (result != null) {
         PageEntity pageEntity = result.getPageEntity();
         if (pageEntity != null) {
            count = pageEntity.getTotalCount();
         }
         LogHelper.test("根据粘贴板推荐:"+text);
         if (text.length() > 80) {
            out.print(JsonUtil.loadFalseResult("值过长"));
            return;
         }
         SearchFilter sf = new SearchFilter();
         sf.setKey(text);
         JSONObject root = new JSONObject();
         TaoBaoSearchResult result = TaoBaoUtil.search(sf);
         if (result != null && result.getTaoBaoGoodsBriefs() != null && result.getTaoBaoGoodsBriefs().size() > 0)
            for (TaoBaoGoodsBrief goods : result.getTaoBaoGoodsBriefs()) {
               // 是属于淘宝联盟商品
               if (goods.getTitle().equalsIgnoreCase(text)) {
                  root.put("type", 2);
                  JSONObject data = new JSONObject();
                  data.put("title", goods.getTitle());
                  root.put("data", data);
                  out.print(JsonUtil.loadTrueResult(root));
                  return;
               }
         List<JDGoods> goodsList = result.getGoodsList();
         if (goodsList != null && goodsList.size() > 0) {
            BigDecimal fanLiRate = hongBaoManageService.getFanLiRate();
            BigDecimal shareRate = hongBaoManageService.getShareRate();
            Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder())
                  .excludeFieldsWithoutExposeAnnotation().setDateFormat("yyyy-MM-dd").create();
            for (JDGoods goods : goodsList) {
               GoodsDetailVO goodsDetailVO = GoodsDetailVOFactory.convertJDGoods(goods, fanLiRate, shareRate);
               array.add(gson.toJson(goodsDetailVO));
            }
         // 查询大淘客标题
         List<DaTaoKeDetail> list = daTaoKeGoodsDetailService.listByDtitle(text);
         if (list != null && list.size() > 0) {
            root.put("type", 2);
            JSONObject data = new JSONObject();
            data.put("title", list.get(0).getdTitle());
            root.put("data", data);
            out.print(JsonUtil.loadTrueResult(root));
            return;
         }
         out.print(JsonUtil.loadFalseResult("暂不支持该类型!"));
         return;
      }
      text = matcher.group();
      if (text.contains("ju.taobao.com") || text.contains(".juhuasuan.com")) {// 聚划算
         int index = text.indexOf("item_id");
         if (index < 0) {
            out.println(JsonUtil.loadFalseResult("暂未找到该商品,请稍后再试!"));
            return;
         }
         text = text.substring(index);
         int last = text.indexOf("&");
         String id = "";
         if (last > 0)
            id = text.substring(text.indexOf("=") + 1, text.indexOf("&"));
         else {
            id = text.substring(text.indexOf("=" + 1));
         }
         tb = TaoBaoUtil.isAlimama(id);
         if (tb == null) {
            tb = TaoBaoUtil.parsePhoneTmAndTb(id);
         }
      } else if (text.contains("http://zmnxbc.com")) { // 手机端天猫APP分享
         tb = TaoBaoUtil.parsePhoneShareUrlByTM(text);
      } else if (text.contains("h5.m.taobao") || text.contains("detail.m.tmall") || text.contains("item.taobao")
            || text.contains("detail.tmall")) { // 手机页面和电脑页面
         Map<String, String> map = Utils.parseURL(text);
         String id = "";
         id = map.get("id").replace("}", "");
         tb = TaoBaoUtil.isAlimama(id);
         if (tb == null) {
            tb = TaoBaoUtil.parsePhoneTmAndTb(id);
         }
      } else {
         tb = TaoBaoUtil.parsePhoneShareUrlByTB(text);
      }
      if (tb != null) {
         JSONObject data = new JSONObject();
         JSONObject taoBaoGoodsJSON = new JSONObject();
         taoBaoGoodsJSON.put("title", tb.getTitle());
         taoBaoGoodsJSON.put("zkPrice", tb.getZkPrice());
         taoBaoGoodsJSON.put("auctionId", tb.getAuctionId());
         taoBaoGoodsJSON.put("url", "http://item.taobao.com/item.htm?id=" + tb.getAuctionId());
         data.put("taoBaoGoodsBrief", taoBaoGoodsJSON);
         if (!StringUtil.isNullOrEmpty(tb.getPictUrl())) {
            if (tb.getImgList() == null)
               tb.setImgList(new ArrayList<>());
            tb.getImgList().add(0, TbImgUtil.getTBSize220Img(tb.getPictUrl()));
         }
         data.put("tbImgs", tb.getImgList());
         JSONObject root = new JSONObject();
         root.put("type", 1);
         root.put("data", data);
         out.print(JsonUtil.loadTrueResult(root));
      }
      out.println(JsonUtil.loadFalseResult("暂未找到该商品,请稍后再试!"));
      return;
      data.put("list", array);
      data.put("count", count);
      out.print(JsonUtil.loadTrueResult(data));
   }
   /**
    *   爆款排行商品-实时热销榜
    * @param acceptData
    * @param page
    * @param out
    */
   private void getIndexPDDGoods(AcceptData acceptData, int page, PrintWriter out) {
      PDDGoodsResult result = pddGoodsService.getIndexPDDGoods(page);
      int count = 0;
      JSONArray array = new JSONArray();
      if (result != null) {
         count = result.getTotalCount();
         Gson gson = JsonUtil.getApiCommonGson();
         List<PDDGoodsDetail> goodsList = result.getGoodsList();
         if (goodsList != null && goodsList.size() > 0) {
            BigDecimal fanLiRate = hongBaoManageService.getFanLiRate();
            BigDecimal shareRate = hongBaoManageService.getShareRate();
            for (PDDGoodsDetail goods : goodsList) {
               GoodsDetailVO goodsDetailVO = GoodsDetailVOFactory.convertPDDGoods(goods, fanLiRate, shareRate);
               array.add(gson.toJson(goodsDetailVO));
            }
         }
      }
      JSONObject data = new JSONObject();
      data.put("list", array);
      data.put("count", count);
      out.print(JsonUtil.loadTrueResult(data));
   }
}