yujian
2019-07-29 a1175313094799efcdbbecf2840a90350d3159a7
首页加入缓存
12个文件已修改
315 ■■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/dto/jd/JDSearchResult.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dto/pdd/PDDGoodsResult.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/jd/JDGoodsServiceImpl.java 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/pdd/PDDGoodsServiceImpl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/jd/JDGoodsService.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/pdd/PDDGoodsService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/factory/goods/GoodsDetailVOFactory.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/jd/JDApiUtil.java 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/jd/JDUtil.java 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/pinduoduo/PinDuoDuoApiUtil.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/vo/goods/ShareVO.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/resource/ehcache.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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
@@ -28,14 +28,13 @@
@Service
public class JDGoodsServiceImpl implements JDGoodsService {
    @Resource
    private ConfigService configService;
    @Resource
    private HongBaoManageService hongBaoManageService;
    private Map<String, Long> countMap = new HashMap<String, Long>();
    private static final Map<Long, String> cidMap = new HashMap<Long, String>();
@@ -43,10 +42,10 @@
        cidMap.put(1L, "2,16,1,3");// 精选
        cidMap.put(2L, "737");// 电器: 家用电器
        cidMap.put(3L, "652,670");// 数码: 数码/电脑、办公
        cidMap.put(4L, "9987");// 手机:手机通讯
        cidMap.put(4L, "9987");// 手机:手机通讯
        cidMap.put(5L, "12218");// 生鲜
        cidMap.put(6L, "1315");// 服饰: 服饰内衣
        cidMap.put(7L, "1319,6233");// 母婴: 母婴/玩具乐器
        cidMap.put(6L, "1315");// 服饰: 服饰内衣
        cidMap.put(7L, "1319,6233");// 母婴: 母婴/玩具乐器
        cidMap.put(8L, "1713");// 图书
        cidMap.put(9L, "6196");// 厨具
        cidMap.put(10L, "1320");// 食品: 食品饮料
@@ -60,7 +59,6 @@
        cidMap.put(18L, "6728");// 汽车:汽车用品
    }
    @Override
    public List<GoodsClass> getSpecialClass() {
        List<GoodsClass> list = new ArrayList<GoodsClass>();
@@ -82,23 +80,22 @@
        list.add(new GoodsClass(16L, "宠物"));
        list.add(new GoodsClass(17L, "家居"));
        list.add(new GoodsClass(18L, "汽车"));
        return list;
        return list;
    }
    @Cacheable(value = "jdSpecialCache", key = "'specialSearch-'+#page+'-'+#cid")
    @Override
    @Transactional
    public List<JDGoods> specialSearch(Integer page, Long cid) throws JDGoodsException{
    public List<JDGoods> specialSearch(Integer page, Long cid) throws JDGoodsException {
        if (cid == null) {
            throw new JDGoodsException(1, "分类id为空");
        }
        String jdcid = cidMap.get(cid);
        if (StringUtil.isNullOrEmpty(jdcid)) {
            throw new JDGoodsException(1, "分类id不存在");
        }
        // 精选
        if (cid == 1) {
            Integer categoryId = null;
@@ -112,23 +109,23 @@
                if (count != null) {
                    addCount += count;
                }
                if (count != null && totalCount > addCount) {
                    pageTemp = (int)(addCount / Constant.PAGE_SIZE);
                    pageTemp = (int) (addCount / Constant.PAGE_SIZE);
                    continue; // 当前分类商品不足
                } else {
                    page = page - pageTemp;
                    page = page - pageTemp;
                    categoryId = Integer.parseInt(id);
                    break;
                }
            }
            if (categoryId == null) {
                return null;
            }
            JDSearchResult result = JDApiUtil.getJingFenGoods(page, categoryId);
            long count = 0;
            if (result != null) {
                PageEntity pageEntity = result.getPageEntity();
@@ -136,25 +133,24 @@
                    count = pageEntity.getTotalCount();
                }
            }
            long mcount = (count/Constant.PAGE_SIZE) * Constant.PAGE_SIZE;
            long mcount = (count / Constant.PAGE_SIZE) * Constant.PAGE_SIZE;
            if (mcount == 0) {
                mcount = 20;
            }
            countMap.put(cid + "-" + categoryId, mcount);
            if (result == null) {
                return null;
            } else {
                return result.getGoodsList();
            }
        }
        }
        if (!jdcid.contains(",")) {
            return search(page, Constant.PAGE_SIZE, jdcid);
        }
        }
        // 多个分类id处理
        List<JDGoods> list = new ArrayList<JDGoods>();
        String[] arrayId = jdcid.split(",");
@@ -170,7 +166,6 @@
        return list;
    }
    private List<JDGoods> search(int page, int pageSize, String jdcid) {
        JDSearchResult result = null;
        String way = configService.get("jd_api_search_key");
@@ -187,7 +182,7 @@
            jdfilter.setCategoryId(Integer.parseInt(jdcid));
            result = JDUtil.searchByKey(jdfilter);
        }
        if (result == null) {
            return null;
        } else {
@@ -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;
@@ -24,5 +25,13 @@
     */
    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,7 +407,9 @@
            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())));
            }
@@ -415,10 +417,8 @@
            if (couponInfo.getGetEndTime() != null) {
                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,7 +525,8 @@
            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,10 +534,7 @@
            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,12 +275,8 @@
        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.setPrice(new BigDecimal(json.optString("wlPrice")));
        goods.setInOrderCount30Days(json.optLong("inOrderCount30Days"));
        
        if (json.optInt("isZY") == 1)
@@ -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());
        map.put("custom_parameters", customParams);
        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>