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.taobao.SearchFilter; import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief; import com.yeshi.fanli.entity.taobao.TaoBaoSearchResult; import com.yeshi.fanli.entity.taobao.dataoke.DaTaoKeDetail; import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException; import com.yeshi.fanli.exception.user.TokenRecordException; 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; 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.DaTaoKeGoodsDetailService; 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.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.goods.GoodsDetailVO; import com.yeshi.fanli.vo.msg.TokenVO; 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 DaTaoKeGoodsDetailService daTaoKeGoodsDetailService; @Resource(name = "taskExecutor") private TaskExecutor executor; @Resource private TokenRecordService tokenRecordService; @Resource private IntegralGetService integralGetService; @Resource private IntegralGetCacheManager integralGetCacheManager; /** * 粘贴板信息推荐 * * @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(); try { TokenVO tokenVO = tokenRecordService.discernToken(text, uid, acceptData); out.print(JsonUtil.loadTrueResult(tokenVO)); return; } catch (TokenRecordException e) { if (e.getCode() == 1001) { // 需要用户登录 out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg())); 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.length() > 256) { out.print(JsonUtil.loadFalseResult("值过长")); return; } String pattern = "^[A-Za-z0-9-]+$"; if (Pattern.matches(pattern, text.replace(" ", ""))) {// 删除空格 out.println(JsonUtil.loadFalseResult("不支持推荐")); return; } LogHelper.test("根据粘贴板推荐:" + text); if (text.length() > 80) { out.print(JsonUtil.loadFalseResult("值过长")); return; } if (analysisTaoToken(acceptData, text, out)) { return; } if (!StringUtil.isNullOrEmpty(TaoBaoUtil.parseSystemTaoToken(text))) { out.print(JsonUtil.loadFalseResult("不支持推荐")); return; } JSONObject root = new JSONObject(); root.put("type", 2); JSONObject data = new JSONObject(); data.put("title", text); root.put("data", data); out.print(JsonUtil.loadTrueResult(root)); return; } int type = 3; CommonGoods commonGoods = null; text = matcher.group(); if (text.startsWith("https://a.m.taobao.com/i"))// 淘宝账号未登录状态 { text = text.substring("https://a.m.taobao.com/i".length(), text.indexOf(".htm")); if (NumberUtil.isNumeric(text)) { tb = TaoBaoUtil.isAlimama(text); } } else 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) { type = 4; tb = getTaoBaoGoodsBriefFromGoodsId(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 map = Utils.parseURL(text); String id = ""; id = map.get("id").replace("}", ""); tb = TaoBaoUtil.isAlimama(id); if (tb == null) { type = 4; tb = getTaoBaoGoodsBriefFromGoodsId(id); } } else if (text.contains("v.douyin.com")) { // 抖音 analysisDouYin(acceptData, text, out); return; } else { tb = TaoBaoUtil.parsePhoneShareUrlByTB(text); if (tb == null) { String goodsId = TaoBaoUtil.getGoodsIdByPhoneShareUrl(text); if (!StringUtil.isNullOrEmpty(goodsId)) { tb = getTaoBaoGoodsBriefFromGoodsId(goodsId); if (tb != null) type = 4; } } if (tb == null)// 淘宝是空值 { String jdId = JDUtil.getJDGoodsId(text); if (!StringUtil.isNullOrEmpty(jdId)) { JDGoods goods = JDApiUtil.getGoodsDetail(Long.parseLong(jdId)); if (goods != null) { // 高级接口 -- 信息更完整 JDGoods jdGoods = JDApiUtil.queryGoodsDetail(Long.parseLong(jdId)); if (jdGoods != null) { commonGoods = CommonGoodsFactory.create(jdGoods); } else { commonGoods = CommonGoodsFactory.create(goods); } } else { type = 4; goods = JDUtil.getSimpleGoodsInfo(jdId); if (goods != null) { commonGoods = new CommonGoods(); commonGoods.setTitle(goods.getSkuName()); commonGoods.setPicture(goods.getPicUrl()); } } } else { String pddId = PinDuoDuoUtil.getPDDGoodsId(text); if (!StringUtil.isNullOrEmpty(pddId)) { PDDGoodsDetail goods = PinDuoDuoApiUtil.getGoodsDetail(Long.parseLong(pddId)); if (goods != null) { commonGoods = CommonGoodsFactory.create(goods); } else { type = 4; goods = PinDuoDuoUtil.getPDDGoodsInfo(pddId); if (goods != null) { commonGoods = new CommonGoods(); commonGoods.setTitle(goods.getGoodsName()); commonGoods.setPicture(goods.getGoodsThumbnailUrl()); } } } } } } if (tb == null && commonGoods == null) { out.println(JsonUtil.loadFalseResult("暂未找到该商品,请稍后再试!")); return; } if (type == 4) { if (!VersionUtil.greaterThan_2_0_1(acceptData.getPlatform(), acceptData.getVersion())) { out.println(JsonUtil.loadFalseResult("暂未找到该商品,请稍后再试!")); return; } JSONObject data = new JSONObject(); if (tb != null) { commonGoods = new CommonGoods(); commonGoods.setTitle(tb.getTitle()); commonGoods.setPicture(tb.getPictUrl()); } if (StringUtil.isNullOrEmpty(commonGoods.getTitle()) || StringUtil.isNullOrEmpty(commonGoods.getPicture())) { out.println(JsonUtil.loadFalseResult("暂未找到该商品,请稍后再试!")); return; } JSONObject goodsJSON = new JSONObject(); goodsJSON.put("title", commonGoods.getTitle()); goodsJSON.put("pictUrl", commonGoods.getPicture()); data.put("type", type); data.put("desc", "该商品无推广信息"); data.put("goods", goodsJSON); out.print(JsonUtil.loadTrueResult(data)); return; } JSONObject data = new JSONObject(); if (VersionUtil.greaterThan_1_6_5(acceptData.getPlatform(), acceptData.getVersion())) { if (tb != null) { TaoBaoGoodsBrief goodsBrief = null; try { goodsBrief = TaoKeApiUtil.searchGoodsDetail(tb.getAuctionId()); } catch (TaobaoGoodsDownException e) { e.printStackTrace(); } if (goodsBrief == null) { out.println(JsonUtil.loadFalseResult("暂未找到该商品,请稍后再试!")); return; } commonGoods = CommonGoodsFactory.create(goodsBrief); } BigDecimal fanLiRate = hongBaoManageService.getFanLiRate(); BigDecimal shareRate = hongBaoManageService.getShareRate(); Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder()) .excludeFieldsWithoutExposeAnnotation().setDateFormat("yyyy-MM-dd").create(); data.put("type", type); data.put("goods", gson.toJson(GoodsDetailVOFactory.convertCommonGoods(commonGoods, new ConfigParamsDTO(fanLiRate, shareRate, Constant.MAX_REWARD_RATE)))); out.print(JsonUtil.loadTrueResult(data)); return; } if (tb != null) { commonGoods = new CommonGoods(); commonGoods.setPrice(tb.getZkPrice()); commonGoods.setTitle(tb.getTitle()); commonGoods.setGoodsId(tb.getAuctionId()); commonGoods.setGoodsType(Constant.SOURCE_TYPE_TAOBAO); commonGoods.setPicture(tb.getPictUrl()); } JSONObject taoBaoGoodsJSON = new JSONObject(); taoBaoGoodsJSON.put("title", commonGoods.getTitle()); taoBaoGoodsJSON.put("zkPrice", commonGoods.getPrice() + ""); taoBaoGoodsJSON.put("id", commonGoods.getGoodsId()); taoBaoGoodsJSON.put("goodsType", commonGoods.getGoodsType()); if (commonGoods.getGoodsType() == Constant.SOURCE_TYPE_TAOBAO) { taoBaoGoodsJSON.put("url", "http://item.taobao.com/item.htm?id=" + commonGoods.getGoodsId()); } else if (commonGoods.getGoodsType() == Constant.SOURCE_TYPE_JD) { taoBaoGoodsJSON.put("url", String.format("https://item.jd.com/%s.html", commonGoods.getGoodsId() + "")); } else if (commonGoods.getGoodsType() == Constant.SOURCE_TYPE_PDD) { taoBaoGoodsJSON.put("url", "http://yangkeduo.com/goods.html?goods_id=" + commonGoods.getGoodsId()); } data.put("goods", taoBaoGoodsJSON); List picList = new ArrayList<>(); picList.add(commonGoods.getPicture()); data.put("imgs", picList); JSONObject root = new JSONObject(); root.put("type", 1); root.put("data", data); out.print(JsonUtil.loadTrueResult(root)); } private TaoBaoGoodsBrief getTaoBaoGoodsBriefFromGoodsId(String goodsId) { TaoBaoGoodsBrief tb = TaoBaoUtil.getTmallGoodsInfo(goodsId); if (tb == null && NumberUtil.isNumeric(goodsId)) {// 是数字 tb = TaoBaoUtil.getSimpleGoodsBrief(Long.parseLong(goodsId)); if (tb != null) { tb.setPictUrl(TbImgUtil.getTBSize220Img(tb.getPictUrl())); } } return tb; } /** * 解析抖音链接 * * @param acceptData * @param text * @param out * @return */ private void analysisDouYin(AcceptData acceptData, String text, PrintWriter out) { String location = HttpUtil.getLocation(text); if (!StringUtil.isNullOrEmpty(location)) { if (location.contains("taobao.com")) { // 淘宝商品 String realUrl = TaoBaoUtil.getRealUrl(location); if (!StringUtil.isNullOrEmpty(realUrl)) { getRecommendInfo(acceptData, realUrl, null, out); return; } } else if (location.contains("haohuo.jinritemai.com")) { // 抖音商品 DouYinGoods goods = DouYinUtil.getGoodsInfo(location); JSONObject goodsJSON = new JSONObject(); goodsJSON.put("title", goods.getName()); goodsJSON.put("pictUrl", goods.getImg()); JSONObject data = new JSONObject(); data.put("type", 4); data.put("desc", "该商品无推广信息"); data.put("goods", goodsJSON); out.print(JsonUtil.loadTrueResult(data)); return; } } out.println(JsonUtil.loadFalseResult("暂未找到该商品,请稍后再试!")); return; } /** * 解析淘口令 * * @param acceptData * @param text * @param out * @return */ private boolean analysisTaoToken(AcceptData acceptData, String text, PrintWriter out) { String token = StringUtil.picUpTaoToken(text); if (!StringUtil.isNullOrEmpty(token)) { Long auctionId = TaoKeApiUtil.tokenConvertAuctionId(token); if (auctionId != null) { TaoBaoGoodsBrief tb = null; try { tb = TaoKeApiUtil.getSimpleGoodsInfo(auctionId); } catch (TaobaoGoodsDownException e) { e.printStackTrace(); } if (tb != null) { if (VersionUtil.greaterThan_1_6_5(acceptData.getPlatform(), acceptData.getVersion())) { TaoBaoGoodsBrief goodsBrief = null; try { goodsBrief = TaoKeApiUtil.searchGoodsDetail(tb.getAuctionId()); } catch (TaobaoGoodsDownException e) { e.printStackTrace(); } if (goodsBrief == null) { out.println(JsonUtil.loadFalseResult("暂未找到该商品,请稍后再试!")); return false; } BigDecimal fanLiRate = hongBaoManageService.getFanLiRate(); BigDecimal shareRate = hongBaoManageService.getShareRate(); Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder()) .excludeFieldsWithoutExposeAnnotation().setDateFormat("yyyy-MM-dd").create(); JSONObject data = new JSONObject(); data.put("type", 3); data.put("goods", gson.toJson(GoodsDetailVOFactory.convertTaoBao(goodsBrief, new ConfigParamsDTO(fanLiRate, shareRate, Constant.MAX_REWARD_RATE)))); out.print(JsonUtil.loadTrueResult(data)); return true; } JSONObject data = new JSONObject(); JSONObject taoBaoGoodsJSON = new JSONObject(); taoBaoGoodsJSON.put("title", tb.getTitle()); taoBaoGoodsJSON.put("zkPrice", tb.getZkPrice()); taoBaoGoodsJSON.put("id", tb.getAuctionId()); taoBaoGoodsJSON.put("goodsType", Constant.SOURCE_TYPE_TAOBAO); taoBaoGoodsJSON.put("url", "http://item.taobao.com/item.htm?id=" + tb.getAuctionId()); data.put("goods", taoBaoGoodsJSON); if (!StringUtil.isNullOrEmpty(tb.getPictUrl())) { if (tb.getImgList() == null) tb.setImgList(new ArrayList<>()); tb.getImgList().add(0, TbImgUtil.getTBSize220Img(tb.getPictUrl())); } data.put("imgs", tb.getImgList()); JSONObject root = new JSONObject(); root.put("type", 1); root.put("data", data); out.print(JsonUtil.loadTrueResult(root)); return true; } } } return false; } /** * 口令领取 * * @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 = daTaoKeGoodsDetailService.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 (DaTaoKeDetail detail : daTaoKeList) { taoBaoGoodsBriefs.add(0, TaoBaoUtil.convert(detail)); } } catch (Exception e) { } } List list = new ArrayList(); BigDecimal fanLiRate = hongBaoManageService.getFanLiRate(); BigDecimal shareRate = hongBaoManageService.getShareRate(); ConfigParamsDTO paramsDTO = new ConfigParamsDTO(fanLiRate, shareRate, Constant.MAX_REWARD_RATE); 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) { // 第一页返回店铺信息 List listShop = taoBaoShopService.getShopByKeyV2(key); if (listShop != null && listShop.size() > 0 && listShop.get(0).getListGoodsVO() != null && listShop.get(0).getListGoodsVO().size() > 2) { String platform = acceptData.getPlatform(); TaoBaoShopVO taoBaoShop = listShop.get(0); if (("ios".equalsIgnoreCase(platform) && VersionUtil.greaterThan_2_0(platform, acceptData.getVersion())) || ("android".equalsIgnoreCase(platform) && VersionUtil.greaterThan_2_0_1(platform, acceptData.getVersion()))) { 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("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 (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) { BigDecimal fanLiRate = hongBaoManageService.getFanLiRate(); BigDecimal shareRate = hongBaoManageService.getShareRate(); Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder()) .excludeFieldsWithoutExposeAnnotation().setDateFormat("yyyy-MM-dd").create(); ConfigParamsDTO paramsDTO = new ConfigParamsDTO(fanLiRate, shareRate, Constant.MAX_REWARD_RATE); 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) { BigDecimal fanLiRate = hongBaoManageService.getFanLiRate(); BigDecimal shareRate = hongBaoManageService.getShareRate(); ConfigParamsDTO paramsDTO = new ConfigParamsDTO(fanLiRate, shareRate, Constant.MAX_REWARD_RATE); 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)); } }