From 822e2bc06f9e95f357867d457c004e7bb1f67db8 Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期一, 26 八月 2019 16:27:15 +0800
Subject: [PATCH] 签到通知
---
fanli/src/main/java/com/yeshi/fanli/util/pinduoduo/PinDuoDuoUtil.java | 518 +++++++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 482 insertions(+), 36 deletions(-)
diff --git a/fanli/src/main/java/com/yeshi/fanli/util/pinduoduo/PinDuoDuoUtil.java b/fanli/src/main/java/com/yeshi/fanli/util/pinduoduo/PinDuoDuoUtil.java
index 4df3382..55807c4 100644
--- a/fanli/src/main/java/com/yeshi/fanli/util/pinduoduo/PinDuoDuoUtil.java
+++ b/fanli/src/main/java/com/yeshi/fanli/util/pinduoduo/PinDuoDuoUtil.java
@@ -1,50 +1,72 @@
package com.yeshi.fanli.util.pinduoduo;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
+import java.net.URLEncoder;
+import java.util.ArrayList;
+import java.util.List;
+import javax.script.Invocable;
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineManager;
+import javax.script.ScriptException;
+
+import org.apache.commons.httpclient.HttpClient;
+import org.apache.commons.httpclient.methods.PostMethod;
+import org.jsoup.Jsoup;
+import org.jsoup.nodes.Document;
+import org.jsoup.select.Elements;
import org.yeshi.utils.BigDecimalUtil;
+import org.yeshi.utils.HttpUtil;
import com.yeshi.fanli.dto.pdd.PDDGoodsDetail;
+import com.yeshi.fanli.dto.pdd.PDDGoodsResult;
+import com.yeshi.fanli.dto.pdd.PDDSearchFilter;
+import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.util.MoneyBigDecimalUtil;
+import com.yeshi.fanli.util.StringUtil;
+import com.yeshi.fanli.util.jd.JDUtil;
+
+import net.sf.json.JSONArray;
+import net.sf.json.JSONObject;
public class PinDuoDuoUtil {
-
/**
* 鍟嗗搧浣i噾璁$畻
+ *
* @param goods
* @param rate
* @return
*/
public static BigDecimal getGoodsFanLiMoney(PDDGoodsDetail goods, BigDecimal rate) {
BigDecimal money = null;
- BigDecimal price = new BigDecimal(goods.getMinNormalPrice());
- BigDecimal promotionRate = new BigDecimal(goods.getPromotionRate());
-
+ BigDecimal hundred = new BigDecimal(100);
+ rate = MoneyBigDecimalUtil.div(rate, hundred);
+ BigDecimal price = MoneyBigDecimalUtil.div(new BigDecimal(goods.getMinGroupPrice()), hundred).setScale(2);
+ BigDecimal promotionRate = MoneyBigDecimalUtil.div3(new BigDecimal(goods.getPromotionRate()),
+ new BigDecimal(1000));
+
Boolean hasCoupon = goods.getHasCoupon();
if (hasCoupon == null || !hasCoupon) {
- money = MoneyBigDecimalUtil.mul(MoneyBigDecimalUtil.mul(
- MoneyBigDecimalUtil.mul(price, promotionRate),new BigDecimal("0.001")),
- MoneyBigDecimalUtil.div(rate, new BigDecimal(100)));
+ money = MoneyBigDecimalUtil.mul(MoneyBigDecimalUtil.mul(price, promotionRate), rate);
} else {
- BigDecimal amount = new BigDecimal(goods.getCouponDiscount());
- BigDecimal startFree = new BigDecimal(goods.getCouponMinOrderAmount());
+ BigDecimal amount = MoneyBigDecimalUtil.div(new BigDecimal(goods.getCouponDiscount()), hundred);
+ BigDecimal startFree = MoneyBigDecimalUtil.div(new BigDecimal(goods.getCouponMinOrderAmount()), hundred);
if (startFree.compareTo(price) <= 0 && price.compareTo(amount) > 0) {
BigDecimal finalPrice = price.subtract(amount);
- money = MoneyBigDecimalUtil.mul(MoneyBigDecimalUtil
- .mul(MoneyBigDecimalUtil.mul(finalPrice, promotionRate), new BigDecimal("0.001")),
- MoneyBigDecimalUtil.div(rate, new BigDecimal(100)));
-
+ money = MoneyBigDecimalUtil.mul(MoneyBigDecimalUtil.mul(finalPrice, promotionRate), rate);
} else {// 涓嶈兘鐢ㄥ埜
- money = MoneyBigDecimalUtil.mul(MoneyBigDecimalUtil.mul(
- MoneyBigDecimalUtil.mul(price,promotionRate), new BigDecimal("0.001")),
- MoneyBigDecimalUtil.div(rate, new BigDecimal(100)));
+ money = MoneyBigDecimalUtil.mul(MoneyBigDecimalUtil.mul(price, promotionRate), rate);
}
}
- return BigDecimalUtil.getWithNoZera(money);
+ return BigDecimalUtil.getWithNoZera(money).setScale(2);
}
-
/**
* 璁$畻鍟嗗搧鍒稿悗浠凤紝娌℃湁鍒稿垯杩斿洖鍘熶环
*
@@ -52,32 +74,456 @@
* @return
*/
public static BigDecimal getQuanPrice(PDDGoodsDetail goods) {
- BigDecimal price = new BigDecimal(goods.getMinNormalPrice());
+ BigDecimal hundred = new BigDecimal(100);
+ BigDecimal price = MoneyBigDecimalUtil.div(new BigDecimal(goods.getMinGroupPrice()), hundred);
Boolean hasCoupon = goods.getHasCoupon();
if (hasCoupon == null || !hasCoupon) {
- return price;
+ return price.setScale(2);
}
-
- BigDecimal amount = new BigDecimal(goods.getCouponDiscount());
- BigDecimal startFree = new BigDecimal(goods.getCouponMinOrderAmount());
+
+ BigDecimal amount = MoneyBigDecimalUtil.div(new BigDecimal(goods.getCouponDiscount()), hundred);
+ BigDecimal startFree = MoneyBigDecimalUtil.div(new BigDecimal(goods.getCouponMinOrderAmount()), hundred);
if (startFree.compareTo(price) <= 0) {
BigDecimal quanPrice = MoneyBigDecimalUtil.sub(price, amount);
- return quanPrice;
+ return quanPrice.setScale(2);
} else {
- return price;
+ return price.setScale(2);
}
}
-
- public static String getSaleCount(long count) {
- String salesCountMidea = null;
- if (count < 10000) {
- salesCountMidea = count + "";
- } else {
- double sales = count;
- salesCountMidea = String.format("%.1f", sales / 10000);
- salesCountMidea = salesCountMidea + "涓�";
+
+ public static List<String> getDetailImages(Long id) {
+ List<String> imgList = new ArrayList<>();
+ try {
+ Document doc = Jsoup.connect("http://yangkeduo.com/goods.html?goods_id=" + id)
+ .userAgent(
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36")
+ .get();
+ Elements els = doc.getElementsByTag("script");
+ for (int i = 0; i < els.size(); i++) {
+ if (els.get(i).html().contains("window.rawData")) {
+ String dataJS = els.get(i).html().replace("window.", "var ");
+ dataJS += "function getData(){return JSON.stringify(rawData);}";
+
+ ScriptEngineManager manager = new ScriptEngineManager();
+ ScriptEngine engine = manager.getEngineByName("javascript");
+ try {
+ engine.eval(dataJS);
+ if (engine instanceof Invocable) {
+ Invocable in = (Invocable) engine;
+ String jsonStr = in.invokeFunction("getData").toString();
+ JSONObject json = JSONObject.fromObject(jsonStr);
+ JSONArray array = json.optJSONObject("store").optJSONObject("initDataObj")
+ .optJSONObject("goods").optJSONArray("detailGallery");
+ for (int j = 0; j < array.size(); j++) {
+ imgList.add("http:" + array.optJSONObject(j).optString("url"));
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ break;
+ }
+ }
+ } catch (Exception e1) {
+ e1.printStackTrace();
}
- return salesCountMidea;
+
+ return imgList;
+
}
-
+
+ public static List<Long> getRecommendGoodsId(Long id) {
+ List<Long> list = new ArrayList<Long>();
+ JSONObject params = new JSONObject();
+ params.put("pageNo", 1);
+ params.put("show_tags", 1);
+ params.put("goods_id", id);
+ params.put("app_name", "goods_detail");
+ params.put("list_id", "goods_detail_HgfiMc");
+ params.put("pdduid", StringUtil.Md5(System.currentTimeMillis() + ""));
+
+ HttpClient client = new HttpClient();
+ PostMethod pm = new PostMethod("https://mobile.yangkeduo.com/proxy/api/api/tesla/query");
+ pm.setRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko");
+ pm.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
+ pm.setRequestHeader("Referer", "https://jinbao.pinduoduo.com/promotion/brand-promotion");
+ pm.setRequestBody(params.toString());
+ try {
+ client.executeMethod(pm);
+ String result = pm.getResponseBodyAsString();
+ LogHelper.test("鎷煎澶氱寽浣犲枩娆�:" + result);
+ JSONObject json = JSONObject.fromObject(result);
+ JSONArray array = json.optJSONArray("data");
+ if (array != null) {
+ for (int i = 0; i < array.size(); i++) {
+ list.add(array.optJSONObject(i).optLong("goods_id"));
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ return list;
+ }
+
+ /**
+ * 鎼滅储鍊欓�夎瘝
+ *
+ * @param key
+ * @return
+ */
+ public static List<String> suggestSearch(String key) {
+ List<String> list = new ArrayList<>();
+ if (StringUtil.isNullOrEmpty(key))
+ return list;
+ String url = null;
+ try {
+ url = String.format("http://apiv3.yangkeduo.com/search_suggest?query=%s&pdduid=0",
+ URLEncoder.encode(key, "UTF-8"));
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+
+ if (url == null)
+ return list;
+ try {
+ String result = HttpUtil.get(url);
+ JSONObject dataJSON = JSONObject.fromObject(result);
+ JSONArray array = dataJSON.optJSONArray("suggest_list");
+ for (int i = 0; i < array.size(); i++) {
+ String sk = array.optJSONObject(i).optJSONObject("item_data").optString("suggestion");
+ if (!StringUtil.isNullOrEmpty(sk))
+ list.add(sk);
+ }
+ } catch (Exception e) {
+ }
+ return list;
+ }
+
+ /**
+ * 澶氬杩涘疂鐖彇鏁版嵁-鍝佺墝濂借揣
+ *
+ * @param sf
+ * @return
+ */
+ public static PDDGoodsResult getBrandGoods(PDDSearchFilter sf) {
+ JSONObject params = new JSONObject();
+ params.put("pageNumber", sf.getPage());
+ params.put("pageSize", sf.getPageSize());
+
+ if (sf.getSortType() != null) {
+ params.put("sortType", sf.getSortType());
+ }
+
+ if (sf.getHasCoupon() != null) {
+ params.put("withCoupon", sf.getHasCoupon() ? 1 : 0);
+ }
+
+ if (sf.getKw() != null) {
+ params.put("keyword", sf.getKw());
+ } else {
+ params.put("keyword", "");
+ }
+
+ if (sf.getOptId() != null) {
+ params.put("optId", sf.getOptId());
+ }
+
+ if (sf.getCatId() != null) {
+ params.put("categoryId", sf.getCatId());
+ }
+
+ System.out.println(params.toString());
+
+ HttpClient client = new HttpClient();
+ PostMethod pm = new PostMethod("https://jinbao.pinduoduo.com/network/api/common/brand/goodsList");
+ pm.setRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko");
+ pm.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
+ pm.setRequestHeader("Referer", "https://jinbao.pinduoduo.com/promotion/brand-promotion");
+ pm.setRequestBody(params.toString());
+
+ PDDGoodsResult goodsResult = null;
+
+ try {
+ client.executeMethod(pm);
+ String result = pm.getResponseBodyAsString();
+ System.out.println(result);
+
+ JSONObject json = JSONObject.fromObject(result);
+ Boolean code = json.optBoolean("success");
+ if (code != null && code) {
+ JSONObject root = json.optJSONObject("result");
+ if (root == null) {
+ return null;
+ }
+ JSONArray array = root.optJSONArray("goodsList");
+ if (array == null) {
+ return null;
+ }
+
+ List<PDDGoodsDetail> goodsList = new ArrayList<PDDGoodsDetail>();
+ for (int i = 0; i < array.size(); i++) {
+ PDDGoodsDetail parseGoods = parseGoods(array.getJSONObject(i));
+ if (parseGoods != null) {
+ goodsList.add(parseGoods);
+ }
+ }
+ int totalCount = root.optInt("total");
+
+ goodsResult = new PDDGoodsResult();
+ goodsResult.setGoodsList(goodsList);
+ goodsResult.setTotalCount(totalCount);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ return goodsResult;
+ }
+
+ private static PDDGoodsDetail parseGoods(JSONObject json) {
+ PDDGoodsDetail goods = new PDDGoodsDetail();
+ goods.setMallName(json.optString("mallName"));
+ goods.setMerchantType(json.optInt("merchantType"));
+ goods.setGoodsId(json.optLong("goodsId"));
+ goods.setGoodsName(json.optString("goodsName"));
+ goods.setGoodsDesc(json.optString("goodsDesc"));
+ goods.setSalesTip(json.optString("salesTip"));
+
+ if (json.optString("goodsImageUrl") != null) {
+ goods.setGoodsImageUrl("http:" + json.optString("goodsImageUrl"));
+ }
+
+ if (json.optString("goodsThumbnailUrl") != null) {
+ goods.setGoodsThumbnailUrl("http:" + json.optString("goodsThumbnailUrl"));
+ }
+
+ if (json.optString("minGroupPrice") != null) {
+ goods.setMinGroupPrice(json.getLong("minGroupPrice") / 10);
+ }
+
+ if (json.optString("categoryId") != null) {
+ goods.setCategoryId(json.getLong("categoryId"));
+ }
+
+ goods.setCategoryName(json.optString("categoryName"));
+ goods.setHasCoupon(json.optBoolean("hasCoupon"));
+
+ if (json.optString("couponMinOrderAmount") != null) {
+ goods.setCouponMinOrderAmount(json.getLong("couponMinOrderAmount") / 10);
+ }
+
+ if (json.optString("couponDiscount") != null) {
+ goods.setCouponDiscount(json.getLong("couponDiscount") / 10);
+ }
+
+ if (json.optString("couponTotalQuantity") != null) {
+ goods.setCouponTotalQuantity(json.getLong("couponTotalQuantity"));
+ }
+
+ if (json.optString("couponRemainQuantity") != null) {
+ goods.setCouponRemainQuantity(json.getLong("couponRemainQuantity"));
+ }
+
+ if (json.optString("couponStartTime") != null) {
+ goods.setCouponStartTime(json.getLong("couponStartTime"));
+ }
+
+ if (json.optString("couponEndTime") != null) {
+ goods.setCouponEndTime(json.getLong("couponEndTime"));
+ }
+
+ if (json.optString("promotionRate") != null) {
+ goods.setPromotionRate(json.getLong("promotionRate"));
+ }
+
+ if (json.optString("optId") != null) {
+ goods.setOptId(json.getLong("optId"));
+ }
+
+ return goods;
+ }
+
+ // 鑾峰彇Android鎵撳紑鍘熺敓APP鐨剈ri
+ public static String getAndroidNativeURI(String url) {
+ if (url.contains("duo_coupon_landing.html?")) {
+ int index = url.indexOf("duo_coupon_landing.html?");
+ if (index >= 0) {
+ return "pinduoduo://com.xunmeng.pinduoduo/" + url.substring(index, url.length());
+ }
+ }
+ return null;
+ }
+
+ /**
+ * 澶氬杩涘疂鐖彇鏁版嵁-鍝佺墝濂借揣
+ *
+ * @param sf
+ * @return
+ */
+ public static PDDGoodsResult getTodaySaleGoods() {
+ JSONObject params = new JSONObject();
+ params.put("type", 1);
+ params.put("sortType", 3);
+
+ HttpClient client = new HttpClient();
+ PostMethod pm = new PostMethod("https://jinbao.pinduoduo.com/network/api/common/queryTopGoodsList");
+ pm.setRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko");
+ pm.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
+ pm.setRequestHeader("Referer", "https://jinbao.pinduoduo.com/promotion/hot-promotion");
+ pm.setRequestBody(params.toString());
+
+ PDDGoodsResult goodsResult = null;
+
+ try {
+ client.executeMethod(pm);
+ String result = pm.getResponseBodyAsString();
+ JSONObject json = JSONObject.fromObject(result);
+ Boolean code = json.optBoolean("success");
+ if (code != null && code) {
+ JSONObject root = json.optJSONObject("result");
+ if (root == null) {
+ return null;
+ }
+ JSONArray array = root.optJSONArray("list");
+ if (array == null) {
+ return null;
+ }
+
+ List<PDDGoodsDetail> goodsList = new ArrayList<PDDGoodsDetail>();
+ for (int i = 0; i < array.size(); i++) {
+ PDDGoodsDetail parseGoods = parseTodaySaleGoods(array.getJSONObject(i));
+ if (parseGoods != null) {
+ goodsList.add(parseGoods);
+ }
+ }
+ int totalCount = root.optInt("total");
+
+ goodsResult = new PDDGoodsResult();
+ goodsResult.setGoodsList(goodsList);
+ goodsResult.setTotalCount(totalCount);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ return goodsResult;
+ }
+
+ private static PDDGoodsDetail parseTodaySaleGoods(JSONObject json) {
+ PDDGoodsDetail goods = new PDDGoodsDetail();
+ goods.setMallName(json.optString("mallName"));
+ goods.setMerchantType(json.optInt("merchantType"));
+ goods.setGoodsId(json.optLong("goodsId"));
+ goods.setGoodsName(json.optString("goodsName"));
+ goods.setGoodsDesc(json.optString("goodsDesc"));
+ goods.setSalesTip(json.optString("salesTip"));
+
+ if (json.optString("mallId") != null) {
+ goods.setMallId(json.getLong("mallId"));
+ }
+
+ if (json.optString("goodsImageUrl") != null) {
+ goods.setGoodsImageUrl(json.optString("goodsImageUrl"));
+ }
+
+ if (json.optString("goodsThumbnailUrl") != null) {
+ goods.setGoodsThumbnailUrl(json.optString("goodsThumbnailUrl"));
+ }
+
+ if (json.optString("minGroupPrice") != null) {
+ goods.setMinGroupPrice(json.getLong("minGroupPrice"));
+ }
+
+ if (json.optString("minNormalPrice") != null) {
+ goods.setMinNormalPrice(json.getLong("minNormalPrice"));
+ }
+
+ if (json.optString("categoryId") != null) {
+ goods.setCategoryId(json.getLong("categoryId"));
+ }
+
+ goods.setCategoryName(json.optString("categoryName"));
+ goods.setHasCoupon(json.optBoolean("hasCoupon"));
+
+ if (json.optString("couponMinOrderAmount") != null) {
+ goods.setCouponMinOrderAmount(json.getLong("couponMinOrderAmount"));
+ }
+
+ if (json.optString("couponDiscount") != null) {
+ goods.setCouponDiscount(json.getLong("couponDiscount"));
+ }
+
+ if (json.optString("couponTotalQuantity") != null) {
+ goods.setCouponTotalQuantity(json.getLong("couponTotalQuantity"));
+ }
+
+ if (json.optString("couponRemainQuantity") != null) {
+ goods.setCouponRemainQuantity(json.getLong("couponRemainQuantity"));
+ }
+
+ if (json.optString("couponStartTime") != null) {
+ goods.setCouponStartTime(json.getLong("couponStartTime"));
+ }
+
+ if (json.optString("couponEndTime") != null) {
+ goods.setCouponEndTime(json.getLong("couponEndTime"));
+ }
+
+ if (json.optString("promotionRate") != null) {
+ goods.setPromotionRate(json.getLong("promotionRate"));
+ }
+
+ if (json.optString("optId") != null) {
+ goods.setOptId(json.getLong("optId"));
+ }
+
+ return goods;
+ }
+
+ public static String getJDGoodsJS() {
+ InputStream input = JDUtil.class.getClassLoader().getResourceAsStream("pddGoods.js");
+ StringBuilder sb = new StringBuilder();
+ String line;
+ BufferedReader br = new BufferedReader(new InputStreamReader(input));
+ try {
+ while ((line = br.readLine()) != null) {
+ sb.append(line);
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return sb.toString();
+ }
+
+ static String jdGoodsJs = null;
+ static ScriptEngine engine = null;
+ static {
+ if (jdGoodsJs == null)
+ jdGoodsJs = getJDGoodsJS();
+ ScriptEngineManager manager = new ScriptEngineManager();
+ engine = manager.getEngineByName("javascript");
+ try {
+ engine.eval(jdGoodsJs);
+ } catch (ScriptException e) {
+ e.printStackTrace();
+ }
+
+ }
+
+ public static String getPDDGoodsId(String url) {
+
+ try {
+ if (engine instanceof Invocable) {
+ Invocable in = (Invocable) engine;
+ String goodsId = in.invokeFunction("getGoodsId", url).toString();
+ if (!StringUtil.isNullOrEmpty(goodsId))
+ return goodsId.trim();
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
}
--
Gitblit v1.8.0