fanli/src/main/java/com/yeshi/fanli/dto/jd/JDSearchResult.java
@@ -1,11 +1,17 @@ package com.yeshi.fanli.dto.jd; import java.io.Serializable; import java.util.List; import com.yeshi.fanli.entity.jd.JDGoods; import com.yeshi.fanli.tag.PageEntity; public class JDSearchResult { public class JDSearchResult implements Serializable { /** * */ private static final long serialVersionUID = 1L; private PageEntity pageEntity; private List<JDGoods> goodsList; fanli/src/main/java/com/yeshi/fanli/dto/pdd/PDDGoodsResult.java
@@ -1,8 +1,14 @@ package com.yeshi.fanli.dto.pdd; import java.io.Serializable; import java.util.List; public class PDDGoodsResult { public class PDDGoodsResult implements Serializable{ /** * */ private static final long serialVersionUID = 1L; private int totalCount;// 总数量 private List<PDDGoodsDetail> goodsList;// 商品列表 fanli/src/main/java/com/yeshi/fanli/service/impl/jd/JDGoodsServiceImpl.java
@@ -35,7 +35,6 @@ @Resource private HongBaoManageService hongBaoManageService; private Map<String, Long> countMap = new HashMap<String, Long>(); private static final Map<Long, String> cidMap = new HashMap<Long, String>(); @@ -60,7 +59,6 @@ cidMap.put(18L, "6728");// 汽车:汽车用品 } @Override public List<GoodsClass> getSpecialClass() { List<GoodsClass> list = new ArrayList<GoodsClass>(); @@ -84,7 +82,6 @@ list.add(new GoodsClass(18L, "汽车")); return list; } @Cacheable(value = "jdSpecialCache", key = "'specialSearch-'+#page+'-'+#cid") @Override @@ -150,7 +147,6 @@ } } if (!jdcid.contains(",")) { return search(page, Constant.PAGE_SIZE, jdcid); } @@ -169,7 +165,6 @@ } return list; } private List<JDGoods> search(int page, int pageSize, String jdcid) { JDSearchResult result = null; @@ -195,4 +190,24 @@ } } @Cacheable(value = "jdCache", key = "'getIndexJDGoods-'+#page") @Override public JDSearchResult getIndexJDGoods(int page) { JDSearchResult result = null; String way = configService.get("jd_api_search_key"); if ("1".equals(way)) { JDFilter filterAPI = new JDFilter(); filterAPI.setPageIndex(page); filterAPI.setPageSize(20); result = JDApiUtil.queryByKey(filterAPI); } else { // 网页爬取 JDSearchFilter jdfilter = new JDSearchFilter(); jdfilter.setPageNo(page); jdfilter.setPageSize(Constant.PAGE_SIZE); result = JDUtil.searchByKey(jdfilter); } return result; } } fanli/src/main/java/com/yeshi/fanli/service/impl/pdd/PDDGoodsServiceImpl.java
@@ -147,4 +147,11 @@ return list; } @Override @Cacheable(value = "pddSpecialCache", key = "'getIndexPDDGoods-'+#page") public PDDGoodsResult getIndexPDDGoods(int page) { return PinDuoDuoApiUtil.getTopList(PinDuoDuoApiUtil.PID_FANLI, page-1, Constant.PAGE_SIZE, 1); } } fanli/src/main/java/com/yeshi/fanli/service/inter/jd/JDGoodsService.java
@@ -2,6 +2,7 @@ import java.util.List; import com.yeshi.fanli.dto.jd.JDSearchResult; import com.yeshi.fanli.entity.bus.clazz.GoodsClass; import com.yeshi.fanli.entity.jd.JDGoods; import com.yeshi.fanli.exception.jd.JDGoodsException; @@ -25,4 +26,12 @@ public List<JDGoods> specialSearch(Integer page, Long cid) throws JDGoodsException; /** * 首页底部商品搜索 * @param page * @return */ public JDSearchResult getIndexJDGoods(int page); } fanli/src/main/java/com/yeshi/fanli/service/inter/pdd/PDDGoodsService.java
@@ -3,6 +3,7 @@ import java.util.List; import com.yeshi.fanli.dto.pdd.PDDGoodsDetail; import com.yeshi.fanli.dto.pdd.PDDGoodsResult; import com.yeshi.fanli.entity.bus.clazz.GoodsClass; import com.yeshi.fanli.exception.pdd.PDDOrderException; @@ -37,4 +38,11 @@ */ public List<PDDGoodsDetail> specialSearch(Integer page, Long cid) throws PDDOrderException; /** * 首页底部商品 * @param page * @return */ public PDDGoodsResult getIndexPDDGoods(int page); } fanli/src/main/java/com/yeshi/fanli/util/factory/goods/GoodsDetailVOFactory.java
@@ -361,7 +361,7 @@ * @param fanLiRate 返利比例 * @return */ public static GoodsDetailVO convertJDGoods(JDGoods goods, String pid, BigDecimal fanLiRate, BigDecimal shareRate) { public static GoodsDetailVO convertJDGoods(JDGoods goods, BigDecimal fanLiRate, BigDecimal shareRate) { GoodsDetailVO goodsInfo = new GoodsDetailVO(); goodsInfo.setGoodsType(Constant.SOURCE_TYPE_JD); goodsInfo.setGoodsId(goods.getSkuId()); @@ -407,6 +407,8 @@ SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd"); CouponInfoVO coupon = new CouponInfoVO(); coupon.setAmount(discount); coupon.setLink(couponInfo.getLink()); coupon.setStartFee(couponInfo.getQuota()); if (couponInfo.getGetStartTime() != null) { coupon.setStartTime(sdf.format(new Date(couponInfo.getGetStartTime()))); @@ -416,8 +418,6 @@ coupon.setEndTime(sdf.format(new Date(couponInfo.getGetEndTime()))); } coupon.setLink(couponInfo.getLink()); coupon.setStartFee(couponInfo.getQuota()); goodsInfo.setHasCoupon(true); goodsInfo.setCouponInfo(coupon); @@ -467,8 +467,7 @@ * @param fanLiRate 返利比例 * @return */ public static GoodsDetailVO convertPDDGoods(PDDGoodsDetail goods, String pid, BigDecimal fanLiRate, BigDecimal shareRate) { public static GoodsDetailVO convertPDDGoods(PDDGoodsDetail goods, BigDecimal fanLiRate, BigDecimal shareRate) { GoodsDetailVO goodsInfo = new GoodsDetailVO(); goodsInfo.setBaoyou(true); goodsInfo.setGoodsType(Constant.SOURCE_TYPE_PDD); @@ -526,6 +525,7 @@ SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd"); CouponInfoVO coupon = new CouponInfoVO(); coupon.setAmount(amount); coupon.setStartFee(startFree); if (goods.getCouponStartTime() != null) { coupon.setStartTime(sdf.format(new Date(goods.getCouponStartTime() * 1000))); @@ -534,9 +534,6 @@ if (goods.getCouponEndTime() != null) { coupon.setEndTime(sdf.format(new Date(goods.getCouponEndTime() * 1000))); } coupon.setLink(null); coupon.setStartFee(startFree); if (goods.getCouponTotalQuantity() != null) coupon.setTotalCount(Integer.parseInt(goods.getCouponTotalQuantity().toString())); fanli/src/main/java/com/yeshi/fanli/util/jd/JDApiUtil.java
@@ -13,6 +13,7 @@ import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.methods.PostMethod; import org.yeshi.utils.HttpUtil; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; @@ -42,6 +43,7 @@ public static Long POSITION_FANLI = 1834339426L; public static Long POSITION_SHARE = 1834289924L; public static Long POSITION_COUPON = 1859510742L; // 订单查询类型 public static int ORDER_TYPE_CREATETIME = 1;// 下单时间 @@ -171,6 +173,22 @@ result = resultJson.optJSONObject("jd_union_open_promotion_common_get_response").optString("result"); resultJson = JSONObject.fromObject(result); return resultJson.optJSONObject("data").optString("clickURL"); } /** * 转链接-短连接 * @param materialId * @param couponUrl * @param positionId * @param ext1 * @return */ public static String convertShortLink(String materialId, String couponUrl, String positionId, String ext1) { String url = convertLink(materialId, couponUrl, positionId, ext1); if (!StringUtil.isNullOrEmpty(url)) { url = HttpUtil.getShortLink(url); } return url; } @@ -315,8 +333,7 @@ // 价格信息 Object priceInfo = json.get("priceInfo"); JSONObject priceInfoJson = JSONObject.fromObject(priceInfo); BigDecimal price = new BigDecimal(priceInfoJson.optString("price")); goods.setPrice(price); goods.setPrice(new BigDecimal(priceInfoJson.optString("price"))); // 店铺信息 Object shopInfo = json.get("shopInfo"); @@ -348,53 +365,6 @@ commissionInfo.setCommissionShare(new BigDecimal(commissionJson.optString("commissionShare"))); goods.setCommissionInfo(commissionInfo); // 券信息 Object coupon = json.get("couponInfo"); if (coupon != null) { JSONObject couponJson = JSONObject.fromObject(coupon); JSONArray couponArray = couponJson.optJSONArray("couponList"); if (couponArray != null) { BigDecimal gap = null; JDCouponInfo couponInfo = null; for (int i = 0; i < couponArray.size(); i++) { boolean add = false; JSONObject jdcoupon = couponArray.optJSONObject(i); if (couponInfo == null) { couponInfo = new JDCouponInfo(); add = true; } BigDecimal quota = new BigDecimal(jdcoupon.optString("quota")); BigDecimal sub = MoneyBigDecimalUtil.sub(price, quota); if (gap == null) { gap = sub; } else if (sub.compareTo(gap) == 0) { BigDecimal discount = new BigDecimal(jdcoupon.optString("discount")); if (discount.compareTo(couponInfo.getDiscount()) > 0) { add = true; } } else if (sub.compareTo(gap) > 0) { add = true; } if (add) { couponInfo.setBindType(jdcoupon.optInt("bindType")); couponInfo.setDiscount(new BigDecimal(jdcoupon.optString("discount"))); couponInfo.setQuota(new BigDecimal(jdcoupon.optString("quota"))); couponInfo.setPlatformType(jdcoupon.optInt("platformType")); couponInfo.setGetEndTime(jdcoupon.optLong("getEndTime")); couponInfo.setGetStartTime(jdcoupon.optLong("getStartTime")); couponInfo.setUseEndTime(jdcoupon.optLong("useEndTime")); couponInfo.setUseStartTime(jdcoupon.optLong("useStartTime")); couponInfo.setLink(jdcoupon.optString("link")); } } goods.setCouponInfo(couponInfo); } } // 图片信息 List<String> imageList = new ArrayList<String>(); Object images = json.get("imageInfo"); @@ -409,13 +379,15 @@ goods.setPicUrl(imageList.get(0)); } BigDecimal price = new BigDecimal(priceInfoJson.optString("price")); // 拼购信息 Object pinGouInfo = json.get("pinGouInfo"); if (pinGouInfo != null) { JSONObject pinGouInfoJson = JSONObject.fromObject(pinGouInfo); if (!pinGouInfoJson.isEmpty()) { JDPingouInfo jdPinGouInfo = new JDPingouInfo(); jdPinGouInfo.setPingouPrice(new BigDecimal(pinGouInfoJson.optString("pingouPrice"))); price = new BigDecimal(pinGouInfoJson.optString("pingouPrice")); jdPinGouInfo.setPingouPrice(price); jdPinGouInfo.setPingouTmCount(pinGouInfoJson.optLong("pingouTmCount")); jdPinGouInfo.setPingouUrl(pinGouInfoJson.optString("pingouUrl")); jdPinGouInfo.setTotalCount(pinGouInfoJson.optLong("totalCount")); @@ -425,6 +397,58 @@ } } // 券信息 Object coupon = json.get("couponInfo"); if (coupon != null) { JSONObject couponJson = JSONObject.fromObject(coupon); JSONArray couponArray = couponJson.optJSONArray("couponList"); if (couponArray != null) { BigDecimal discount_temp = null; JDCouponInfo couponInfo = null; for (int i = 0; i < couponArray.size(); i++) { boolean add = false; JSONObject jdcoupon = couponArray.optJSONObject(i); BigDecimal quota = new BigDecimal(jdcoupon.optString("quota")); BigDecimal sub = MoneyBigDecimalUtil.sub(price, quota); if (sub.compareTo(new BigDecimal(0)) < 0) { continue; // 商品价格小于优惠券价格限制 } // 券面额 BigDecimal discount = new BigDecimal(jdcoupon.optString("discount")); if (discount_temp == null) { add = true; discount_temp = discount; } else if (discount_temp.compareTo(discount) > 0) { // 券面额大 add = true; } if (add) { if (couponInfo == null) { couponInfo = new JDCouponInfo(); } couponInfo.setBindType(jdcoupon.optInt("bindType")); couponInfo.setDiscount(new BigDecimal(jdcoupon.optString("discount"))); couponInfo.setQuota(new BigDecimal(jdcoupon.optString("quota"))); couponInfo.setPlatformType(jdcoupon.optInt("platformType")); couponInfo.setGetEndTime(jdcoupon.optLong("getEndTime")); couponInfo.setGetStartTime(jdcoupon.optLong("getStartTime")); couponInfo.setUseEndTime(jdcoupon.optLong("useEndTime")); couponInfo.setUseStartTime(jdcoupon.optLong("useStartTime")); couponInfo.setLink(jdcoupon.optString("link")); } } goods.setCouponInfo(couponInfo); } } return goods; } fanli/src/main/java/com/yeshi/fanli/util/jd/JDUtil.java
@@ -275,11 +275,7 @@ shopInfo.setShopId(json.optInt("shopId")); shopInfo.setShopName(json.optString("shopName")); goods.setShopInfo(shopInfo); if (!StringUtil.isNullOrEmpty(json.optString("wlPrice"))) goods.setPrice(new BigDecimal(json.optString("wlPrice"))); else goods.setPrice(new BigDecimal(json.optString("finalPrice"))); goods.setInOrderCount30Days(json.optLong("inOrderCount30Days")); @@ -296,16 +292,6 @@ goods.setCommissionInfo(commission); goods.setGoodCommentsShare(new BigDecimal(json.optString("goodCommentsShare"))); // 券信息 if (json.optString("hasCoupon") != null && json.optInt("hasCoupon") == 1 && json.optInt("couponRemainCnt") > 0) { JDCouponInfo coupon = new JDCouponInfo(); coupon.setDiscount(new BigDecimal(json.optString("couponDiscount"))); coupon.setQuota(new BigDecimal(json.optString("couponQuota"))); coupon.setLink("https:" + json.optString("couponLink")); goods.setCouponInfo(coupon); } // 团购信息 if (json.optString("isPinGou") != null && json.optInt("isPinGou") == 1) { JDPingouInfo jdPinGouInfo = new JDPingouInfo(); @@ -314,6 +300,18 @@ goods.setPinGouInfo(jdPinGouInfo); } // 券信息 BigDecimal finalPrice = new BigDecimal(json.optString("finalPrice")); if (finalPrice != null && json.optString("hasCoupon") != null && json.optInt("hasCoupon") == 1 && json.optInt("couponRemainCnt") > 0) { JDCouponInfo coupon = new JDCouponInfo(); coupon.setDiscount(new BigDecimal(json.optString("couponDiscount"))); coupon.setQuota(new BigDecimal(json.optString("couponQuota"))); coupon.setLink("https:" + json.optString("couponLink")); goods.setCouponInfo(coupon); } return goods; } fanli/src/main/java/com/yeshi/fanli/util/pinduoduo/PinDuoDuoApiUtil.java
@@ -29,6 +29,7 @@ public class PinDuoDuoApiUtil { public final static String PID_FANLI = "8590899_72067894"; public final static String PID_SHARE = "8590899_72067895"; public final static String PID_COUPON = "8590899_102657575"; private final static String CLIENT_ID = "9f6ee5ebd3b94c2080c4d51c2427e9fa"; private final static String CLIENT_SECRET = "95e1f1904385664bf4b87d4b34de12f9f31c505d"; @@ -217,7 +218,9 @@ JSONArray array = new JSONArray(); array.add(goodsId); map.put("goods_id_list", array.toString()); if (!StringUtil.isNullOrEmpty(customParams)) { map.put("custom_parameters", customParams); } String result = baseRequest(map); JSONObject root = JSONObject.fromObject(result); fanli/src/main/java/com/yeshi/fanli/vo/goods/ShareVO.java
@@ -17,20 +17,9 @@ */ private static final long serialVersionUID = 1L; // 分享链接 @Expose private String url; // 帮助链接 @Expose private String helpLink; public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getHelpLink() { return helpLink; fanli/src/main/resource/ehcache.xml
@@ -255,4 +255,11 @@ memoryStoreEvictionPolicy="LRU" /> <!-- 京东缓存 --> <cache name="jdCache" maxElementsInMemory="1000" maxElementsOnDisk="10000" eternal="false" timeToIdleSeconds="1800" timeToLiveSeconds="1800" overflowToDisk="true" memoryStoreEvictionPolicy="LRU" /> </ehcache>