fanli/src/main/java/com/yeshi/fanli/controller/apph5/AppH5QualityGoodsController.java
@@ -24,6 +24,7 @@ import com.yeshi.fanli.entity.taobao.TaoBaoHongBaoInfo; import com.yeshi.fanli.entity.taobao.TaobaoMeterial; import com.yeshi.fanli.entity.taobao.dataoke.DaTaoKeDetail; import com.yeshi.fanli.entity.taobao.dataoke.DaTaoKeDetailV2; import com.yeshi.fanli.exception.taobao.TaoKeApiException; import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException; import com.yeshi.fanli.log.LogHelper; @@ -41,7 +42,7 @@ import com.yeshi.fanli.service.inter.lable.TaoKeGoodsService; import com.yeshi.fanli.service.inter.taobao.TaoBaoGoodsActivityService; import com.yeshi.fanli.service.inter.taobao.TaobaoMeterialService; 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.StringUtil; import com.yeshi.fanli.util.TimeUtil; @@ -101,7 +102,7 @@ private TaoBaoGoodsActivityService taoBaoGoodsActivityService; @Resource private DaTaoKeGoodsDetailService daTaoKeGoodsDetailService; private DaTaoKeGoodsDetailV2Service daTaoKeGoodsDetailV2Service; /** * 9.9商品 @@ -876,17 +877,17 @@ @RequestMapping("getFlashSaleNew") public void getFlashSaleNew(String callback, Integer page, Long auctionId, String time, PrintWriter out) { List<DaTaoKeDetail> detailList0 = daTaoKeGoodsDetailService.getDingDongQiangData(time); List<DaTaoKeDetailV2> detailList0 = daTaoKeGoodsDetailV2Service.getDingDongQiangData(time); if (detailList0 == null) detailList0 = new ArrayList<>(); List<DaTaoKeDetail> detailList = new ArrayList<>(); List<DaTaoKeDetailV2> detailList = new ArrayList<>(); detailList.addAll(detailList0); JSONArray array = new JSONArray(); if (page == 1) { if (auctionId != null && detailList != null) for (int i = 0; i < detailList.size(); i++) { if (detailList.get(i).getGoodsId().longValue() == auctionId) { DaTaoKeDetail goods = detailList.get(i); DaTaoKeDetailV2 goods = detailList.get(i); detailList.remove(i); detailList.add(0, goods); break; @@ -896,7 +897,7 @@ Gson gson = JsonUtil.getConvertBigDecimalToStringSubZeroBuilder(new GsonBuilder()) .excludeFieldsWithoutExposeAnnotation().setDateFormat("yyyy-MM-dd").create(); if (detailList != null) for (DaTaoKeDetail detail : detailList) { for (DaTaoKeDetailV2 detail : detailList) { array.add(gson.toJson(TaoBaoUtil.getTaoBaoGoodsBriefExtra(TaoBaoUtil.convert(detail), hongBaoManageService.getFanLiRate() + "", null))); } fanli/src/main/java/com/yeshi/fanli/dao/goods/taobao/dataoke/DaTaoKeGoodsDetailV2Dao.java
@@ -175,6 +175,12 @@ query.limit(count); List<DaTaoKeDetailV2> list = mongoTemplate.findAllAndRemove(query, DaTaoKeDetailV2.class); return list.size(); } public long countByMinUpdateTime(Date minUpdateTime) { Query query = new Query(); query.addCriteria(Criteria.where("updateTime").gt(minUpdateTime)); return mongoTemplate.count(query, DaTaoKeDetailV2.class); } } fanli/src/main/java/com/yeshi/fanli/dto/dataoke/DingDongQiangDTO.java
@@ -2,7 +2,7 @@ import java.util.List; import com.yeshi.fanli.entity.taobao.dataoke.DaTaoKeDetail; import com.yeshi.fanli.entity.taobao.dataoke.DaTaoKeDetailV2; /** * 大淘客叮咚抢 @@ -12,9 +12,9 @@ */ public class DingDongQiangDTO { private String time; private List<DaTaoKeDetail> goodsList; private List<DaTaoKeDetailV2> goodsList; public DingDongQiangDTO(String time, List<DaTaoKeDetail> goodsList) { public DingDongQiangDTO(String time, List<DaTaoKeDetailV2> goodsList) { this.time = time; this.goodsList = goodsList; } @@ -30,11 +30,11 @@ this.time = time; } public List<DaTaoKeDetail> getGoodsList() { public List<DaTaoKeDetailV2> getGoodsList() { return goodsList; } public void setGoodsList(List<DaTaoKeDetail> goodsList) { public void setGoodsList(List<DaTaoKeDetailV2> goodsList) { this.goodsList = goodsList; } } fanli/src/main/java/com/yeshi/fanli/job/UpdateDaTaoKeJob.java
@@ -174,4 +174,13 @@ } } @Scheduled(cron = "0 30 7,11,18,23 * * ? ") public void syncGoodsBeiYong() { long latestUpdateCount = daTaoKeGoodsDetailV2Service .countByMinUpdateTime(new Date(System.currentTimeMillis() - 1000 * 60 * 60 * 24L)); if (latestUpdateCount < 50000L) {// 若每天没有超过5w数据更新就需要重新更新数据 daTaoKeGoodsDetailV2Service.startSyncGoods(); } } } fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/dataoke/DaTaoKeGoodsDetailServiceImpl.java
@@ -153,19 +153,6 @@ 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; } private void updateGoods(Long id) { DaTaoKeDetail detail = daTaoKeDetailMapper.selectByPrimaryKey(id); @@ -177,37 +164,6 @@ list.add(detail); addGoodsList(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()); List<DaTaoKeDetail> finalList = listByIds(idList); if (finalList.size() != idList.size()) { for (Long id : idList) updateGoods(id); finalList = listByIds(idList); } for (DaTaoKeDetail detail : finalList) { detail.setQuanReceive( detail.getQuanSurplus() + detail.getQuanReceive() - (int) (200 + Math.random() * 1000)); } return finalList; } return null; } } fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/dataoke/DaTaoKeGoodsDetailV2ServiceImpl.java
@@ -13,12 +13,16 @@ import javax.annotation.Resource; import org.springframework.cache.annotation.Cacheable; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.yeshi.fanli.dao.goods.taobao.dataoke.DaTaoKeGoodsDetailV2Dao; import com.yeshi.fanli.dto.dataoke.DaTaoKeGoodsResult; 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.entity.taobao.dataoke.DaTaoKeDetailV2; import com.yeshi.fanli.log.LogHelper; import com.yeshi.fanli.service.inter.taobao.dataoke.DaTaoKeGoodsDetailV2Service; @@ -213,7 +217,8 @@ @Override public List<DaTaoKeDetailV2> listPreShareHotGoods(int page,BigDecimal minCommission) { Map<Long, DaTaoKeDetailV2> map = new HashMap<>(); List<DaTaoKeDetailV2> list = daTaoKeGoodsDetailV2Dao.listPreShareHotGoods((page - 1) * 100, 100, "hotPush",minCommission); List<DaTaoKeDetailV2> list = daTaoKeGoodsDetailV2Dao.listPreShareHotGoods((page - 1) * 100, 100, "hotPush", minCommission); System.out.println(list); for (DaTaoKeDetailV2 v2 : list) { map.put(v2.getId(), v2); @@ -303,4 +308,62 @@ daTaoKeGoodsDetailV2Dao.listAndRemoveByMinUpdateTime(minTime, 0, 3000); } @Override public long countByMinUpdateTime(Date minTime) { return daTaoKeGoodsDetailV2Dao.countByMinUpdateTime(minTime); } @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; } @Async private void updateGoods(Long id) { DaTaoKeDetailV2 v2 = DaTaoKeApiUtil.getGoodsDetail(id); if (v2 != null) daTaoKeGoodsDetailV2Dao.save(v2); } @Cacheable(value = "daTaoKeGoodsCache", key = "'getDingDongQiangData-'+#time") @Override public List<DaTaoKeDetailV2> 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 (DaTaoKeDetailV2 td : dto.getGoodsList()) idList.add(td.getId()); List<DaTaoKeDetailV2> finalList = listByIds(idList); if (finalList.size() != idList.size()) { for (Long id : idList) updateGoods(id); finalList = listByIds(idList); } for (DaTaoKeDetailV2 detail : finalList) { detail.setCouponReceiveNum(detail.getCouponTotalNum() - (int) (200 + Math.random() * 1000)); if (detail.getCouponTotalNum() - detail.getCouponReceiveNum() <= 0) detail.setCouponReceiveNum(detail.getCouponTotalNum()); } return finalList; } return null; } } fanli/src/main/java/com/yeshi/fanli/service/inter/taobao/dataoke/DaTaoKeGoodsDetailService.java
@@ -111,21 +111,4 @@ * @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/service/inter/taobao/dataoke/DaTaoKeGoodsDetailV2Service.java
@@ -4,7 +4,9 @@ import java.util.Date; 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; import com.yeshi.fanli.entity.taobao.dataoke.DaTaoKeDetailV2; /** @@ -129,4 +131,28 @@ */ public void deleteOutOfDate(Date minTime); /** * 根据最小更新时间查询数量 * @param minTime * @return */ public long countByMinUpdateTime(Date minTime); /** * 获取叮咚呛数据 * * @return */ public List<DingDongQiangDTO> getDingDongQiangData(); /** * 根据时间查询 * @param time 0712 表示7号12点 * @return */ public List<DaTaoKeDetailV2> getDingDongQiangData(String time); } fanli/src/main/java/com/yeshi/fanli/util/taobao/DaTaoKeUtil.java
@@ -374,7 +374,7 @@ List<DingDongQiangDTO> list = new ArrayList<>(); Document doc = null; try { doc = Jsoup.connect("http://www.dataoke.com/ddq").get(); doc = Jsoup.connect("http://www.dataoke.com/ddq").userAgent("").get(); } catch (IOException e1) { e1.printStackTrace(); } @@ -395,9 +395,11 @@ for (Iterator<String> its = dataJson.keys(); its.hasNext();) { String key = its.next(); JSONArray array = dataJson.optJSONArray(key); List<DaTaoKeDetail> detailList = new ArrayList<>(); List<DaTaoKeDetailV2> detailList = new ArrayList<>(); for (int n = 0; n < array.size(); n++) { detailList.add(new DaTaoKeDetail(array.optJSONObject(n).optLong("id"))); DaTaoKeDetailV2 v2 = new DaTaoKeDetailV2(); v2.setId(array.optJSONObject(n).optLong("id")); detailList.add(v2); } list.add(new DingDongQiangDTO(key, detailList)); } @@ -574,7 +576,5 @@ return detail; } }