| | |
| | | import com.yeshi.fanli.entity.accept.AcceptData; |
| | | import com.yeshi.fanli.entity.bus.help.AppPageNotification; |
| | | import com.yeshi.fanli.entity.bus.search.HistorySearch; |
| | | import com.yeshi.fanli.entity.goods.BaseGoodsInfo; |
| | | 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.util.cache.TaoBaoGoodsCacheUtil; |
| | | import com.yeshi.fanli.util.factory.CommonGoodsFactory; |
| | | import com.yeshi.fanli.util.factory.goods.GoodsDetailVOFactory; |
| | | import com.yeshi.fanli.util.goods.douyin.CSJCPSApiUtil; |
| | | import com.yeshi.fanli.util.goods.douyin.DYUtil; |
| | | import com.yeshi.fanli.util.goods.douyin.vo.DYGoods; |
| | | import com.yeshi.fanli.util.goods.douyin.vo.DYGoodsDetail; |
| | | import com.yeshi.fanli.util.goods.douyin.vo.DYGoodsSearchFilter; |
| | | import com.yeshi.fanli.util.goods.douyin.vo.ListResult; |
| | | import com.yeshi.fanli.util.jd.JDApiUtil; |
| | | import com.yeshi.fanli.util.jd.JDUtil; |
| | | import com.yeshi.fanli.util.pinduoduo.PinDuoDuoApiUtil; |
| | |
| | | import com.yeshi.goods.facade.utils.taobao.DaTaoKeApiUtil; |
| | | import net.sf.json.JSONArray; |
| | | import net.sf.json.JSONObject; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.core.task.TaskExecutor; |
| | | import org.springframework.stereotype.Controller; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | |
| | | @Controller |
| | | @RequestMapping("api/v2/search") |
| | | public class SearchControllerV2 { |
| | | |
| | | Logger logger = LoggerFactory.getLogger(SearchControllerV2.class); |
| | | |
| | | @Resource |
| | | private ConfigService configService; |
| | |
| | | TaoBaoGoodsBrief goodsBrief = null; |
| | | String specialId = userExtraTaoBaoInfoService.getSpecialIdByUid(uid); |
| | | try { |
| | | goodsBrief = TaoKeApiUtil.searchGoodsDetail(StringUtil.isNullOrEmpty(goods.getGoodsSign())? goods.getGoodsId():goods.getGoodsSign(), specialId, null); |
| | | goodsBrief = TaoKeApiUtil.searchGoodsDetail(StringUtil.isNullOrEmpty(goods.getGoodsSign()) ? goods.getGoodsId() : goods.getGoodsSign(), specialId, null); |
| | | } catch (TaobaoGoodsDownException e) { |
| | | e.printStackTrace(); |
| | | } |
| | |
| | | switch (goods.getGoodsType()) { |
| | | case Constant.SOURCE_TYPE_TAOBAO: |
| | | type = "goodsdetail"; |
| | | if(!StringUtil.isNullOrEmpty(goods.getGoodsSign())) { |
| | | if (!StringUtil.isNullOrEmpty(goods.getGoodsSign())) { |
| | | params.put("id", goods.getGoodsSign() + ""); |
| | | } |
| | | break; |
| | |
| | | break; |
| | | case Constant.SOURCE_TYPE_SUNING: |
| | | type = "goodsdetail_suning"; |
| | | break; |
| | | case Constant.SOURCE_TYPE_DY: |
| | | type = "goodsdetail_dy"; |
| | | break; |
| | | |
| | | } |
| | |
| | | public void searchGoods(AcceptData acceptData, Integer goodsType, String key, Integer page, String filter, |
| | | Integer order, Long uid, String notifyType, HttpSession session, HttpServletRequest request, PrintWriter out) { |
| | | |
| | | if (goodsType == null || goodsType < 1 || goodsType > 5) { |
| | | if (goodsType == null || goodsType < 1 || goodsType > 7) { |
| | | out.print(JsonUtil.loadFalseResult(1, "请传递正确平台参数")); |
| | | return; |
| | | } |
| | |
| | | return; |
| | | } |
| | | |
| | | |
| | | /*-------- 抖音商品 ------*/ |
| | | if (goodsType.intValue() == Constant.SOURCE_TYPE_DY) { |
| | | searchDYGoods(acceptData, uid, searchkey, page, filter, order, ap, out); |
| | | return; |
| | | } |
| | | |
| | | /*-------- 淘宝商品 -------*/ |
| | | searchTaoBaoGoods(acceptData, uid, searchkey, page, filter, order, ap, out); |
| | | |
| | |
| | | return; |
| | | } |
| | | |
| | | |
| | | /*-------- 抖音商品 ------*/ |
| | | if (goodsType.intValue() == Constant.SOURCE_TYPE_DY) { |
| | | searchDYGoods(acceptData, uid, searchkey, page, filter, order, ap, out); |
| | | return; |
| | | } |
| | | |
| | | |
| | | /*-------- 淘宝商品 -------*/ |
| | | searchTaoBaoGoods(acceptData, uid, searchkey, page, filter, order, ap, out); |
| | | |
| | |
| | | //是否包含淘宝链接/口令 |
| | | if (page == 1) { |
| | | List<String> linkList = HttpUtil.getUrlListFromText(key); |
| | | if ((linkList != null && linkList.size() > 0) || TaoBaoUtil.isHaveNewVersionTaoBaoToken(key)) { |
| | | |
| | | if (((linkList != null && linkList.size() > 0) || TaoBaoUtil.isHaveNewVersionTaoBaoToken(key))&&false) { |
| | | // 暂时不通过链接搜索 |
| | | String id = DaTaoKeApiUtil.parseGoodsIdFromToken(key); |
| | | if (id != null) { |
| | | goodsId = id; |
| | | } |
| | | if (goodsId == null) { |
| | | try { |
| | | TaoKeApiUtil.TokenConvertResult result = TaoKeApiUtil.tokenConvert(key); |
| | | if (result != null) { |
| | | goodsId = result.getNum_iid(); |
| | | try { |
| | | TaoKeApiUtil.TokenConvertResult result = TaoKeApiUtil.tokenConvert(key); |
| | | if (result != null) { |
| | | goodsId = result.getNum_iid(); |
| | | } |
| | | } catch (TaoBaoTokenParseException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } catch (TaoBaoTokenParseException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | |
| | | } |
| | | if (goodsId == null) { |
| | | //解析链接 |
| | | if (linkList != null && linkList.size() > 0) { |
| | | String tempGoodsId = clipboardAnalysisManager.parseTBAuctionIdFromLink(linkList.get(0)); |
| | | if (!StringUtil.isNullOrEmpty(tempGoodsId)) { |
| | | goodsId = tempGoodsId; |
| | | } |
| | | } |
| | | // if (linkList != null && linkList.size() > 0) { |
| | | // String tempGoodsId = clipboardAnalysisManager.parseTBAuctionIdFromLink(linkList.get(0)); |
| | | // if (!StringUtil.isNullOrEmpty(tempGoodsId)) { |
| | | // goodsId = tempGoodsId; |
| | | // } |
| | | // } |
| | | } |
| | | } |
| | | |
| | |
| | | String[] ks = key.trim().split(" "); |
| | | if (ks.length > 1) |
| | | key = ks[1].trim(); |
| | | }else{ |
| | | key=title; |
| | | } else { |
| | | key = title; |
| | | } |
| | | } |
| | | } |
| | |
| | | } |
| | | |
| | | // 淘宝api搜索商品 |
| | | //TODO 测试注释 |
| | | TaoBaoSearchResult result = taoBaoGoodsCacheUtil.getSearchResult(sf); // TaoBaoUtil.search(sf, specialId, null); |
| | | if (result == null) { |
| | | result = TaoBaoUtil.search(sf, specialId, null); |
| | | if (result != null && result.getTaoBaoGoodsBriefs() != null && result.getTaoBaoGoodsBriefs().size() > 1) { |
| | | for (TaoBaoGoodsBrief g : result.getTaoBaoGoodsBriefs()) { |
| | | if (StringUtil.isNullOrEmpty(g.getAuctionId())) { |
| | | logger.error("搜索结果有空ID的情况 关键字{}", key); |
| | | } |
| | | } |
| | | } |
| | | |
| | | //如果是单个商品,且里面的商品ID为空,就需要借助大淘客搜索 |
| | | if (result.getTaoBaoGoodsBriefs() != null && result.getTaoBaoGoodsBriefs().size() == 1 && StringUtil.isNullOrEmpty(result.getTaoBaoGoodsBriefs().get(0).getAuctionId())) { |
| | | //有一个商品且里面的商品ID为空的情况 |
| | | JSONArray darray = DaTaoKeApiUtil.tbSearch(key); |
| | | if (darray != null && darray.size() > 0) { |
| | | String auctionId = darray.optJSONObject(0).optString("item_id"); |
| | | result.getTaoBaoGoodsBriefs().set(0, TaoKeApiUtil.searchGoodsDetail(auctionId)); |
| | | }else{ |
| | | // 大淘客无法搜索到,就将最后一个字去掉然后再搜索 |
| | | String originText = sf.getKey(); |
| | | sf.setKey(originText.substring(0,originText.length()-1)); |
| | | result = TaoBaoUtil.search(sf, specialId, null); |
| | | // if(result.getTaoBaoGoodsBriefs() != null) |
| | | // for(TaoBaoGoodsBrief tb: result.getTaoBaoGoodsBriefs()){ |
| | | // if(originText.equalsIgnoreCase(tb.getTitle())){ |
| | | // |
| | | // break; |
| | | // } |
| | | // } |
| | | } |
| | | } |
| | | taoBaoGoodsCacheUtil.saveSearchResult(sf, result); |
| | | } |
| | | TaoBaoSearchResult finalResult = result; |
| | |
| | | |
| | | boolean hasCoupon = false; |
| | | if (goodsId != null) { |
| | | JDGoods goods = JDApiUtil.getGoodsDetail(Long.parseLong(goodsId)); |
| | | JDGoods goods = JDApiUtil.getGoodsDetail(goodsId); |
| | | if (goods != null) { |
| | | count = 1; |
| | | goodsList.add(goods); |
| | |
| | | |
| | | if (goodsId != null) { |
| | | try { |
| | | PDDGoodsDetail pddGoodsDetail = PinDuoDuoApiUtil.getGoodsDetail(Long.parseLong(goodsId), PinDuoDuoApiUtil.PID_DEFAULT, customParams); |
| | | PDDGoodsDetail pddGoodsDetail = PinDuoDuoApiUtil.getGoodsDetail(goodsId, PinDuoDuoApiUtil.PID_DEFAULT, customParams); |
| | | if (pddGoodsDetail != null) { |
| | | count = 1; |
| | | goodsList.add(pddGoodsDetail); |
| | |
| | | e.printStackTrace(); |
| | | if (e.getCode() == PDDApiException.CODE_NOT_AUTH) { |
| | | try { |
| | | PDDGoodsDetail pddGoodsDetail = PinDuoDuoApiUtil.getGoodsDetail(Long.parseLong(goodsId), PinDuoDuoApiUtil.PID_DEFAULT, Constant.PDD_SEARCH_CUSTOMER_PARAMS); |
| | | PDDGoodsDetail pddGoodsDetail = PinDuoDuoApiUtil.getGoodsDetail(goodsId, PinDuoDuoApiUtil.PID_DEFAULT, Constant.PDD_SEARCH_CUSTOMER_PARAMS); |
| | | if (pddGoodsDetail != null) { |
| | | count = 1; |
| | | goodsList.add(pddGoodsDetail); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 搜索唯品会商品 |
| | | * 搜索抖音商品 |
| | | * |
| | | * @param acceptData |
| | | * @param key |
| | |
| | | * @Title: searchVIPGoods |
| | | * @Description: |
| | | */ |
| | | private void searchDYGoods(AcceptData acceptData, Long uid, String key, Integer page, String filter, Integer order, |
| | | AppPageNotification ap, PrintWriter out) { |
| | | String goodsId = null; |
| | | if (page == 1) { |
| | | List<String> linkList = HttpUtil.getUrlListFromText(key); |
| | | if (linkList != null && linkList.size() > 0) { |
| | | String productId = DYUtil.parseProdectIdFromLink(linkList.get(0)); |
| | | if (!StringUtil.isNullOrEmpty(productId)) { |
| | | goodsId = productId; |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | long count = 0; |
| | | List<BaseGoodsInfo> goodsList = new ArrayList<>(); |
| | | if (goodsId != null) { |
| | | DYGoodsDetail goodsInfo = CSJCPSApiUtil.goodsDetail(Long.parseLong(goodsId)); |
| | | if (goodsInfo != null) { |
| | | goodsList.add(goodsInfo); |
| | | count = 1; |
| | | } |
| | | } else { |
| | | DYGoodsSearchFilter searchFilter = new DYGoodsSearchFilter(); |
| | | searchFilter.setTitle(key); |
| | | searchFilter.setPage(page); |
| | | searchFilter.setPageSize(Constant.PAGE_SIZE); |
| | | |
| | | if (order != null) { |
| | | int sort = order.intValue(); |
| | | switch (sort) { |
| | | case 1: // 销量 desc |
| | | searchFilter.setSearch_type(1); |
| | | searchFilter.setOrder_type(1); |
| | | break; |
| | | case 2: // 价格—desc |
| | | searchFilter.setSearch_type(2); |
| | | searchFilter.setOrder_type(1); |
| | | break; |
| | | case 3: // 价格—asc |
| | | searchFilter.setSearch_type(2); |
| | | searchFilter.setOrder_type(0); |
| | | break; |
| | | case 4: // 返利比 |
| | | searchFilter.setSearch_type(4); |
| | | searchFilter.setOrder_type(1); |
| | | break; |
| | | default: // 综合排序 |
| | | searchFilter.setSearch_type(0); |
| | | searchFilter.setOrder_type(0); |
| | | break; |
| | | } |
| | | } |
| | | |
| | | if (!StringUtil.isNullOrEmpty(filter)) { |
| | | JSONObject jsonfilter = JSONObject.fromObject(filter); |
| | | String minPrice = jsonfilter.optString("minPrice"); |
| | | if (!StringUtil.isNullOrEmpty(minPrice)) { |
| | | searchFilter.setPrice_min(new BigDecimal(minPrice).min(new BigDecimal(100)).intValue()); |
| | | } |
| | | |
| | | String maxPrice = jsonfilter.optString("maxPrice"); |
| | | if (!StringUtil.isNullOrEmpty(maxPrice)) { |
| | | searchFilter.setPrice_max(new BigDecimal(maxPrice).min(new BigDecimal(100)).intValue()); |
| | | } |
| | | } |
| | | |
| | | |
| | | ListResult result = CSJCPSApiUtil.searchGoods(searchFilter); |
| | | if (result != null) { |
| | | count = result.getCount(); |
| | | List<Object> tempList = result.getDataList(); |
| | | if (tempList != null) { |
| | | for (Object o : tempList) { |
| | | goodsList.add((DYGoods) o); |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | JSONObject data = new JSONObject(); |
| | | JSONArray array = new JSONArray(); |
| | | |
| | | if (goodsList != null && goodsList.size() > 0) { |
| | | Gson gson = JsonUtil.getApiCommonGson(); |
| | | GoodsMoneyConfigParamsDTO paramsDTO = orderHongBaoMoneyComputeService.getShowComputeRate(acceptData.getPlatform(), |
| | | acceptData.getVersion(), acceptData.getSystem()); |
| | | |
| | | List<GoodsDetailVO> voList = goodsLijinMnager.loadOtherMoneyInfo(acceptData.getSystem(), uid, goodsList, paramsDTO); |
| | | for (GoodsDetailVO goodsDetailVO : voList) { |
| | | array.add(gson.toJson(goodsDetailVO)); |
| | | } |
| | | } |
| | | |
| | | data.put("result", array); |
| | | data.put("count", count); |
| | | out.print(JsonUtil.loadTrueResult(buildSearchResult(data, ap))); |
| | | } |
| | | |
| | | |
| | | private void searchVIPGoods(AcceptData acceptData, Long uid, String key, Integer page, String filter, Integer order, |
| | | AppPageNotification ap, PrintWriter out) { |
| | | String goodsId = null; |