yujian
2019-07-19 8222e8b237c5dfb0affcdc03335bfadc06403bf8
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/SearchControllerV2.java
@@ -4,20 +4,23 @@
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.annotation.Resource;
import org.springframework.core.task.TaskExecutor;
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.dataoke.DaTaoKeGoodsResult;
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;
@@ -27,10 +30,9 @@
import com.yeshi.fanli.entity.jd.JDGoods;
import com.yeshi.fanli.entity.taobao.SearchFilter;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
import com.yeshi.fanli.entity.taobao.TaoBaoSearchNav;
import com.yeshi.fanli.entity.taobao.TaoBaoSearchResult;
import com.yeshi.fanli.entity.taobao.dataoke.DaTaoKeDetail;
import com.yeshi.fanli.entity.taobao.dataoke.DaTaoKeDetailV2;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.config.BusinessSystemService;
import com.yeshi.fanli.service.inter.config.ConfigService;
import com.yeshi.fanli.service.inter.config.SuperHotSearchService;
@@ -45,11 +47,13 @@
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.ThreadUtil;
import com.yeshi.fanli.util.Utils;
import com.yeshi.fanli.util.cache.TaoBaoGoodsCacheUtil;
import com.yeshi.fanli.util.dataoke.DaTaoKeApiUtil;
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.pinduoduo.PinDuoDuoUtil;
import com.yeshi.fanli.util.taobao.SearchFilterUtil;
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
import com.yeshi.fanli.vo.brand.TaoBaoShopVO;
@@ -94,7 +98,147 @@
   @Resource
   private DaTaoKeGoodsDetailService daTaoKeGoodsDetailService;
   @Resource(name = "taskExecutor")
   private TaskExecutor executor;
   /**
    * 粘贴板信息推荐
    *
    * @param acceptData
    * @param url
    *            商品链接
    * @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);
         }
         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<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) {
         out.println(JsonUtil.loadFalseResult("暂未找到该商品,请稍后再试!"));
         return;
      }
      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));
   }
   /**
    * 搜索候选词
    * 
@@ -113,9 +257,9 @@
      if (goodsType == Constant.SOURCE_TYPE_TAOBAO) {
         list = TaoBaoUtil.getSuguestSearch(kw);
      } else if (goodsType == Constant.SOURCE_TYPE_JD) {
         list = JDUtil.suggestSearch(kw);
      } else if (goodsType == Constant.SOURCE_TYPE_PDD) {
         list = PinDuoDuoUtil.suggestSearch(kw);
      }
      if (list == null || list.size() == 0) {
@@ -145,106 +289,63 @@
    * @param out
    */
   @RequestMapping(value = "searchGoods")
   public void searchGoods(AcceptData acceptData, String kw, int page, String filter, String order, String startprice,
         String endprice, Double startTkRate, Double endTkRate, String fastFilter, Integer goodsType,
   public void searchGoods(AcceptData acceptData, Integer goodsType, String key, Integer page, String filter, Integer order,
         PrintWriter out) {
      if (goodsType == null || goodsType < 1 || goodsType >3) {
         out.print(JsonUtil.loadFalseResult(1, "请传递正确平台参数"));
         return;
      }
      if (page == null || page < 1) {
         out.print(JsonUtil.loadFalseResult(1, "页码不能小于1"));
         return;
      }
      if (StringUtil.isNullOrEmpty(key)) {
         out.print(JsonUtil.loadFalseResult(1, "请输入搜索内容"));
         return;
      }
      final String searchkey = key.trim();
      executor.execute(new Runnable() {
         @Override
         public void run() {
            StringBuffer sb = new StringBuffer();
            String link = "#$$$#";
            String platform = acceptData.getPlatform();
            String packages = acceptData.getPackages();
            String device = acceptData.getDevice();
            sb.append(platform).append(link).append(packages).append(link).append(device);
            String bid = StringUtil.Md5(sb.toString());
            // 加入搜索历史记录
            historySearchService.addHistorySearch(searchkey, bid);
         }
      });
      String bid = getHistorySearchBid(acceptData);
      // 加入搜索历史记录
      historySearchService.addHistorySearch(kw, bid);
      if (!StringUtil.isNullOrEmpty(kw) && (kw.startsWith("http://") || kw.startsWith("https://"))) {
      if (searchkey.startsWith("http://") || searchkey.startsWith("https://")) {
         JSONObject data = new JSONObject();
         data.put("result", new JSONArray());
         data.put("count", 0);
         data.put("nav", new JSONArray());
         out.print(JsonUtil.loadTrueResult(data));
         return;
      }
      if (!StringUtil.isNullOrEmpty(fastFilter)) {
         if (!StringUtil.isNullOrEmpty(filter)) {
            JSONArray filterArray = JSONArray.fromObject(filter);
            JSONArray fastFilterArray = JSONArray.fromObject(fastFilter);
            filterArray.addAll(fastFilterArray);
            filter = filterArray.toString();
         } else {
            filter = fastFilter;
         }
      }
      // 默认淘宝
      if (goodsType == null) {
         goodsType = Constant.SOURCE_TYPE_TAOBAO;
      }
      // 京东商品
      /*--------- 京东商品  -------*/
      if (goodsType.intValue() == Constant.SOURCE_TYPE_JD) {
         searchJDGoods(kw, page, filter, order, startprice, endprice, out);
         searchJDGoods(searchkey, page, filter, order, out);
         return;
      }
      /*-------- 拼多多商品  -------*/
      if (goodsType.intValue() == Constant.SOURCE_TYPE_PDD) {
         // 拼多多商品 TODO
         searchPDDGoods(kw, page, filter, order, startprice, endprice, out);
         searchPDDGoods(searchkey, page, filter, order, out);
         return;
      }
      // 是否是推荐
      boolean recommend = false;
      if (!StringUtil.isNullOrEmpty(fastFilter)) {
         // 查询淘宝天猫
         JSONArray array = JSONArray.fromObject(filter);
         for (int i = 0; i < array.size(); i++) {
            String ty = array.optJSONObject(i).optString("type");
            if ("recommend".equalsIgnoreCase(ty)) {
               recommend = true;
            }
         }
      }
      JSONObject data = null;
      if (!recommend) {
         // 淘宝接口请求
         data = searchTaoBaoGoods(kw, page, filter, order, startprice, endprice);
      } else {
         // 推荐:大淘客
         data = searchDaTaoKeGoods(kw, page, filter, order, startprice, endprice);
      }
      // 获取推荐词
      List<String> listRecommendWords = new ArrayList<String>();
      // 综合 查询第一页时获取候选词
      if (page == 1) {
         listRecommendWords = TaoBaoUtil.getSuguestSearch(kw);
         if (listRecommendWords == null || listRecommendWords.size() == 0) {
            listRecommendWords = new ArrayList<String>();
         }
         List<TaoBaoShopVO> listShop = taoBaoShopService.getShopByKey(kw);
         if (listShop != null && listShop.size() > 0 && listShop.get(0).getListGoods() != null
               && listShop.get(0).getListGoods().size() > 2) {
            data.put("shop", JsonUtil.getApiCommonGson().toJson(listShop.get(0)));
         }
      }
      Gson gson = new GsonBuilder().create();
      if (data != null)
         data.put("words", gson.toJson(listRecommendWords));
      out.print(JsonUtil.loadTrueResult(data));
   }
   private String getHistorySearchBid(AcceptData acceptData) {
      StringBuffer sb = new StringBuffer();
      String link = "#$$$#";
      String platform = acceptData.getPlatform();
      String packages = acceptData.getPackages();
      String device = acceptData.getDevice();
      sb.append(platform).append(link).append(packages).append(link).append(device);
      return StringUtil.Md5(sb.toString());
      /*-------- 淘宝商品  -------*/
      searchTaoBaoGoods(searchkey, page, filter, order, out);
   }
   /**
@@ -258,149 +359,58 @@
    * @param endprice
    * @return
    */
   private JSONObject searchTaoBaoGoods(String kw, int page, String filter, String order, String startprice,
         String endprice) {
   private void searchTaoBaoGoods(String key, Integer page, String filter, Integer order, PrintWriter out) {
      SearchFilter sf = new SearchFilter();
      sf.setKey(SearchFilterUtil.filterSearchContent(kw));
      sf.setKey(SearchFilterUtil.filterSearchContent(key));
      sf.setPage(page);
      sf.setSort(0);
      sf.setPageSize(Constant.PAGE_SIZE);
      if (!com.yeshi.fanli.util.StringUtil.isNullOrEmpty(startprice)) {
         sf.setStartPrice(new BigDecimal(startprice));
      }
      if (!com.yeshi.fanli.util.StringUtil.isNullOrEmpty(endprice)) {
         sf.setEndPrice(new BigDecimal(endprice));
      }
      if (!com.yeshi.fanli.util.StringUtil.isNullOrEmpty(order)) {
         if (Integer.parseInt(order) == 1) {
      if (order != null) {
         if (order == 1) { // 销量高到低
            sf.setSort(TaoBaoUtil.SORT_SALE_HIGH_TO_LOW);
         } else if (Integer.parseInt(order) == 2) {
         } else if (order == 2) { // 价格高到低
            sf.setSort(TaoBaoUtil.SORT_PRICE_HIGH_TO_LOW);
         } else if (Integer.parseInt(order) == 3) {
         } else if (order == 3) { // 价格低到高
            sf.setSort(TaoBaoUtil.SORT_PRICE_LOW_TO_HIGH);
         } else if (Integer.parseInt(order) == 4) {
            sf.setSort(TaoBaoUtil.SORT_TOTAL_SALES_HIGH_TO_LOW);
         } else if (Integer.parseInt(order) == 5) {
         } else if (order == 4) { // 返利比高到低
            sf.setSort(TaoBaoUtil.SORT_TKRATE_HIGH_TO_LOW);
         } else if (Integer.parseInt(order) == 6) {
            sf.setSort(TaoBaoUtil.SORT_TKRATE_LOW_TO_HIGH);
         }
      } else {
         // 默认销量从高到低排序
         sf.setSort(TaoBaoUtil.SORT_SALE_HIGH_TO_LOW);
      }
      if (!com.yeshi.fanli.util.StringUtil.isNullOrEmpty(filter)) {
         // 查询淘宝天猫
         JSONArray array = JSONArray.fromObject(filter);
         Set<String> params = new HashSet<String>();
         for (int i = 0; i < array.size(); i++) {
            // [{"type":'shoptype',id:12}]
            String ty = array.optJSONObject(i).optString("type");
            if ("shoptype".equalsIgnoreCase(ty)) {
               if (array.optJSONObject(i).optInt("id") == 21) {
                  sf.setTmFlagship(false); // 不筛�?
               } else {
                  sf.setTmFlagship(true);
                  sf.setTmall(true);
                  sf.setShopTag("b2c");
               }
            } else if ("category".equalsIgnoreCase(ty)) {
               sf.setCateIds(array.optJSONObject(i).optString("id"));
            } else if ("userType".equalsIgnoreCase(ty)) {
               // if(array.optJSONObject(i).optInt("id") == 51)
               sf.setTmall(true);
               // else
               // sf.setTmall(false);
            } else if ("baoyou".equalsIgnoreCase(ty)) {
               // if(array.optJSONObject(i).optInt("id") == 61)
               sf.setBaoYou(true);
               // else
               // sf.setBaoYou(false);
            } else if ("quantype".equalsIgnoreCase(ty)) {
               // if (array.optJSONObject(i).optInt("id") == 31){
               sf.setQuan(1);
               if (sf.isTmFlagship()) {
                  sf.setShopTag(sf.getShopTag() + ",dpyhq");
               } else {
                  sf.setShopTag("dpyhq");
               }
               // }
               // else
               // sf.setQuan(2);
            } else if ("hongbaotype".equalsIgnoreCase(ty)) {
               if (array.optJSONObject(i).optInt("id") == 41)// 有红�?
                  sf.setHongbao(1);
               else// 无红�?
                  sf.setHongbao(2);
            } else if ("property".equalsIgnoreCase(ty)) {
               String pid = (String) array.optJSONObject(i).opt("pid");
               String id = (String) array.optJSONObject(i).opt("id");
               boolean flag = false;
               String str = null;
               for (String string : params) {
                  flag = string.contains(pid + ":");
                  if (flag) {
                     str = string;
                     break;
                  }
               }
               if (flag) {
                  params.add(str + "," + id);
                  params.remove(str);
               } else {
                  params.add(pid + ":" + id);
               }
            } else if ("fahuodi".equalsIgnoreCase(ty)) {
               int id = array.optJSONObject(i).optInt("id");
               sf.setProvinceId(id);
            } else if ("materialId".equalsIgnoreCase(ty)) {
               int id = array.optJSONObject(i).optInt("id");
               sf.setProvinceId(id);
            } else if ("tkRate1".equalsIgnoreCase(ty)) {
               setSearchTkRate(0, sf);
            } else if ("tkRate2".equalsIgnoreCase(ty)) {
               setSearchTkRate(1, sf);
            } else if ("tkRate3".equalsIgnoreCase(ty)) {
               setSearchTkRate(2, sf);
            } else if ("tkRate4".equalsIgnoreCase(ty)) {
               setSearchTkRate(3, sf);
            } else if ("tkRate5".equalsIgnoreCase(ty)) {
               setSearchTkRate(4, sf);
            }
      }
      if (!StringUtil.isNullOrEmpty(filter)) {
         JSONObject jsonfilter = JSONObject.fromObject(filter);
         Boolean coupon = jsonfilter.optBoolean("coupon");
         if (coupon != null && coupon) {
            sf.setQuan(1); // 有券
         }
         sf.setParams(params);
         Boolean tmall = jsonfilter.optBoolean("tmall");
         if (tmall != null && tmall) {
            sf.setTmall(true); // 天猫
         }
         String minPrice = jsonfilter.optString("minPrice");
         if (!StringUtil.isNullOrEmpty(minPrice)) {
            sf.setStartPrice(new BigDecimal(minPrice));
         }
         String maxPrice = jsonfilter.optString("maxPrice");
         if (!StringUtil.isNullOrEmpty(maxPrice)) {
            sf.setEndPrice(new BigDecimal(maxPrice));
         }
      }
      // 搜索大淘客
      List<DaTaoKeDetail> daTaoKeList = null;
      if (page == 1)
         daTaoKeList = daTaoKeGoodsDetailService.listByDtitle(kw);
      TaoBaoSearchResult result = TaoBaoUtil.search(sf);
      if (result == null) {
         return null;
      if (page == 1) {
         daTaoKeList = daTaoKeGoodsDetailService.listByDtitle(key);
      }
      // 淘宝api搜索商品
      TaoBaoSearchResult result = TaoBaoUtil.search(sf);
      // 搜索是否在营销主商品库
      if (result != null && result.getTaoBaoGoodsBriefs() != null && result.getTaoBaoGoodsBriefs().size() > 0) {
         // 暂时放弃更新到营销商品库
         // String numIds = "";
         // for (TaoBaoGoodsBrief goods : result.getTaoBaoGoodsBriefs()) {
         // numIds += goods.getAuctionId() + ",";
         // }
         // if (numIds.endsWith(","))
         // numIds = numIds.substring(0, numIds.length() - 1);
         // try {
         // List<TaoBaoGoodsBrief> goodsList =
         // TaoKeApiUtil.getBatchGoodsInfos(numIds);
         // Map<Long, Integer> map = new HashMap<>();
         // for (TaoBaoGoodsBrief g : goodsList)
         // map.put(g.getAuctionId(), g.getMaterialLibType());
         // for (TaoBaoGoodsBrief goods : result.getTaoBaoGoodsBriefs())
         // goods.setMaterialLibType(map.get(goods.getAuctionId()));
         ThreadUtil.run(new Runnable() {
            @Override
            public void run() {
@@ -409,137 +419,51 @@
                  taoBaoGoodsCacheUtil.saveCommonTaoBaoGoodsInfo(goods);
            }
         });
         // } catch (Exception e) {
         // e.printStackTrace();
         // }
      }
      List<TaoBaoSearchNav> navList = TaoBaoUtil.getBaseNav();
      if (result.getNavList() != null)
         navList.addAll(result.getNavList());
      Gson gson = new GsonBuilder().create();
      JSONObject data = new JSONObject();
      data.put("nav", gson.toJson(navList));
      List<GoodsDetailVO> list = new ArrayList<GoodsDetailVO>();
      List<TaoBaoGoodsBrief> taoBaoGoodsBriefs = result.getTaoBaoGoodsBriefs();
      if (taoBaoGoodsBriefs == null)
      List<TaoBaoGoodsBrief> taoBaoGoodsBriefs = null;
      if (result != null) {
         taoBaoGoodsBriefs = result.getTaoBaoGoodsBriefs();
      }
      if (taoBaoGoodsBriefs == null) {
         taoBaoGoodsBriefs = new ArrayList<>();
      try {
         if (daTaoKeList != null && daTaoKeList.size() > 0) {
      }
      if (daTaoKeList != null && daTaoKeList.size() > 0) {
         try {
            Collections.reverse(daTaoKeList);
            for (DaTaoKeDetail detail : daTaoKeList) {
               taoBaoGoodsBriefs.add(0, TaoBaoUtil.convert(detail));
            }
         } catch (Exception e) {
         }
      } catch (Exception e) {
      }
      int fq = sf.getQuan();
      int fh = sf.getHongbao();
      boolean ft = sf.isTmall();
      List<GoodsDetailVO> list = new ArrayList<GoodsDetailVO>();
      BigDecimal fanLiRate = hongBaoManageService.getFanLiRate();
      BigDecimal shareRate = hongBaoManageService.getShareRate();
      if (fq == 0 && fh == 0 && !ft) {
         if (result != null && taoBaoGoodsBriefs != null)
            for (TaoBaoGoodsBrief bf : taoBaoGoodsBriefs) {
               list.add(GoodsDetailVOFactory.convertTaoBao(bf, null, fanLiRate, shareRate));
            }
      } else {
         if (taoBaoGoodsBriefs != null)
            for (TaoBaoGoodsBrief taoBaoGoodsBrief : taoBaoGoodsBriefs) {
               list.add(GoodsDetailVOFactory.convertTaoBao(taoBaoGoodsBrief, null, fanLiRate, shareRate));
            }
      for (TaoBaoGoodsBrief goods : taoBaoGoodsBriefs) {
         list.add(GoodsDetailVOFactory.convertTaoBao(goods, null, fanLiRate, shareRate));
      }
      Gson gson2 = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder())
      Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder())
            .excludeFieldsWithoutExposeAnnotation().create();
      data.put("result", gson2.toJson(list));
      data.put("count", result.getTaoBaoHead().getDocsfound());
      return data;
   }
   /**
    * 大淘客商品
    *
    * @param key
    * @param page
    * @param filter
    * @param order
    * @param startprice
    * @param endprice
    * @return
    */
   private JSONObject searchDaTaoKeGoods(String key, int page, String filter, String order, String startprice,
         String endprice) {
      int sort = DaTaoKeApiUtil.SORT_DEFAULT;
      if ("5".equalsIgnoreCase(order)) {
         sort = DaTaoKeApiUtil.SORT_COMMISSION;
      } else if ("1".equalsIgnoreCase(order)) {
         sort = DaTaoKeApiUtil.SORT_SALES;
      } else if ("2".equalsIgnoreCase(order)) {
         sort = DaTaoKeApiUtil.SORT_PRICE_HIGH_TO_LOW;
      } else if ("3".equalsIgnoreCase(order)) {
         sort = DaTaoKeApiUtil.SORT_PRICE_LOW_TO_HIGH;
      }
      List<GoodsDetailVO> listVO = new ArrayList<GoodsDetailVO>();
      BigDecimal fanLiRate = hongBaoManageService.getFanLiRate();
      BigDecimal shareRate = hongBaoManageService.getShareRate();
      DaTaoKeGoodsResult result = DaTaoKeApiUtil.search(key, null, null, null, page, 20, sort);
      if (result != null && result.getGoodsList() != null)
         for (DaTaoKeDetailV2 goods : result.getGoodsList()) {
            listVO.add(GoodsDetailVOFactory.convertTaoBao(TaoBaoUtil.convert(goods), null, fanLiRate, shareRate));
         }
      List<TaoBaoSearchNav> navList = new ArrayList<>();
      Gson gson = new GsonBuilder().create();
      Gson gson2 = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder())
            .excludeFieldsWithoutExposeAnnotation().create();
      JSONObject data = new JSONObject();
      data.put("nav", gson.toJson(navList));
      data.put("result", gson2.toJson(listVO));
      data.put("count", result.getTotalCount());
      data.put("result", gson.toJson(list));
      data.put("count", result.getTaoBaoHead().getDocsfound());
      return data;
   }
   /**
    * 设置查询佣金比例范围
    *
    * @param i
    * @param sf
    */
   public void setSearchTkRate(int i, SearchFilter sf) {
      // 获取对应参数
      String value = configService.get("tkRate_range");
      if (!StringUtil.isNullOrEmpty(value)) {
         JSONArray tkRatearray = JSONArray.fromObject(value);
         if (tkRatearray != null) {
            String start = tkRatearray.optJSONObject(i).optString("start");
            if (!StringUtil.isNullOrEmpty(start)) {
               int tkRate = (int) (Float.parseFloat(start) * 100);
               sf.setStartTkRate(tkRate);
            }
            String end = tkRatearray.optJSONObject(i).optString("end");
            if (!StringUtil.isNullOrEmpty(end)) {
               int tkRate = (int) (Float.parseFloat(end) * 100);
               sf.setEndTkRate(tkRate);
            }
      if (page == 1) {
         // 第一页返回店铺信息
         List<TaoBaoShopVO> listShop = taoBaoShopService.getShopByKeyV2(key);
         if (listShop != null && listShop.size() > 0 && listShop.get(0).getListGoodsVO() != null
               && listShop.get(0).getListGoodsVO().size() > 2) {
            data.put("shop", JsonUtil.getApiCommonGson().toJson(listShop.get(0)));
         }
      }
      out.print(JsonUtil.loadTrueResult(data));
   }
   /**
    * 京东
@@ -552,65 +476,131 @@
    * @param endprice
    * @return
    */
   private void searchJDGoods(String kw, int page, String filter, String order, String startprice, String endprice,
         PrintWriter out) {
      JDSearchFilter jdfilter = new JDSearchFilter();
      jdfilter.setKey(SearchFilterUtil.filterSearchContent(kw));
      jdfilter.setPageNo(page);
      jdfilter.setPageSize(Constant.PAGE_SIZE);
   private void searchJDGoods(String key, Integer page, String filter, Integer order, PrintWriter out) {
      JDSearchResult result = null;
      String way = configService.get("jd_api_search_key");
      if ("1".equals(way)) {
         JDFilter filterAPI = new JDFilter();
         filterAPI.setKeyword(SearchFilterUtil.filterSearchContent(key));
         filterAPI.setPageIndex(page);
         filterAPI.setPageSize(Constant.PAGE_SIZE);
      if (!StringUtil.isNullOrEmpty(startprice)) {
         jdfilter.setFromPrice(Integer.parseInt(startprice));
      }
      if (!StringUtil.isNullOrEmpty(endprice)) {
         jdfilter.setToPrice(Integer.parseInt(endprice));
      }
      int sort = 1;
      if (!StringUtil.isNullOrEmpty(order)) {
         sort = Integer.parseInt(order);
      }
      switch (sort) {
      case 1: // 销量 desc
         jdfilter.setSort(JDSearchFilter.SORT_DESC);
         jdfilter.setSortName(JDSearchFilter.SORTNAME_ORDER_COUNT_30DAYS);
         break;
      case 2: // 价格—desc
         jdfilter.setSort(JDSearchFilter.SORT_DESC);
         jdfilter.setSortName(JDSearchFilter.SORTNAME_PRICE);
         break;
      case 3: // 价格—asc
         jdfilter.setSort(JDSearchFilter.SORT_ASC);
         jdfilter.setSortName(JDSearchFilter.SORTNAME_PRICE);
         break;
      case 5: // 返利比—DESC
         jdfilter.setSort(JDSearchFilter.SORT_DESC);
         jdfilter.setSortName(JDSearchFilter.SORTNAME_COMMISSION_SHARE);
         break;
      default: // 默认:销量 desc
         // jdfilter.setSort(JDSearchFilter.SORT_DESC);
         // jdfilter.setSortName(JDSearchFilter.SORTNAME_ORDER_COUNT_30DAYS);
         break;
      }
      if (!com.yeshi.fanli.util.StringUtil.isNullOrEmpty(filter)) {
         JSONArray array = JSONArray.fromObject(filter);
         for (int i = 0; i < array.size(); i++) {
            String ty = array.optJSONObject(i).optString("type");
            if ("quantype".equalsIgnoreCase(ty)) {
               jdfilter.setHasCoupon(1); // 有券
            } else if ("zy".equalsIgnoreCase(ty)) {
               jdfilter.setIsZY(1); // 是否自营
         if (order != null) {
            int sort = order.intValue();
            switch (sort) {
            case 1: // 销量 desc
               filterAPI.setSort(JDFilter.SORT_DESC);
               filterAPI.setSortName(JDFilter.SORTNAME_ORDER_COUNT_30DAYS);
               break;
            case 2: // 价格—desc
               filterAPI.setSort(JDFilter.SORT_DESC);
               filterAPI.setSortName(JDFilter.SORTNAME_PRICE);
               break;
            case 3: // 价格—asc
               filterAPI.setSort(JDFilter.SORT_ASC);
               filterAPI.setSortName(JDFilter.SORTNAME_PRICE);
               break;
            case 4: // 返利比—DESC
               filterAPI.setSort(JDFilter.SORT_DESC);
               filterAPI.setSortName(JDFilter.SORTNAME_COMMISSION_SHARE);
               break;
            default:
               break;
            }
         }
      }
         if (!StringUtil.isNullOrEmpty(filter)) {
            JSONObject jsonfilter = JSONObject.fromObject(filter);
            Boolean coupon = jsonfilter.optBoolean("coupon");
            if (coupon != null && coupon) {
               filterAPI.setIsCoupon(1); // 有券
            }
            Boolean zy = jsonfilter.optBoolean("zy");
            if (zy != null && zy) {
               filterAPI.setOwner("g"); // 自营
            }
            String minPrice = jsonfilter.optString("minPrice");
            if (!StringUtil.isNullOrEmpty(minPrice)) {
               filterAPI.setPricefrom(Double.parseDouble(minPrice));
            }
            String maxPrice = jsonfilter.optString("maxPrice");
            if (!StringUtil.isNullOrEmpty(maxPrice)) {
               filterAPI.setPriceto(Double.parseDouble(maxPrice));
            }
         }
         result = JDApiUtil.queryByKey(filterAPI);
      } else {
         // 网页爬取
         JDSearchFilter jdfilter = new JDSearchFilter();
         jdfilter.setKey(SearchFilterUtil.filterSearchContent(key));
         jdfilter.setPageNo(page);
         jdfilter.setPageSize(Constant.PAGE_SIZE);
         if (order != null) {
            int sort = order.intValue();
            switch (sort) {
            case 1: // 销量 desc
               jdfilter.setSort(JDSearchFilter.SORT_DESC);
               jdfilter.setSortName(JDSearchFilter.SORTNAME_ORDER_COUNT_30DAYS);
               break;
            case 2: // 价格—desc
               jdfilter.setSort(JDSearchFilter.SORT_DESC);
               jdfilter.setSortName(JDSearchFilter.SORTNAME_PRICE);
               break;
            case 3: // 价格—asc
               jdfilter.setSort(JDSearchFilter.SORT_ASC);
               jdfilter.setSortName(JDSearchFilter.SORTNAME_PRICE);
               break;
            case 4: // 返利比—DESC
               jdfilter.setSort(JDSearchFilter.SORT_DESC);
               jdfilter.setSortName(JDSearchFilter.SORTNAME_COMMISSION_SHARE);
               break;
            default:
               break;
            }
         }
         if (!StringUtil.isNullOrEmpty(filter)) {
            JSONObject jsonfilter = JSONObject.fromObject(filter);
            Boolean coupon = jsonfilter.optBoolean("coupon");
            if (coupon != null && coupon) {
               jdfilter.setHasCoupon(1); // 有券
            }
            Boolean zy = jsonfilter.optBoolean("zy");
            if (zy != null && zy) {
               jdfilter.setIsZY(1); // 自营
            }
            Boolean delivery = jsonfilter.optBoolean("delivery");
            if (delivery != null && delivery) {
               jdfilter.setDeliveryType(1); // 京东配送
            }
            String minPrice = jsonfilter.optString("minPrice");
            if (!StringUtil.isNullOrEmpty(minPrice)) {
               jdfilter.setFromPrice(Integer.parseInt(minPrice));
            }
            String maxPrice = jsonfilter.optString("maxPrice");
            if (!StringUtil.isNullOrEmpty(maxPrice)) {
               jdfilter.setToPrice(Integer.parseInt(maxPrice));
            }
         }
         result = JDUtil.searchByKey(jdfilter);
      }
      long count = 0;
      JSONObject data = new JSONObject();
      JSONArray array = new JSONArray();
      JDSearchResult result = JDUtil.searchByKey(jdfilter);
      if (result != null) {
         PageEntity pageEntity = result.getPageEntity();
         if (pageEntity != null) {
@@ -647,51 +637,43 @@
    * @param endprice
    * @return
    */
   private void searchPDDGoods(String kw, int page, String filter, String order, String startprice, String endprice,
         PrintWriter out) {
   private void searchPDDGoods(String key, Integer page, String filter, Integer order, PrintWriter out) {
      PDDSearchFilter pddfilter = new PDDSearchFilter();
      pddfilter.setKw(SearchFilterUtil.filterSearchContent(kw));
      pddfilter.setKw(SearchFilterUtil.filterSearchContent(key));
      pddfilter.setPage(page);
      pddfilter.setPageSize(Constant.PAGE_SIZE);
      int sort = 1;
      if (!StringUtil.isNullOrEmpty(order)) {
         sort = Integer.parseInt(order);
      if (order != null) {
         int sort = order.intValue();
         switch (sort) {
         case 1: // 销量 desc
            pddfilter.setSortType(6);
            break;
         case 2: // 价格—desc
            pddfilter.setSortType(4);
            break;
         case 3: // 价格—asc
            pddfilter.setSortType(3);
            break;
         case 4: // 返利比—desc
            pddfilter.setSortType(2);
            break;
         default: // 综合排序
            pddfilter.setSortType(0);
            break;
         }
      }
      switch (sort) {
      case 1: // 销量 desc
         pddfilter.setSortType(6);
         break;
      case 2: // 价格—desc
         pddfilter.setSortType(4);
         break;
      case 3: // 价格—asc
         pddfilter.setSortType(3);
         break;
      case 5: // 返利比—asc
         pddfilter.setSortType(2);
         break;
      case 6: // 返利比—asc
         pddfilter.setSortType(1);
         break;
      case 20: // 综合排序
         pddfilter.setSortType(0);
         break;
      default: // 默认:销量 desc
         // pddfilter.setSortType(6);
         break;
      }
      if (!com.yeshi.fanli.util.StringUtil.isNullOrEmpty(filter)) {
         JSONArray array = JSONArray.fromObject(filter);
         for (int i = 0; i < array.size(); i++) {
            String ty = array.optJSONObject(i).optString("type");
            if ("quantype".equalsIgnoreCase(ty)) {
               pddfilter.setHasCoupon(true); // 有券
            } else if ("brand".equalsIgnoreCase(ty)) {
               pddfilter.setIsBrand(true); // 是否是品牌
            }
      if (!StringUtil.isNullOrEmpty(filter)) {
         JSONObject jsonfilter = JSONObject.fromObject(filter);
         Boolean coupon = jsonfilter.optBoolean("coupon");
         if (coupon != null && coupon) {
            pddfilter.setHasCoupon(true); // 有券
         }
         Boolean brand = jsonfilter.optBoolean("brand");
         if (brand != null && brand) {
            pddfilter.setIsBrand(true); // 是否是品牌
         }
      }