From 30d8e227e8d823b6c38c3b9c90ac2df03b63befe Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期二, 25 二月 2025 16:41:22 +0800 Subject: [PATCH] 淘宝转链接口更新 --- fanli/src/main/java/com/yeshi/fanli/util/taobao/TaoBaoUtil.java | 4588 +++++++++++++++++++++++++++++++--------------------------- 1 files changed, 2,439 insertions(+), 2,149 deletions(-) diff --git a/fanli/src/main/java/com/yeshi/fanli/util/taobao/TaoBaoUtil.java b/fanli/src/main/java/com/yeshi/fanli/util/taobao/TaoBaoUtil.java index 471c85b..34f2680 100644 --- a/fanli/src/main/java/com/yeshi/fanli/util/taobao/TaoBaoUtil.java +++ b/fanli/src/main/java/com/yeshi/fanli/util/taobao/TaoBaoUtil.java @@ -1,2149 +1,2439 @@ -package com.yeshi.fanli.util.taobao; - -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.lang.reflect.Type; -import java.math.BigDecimal; -import java.net.URLDecoder; -import java.net.URLEncoder; -import java.util.ArrayList; -import java.util.HashMap; -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.PostConstruct; -import javax.annotation.Resource; -import javax.script.Invocable; -import javax.script.ScriptEngine; -import javax.script.ScriptEngineManager; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; - -import org.apache.commons.httpclient.HttpClient; -import org.apache.commons.httpclient.HttpException; -import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager; -import org.apache.commons.httpclient.methods.GetMethod; -import org.apache.commons.httpclient.params.HttpMethodParams; -import org.jsoup.Connection; -import org.jsoup.Jsoup; -import org.jsoup.nodes.Document; -import org.jsoup.nodes.Element; -import org.jsoup.select.Elements; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.w3c.dom.NamedNodeMap; -import org.w3c.dom.NodeList; -import org.yeshi.utils.BigDecimalUtil; -import org.yeshi.utils.HttpUtil; -import org.yeshi.utils.NumberUtil; -import org.yeshi.utils.entity.ProxyIP; -import org.yeshi.utils.taobao.TbImgUtil; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.reflect.TypeToken; -import com.yeshi.fanli.entity.common.ImageInfo; -import com.yeshi.fanli.entity.goods.CommonGoods; -import com.yeshi.fanli.entity.taobao.SearchFilter; -import com.yeshi.fanli.entity.taobao.TaoBaoCoupon; -import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief; -import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBriefExtra; -import com.yeshi.fanli.entity.taobao.TaoBaoHead; -import com.yeshi.fanli.entity.taobao.TaoBaoHongBaoInfo; -import com.yeshi.fanli.entity.taobao.TaoBaoLink; -import com.yeshi.fanli.entity.taobao.TaoBaoProvince; -import com.yeshi.fanli.entity.taobao.TaoBaoQuanInfo; -import com.yeshi.fanli.entity.taobao.TaoBaoSearchNav; -import com.yeshi.fanli.entity.taobao.TaoBaoSearchResult; -import com.yeshi.fanli.entity.taobao.TaoBaoShop; -import com.yeshi.fanli.entity.taobao.TaoBaoUnionConfig; -import com.yeshi.fanli.entity.taobao.dataoke.DaTaoKeDetail; -import com.yeshi.fanli.entity.taobao.dataoke.DaTaoKeDetailV2; -import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException; -import com.yeshi.fanli.log.LogHelper; -import com.yeshi.fanli.service.inter.goods.TaoBaoLinkService; -import com.yeshi.fanli.service.inter.order.config.HongBaoManageService; -import com.yeshi.fanli.tag.PageEntity; -import com.yeshi.fanli.util.AESUtil; -import com.yeshi.fanli.util.Constant; -import com.yeshi.fanli.util.MoneyBigDecimalUtil; -import com.yeshi.fanli.util.StringUtil; -import com.yeshi.fanli.util.TaoBaoConstant; -import com.yeshi.fanli.util.TaoBaoHttpUtil; -import com.yeshi.fanli.util.TimeUtil; -import com.yeshi.fanli.vo.msg.ClientTextStyleVO; - -import net.sf.json.JSONArray; -import net.sf.json.JSONObject; - -@Component -public class TaoBaoUtil { - - @Autowired - private HongBaoManageService manageService; - - @Resource - private TaoBaoLinkService taoBaoLinkService; - - private static TaoBaoUtil taoBaoUtil; - - @PostConstruct - public void init() { - taoBaoUtil = this; - taoBaoUtil.manageService = this.manageService; - taoBaoUtil.taoBaoLinkService = this.taoBaoLinkService; - } - - public final static int SORT_PRICE_HIGH_TO_LOW = 3;// 浠锋牸浠庨珮鍒颁綆 - public final static int SORT_PRICE_LOW_TO_HIGH = 4;// 浠锋牸浠庝綆鍒伴珮 - - public static final int SORT_TKRATE_LOW_TO_HIGH = 1;// 娣樺浣i噾姣旂巼浣庡埌楂� - public static final int SORT_TKRATE_HIGH_TO_LOW = 2;// 娣樺浣i噾姣旂巼楂樺埌浣� - - public static final int SORT_TOTAL_COMMI_LOW_TO_HIGH = 5;// 鎬绘敮鍑轰剑閲戜綆鍒伴珮 - public static final int SORT_TOTAL_COMMI_HIGH_TO_LOW = 6;// 鎬绘敮鍑轰剑閲戦珮鍒颁綆 - - public static final int SORT_TOTAL_SALES_LOW_TO_HIGH = 10;// 绱鎺ㄥ箍閲忎綆鍒伴珮 - public static final int SORT_TOTAL_SALES_HIGH_TO_LOW = 11;// 绱鎺ㄥ箍閲忛珮鍒颁綆 - - public static final int SORT_SALE_COMMISSION = 7;// 鏈堟敮鍑轰剑閲戜粠楂樺埌浣� - - public final static int SORT_SALE_LOW_TO_HIGH = 8;// 閿�閲忎粠浣庡埌楂� - - public final static int SORT_SALE_HIGH_TO_LOW = 9;// 閿�閲忎粠楂樺埌浣� - public final static int SORT_DEFAULT = 0;// 閿�閲忎粠楂樺埌浣� - - public final static int SORT_FILTER_FROM_ALL = 0;// 娣樺疂澶╃尗 - public final static int SORT_FILTER_FROM_TMALL = 1;// 澶╃尗 - - private final static int PAGESIZE = 20; - - public final static String SEARCH_URL = "http://pub.alimama.com/items/search.json"; - private static final String NZJH_URL = "http://pub.alimama.com/items/channel/nzjh.json"; - private static final String MUYING_URL = "http://pub.alimama.com/items/channel/muying.json"; - private static final String QQHD_URL = "http://pub.alimama.com/items/channel/qqhd.json"; - private static final String IFS_URL = "http://pub.alimama.com/items/channel/ifs.json"; - private static final String QBB_URL = "http://pub.alimama.com/items/channel/qbb.json"; - private static final String HCH_URL = "http://pub.alimama.com/items/channel/hch.json"; - private static final String CDJ_URL = "http://pub.alimama.com/items/channel/cdj.json"; - private static final String JYJ_URL = "http://pub.alimama.com/items/channel/jyj.json"; - private static final String KDC_URL = "http://pub.alimama.com/items/channel/kdc.json"; - private static final String DIY_URL = "http://pub.alimama.com/items/channel/diy.json"; - private static final String K9_URL = "http://pub.alimama.com/items/channel/9k9.json"; - private static final String K20_URL = "http://pub.alimama.com/items/channel/20k.json"; - private static final String TEHUI_URL = "http://pub.alimama.com/items/channel/tehui.json"; - - private static final String TB_ITEM_URL = "http://gw.api.taobao.com/router/rest"; - - public static final String TB_URL = "http://item.taobao.com/item.htm?id=%s"; - public static final String TM_PHONE_URL = "https://detail.m.tmall.com/item.htm?id=%s"; - public static final String TB_H5_URL = "http://h5.m.taobao.com/awp/core/detail.htm?id=%s"; - - private static final Map<Integer, String> channelMap = new HashMap<Integer, String>(); - private static final Map<Integer, String> urlMap = new HashMap<Integer, String>(); - - private static List<TaoBaoProvince> taoBaoProvinceList = null; - - static { - channelMap.put(0, "");// 鏅�� - channelMap.put(1, "nzjh");// 濂宠灏栬揣 - channelMap.put(2, "muying");// 姣嶅┐鐑帹 - channelMap.put(3, "qqhd");// 楂樹剑娲诲姩 - channelMap.put(4, "ifs");// ifashion - channelMap.put(5, "qbb");// 浜插疂璐� - channelMap.put(6, "hch");// 娣樺疂姹囧悆 - channelMap.put(7, "cdj");// 娼數琛� - channelMap.put(8, "jyj");// 鏋佹湁瀹� - channelMap.put(9, "kdc");// 閰峰姩鍩� - channelMap.put(10, "diy");// 娣樺疂DIY - channelMap.put(11, "9k9");// 瓒呭��9鍧�9 - channelMap.put(12, "20k");// 20鍏冨皝椤� - channelMap.put(13, "tehui");// 鐗逛环濂借揣 - - urlMap.put(0, SEARCH_URL); - urlMap.put(1, NZJH_URL); - urlMap.put(2, MUYING_URL); - urlMap.put(3, QQHD_URL); - urlMap.put(4, IFS_URL); - urlMap.put(5, QBB_URL); - urlMap.put(6, HCH_URL); - urlMap.put(7, CDJ_URL); - urlMap.put(8, JYJ_URL); - urlMap.put(9, KDC_URL); - urlMap.put(10, DIY_URL); - urlMap.put(11, K9_URL); - urlMap.put(12, K20_URL); - urlMap.put(13, TEHUI_URL); - } - - public static TaoBaoSearchResult search(SearchFilter filter, boolean proxy) { - if (filter.getKey().startsWith("http://") || filter.getKey().startsWith("https://")) { - String[] sts = filter.getKey().split("\\?")[1].split("&"); - for (String st : sts) { - if (st.contains("id=")) { - String id = st.replace("id=", "").trim(); - TaoBaoGoodsBrief tb = null; - try { - tb = TaoKeApiUtil.searchGoodsDetail(Long.parseLong(id)); - } catch (TaobaoGoodsDownException e) { - e.printStackTrace(); - } - List<TaoBaoGoodsBrief> goodsList = new ArrayList<>(); - goodsList.add(tb); - TaoBaoSearchResult result = new TaoBaoSearchResult(); - result.setTaoBaoGoodsBriefs(goodsList); - result.setNavList(new ArrayList<>()); - TaoBaoHead taoBaoHead = new TaoBaoHead(); - taoBaoHead.setDocsfound(1); - result.setTaoBaoHead(taoBaoHead); - return result; - } - } - return null; - } - - List<Long> cateList = null; - if (!StringUtil.isNullOrEmpty(filter.getCateIds())) { - cateList = new ArrayList<>(); - for (String c : filter.getCateIds().split(",")) - cateList.add(Long.parseLong(c)); - } - return TaoKeApiUtil.searchWuLiao(filter); - } - - /** - * 娣樺疂鑱旂洘缃戦〉鎼滅储鍟嗗搧 - * - * @param filter - * @param config - * -鑱旂洘閰嶇疆 - * @return - */ - public static TaoBaoSearchResult searchFromAlimamaWeb(SearchFilter filter, TaoBaoUnionConfig config) { - Map<String, String> params = new HashMap<String, String>(); - params.put("q", filter.getKey()); - params.put("_t", System.currentTimeMillis() + ""); - params.put("toPage", filter.getPage() + ""); - params.put("auctionTag", ""); - params.put("perPageSize", filter.getPageSize() == 0 ? PAGESIZE + "" : filter.getPageSize() + ""); - params.put("shopTag", filter.getShopTag() + ""); - params.put("t", System.currentTimeMillis() + ""); - params.put("_tb_token_", "test"); - params.put("yxjh", "-1"); - params.put("queryType", "2"); - String shopTag = filter.getShopTag(); - if (shopTag != null) { - String[] split = shopTag.split(","); - for (String tag : split) { - params.put(tag, "1"); - } - } - - if (filter.isTmall()) { - params.put("userType", "1"); - } - - if (filter.isBaoYou()) { - params.put("freeShipment", "1"); - } - - if (filter.getStartPrice() != null) { - params.put("startPrice", filter.getStartPrice() + ""); - } - if (filter.getEndPrice() != null) { - params.put("endPrice", filter.getEndPrice() + ""); - } - if (!StringUtil.isNullOrEmpty(filter.getCateIds())) - params.put("catIds", filter.getCateIds()); - - if (filter.getParams() != null && filter.getParams().size() > 0) { - Set<String> set = filter.getParams(); - StringBuffer sb = new StringBuffer(); - int i = 0; - for (String ids : set) { - if (i == 0) { - sb.append(ids); - } else { - sb.append(";" + ids); - } - i++; - } - params.put("pidvid", sb.toString()); - } - if (filter.getSort() > 0) { - params.put("sortType", filter.getSort() + ""); - // params.put("queryType", "0"); - } - - Map<String, String> headers = new HashMap<>(); - // headers.put("cookie", - // TaoBaoOrderUtil.getTaoBaoCookie(config.getAccount())); - - headers.put("referer", "https://pub.alimama.com/promo/search/index.htm"); - - headers.put("User-Agent", - "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36"); - - String result = TaoBaoHttpUtil.get(SEARCH_URL, params, headers, true); - if (result == null || "".equals(result)) { - return null; - } - result = result.replace("</span>", "").replace("<span class=H>", ""); - if (result.contains("<!DOCTYPE html>")) { - TaoBaoSearchResult presult = new TaoBaoSearchResult(); - presult.setNavList(new ArrayList<TaoBaoSearchNav>()); - presult.setTaoBaoGoodsBriefs(new ArrayList<TaoBaoGoodsBrief>()); - TaoBaoHead taoBaoHead = new TaoBaoHead(); - taoBaoHead.setDocsfound(0); - presult.setTaoBaoHead(taoBaoHead); - return presult; - } - TaoBaoSearchResult presult = parseTaoBao(result); - presult.setKey(filter.getKey()); - return presult; - } - - /** - * 娣樺疂鑱旂洘缃戦〉鎼滅储鍟嗗搧 - * - * @param filter - * @param config - * -鑱旂洘閰嶇疆 - * @return - */ - public static TaoBaoSearchResult searchAlimamaWeb(SearchFilter filter, TaoBaoUnionConfig config, Integer typeNum) { - - Map<String, String> params = new HashMap<String, String>(); - - if (typeNum != null && !typeNum.equals(0)) { - if (channelMap.get(typeNum) != null) { - params.put("channel", channelMap.get(typeNum)); - } - } - - params.put("toPage", filter.getPage() + ""); - params.put("perPageSize", filter.getPageSize() == 0 ? PAGESIZE + "" : filter.getPageSize() + ""); - - if (typeNum != null && typeNum == 3) { - // 鏌ヨ绫荤洰 - String catIds = filter.getCateIds(); - - if (!StringUtil.isNullOrEmpty(catIds)) { - // 楂樹剑鏃舵牴鎹被鐩甶d鏌ヨ - params.put("catIds", catIds); // 绫荤洰 - params.put("level", "1");// 榛樿涓�绾� - } else { - // 鏌ヨ鏉′欢 - String key = filter.getKey(); - if (!StringUtil.isNullOrEmpty(key)) { - params.put("q", filter.getKey()); - } - } - - } else { - // 鏌ヨ鏉′欢 - String key = filter.getKey(); - if (!StringUtil.isNullOrEmpty(key)) { - params.put("q", filter.getKey()); - } - } - - // 鎺掑簭瀛楁 3 浠锋牸楂樺埌浣� 4 浠锋牸浣庡埌楂� - // 9 閿�閲忛珮鍒颁綆 1 鏀跺叆姣旂巼楂樺埌浣� 5 鏈堟帹骞块噺楂樺埌浣� 7鏈堟敮鍑轰剑閲戦珮鍒颁綆 - // 13 娲诲姩寮�濮嬫椂闂寸敱杩戝埌杩� 11 娲诲姩鍓╀綑鏃堕棿闀垮埌鐭� 12 娲诲姩鍓╀綑鏃堕棿鐭埌闀� - - int sort = filter.getSort(); - if (sort > 0) { - params.put("sortType", sort + ""); - } - - // 鏄惁澶╃尗 - if (filter.isTmall()) { - params.put("userType", "1"); - } - - // 浣跨敤鍚紭鎯犲埜 - int quan = filter.getQuan(); - if (quan == 1) { - params.put("shopTag", "dpyhq"); - params.put("dpyhq", "1"); - } /* - * else { params.put("shopTag", ""); } - */ - - // 閿�閲� - String startBiz30day = filter.getStartBiz30day(); - if (!StringUtil.isNullOrEmpty(startBiz30day)) { - params.put("startBiz30day", startBiz30day); - } - - // 浣i噾姣斾緥灏忓�� - int startTkRate = filter.getStartTkRate(); - if (startTkRate > 0) { - params.put("startTkRate", startTkRate / 100 + ""); - } - - // 浣i噾姣斾緥澶у�� - int endTkRate = filter.getEndTkRate(); - if (endTkRate > 0) { - params.put("endTkRate", endTkRate + ""); - } - - // 璧峰浠锋牸 - if (filter.getStartPrice() != null) { - - params.put("startPrice", filter.getStartPrice() + ""); - } - - // 鎴浠锋牸 - if (filter.getEndPrice() != null) { - params.put("endPrice", filter.getEndPrice() + ""); - } - - if (filter.getParams() != null && filter.getParams().size() > 0) { - Set<String> set = filter.getParams(); - StringBuffer sb = new StringBuffer(); - int i = 0; - for (String ids : set) { - if (i == 0) { - sb.append(ids); - } else { - sb.append(";" + ids); - } - i++; - } - params.put("pidvid", sb.toString()); - } - - params.put("t", System.currentTimeMillis() + ""); - params.put("_tb_token_", "e430bae750a11"); - - Map<String, String> headers = new HashMap<>(); - - headers.put("referer", "https://pub.alimama.com/promo/search/index.htm"); - - headers.put("User-Agent", - "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36"); - - String cookie = TaoBaoOrderUtil.getTaoBaoCookie(config.getAccount()); - headers.put("Cookie", cookie); - - String url = SEARCH_URL; - - if (typeNum != null && !typeNum.equals(0)) { - url = urlMap.get(typeNum); - } - - String result = TaoBaoHttpUtil.get(url, params, headers, true); - if (result == null || "".equals(result)) { - return null; - } - - result = result.replace("</span>", "").replace("<span class=H>", ""); - if (result.contains("<!DOCTYPE html>")) { - TaoBaoSearchResult presult = new TaoBaoSearchResult(); - - presult.setNavList(new ArrayList<TaoBaoSearchNav>()); - presult.setTaoBaoGoodsBriefs(new ArrayList<TaoBaoGoodsBrief>()); - - TaoBaoHead taoBaoHead = new TaoBaoHead(); - taoBaoHead.setDocsfound(0); - presult.setTaoBaoHead(taoBaoHead); - - return presult; - } - TaoBaoSearchResult presult = parseTaoBao(result); - presult.setKey(filter.getKey()); - - return presult; - } - - public static TaoBaoSearchResult search(SearchFilter filter) { - return search(filter, false); - } - - public static TaoBaoSearchResult search2(SearchFilter filter, TaoBaoUnionConfig config) { - - if (filter.getKey().startsWith("http://") || filter.getKey().startsWith("https://")) { - String[] sts = filter.getKey().split("\\?")[1].split("&"); - for (String st : sts) { - if (st.contains("id=")) { - String id = st.replace("id=", "").trim(); - TaoBaoGoodsBrief tb = null; - try { - tb = TaoKeApiUtil.searchGoodsDetail(Long.parseLong(id)); - } catch (TaobaoGoodsDownException e) { - e.printStackTrace(); - } - List<TaoBaoGoodsBrief> goodsList = new ArrayList<>(); - goodsList.add(tb); - TaoBaoSearchResult result = new TaoBaoSearchResult(); - result.setTaoBaoGoodsBriefs(goodsList); - result.setNavList(new ArrayList<>()); - TaoBaoHead taoBaoHead = new TaoBaoHead(); - taoBaoHead.setDocsfound(1); - result.setTaoBaoHead(taoBaoHead); - result.setPageEntity(new PageEntity()); - return result; - } - } - return null; - } - - List<Long> cateList = null; - if (!StringUtil.isNullOrEmpty(filter.getCateIds())) { - cateList = new ArrayList<>(); - for (String c : filter.getCateIds().split(",")) - cateList.add(Long.parseLong(c)); - } - - if (1 > 0) - return TaoKeApiUtil.searchWuLiao(filter); - - Map<String, String> params = new HashMap<String, String>(); - String key = filter.getKey(); - if (key != null) { - params.put("q", filter.getKey()); - } - params.put("_t", System.currentTimeMillis() + ""); - params.put("toPage", filter.getPage() + ""); - params.put("perPageSize", PAGESIZE + ""); - params.put("auctionTag", ""); - params.put("shopTag", ""); - params.put("queryType", "2"); - params.put("t", System.currentTimeMillis() + ""); - params.put("_tb_token_", "owxj2i1mfTXq"); - int type = filter.getType(); - params.put("channel", channelMap.get(type)); - if (filter.getSort() > 0) { - params.put("sortType", filter.getSort() + ""); - // params.put("queryType", "0"); - } - String result = TaoBaoHttpUtil.tbGet(urlMap.get(type), params, config.getAccount()); - result = result.replace("</span>", "").replace("<span class=H>", ""); - TaoBaoSearchResult presult = parseTaoBao(result); - presult.setKey(filter.getKey()); - return presult; - } - - /** - * 9鍧�9 19鍧�9鐨勫垪琛� - * - * @param filter - * @return - */ - public static TaoBaoSearchResult search3(SearchFilter filter, TaoBaoUnionConfig config) { - Map<String, String> params = new HashMap<String, String>(); - String key = filter.getKey(); - if (key != null) { - params.put("q", filter.getKey()); - } - params.put("_t", System.currentTimeMillis() + ""); - params.put("toPage", filter.getPage() + ""); - params.put("perPageSize", PAGESIZE + ""); - params.put("auctionTag", ""); - params.put("shopTag", ""); - params.put("queryType", "2"); - params.put("t", System.currentTimeMillis() + ""); - params.put("_tb_token_", "owxj2i1mfTXq"); - int type = filter.getType(); - params.put("channel", channelMap.get(type)); - if (filter.getSort() > 0) { - params.put("sortType", filter.getSort() + ""); - // params.put("queryType", "0"); - } - String result = TaoBaoHttpUtil.tbGet(urlMap.get(type), params, config.getAccount()); - result = result.replace("</span>", "").replace("<span class=H>", ""); - TaoBaoSearchResult presult = parseTaoBao(result); - presult.setKey(filter.getKey()); - return presult; - } - - public static TaoBaoSearchResult parseTaoBao(String result) { - TaoBaoSearchResult resu = new TaoBaoSearchResult(); - List<TaoBaoGoodsBrief> list = new ArrayList<TaoBaoGoodsBrief>(); - JSONObject root = null; - try { - root = JSONObject.fromObject(result); - } catch (Exception e) { - e.printStackTrace(); - resu.setTaoBaoGoodsBriefs(list); - return resu; - } - Gson gson = new GsonBuilder().create(); - if (root.optBoolean("ok")) { - JSONArray array = root.optJSONObject("data").optJSONArray("pageList"); - if (array != null) { - for (int i = 0; i < array.size(); i++) { - list.add(gson.fromJson(array.optJSONObject(i).toString(), TaoBaoGoodsBrief.class)); - } - } - JSONObject head = root.optJSONObject("data").optJSONObject("head"); - Type headType = new TypeToken<TaoBaoHead>() { - }.getType(); - TaoBaoHead taoBaoHead = gson.fromJson(head.toString(), headType); - resu.setTaoBaoHead(taoBaoHead); - - JSONArray navArray = root.optJSONObject("data").optJSONArray("navigator"); - Type type = new TypeToken<ArrayList<TaoBaoSearchNav>>() { - }.getType(); - if (navArray != null) { - List<TaoBaoSearchNav> navList = gson.fromJson(navArray.toString(), type); - for (TaoBaoSearchNav taoBaoSearchNav : navList) { - String tbtype = taoBaoSearchNav.getType(); - if (!"category".equalsIgnoreCase(tbtype)) { - taoBaoSearchNav.setSelector(1); - } - } - resu.setNavList(navList); - } - JSONObject paginatorObject = root.optJSONObject("data").optJSONObject("paginator"); - if (paginatorObject != null) { - int count = (Integer) paginatorObject.get("items"); - int totalPage = (Integer) paginatorObject.get("pages"); - PageEntity pe = new PageEntity(); - pe.setTotalCount(count); - pe.setPageSize(PAGESIZE); - pe.setTotalPage(totalPage); - resu.setPageEntity(pe); - } - } - for (TaoBaoGoodsBrief taoBaoGoodsBrief : list) { - String pictUrl = taoBaoGoodsBrief.getPictUrl(); - if (!pictUrl.contains("http:") && !pictUrl.contains("https:")) { - taoBaoGoodsBrief.setPictUrl("http:" + pictUrl); - } - } - resu.setTaoBaoGoodsBriefs(list); - - PageEntity pageEntity = resu.getPageEntity(); - if (pageEntity == null) { - PageEntity entity = new PageEntity(); - resu.setPageEntity(entity); - } - - return resu; - } - - public static List<TaoBaoSearchNav> getBaseNav() { - List<TaoBaoSearchNav> list = new ArrayList<TaoBaoSearchNav>(); - - // 璁剧疆瀹濊礉绫诲瀷(娣樺疂澶╃尗/澶╃尗) - // TaoBaoSearchNav shopType = new TaoBaoSearchNav(); - // shopType.setLevel(1); - // shopType.setId(2); - // shopType.setName("瀹濊礉绫诲瀷"); - // shopType.setType("shoptype"); - // shopType.setFlag("shoptype"); - // shopType.setSelector(0); - // List<TaoBaoSearchNav> shopTypeChildList = new - // ArrayList<TaoBaoSearchNav>(); - // shopTypeChildList.add(new TaoBaoSearchNav(0, "all", 21, 2, "娣樺疂澶╃尗", - // "")); - // shopTypeChildList.add(new TaoBaoSearchNav(0, "tmall", 22, 2, "澶╃尗", - // "")); - // shopType.setSubIds(shopTypeChildList); - // list.add(shopType); - - // 鏄惁鏈夊埜 - // TaoBaoSearchNav quanType = new TaoBaoSearchNav(); - // quanType.setLevel(1); - // quanType.setId(3); - // quanType.setName("鏄惁鏈夊埜"); - // quanType.setType("quantype"); - // quanType.setFlag("quantype"); - // quanType.setSelector(0); - // List<TaoBaoSearchNav> quanTypeChildList = new - // ArrayList<TaoBaoSearchNav>(); - // quanTypeChildList.add(new TaoBaoSearchNav(0, "quan", 31, 2, "鏈夊埜", - // "")); - // quanTypeChildList - // .add(new TaoBaoSearchNav(0, "noquan", 32, 2, "鏃犲埜", "")); - // quanType.setSubIds(quanTypeChildList); - // list.add(quanType); - - // 鏄惁鏈夌孩鍖� - // TaoBaoSearchNav hongbaoType = new TaoBaoSearchNav(); - // hongbaoType.setLevel(1); - // hongbaoType.setId(4); - // hongbaoType.setName("鏄惁鏈夌孩鍖�"); - // hongbaoType.setType("hongbaotype"); - // hongbaoType.setFlag("hongbaotype"); - // hongbaoType.setSelector(0); - // List<TaoBaoSearchNav> hongbaoChildList = new - // ArrayList<TaoBaoSearchNav>(); - // hongbaoChildList - // .add(new TaoBaoSearchNav(0, "hongbao", 41, 2, "鏈夌孩鍖�", "")); - // hongbaoChildList.add(new TaoBaoSearchNav(0, "nohongbao", 42, 2, - // "鏃犵孩鍖�", - // "")); - // hongbaoType.setSubIds(hongbaoChildList); - // list.add(hongbaoType); - - // 璁剧疆鍙戣揣鍦� - // TaoBaoSearchNav address = new TaoBaoSearchNav(); - // address.setLevel(1); - // address.setId(1); - // address.setName("搴楅摵鎵�鍦ㄥ湴"); - // address.setType("loc"); - // address.setFlag("loc"); - // List<TaoBaoSearchNav> addressChildList = new - // ArrayList<TaoBaoSearchNav>(); - // - // list.add(address); - - return list; - } - - public static TaoBaoGoodsBriefExtra getTaoBaoGoodsBriefExtra(TaoBaoGoodsBrief tb, String proportion, String pid) { - TaoBaoGoodsBriefExtra tg = new TaoBaoGoodsBriefExtra(); - tg.setId(tb.getId()); - tg.setAuctionId(tb.getAuctionId()); - tg.setBiz30day(tb.getBiz30day()); - tg.setSalesCount(TaoBaoUtil.getSaleCount(tb.getBiz30day())); - tg.setTitle(tb.getTitle()); - if (!StringUtil.isNullOrEmpty(tb.getPictUrlWhite())) - tg.setPictUrl(TbImgUtil.getTBSize320Img(tb.getPictUrlWhite())); - else - tg.setPictUrl(TbImgUtil.getTBSize320Img(tb.getPictUrl())); - tg.setZkPrice(tb.getZkPrice()); - tg.setAuctionUrl(tb.getAuctionUrl()); - tg.setReservePrice(tb.getReservePrice()); - tg.setUserType(tb.getUserType()); - tg.setShopTitle(tb.getShopTitle()); - tg.setTkRate(tb.getTkRate()); - tg.setSellerId(tb.getSellerId()); - tg.setState(tb.getState()); // 鐘舵�侊細2018-12-03 - if (tb.getCouponAmount().compareTo(BigDecimal.valueOf(0)) > 0) { - - tg.setCoupon(true);// 鏈夊埜 - - TaoBaoQuanInfo quanInfo = new TaoBaoQuanInfo(); - quanInfo.setCouponAmount(tb.getCouponAmount()); - String couponEffectiveEndTime = tb.getCouponEffectiveEndTime(); - long endtime = TimeUtil.convertDateToTemp(couponEffectiveEndTime); - quanInfo.setCouponEffectiveEndTime(endtime + 1000 * 60 * 60 * 24L + ""); - quanInfo.setCouponEffectiveStartTime(TimeUtil.convertDateToTemp(tb.getCouponEffectiveStartTime()) + ""); - quanInfo.setCouponInfo(tb.getCouponInfo()); - quanInfo.setCouponLeftCount(tb.getCouponLeftCount()); - quanInfo.setCouponLink( - TaoBaoCouponUtil.getCoupleUrl(tb.getCouponActivityId(), pid, tb.getAuctionId() + "")); - quanInfo.setCouponPrice(MoneyBigDecimalUtil.sub(tg.getZkPrice(), tb.getCouponAmount())); - quanInfo.setCouponStartFee(tb.getCouponStartFee()); - quanInfo.setCouponTotalCount(tb.getCouponTotalCount()); - tg.setTaoBaoQuanInfo(quanInfo); - } - TaoBaoHongBaoInfo hongBaoInfo = new TaoBaoHongBaoInfo(); - - hongBaoInfo.setRate("鏈�楂�40%"); - - String hongbao = getGoodsHongBaoInfo(tb, new BigDecimal(proportion)); - if (hongbao.contains("鏈�楂�")) { - hongBaoInfo.setType(1); - hongBaoInfo.setHongbao(new BigDecimal(0)); - } else { - hongBaoInfo.setRate(hongbao); - hongBaoInfo.setHongbao(new BigDecimal(hongbao.replace("楼", ""))); - } - - tg.setBaoyou(true); - - if (tb.getUserType() == 1) - tg.setShopType(2); - else - tg.setShopType(1); - - if (tb.getCouponAmount().compareTo(BigDecimal.valueOf(0)) == 1) - tg.setShowType(3); - else - tg.setShowType(2); - - int showType = tg.getShowType(); - if (showType == 3 || showType == 1) { - BigDecimal sub = tg.getZkPrice().subtract(tb.getCouponStartFee()); - if (sub.compareTo(BigDecimal.valueOf(0)) >= 0) { - BigDecimal quanPrice = MoneyBigDecimalUtil.sub(tg.getZkPrice(), tb.getCouponAmount()); - tg.setQuanPrice(quanPrice); - } else { - tg.setQuanPrice(tg.getZkPrice()); - } - } - - tg.setTaoBaoHongBaoInfo(hongBaoInfo); - - tg.setMoneyType(1); - tg.setSalesType(1); - // 娴嬭瘯浣跨敤 - // tg.setSalesType(Math.random() > 0.5 ? tg.getSalesType() : 3); - // if(Constant.IS_TEST) - // { - // List<ClientTextStyleVO> labels = new ArrayList<>(); - // labels.add(new ClientTextStyleVO("鏍囩鍐呭", "#F14242")); - // labels.add(new ClientTextStyleVO("鏍囩鍐呭", "#00FF00")); - // tg.setLabels(labels); - // } - return loadYuShouInfo(tg, tb); - } - - private static TaoBaoGoodsBriefExtra loadYuShouInfo(TaoBaoGoodsBriefExtra extra, TaoBaoGoodsBrief goods) { - if (goods != null && extra != null) { - if (isYUShou(goods)) {// 棰勫敭鍟嗗搧 - // extra.setZkPrice(new BigDecimal(goods.getPresaleDeposit())); - // 棰勫敭 - if (extra.getLabels() == null) - extra.setLabels(new ArrayList<>()); - extra.getLabels().add(new ClientTextStyleVO("棰勫敭", "#FF2B4E")); - } - } - return extra; - } - - /** - * 鏄惁涓洪鍞晢鍝� - * - * @param goods - * @return - */ - public static boolean isYUShou(TaoBaoGoodsBrief goods) { - if (!StringUtil.isNullOrEmpty(goods.getPresaleDeposit()) - && !StringUtil.isNullOrEmpty(goods.getPresaleStartTime()) - && !StringUtil.isNullOrEmpty(goods.getPresaleEndTime())) { - long startTime = Long.parseLong(goods.getPresaleStartTime()); - long endTime = Long.parseLong(goods.getPresaleEndTime()); - long now = System.currentTimeMillis(); - if (now >= startTime && now < endTime) { - return true; - } - } - - return false; - } - - /** - * 鑾峰彇娣樺疂鎺ㄥ箍閾炬帴 - * - * @param auctionId - * @param pid - * @return - */ - public static TaoBaoLink getTbLink(long auctionId, String pid, TaoBaoUnionConfig config) { - TaoBaoLink tbk = null; - String cookie = TaoBaoOrderUtil.getTaoBaoCookie(config.getAccount()); - String adzoneid = pid.split("_")[3]; - String siteId = pid.split("_")[2]; - Map<String, String> headers = new HashMap<>(); - - headers.put("Cookie", cookie); - headers.put("Referer", "http://pub.alimama.com/promo/search/index.htm"); - headers.put("User-Agent", - "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36"); - headers.put("Cookie", cookie); - headers.put("X-Requested-With", "XMLHttpRequest"); - - String json = TaoBaoHttpUtil.proxyGet("http://pub.alimama.com/common/code/getAuctionCode.json?auctionid=" - + auctionId + "&adzoneid=" + adzoneid + "&siteid=" + siteId + "&scenes=1", cookie); - System.out.println(json); - if (json == null || "".equals(json.trim())) { - LogHelper.taoBaoLinkError("鑾峰彇鎺ㄥ箍閾炬帴澶辫触:" + auctionId); - return null; - } - - JSONObject data; - try { - data = JSONObject.fromObject(json); - } catch (Exception e) { - LogHelper.taoBaoLinkError("鑾峰彇鎺ㄥ箍閾炬帴澶辫触:" + auctionId); - return null; - } - - if (data.optBoolean("ok")) { - tbk = new TaoBaoLink(); - JSONObject dat = data.optJSONObject("data"); - String couponLink = dat.optString("couponLink"); - String clickUrl = dat.optString("clickUrl"); - String taoToken = dat.optString("taoToken"); - tbk.setCouponLink(couponLink); - tbk.setClickUrl(clickUrl); - tbk.setTaoToken(taoToken); - tbk.setAuctionId(auctionId); - return tbk; - } else { - LogHelper.taoBaoLinkError("鑾峰彇鎺ㄥ箍閾炬帴澶辫触:" + auctionId); - } - // 濡傛灉json杩斿洖鐨勬槸false锛岃鏄巆ookie澶辨晥 - TaoBaoOrderUtil.reportCookieInvalid(config.getAccount()); - return null; - } - - /** - * 鑾峰彇鎺ㄥ箍鐢ㄧ殑娣樺彛浠� - * - * @param auctionId - * @param pid - * @return - */ - public static TaoBaoLink getTbLinkForShare(long auctionId, String pid, TaoBaoUnionConfig config) { - TaoBaoLink tbk = null; - String cookie = TaoBaoOrderUtil.getTaoBaoCookie(config.getAccount()); - selfAdzoneCreate(pid, cookie); - String adzoneid = pid.split("_")[3]; - String siteId = pid.split("_")[2]; - Map<String, String> headers = new HashMap<>(); - - headers.put("Cookie", cookie); - headers.put("Referer", "http://pub.alimama.com/promo/search/index.htm"); - headers.put("User-Agent", - "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36"); - headers.put("Cookie", cookie); - headers.put("X-Requested-With", "XMLHttpRequest"); - - String json = TaoBaoHttpUtil.proxyGet("http://pub.alimama.com/common/code/getAuctionCode.json?auctionid=" - + auctionId + "&adzoneid=" + adzoneid + "&siteid=" + siteId + "&scenes=1", cookie); - System.out.println(json); - LogHelper.test(json); - if (json == null || "".equals(json.trim())) { - return null; - } - - JSONObject data; - try { - data = JSONObject.fromObject(json); - } catch (Exception e) { - return null; - } - - if (data.optBoolean("ok")) { - tbk = new TaoBaoLink(); - JSONObject dat = data.optJSONObject("data"); - String couponLink = dat.optString("couponLink"); - String clickUrl = dat.optString("clickUrl"); - String taoToken = dat.optString("taoToken"); - tbk.setCouponLink(couponLink); - tbk.setClickUrl(clickUrl); - tbk.setTaoToken(taoToken); - tbk.setAuctionId(auctionId); - - return tbk; - } - // 濡傛灉json杩斿洖鐨勬槸false锛岃鏄巆ookie澶辨晥 - TaoBaoOrderUtil.reportCookieInvalid(config.getAccount()); - return null; - } - - /** - * 閫氳繃浼樻儬鍒搁摼鎺ヨ幏鍙栨窐鍙d护 - * - * @param picture - * @param title - * @param activityId - * @param auctionId - * @param pid - * @return - */ - public static TaoBaoLink getTbLinkWithCoupon(String picture, String title, String activityId, long auctionId, - String pid) { - activityId = StringUtil.isNullOrEmpty(activityId) ? "da75a5880d4c41ab88a82256b069a38c" : activityId; - String url = String.format("https://uland.taobao.com/coupon/edetail?activityId=%s&pid=%s&itemId=%s", activityId, - pid, auctionId + ""); - String tbk = TaoKeApiUtil.getTKToken(picture, title, url); - if (StringUtil.isNullOrEmpty(tbk)) - LogHelper.error("鐢熸垚娣樺彛浠ゅけ璐ワ紙浼樻儬鍒搁摼鎺ワ級:" + auctionId); - TaoBaoLink taoBaoLink = new TaoBaoLink(); - taoBaoLink.setAuctionId(auctionId); - taoBaoLink.setClickUrl(url); - taoBaoLink.setCouponLink(url); - taoBaoLink.setTaoToken(tbk); - return taoBaoLink; - } - - private static void selfAdzoneCreate(String pid, String cookie) { - String[] sts = cookie.split(";"); - String tbToken = ""; - for (String st : sts) { - if (st.contains("_tb_token_")) { - tbToken = st.replace("_tb_token_=", ""); - break; - } - } - String adzoneid = pid.split("_")[3]; - String siteId = pid.split("_")[2]; - String url = "http://pub.alimama.com/common/adzone/selfAdzoneCreate.json"; - Map<String, String> params = new HashMap<>(); - params.put("tag", "29"); - params.put("gcid", "8"); - params.put("siteid", siteId); - params.put("selectact", "sel"); - params.put("adzoneid", adzoneid); - params.put("t", System.currentTimeMillis() + ""); - params.put("_tb_token_", tbToken); - - Map<String, String> headers = new HashMap<>(); - headers.put("Cookie", cookie); - headers.put("Referer", "http://pub.alimama.com/promo/search/index.htm"); - headers.put("User-Agent", - "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36"); - headers.put("Cookie", cookie); - headers.put("X-Requested-With", "XMLHttpRequest"); - String result = TaoBaoHttpUtil.post(url, params, headers); - System.out.println(result); - } - - public static TaoBaoGoodsBriefExtra getTaoBaoGoodsBriefExtra(TaoBaoGoodsBrief tb, TaoBaoUnionConfig config) { - TaoBaoGoodsBriefExtra tg = new TaoBaoGoodsBriefExtra(); - tg.setId(tb.getId()); - tg.setAuctionId(tb.getAuctionId()); - tg.setBiz30day(tb.getBiz30day()); - tg.setSalesCount(TaoBaoUtil.getSaleCount(tb.getBiz30day())); - tg.setTitle(tb.getTitle()); - tg.setPictUrl(tb.getPictUrl()); - tg.setZkPrice(tb.getZkPrice()); - tg.setAuctionUrl(tb.getAuctionUrl()); - tg.setReservePrice(tb.getReservePrice()); - tg.setUserType(tb.getUserType()); - tg.setImgList(tb.getImgList()); - - if (tb.getCouponAmount().compareTo(BigDecimal.valueOf(0)) == 1) { - TaoBaoQuanInfo quanInfo = new TaoBaoQuanInfo(); - quanInfo.setCouponAmount(tb.getCouponAmount()); - String couponEffectiveEndTime = tb.getCouponEffectiveEndTime(); - long endtime = TimeUtil.convertDateToTemp(couponEffectiveEndTime); - quanInfo.setCouponEffectiveEndTime(endtime + 1000 * 60 * 60 * 24L + ""); - quanInfo.setCouponEffectiveStartTime(TimeUtil.convertDateToTemp(tb.getCouponEffectiveStartTime()) + ""); - quanInfo.setCouponInfo(tb.getCouponInfo()); - quanInfo.setCouponLeftCount(tb.getCouponLeftCount()); - String pid = config.getDefaultPid(); - quanInfo.setCouponLink( - TaoBaoCouponUtil.getCoupleUrl(tb.getCouponActivityId(), pid, tb.getAuctionId() + "")); - quanInfo.setCouponPrice(tb.getZkPrice().subtract(tb.getCouponAmount())); - quanInfo.setCouponStartFee(tb.getCouponStartFee()); - quanInfo.setCouponTotalCount(tb.getCouponTotalCount()); - tg.setTaoBaoQuanInfo(quanInfo); - } - - BigDecimal proportion = taoBaoUtil.manageService.getFanLiRate(); - TaoBaoHongBaoInfo hongBaoInfo = new TaoBaoHongBaoInfo(); - String tkMktStatus = tb.getTkMktStatus(); - if ("1".equals(tkMktStatus)) { - hongBaoInfo.setType(1); - } - - hongBaoInfo.setRate("鏈�楂�40%"); - - String hongbao = getGoodsHongBaoInfo(tb, proportion); - if (!hongbao.contains("鏈�楂�")) - hongBaoInfo.setHongbao(new BigDecimal(hongbao.replace("楼", ""))); - else - hongBaoInfo.setHongbao(new BigDecimal(0)); - - tg.setBaoyou(true); - - if (tb.getUserType() == 1) - tg.setShopType(2); - else - tg.setShopType(1); - - if (tb.getCouponAmount().compareTo(BigDecimal.valueOf(0)) == 1) - tg.setShowType(3); - else - tg.setShowType(2); - - int showType = tg.getShowType(); - if (showType == 3 || showType == 1) { - BigDecimal sub = tg.getZkPrice().subtract(tb.getCouponStartFee()); - if (sub.compareTo(BigDecimal.valueOf(0)) >= 0) { - BigDecimal quanPrice = tg.getZkPrice().subtract(tb.getCouponAmount()); - tg.setQuanPrice(quanPrice); - } else { - tg.setQuanPrice(tg.getZkPrice()); - } - } - tg.setTaoBaoHongBaoInfo(hongBaoInfo); - - tg.setMoneyType(1); - tg.setSalesType(1); - // 娴嬭瘯浣跨敤 - // tg.setMoneyType(Math.random() > 0.5 ? 1 : 2); - // tg.setSalesType(Math.random() > 0.5 ? 1 : 2); - // tg.setSalesType(Math.random() > 0.5 ? tg.getSalesType() : 3); - // List<ClientTextStyleVO> labels = new ArrayList<>(); - // labels.add(new ClientTextStyleVO("鏍囩鍐呭", "#F14242")); - // labels.add(new ClientTextStyleVO("鏍囩鍐呭", "#000000")); - // tg.setLabels(labels); - - return tg; - } - - public static TaoBaoGoodsBrief getTaoBaoGoodsBrief(String id) { - Map<String, String> params = new HashMap<String, String>(); - params.put("q", String.format("http://item.taobao.com/item.htm?id=%s", id)); - params.put("_t", System.currentTimeMillis() + ""); - params.put("auctionTag", ""); - params.put("perPageSize", 40 + ""); - params.put("t", System.currentTimeMillis() + ""); - String result = TaoBaoHttpUtil.get(SEARCH_URL, params); - result = result.replace("</span>", "").replace("<span class=H>", ""); - TaoBaoSearchResult presult = parseTaoBao(result); - if (presult != null && presult.getTaoBaoGoodsBriefs().size() > 0) { - // TaoBaoGoodsBrief taoBaoGoodsBrief = - // presult.getTaoBaoGoodsBriefs().get(0); - - return presult.getTaoBaoGoodsBriefs().get(0); - } else - return null; - } - - public static List<String> getSuguestSearch(String key) { - try { - String url = String.format("https://suggest.taobao.com/sug?code=utf-8&q=%s&_=1486720576511", - URLEncoder.encode(key, "UTF-8")); - HttpClient client = new HttpClient(); - GetMethod gm = new GetMethod(url); - client.executeMethod(gm); - String result = gm.getResponseBodyAsString(); - JSONObject obj = JSONObject.fromObject(result); - if (obj != null) { - JSONArray array = obj.optJSONArray("result"); - List<String> list = new ArrayList<String>(); - for (int i = 0; i < array.size(); i++) { - list.add(array.optJSONArray(i).optString(0)); - } - return list; - } - - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } - - public static List<String> getTbImg(String auctionId) { - if (!NumberUtil.isNumeric(auctionId)) - return new ArrayList<>(); - TaoBaoGoodsBrief taoBaoGoodsBrief = null; - try { - taoBaoGoodsBrief = TaoKeApiUtil.getSimpleGoodsInfo(Long.parseLong(auctionId)); - } catch (TaobaoGoodsDownException e) { - e.printStackTrace(); - } - - List<String> list = new ArrayList<String>(); - if (taoBaoGoodsBrief == null) - return list; - - if (!StringUtil.isNullOrEmpty(taoBaoGoodsBrief.getPictUrl())) - list.add(taoBaoGoodsBrief.getPictUrl()); - if (taoBaoGoodsBrief.getImgList() != null && taoBaoGoodsBrief.getImgList().size() > 0) - list.addAll(taoBaoGoodsBrief.getImgList()); - return list; - } - - public static TaoBaoGoodsBrief isAlimama(String auctionId) { - if (StringUtil.isNullOrEmpty(auctionId) || !NumberUtil.isNumeric(auctionId)) - return null; - TaoBaoGoodsBrief tb = null; - try { - tb = TaoKeApiUtil.getSimpleGoodsInfo(Long.parseLong(auctionId)); - } catch (TaobaoGoodsDownException e) { - e.printStackTrace(); - } - return tb; - } - - public static List<TaoBaoGoodsBriefExtra> getTaoBaoGoodsBriefExtraList(List<TaoBaoCoupon> list) { - List<TaoBaoGoodsBriefExtra> tbxs = new ArrayList<TaoBaoGoodsBriefExtra>(); - TaoBaoGoodsBriefExtra taoBaoGoodsBriefExtra = null; - TaoBaoQuanInfo taobaoQuanInfo = null; - TaoBaoHongBaoInfo taobaoHongbaoInfo = null; - for (TaoBaoCoupon taoBaoCoupon : list) { - taoBaoGoodsBriefExtra = new TaoBaoGoodsBriefExtra(); - taobaoQuanInfo = new TaoBaoQuanInfo(); - taobaoQuanInfo.setCouponAmount(taoBaoCoupon.getCouponAmount()); - taobaoQuanInfo.setCouponInfo(taoBaoCoupon.getCouponinfo()); - taobaoQuanInfo.setCouponPrice(taoBaoCoupon.getQuanPrice()); - taobaoQuanInfo.setCouponLink(taoBaoCoupon.getCouponLink()); - taobaoHongbaoInfo = new TaoBaoHongBaoInfo(); - taobaoHongbaoInfo.setHongbao(taoBaoCoupon.getHongbao()); - taobaoHongbaoInfo.setRate("楼" + taoBaoCoupon.getHongbao().toString()); - - taoBaoGoodsBriefExtra.setTaoBaoHongBaoInfo(taobaoHongbaoInfo); - taoBaoGoodsBriefExtra.setTaoBaoQuanInfo(taobaoQuanInfo); - - taoBaoGoodsBriefExtra.setAuctionId(Long.parseLong(taoBaoCoupon.getAuctionId())); - taoBaoGoodsBriefExtra.setAuctionUrl(taoBaoCoupon.getAuctionUrl()); - taoBaoGoodsBriefExtra.setBaoyou(true); - taoBaoGoodsBriefExtra.setBiz30day(taoBaoCoupon.getBiz30day()); - taoBaoGoodsBriefExtra.setPictUrl(taoBaoCoupon.getPictUrl()); - taoBaoGoodsBriefExtra.setQuanPrice(taoBaoCoupon.getQuanPrice()); - - int shopType = taoBaoCoupon.getShopType(); - taoBaoGoodsBriefExtra.setShopType(shopType); - taoBaoGoodsBriefExtra.setShowType(taoBaoCoupon.getShowType()); - - taoBaoGoodsBriefExtra.setTitle(taoBaoCoupon.getTitle()); - taoBaoGoodsBriefExtra.setReservePrice(taoBaoCoupon.getZkPrice()); - taoBaoGoodsBriefExtra.setZkPrice(taoBaoCoupon.getZkPrice()); - taoBaoGoodsBriefExtra.setSellerId(taoBaoCoupon.getSellerId()); - tbxs.add(taoBaoGoodsBriefExtra); - } - - return tbxs; - } - - public static TaoBaoGoodsBrief parsePhoneShareUrlByTM(String murl) { - if (!murl.contains("http://zmnxbc.com")) { // 鎵嬫満澶╃尗鍒嗕韩 - return null; - } - TaoBaoGoodsBrief taobao; - try { - Connection connect = Jsoup.connect(murl); - Document document = connect.get(); - org.jsoup.nodes.Element element = document.getElementsByTag("head").get(0).getElementsByTag("Script") - .get(2); - String html = element.html(); - String json = html.substring(html.indexOf("{"), html.lastIndexOf("}") + 1); - JSONObject data = JSONObject.fromObject(json); - String auctionId = data.optString("bizId"); - TaoBaoGoodsBrief alimama = isAlimama(auctionId); - if (alimama != null) { - return alimama; - } - String price = data.optString("itemPrice", "0"); - String title = data.optString("content"); - String url = data.optJSONArray("actionRule").optJSONObject(0).optString("url"); - Document document2 = Jsoup.connect("http:" + url).get(); - org.jsoup.nodes.Element element2 = document2.getElementById("s-showcase").getElementsByClass("scroller") - .get(0); - Elements elements = element2.getElementsByClass("item"); - List<String> imgStrs = new ArrayList<String>(); - for (org.jsoup.nodes.Element e : elements) { - org.jsoup.nodes.Element img = e.getElementsByTag("img").get(0); - String attr = img.attr("src"); - if (attr == "") { - attr = img.attr("data-src"); - } - if (!attr.contains("http:")) { - attr = "http:" + attr; - } - imgStrs.add(attr); - } - taobao = new TaoBaoGoodsBrief(); - taobao.setAuctionId(Long.parseLong(auctionId)); - taobao.setTitle(title); - taobao.setZkPrice(new BigDecimal(price)); - taobao.setImgList(imgStrs); - } catch (Exception e) { - e.printStackTrace(); - return null; - } - return taobao; - } - - public static TaoBaoGoodsBrief parsePhoneShareUrlByTB(String burl) { - try { - Connection connect = Jsoup.connect(burl); - Document document = connect.get(); - org.jsoup.nodes.Element element = document.getElementsByTag("head").get(0).getElementsByTag("Script") - .get(1); - String html = element.toString(); - int index = html.indexOf("var url = "); - int endIndex = html.lastIndexOf("'"); - html = html.substring(index, endIndex); - int index2 = html.indexOf("'"); - html = html.substring(index2 + 1); - int indexId = html.indexOf("id="); - String id = ""; - if (html.contains("a.m.taobao.com")) { - indexId = html.indexOf("com/i"); - html = html.substring(indexId); - html = html.substring(5, html.indexOf(".")); - id = html; - } else { - String reg = "[?|&]{1}[i]{1}[d]{1}[=]{1}\\d+[&]?"; - Pattern p = Pattern.compile(reg); - Matcher matcher = p.matcher(html); - if (matcher.find()) { - id = matcher.group(); - } - id = id.substring(id.indexOf("=") + 1, id.lastIndexOf("&")); - } - TaoBaoGoodsBrief alimama = isAlimama(id); - - if (alimama != null) { - return alimama; - } - return parsePhoneTmAndTb(id); - } catch (Exception e) { - LogHelper.error("鏃犳硶瑙f瀽鍒版窐瀹濆晢鍝両D:" + burl); - return null; - } - - } - - public static TaoBaoGoodsBrief parsePhoneTmAndTb(String auctionId) { - - TaoBaoGoodsBrief taoBaoGoodsBrief = null; - try { - - Connection connect = Jsoup.connect(String.format(TM_PHONE_URL, auctionId)); - Document document = connect.get(); - Elements elements = document.getElementsByTag("script"); - if (elements.size() >= 9) { - String json = elements.get(8).toString(); - json = json.substring(json.indexOf("{"), json.lastIndexOf("}") + 1); - JSONObject data = JSONObject.fromObject(json); - JSONObject model = data.optJSONObject("defaultModel"); - JSONObject itemPriceResultDO = model.optJSONObject("itemPriceResultDO"); - JSONObject priceInfo = itemPriceResultDO.optJSONObject("priceInfo"); - Set keySet = priceInfo.keySet(); - String key = (String) keySet.toArray()[0]; - JSONObject goods = priceInfo.optJSONObject(key); - String price = ""; - if (goods.optJSONArray("promotionList") != null) { - price = goods.optJSONArray("promotionList").getJSONObject(0).optString("price"); - } else { - price = goods.optString("price"); - } - List<String> imgs = new ArrayList<String>(); - Element showcase = document.getElementById("s-showcase"); - Elements Eleimgs = showcase.getElementsByTag("img"); - for (Element Eleimg : Eleimgs) { - String img = Eleimg.attr("src"); - if ("".equals(img)) { - img = Eleimg.attr("data-src"); - } - if (!img.contains("http")) { - img = "http:" + img; - } - imgs.add(img); - } - Element stitle = document.getElementById("s-title"); - String title = stitle.getElementsByTag("h1").get(0).toString().replaceAll("<h1>", "") - .replaceAll("</h1>", ""); - taoBaoGoodsBrief = new TaoBaoGoodsBrief(); - taoBaoGoodsBrief.setZkPrice(new BigDecimal(price)); - taoBaoGoodsBrief.setTitle(title); - taoBaoGoodsBrief.setImgList(imgs); - taoBaoGoodsBrief.setPictUrl(imgs.get(0)); - taoBaoGoodsBrief.setAuctionId(Long.parseLong(auctionId)); - taoBaoGoodsBrief.setUserType(1); - } else { - Connection connect2 = Jsoup.connect(String.format(TB_URL, auctionId)); - Document document2 = connect2.get(); - Elements elements2 = document2.getElementsByTag("script"); - String json = elements2.get(0).toString(); - json = json.substring(json.indexOf("item:"), json.indexOf("seller:")); - json = json.substring(json.indexOf("{"), json.lastIndexOf(",")); - json = json.substring(json.indexOf("auctionImages"), json.lastIndexOf("]") + 1); - json = json.substring(json.indexOf("[")); - JSONArray array = JSONArray.fromObject(json); - List<String> imgs = new ArrayList<String>(); - for (Object str : array) { - String imgStr = String.valueOf(str); - if (!imgStr.contains("http")) { - imgStr = "http:" + imgStr; - } - imgs.add(imgStr); - } - String turl = "https://detailskip.taobao.com/service/getData/1/p1/item/detail/sib.htm?itemId=" - + auctionId - + "&sellerId=0&modules=dynStock,qrcode,viewer,price,duty,xmpPromotion,delivery,upp,activity,fqg,zjys,couponActivity,soldQuantity,contract,tradeContract&callback=onSibRequestSuccess"; - Map<String, String> params = new HashMap<String, String>(); - params.put("Referer", "https://item.taobao.com/item.htm?id=" + auctionId); - String json2 = TaoBaoHttpUtil.get(turl, params); - json2 = json2.substring(json2.indexOf("{"), json2.lastIndexOf("}") + 1); - JSONObject data2 = JSONObject.fromObject(json2); - String price = data2.optJSONObject("data").optJSONObject("promotion").optJSONObject("promoData") - .optJSONArray("def").getJSONObject(0).optString("price"); - String title = document2.getElementsByTag("title").get(0).toString(); - title = title.replaceAll("-娣樺疂缃�", "").replaceAll("<title>", "").replaceAll("</title>", ""); - taoBaoGoodsBrief = new TaoBaoGoodsBrief(); - taoBaoGoodsBrief.setTitle(title); - taoBaoGoodsBrief.setPictUrl(imgs.get(0)); - taoBaoGoodsBrief.setImgList(imgs); - taoBaoGoodsBrief.setZkPrice(new BigDecimal(price)); - taoBaoGoodsBrief.setAuctionId(Long.parseLong(auctionId)); - taoBaoGoodsBrief.setUserType(0); - } - } catch (Exception e) { - e.printStackTrace(); - return null; - } - return taoBaoGoodsBrief; - } - - public static String getGoodsIdByPhoneShareUrl(String burl) { - try { - Connection connect = Jsoup.connect(burl); - Document document = connect.get(); - org.jsoup.nodes.Element element = document.getElementsByTag("head").get(0).getElementsByTag("Script") - .get(1); - String html = element.toString(); - int index = html.indexOf("var url = "); - int endIndex = html.lastIndexOf("'"); - html = html.substring(index, endIndex); - int index2 = html.indexOf("'"); - html = html.substring(index2 + 1); - int indexId = html.indexOf("id="); - String id = ""; - if (html.contains("a.m.taobao.com")) { - indexId = html.indexOf("com/i"); - html = html.substring(indexId); - html = html.substring(5, html.indexOf(".")); - id = html; - } else { - String reg = "[?|&]{1}[i]{1}[d]{1}[=]{1}\\d+[&]?"; - Pattern p = Pattern.compile(reg); - Matcher matcher = p.matcher(html); - if (matcher.find()) { - id = matcher.group(); - } - id = id.substring(id.indexOf("=") + 1, id.lastIndexOf("&")); - } - return id; - } catch (Exception e) { - LogHelper.error("鏃犳硶瑙f瀽鍒版窐瀹濆晢鍝両D:" + burl); - return null; - } - } - - /** - * 鑾峰彇鍟嗗搧鐨勭敤鎴峰垎鎴愭瘮渚� - * - * @param goodsBrief - * 鍟嗗搧璇︽儏 - * @param rate - * 鐢ㄦ埛鍐嶆鍒嗘垚姣斾緥锛�0-100锛� - * @return - */ - public static String getGoodsHongBaoInfo(TaoBaoGoodsBrief goodsBrief, BigDecimal rate) { - // if (goodsBrief != null && goodsBrief.getMaterialLibType() != null && - // goodsBrief.getMaterialLibType() == 0) - // return "楼0.00"; - // else - return "楼" + getGoodsHongBaoMoney(goodsBrief, rate).toString(); - } - - /** - * 鑾峰彇娣樺疂鍟嗗搧璇ヨ幏寰楀灏戜剑閲� - * - * @param goodsBrief - * @param rate - * @return - */ - public static BigDecimal getGoodsHongBaoMoney(TaoBaoGoodsBrief goodsBrief, BigDecimal rate) { - BigDecimal money = null; - if (StringUtil.isNullOrEmpty(goodsBrief.getCouponInfo()) - || goodsBrief.getCouponInfo().trim().equalsIgnoreCase("鏃�")) { - money = MoneyBigDecimalUtil.mul( - MoneyBigDecimalUtil.mul(MoneyBigDecimalUtil.mul(goodsBrief.getZkPrice(), goodsBrief.getTkRate()), - new BigDecimal("0.01")), - MoneyBigDecimalUtil.div(rate, new BigDecimal(100))); - } else// 鏈夊埜 - { - List<BigDecimal> list = TaoBaoCouponUtil.getCouponInfo(goodsBrief.getCouponInfo()); - BigDecimal startFee = list.get(0); - BigDecimal couponAccount = list.get(1); - if (startFee.compareTo(goodsBrief.getZkPrice()) <= 0 - && goodsBrief.getZkPrice().compareTo(couponAccount) > 0) { - BigDecimal finalPrice = goodsBrief.getZkPrice().subtract(couponAccount); - money = MoneyBigDecimalUtil.mul(MoneyBigDecimalUtil - .mul(MoneyBigDecimalUtil.mul(finalPrice, goodsBrief.getTkRate()), new BigDecimal("0.01")), - MoneyBigDecimalUtil.div(rate, new BigDecimal(100))); - - } else {// 涓嶈兘鐢ㄥ埜 - money = MoneyBigDecimalUtil.mul(MoneyBigDecimalUtil.mul( - MoneyBigDecimalUtil.mul(goodsBrief.getZkPrice(), goodsBrief.getTkRate()), - new BigDecimal("0.01")), MoneyBigDecimalUtil.div(rate, new BigDecimal(100))); - } - } - return BigDecimalUtil.getWithNoZera(money); - } - - // } - - // 鑾峰彇鍒哥殑绾㈠寘鏄剧ず - public static BigDecimal getCouponHongBaoInfo(TaoBaoCoupon taoBaoCoupon, BigDecimal rate) { - // 钀ラ攢璁″垝 - - // 璁$畻杩斿埄 - // 鏃犲埜 - - BigDecimal startFee = taoBaoCoupon.getCouponStartFee(); - BigDecimal couponAccount = taoBaoCoupon.getCouponAmount(); - if (startFee.compareTo(taoBaoCoupon.getZkPrice()) <= 0 - && taoBaoCoupon.getZkPrice().compareTo(couponAccount) > 0) { - BigDecimal finalPrice = taoBaoCoupon.getZkPrice().subtract(couponAccount); - return finalPrice.multiply(new BigDecimal(taoBaoCoupon.getTkRate())).divide(new BigDecimal(10000)) - .multiply(rate).setScale(2, BigDecimal.ROUND_DOWN); - } else {// 涓嶈兘鐢ㄥ埜 - return taoBaoCoupon.getZkPrice().multiply(new BigDecimal(taoBaoCoupon.getTkRate())) - .divide(new BigDecimal(10000)).multiply(rate).setScale(2, BigDecimal.ROUND_DOWN); - } - } - - /** - * 鑾峰彇鍒嗕韩璧氱殑閲戦 - * - * @param goodsBrief - * @param rate - * @return - */ - - public static BigDecimal getShareGoodsHongBaoInfo(TaoBaoGoodsBrief goodsBrief, BigDecimal rate) { - return getGoodsHongBaoMoney(goodsBrief, rate); - } - - /** - * 璁$畻鍟嗗搧鍒稿悗浠凤紝娌℃湁鍒稿垯杩斿洖鍘熶环 - * - * @param goodsBrief - * @return - */ - public static BigDecimal getAfterUseCouplePrice(TaoBaoGoodsBrief goodsBrief) { - - if (StringUtil.isNullOrEmpty(goodsBrief.getCouponInfo()) || "鏃�".equals(goodsBrief.getCouponInfo())) { - return goodsBrief.getZkPrice(); - } else { - List<BigDecimal> list = TaoBaoCouponUtil.getCouponInfo(goodsBrief.getCouponInfo()); - BigDecimal startFee = list.get(0); - BigDecimal couponAccount = list.get(1); - if (startFee.compareTo(goodsBrief.getZkPrice()) <= 0 - && goodsBrief.getZkPrice().compareTo(couponAccount) > 0) { - BigDecimal finalPrice = goodsBrief.getZkPrice().subtract(couponAccount); - return finalPrice; - } else {// 涓嶈兘鐢ㄥ埜 - return goodsBrief.getZkPrice(); - } - } - } - - /** - * 鑾峰彇鍥炬枃璇︽儏 - * - * @param auctionId - */ - public static List<String> getGoodsTextAndImageDetails(Long id) { - if (id == null) { - return null; - } - long startTime = System.currentTimeMillis(); - - String url = null; - try { - url = String.format("http://hws.m.taobao.com/cache/mtop.wdetail.getItemDescx/4.1/?&data=%s&type=jsonp", - URLEncoder.encode("{\"item_num_id\":\"" + id + "\"}", "UTF-8")); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - List<String> list = new ArrayList<>(); - String html = org.yeshi.utils.HttpUtil.get(url); - String json = html.substring(9, html.length() - 1); - - try { - JSONObject obj = JSONObject.fromObject(json); - JSONArray array = obj.getJSONObject("data").optJSONArray("images"); - for (int i = 0; i < array.size(); i++) { - list.add(array.optString(i)); - } - LogHelper.test("鑾峰彇鍟嗗搧鍥炬枃璇︽儏鑰楁椂:" + (System.currentTimeMillis() - startTime)); - } catch (Exception e) { - - } - return list; - } - - public static String getSaleCount(int count) { - if (count >= 10000) { - double sales = count; - String salesCountMidea = String.format("%.1f", sales / 10000); - return salesCountMidea + "涓�"; - } else - return count + ""; - } - - public static List<TaoBaoProvince> getTaoBaoProvinceList() { - if (taoBaoProvinceList == null) { - taoBaoProvinceList = new ArrayList<>(); - // 瑙f瀽 - try { - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - DocumentBuilder builder = factory.newDocumentBuilder(); - org.w3c.dom.Document doc = builder - .parse(TaoBaoUtil.class.getClassLoader().getResourceAsStream("taobao_address.xml")); - NodeList nodeList = doc.getElementsByTagName("province"); - nodeList = nodeList.item(0).getChildNodes(); - for (int i = 0; i < nodeList.getLength(); i++) { - TaoBaoProvince province = new TaoBaoProvince(); - org.w3c.dom.Node node = nodeList.item(i); - if (node.getNodeName().equalsIgnoreCase("topName")) { - NamedNodeMap map = node.getAttributes(); - for (int n = 0; n < map.getLength(); n++) { - if (map.item(n).getNodeName().equalsIgnoreCase("id")) { - province.setId(map.item(n).getNodeValue()); - } else if (map.item(n).getNodeName().equalsIgnoreCase("name")) { - province.setName(map.item(n).getNodeValue()); - } - } - taoBaoProvinceList.add(province); - } - } - - } catch (Exception e) { - - } - } - return taoBaoProvinceList; - } - - public static List<ImageInfo> getTBDetailImageWithSize(Long auctionId) { - - List<ImageInfo> imgList = new ArrayList<>(); - - long startTime = System.currentTimeMillis(); - JSONObject data = new JSONObject(); - data.put("id", auctionId + ""); - String url = ""; - try { - url = String.format( - "https://h5api.m.taobao.com/h5/mtop.taobao.detail.getdesc/6.0/?data=%s&callback=GoodsLogic.showTuwen&_=%s", - URLEncoder.encode(data.toString(), "UTF-8"), System.currentTimeMillis() + ""); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - String result = HttpUtil.get(url); - result = result.replace("GoodsLogic.showTuwen(", "").replace(")", ""); - data = JSONObject.fromObject(result); - String pcDescContent = data.optJSONObject("data").optString("pcDescContent"); - System.out.println(pcDescContent); - if (!StringUtil.isNullOrEmpty(pcDescContent)) { - try { - Document doc = Jsoup.parse(pcDescContent); - Elements eles = doc.getElementsByTag("img"); - for (int i = 0; i < eles.size(); i++) { - String imgSrc = eles.get(i).attr("src"); - if (imgSrc.endsWith(".jpg")) { - if (!imgSrc.startsWith("http")) - imgSrc = "https:" + imgSrc; - imgList.add(new ImageInfo(imgSrc, 0, 0)); - } - } - } catch (Exception e) { - } - } - System.out.println("璇锋眰璇︽儏鑰楁椂:" + (System.currentTimeMillis() - startTime)); - return imgList; - } - - /** - * - * @param auctionId - * @return - */ - - public static List<ImageInfo> getTBDetailImageWithSizev2(Long auctionId, ProxyIP ip) { - List<ImageInfo> imgList = new ArrayList<>(); - try { - Map<String, String> headers = new HashMap<>(); - headers.put("User-Agent", - "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1"); - headers.put("Referer", "https://detail.tmall.com/item.htm?id=" + auctionId); - String url = String.format("https://hws.m.taobao.com/cache/desc/5.0?id=" + auctionId); - String result = HttpUtil.get(url, headers, ip); - if (!StringUtil.isNullOrEmpty(result)) { - JSONObject data = JSONObject.fromObject(result); - - JSONArray array = data.optJSONObject("wdescContent").optJSONArray("pages"); - if (array != null) { - String html = ""; - for (int i = 0; i < array.size(); i++) { - String itemStr = array.optString(i).replace("<img", "<a").replace("</img>", "<a>"); - html += itemStr; - } - Document doc = Jsoup.parse(html); - Elements items = doc.getElementsByTag("a"); - for (int i = 0; i < items.size(); i++) { - ImageInfo img = new ImageInfo(); - Element item = items.get(i); - if (StringUtil.isNullOrEmpty(item.ownText())) - continue; - if (!StringUtil.isNullOrEmpty(item.attr("size"))) { - img.setWidth(Integer.parseInt(item.attr("size").split("x")[0])); - img.setHeight(Integer.parseInt(item.attr("size").split("x")[1])); - } - if (item.ownText().startsWith("http")) - img.setPicture(item.ownText().trim()); - else - img.setPicture("http:" + item.ownText().trim()); - if (img != null && img.getPicture() != null && img.getPicture().endsWith(".jpg")) - imgList.add(img); - } - - } - } - - } catch (Exception e) { - e.printStackTrace(); - try { - LogHelper.errorDetailInfo(e); - } catch (Exception e1) { - e1.printStackTrace(); - } - } - return imgList; - } - - /** - * 闃块噷鐧惧窛杞摼鎺ュ彛锛堟殏鏃舵棤娉曚娇鐢級 - * - * @param auctionId - * @param appKey - * @param adzoneId - * @return - */ - public static String getBaiChuanConvertLink(Long auctionId, String appKey, String adzoneId) { - String url = "http://acs4baichuan.m.taobao.com/gw-open/mtop.taobao.tbk.sdk.item.convert/1.0/"; - JSONObject params = new JSONObject(); - params.put("mcid", "tunion4android@862977040115210"); - params.put("appVersion", "1.3.4"); - params.put("os", "android8.0.0"); - params.put("taokeAppkey", appKey); - params.put("jtype", "tb"); - params.put("aliapp", "tb"); - params.put("adzoneid", adzoneId); - params.put("url", "https://h5.m.taobao.com/awp/core/detail.htm?id=" + auctionId); - params.put("deviceModel", "LND-AL30"); - params.put("sdkVersion", "0.3.2"); - params.put("packageName", "com.yeshi.ec.rebate"); - params.put("cid", "tunion4android@862977040115210_1536222395791"); - - try { - url += "?data=" + URLEncoder.encode(params.toString(), "UTF-8"); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - - String result = HttpUtil.get(url); - System.out.println(result); - return null; - } - - /** - * 甯歌鍟嗗搧杞负娣樺疂鍟嗗搧瀵硅薄 - * - * @param commonGoods - * @return - */ - public static TaoBaoGoodsBrief convert(CommonGoods commonGoods) { - TaoBaoGoodsBrief taoBaoGoods = new TaoBaoGoodsBrief(); - taoBaoGoods.setAuctionId(commonGoods.getGoodsId()); - taoBaoGoods.setBiz30day(commonGoods.getSales()); - taoBaoGoods.setCouponAmount(commonGoods.getCouponAmount()); - taoBaoGoods.setCouponInfo(commonGoods.getCouponInfo()); - taoBaoGoods.setCouponLeftCount(commonGoods.getCouponLeftCount()); - taoBaoGoods.setCouponStartFee(commonGoods.getCouponStartPrice()); - taoBaoGoods.setCouponTotalCount(commonGoods.getCouponTotalCount()); - taoBaoGoods.setPictUrl(commonGoods.getPicture()); - taoBaoGoods.setPictUrlWhite(commonGoods.getPictureWhite()); - taoBaoGoods.setSellerId(commonGoods.getSellerId()); - taoBaoGoods.setShopTitle(commonGoods.getSellerName()); - taoBaoGoods.setTitle(commonGoods.getTitle()); - taoBaoGoods.setUserType(commonGoods.getShopType() - 1); - taoBaoGoods.setZkPrice(commonGoods.getPrice()); - taoBaoGoods.setTkRate(commonGoods.getRate()); - taoBaoGoods.setTkCommFee(new BigDecimal("0")); - taoBaoGoods.setState(commonGoods.getState()); - return taoBaoGoods; - } - - public static TaoBaoGoodsBrief convert(DaTaoKeDetail detail) { - TaoBaoGoodsBrief taoBaoGoods = new TaoBaoGoodsBrief(); - taoBaoGoods.setAuctionId(detail.getGoodsId()); - taoBaoGoods.setBiz30day(detail.getSalesNum()); - taoBaoGoods.setCouponAmount(detail.getQuanPrice()); - taoBaoGoods.setCouponInfo(String.format("婊�%s鍏冨噺%s鍏�", detail.getQuanCondition(), - MoneyBigDecimalUtil.getWithNoZera(detail.getQuanPrice()))); - taoBaoGoods.setCouponLeftCount(detail.getQuanSurplus()); - taoBaoGoods.setCouponStartFee(new BigDecimal(detail.getQuanCondition())); - if (detail.getQuanReceive() != null) - taoBaoGoods.setCouponTotalCount(detail.getQuanSurplus() + detail.getQuanReceive()); - taoBaoGoods.setPictUrl(detail.getPic()); - taoBaoGoods.setPictUrlWhite(detail.getPic()); - taoBaoGoods.setSellerId(detail.getSellerId()); - taoBaoGoods.setShopTitle(""); - taoBaoGoods.setTitle(detail.getdTitle()); - taoBaoGoods.setUserType(detail.getIsTmall()); - taoBaoGoods.setZkPrice(detail.getOrgPrice()); - taoBaoGoods.setTkRate(detail.getCommission()); - taoBaoGoods.setTkCommFee(new BigDecimal("0")); - taoBaoGoods.setState(0); - return taoBaoGoods; - } - - public static TaoBaoGoodsBrief convert(DaTaoKeDetailV2 detail) { - TaoBaoGoodsBrief taoBaoGoods = new TaoBaoGoodsBrief(); - taoBaoGoods.setAuctionId(detail.getGoodsId()); - taoBaoGoods.setBiz30day(detail.getMonthSales()); - taoBaoGoods.setCouponAmount(detail.getCouponPrice()); - taoBaoGoods.setCouponInfo(String.format("婊�%s鍏冨噺%s鍏�", detail.getCouponConditions(), - MoneyBigDecimalUtil.getWithNoZera(detail.getCouponPrice()))); - if (detail.getCouponTotalNum() != null && detail.getCouponReceiveNum() != null) - taoBaoGoods.setCouponLeftCount(detail.getCouponTotalNum() - detail.getCouponReceiveNum()); - else - taoBaoGoods.setCouponLeftCount(0); - taoBaoGoods.setCouponStartFee(detail.getOriginalPrice()); - taoBaoGoods.setCouponTotalCount(detail.getCouponTotalNum()); - taoBaoGoods.setPictUrl(detail.getMainPic()); - taoBaoGoods.setPictUrlWhite(detail.getMainPic()); - if (taoBaoGoods.getPictUrl() != null && !taoBaoGoods.getPictUrl().startsWith("http")) - taoBaoGoods.setPictUrl("https:" + taoBaoGoods.getPictUrl()); - - if (taoBaoGoods.getPictUrlWhite() != null && !taoBaoGoods.getPictUrlWhite().startsWith("http")) - taoBaoGoods.setPictUrlWhite("https:" + taoBaoGoods.getPictUrlWhite()); - - taoBaoGoods.setSellerId(detail.getSellerId()); - taoBaoGoods.setShopTitle(detail.getShopName()); - taoBaoGoods.setTitle(detail.getDtitle()); - taoBaoGoods.setUserType(detail.getShopType()); - taoBaoGoods.setZkPrice(detail.getOriginalPrice()); - taoBaoGoods.setTkRate(detail.getCommissionRate()); - taoBaoGoods.setTkCommFee(new BigDecimal("0")); - taoBaoGoods.setState(0); - return taoBaoGoods; - } - - /** - * 鑾峰彇娣樺疂鑱旂洘鐨勬巿鏉冮摼鎺� - * - * @param appKey - * -搴旂敤Key - * @param callBackUrl - * -鍥炶皟閾炬帴 - * @param uid-鐢ㄦ埛ID - * @return - */ - public static String getTaoBaoUnionAuthUrl(String appKey, String callBackUrl, Long uid, String source) { - if (uid == null) - return null; - long timestamp = System.currentTimeMillis(); - JSONObject json = new JSONObject(); - json.put("u", uid); - json.put("t", timestamp); - json.put("s", source); - String url = null; - try { - url = String.format( - "https://oauth.taobao.com/authorize?response_type=code&client_id=%s&redirect_uri=%s&state=%s&view=wap", - appKey, callBackUrl, - URLEncoder.encode(AESUtil.encrypt(json.toString(), Constant.UIDAESKEY), "UTF-8")); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - return url; - } - - public static TaoBaoGoodsBrief getSimpleGoodsBrief(Long actionId) { - JSONObject data = new JSONObject(); - data.put("itemNumId", actionId + ""); - - String url = ""; - try { - url = String.format("https://acs.m.taobao.com/h5/mtop.taobao.detail.getdetail/6.0/?data=%s", - URLEncoder.encode(data.toString(), "UTF-8")); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - HttpClient client = new HttpClient(); - GetMethod gm = new GetMethod(url); - String result = null; - try { - gm.setRequestHeader("user-agent", - "Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Mobile Safari/537.36"); - gm.setRequestHeader("cache-control", "max-age=0"); - gm.setRequestHeader("sec-fetch-mode", "navigate"); - gm.setRequestHeader("sec-fetch-site", "none"); - gm.setRequestHeader("sec-fetch-user", "?1"); - gm.setRequestHeader("upgrade-insecure-requests", "1"); - gm.setRequestHeader("cookie", - "t=2ef08e4a12314c12dcd98d2ec480dd69; thw=cn; hng=CN%7Czh-CN%7CCNY%7C156; x=e%3D1%26p%3D*%26s%3D0%26c%3D0%26f%3D0%26g%3D0%26t%3D0%26__ll%3D-1%26_ato%3D0; ali_ab=113.251.19.3.1554796147005.0; UM_distinctid=16b9d8257dd388-0a96f36f947888-e343166-1fa400-16b9d8257df114; WAPFDFDTGFG=%2B4cMKKP%2B8PI%2BuhLvELc2mB6zAz5Z54E%3D; _w_app_lg=0; enc=00wU0%2BKYu9Yf1tHSawG%2Bc4aMZojqg8eB6baoMr9Z8Ir4qJ6hRhMhdWQxbM71vvxv6OCsxN50T0xA1gJGIdFm7w%3D%3D; cna=Q9eYFEM1rm8CAXH7EKUDSamu; miid=769739881160810491; lgc=%5Cu6930%5Cu89C6%5Cu79D1%5Cu6280; tracknick=%5Cu6930%5Cu89C6%5Cu79D1%5Cu6280; tg=0; mt=ci=7_1; cookie2=13ad477d84d5e6659aa7855de3617163; _tb_token_=ee895586817b0; dnk=%5Cu6930%5Cu89C6%5Cu79D1%5Cu6280; v=0; _m_h5_tk=286f649add5207dfe82e770832daf1cc_1573547306314; _m_h5_tk_enc=137c39dafc279e40edc796770d3eda8f; tk_trace=oTRxOWSBNwn9dPyorMJE%2FoPdY8zZPEr%2FCrvCMS%2BG3sTRRWrQ%2BVVTl09ME1KrXdbd3QNiuPM1YZeXJrHpvLuG%2FSvA2umbWq5jqrcw%2FDpk1Lj6yQFVptx6jw71DzuBbw%2BuZLEozdKGb%2BZr85uzSnUSWfVAqZprzoB%2Bfde2IHnHJp651xghkKpmsSBgY5muhOI7FvNfc8zH1BIvygVQSEIa1bCCgy2VJl%2FkyuTXaGHb%2FAKxL566%2FLult1lRlo8RZx9s76BhXe7PTot5MPGrayPkRiqWfVdg3C7gFWRjrjjKriN47mbQazOoIM7knBX%2B3mnnmwWbCQjKiuA6I8W9ng%3D%3D; _cc_=VFC%2FuZ9ajQ%3D%3D; unb=3327215652; uc1=lng=zh_CN&tag=8&cookie16=W5iHLLyFPlMGbLDwA%2BdvAGZqLg%3D%3D&cookie15=VT5L2FSpMGV7TQ%3D%3D&cookie14=UoTbnrCeRJd%2F2g%3D%3D&pas=0&existShop=false&cookie21=VFC%2FuZ9aj38X; uc3=vt3=F8dByuWjrX8oBIwXl2Q%3D&nk2=sbdfkkkB37A%3D&id2=UNN%2F6whEupDGWQ%3D%3D&lg2=WqG3DMC9VAQiUQ%3D%3D; csg=30373d82; cookie17=UNN%2F6whEupDGWQ%3D%3D; skt=6a0617b2d0843ef4; existShop=MTU3MzgxNDAxNw%3D%3D; uc4=id4=0%40UgQ3BPth2rlXv3PxjwesD5MgnRD3&nk4=0%40s9JQzQv3gdCkG6YVO6ulkEbNug%3D%3D; _l_g_=Ug%3D%3D; sg=%E6%8A%8021; _nk_=%5Cu6930%5Cu89C6%5Cu79D1%5Cu6280; cookie1=AnRaCZfOZrWoY8u%2BoXxB8y%2FnnwnZszWqI6Bbr5BrFtM%3D; isg=BOnpxPqJkNY3p6zvIy1AdcEC-JVDtt3of1m6aoveZVAPUglk0wbtuNdAFL5BUXUg; l=dBgUvWMcqlf1dR9EBOCanurza77OSIRYYuPzaNbMi_5IT6T6q1QOkBPUkF96VfWfTVLB47_ypV99-etkZ2ejm8IpXUJsAMc."); - client.executeMethod(gm); - result = gm.getResponseBodyAsString(); - } catch (HttpException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } - - JSONObject resultOBJ = JSONObject.fromObject(result); - if (resultOBJ.optJSONObject("data") != null) { - data = resultOBJ.optJSONObject("data"); - JSONObject item = data.optJSONObject("item"); - JSONObject seller = data.optJSONObject("seller"); - TaoBaoGoodsBrief goods = new TaoBaoGoodsBrief(); - goods.setTitle(item.optString("title")); - goods.setAuctionId(item.optLong("itemId")); - goods.setTitle(item.optString("title")); - if (item.optJSONArray("images") != null && item.optJSONArray("images").size() > 0) { - String picture = item.optJSONArray("images").optString(0); - goods.setPictUrl(picture.startsWith("http") ? picture : "https:" + picture); - } - goods.setSellerId(seller.optLong("shopId")); - String shopType = seller.optString("shopType"); - if ("B".equalsIgnoreCase(shopType)) { - goods.setUserType(1); - } else - goods.setUserType(0); - - goods.setShopTitle(seller.optString("shopName")); - return goods; - } - return null; - } - - /** - * 鏍规嵁鍟嗗搧ID鑾峰彇搴楅摵璇︽儏 - * - * @param auctionId - * @return - */ - public static TaoBaoShop getTaoBaoShopDetailByAuctionId(Long auctionId) { - JSONObject data = new JSONObject(); - data.put("itemNumId", auctionId + ""); - - String url = ""; - try { - url = String.format("https://acs.m.taobao.com/h5/mtop.taobao.detail.getdetail/6.0/?data=%s", - URLEncoder.encode(data.toString(), "UTF-8")); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - String result = HttpUtil.get(url); - - TaoBaoShop shop = new TaoBaoShop(); - - try { - JSONObject resultJson = JSONObject.fromObject(result); - JSONObject dataJson = resultJson.optJSONObject("data"); - JSONObject sellerJson = dataJson.optJSONObject("seller"); - - shop.setGoodRatePercentage(new BigDecimal(sellerJson.optString("goodRatePercentage").replace("%", ""))); - - LogHelper.test("鍗栧淇℃伅:" + result); - shop.setId(sellerJson.optLong("userId")); - JSONArray array = sellerJson.optJSONArray("evaluates"); - for (int i = 0; i < array.size(); i++) { - JSONObject item = array.optJSONObject(i); - if ("瀹濊礉鎻忚堪".equalsIgnoreCase(item.optString("title").trim())) { - shop.setScoreGoods(new BigDecimal(item.optString("score").trim())); - shop.setScoreGoodsD(new BigDecimal(item.optString("level").trim())); - } else if ("鍗栧鏈嶅姟".equalsIgnoreCase(item.optString("title").trim())) { - shop.setScoreSeller(new BigDecimal(item.optString("score").trim())); - shop.setScoreSellerD(new BigDecimal(item.optString("level").trim())); - } else if ("鐗╂祦鏈嶅姟".equalsIgnoreCase(item.optString("title").trim())) { - shop.setScoreLogistics(new BigDecimal(item.optString("score").trim())); - shop.setScoreLogisticsD(new BigDecimal(item.optString("level").trim())); - } - } - - shop.setSellerNick(sellerJson.optString("sellerNick")); - shop.setShopIcon("https:" + sellerJson.optString("shopIcon")); - shop.setShopId(sellerJson.optLong("shopId")); - shop.setShopName(sellerJson.optString("shopName")); - if ("B".equalsIgnoreCase(sellerJson.optString("sellerType"))) - shop.setUserType(1); - else - shop.setUserType(0); - - shop.setShopLink(TaoBaoUtil.getShopLink(shop.getId())); - } catch (Exception e) { - // if (1 > 0) - // return null; - try { - TaoBaoGoodsBrief goods = TaoKeApiUtil.getSimpleGoodsInfo(auctionId); - shop.setId(goods.getSellerId()); - shop.setShopName(goods.getShopTitle()); - shop.setUserType(goods.getUserType()); - } catch (Exception e1) { - shop.setId(1L); - shop.setShopName(""); - shop.setUserType(0); - } - - shop.setGoodRatePercentage(new BigDecimal(100)); - shop.setScoreGoods(new BigDecimal("4.9")); - shop.setScoreGoodsD(new BigDecimal("0")); - shop.setScoreSeller(new BigDecimal("4.9")); - shop.setScoreSellerD(new BigDecimal("0")); - shop.setScoreLogistics(new BigDecimal("4.9")); - shop.setScoreLogisticsD(new BigDecimal("0")); - shop.setSellerNick(""); - shop.setShopIcon("https:"); - shop.setShopLink(TaoBaoUtil.getShopLink(shop.getId())); - } - - return shop; - } - - /** - * 鏍规嵁鍗栧id鑾峰彇搴楅摵閾炬帴 - * - * @param sellerId - * @return - */ - public static String getShopLink(Long sellerId) { - return "http://store.taobao.com/shop/view_shop.htm?user_number_id=" + sellerId; - } - - /** - * 鏄惁鍙互鍔犲叆娣樼ぜ閲戠殑棰勯�夊晢鍝佸簱 - * - * @param v2 - * @return - */ - public static boolean canAddToTLJBuyGoods(TaoBaoGoodsBrief goods) { - BigDecimal tljMoney = getShareGoodsHongBaoInfo(goods, TaoBaoConstant.OWN_BUY_WITHOUT_FANLI_RATE); - // 涓嶈兘灏忎簬1鍧� - if (tljMoney.compareTo(new BigDecimal(1)) < 0 || tljMoney.compareTo(new BigDecimal(10)) > 0) - return false; - - // 鍒稿悗浠蜂笉鑳藉ぇ浜�150 - if (getAfterUseCouplePrice(goods).compareTo(new BigDecimal(150)) > 0) - return false; - - return true; - } - - /** - * 鏌ヨ澶╃尗鍟嗗搧鍥剧墖銆佹爣棰� - * - * @param auctionId - * @return - */ - public static TaoBaoGoodsBrief getTmallGoodsInfo(String auctionId) { - TaoBaoGoodsBrief taoBaoGoodsBrief = null; - try { - Connection connect = Jsoup.connect(String.format(TM_PHONE_URL, auctionId)); - Document document = connect.get(); - Elements elements = document.getElementsByTag("script"); - if (elements.size() >= 0) { - for (int i = 0; i < elements.size(); i++) { - String content = elements.get(i).toString(); - if (content.contains("var _DATA_Mdskip")) { - content = content.replace("<script>", ""); - content = content.replace("</script>", ""); - - if (content.contains("videoDetail")) { - content += ";function getData(){ var json={title:_DATA_Mdskip.item.title,pictUrl:_DATA_Mdskip.item.videoDetail.videoThumbnailURL}; return JSON.stringify(json);}"; - } else { - content += ";function getData(){ var json={title:_DATA_Mdskip.item.title,pictUrl:_DATA_Mdskip.item.videos[0].videoThumbnailURL}; return JSON.stringify(json);}"; - } - - ScriptEngineManager manager = new ScriptEngineManager(); - ScriptEngine engine = manager.getEngineByName("javascript"); - engine.eval(content); - - if (engine instanceof Invocable) { - Invocable in = (Invocable) engine; - JSONObject json = JSONObject.fromObject(in.invokeFunction("getData")); - Object title = json.get("title"); - Object pictUrl = json.get("pictUrl"); - taoBaoGoodsBrief = new TaoBaoGoodsBrief(); - taoBaoGoodsBrief.setTitle(title.toString()); - taoBaoGoodsBrief.setPictUrl(pictUrl.toString()); - } - - break; - } - } - } - } catch (Exception e) { - e.printStackTrace(); - } - return taoBaoGoodsBrief; - } - - /** - * 鎶栭煶杩斿埄local 鑾峰彇鐪熷疄娣樺疂閾炬帴 - * - * @param url - * https://s.click.taobao.com/t?e=m%3D2%26s% - * 3DT9DFpHQCT7Rw4vFB6t2Z2ueEDrYVVa64XoO8tOebS+dRAdhuF14FMR8 - * @return - */ - public static String getRealUrl(String url) { - if (StringUtil.isNullOrEmpty(url)) - return null; - - try { - HttpClient client = new HttpClient(new MultiThreadedHttpConnectionManager()); - client.getHttpConnectionManager().getParams().setConnectionTimeout(10000); - client.getParams().setParameter(HttpMethodParams.USER_AGENT, - "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)"); // 璁╂湇鍔″櫒璁や负鏄疘E - GetMethod get = new GetMethod(url); - get.setFollowRedirects(false); // 绂佹鑷姩閲嶅畾鍚� - int iGetResultCode = client.executeMethod(get); - String location = get.getResponseHeader("location").getValue(); // 鎵撳嵃鍦板潃 - GetMethod get2 = new GetMethod(URLDecoder.decode(location.split("tu=")[1])); - get2.addRequestHeader("Referer", location); - get2.setFollowRedirects(false); // 绂佹鑷姩閲嶅畾鍚� - int iGetResultCode2 = client.executeMethod(get2); - return get2.getResponseHeader("location").getValue(); // 鐪熷疄鍦板潃 - } catch (Exception ex) { - ex.printStackTrace(); - } - return null; - } - - /** - * 娣樺彛浠よ繃婊� - * - * @param token - * @return - */ - public static String filterTaoToken(String token) { - if (StringUtil.isNullOrEmpty(token)) - return token; - if (token.contains("锟�") || token.contains("鈧�")) { - String newToken = ""; - for (int i = 0; i < token.length(); i++) { - if (token.charAt(i) == '锟�' || token.charAt(i) == '鈧�') { - if (!newToken.contains("(")) - newToken += "("; - else - newToken += ")"; - } else - newToken += token.charAt(i) + ""; - } - return newToken; - } - return token; - } - - /** - * 鎻愬彇鑷湁鏍煎紡鐨勬窐鍙d护 - * - * @param str - * @return - */ - public static String parseSystemTaoToken(String str) { - String pattern = "(\\({1}[A-Za-z0-9]+\\){1})"; - Pattern r = Pattern.compile(pattern); - Matcher m = r.matcher(str); - while (m.find()) { - String group = m.group(0); - if (!StringUtil.isNullOrEmpty(group)) - return group; - } - return null; - } - - public static boolean isSpecialGoods(Integer materialLibType) { - if (materialLibType != null && materialLibType == 1) - return true; - else - return false; - } - -} +package com.yeshi.fanli.util.taobao; + +import java.io.UnsupportedEncodingException; +import java.lang.reflect.Type; +import java.math.BigDecimal; +import java.net.URLDecoder; +import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +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.PostConstruct; +import javax.annotation.Resource; +import javax.script.Invocable; +import javax.script.ScriptEngine; +import javax.script.ScriptEngineManager; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; + +import com.yeshi.fanli.entity.SystemEnum; +import com.yeshi.fanli.util.*; +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager; +import org.apache.commons.httpclient.methods.GetMethod; +import org.apache.commons.httpclient.params.HttpMethodParams; +import org.jsoup.Connection; +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; +import org.jsoup.nodes.Element; +import org.jsoup.select.Elements; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.stereotype.Component; +import org.w3c.dom.NamedNodeMap; +import org.w3c.dom.NodeList; +import org.yeshi.utils.BigDecimalUtil; +import org.yeshi.utils.HttpUtil; +import org.yeshi.utils.NumberUtil; +import org.yeshi.utils.entity.ProxyIP; +import org.yeshi.utils.taobao.TbImgUtil; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.reflect.TypeToken; +import com.yeshi.fanli.entity.bus.user.vip.UserLevelEnum; +import com.yeshi.fanli.entity.common.ImageInfo; +import com.yeshi.fanli.entity.goods.CommonGoods; +import com.yeshi.fanli.entity.taobao.SearchFilter; +import com.yeshi.fanli.entity.taobao.TaoBaoCoupon; +import com.yeshi.goods.facade.entity.taobao.TaoBaoGoodsBrief; +import com.yeshi.goods.facade.entity.taobao.TaoBaoGoodsBriefExtra; +import com.yeshi.goods.facade.entity.taobao.TaoBaoHead; +import com.yeshi.goods.facade.entity.taobao.TaoBaoHongBaoInfo; +import com.yeshi.fanli.entity.taobao.TaoBaoLink; +import com.yeshi.fanli.entity.taobao.TaoBaoProvince; +import com.yeshi.goods.facade.entity.taobao.TaoBaoQuanInfo; +import com.yeshi.fanli.entity.taobao.TaoBaoSearchNav; +import com.yeshi.fanli.entity.taobao.TaoBaoSearchResult; +import com.yeshi.common.entity.taobao.TaoBaoShop; +import com.yeshi.fanli.entity.taobao.TaoBaoUnionConfig; +import com.yeshi.goods.facade.entity.taobao.dataoke.DaTaoKeDetailV2; +import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException; +import com.yeshi.fanli.log.LogHelper; +import com.yeshi.fanli.service.inter.goods.TaoBaoLinkService; +import com.yeshi.fanli.service.inter.order.config.HongBaoManageService; +import com.yeshi.common.entity.PageEntity; +import org.yeshi.utils.MoneyBigDecimalUtil; +import org.yeshi.utils.TimeUtil; +import com.yeshi.common.vo.ClientTextStyleVO; + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; + +@Component +public class TaoBaoUtil { + + @Autowired + private HongBaoManageService manageService; + + @Resource + private TaoBaoLinkService taoBaoLinkService; + + private static TaoBaoUtil taoBaoUtil; + + @PostConstruct + public void init() { + taoBaoUtil = this; + taoBaoUtil.manageService = this.manageService; + taoBaoUtil.taoBaoLinkService = this.taoBaoLinkService; + } + + public final static int SORT_PRICE_HIGH_TO_LOW = 3;// 浠锋牸浠庨珮鍒颁綆 + public final static int SORT_PRICE_LOW_TO_HIGH = 4;// 浠锋牸浠庝綆鍒伴珮 + + public static final int SORT_TKRATE_LOW_TO_HIGH = 1;// 娣樺浣i噾姣旂巼浣庡埌楂� + public static final int SORT_TKRATE_HIGH_TO_LOW = 2;// 娣樺浣i噾姣旂巼楂樺埌浣� + + public static final int SORT_TOTAL_COMMI_LOW_TO_HIGH = 5;// 鎬绘敮鍑轰剑閲戜綆鍒伴珮 + public static final int SORT_TOTAL_COMMI_HIGH_TO_LOW = 6;// 鎬绘敮鍑轰剑閲戦珮鍒颁綆 + + public static final int SORT_TOTAL_SALES_LOW_TO_HIGH = 10;// 绱鎺ㄥ箍閲忎綆鍒伴珮 + public static final int SORT_TOTAL_SALES_HIGH_TO_LOW = 11;// 绱鎺ㄥ箍閲忛珮鍒颁綆 + + public static final int SORT_SALE_COMMISSION = 7;// 鏈堟敮鍑轰剑閲戜粠楂樺埌浣� + + public final static int SORT_SALE_LOW_TO_HIGH = 8;// 閿�閲忎粠浣庡埌楂� + + public final static int SORT_SALE_HIGH_TO_LOW = 9;// 閿�閲忎粠楂樺埌浣� + public final static int SORT_DEFAULT = 0;// 閿�閲忎粠楂樺埌浣� + + public final static int SORT_FILTER_FROM_ALL = 0;// 娣樺疂澶╃尗 + public final static int SORT_FILTER_FROM_TMALL = 1;// 澶╃尗 + + private final static int PAGESIZE = 20; + + public final static String SEARCH_URL = "http://pub.alimama.com/items/search.json"; + private static final String NZJH_URL = "http://pub.alimama.com/items/channel/nzjh.json"; + private static final String MUYING_URL = "http://pub.alimama.com/items/channel/muying.json"; + private static final String QQHD_URL = "http://pub.alimama.com/items/channel/qqhd.json"; + private static final String IFS_URL = "http://pub.alimama.com/items/channel/ifs.json"; + private static final String QBB_URL = "http://pub.alimama.com/items/channel/qbb.json"; + private static final String HCH_URL = "http://pub.alimama.com/items/channel/hch.json"; + private static final String CDJ_URL = "http://pub.alimama.com/items/channel/cdj.json"; + private static final String JYJ_URL = "http://pub.alimama.com/items/channel/jyj.json"; + private static final String KDC_URL = "http://pub.alimama.com/items/channel/kdc.json"; + private static final String DIY_URL = "http://pub.alimama.com/items/channel/diy.json"; + private static final String K9_URL = "http://pub.alimama.com/items/channel/9k9.json"; + private static final String K20_URL = "http://pub.alimama.com/items/channel/20k.json"; + private static final String TEHUI_URL = "http://pub.alimama.com/items/channel/tehui.json"; + + private static final String TB_ITEM_URL = "http://gw.api.taobao.com/router/rest"; + + public static final String TB_URL = "http://item.taobao.com/item.htm?id=%s"; + public static final String TM_PHONE_URL = "https://detail.m.tmall.com/item.htm?id=%s"; + public static final String TB_H5_URL = "http://h5.m.taobao.com/awp/core/detail.htm?id=%s"; + + private static final Map<Integer, String> channelMap = new HashMap<Integer, String>(); + private static final Map<Integer, String> urlMap = new HashMap<Integer, String>(); + + private static List<TaoBaoProvince> taoBaoProvinceList = null; + + static { + channelMap.put(0, "");// 鏅�� + channelMap.put(1, "nzjh");// 濂宠灏栬揣 + channelMap.put(2, "muying");// 姣嶅┐鐑帹 + channelMap.put(3, "qqhd");// 楂樹剑娲诲姩 + channelMap.put(4, "ifs");// ifashion + channelMap.put(5, "qbb");// 浜插疂璐� + channelMap.put(6, "hch");// 娣樺疂姹囧悆 + channelMap.put(7, "cdj");// 娼數琛� + channelMap.put(8, "jyj");// 鏋佹湁瀹� + channelMap.put(9, "kdc");// 閰峰姩鍩� + channelMap.put(10, "diy");// 娣樺疂DIY + channelMap.put(11, "9k9");// 瓒呭��9鍧�9 + channelMap.put(12, "20k");// 20鍏冨皝椤� + channelMap.put(13, "tehui");// 鐗逛环濂借揣 + + urlMap.put(0, SEARCH_URL); + urlMap.put(1, NZJH_URL); + urlMap.put(2, MUYING_URL); + urlMap.put(3, QQHD_URL); + urlMap.put(4, IFS_URL); + urlMap.put(5, QBB_URL); + urlMap.put(6, HCH_URL); + urlMap.put(7, CDJ_URL); + urlMap.put(8, JYJ_URL); + urlMap.put(9, KDC_URL); + urlMap.put(10, DIY_URL); + urlMap.put(11, K9_URL); + urlMap.put(12, K20_URL); + urlMap.put(13, TEHUI_URL); + } + + public static TaoBaoSearchResult search(SearchFilter filter, boolean proxy, String specialId, String relationId) { + if (filter.getKey().startsWith("http://") || filter.getKey().startsWith("https://")) { + String[] sts = filter.getKey().split("\\?")[1].split("&"); + for (String st : sts) { + if (st.contains("id=")) { + String id = st.replace("id=", "").trim(); + TaoBaoGoodsBrief tb = null; + try { + tb = TaoKeApiUtil.searchGoodsDetail(id); + } catch (TaobaoGoodsDownException e) { + e.printStackTrace(); + } + List<TaoBaoGoodsBrief> goodsList = new ArrayList<>(); + goodsList.add(tb); + TaoBaoSearchResult result = new TaoBaoSearchResult(); + result.setTaoBaoGoodsBriefs(goodsList); + result.setNavList(new ArrayList<>()); + TaoBaoHead taoBaoHead = new TaoBaoHead(); + taoBaoHead.setDocsfound(1); + result.setTaoBaoHead(taoBaoHead); + return result; + } + } + return null; + } + + List<Long> cateList = null; + if (!StringUtil.isNullOrEmpty(filter.getCateIds())) { + cateList = new ArrayList<>(); + for (String c : filter.getCateIds().split(",")) + cateList.add(Long.parseLong(c)); + } + return TaoKeApiUtil.searchWuLiaoNew(filter, specialId, relationId); + } + + /** + * 娣樺疂鑱旂洘缃戦〉鎼滅储鍟嗗搧 + * + * @param filter + * @param config -鑱旂洘閰嶇疆 + * @return + */ + public static TaoBaoSearchResult searchFromAlimamaWeb(SearchFilter filter, TaoBaoUnionConfig config) { + Map<String, String> params = new HashMap<String, String>(); + params.put("q", filter.getKey()); + params.put("_t", System.currentTimeMillis() + ""); + params.put("toPage", filter.getPage() + ""); + params.put("auctionTag", ""); + params.put("perPageSize", filter.getPageSize() == 0 ? PAGESIZE + "" : filter.getPageSize() + ""); + params.put("shopTag", filter.getShopTag() + ""); + params.put("t", System.currentTimeMillis() + ""); + params.put("_tb_token_", "test"); + params.put("yxjh", "-1"); + params.put("queryType", "2"); + String shopTag = filter.getShopTag(); + if (shopTag != null) { + String[] split = shopTag.split(","); + for (String tag : split) { + params.put(tag, "1"); + } + } + + if (filter.isTmall()) { + params.put("userType", "1"); + } + + if (filter.isBaoYou()) { + params.put("freeShipment", "1"); + } + + if (filter.getStartPrice() != null) { + params.put("startPrice", filter.getStartPrice() + ""); + } + if (filter.getEndPrice() != null) { + params.put("endPrice", filter.getEndPrice() + ""); + } + if (!StringUtil.isNullOrEmpty(filter.getCateIds())) + params.put("catIds", filter.getCateIds()); + + if (filter.getParams() != null && filter.getParams().size() > 0) { + Set<String> set = filter.getParams(); + StringBuffer sb = new StringBuffer(); + int i = 0; + for (String ids : set) { + if (i == 0) { + sb.append(ids); + } else { + sb.append(";" + ids); + } + i++; + } + params.put("pidvid", sb.toString()); + } + if (filter.getSort() > 0) { + params.put("sortType", filter.getSort() + ""); + // params.put("queryType", "0"); + } + + Map<String, String> headers = new HashMap<>(); + // headers.put("cookie", + // TaoBaoOrderUtil.getTaoBaoCookie(config.getAccount())); + + headers.put("referer", "https://pub.alimama.com/promo/search/index.htm"); + + headers.put("User-Agent", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36"); + + String result = TaoBaoHttpUtil.get(SEARCH_URL, params, headers, true); + if (result == null || "".equals(result)) { + return null; + } + result = result.replace("</span>", "").replace("<span class=H>", ""); + if (result.contains("<!DOCTYPE html>")) { + TaoBaoSearchResult presult = new TaoBaoSearchResult(); + presult.setNavList(new ArrayList<TaoBaoSearchNav>()); + presult.setTaoBaoGoodsBriefs(new ArrayList<TaoBaoGoodsBrief>()); + TaoBaoHead taoBaoHead = new TaoBaoHead(); + taoBaoHead.setDocsfound(0); + presult.setTaoBaoHead(taoBaoHead); + return presult; + } + TaoBaoSearchResult presult = parseTaoBao(result); + presult.setKey(filter.getKey()); + return presult; + } + + /** + * 娣樺疂鑱旂洘缃戦〉鎼滅储鍟嗗搧 + * + * @param filter + * @param config -鑱旂洘閰嶇疆 + * @return + */ + public static TaoBaoSearchResult searchAlimamaWeb(SearchFilter filter, TaoBaoUnionConfig config, Integer typeNum) { + + Map<String, String> params = new HashMap<String, String>(); + + if (typeNum != null && !typeNum.equals(0)) { + if (channelMap.get(typeNum) != null) { + params.put("channel", channelMap.get(typeNum)); + } + } + + params.put("toPage", filter.getPage() + ""); + params.put("perPageSize", filter.getPageSize() == 0 ? PAGESIZE + "" : filter.getPageSize() + ""); + + if (typeNum != null && typeNum == 3) { + // 鏌ヨ绫荤洰 + String catIds = filter.getCateIds(); + + if (!StringUtil.isNullOrEmpty(catIds)) { + // 楂樹剑鏃舵牴鎹被鐩甶d鏌ヨ + params.put("catIds", catIds); // 绫荤洰 + params.put("level", "1");// 榛樿涓�绾� + } else { + // 鏌ヨ鏉′欢 + String key = filter.getKey(); + if (!StringUtil.isNullOrEmpty(key)) { + params.put("q", filter.getKey()); + } + } + + } else { + // 鏌ヨ鏉′欢 + String key = filter.getKey(); + if (!StringUtil.isNullOrEmpty(key)) { + params.put("q", filter.getKey()); + } + } + + // 鎺掑簭瀛楁 3 浠锋牸楂樺埌浣� 4 浠锋牸浣庡埌楂� + // 9 閿�閲忛珮鍒颁綆 1 鏀跺叆姣旂巼楂樺埌浣� 5 鏈堟帹骞块噺楂樺埌浣� 7鏈堟敮鍑轰剑閲戦珮鍒颁綆 + // 13 娲诲姩寮�濮嬫椂闂寸敱杩戝埌杩� 11 娲诲姩鍓╀綑鏃堕棿闀垮埌鐭� 12 娲诲姩鍓╀綑鏃堕棿鐭埌闀� + + int sort = filter.getSort(); + if (sort > 0) { + params.put("sortType", sort + ""); + } + + // 鏄惁澶╃尗 + if (filter.isTmall()) { + params.put("userType", "1"); + } + + // 浣跨敤鍚紭鎯犲埜 + int quan = filter.getQuan(); + if (quan == 1) { + params.put("shopTag", "dpyhq"); + params.put("dpyhq", "1"); + } /* + * else { params.put("shopTag", ""); } + */ + + // 閿�閲� + String startBiz30day = filter.getStartBiz30day(); + if (!StringUtil.isNullOrEmpty(startBiz30day)) { + params.put("startBiz30day", startBiz30day); + } + + // 浣i噾姣斾緥灏忓�� + int startTkRate = filter.getStartTkRate(); + if (startTkRate > 0) { + params.put("startTkRate", startTkRate / 100 + ""); + } + + // 浣i噾姣斾緥澶у�� + int endTkRate = filter.getEndTkRate(); + if (endTkRate > 0) { + params.put("endTkRate", endTkRate + ""); + } + + // 璧峰浠锋牸 + if (filter.getStartPrice() != null) { + + params.put("startPrice", filter.getStartPrice() + ""); + } + + // 鎴浠锋牸 + if (filter.getEndPrice() != null) { + params.put("endPrice", filter.getEndPrice() + ""); + } + + if (filter.getParams() != null && filter.getParams().size() > 0) { + Set<String> set = filter.getParams(); + StringBuffer sb = new StringBuffer(); + int i = 0; + for (String ids : set) { + if (i == 0) { + sb.append(ids); + } else { + sb.append(";" + ids); + } + i++; + } + params.put("pidvid", sb.toString()); + } + + params.put("t", System.currentTimeMillis() + ""); + params.put("_tb_token_", "e430bae750a11"); + + Map<String, String> headers = new HashMap<>(); + + headers.put("referer", "https://pub.alimama.com/promo/search/index.htm"); + + headers.put("User-Agent", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36"); + + String cookie = TaoBaoOrderUtil.getTaoBaoCookie(config.getAccount()); + headers.put("Cookie", cookie); + + String url = SEARCH_URL; + + if (typeNum != null && !typeNum.equals(0)) { + url = urlMap.get(typeNum); + } + + String result = TaoBaoHttpUtil.get(url, params, headers, true); + if (result == null || "".equals(result)) { + return null; + } + + result = result.replace("</span>", "").replace("<span class=H>", ""); + if (result.contains("<!DOCTYPE html>")) { + TaoBaoSearchResult presult = new TaoBaoSearchResult(); + + presult.setNavList(new ArrayList<TaoBaoSearchNav>()); + presult.setTaoBaoGoodsBriefs(new ArrayList<TaoBaoGoodsBrief>()); + + TaoBaoHead taoBaoHead = new TaoBaoHead(); + taoBaoHead.setDocsfound(0); + presult.setTaoBaoHead(taoBaoHead); + + return presult; + } + TaoBaoSearchResult presult = parseTaoBao(result); + presult.setKey(filter.getKey()); + + return presult; + } + + public static TaoBaoSearchResult search(SearchFilter filter, String specialId, String relationId) { + return search(filter, false, specialId, relationId); + } + + public static TaoBaoSearchResult search2(SearchFilter filter, TaoBaoUnionConfig config) { + + if (filter.getKey().startsWith("http://") || filter.getKey().startsWith("https://")) { + String[] sts = filter.getKey().split("\\?")[1].split("&"); + for (String st : sts) { + if (st.contains("id=")) { + String id = st.replace("id=", "").trim(); + TaoBaoGoodsBrief tb = null; + try { + tb = TaoKeApiUtil.searchGoodsDetail(id); + } catch (TaobaoGoodsDownException e) { + e.printStackTrace(); + } + List<TaoBaoGoodsBrief> goodsList = new ArrayList<>(); + goodsList.add(tb); + TaoBaoSearchResult result = new TaoBaoSearchResult(); + result.setTaoBaoGoodsBriefs(goodsList); + result.setNavList(new ArrayList<>()); + TaoBaoHead taoBaoHead = new TaoBaoHead(); + taoBaoHead.setDocsfound(1); + result.setTaoBaoHead(taoBaoHead); + result.setPageEntity(new PageEntity()); + return result; + } + } + return null; + } + + List<Long> cateList = null; + if (!StringUtil.isNullOrEmpty(filter.getCateIds())) { + cateList = new ArrayList<>(); + for (String c : filter.getCateIds().split(",")) + cateList.add(Long.parseLong(c)); + } + + if (1 > 0) + return TaoKeApiUtil.searchWuLiaoNew(filter, null, null); + + Map<String, String> params = new HashMap<String, String>(); + String key = filter.getKey(); + if (key != null) { + params.put("q", filter.getKey()); + } + params.put("_t", System.currentTimeMillis() + ""); + params.put("toPage", filter.getPage() + ""); + params.put("perPageSize", PAGESIZE + ""); + params.put("auctionTag", ""); + params.put("shopTag", ""); + params.put("queryType", "2"); + params.put("t", System.currentTimeMillis() + ""); + params.put("_tb_token_", "owxj2i1mfTXq"); + int type = filter.getType(); + params.put("channel", channelMap.get(type)); + if (filter.getSort() > 0) { + params.put("sortType", filter.getSort() + ""); + // params.put("queryType", "0"); + } + String result = TaoBaoHttpUtil.tbGet(urlMap.get(type), params, config.getAccount()); + result = result.replace("</span>", "").replace("<span class=H>", ""); + TaoBaoSearchResult presult = parseTaoBao(result); + presult.setKey(filter.getKey()); + return presult; + } + + /** + * 9鍧�9 19鍧�9鐨勫垪琛� + * + * @param filter + * @return + */ + public static TaoBaoSearchResult search3(SearchFilter filter, TaoBaoUnionConfig config) { + Map<String, String> params = new HashMap<String, String>(); + String key = filter.getKey(); + if (key != null) { + params.put("q", filter.getKey()); + } + params.put("_t", System.currentTimeMillis() + ""); + params.put("toPage", filter.getPage() + ""); + params.put("perPageSize", PAGESIZE + ""); + params.put("auctionTag", ""); + params.put("shopTag", ""); + params.put("queryType", "2"); + params.put("t", System.currentTimeMillis() + ""); + params.put("_tb_token_", "owxj2i1mfTXq"); + int type = filter.getType(); + params.put("channel", channelMap.get(type)); + if (filter.getSort() > 0) { + params.put("sortType", filter.getSort() + ""); + // params.put("queryType", "0"); + } + String result = TaoBaoHttpUtil.tbGet(urlMap.get(type), params, config.getAccount()); + result = result.replace("</span>", "").replace("<span class=H>", ""); + TaoBaoSearchResult presult = parseTaoBao(result); + presult.setKey(filter.getKey()); + return presult; + } + + public static TaoBaoSearchResult parseTaoBao(String result) { + TaoBaoSearchResult resu = new TaoBaoSearchResult(); + List<TaoBaoGoodsBrief> list = new ArrayList<TaoBaoGoodsBrief>(); + JSONObject root = null; + try { + root = JSONObject.fromObject(result); + } catch (Exception e) { + e.printStackTrace(); + resu.setTaoBaoGoodsBriefs(list); + return resu; + } + Gson gson = new GsonBuilder().create(); + if (root.optBoolean("ok")) { + JSONArray array = root.optJSONObject("data").optJSONArray("pageList"); + if (array != null) { + for (int i = 0; i < array.size(); i++) { + list.add(gson.fromJson(array.optJSONObject(i).toString(), TaoBaoGoodsBrief.class)); + } + } + JSONObject head = root.optJSONObject("data").optJSONObject("head"); + Type headType = new TypeToken<TaoBaoHead>() { + }.getType(); + TaoBaoHead taoBaoHead = gson.fromJson(head.toString(), headType); + resu.setTaoBaoHead(taoBaoHead); + + JSONArray navArray = root.optJSONObject("data").optJSONArray("navigator"); + Type type = new TypeToken<ArrayList<TaoBaoSearchNav>>() { + }.getType(); + if (navArray != null) { + List<TaoBaoSearchNav> navList = gson.fromJson(navArray.toString(), type); + for (TaoBaoSearchNav taoBaoSearchNav : navList) { + String tbtype = taoBaoSearchNav.getType(); + if (!"category".equalsIgnoreCase(tbtype)) { + taoBaoSearchNav.setSelector(1); + } + } + resu.setNavList(navList); + } + JSONObject paginatorObject = root.optJSONObject("data").optJSONObject("paginator"); + if (paginatorObject != null) { + int count = (Integer) paginatorObject.get("items"); + int totalPage = (Integer) paginatorObject.get("pages"); + PageEntity pe = new PageEntity(); + pe.setTotalCount(count); + pe.setPageSize(PAGESIZE); + pe.setTotalPage(totalPage); + resu.setPageEntity(pe); + } + } + for (TaoBaoGoodsBrief taoBaoGoodsBrief : list) { + String pictUrl = taoBaoGoodsBrief.getPictUrl(); + if (!pictUrl.contains("http:") && !pictUrl.contains("https:")) { + taoBaoGoodsBrief.setPictUrl("http:" + pictUrl); + } + } + resu.setTaoBaoGoodsBriefs(list); + + PageEntity pageEntity = resu.getPageEntity(); + if (pageEntity == null) { + PageEntity entity = new PageEntity(); + resu.setPageEntity(entity); + } + + return resu; + } + + public static List<TaoBaoSearchNav> getBaseNav() { + List<TaoBaoSearchNav> list = new ArrayList<TaoBaoSearchNav>(); + + // 璁剧疆瀹濊礉绫诲瀷(娣樺疂澶╃尗/澶╃尗) + // TaoBaoSearchNav shopType = new TaoBaoSearchNav(); + // shopType.setLevel(1); + // shopType.setId(2); + // shopType.setName("瀹濊礉绫诲瀷"); + // shopType.setType("shoptype"); + // shopType.setFlag("shoptype"); + // shopType.setSelector(0); + // List<TaoBaoSearchNav> shopTypeChildList = new + // ArrayList<TaoBaoSearchNav>(); + // shopTypeChildList.add(new TaoBaoSearchNav(0, "all", 21, 2, "娣樺疂澶╃尗", + // "")); + // shopTypeChildList.add(new TaoBaoSearchNav(0, "tmall", 22, 2, "澶╃尗", + // "")); + // shopType.setSubIds(shopTypeChildList); + // list.add(shopType); + + // 鏄惁鏈夊埜 + // TaoBaoSearchNav quanType = new TaoBaoSearchNav(); + // quanType.setLevel(1); + // quanType.setId(3); + // quanType.setName("鏄惁鏈夊埜"); + // quanType.setType("quantype"); + // quanType.setFlag("quantype"); + // quanType.setSelector(0); + // List<TaoBaoSearchNav> quanTypeChildList = new + // ArrayList<TaoBaoSearchNav>(); + // quanTypeChildList.add(new TaoBaoSearchNav(0, "quan", 31, 2, "鏈夊埜", + // "")); + // quanTypeChildList + // .add(new TaoBaoSearchNav(0, "noquan", 32, 2, "鏃犲埜", "")); + // quanType.setSubIds(quanTypeChildList); + // list.add(quanType); + + // 鏄惁鏈夌孩鍖� + // TaoBaoSearchNav hongbaoType = new TaoBaoSearchNav(); + // hongbaoType.setLevel(1); + // hongbaoType.setId(4); + // hongbaoType.setName("鏄惁鏈夌孩鍖�"); + // hongbaoType.setType("hongbaotype"); + // hongbaoType.setFlag("hongbaotype"); + // hongbaoType.setSelector(0); + // List<TaoBaoSearchNav> hongbaoChildList = new + // ArrayList<TaoBaoSearchNav>(); + // hongbaoChildList + // .add(new TaoBaoSearchNav(0, "hongbao", 41, 2, "鏈夌孩鍖�", "")); + // hongbaoChildList.add(new TaoBaoSearchNav(0, "nohongbao", 42, 2, + // "鏃犵孩鍖�", + // "")); + // hongbaoType.setSubIds(hongbaoChildList); + // list.add(hongbaoType); + + // 璁剧疆鍙戣揣鍦� + // TaoBaoSearchNav address = new TaoBaoSearchNav(); + // address.setLevel(1); + // address.setId(1); + // address.setName("搴楅摵鎵�鍦ㄥ湴"); + // address.setType("loc"); + // address.setFlag("loc"); + // List<TaoBaoSearchNav> addressChildList = new + // ArrayList<TaoBaoSearchNav>(); + // + // list.add(address); + + return list; + } + + public static TaoBaoGoodsBriefExtra getTaoBaoGoodsBriefExtra(TaoBaoGoodsBrief tb, String proportion, String pid) { + TaoBaoGoodsBriefExtra tg = new TaoBaoGoodsBriefExtra(); + tg.setId(tb.getId()); + tg.setAuctionId(tb.getAuctionId()); + tg.setBiz30day(tb.getBiz30day()); + tg.setSalesCount(TaoBaoUtil.getSaleCount(tb.getBiz30day())); + tg.setTitle(tb.getTitle()); + if (!StringUtil.isNullOrEmpty(tb.getPictUrlWhite())) + tg.setPictUrl(TbImgUtil.getTBSize320Img(tb.getPictUrlWhite())); + else + tg.setPictUrl(TbImgUtil.getTBSize320Img(tb.getPictUrl())); + tg.setZkPrice(tb.getZkPrice()); + tg.setAuctionUrl(tb.getAuctionUrl()); + tg.setReservePrice(tb.getReservePrice()); + tg.setUserType(tb.getUserType()); + tg.setShopTitle(tb.getShopTitle()); + tg.setTkRate(tb.getTkRate()); + tg.setSellerId(tb.getSellerId()); + tg.setState(tb.getState()); // 鐘舵�侊細2018-12-03 + if (tb.getCouponAmount().compareTo(BigDecimal.valueOf(0)) > 0) { + + tg.setCoupon(true);// 鏈夊埜 + + TaoBaoQuanInfo quanInfo = new TaoBaoQuanInfo(); + quanInfo.setCouponAmount(tb.getCouponAmount()); + String couponEffectiveEndTime = tb.getCouponEffectiveEndTime(); + long endtime = TimeUtil.convertDateToTemp(couponEffectiveEndTime); + quanInfo.setCouponEffectiveEndTime(endtime + 1000 * 60 * 60 * 24L + ""); + quanInfo.setCouponEffectiveStartTime(TimeUtil.convertDateToTemp(tb.getCouponEffectiveStartTime()) + ""); + quanInfo.setCouponInfo(tb.getCouponInfo()); + quanInfo.setCouponLeftCount(tb.getCouponLeftCount()); + quanInfo.setCouponLink( + TaoBaoCouponUtil.getCoupleUrl(tb.getCouponActivityId(), pid, tb.getAuctionId() + "")); + quanInfo.setCouponPrice(MoneyBigDecimalUtil.sub(tg.getZkPrice(), tb.getCouponAmount())); + quanInfo.setCouponStartFee(tb.getCouponStartFee()); + quanInfo.setCouponTotalCount(tb.getCouponTotalCount()); + tg.setTaoBaoQuanInfo(quanInfo); + } + TaoBaoHongBaoInfo hongBaoInfo = new TaoBaoHongBaoInfo(); + + hongBaoInfo.setRate("鏈�楂�40%"); + + String hongbao = getGoodsHongBaoInfo(tb, new BigDecimal(proportion), false); + if (hongbao.contains("鏈�楂�")) { + hongBaoInfo.setType(1); + hongBaoInfo.setHongbao(new BigDecimal(0)); + } else { + hongBaoInfo.setRate(hongbao); + hongBaoInfo.setHongbao(new BigDecimal(hongbao.replace("楼", ""))); + } + + tg.setBaoyou(true); + + if (tb.getUserType() == 1) + tg.setShopType(2); + else + tg.setShopType(1); + + if (tb.getCouponAmount().compareTo(BigDecimal.valueOf(0)) == 1) + tg.setShowType(3); + else + tg.setShowType(2); + + int showType = tg.getShowType(); + if (showType == 3 || showType == 1) { + BigDecimal sub = tg.getZkPrice().subtract(tb.getCouponStartFee()); + if (sub.compareTo(BigDecimal.valueOf(0)) >= 0) { + BigDecimal quanPrice = MoneyBigDecimalUtil.sub(tg.getZkPrice(), tb.getCouponAmount()); + tg.setQuanPrice(quanPrice); + } else { + tg.setQuanPrice(tg.getZkPrice()); + } + } + + tg.setTaoBaoHongBaoInfo(hongBaoInfo); + + tg.setMoneyType(1); + tg.setSalesType(1); + // 娴嬭瘯浣跨敤 + // tg.setSalesType(Math.random() > 0.5 ? tg.getSalesType() : 3); + // if(Constant.IS_TEST) + // { + // List<ClientTextStyleVO> labels = new ArrayList<>(); + // labels.add(new ClientTextStyleVO("鏍囩鍐呭", "#F14242")); + // labels.add(new ClientTextStyleVO("鏍囩鍐呭", "#00FF00")); + // tg.setLabels(labels); + // } + return loadYuShouInfo(tg, tb); + } + + private static TaoBaoGoodsBriefExtra loadYuShouInfo(TaoBaoGoodsBriefExtra extra, TaoBaoGoodsBrief goods) { + if (goods != null && extra != null) { + if (isYUShou(goods)) {// 棰勫敭鍟嗗搧 + // extra.setZkPrice(new BigDecimal(goods.getPresaleDeposit())); + // 棰勫敭 + if (extra.getLabels() == null) + extra.setLabels(new ArrayList<>()); + extra.getLabels().add(new ClientTextStyleVO("棰勫敭", "#FF2B4E")); + } + } + return extra; + } + + /** + * 鏄惁涓洪鍞晢鍝� + * + * @param goods + * @return + */ + public static boolean isYUShou(TaoBaoGoodsBrief goods) { + if (!StringUtil.isNullOrEmpty(goods.getPresaleDeposit()) + && !StringUtil.isNullOrEmpty(goods.getPresaleStartTime()) + && !StringUtil.isNullOrEmpty(goods.getPresaleEndTime())) { + long startTime = Long.parseLong(goods.getPresaleStartTime()); + long endTime = Long.parseLong(goods.getPresaleEndTime()); + long now = System.currentTimeMillis(); + if (now >= startTime && now < endTime) { + return true; + } + } + + return false; + } + + /** + * 鑾峰彇娣樺疂鎺ㄥ箍閾炬帴 + * + * @param auctionId + * @param pid + * @return + */ + public static TaoBaoLink getTbLink(String auctionId, String pid, TaoBaoUnionConfig config) { + TaoBaoLink tbk = null; + String cookie = TaoBaoOrderUtil.getTaoBaoCookie(config.getAccount()); + String adzoneid = pid.split("_")[3]; + String siteId = pid.split("_")[2]; + Map<String, String> headers = new HashMap<>(); + + headers.put("Cookie", cookie); + headers.put("Referer", "http://pub.alimama.com/promo/search/index.htm"); + headers.put("User-Agent", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36"); + headers.put("Cookie", cookie); + headers.put("X-Requested-With", "XMLHttpRequest"); + + String json = TaoBaoHttpUtil.proxyGet("http://pub.alimama.com/common/code/getAuctionCode.json?auctionid=" + + auctionId + "&adzoneid=" + adzoneid + "&siteid=" + siteId + "&scenes=1", cookie); + System.out.println(json); + if (json == null || "".equals(json.trim())) { + LogHelper.taoBaoLinkError("鑾峰彇鎺ㄥ箍閾炬帴澶辫触:" + auctionId); + return null; + } + + JSONObject data; + try { + data = JSONObject.fromObject(json); + } catch (Exception e) { + LogHelper.taoBaoLinkError("鑾峰彇鎺ㄥ箍閾炬帴澶辫触:" + auctionId); + return null; + } + + if (data.optBoolean("ok")) { + tbk = new TaoBaoLink(); + JSONObject dat = data.optJSONObject("data"); + String couponLink = dat.optString("couponLink"); + String clickUrl = dat.optString("clickUrl"); + String taoToken = dat.optString("taoToken"); + tbk.setCouponLink(couponLink); + tbk.setClickUrl(clickUrl); + tbk.setTaoToken(taoToken); + tbk.setAuctionId(auctionId); + return tbk; + } else { + LogHelper.taoBaoLinkError("鑾峰彇鎺ㄥ箍閾炬帴澶辫触:" + auctionId); + } + // 濡傛灉json杩斿洖鐨勬槸false锛岃鏄巆ookie澶辨晥 + TaoBaoOrderUtil.reportCookieInvalid(config.getAccount()); + return null; + } + + /** + * 鑾峰彇鎺ㄥ箍鐢ㄧ殑娣樺彛浠� + * + * @param auctionId + * @param pid + * @return + */ + public static TaoBaoLink getTbLinkForShare(String auctionId, String pid, TaoBaoUnionConfig config) { + TaoBaoLink tbk = null; + String cookie = TaoBaoOrderUtil.getTaoBaoCookie(config.getAccount()); + selfAdzoneCreate(pid, cookie); + String adzoneid = pid.split("_")[3]; + String siteId = pid.split("_")[2]; + Map<String, String> headers = new HashMap<>(); + + headers.put("Cookie", cookie); + headers.put("Referer", "http://pub.alimama.com/promo/search/index.htm"); + headers.put("User-Agent", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36"); + headers.put("Cookie", cookie); + headers.put("X-Requested-With", "XMLHttpRequest"); + + String json = TaoBaoHttpUtil.proxyGet("http://pub.alimama.com/common/code/getAuctionCode.json?auctionid=" + + auctionId + "&adzoneid=" + adzoneid + "&siteid=" + siteId + "&scenes=1", cookie); + System.out.println(json); + LogHelper.test(json); + if (json == null || "".equals(json.trim())) { + return null; + } + + JSONObject data; + try { + data = JSONObject.fromObject(json); + } catch (Exception e) { + return null; + } + + if (data.optBoolean("ok")) { + tbk = new TaoBaoLink(); + JSONObject dat = data.optJSONObject("data"); + String couponLink = dat.optString("couponLink"); + String clickUrl = dat.optString("clickUrl"); + String taoToken = dat.optString("taoToken"); + tbk.setCouponLink(couponLink); + tbk.setClickUrl(clickUrl); + tbk.setTaoToken(taoToken); + tbk.setAuctionId(auctionId); + + return tbk; + } + // 濡傛灉json杩斿洖鐨勬槸false锛岃鏄巆ookie澶辨晥 + TaoBaoOrderUtil.reportCookieInvalid(config.getAccount()); + return null; + } + + /** + * 閫氳繃浼樻儬鍒搁摼鎺ヨ幏鍙栨窐鍙d护 + * + * @param picture + * @param title + * @param activityId + * @param auctionId + * @param pid + * @return + */ + public static TaoBaoLink getTbLinkWithCoupon(String picture, String title, String activityId, String auctionId, + String pid) { + activityId = StringUtil.isNullOrEmpty(activityId) ? "da75a5880d4c41ab88a82256b069a38c" : activityId; + String url = String.format("https://uland.taobao.com/coupon/edetail?activityId=%s&pid=%s&itemId=%s", activityId, + pid, auctionId + ""); + String tbk = TaoKeApiUtil.getTKToken(picture, title, url); + if (StringUtil.isNullOrEmpty(tbk)) + LogHelper.error("鐢熸垚娣樺彛浠ゅけ璐ワ紙浼樻儬鍒搁摼鎺ワ級:" + auctionId); + TaoBaoLink taoBaoLink = new TaoBaoLink(); + taoBaoLink.setAuctionId(auctionId); + taoBaoLink.setClickUrl(url); + taoBaoLink.setCouponLink(url); + taoBaoLink.setTaoToken(tbk); + return taoBaoLink; + } + + private static void selfAdzoneCreate(String pid, String cookie) { + String[] sts = cookie.split(";"); + String tbToken = ""; + for (String st : sts) { + if (st.contains("_tb_token_")) { + tbToken = st.replace("_tb_token_=", ""); + break; + } + } + String adzoneid = pid.split("_")[3]; + String siteId = pid.split("_")[2]; + String url = "http://pub.alimama.com/common/adzone/selfAdzoneCreate.json"; + Map<String, String> params = new HashMap<>(); + params.put("tag", "29"); + params.put("gcid", "8"); + params.put("siteid", siteId); + params.put("selectact", "sel"); + params.put("adzoneid", adzoneid); + params.put("t", System.currentTimeMillis() + ""); + params.put("_tb_token_", tbToken); + + Map<String, String> headers = new HashMap<>(); + headers.put("Cookie", cookie); + headers.put("Referer", "http://pub.alimama.com/promo/search/index.htm"); + headers.put("User-Agent", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36"); + headers.put("Cookie", cookie); + headers.put("X-Requested-With", "XMLHttpRequest"); + String result = TaoBaoHttpUtil.post(url, params, headers); + System.out.println(result); + } + + public static TaoBaoGoodsBriefExtra getTaoBaoGoodsBriefExtra(TaoBaoGoodsBrief tb, TaoBaoUnionConfig config, SystemEnum system) { + TaoBaoGoodsBriefExtra tg = new TaoBaoGoodsBriefExtra(); + tg.setId(tb.getId()); + tg.setAuctionId(tb.getAuctionId()); + tg.setBiz30day(tb.getBiz30day()); + tg.setSalesCount(TaoBaoUtil.getSaleCount(tb.getBiz30day())); + tg.setTitle(tb.getTitle()); + tg.setPictUrl(tb.getPictUrl()); + tg.setZkPrice(tb.getZkPrice()); + tg.setAuctionUrl(tb.getAuctionUrl()); + tg.setReservePrice(tb.getReservePrice()); + tg.setUserType(tb.getUserType()); + tg.setImgList(tb.getImgList()); + + if (tb.getCouponAmount().compareTo(BigDecimal.valueOf(0)) == 1) { + TaoBaoQuanInfo quanInfo = new TaoBaoQuanInfo(); + quanInfo.setCouponAmount(tb.getCouponAmount()); + String couponEffectiveEndTime = tb.getCouponEffectiveEndTime(); + long endtime = TimeUtil.convertDateToTemp(couponEffectiveEndTime); + quanInfo.setCouponEffectiveEndTime(endtime + 1000 * 60 * 60 * 24L + ""); + quanInfo.setCouponEffectiveStartTime(TimeUtil.convertDateToTemp(tb.getCouponEffectiveStartTime()) + ""); + quanInfo.setCouponInfo(tb.getCouponInfo()); + quanInfo.setCouponLeftCount(tb.getCouponLeftCount()); + String pid = config.getDefaultPid(); + quanInfo.setCouponLink( + TaoBaoCouponUtil.getCoupleUrl(tb.getCouponActivityId(), pid, tb.getAuctionId() + "")); + quanInfo.setCouponPrice(tb.getZkPrice().subtract(tb.getCouponAmount())); + quanInfo.setCouponStartFee(tb.getCouponStartFee()); + quanInfo.setCouponTotalCount(tb.getCouponTotalCount()); + tg.setTaoBaoQuanInfo(quanInfo); + } + + BigDecimal proportion = taoBaoUtil.manageService.getFanLiRate(UserLevelEnum.daRen, system); + TaoBaoHongBaoInfo hongBaoInfo = new TaoBaoHongBaoInfo(); + String tkMktStatus = tb.getTkMktStatus(); + if ("1".equals(tkMktStatus)) { + hongBaoInfo.setType(1); + } + + hongBaoInfo.setRate("鏈�楂�40%"); + + String hongbao = getGoodsHongBaoInfo(tb, proportion, false); + if (!hongbao.contains("鏈�楂�")) + hongBaoInfo.setHongbao(new BigDecimal(hongbao.replace("楼", ""))); + else + hongBaoInfo.setHongbao(new BigDecimal(0)); + + tg.setBaoyou(true); + + if (tb.getUserType() == 1) + tg.setShopType(2); + else + tg.setShopType(1); + + if (tb.getCouponAmount().compareTo(BigDecimal.valueOf(0)) == 1) + tg.setShowType(3); + else + tg.setShowType(2); + + int showType = tg.getShowType(); + if (showType == 3 || showType == 1) { + BigDecimal sub = tg.getZkPrice().subtract(tb.getCouponStartFee()); + if (sub.compareTo(BigDecimal.valueOf(0)) >= 0) { + BigDecimal quanPrice = tg.getZkPrice().subtract(tb.getCouponAmount()); + tg.setQuanPrice(quanPrice); + } else { + tg.setQuanPrice(tg.getZkPrice()); + } + } + tg.setTaoBaoHongBaoInfo(hongBaoInfo); + + tg.setMoneyType(1); + tg.setSalesType(1); + // 娴嬭瘯浣跨敤 + // tg.setMoneyType(Math.random() > 0.5 ? 1 : 2); + // tg.setSalesType(Math.random() > 0.5 ? 1 : 2); + // tg.setSalesType(Math.random() > 0.5 ? tg.getSalesType() : 3); + // List<ClientTextStyleVO> labels = new ArrayList<>(); + // labels.add(new ClientTextStyleVO("鏍囩鍐呭", "#F14242")); + // labels.add(new ClientTextStyleVO("鏍囩鍐呭", "#000000")); + // tg.setLabels(labels); + + return tg; + } + + /** + * 鑾峰彇鏈弬涓庢帹骞跨殑娣樺疂鍟嗗搧璇︽儏 @Title: getTaoBaoGoodsBrief @Description: @param + * id @return TaoBaoGoodsBrief 鍖呭惈锛堟爣棰樹笌鍥剧墖锛� @throws + */ + public static TaoBaoGoodsBrief getTaoBaoGoodsBriefNotInPub(String id) { + TaoBaoGoodsBrief tb = TaoBaoUtil.getTmallGoodsInfo(id + ""); + return tb; + } + + public static List<String> getSuguestSearch(String key) { + try { + String url = String.format("https://suggest.taobao.com/sug?code=utf-8&q=%s&_=1486720576511", + URLEncoder.encode(key, "UTF-8")); + HttpClient client = new HttpClient(); + GetMethod gm = new GetMethod(url); + client.executeMethod(gm); + String result = gm.getResponseBodyAsString(); + JSONObject obj = JSONObject.fromObject(result); + if (obj != null) { + JSONArray array = obj.optJSONArray("result"); + List<String> list = new ArrayList<String>(); + for (int i = 0; i < array.size(); i++) { + list.add(array.optJSONArray(i).optString(0)); + } + return list; + } + + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + public static List<String> getTbImg(String auctionId) { + if (!NumberUtil.isNumeric(auctionId)) + return new ArrayList<>(); + TaoBaoGoodsBrief taoBaoGoodsBrief = null; + try { + taoBaoGoodsBrief = TaoKeApiUtil.getSimpleGoodsInfo(auctionId); + } catch (TaobaoGoodsDownException e) { + e.printStackTrace(); + } + + List<String> list = new ArrayList<String>(); + if (taoBaoGoodsBrief == null) + return list; + + if (!StringUtil.isNullOrEmpty(taoBaoGoodsBrief.getPictUrl())) + list.add(taoBaoGoodsBrief.getPictUrl()); + if (taoBaoGoodsBrief.getImgList() != null && taoBaoGoodsBrief.getImgList().size() > 0) + list.addAll(taoBaoGoodsBrief.getImgList()); + return list; + } + + public static TaoBaoGoodsBrief isAlimama(String auctionId) { + if (StringUtil.isNullOrEmpty(auctionId) || !NumberUtil.isNumeric(auctionId)) + return null; + TaoBaoGoodsBrief tb = null; + try { + tb = TaoKeApiUtil.getSimpleGoodsInfo(auctionId); + } catch (TaobaoGoodsDownException e) { + e.printStackTrace(); + } + return tb; + } + + public static List<TaoBaoGoodsBriefExtra> getTaoBaoGoodsBriefExtraList(List<TaoBaoCoupon> list) { + List<TaoBaoGoodsBriefExtra> tbxs = new ArrayList<TaoBaoGoodsBriefExtra>(); + TaoBaoGoodsBriefExtra taoBaoGoodsBriefExtra = null; + TaoBaoQuanInfo taobaoQuanInfo = null; + TaoBaoHongBaoInfo taobaoHongbaoInfo = null; + for (TaoBaoCoupon taoBaoCoupon : list) { + taoBaoGoodsBriefExtra = new TaoBaoGoodsBriefExtra(); + taobaoQuanInfo = new TaoBaoQuanInfo(); + taobaoQuanInfo.setCouponAmount(taoBaoCoupon.getCouponAmount()); + taobaoQuanInfo.setCouponInfo(taoBaoCoupon.getCouponinfo()); + taobaoQuanInfo.setCouponPrice(taoBaoCoupon.getQuanPrice()); + taobaoQuanInfo.setCouponLink(taoBaoCoupon.getCouponLink()); + taobaoHongbaoInfo = new TaoBaoHongBaoInfo(); + taobaoHongbaoInfo.setHongbao(taoBaoCoupon.getHongbao()); + taobaoHongbaoInfo.setRate("楼" + taoBaoCoupon.getHongbao().toString()); + + taoBaoGoodsBriefExtra.setTaoBaoHongBaoInfo(taobaoHongbaoInfo); + taoBaoGoodsBriefExtra.setTaoBaoQuanInfo(taobaoQuanInfo); + + taoBaoGoodsBriefExtra.setAuctionId(taoBaoCoupon.getAuctionId()); + taoBaoGoodsBriefExtra.setAuctionUrl(taoBaoCoupon.getAuctionUrl()); + taoBaoGoodsBriefExtra.setBaoyou(true); + taoBaoGoodsBriefExtra.setBiz30day(taoBaoCoupon.getBiz30day()); + taoBaoGoodsBriefExtra.setPictUrl(taoBaoCoupon.getPictUrl()); + taoBaoGoodsBriefExtra.setQuanPrice(taoBaoCoupon.getQuanPrice()); + + int shopType = taoBaoCoupon.getShopType(); + taoBaoGoodsBriefExtra.setShopType(shopType); + taoBaoGoodsBriefExtra.setShowType(taoBaoCoupon.getShowType()); + + taoBaoGoodsBriefExtra.setTitle(taoBaoCoupon.getTitle()); + taoBaoGoodsBriefExtra.setReservePrice(taoBaoCoupon.getZkPrice()); + taoBaoGoodsBriefExtra.setZkPrice(taoBaoCoupon.getZkPrice()); + taoBaoGoodsBriefExtra.setSellerId(taoBaoCoupon.getSellerId()); + tbxs.add(taoBaoGoodsBriefExtra); + } + + return tbxs; + } + + public static TaoBaoGoodsBrief parsePhoneShareUrlByTM(String murl) { + if (!murl.contains("http://zmnxbc.com")) { // 鎵嬫満澶╃尗鍒嗕韩 + return null; + } + TaoBaoGoodsBrief taobao; + try { + Connection connect = Jsoup.connect(murl); + Document document = connect.get(); + org.jsoup.nodes.Element element = document.getElementsByTag("head").get(0).getElementsByTag("Script") + .get(2); + String html = element.html(); + String json = html.substring(html.indexOf("{"), html.lastIndexOf("}") + 1); + JSONObject data = JSONObject.fromObject(json); + String auctionId = data.optString("bizId"); + TaoBaoGoodsBrief alimama = isAlimama(auctionId); + if (alimama != null) { + return alimama; + } + String price = data.optString("itemPrice", "0"); + String title = data.optString("content"); + String url = data.optJSONArray("actionRule").optJSONObject(0).optString("url"); + Document document2 = Jsoup.connect("http:" + url).get(); + org.jsoup.nodes.Element element2 = document2.getElementById("s-showcase").getElementsByClass("scroller") + .get(0); + Elements elements = element2.getElementsByClass("item"); + List<String> imgStrs = new ArrayList<String>(); + for (org.jsoup.nodes.Element e : elements) { + org.jsoup.nodes.Element img = e.getElementsByTag("img").get(0); + String attr = img.attr("src"); + if (attr == "") { + attr = img.attr("data-src"); + } + if (!attr.contains("http:")) { + attr = "http:" + attr; + } + imgStrs.add(attr); + } + taobao = new TaoBaoGoodsBrief(); + taobao.setAuctionId(auctionId); + taobao.setTitle(title); + taobao.setZkPrice(new BigDecimal(price)); + taobao.setImgList(imgStrs); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + return taobao; + } + + public static TaoBaoGoodsBrief parsePhoneShareUrlByTB(String burl) { + try { + Connection connect = Jsoup.connect(burl); + Document document = connect.get(); + org.jsoup.nodes.Element element = document.getElementsByTag("head").get(0).getElementsByTag("Script") + .get(1); + String html = element.toString(); + int index = html.indexOf("var url = "); + int endIndex = html.lastIndexOf("'"); + html = html.substring(index, endIndex); + int index2 = html.indexOf("'"); + html = html.substring(index2 + 1); + int indexId = html.indexOf("id="); + String id = ""; + if (html.contains("a.m.taobao.com")) { + indexId = html.indexOf("com/i"); + html = html.substring(indexId); + html = html.substring(5, html.indexOf(".")); + id = html; + } else { + String reg = "[?|&]{1}[i]{1}[d]{1}[=]{1}\\d+[&]?"; + Pattern p = Pattern.compile(reg); + Matcher matcher = p.matcher(html); + if (matcher.find()) { + id = matcher.group(); + } + id = id.substring(id.indexOf("=") + 1, id.lastIndexOf("&")); + } + TaoBaoGoodsBrief alimama = isAlimama(id); + + if (alimama != null) { + return alimama; + } + return parsePhoneTmAndTb(id); + } catch (Exception e) { + LogHelper.error("鏃犳硶瑙f瀽鍒版窐瀹濆晢鍝両D:" + burl); + return null; + } + + } + + public static TaoBaoGoodsBrief parsePhoneTmAndTb(String auctionId) { + + TaoBaoGoodsBrief taoBaoGoodsBrief = null; + try { + + Connection connect = Jsoup.connect(String.format(TM_PHONE_URL, auctionId)); + Document document = connect.get(); + Elements elements = document.getElementsByTag("script"); + if (elements.size() >= 9) { + String json = elements.get(8).toString(); + json = json.substring(json.indexOf("{"), json.lastIndexOf("}") + 1); + JSONObject data = JSONObject.fromObject(json); + JSONObject model = data.optJSONObject("defaultModel"); + JSONObject itemPriceResultDO = model.optJSONObject("itemPriceResultDO"); + JSONObject priceInfo = itemPriceResultDO.optJSONObject("priceInfo"); + Set keySet = priceInfo.keySet(); + String key = (String) keySet.toArray()[0]; + JSONObject goods = priceInfo.optJSONObject(key); + String price = ""; + if (goods.optJSONArray("promotionList") != null) { + price = goods.optJSONArray("promotionList").getJSONObject(0).optString("price"); + } else { + price = goods.optString("price"); + } + List<String> imgs = new ArrayList<String>(); + Element showcase = document.getElementById("s-showcase"); + Elements Eleimgs = showcase.getElementsByTag("img"); + for (Element Eleimg : Eleimgs) { + String img = Eleimg.attr("src"); + if ("".equals(img)) { + img = Eleimg.attr("data-src"); + } + if (!img.contains("http")) { + img = "http:" + img; + } + imgs.add(img); + } + Element stitle = document.getElementById("s-title"); + String title = stitle.getElementsByTag("h1").get(0).toString().replaceAll("<h1>", "") + .replaceAll("</h1>", ""); + taoBaoGoodsBrief = new TaoBaoGoodsBrief(); + taoBaoGoodsBrief.setZkPrice(new BigDecimal(price)); + taoBaoGoodsBrief.setTitle(title); + taoBaoGoodsBrief.setImgList(imgs); + taoBaoGoodsBrief.setPictUrl(imgs.get(0)); + taoBaoGoodsBrief.setAuctionId(auctionId); + taoBaoGoodsBrief.setUserType(1); + } else { + Connection connect2 = Jsoup.connect(String.format(TB_URL, auctionId)); + Document document2 = connect2.get(); + Elements elements2 = document2.getElementsByTag("script"); + String json = elements2.get(0).toString(); + json = json.substring(json.indexOf("item:"), json.indexOf("seller:")); + json = json.substring(json.indexOf("{"), json.lastIndexOf(",")); + json = json.substring(json.indexOf("auctionImages"), json.lastIndexOf("]") + 1); + json = json.substring(json.indexOf("[")); + JSONArray array = JSONArray.fromObject(json); + List<String> imgs = new ArrayList<String>(); + for (Object str : array) { + String imgStr = String.valueOf(str); + if (!imgStr.contains("http")) { + imgStr = "http:" + imgStr; + } + imgs.add(imgStr); + } + String turl = "https://detailskip.taobao.com/service/getData/1/p1/item/detail/sib.htm?itemId=" + + auctionId + + "&sellerId=0&modules=dynStock,qrcode,viewer,price,duty,xmpPromotion,delivery,upp,activity,fqg,zjys,couponActivity,soldQuantity,contract,tradeContract&callback=onSibRequestSuccess"; + Map<String, String> params = new HashMap<String, String>(); + params.put("Referer", "https://item.taobao.com/item.htm?id=" + auctionId); + String json2 = TaoBaoHttpUtil.get(turl, params); + json2 = json2.substring(json2.indexOf("{"), json2.lastIndexOf("}") + 1); + JSONObject data2 = JSONObject.fromObject(json2); + String price = data2.optJSONObject("data").optJSONObject("promotion").optJSONObject("promoData") + .optJSONArray("def").getJSONObject(0).optString("price"); + String title = document2.getElementsByTag("title").get(0).toString(); + title = title.replaceAll("-娣樺疂缃�", "").replaceAll("<title>", "").replaceAll("</title>", ""); + taoBaoGoodsBrief = new TaoBaoGoodsBrief(); + taoBaoGoodsBrief.setTitle(title); + taoBaoGoodsBrief.setPictUrl(imgs.get(0)); + taoBaoGoodsBrief.setImgList(imgs); + taoBaoGoodsBrief.setZkPrice(new BigDecimal(price)); + taoBaoGoodsBrief.setAuctionId(auctionId); + taoBaoGoodsBrief.setUserType(0); + } + } catch (Exception e) { + e.printStackTrace(); + return null; + } + return taoBaoGoodsBrief; + } + + public static String getGoodsIdByPhoneShareUrl(String burl) { + try { + Connection connect = Jsoup.connect(burl); + Document document = connect.get(); + org.jsoup.nodes.Element element = document.getElementsByTag("head").get(0).getElementsByTag("Script") + .get(1); + String html = element.toString(); + int index = html.indexOf("var url = "); + int endIndex = html.lastIndexOf("'"); + html = html.substring(index, endIndex); + int index2 = html.indexOf("'"); + html = html.substring(index2 + 1); + int indexId = html.indexOf("id="); + String id = ""; + if (html.contains("a.m.taobao.com")) { + indexId = html.indexOf("com/i"); + html = html.substring(indexId); + html = html.substring(5, html.indexOf(".")); + id = html; + } else { + String reg = "[?|&]{1}[i]{1}[d]{1}[=]{1}\\d+[&]?"; + Pattern p = Pattern.compile(reg); + Matcher matcher = p.matcher(html); + if (matcher.find()) { + id = matcher.group(); + } + id = id.substring(id.indexOf("=") + 1, id.lastIndexOf("&")); + } + return id; + } catch (Exception e) { + LogHelper.error("鏃犳硶瑙f瀽鍒版窐瀹濆晢鍝両D:" + burl); + return null; + } + } + + /** + * 鑾峰彇鍟嗗搧鐨勭敤鎴峰垎鎴愭瘮渚� + * + * @param goodsBrief 鍟嗗搧璇︽儏 + * @param rate 鐢ㄦ埛鍐嶆鍒嗘垚姣斾緥锛�0-100锛� + * @return + */ + public static String getGoodsHongBaoInfo(TaoBaoGoodsBrief goodsBrief, BigDecimal rate, boolean share) { + // if (goodsBrief != null && goodsBrief.getMaterialLibType() != null && + // goodsBrief.getMaterialLibType() == 0) + // return "楼0.00"; + // else + return "楼" + getGoodsHongBaoMoney(goodsBrief, rate, share).toString(); + } + + /** + * 鑾峰彇娣樺疂鍟嗗搧璇ヨ幏寰楀灏戜剑閲� + * + * @param goodsBrief + * @param rate + * @return + */ + public static BigDecimal getGoodsHongBaoMoney(TaoBaoGoodsBrief goodsBrief, BigDecimal rate, boolean share) { + BigDecimal commissionRate = null; + if (goodsBrief.getMinTkRate() != null && !share) + commissionRate = goodsBrief.getMinTkRate(); + else + commissionRate = goodsBrief.getTkRate(); + + BigDecimal money = null; + if (StringUtil.isNullOrEmpty(goodsBrief.getCouponInfo()) + || goodsBrief.getCouponInfo().trim().equalsIgnoreCase("鏃�")) { + money = MoneyBigDecimalUtil.mul( + MoneyBigDecimalUtil.mul(MoneyBigDecimalUtil.mul(goodsBrief.getZkPrice(), commissionRate), + new BigDecimal("0.01")), + MoneyBigDecimalUtil.div(rate, new BigDecimal(100))); + } else// 鏈夊埜 + { + List<BigDecimal> list = TaoBaoCouponUtil.getCouponInfo(goodsBrief.getCouponInfo()); + BigDecimal startFee = list.get(0); + BigDecimal couponAccount = list.get(1); + if (startFee.compareTo(goodsBrief.getZkPrice()) <= 0 + && goodsBrief.getZkPrice().compareTo(couponAccount) > 0) { + BigDecimal finalPrice = goodsBrief.getZkPrice().subtract(couponAccount); + money = MoneyBigDecimalUtil.mul(MoneyBigDecimalUtil + .mul(MoneyBigDecimalUtil.mul(finalPrice, commissionRate), new BigDecimal("0.01")), + MoneyBigDecimalUtil.div(rate, new BigDecimal(100))); + + } else {// 涓嶈兘鐢ㄥ埜 + money = MoneyBigDecimalUtil.mul(MoneyBigDecimalUtil.mul( + MoneyBigDecimalUtil.mul(goodsBrief.getZkPrice(), commissionRate), + new BigDecimal("0.01")), MoneyBigDecimalUtil.div(rate, new BigDecimal(100))); + } + } + + if (share) + money = TaoBaoUtil.getCanShareMoney(new Date(), money); + + + return BigDecimalUtil.getWithNoZera(money); + } + + // } + + // 鑾峰彇鍒哥殑绾㈠寘鏄剧ず + public static BigDecimal getCouponHongBaoInfo(TaoBaoCoupon taoBaoCoupon, BigDecimal rate) { + // 钀ラ攢璁″垝 + + // 璁$畻杩斿埄 + // 鏃犲埜 + + BigDecimal startFee = taoBaoCoupon.getCouponStartFee(); + BigDecimal couponAccount = taoBaoCoupon.getCouponAmount(); + if (startFee.compareTo(taoBaoCoupon.getZkPrice()) <= 0 + && taoBaoCoupon.getZkPrice().compareTo(couponAccount) > 0) { + BigDecimal finalPrice = taoBaoCoupon.getZkPrice().subtract(couponAccount); + return finalPrice.multiply(new BigDecimal(taoBaoCoupon.getTkRate())).divide(new BigDecimal(10000)) + .multiply(rate).setScale(2, BigDecimal.ROUND_DOWN); + } else {// 涓嶈兘鐢ㄥ埜 + return taoBaoCoupon.getZkPrice().multiply(new BigDecimal(taoBaoCoupon.getTkRate())) + .divide(new BigDecimal(10000)).multiply(rate).setScale(2, BigDecimal.ROUND_DOWN); + } + } + + /** + * 鑾峰彇鍒嗕韩璧氱殑閲戦 + * + * @param goodsBrief + * @param rate + * @return + */ + + public static BigDecimal getShareGoodsHongBaoInfo(TaoBaoGoodsBrief goodsBrief, BigDecimal rate) { + return getGoodsHongBaoMoney(goodsBrief, rate, true); + } + + /** + * 璁$畻鍟嗗搧鍒稿悗浠凤紝娌℃湁鍒稿垯杩斿洖鍘熶环 + * + * @param goodsBrief + * @return + */ + public static BigDecimal getCouponPrice(TaoBaoGoodsBrief goodsBrief) { + + if (StringUtil.isNullOrEmpty(goodsBrief.getCouponInfo()) || "鏃�".equals(goodsBrief.getCouponInfo())) { + return goodsBrief.getZkPrice(); + } else { + List<BigDecimal> list = TaoBaoCouponUtil.getCouponInfo(goodsBrief.getCouponInfo()); + BigDecimal startFee = list.get(0); + BigDecimal couponAccount = list.get(1); + if (startFee.compareTo(goodsBrief.getZkPrice()) <= 0 + && goodsBrief.getZkPrice().compareTo(couponAccount) > 0) { + BigDecimal finalPrice = goodsBrief.getZkPrice().subtract(couponAccount); + return finalPrice; + } else {// 涓嶈兘鐢ㄥ埜 + return goodsBrief.getZkPrice(); + } + } + } + + /** + * 鑾峰彇鍥炬枃璇︽儏 + * + * @param id + */ + public static List<String> getGoodsTextAndImageDetails(Long id) { + if (id == null) { + return null; + } + long startTime = System.currentTimeMillis(); + + String url = null; + try { + url = String.format("http://hws.m.taobao.com/cache/mtop.wdetail.getItemDescx/4.1/?&data=%s&type=jsonp", + URLEncoder.encode("{\"item_num_id\":\"" + id + "\"}", "UTF-8")); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + List<String> list = new ArrayList<>(); + String html = org.yeshi.utils.HttpUtil.get(url); + String json = html.substring(9, html.length() - 1); + + try { + JSONObject obj = JSONObject.fromObject(json); + JSONArray array = obj.getJSONObject("data").optJSONArray("images"); + for (int i = 0; i < array.size(); i++) { + list.add(array.optString(i)); + } + LogHelper.test("鑾峰彇鍟嗗搧鍥炬枃璇︽儏鑰楁椂:" + (System.currentTimeMillis() - startTime)); + } catch (Exception e) { + + } + return list; + } + + public static String getSaleCount(int count) { + if (count >= 10000) { + double sales = count; + String salesCountMidea = String.format("%.1f", sales / 10000); + return salesCountMidea + "涓�"; + } else + return count + ""; + } + + public static List<TaoBaoProvince> getTaoBaoProvinceList() { + if (taoBaoProvinceList == null) { + taoBaoProvinceList = new ArrayList<>(); + // 瑙f瀽 + try { + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + DocumentBuilder builder = factory.newDocumentBuilder(); + org.w3c.dom.Document doc = builder + .parse(TaoBaoUtil.class.getClassLoader().getResourceAsStream("taobao_address.xml")); + NodeList nodeList = doc.getElementsByTagName("province"); + nodeList = nodeList.item(0).getChildNodes(); + for (int i = 0; i < nodeList.getLength(); i++) { + TaoBaoProvince province = new TaoBaoProvince(); + org.w3c.dom.Node node = nodeList.item(i); + if (node.getNodeName().equalsIgnoreCase("topName")) { + NamedNodeMap map = node.getAttributes(); + for (int n = 0; n < map.getLength(); n++) { + if (map.item(n).getNodeName().equalsIgnoreCase("id")) { + province.setId(map.item(n).getNodeValue()); + } else if (map.item(n).getNodeName().equalsIgnoreCase("name")) { + province.setName(map.item(n).getNodeValue()); + } + } + taoBaoProvinceList.add(province); + } + } + + } catch (Exception e) { + + } + } + return taoBaoProvinceList; + } + + public static List<ImageInfo> getTBDetailImageWithSize(String auctionId) { + + List<ImageInfo> imgList = new ArrayList<>(); + + long startTime = System.currentTimeMillis(); + JSONObject data = new JSONObject(); + data.put("id", auctionId + ""); + String url = ""; + try { + url = String.format( + "https://h5api.m.taobao.com/h5/mtop.taobao.detail.getdesc/6.0/?data=%s&callback=GoodsLogic.showTuwen&_=%s", + URLEncoder.encode(data.toString(), "UTF-8"), System.currentTimeMillis() + ""); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + String result = HttpUtil.get(url); + result = result.replace("GoodsLogic.showTuwen(", "").replace(")", ""); + data = JSONObject.fromObject(result); + String pcDescContent = data.optJSONObject("data").optString("pcDescContent"); + System.out.println(pcDescContent); + if (!StringUtil.isNullOrEmpty(pcDescContent)) { + try { + Document doc = Jsoup.parse(pcDescContent); + Elements eles = doc.getElementsByTag("img"); + for (int i = 0; i < eles.size(); i++) { + String imgSrc = eles.get(i).attr("src"); + if (imgSrc.endsWith(".jpg")) { + if (!imgSrc.startsWith("http")) + imgSrc = "https:" + imgSrc; + imgList.add(new ImageInfo(imgSrc, 0, 0)); + } + } + } catch (Exception e) { + } + } + System.out.println("璇锋眰璇︽儏鑰楁椂:" + (System.currentTimeMillis() - startTime)); + return imgList; + } + + /** + * @param auctionId + * @return + */ + + public static List<ImageInfo> getTBDetailImageWithSizev2(String auctionId, ProxyIP ip) { + List<ImageInfo> imgList = new ArrayList<>(); + try { + Map<String, String> headers = new HashMap<>(); + headers.put("User-Agent", + "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1"); + headers.put("Referer", "https://detail.tmall.com/item.htm?id=" + auctionId); + String url = String.format("https://hws.m.taobao.com/cache/desc/5.0?id=" + auctionId); + String result = HttpUtil.get(url, headers, ip); + if (!StringUtil.isNullOrEmpty(result)) { + JSONObject data = JSONObject.fromObject(result); + + JSONArray array = data.optJSONObject("wdescContent").optJSONArray("pages"); + if (array != null) { + String html = ""; + for (int i = 0; i < array.size(); i++) { + String itemStr = array.optString(i).replace("<img", "<a").replace("</img>", "<a>"); + html += itemStr; + } + Document doc = Jsoup.parse(html); + Elements items = doc.getElementsByTag("a"); + for (int i = 0; i < items.size(); i++) { + ImageInfo img = new ImageInfo(); + Element item = items.get(i); + if (StringUtil.isNullOrEmpty(item.ownText())) + continue; + if (!StringUtil.isNullOrEmpty(item.attr("size"))) { + img.setWidth(Integer.parseInt(item.attr("size").split("x")[0])); + img.setHeight(Integer.parseInt(item.attr("size").split("x")[1])); + } + if (item.ownText().startsWith("http")) + img.setPicture(item.ownText().trim()); + else + img.setPicture("http:" + item.ownText().trim()); + if (img != null && img.getPicture() != null && img.getPicture().endsWith(".jpg")) + imgList.add(img); + } + + } + } + + } catch (Exception e) { + e.printStackTrace(); + try { + LogHelper.errorDetailInfo(e); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + return imgList; + } + + /** + * 闃块噷鐧惧窛杞摼鎺ュ彛锛堟殏鏃舵棤娉曚娇鐢級 + * + * @param auctionId + * @param appKey + * @param adzoneId + * @return + */ + public static String getBaiChuanConvertLink(String auctionId, String appKey, String adzoneId) { + String url = "http://acs4baichuan.m.taobao.com/gw-open/mtop.taobao.tbk.sdk.item.convert/1.0/"; + JSONObject params = new JSONObject(); + params.put("mcid", "tunion4android@862977040115210"); + params.put("appVersion", "1.3.4"); + params.put("os", "android8.0.0"); + params.put("taokeAppkey", appKey); + params.put("jtype", "tb"); + params.put("aliapp", "tb"); + params.put("adzoneid", adzoneId); + params.put("url", "https://h5.m.taobao.com/awp/core/detail.htm?id=" + auctionId); + params.put("deviceModel", "LND-AL30"); + params.put("sdkVersion", "0.3.2"); + params.put("packageName", "com.yeshi.ec.rebate"); + params.put("cid", "tunion4android@862977040115210_1536222395791"); + + try { + url += "?data=" + URLEncoder.encode(params.toString(), "UTF-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + + String result = HttpUtil.get(url); + System.out.println(result); + return null; + } + + /** + * 甯歌鍟嗗搧杞负娣樺疂鍟嗗搧瀵硅薄 + * + * @param commonGoods + * @return + */ + public static TaoBaoGoodsBrief convert(CommonGoods commonGoods) { + TaoBaoGoodsBrief taoBaoGoods = new TaoBaoGoodsBrief(); + if(!StringUtil.isNullOrEmpty(commonGoods.getGoodsSign())) { + taoBaoGoods.setAuctionId(commonGoods.getGoodsSign()); + }else{ + taoBaoGoods.setAuctionId(commonGoods.getGoodsId()); + } + taoBaoGoods.setBiz30day(commonGoods.getSales()); + taoBaoGoods.setCouponAmount(commonGoods.getCouponAmount()); + taoBaoGoods.setCouponInfo(commonGoods.getCouponInfo()); + taoBaoGoods.setCouponLeftCount(commonGoods.getCouponLeftCount()); + taoBaoGoods.setCouponStartFee(commonGoods.getCouponStartPrice()); + taoBaoGoods.setCouponTotalCount(commonGoods.getCouponTotalCount()); + taoBaoGoods.setPictUrl(commonGoods.getPicture()); + taoBaoGoods.setPictUrlWhite(commonGoods.getPictureWhite()); + taoBaoGoods.setSellerId(commonGoods.getSellerId()); + taoBaoGoods.setShopTitle(commonGoods.getSellerName()); + taoBaoGoods.setTitle(commonGoods.getTitle()); + taoBaoGoods.setUserType(commonGoods.getShopType() - 1); + taoBaoGoods.setZkPrice(commonGoods.getPrice()); + taoBaoGoods.setTkRate(commonGoods.getRate()); + taoBaoGoods.setTkCommFee(new BigDecimal("0")); + taoBaoGoods.setState(commonGoods.getState()); + taoBaoGoods.setCreatetime(commonGoods.getCreateTime()); + return taoBaoGoods; + } + + public static TaoBaoGoodsBrief convert(DaTaoKeDetailV2 detail) { + TaoBaoGoodsBrief taoBaoGoods = new TaoBaoGoodsBrief(); + taoBaoGoods.setAuctionId(detail.getGoodsId()); + taoBaoGoods.setBiz30day(detail.getMonthSales()); + // 鍒哥浉鍏宠浆鎹� + taoBaoGoods.setCouponAmount(detail.getCouponPrice()); + taoBaoGoods.setCouponInfo(String.format("婊�%s鍏冨噺%s鍏�", detail.getOriginalPrice(), + MoneyBigDecimalUtil.getWithNoZera(detail.getCouponPrice()))); + if (detail.getCouponTotalNum() != null && detail.getCouponReceiveNum() != null) + taoBaoGoods.setCouponLeftCount(detail.getCouponTotalNum() - detail.getCouponReceiveNum()); + else + taoBaoGoods.setCouponLeftCount(0); + taoBaoGoods.setCouponStartFee(detail.getOriginalPrice()); + try { + taoBaoGoods.setCouponStartFee(detail.getOriginalPrice()); + } catch (Exception e) { + } + + taoBaoGoods.setCouponTotalCount(detail.getCouponTotalNum()); + taoBaoGoods.setCouponLink(detail.getCouponLink()); + taoBaoGoods.setCouponEffectiveStartTime(TimeUtil.getGernalTime( + TimeUtil.convertToTimeTemp(detail.getCouponStartTime(), "yyyy-MM-dd HH:mm:ss"), "yyyy-MM-dd")); + taoBaoGoods.setCouponEffectiveEndTime(TimeUtil.getGernalTime( + TimeUtil.convertToTimeTemp(detail.getCouponEndTime(), "yyyy-MM-dd HH:mm:ss"), "yyyy-MM-dd")); + + taoBaoGoods.setPictUrl(detail.getMainPic()); + taoBaoGoods.setPictUrlWhite(detail.getMainPic()); + if (taoBaoGoods.getPictUrl() != null && !taoBaoGoods.getPictUrl().startsWith("http")) + taoBaoGoods.setPictUrl("https:" + taoBaoGoods.getPictUrl()); + + if (taoBaoGoods.getPictUrlWhite() != null && !taoBaoGoods.getPictUrlWhite().startsWith("http")) + taoBaoGoods.setPictUrlWhite("https:" + taoBaoGoods.getPictUrlWhite()); + + + String imgs = detail.getImgs(); + if (!StringUtil.isNullOrEmpty(imgs)) { + String[] array = imgs.split(","); + if (array != null && array.length > 0) { + List<String> imgList = new ArrayList<>(); + for (int i = 0; i < array.length; i++) { + imgList.add(array[i]); + } + taoBaoGoods.setImgList(imgList); + } + } + + + taoBaoGoods.setSellerId(detail.getSellerId()); + taoBaoGoods.setShopTitle(detail.getShopName()); + taoBaoGoods.setTitle(detail.getDtitle()); + taoBaoGoods.setUserType(detail.getShopType()); + taoBaoGoods.setZkPrice(detail.getOriginalPrice()); + taoBaoGoods.setTkRate(detail.getCommissionRate()); + taoBaoGoods.setTkCommFee(new BigDecimal("0")); + taoBaoGoods.setState(0); + return taoBaoGoods; + } + + /** + * 鑾峰彇娣樺疂鑱旂洘鐨勬巿鏉冮摼鎺� + * + * @param appKey -搴旂敤Key + * @param callBackUrl -鍥炶皟閾炬帴 + * @param uid-鐢ㄦ埛ID + * @return + */ + public static String getTaoBaoUnionAuthUrl(String appKey, String callBackUrl, Long uid, String source) { + if (uid == null) + return null; + long timestamp = System.currentTimeMillis(); + JSONObject json = new JSONObject(); + json.put("u", uid); + json.put("t", timestamp); + json.put("s", source); + String url = null; + try { + url = String.format( + "https://oauth.taobao.com/authorize?response_type=code&client_id=%s&redirect_uri=%s&state=%s&view=wap", + appKey, callBackUrl, + URLEncoder.encode(AESUtil.encrypt(json.toString(), Constant.UIDAESKEY), "UTF-8")); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + return url; + } + + /** + * 鑾峰彇娣樺疂鐨勫晢鍝佽鎯� + * + * @param actionId + * @return + */ + public static TaoBaoGoodsBrief getSimpleGoodsBrief(String actionId) { + JSONObject data = new JSONObject(); + data.put("itemNumId", actionId + ""); + + String url = ""; + try { + url = String.format( + "http://acs.m.taobao.com/h5/mtop.taobao.detail.getdetail/6.0/?data=%s&qq-pf-to=pcqq.group", + URLEncoder.encode(data.toString(), "UTF-8")); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + + String result = null; + try { + Connection.Response doc = Jsoup.connect(url).ignoreContentType(true).timeout(1000 * 10) + .userAgent( + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18362") + .header("Accept", "text/html, application/xhtml+xml, application/xml; q=0.9, */*; q=0.8") + .header("Accept-Language", "zh-CN").header("Host", "acs.m.taobao.com") + .header("Upgrade-Insecure-Requests", "1") + .header("Cookie", + "_cc_=VFC%2FuZ9ajQ%3D%3D; isg=BLu7TvdFYk89dV4DMXO7XNRGU58lEM8SDjV-ja14l7rRDNvuNeBfYtlOJmznNycK; thw=cn; miid=1490566681358073134; x=e%3D1%26p%3D*%26s%3D0%26c%3D0%26f%3D0%26g%3D0%26t%3D0%26__ll%3D-1%26_ato%3D0; cna=ZW8rFCpNP1gCAWpXAiKqMzqi; tracknick=tb23001560; l=cBxbffilq1UJdAFCBOCanurza77OSdAYYuPzaNbMi_5NE6T1BR7Ok6G1vF96VsWdOW8B4NSiTkp9-etkZ3Znq9SpXUJ1.; tg=0; _w_app_lg=19; WAPFDFDTGFG=%2B4cMKKP%2B8PI%2BtNYpkiAuTPLkiJB1kcwi") + .execute(); + result = doc.body(); + } catch (Exception e1) { + e1.printStackTrace(); + } + + JSONObject resultOBJ = JSONObject.fromObject(result); + if (resultOBJ.optJSONObject("data") != null) { + data = resultOBJ.optJSONObject("data"); + if (data != null) { + JSONObject item = data.optJSONObject("item"); + if (item != null) { + JSONObject seller = data.optJSONObject("seller"); + TaoBaoGoodsBrief goods = new TaoBaoGoodsBrief(); + goods.setTitle(item.optString("title")); + goods.setAuctionId(item.optString("itemId")); + goods.setTitle(item.optString("title")); + if (item.optJSONArray("images") != null && item.optJSONArray("images").size() > 0) { + String picture = item.optJSONArray("images").optString(0); + goods.setPictUrl(picture.startsWith("http") ? picture : "https:" + picture); + } + if (seller != null) { + goods.setSellerId(seller.optLong("shopId")); + String shopType = seller.optString("shopType"); + if ("B".equalsIgnoreCase(shopType)) { + goods.setUserType(1); + } else + goods.setUserType(0); + goods.setShopTitle(seller.optString("shopName")); + } + return goods; + } + } + } + return null; + } + + /** + * 鏍规嵁鍟嗗搧ID鑾峰彇搴楅摵璇︽儏 + * + * @param auctionId + * @return + */ + public static TaoBaoShop getTaoBaoShopDetailByAuctionId(String auctionId) { + JSONObject data = new JSONObject(); + data.put("itemNumId", auctionId + ""); + + String url = ""; + try { + url = String.format("https://acs.m.taobao.com/h5/mtop.taobao.detail.getdetail/6.0/?data=%s", + URLEncoder.encode(data.toString(), "UTF-8")); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + String result = HttpUtil.get(url); + + TaoBaoShop shop = new TaoBaoShop(); + + try { + JSONObject resultJson = JSONObject.fromObject(result); + JSONObject dataJson = resultJson.optJSONObject("data"); + JSONObject sellerJson = dataJson.optJSONObject("seller"); + + shop.setGoodRatePercentage(new BigDecimal(sellerJson.optString("goodRatePercentage").replace("%", ""))); + + LogHelper.test("鍗栧淇℃伅:" + result); + shop.setId(sellerJson.optLong("userId")); + JSONArray array = sellerJson.optJSONArray("evaluates"); + for (int i = 0; i < array.size(); i++) { + JSONObject item = array.optJSONObject(i); + if ("瀹濊礉鎻忚堪".equalsIgnoreCase(item.optString("title").trim())) { + shop.setScoreGoods(new BigDecimal(item.optString("score").trim())); + shop.setScoreGoodsD(new BigDecimal(item.optString("level").trim())); + } else if ("鍗栧鏈嶅姟".equalsIgnoreCase(item.optString("title").trim())) { + shop.setScoreSeller(new BigDecimal(item.optString("score").trim())); + shop.setScoreSellerD(new BigDecimal(item.optString("level").trim())); + } else if ("鐗╂祦鏈嶅姟".equalsIgnoreCase(item.optString("title").trim())) { + shop.setScoreLogistics(new BigDecimal(item.optString("score").trim())); + shop.setScoreLogisticsD(new BigDecimal(item.optString("level").trim())); + } + } + + shop.setSellerNick(sellerJson.optString("sellerNick")); + shop.setShopIcon("https:" + sellerJson.optString("shopIcon")); + shop.setShopId(sellerJson.optLong("shopId")); + shop.setShopName(sellerJson.optString("shopName")); + if ("B".equalsIgnoreCase(sellerJson.optString("sellerType"))) + shop.setUserType(1); + else + shop.setUserType(0); + + shop.setShopLink(TaoBaoUtil.getShopLink(shop.getId())); + } catch (Exception e) { + // if (1 > 0) + // return null; + try { + TaoBaoGoodsBrief goods = TaoKeApiUtil.getSimpleGoodsInfo(auctionId); + shop.setId(goods.getSellerId()); + shop.setShopName(goods.getShopTitle()); + shop.setUserType(goods.getUserType()); + } catch (Exception e1) { + shop.setId(1L); + shop.setShopName(""); + shop.setUserType(0); + } + + shop.setGoodRatePercentage(new BigDecimal(100)); + shop.setScoreGoods(new BigDecimal("4.9")); + shop.setScoreGoodsD(new BigDecimal("0")); + shop.setScoreSeller(new BigDecimal("4.9")); + shop.setScoreSellerD(new BigDecimal("0")); + shop.setScoreLogistics(new BigDecimal("4.9")); + shop.setScoreLogisticsD(new BigDecimal("0")); + shop.setSellerNick(""); + shop.setShopIcon("https:"); + shop.setShopLink(TaoBaoUtil.getShopLink(shop.getId())); + } + + return shop; + } + + /** + * 鏍规嵁鍗栧id鑾峰彇搴楅摵閾炬帴 + * + * @param sellerId + * @return + */ + public static String getShopLink(Long sellerId) { + return "http://store.taobao.com/shop/view_shop.htm?user_number_id=" + sellerId; + } + + /** + * 鏄惁鍙互鍔犲叆娣樼ぜ閲戠殑棰勯�夊晢鍝佸簱 + * + * @param goods + * @return + */ + public static boolean canAddToTLJBuyGoods(TaoBaoGoodsBrief goods) { + BigDecimal tljMoney = getShareGoodsHongBaoInfo(goods, TaoBaoConstant.OWN_BUY_WITHOUT_FANLI_RATE); + // 涓嶈兘灏忎簬1鍧� + if (tljMoney.compareTo(new BigDecimal(1)) < 0 || tljMoney.compareTo(new BigDecimal(10)) > 0) + return false; + + // 鍒稿悗浠蜂笉鑳藉ぇ浜�150 + if (getCouponPrice(goods).compareTo(new BigDecimal(150)) > 0) + return false; + + return true; + } + + /** + * 鏌ヨ澶╃尗鍟嗗搧鍥剧墖銆佹爣棰� + * + * @param auctionId + * @return + */ + public static TaoBaoGoodsBrief getTmallGoodsInfo(String auctionId) { + TaoBaoGoodsBrief taoBaoGoodsBrief = null; + try { + Connection connect = Jsoup.connect(String.format(TM_PHONE_URL, auctionId)); + Document document = connect.get(); + Elements elements = document.getElementsByTag("script"); + if (elements.size() >= 0) { + for (int i = 0; i < elements.size(); i++) { + String content = elements.get(i).toString(); + if (content.contains("var _DATA_Detail")) { + content = content.replace("<script>", ""); + content = content.replace("</script>", ""); + + if (content.contains("videoDetail")) { + content += ";function getData(){ var json={title:_DATA_Detail.item.title,pictUrl:_DATA_Detail.item.images[0]}; return JSON.stringify(json);}"; + } else { + content += ";function getData(){ var json={title:_DATA_Detail.item.title,pictUrl:_DATA_Detail.item.images[0]}; return JSON.stringify(json);}"; + } + + ScriptEngineManager manager = new ScriptEngineManager(); + ScriptEngine engine = manager.getEngineByName("javascript"); + engine.eval(content); + + if (engine instanceof Invocable) { + Invocable in = (Invocable) engine; + JSONObject json = JSONObject.fromObject(in.invokeFunction("getData")); + Object title = json.get("title"); + Object pictUrl = json.get("pictUrl"); + taoBaoGoodsBrief = new TaoBaoGoodsBrief(); + taoBaoGoodsBrief.setTitle(title.toString()); + taoBaoGoodsBrief.setPictUrl(pictUrl.toString()); + if (!pictUrl.toString().startsWith("http")) { + taoBaoGoodsBrief.setPictUrl(TbImgUtil.getTBSize220Img("http:" + pictUrl.toString())); + } + } + + break; + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return taoBaoGoodsBrief; + } + + /** + * 鎶栭煶杩斿埄local 鑾峰彇鐪熷疄娣樺疂閾炬帴 + * + * @param url https://s.click.taobao.com/t?e=m%3D2%26s% + * 3DT9DFpHQCT7Rw4vFB6t2Z2ueEDrYVVa64XoO8tOebS+dRAdhuF14FMR8 + * @return + */ + public static String getRealUrl(String url) { + if (StringUtil.isNullOrEmpty(url)) + return null; + + try { + HttpClient client = new HttpClient(new MultiThreadedHttpConnectionManager()); + client.getHttpConnectionManager().getParams().setConnectionTimeout(10000); + client.getParams().setParameter(HttpMethodParams.USER_AGENT, + "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)"); // 璁╂湇鍔″櫒璁や负鏄疘E + GetMethod get = new GetMethod(url); + get.setFollowRedirects(false); // 绂佹鑷姩閲嶅畾鍚� + int iGetResultCode = client.executeMethod(get); + String location = get.getResponseHeader("location").getValue(); // 鎵撳嵃鍦板潃 + GetMethod get2 = new GetMethod(URLDecoder.decode(location.split("tu=")[1])); + get2.addRequestHeader("Referer", location); + get2.setFollowRedirects(false); // 绂佹鑷姩閲嶅畾鍚� + int iGetResultCode2 = client.executeMethod(get2); + return get2.getResponseHeader("location").getValue(); // 鐪熷疄鍦板潃 + } catch (Exception ex) { + ex.printStackTrace(); + } + return null; + } + + /** + * 娣樺彛浠よ繃婊� + * + * @param token + * @return + */ + public static String filterTaoToken(String token) { + if (StringUtil.isNullOrEmpty(token)) + return token; + if (token.contains("锟�") || token.contains("鈧�")) { + String newToken = ""; + for (int i = 0; i < token.length(); i++) { + if (token.charAt(i) == '锟�' || token.charAt(i) == '鈧�') { + if (!newToken.contains("(")) + newToken += "("; + else + newToken += ")"; + } else + newToken += token.charAt(i) + ""; + } + return newToken; + } + return token; + } + + /** + * 鎻愬彇鑷湁鏍煎紡鐨勬窐鍙d护 + * + * @param str + * @return + */ + public static String parseSystemTaoToken(String str) { + String pattern = "(\\({1}[A-Za-z0-9]+\\){1})"; + Pattern r = Pattern.compile(pattern); + Matcher m = r.matcher(str); + while (m.find()) { + String group = m.group(0); + if (!StringUtil.isNullOrEmpty(group) && group.length() >= 10) + return group; + } + return null; + } + + public static boolean isSpecialGoods(Integer materialLibType) { + if (materialLibType != null && materialLibType == 1) + return true; + else + return false; + } + + private final static String[] taoTokenSymbols = new String[]{"鈧�-鈧�", "楼-楼", "锟�-锟�", "鈧�-鈧�", "\\$-\\$", "鈧�-鈧�", "垄-垄", + "鈧�-鈧�"}; + + /** + * 浠庢枃鏈腑鎻愬彇娣樺彛浠� @Title: getTokenListFromText @Description: @param str @return + * List<String> 杩斿洖绫诲瀷 @throws + */ + public static List<String> getTokenListFromText(String str) { + String[] marks = taoTokenSymbols; + List<String> list = new ArrayList<>(); + for (String m : marks) { + for (String m1 : marks) { + list.add(m.split("-")[0] + "-" + m1.split("-")[1]); + } + } + + return getTokenListFromText(str, list); + } + + /** + * 浠庢枃鏈腑鎻愬彇娣樺彛浠�(鎷彿鐨勫彛浠や篃绠�) + * + * @param str + * @return + */ + public static List<String> getTokenListFromTextWithKuoHao(String str) { + String[] marks = taoTokenSymbols; + List<String> list = new ArrayList<>(); + for (String m : marks) { + for (String m1 : marks) { + list.add(m.split("-")[0] + "-" + m1.split("-")[1]); + } + } + + list.add("\\(-\\)"); + list.add("锛�-锛�"); + return getTokenListFromText(str, list); + } + + public static List<String> getTokenListFromText(String str, List<String> markList) { + List<String> expressList = new ArrayList<>(); + for (String st : markList) { + expressList.add(String.format("(%s{1}[A-Za-z0-9]{11,13}+%s{1})", st.split("-")[0], st.split("-")[1])); + } + String pattern = StringUtil.concat(expressList, "|"); + Pattern r = Pattern.compile(pattern); + Matcher m = r.matcher(str); + List<String> urlList = new ArrayList<>(); + while (m.find()) { + urlList.add(m.group()); + } + return urlList; + } + + /** + * 鑾峰彇鑳藉鍒嗙殑閽� + * + * @param estimate + * @return BigDecimal 杩斿洖绫诲瀷 + * @throws + * @Title: getCanShareMoney + * @Description: + */ + public static BigDecimal getCanShareMoney(Date createTime, BigDecimal estimate) { + if (estimate == null) + return null; + if (createTime.getTime() < TimeUtil.convertToTimeTemp("2020-06-01 12:30:00", "yyyy-MM-dd HH:mm:ss")) { + return estimate; + } + BigDecimal rate = new BigDecimal("0.9101"); + return MoneyBigDecimalUtil.mul(estimate, rate); + } + + /** + * 鎷兼帴娓犻亾ID + * + * @param url + * @param relationId + * @return + */ + public static String concatRelationId(String url, String relationId) { + if (StringUtil.isNullOrEmpty(url)) { + return url; + } + if (StringUtil.isNullOrEmpty(relationId)) + return url; + if (!url.contains("&relationId=")) + if(url.contains("?")) { + return url + "&relationId=" + relationId; + }else{ + return url + "?relationId=" + relationId; + } + else + return url; + } + + + //浠庡埜閾炬帴鑾峰彇鍒窱D + + /** + * 浠庡埜閾炬帴涓幏鍙栧埜ID + * + * @param couponLink + * @return + */ + public static String getActivityIdFromCouponLink(String couponLink) { + Map<String, String> params = HttpUtil.getPramsFromUrl(couponLink); + if (params != null && params.containsKey("activityId")) + return params.get("activityId"); + return null; + } + + + /** + * 鑾峰彇娣樺疂鎺堟潈閾炬帴 + * + * @param uid + * @param source + * @return + */ + public static String getTaoBaoAuthLink(Long uid, String source) { + return TaoBaoUtil.getTaoBaoUnionAuthUrl(TaoBaoConstant.TAOBAO_AUTH_APPKEY, + "http://api.flqapp.com/fanli/client/v1/auth/callback/tb", uid, source); + } + + + /** + * 鏄惁涓烘窐瀹濈郴鐨勯摼鎺� + * + * @param link + * @return + */ + public static boolean isTaoBaoLink(String link) { + TaoBaoGoodsBrief tb = null; + String auctionId = null; + if (link.startsWith("https://a.m.taobao.com/i"))// 娣樺疂璐﹀彿鏈櫥褰曠姸鎬� + { + return true; + } else if (link.contains("ju.taobao.com") || link.contains(".juhuasuan.com")) {// 鑱氬垝绠� + return true; + } else if (link.contains("http://zmnxbc.com")) { // 鎵嬫満绔ぉ鐚獳PP鍒嗕韩 + return true; + } else if (link.contains("m.tb.cn") || link.contains("h5.m.taobao") || link.contains("detail.m.tmall") || link.contains("item.taobao") + || link.contains("detail.tmall")) { // 鎵嬫満椤甸潰鍜岀數鑴戦〉闈� + return true; + } else if (link.contains("//s.click.taobao.com")) { + return true; + } + + return false; + + } + + + /** + * 鏄惁鏈夋柊鐗堟窐鍙d护 + * + * @param text + * @return + */ + public static boolean isHaveNewVersionTaoBaoToken(String text) { + if (text == null) + return false; + + int count = 0; + for (int i = 0; i < text.length(); i++) { + //澶у皬鍐欏瓧姣�+鏁板瓧 + if ((text.charAt(i) >= 65 && text.charAt(i) <= 90) || (text.charAt(i) >= 97 && text.charAt(i) <= 122) || (text.charAt(i) >= 48 && text.charAt(i) <= 57)) { + count++; + if (count >= 10) + return true; + } else { + count = 0; + } + } + return false; + } + + /** + * @return boolean + * @author hxh + * @description 鍒ゆ柇娣樺疂鍟嗗搧ID鏄惁鐩哥瓑 + * @date 14:55 2022/8/24 + * @param: auctionId1 + * @param: auctionId2 + **/ + public static boolean isEqual(String auctionId1, String auctionId2) { + if (auctionId1 == null || auctionId2 == null) { + return false; + } + + if (auctionId1.indexOf("-") > 0 && auctionId2.indexOf("-") > 0) { + return auctionId1.split("-")[1].equals(auctionId2.split("-")[1]); + } + return auctionId1.equals(auctionId2); + } + + /** + * @return java.lang.String + * @author hxh + * @description 鑾峰彇鍟嗗搧ID鐨勫悗鍗婃 + * @date 15:20 2022/8/24 + * @param: auctionId + **/ + public static String getAuctionId(String auctionId) { + if (auctionId == null) + return auctionId; + if (auctionId.indexOf("-") > 0) { + return auctionId.split("-")[1]; + } else { + return auctionId; + } + + } + + /** + * @return org.springframework.data.mongodb.core.query.Criteria + * @author hxh + * @description 鑾峰彇mongodb鍟嗗搧ID鐩稿悓鐨勬潯浠� + * @date 16:05 2022/8/24 + * @param: key + * @param: auctionId + **/ + public static Criteria getAuctionIdEqualCriteria(String key, String auctionId) { + if (!isNewAuctionId(auctionId)) { + return Criteria.where(key).is(auctionId); + } else { + return Criteria.where(key).regex("-" + getAuctionId(auctionId)); + } + } + + /** + * @return boolean + * @author hxh + * @description 鏄惁涓烘柊鐨勫晢鍝両D + * @date 15:39 2022/8/24 + * @param: auctionId + **/ + public static boolean isNewAuctionId(String auctionId) { + if (auctionId != null && auctionId.indexOf("-") > 0) + return true; + return false; + } + + /** + * @return java.lang.String + * @author hxh + * @description 鑾峰彇娣樺疂鐨勫晢鍝佹爣棰� + * @date 11:36 2022/9/9 + **/ + public static String getGoodsTitleFromTokenText(String text) { + String reg = "銆�.*銆�"; + Pattern p = Pattern.compile(reg); + Matcher matcher = p.matcher(text); + if (matcher.find()) { + String title = matcher.group(); + if(title!=null&&title.length()>0) { + return title.replace("銆�","").replace("銆�",""); + } + } + return null; + } + + + public static void main(String[] args) { +// String reg = "銆�.*銆�"; +// Pattern p = Pattern.compile(reg); +// Matcher matcher = p.matcher("銆愭窐瀹濄�慼ttps://m.tb.cn/h.Ub3d7Kb?tk=g2Az2EmdcIX CZ3457 銆岄�犳ⅵ銆愯敺钖囧皯濂炽�戝鍙ょ鑺辩墰濂剁粧缇婄緮缁掓瘺姣鍐繚鏆栦紤闂叉娌欏彂姣�峔n" + +// "鐐瑰嚮閾炬帴鐩存帴鎵撳紑"); +// if (matcher.find()) { +// String title = matcher.group(); +// System.out.println(title); +// } + String relationId = "1222"; + String url="http://123id=123"; + if(url.contains("?")) { + System.out.println(url + "&relationId=" + relationId); + }else{ + System.out.println(url + "?relationId=" + relationId); + } + } + +} -- Gitblit v1.8.0