yujian
2019-07-29 cdd852f8e8eff7eb2e8f7c3fceaa955b9fc3f9d3
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/SearchControllerV2.java
@@ -4,15 +4,14 @@
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
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;
@@ -21,7 +20,7 @@
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;
@@ -31,10 +30,8 @@
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;
@@ -52,8 +49,8 @@
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;
@@ -102,8 +99,9 @@
   @Resource
   private DaTaoKeGoodsDetailService daTaoKeGoodsDetailService;
   @Resource(name = "taskExecutor")
   private TaskExecutor executor;
   /**
    * 粘贴板信息推荐
    * 
@@ -145,37 +143,13 @@
            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("暂不支持该类型!"));
         root.put("type", 2);
         JSONObject data = new JSONObject();
         data.put("title", text);
         root.put("data", data);
         out.print(JsonUtil.loadTrueResult(root));
         return;
      }
@@ -236,9 +210,7 @@
      out.print(JsonUtil.loadTrueResult(root));
   }
   /**
    * 搜索候选词
    * 
@@ -281,114 +253,71 @@
    * @param kw
    * @param page
    * @param filter
    * @param order      销量由高到低:1 、 价格从高到低:2 、 价格从低到高:3 、 推广量高到低:4(综合默认)、返利比高到低:5
    *                   、返利比低到高:6 、推荐20
    * @param order
    *            销量由高到低:1 、 价格从高到低:2 、 价格从低到高:3 、 推广量高到低:4(综合默认)、返利比高到低:5
    *            、返利比低到高:6 、推荐20
    * @param startprice
    * @param endprice
    * @param fastFilter
    * @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,
         PrintWriter out) {
   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;
      }
      String bid = getHistorySearchBid(acceptData);
      if (page == null || page < 1) {
         out.print(JsonUtil.loadFalseResult(1, "页码不能小于1"));
         return;
      }
      // 加入搜索历史记录
      historySearchService.addHistorySearch(kw, bid);
      if (StringUtil.isNullOrEmpty(key)) {
         out.print(JsonUtil.loadFalseResult(1, "请输入搜索内容"));
         return;
      }
      final String searchkey = key.trim();
      if (!StringUtil.isNullOrEmpty(kw) && (kw.startsWith("http://") || kw.startsWith("https://"))) {
      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);
         }
      });
      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;
      }
      // 拼多多商品 TODO
      /*-------- 拼多多商品  -------*/
      if (goodsType.intValue() == Constant.SOURCE_TYPE_PDD) {
         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);
   }
   /**
@@ -402,149 +331,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() {
@@ -553,136 +391,49 @@
                  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())
            .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())
      Gson gson = 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));
   }
   /**
@@ -696,65 +447,137 @@
    * @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) {
      if (!StringUtil.isNullOrEmpty(startprice)) {
         jdfilter.setFromPrice(Integer.parseInt(startprice));
      }
      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(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)) {
               if (minPrice.contains(".")) {
                  minPrice = minPrice.replace(".", "-");
                  minPrice = minPrice.split("-")[0];
               }
               jdfilter.setFromPrice(Integer.parseInt(minPrice));
            }
            String maxPrice = jsonfilter.optString("maxPrice");
            if (!StringUtil.isNullOrEmpty(maxPrice)) {
               if (maxPrice.contains(".")) {
                  maxPrice = maxPrice.replace(".", "-");
                  maxPrice = maxPrice.split("-")[0];
               }
               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) {
@@ -781,7 +604,7 @@
   }
   /**
    * 京东
    *   拼多多
    * 
    * @param kw
    * @param page
@@ -791,51 +614,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 (!StringUtil.isNullOrEmpty(filter)) {
         JSONObject jsonfilter = JSONObject.fromObject(filter);
         Boolean coupon = jsonfilter.optBoolean("coupon");
         if (coupon != null && coupon) {
            pddfilter.setHasCoupon(true); // 有券
         }
      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); // 是否是品牌
            }
         Boolean brand = jsonfilter.optBoolean("brand");
         if (brand != null && brand) {
            pddfilter.setIsBrand(true); // 是否是品牌
         }
      }
@@ -846,12 +661,12 @@
      PDDGoodsResult result = PinDuoDuoApiUtil.searchGoods(pddfilter);
      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();
            Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder())
                  .excludeFieldsWithoutExposeAnnotation().setDateFormat("yyyy-MM-dd").create();
            for (PDDGoodsDetail goods : goodsList) {
               GoodsDetailVO goodsDetailVO = GoodsDetailVOFactory.convertPDDGoods(goods, null, fanLiRate,
                     shareRate);