package com.yeshi.fanli.controller.client.v2; import java.io.PrintWriter; import java.math.BigDecimal; import java.util.ArrayList; 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.HttpSession; 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.HttpUtil; import org.yeshi.utils.JsonUtil; import org.yeshi.utils.NumberUtil; import org.yeshi.utils.taobao.TbImgUtil; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.yeshi.fanli.dto.ConfigParamsDTO; import com.yeshi.fanli.dto.douyin.DouYinGoods; 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; import com.yeshi.fanli.dto.pdd.PDDSearchFilter; import com.yeshi.fanli.entity.accept.AcceptData; import com.yeshi.fanli.entity.goods.CommonGoods; import com.yeshi.fanli.entity.jd.JDGoods; import com.yeshi.fanli.entity.system.ConfigKeyEnum; import com.yeshi.fanli.entity.taobao.SearchFilter; import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief; import com.yeshi.fanli.entity.taobao.TaoBaoSearchResult; import com.yeshi.fanli.entity.taobao.dataoke.DaTaoKeDetailV2; import com.yeshi.fanli.exception.taobao.TaoBaoTokenParseException; import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException; import com.yeshi.fanli.exception.user.TokenRecordException; import com.yeshi.fanli.log.LogHelper; import com.yeshi.fanli.service.inter.brand.BrandInfoService; import com.yeshi.fanli.service.inter.common.JumpDetailV2Service; import com.yeshi.fanli.service.inter.config.BusinessSystemService; import com.yeshi.fanli.service.inter.config.ConfigService; import com.yeshi.fanli.service.inter.config.SuperHotSearchService; import com.yeshi.fanli.service.inter.lable.QualityGoodsService; import com.yeshi.fanli.service.inter.lable.TaoKeGoodsService; import com.yeshi.fanli.service.inter.order.config.HongBaoManageService; import com.yeshi.fanli.service.inter.taobao.TaoBaoShopService; import com.yeshi.fanli.service.inter.taobao.TaoBaoUnionConfigService; import com.yeshi.fanli.service.inter.taobao.dataoke.DaTaoKeGoodsDetailV2Service; import com.yeshi.fanli.service.inter.user.HistorySearchService; import com.yeshi.fanli.service.inter.user.TokenRecordService; import com.yeshi.fanli.service.inter.user.integral.IntegralGetService; import com.yeshi.fanli.service.manger.ClipboardAnalysisManager; import com.yeshi.fanli.service.manger.IClipboardAnalysisResult; import com.yeshi.fanli.service.manger.goods.jd.JDGoodsLinkParseManager; import com.yeshi.fanli.tag.PageEntity; import com.yeshi.fanli.util.Constant; import com.yeshi.fanli.util.DouYinUtil; import com.yeshi.fanli.util.StringUtil; import com.yeshi.fanli.util.ThreadUtil; import com.yeshi.fanli.util.Utils; import com.yeshi.fanli.util.VersionUtil; import com.yeshi.fanli.util.annotation.RequestSerializableByKey; import com.yeshi.fanli.util.cache.IntegralGetCacheManager; import com.yeshi.fanli.util.cache.TaoBaoGoodsCacheUtil; import com.yeshi.fanli.util.factory.CommonGoodsFactory; 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.util.taobao.TaoKeApiUtil; import com.yeshi.fanli.vo.brand.BrandInfoVO; import com.yeshi.fanli.vo.brand.TaoBaoShopVO; import com.yeshi.fanli.vo.common.JumpDetailContentVO; import com.yeshi.fanli.vo.goods.GoodsDetailVO; import com.yeshi.fanli.vo.msg.TokenVO; import com.yeshi.fanli.vo.search.GoodsDocParseResultVO; import net.sf.json.JSONArray; import net.sf.json.JSONObject; @Controller @RequestMapping("api/v2/search") public class SearchControllerV2 { @Resource private BusinessSystemService businessSystemService; @Resource private ConfigService configService; @Resource private SuperHotSearchService superHotSearchSerivce; @Resource private HistorySearchService historySearchService; @Resource private HongBaoManageService hongBaoManageService; @Resource private TaoBaoUnionConfigService taoBaoUnionConfigService; @Resource private TaoKeGoodsService taoKeGoodsService; @Resource private QualityGoodsService qualityGoodsService; @Resource private TaoBaoGoodsCacheUtil taoBaoGoodsCacheUtil; @Resource private TaoBaoShopService taoBaoShopService; @Resource private DaTaoKeGoodsDetailV2Service daTaoKeGoodsDetailV2Service; @Resource(name = "taskExecutor") private TaskExecutor executor; @Resource private TokenRecordService tokenRecordService; @Resource private IntegralGetService integralGetService; @Resource private IntegralGetCacheManager integralGetCacheManager; @Resource private BrandInfoService brandInfoService; @Resource private JDGoodsLinkParseManager jdGoodsLinkParseManager; @Resource private ClipboardAnalysisManager clipboardAnalysisManager; @Resource private JumpDetailV2Service jumpDetailV2Service; /** * 粘贴板信息推荐 * * @param acceptData * @param url * 商品链接 * @param out */ @RequestMapping(value = "getRecommendInfo", method = RequestMethod.POST) public void getRecommendInfo(AcceptData acceptData, String text, Long uid, PrintWriter out) { if (StringUtil.isNullOrEmpty(text)) { out.print(JsonUtil.loadFalseResult("值为空")); return; } // 去除前后空格 text = text.trim(); String originalText = text; JSONObject data = new JSONObject(); clipboardAnalysisManager.parse(acceptData.getPlatform(), acceptData.getVersion(), originalText, uid, new IClipboardAnalysisResult() { @Override public void onResult(GoodsDocParseResultVO result) { if (uid == null) { out.print(JsonUtil.loadFalseResult("无推荐")); return; } JSONObject root = new JSONObject(); root.put("type", 20); JSONObject data = new JSONObject(); data.put("text", originalText); // int platformCode = Constant.getPlatformCode(acceptData.getPlatform()); int version = Integer.parseInt(acceptData.getVersion()); JumpDetailContentVO convert = new JumpDetailContentVO(); convert.setJumpDetail(jumpDetailV2Service.getByTypeCache("web", platformCode, version)); JSONObject convertParams = new JSONObject(); convertParams.put("url", configService.get(ConfigKeyEnum.convertDocWebLink.getKey())); convertParams.put("clipboard", false); convert.setParams(convertParams); JumpDetailContentVO view = null; JumpDetailContentVO guessLike = null; Gson gson = JsonUtil.getApiCommonGson(); data.put("title", "智能搜索"); int state = 0; if (result.getFirstGoods() != null && result.getFirstGoods().getGoodsId() != null) { state = 2; data.put("stateDesc", "选择搜券或转链"); JSONObject params = new JSONObject(); params.put("id", result.getFirstGoods().getGoodsId()+""); params.put("from", "转链"); if (result.getFirstGoods().getGoodsType() == Constant.SOURCE_TYPE_TAOBAO) { view = new JumpDetailContentVO(); view.setJumpDetail( jumpDetailV2Service.getByTypeCache("goodsdetail", platformCode, version)); view.setParams(params); } else if (result.getFirstGoods().getGoodsType() == Constant.SOURCE_TYPE_JD) { view = new JumpDetailContentVO(); view.setJumpDetail( jumpDetailV2Service.getByTypeCache("goodsdetail_jd", platformCode, version)); view.setParams(params); } else if (result.getFirstGoods().getGoodsType() == Constant.SOURCE_TYPE_PDD) { view = new JumpDetailContentVO(); view.setJumpDetail( jumpDetailV2Service.getByTypeCache("goodsdetail_pdd", platformCode, version)); view.setParams(params); } } else if (!StringUtil.isNullOrEmpty(result.getFirstLink())) { state = 2; data.put("stateDesc", "选择搜券或转链"); view = new JumpDetailContentVO(); view.setJumpDetail(jumpDetailV2Service.getByTypeCache("web", platformCode, version)); JSONObject params = new JSONObject(); params.put("url", result.getFirstLink()); view.setParams(params); } else { data.put("stateDesc", "去试试转链"); state = 1; } data.put("state", state); if (convert != null) data.put("convert", gson.toJson(convert)); if (view != null) data.put("view", gson.toJson(view)); if (guessLike != null) data.put("guessLike", gson.toJson(guessLike)); root.put("data", data); out.print(JsonUtil.loadTrueResult(root)); return; } @Override public void onResult(String result) { JSONObject root = new JSONObject(); root.put("type", 2); JSONObject data = new JSONObject(); data.put("title", result); root.put("data", data); out.print(JsonUtil.loadTrueResult(root)); return; } @Override public void onResult(CommonGoods goods) { if (goods.getGoodsId() != null) { if (VersionUtil.greaterThan_1_6_5(acceptData.getPlatform(), acceptData.getVersion())) {// 1.6.5版本后返回商品详情 if (goods.getGoodsType() == Constant.SOURCE_TYPE_TAOBAO) { TaoBaoGoodsBrief goodsBrief = null; try { goodsBrief = TaoKeApiUtil.searchGoodsDetail(goods.getGoodsId()); } catch (TaobaoGoodsDownException e) { e.printStackTrace(); } if (goodsBrief != null) { goods = CommonGoodsFactory.create(goodsBrief); Gson gson = JsonUtil .getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder()) .excludeFieldsWithoutExposeAnnotation().setDateFormat("yyyy-MM-dd") .create(); data.put("type", 3); data.put("goods", gson.toJson( GoodsDetailVOFactory.convertCommonGoods(goods, hongBaoManageService.getShowComputeRate( acceptData.getPlatform(), acceptData.getVersion())))); out.print(JsonUtil.loadTrueResult(data)); return; } } else { Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder()) .excludeFieldsWithoutExposeAnnotation().setDateFormat("yyyy-MM-dd") .create(); data.put("type", 3); data.put("goods", gson.toJson( GoodsDetailVOFactory.convertCommonGoods(goods, hongBaoManageService.getShowComputeRate( acceptData.getPlatform(), acceptData.getVersion())))); out.print(JsonUtil.loadTrueResult(data)); return; } } else { // 低于1.6.5版本 JSONObject taoBaoGoodsJSON = new JSONObject(); taoBaoGoodsJSON.put("title", goods.getTitle()); taoBaoGoodsJSON.put("zkPrice", goods.getPrice() + ""); taoBaoGoodsJSON.put("id", goods.getGoodsId()); taoBaoGoodsJSON.put("goodsType", goods.getGoodsType()); if (goods.getGoodsType() == Constant.SOURCE_TYPE_TAOBAO) { taoBaoGoodsJSON.put("url", "http://item.taobao.com/item.htm?id=" + goods.getGoodsId()); } else if (goods.getGoodsType() == Constant.SOURCE_TYPE_JD) { taoBaoGoodsJSON.put("url", String.format("https://item.jd.com/%s.html", goods.getGoodsId() + "")); } else if (goods.getGoodsType() == Constant.SOURCE_TYPE_PDD) { taoBaoGoodsJSON.put("url", "http://yangkeduo.com/goods.html?goods_id=" + goods.getGoodsId()); } data.put("goods", taoBaoGoodsJSON); List picList = new ArrayList<>(); picList.add(goods.getPicture()); data.put("imgs", picList); JSONObject root = new JSONObject(); root.put("type", 1); root.put("data", data); out.print(JsonUtil.loadTrueResult(root)); return; } } JSONObject goodsJSON = new JSONObject(); goodsJSON.put("title", goods.getTitle()); goodsJSON.put("pictUrl", goods.getPicture()); data.put("type", 4); data.put("desc", "该商品无推广信息"); data.put("goods", goodsJSON); out.print(JsonUtil.loadTrueResult(data)); return; } @Override public void onResult(TokenVO tokenVO) { out.print(JsonUtil.loadTrueResult(tokenVO)); return; } @Override public void none() { out.print(JsonUtil.loadFalseResult("无推荐")); } @Override public void needLogin(String msg) { out.print(JsonUtil.loadFalseResult(1001, msg)); } }); } /** * 口令领取 * * @param acceptData * @param kw * @param goodsType * @param out */ @RequestSerializableByKey(key = "'tokenReceive-'+#uid") @RequestMapping(value = "tokenReceive", method = RequestMethod.POST) public void tokenReceive(AcceptData acceptData, Long uid, String token, PrintWriter out) { try { String msg = tokenRecordService.receiveToken(token, uid, acceptData); out.print(JsonUtil.loadTrueResult(msg)); } catch (TokenRecordException e) { out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg())); } } /** * 搜索候选词 * * @param acceptData * @param kw * @param out */ @RequestMapping(value = "suggestSearch", method = RequestMethod.POST) public void getSugguestSearch(AcceptData acceptData, String kw, Integer goodsType, PrintWriter out) { if (goodsType == null) { out.print(JsonUtil.loadFalseResult("平台类型不能为空")); return; } List list = null; 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) { out.print(JsonUtil.loadFalseResult("暂无建议内容")); return; } JSONArray array = new JSONArray(); for (String words : list) { array.add(words); } out.print(JsonUtil.loadTrueResult(array)); } /** * 搜索-新版 * * @param acceptData * @param kw * @param page * @param filter * @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, Integer goodsType, String key, Integer page, String filter, Integer order, Long uid, HttpSession session, 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(); if (uid != null) { if (page == 1) { integralGetCacheManager.cacheSearchGoods(acceptData.getDevice(), System.currentTimeMillis()); } else if (page > 1) { Long lastTime = integralGetCacheManager.getLastSearchTime(acceptData.getDevice()); if (lastTime != null && System.currentTimeMillis() - lastTime >= 15 * 1000L) {// 超过15s浏览 integralGetCacheManager.clearSearchTime(acceptData.getDevice()); ThreadUtil.run(new Runnable() { @Override public void run() { // 增加金币 integralGetService.addSearchResultScan(uid, key); } }); } } } 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); out.print(JsonUtil.loadTrueResult(data)); return; } /*--------- 京东商品 -------*/ if (goodsType.intValue() == Constant.SOURCE_TYPE_JD) { searchJDGoods(acceptData, searchkey, page, filter, order, out); return; } /*-------- 拼多多商品 -------*/ if (goodsType.intValue() == Constant.SOURCE_TYPE_PDD) { searchPDDGoods(acceptData, searchkey, page, filter, order, out); return; } /*-------- 淘宝商品 -------*/ searchTaoBaoGoods(acceptData, searchkey, page, filter, order, out); } /** * 执行搜索-新版 * * @param kw * @param page * @param filter * @param order * @param startprice * @param endprice * @return */ private void searchTaoBaoGoods(AcceptData acceptData, String key, Integer page, String filter, Integer order, PrintWriter out) { SearchFilter sf = new SearchFilter(); sf.setKey(SearchFilterUtil.filterSearchContent(key)); sf.setPage(page); sf.setPageSize(Constant.PAGE_SIZE); if (order != null) { if (order == 1) { // 销量高到低 sf.setSort(TaoBaoUtil.SORT_SALE_HIGH_TO_LOW); } else if (order == 2) { // 价格高到低 sf.setSort(TaoBaoUtil.SORT_PRICE_HIGH_TO_LOW); } else if (order == 3) { // 价格低到高 sf.setSort(TaoBaoUtil.SORT_PRICE_LOW_TO_HIGH); } else if (order == 4) { // 返利比高到低 sf.setSort(TaoBaoUtil.SORT_TKRATE_HIGH_TO_LOW); } } if (!StringUtil.isNullOrEmpty(filter)) { JSONObject jsonfilter = JSONObject.fromObject(filter); Boolean coupon = jsonfilter.optBoolean("coupon"); if (coupon != null && coupon) { sf.setQuan(1); // 有券 } 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 daTaoKeList = null; if (page == 1) { daTaoKeList = daTaoKeGoodsDetailV2Service.listByDtitle(key); } // 淘宝api搜索商品 TaoBaoSearchResult result = TaoBaoUtil.search(sf); // 搜索是否在营销主商品库 if (result != null && result.getTaoBaoGoodsBriefs() != null && result.getTaoBaoGoodsBriefs().size() > 0) { ThreadUtil.run(new Runnable() { @Override public void run() { // 更新到緩存 for (TaoBaoGoodsBrief goods : result.getTaoBaoGoodsBriefs()) taoBaoGoodsCacheUtil.saveCommonTaoBaoGoodsInfo(goods); } }); } List taoBaoGoodsBriefs = null; if (result != null) { taoBaoGoodsBriefs = result.getTaoBaoGoodsBriefs(); } if (taoBaoGoodsBriefs == null) { taoBaoGoodsBriefs = new ArrayList<>(); } if (daTaoKeList != null && daTaoKeList.size() > 0) { try { Collections.reverse(daTaoKeList); for (DaTaoKeDetailV2 detail : daTaoKeList) { taoBaoGoodsBriefs.add(0, TaoBaoUtil.convert(detail)); } } catch (Exception e) { } } List list = new ArrayList(); ConfigParamsDTO paramsDTO = hongBaoManageService.getShowComputeRate(acceptData.getPlatform(), acceptData.getVersion()); for (TaoBaoGoodsBrief goods : taoBaoGoodsBriefs) { list.add(GoodsDetailVOFactory.convertTaoBao(goods, paramsDTO)); } Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder()) .excludeFieldsWithoutExposeAnnotation().create(); JSONObject data = new JSONObject(); data.put("result", gson.toJson(list)); data.put("count", result.getTaoBaoHead().getDocsfound()); if (page == 1) { // 第一页返回店铺信息 String platform = acceptData.getPlatform(); String version = acceptData.getVersion(); if (("ios".equalsIgnoreCase(platform) && VersionUtil.greaterThan_2_0_5(platform, version)) || ("android".equalsIgnoreCase(platform) && VersionUtil.greaterThan_2_0_2(platform, version))) { BrandInfoVO brandInfoVO = null; try { brandInfoVO = brandInfoService.listByAlikeName(key, acceptData.getPlatform(), acceptData.getVersion()); } catch (Exception e) { } if (brandInfoVO != null) data.put("shop", JsonUtil.getApiCommonGson().toJson(brandInfoVO)); } else { List listShop = taoBaoShopService.getShopByKeyV2(key, acceptData.getPlatform(), acceptData.getVersion()); if (listShop != null && listShop.size() > 0 && listShop.get(0).getListGoodsVO() != null && listShop.get(0).getListGoodsVO().size() > 2) { TaoBaoShopVO taoBaoShop = listShop.get(0); if (("ios".equalsIgnoreCase(platform) && VersionUtil.greaterThan_2_0(platform, version)) || ("android".equalsIgnoreCase(platform) && VersionUtil.greaterThan_2_0_1(platform, version))) { BrandInfoVO brandInfoVO = new BrandInfoVO(); brandInfoVO.setId(taoBaoShop.getId()); brandInfoVO.setName(taoBaoShop.getShopName()); brandInfoVO.setIcon(taoBaoShop.getShopIcon()); brandInfoVO.setListGoods(taoBaoShop.getListGoodsVO()); data.put("shop", JsonUtil.getApiCommonGson().toJson(brandInfoVO)); } else { data.put("shop", JsonUtil.getApiCommonGson().toJson(taoBaoShop)); } } } } out.print(JsonUtil.loadTrueResult(data)); } /** * 京东 * * @param kw * @param page * @param filter * @param order * @param startprice * @param endprice * @return */ private void searchJDGoods(AcceptData acceptData, String key, Integer page, String filter, Integer order, PrintWriter out) { JDSearchResult result = null; boolean hasCoupon = false; String way = configService.get(ConfigKeyEnum.jdApiSearchKey.getKey()); if ("1".equals(way)) { JDFilter filterAPI = new JDFilter(); filterAPI.setKeyword(SearchFilterUtil.filterSearchContent(key)); filterAPI.setPageIndex(page); filterAPI.setPageSize(Constant.PAGE_SIZE); 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) { hasCoupon = true; 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) { hasCoupon = true; 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(); if (result != null) { PageEntity pageEntity = result.getPageEntity(); if (pageEntity != null) { count = pageEntity.getTotalCount(); } List goodsList = result.getGoodsList(); if (goodsList != null && goodsList.size() > 0) { Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder()) .excludeFieldsWithoutExposeAnnotation().setDateFormat("yyyy-MM-dd").create(); ConfigParamsDTO paramsDTO = hongBaoManageService.getShowComputeRate(acceptData.getPlatform(), acceptData.getVersion()); for (JDGoods goods : goodsList) { GoodsDetailVO goodsDetailVO = GoodsDetailVOFactory.convertJDGoods(goods, paramsDTO); if (hasCoupon) { if (goodsDetailVO.isHasCoupon()) { array.add(gson.toJson(goodsDetailVO)); } } else { array.add(gson.toJson(goodsDetailVO)); } } } } data.put("result", array); data.put("count", count); out.print(JsonUtil.loadTrueResult(data)); } /** * 拼多多 * * @param kw * @param page * @param filter * @param order * @param startprice * @param endprice * @return */ private void searchPDDGoods(AcceptData acceptData, String key, Integer page, String filter, Integer order, PrintWriter out) { PDDSearchFilter pddfilter = new PDDSearchFilter(); pddfilter.setKw(SearchFilterUtil.filterSearchContent(key)); pddfilter.setPage(page); pddfilter.setPageSize(Constant.PAGE_SIZE); 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; } } 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); // 是否是品牌 } } int count = 0; JSONObject data = new JSONObject(); JSONArray array = new JSONArray(); PDDGoodsResult result = PinDuoDuoApiUtil.searchGoods(pddfilter); if (result != null) { count = result.getTotalCount(); Gson gson = JsonUtil.getApiCommonGson(); List goodsList = result.getGoodsList(); if (goodsList != null && goodsList.size() > 0) { ConfigParamsDTO paramsDTO = hongBaoManageService.getShowComputeRate(acceptData.getPlatform(), acceptData.getVersion()); for (PDDGoodsDetail goods : goodsList) { GoodsDetailVO goodsDetailVO = GoodsDetailVOFactory.convertPDDGoods(goods, paramsDTO); array.add(gson.toJson(goodsDetailVO)); } } } data.put("result", array); data.put("count", count); out.print(JsonUtil.loadTrueResult(data)); } }