yujian
2019-12-25 59aced4fe04f7e2fdcca81cb9ef279a70522301e
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,9 +629,9 @@
      return null;
   }
   /**
    * 通过链接id
    *
    * @param url
    * @return
    */
@@ -654,9 +658,9 @@
      return null;
   }
   
   /**
    * 根据 u.jd短连接获取真实的商品id
    *
    * @param url
    * @return
    */
@@ -684,20 +688,61 @@
                  Invocable in = (Invocable) engine;
                  String data = in.invokeFunction("getData").toString();
                  String link = data.substring(1, data.length()-1);
                  // 将链接中未encode的参数encode
                  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("京东短接解析失败:" + url);
                  return null;
               }
            }
         }
      } catch (Exception e) {
         e.printStackTrace();
         LogHelper.errorDetailInfo(e, "京东短链获取商品ID失败:", url);
      }
      return null;
   }
   
   /**
    * 查询天猫商品图片、标题
@@ -888,9 +933,5 @@
      }
      return getShowCouponInfo(goods.getCouponInfoList(), price);
   }
}