admin
2019-07-23 496c2842240eae09bb56e98e1fae71540a85befa
大淘客叮咚呛数据缓存
6个文件已修改
1个文件已添加
234 ■■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/dto/dataoke/DingDongQiangDTO.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/entity/taobao/dataoke/DaTaoKeDetail.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/job/UpdateDaTaoKeJob.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/dataoke/DaTaoKeGoodsDetailServiceImpl.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/taobao/dataoke/DaTaoKeGoodsDetailService.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/taobao/DaTaoKeUtil.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/resource/ehcache.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dto/dataoke/DingDongQiangDTO.java
New file
@@ -0,0 +1,40 @@
package com.yeshi.fanli.dto.dataoke;
import java.util.List;
import com.yeshi.fanli.entity.taobao.dataoke.DaTaoKeDetail;
/**
 * 大淘客叮咚抢
 *
 * @author Administrator
 *
 */
public class DingDongQiangDTO {
    private String time;
    private List<DaTaoKeDetail> goodsList;
    public DingDongQiangDTO(String time, List<DaTaoKeDetail> goodsList) {
        this.time = time;
        this.goodsList = goodsList;
    }
    public DingDongQiangDTO() {
    }
    public String getTime() {
        return time;
    }
    public void setTime(String time) {
        this.time = time;
    }
    public List<DaTaoKeDetail> getGoodsList() {
        return goodsList;
    }
    public void setGoodsList(List<DaTaoKeDetail> goodsList) {
        this.goodsList = goodsList;
    }
}
fanli/src/main/java/com/yeshi/fanli/entity/taobao/dataoke/DaTaoKeDetail.java
@@ -16,9 +16,19 @@
 */
@Table("yeshi_ec_goods_dataoke")
public class DaTaoKeDetail {
    public DaTaoKeDetail(Long id) {
        this.id = id;
    }
    public DaTaoKeDetail() {
    }
    @Column(name = "id")
    @SerializedName("ID")
    private Long id;// 大淘客ID
    @Column(name = "d_title")
    @SerializedName("D_title")
    private String dTitle;// 商品短标题
fanli/src/main/java/com/yeshi/fanli/job/UpdateDaTaoKeJob.java
@@ -1,27 +1,15 @@
package com.yeshi.fanli.job;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import com.yeshi.fanli.entity.bus.lable.BoutiqueAutoRule;
import com.yeshi.fanli.entity.bus.lable.QualityFactory;
import com.yeshi.fanli.entity.common.AdminUser;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
import com.yeshi.fanli.entity.taobao.dataoke.DaTaoKeDetail;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.lable.QualityFactoryService;
import com.yeshi.fanli.service.inter.taobao.dataoke.DaTaoKeGoodsDetailService;
import com.yeshi.fanli.service.inter.taobao.dataoke.DaTaoKeGoodsDetailV2Service;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.taobao.DaTaoKeUtil;
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
/**
 * 更新大淘客数据
@@ -39,54 +27,6 @@
    @Resource
    private DaTaoKeGoodsDetailV2Service daTaoKeGoodsDetailV2Service;
    /**
     * 限时秒杀 数据更新
     */
    @Scheduled(cron = "0 0 0/2 * * ?")
    public void doUpdateJob() {
        if (!Constant.IS_TASK)
            return;
        List<DaTaoKeDetail> listTaoKe = DaTaoKeUtil.getDingDongQiang();
        if (listTaoKe == null || listTaoKe.size() == 0) {
            return;
        }
        List<Long> listDaoKeId = new ArrayList<Long>();
        for (DaTaoKeDetail daTaoKeDetail : listTaoKe) {
            listDaoKeId.add(daTaoKeDetail.getId());
        }
        List<DaTaoKeDetail> listDetail = daTaoKeGoodsService.listByIds(listDaoKeId);
        if (listDetail == null || listDetail.size() == 0) {
            return;
        }
        List<TaoBaoGoodsBrief> listgoods = new ArrayList<TaoBaoGoodsBrief>();
        for (DaTaoKeDetail daTaoKeDetail : listDetail) {
            listgoods.add(TaoBaoUtil.convert(daTaoKeDetail));
        }
        String formatDate = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date());
        try {
            /* 操作人: 开发账号 */
            AdminUser admin = new AdminUser(2L);
            BoutiqueAutoRule autoRule = new BoutiqueAutoRule();
            autoRule.setAdminUser(admin);
            autoRule.setCalss9k9(false);
            autoRule.setFlashSale(true);
            autoRule.setStartWeight(1);
            autoRule.setEndWeight(3000);
            autoRule.setGoodsSource(QualityFactory.SOURCE_TAOBAO_DATAOKE);
            qualityFactoryService.autoInsertOrUpadateStorage(autoRule, listgoods, null);
            // 删除之前的
            qualityFactoryService.deleteNotUpdateGoods(null, formatDate, autoRule.getGoodsSource());
        } catch (Exception e) {
            LogHelper.errorDetailInfo(e);
        }
    }
    // 1个小时更新一次
    @Scheduled(cron = "0 0 0/1 * * ? ")
fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/dataoke/DaTaoKeGoodsDetailServiceImpl.java
@@ -9,11 +9,13 @@
import javax.annotation.Resource;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.yeshi.fanli.dao.mybatis.taobao.dataoke.DaTaoKeDetailMapper;
import com.yeshi.fanli.dto.dataoke.DaTaoKeApiResult;
import com.yeshi.fanli.dto.dataoke.DingDongQiangDTO;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
import com.yeshi.fanli.entity.taobao.dataoke.DaTaoKeDetail;
import com.yeshi.fanli.log.LogHelper;
@@ -151,4 +153,38 @@
        return daTaoKeDetailMapper.countByCidAndMaxMinPrice(cid, maxPrice, null);
    }
    @Cacheable(value = "daTaoKeGoodsCache", key = "'getDingDongQiangData'")
    @Override
    public List<DingDongQiangDTO> getDingDongQiangData() {
        List<DingDongQiangDTO> list = null;
        int count = 0;
        while ((list == null || list.size() == 0) && count < 3) {
            count++;
            list = DaTaoKeUtil.getDingDongQiang();
        }
        if (list == null)
            return null;
        return list;
    }
    @Cacheable(value = "daTaoKeGoodsCache", key = "'getDingDongQiangData-'+#time")
    @Override
    public List<DaTaoKeDetail> getDingDongQiangData(String time) {
        List<DingDongQiangDTO> list = getDingDongQiangData();
        if (list == null)
            return null;
        Map<String, DingDongQiangDTO> map = new HashMap<>();
        for (DingDongQiangDTO dto : list)
            map.put(dto.getTime(), dto);
        DingDongQiangDTO dto = map.get(time);
        if (dto != null) {
            List<Long> idList = new ArrayList<>();
            for (DaTaoKeDetail td : dto.getGoodsList())
                idList.add(td.getId());
            return listByIds(idList);
        }
        return null;
    }
}
fanli/src/main/java/com/yeshi/fanli/service/inter/taobao/dataoke/DaTaoKeGoodsDetailService.java
@@ -3,6 +3,7 @@
import java.math.BigDecimal;
import java.util.List;
import com.yeshi.fanli.dto.dataoke.DingDongQiangDTO;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
import com.yeshi.fanli.entity.taobao.dataoke.DaTaoKeDetail;
@@ -104,9 +105,27 @@
    /**
     * 根据分类ID与最大券后价检索数量
     *
     * @param cid
     * @param maxPrice
     * @return
     */
    public Long countByCidAndMaxPrice(Integer cid, BigDecimal maxPrice);
    /**
     * 获取叮咚呛数据
     *
     * @return
     */
    public List<DingDongQiangDTO> getDingDongQiangData();
    /**
     * 根据时间查询
     * @param time  0712 表示7号12点
     * @return
     */
    public List<DaTaoKeDetail> getDingDongQiangData(String time);
}
fanli/src/main/java/com/yeshi/fanli/util/taobao/DaTaoKeUtil.java
@@ -5,13 +5,19 @@
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import com.yeshi.fanli.dto.dataoke.DingDongQiangDTO;
import com.yeshi.fanli.entity.bus.clazz.GoodsClass;
import com.yeshi.fanli.entity.taobao.TaoBaoCoupon;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
@@ -364,28 +370,45 @@
     * 
     * @return
     */
    public static List<DaTaoKeDetail> getDingDongQiang() {
        List<DaTaoKeDetail> goodsList = new ArrayList<>();
    public static List<DingDongQiangDTO> getDingDongQiang() {
        List<DingDongQiangDTO> list = new ArrayList<>();
        Document doc = null;
        try {
            Document doc = Jsoup.connect("http://www.dataoke.com/ddq")
                    .userAgent(
                            "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Mobile Safari/537.36")
                    .get();
            Elements items = doc.getElementsByClass("main").get(0).getElementsByClass("clearfix").get(0)
                    .getElementsByTag("li");
            for (int i = 0; i < items.size(); i++) {
                DaTaoKeDetail detail = new DaTaoKeDetail();
                String id = items.get(i).getElementsByTag("a").get(0).attr("href").split("\\?")[1].replace("id=", "");
                detail.setId(Long.parseLong(id));
                goodsList.add(detail);
            }
        } catch (Exception e) {
            doc = Jsoup.connect("http://www.dataoke.com/ddq").get();
        } catch (IOException e1) {
            e1.printStackTrace();
        }
        return goodsList;
        Elements els = doc.getElementsByTag("script");
        for (int i = 0; i < els.size(); i++) {
            String content = els.get(i).html();
            if (content.indexOf("var dataDef") > -1) {
                ScriptEngineManager manager = new ScriptEngineManager();
                ScriptEngine engine = manager.getEngineByName("javascript");
                try {
                    String js = "function getData(){return  JSON.stringify(dataDef);}" + content;
                    engine.eval(js);
                    if (engine instanceof Invocable) {
                        Invocable in = (Invocable) engine;
                        String data = in.invokeFunction("getData").toString();
                        System.out.println(data);
                        JSONObject dataJson = JSONObject.fromObject(data);
                        for (Iterator<String> its = dataJson.keys(); its.hasNext();) {
                            String key = its.next();
                            JSONArray array = dataJson.optJSONArray(key);
                            List<DaTaoKeDetail> detailList = new ArrayList<>();
                            for (int n = 0; n < array.size(); n++) {
                                detailList.add(new DaTaoKeDetail(array.optJSONObject(n).optLong("id")));
                            }
                            list.add(new DingDongQiangDTO(key, detailList));
                        }
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        return list;
    }
    //
    public static List<TaoBaoCoupon> getRecommendCouple() {
        List<TaoBaoCoupon> couponList = new ArrayList<>();
fanli/src/main/resource/ehcache.xml
@@ -217,5 +217,13 @@
        memoryStoreEvictionPolicy="LRU" />
    <!-- 大淘客商品缓存(10分钟) -->
    <cache name="daTaoKeGoodsCache" maxElementsInMemory="1000"
        maxElementsOnDisk="10000" eternal="false" timeToIdleSeconds="600"
        timeToLiveSeconds="600" overflowToDisk="true"
        memoryStoreEvictionPolicy="LRU" />
</ehcache>