From 59aced4fe04f7e2fdcca81cb9ef279a70522301e Mon Sep 17 00:00:00 2001
From: yujian <yujian@163.com>
Date: 星期三, 25 十二月 2019 12:30:44 +0800
Subject: [PATCH] Merge branch 'div' of ssh://193.112.35.168:29418/fanli-server into div

---
 fanli/src/main/java/com/yeshi/fanli/util/jd/JDUtil.java |   93 +++++++++++++++++++++++++++++++++-------------
 1 files changed, 67 insertions(+), 26 deletions(-)

diff --git a/fanli/src/main/java/com/yeshi/fanli/util/jd/JDUtil.java b/fanli/src/main/java/com/yeshi/fanli/util/jd/JDUtil.java
index 1736ded..fb662c0 100644
--- a/fanli/src/main/java/com/yeshi/fanli/util/jd/JDUtil.java
+++ b/fanli/src/main/java/com/yeshi/fanli/util/jd/JDUtil.java
@@ -6,11 +6,13 @@
 import java.io.InputStreamReader;
 import java.io.UnsupportedEncodingException;
 import java.math.BigDecimal;
+import java.net.URLDecoder;
 import java.net.URLEncoder;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
@@ -27,6 +29,7 @@
 import org.jsoup.select.Elements;
 import org.yeshi.utils.BigDecimalUtil;
 import org.yeshi.utils.HttpUtil;
+import org.yeshi.utils.NumberUtil;
 
 import com.yeshi.fanli.dto.GoodsClassDTO;
 import com.yeshi.fanli.dto.jd.JDCommissionInfo;
@@ -36,6 +39,7 @@
 import com.yeshi.fanli.dto.jd.JDSearchResult;
 import com.yeshi.fanli.dto.jd.JDShopInfo;
 import com.yeshi.fanli.entity.jd.JDGoods;
+import com.yeshi.fanli.log.LogHelper;
 import com.yeshi.fanli.tag.PageEntity;
 import com.yeshi.fanli.util.MoneyBigDecimalUtil;
 import com.yeshi.fanli.util.StringUtil;
@@ -625,27 +629,27 @@
 		return null;
 	}
 
-	
 	/**
 	 * 閫氳繃閾炬帴id
+	 * 
 	 * @param url
 	 * @return
 	 */
 	public static String getJDGoodsIdByWeiXin(String url) {
-		if (StringUtil.isNullOrEmpty(url)) 
+		if (StringUtil.isNullOrEmpty(url))
 			return null;
-		
+
 		try {
 			String id = null;
 			int indexOf = url.indexOf("?");
-			url = url.substring(indexOf + 1, url.length()-1);
+			url = url.substring(indexOf + 1, url.length() - 1);
 			String[] temp = url.split("&");
-			for (int i =0; i < temp.length; i ++) {
-				 String content = temp[i];
+			for (int i = 0; i < temp.length; i++) {
+				String content = temp[i];
 				if (content.startsWith("sku")) {
-					id = content.split("=")[content.split("=").length-1];
+					id = content.split("=")[content.split("=").length - 1];
 					break;
-				} 
+				}
 			}
 			return id;
 		} catch (Exception e) {
@@ -653,16 +657,16 @@
 		}
 		return null;
 	}
-	
 
 	/**
 	 * 鏍规嵁 u.jd鐭繛鎺ヨ幏鍙栫湡瀹炵殑鍟嗗搧id
+	 * 
 	 * @param url
 	 * @return
 	 */
 	public static String getJDGoodsIdByUJD(String url) {
 		try {
-			String body =  HttpUtil.get(url);
+			String body = HttpUtil.get(url);
 			Document doc = Jsoup.parse(body);
 			Elements els = doc.getElementsByTag("script");
 			for (int i = 0; i < els.size(); i++) {
@@ -670,35 +674,76 @@
 				if (content.indexOf("var hrl") > -1) {
 					ScriptEngineManager manager = new ScriptEngineManager();
 					ScriptEngine engine = manager.getEngineByName("javascript");
-					
+
 					int indexOf = content.indexOf("var hrl");
 					content = content.substring(indexOf, content.length());
-					
+
 					int indexOf2 = content.indexOf(";");
-					content = content.substring(0, indexOf2+1);
-					
+					content = content.substring(0, indexOf2 + 1);
+
 					String js = "function getData(){return  JSON.stringify(hrl);}" + content;
-						
+
 					engine.eval(js);
 					if (engine instanceof Invocable) {
 						Invocable in = (Invocable) engine;
 						String data = in.invokeFunction("getData").toString();
-						String link = data.substring(1, data.length()-1);
-						
+						String link = data.substring(1, data.length() - 1);
+						// 灏嗛摼鎺ヤ腑鏈猠ncode鐨勫弬鏁癳ncode
+						String param = link.split("\\?")[1];
+						String host = link.split("\\?")[0];
+						String[] params = param.split("&");
+						String paramStr = "";
+						for (String p : params) {
+							String value = p.substring(p.indexOf("=") + 1);
+							String key = p.substring(0, p.indexOf("="));
+							if (URLDecoder.decode(value, "UTF-8").equalsIgnoreCase(value)) {
+								value = URLEncoder.encode(value, "UTF-8");
+							}
+							paramStr += key + "=" + value + "&";
+						}
+						link = host + "?" + paramStr;
 						String realLink = HttpUtil.getLocation(link);
-						realLink = realLink.substring(realLink.indexOf("sku=") + 4, realLink.length());
-						return realLink.substring(0, realLink.indexOf("&"));
+						Map<String, String> paramsMap = new HashMap<>();
+
+						param = realLink.split("\\?")[1];
+						params = param.split("&");
+						for (String p : params) {
+							String value = p.substring(p.indexOf("=") + 1);
+							String key = p.substring(0, p.indexOf("="));
+							paramsMap.put(key, value);
+						}
+						if (!StringUtil.isNullOrEmpty(paramsMap.get("sku"))) {
+							return paramsMap.get("sku");
+						}
+
+						if (!StringUtil.isNullOrEmpty(paramsMap.get("wareId"))) {
+							return paramsMap.get("wareId");
+						}
+
+						// 鍒ゆ柇绾暟瀛楀ぇ浜�4浣嶇殑杩斿洖
+						for (Iterator<String> its = paramsMap.keySet().iterator(); its.hasNext();) {
+							String key = its.next();
+							String value = paramsMap.get(key);
+							if (NumberUtil.isNumeric(value) && value.length() >= 4) {
+								return value;
+							}
+						}
+						String id = JDUtil.getJDGoodsId(realLink);
+						if (!StringUtil.isNullOrEmpty(id)) {
+							return id;
+						}
+						LogHelper.error("浜笢鐭帴瑙f瀽澶辫触:" + url);
+						return null;
 					}
 				}
 			}
 		} catch (Exception e) {
 			e.printStackTrace();
+			LogHelper.errorDetailInfo(e, "浜笢鐭摼鑾峰彇鍟嗗搧ID澶辫触:", url);
 		}
 		return null;
 	}
-	
-	
-	
+
 	/**
 	 * 鏌ヨ澶╃尗鍟嗗搧鍥剧墖銆佹爣棰�
 	 * 
@@ -888,9 +933,5 @@
 		}
 		return getShowCouponInfo(goods.getCouponInfoList(), price);
 	}
-	
-	
-	
-	
 
 }

--
Gitblit v1.8.0