From 51a4ff5d777028d52a19c314a99f796334cb7b51 Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期六, 23 十一月 2019 18:30:01 +0800 Subject: [PATCH] 配置文件修改 --- fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/dataoke/DaTaoKeGoodsDetailV2ServiceImpl.java | 231 +++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 206 insertions(+), 25 deletions(-) diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/dataoke/DaTaoKeGoodsDetailV2ServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/dataoke/DaTaoKeGoodsDetailV2ServiceImpl.java index 586109a..cdad78e 100644 --- a/fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/dataoke/DaTaoKeGoodsDetailV2ServiceImpl.java +++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/dataoke/DaTaoKeGoodsDetailV2ServiceImpl.java @@ -2,6 +2,7 @@ import java.math.BigDecimal; import java.util.ArrayList; +import java.util.Calendar; import java.util.Collections; import java.util.Comparator; import java.util.Date; @@ -12,23 +13,24 @@ 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.DaTaoKeDetailV2; import com.yeshi.fanli.log.LogHelper; import com.yeshi.fanli.service.inter.taobao.dataoke.DaTaoKeGoodsDetailV2Service; -import com.yeshi.fanli.util.BeanUtil; -import com.yeshi.fanli.util.Constant; -import com.yeshi.fanli.util.MoneyBigDecimalUtil; import com.yeshi.fanli.util.RedisManager; import com.yeshi.fanli.util.StringUtil; import com.yeshi.fanli.util.TimeUtil; import com.yeshi.fanli.util.dataoke.DaTaoKeApiUtil; import com.yeshi.fanli.util.taobao.DaTaoKeUtil; +import com.yeshi.fanli.util.taobao.TaoBaoUtil; @Service public class DaTaoKeGoodsDetailV2ServiceImpl implements DaTaoKeGoodsDetailV2Service { @@ -41,18 +43,38 @@ @Override public void startSyncGoods() { LogHelper.test("澶ф窐瀹㈠悓姝ュ紑濮�"); - DaTaoKeGoodsResult result = DaTaoKeApiUtil.listAll("1"); - int page = 0; - while (result.getGoodsList() != null && result.getGoodsList().size() > 0) { - System.out.println(page++); - for (DaTaoKeDetailV2 v2 : result.getGoodsList()) - daTaoKeGoodsDetailV2Dao.saveWithCommision(v2); - result = DaTaoKeApiUtil.listAll(result.getPageId()); - try { - Thread.sleep(10); - } catch (InterruptedException e) { - e.printStackTrace(); + + int totalCount = 0; + try { + DaTaoKeGoodsResult result = DaTaoKeApiUtil.listAll("1"); + int page = 0; + + while (result.getGoodsList() != null && result.getGoodsList().size() > 0) { + System.out.println(page++); + totalCount += result.getGoodsList().size(); + for (DaTaoKeDetailV2 v2 : result.getGoodsList()) { + try { + daTaoKeGoodsDetailV2Dao.saveWithCommision(v2); + } catch (Exception e) { + } + } + + try { + result = DaTaoKeApiUtil.listAll(result.getPageId()); + } catch (Exception e) { + result = DaTaoKeApiUtil.listAll(result.getPageId()); + } + + try { + Thread.sleep(10); + } catch (InterruptedException e) { + e.printStackTrace(); + } } + } catch (Exception e) { + LogHelper.errorDetailInfo(e, "澶ф窐瀹㈠叏閲忔暟鎹嚭閿�", ""); + } finally { + LogHelper.test("澶ф窐瀹㈡柊鐗堝晢鍝佸悓姝ユ暟閲�:" + totalCount); } } @@ -98,7 +120,7 @@ String startTime = null; DaTaoKeDetailV2 latest = daTaoKeGoodsDetailV2Dao.selectLatest(); if (latest != null) { - startTime = latest.getCreateTime(); + startTime = TimeUtil.getGernalTime(latest.getCreateTime().getTime(), "yyyy-MM-dd HH:mm:ss"); } DaTaoKeGoodsResult result = DaTaoKeApiUtil.getNewGoodsList(null, startTime, null); while (!StringUtil.isNullOrEmpty(result.getPageId())) { @@ -192,10 +214,10 @@ } @Override - public List<DaTaoKeDetailV2> listPreShareHotGoods(int page) { + public List<DaTaoKeDetailV2> listPreShareHotGoods(int page, BigDecimal minCommission) { Map<Long, DaTaoKeDetailV2> map = new HashMap<>(); - List<DaTaoKeDetailV2> list = daTaoKeGoodsDetailV2Dao.listPreShareHotGoods((page - 1) * Constant.PAGE_SIZE, - Constant.PAGE_SIZE, "updateTime"); + List<DaTaoKeDetailV2> list = daTaoKeGoodsDetailV2Dao.listPreShareHotGoods((page - 1) * 100, 100, "hotPush", + minCommission); System.out.println(list); for (DaTaoKeDetailV2 v2 : list) { map.put(v2.getId(), v2); @@ -222,20 +244,179 @@ return finalList; } + private boolean canAddToTLJBuyGoods(DaTaoKeDetailV2 v2) { + return TaoBaoUtil.canAddToTLJBuyGoods(TaoBaoUtil.convert(v2)); + } + @Override public List<DaTaoKeDetailV2> listPreTLJBuyGoods(int page) { if (page == 1) { - DaTaoKeGoodsResult result = DaTaoKeApiUtil.getRankingList(DaTaoKeApiUtil.RANK_TYPE_DAY); - List<DaTaoKeDetailV2> goodsList = new ArrayList<>(); - for (DaTaoKeDetailV2 v2 : result.getGoodsList()) { - BigDecimal commision = MoneyBigDecimalUtil - .div(MoneyBigDecimalUtil.mul(v2.getActualPrice(), v2.getCommissionRate()), new BigDecimal(100)); - if (commision.multiply(new BigDecimal("0.7")).compareTo(new BigDecimal("1.01")) >= 0) - goodsList.add(v2); + List<DaTaoKeDetailV2> listPreGoodsList = new ArrayList<>(); + // 鐑攢姒� + DaTaoKeGoodsResult result = DaTaoKeApiUtil.getRankingList(DaTaoKeApiUtil.RANK_TYPE_HOT, null); + if (result != null && result.getGoodsList() != null) + listPreGoodsList.addAll(result.getGoodsList()); + // 澶嶈喘姒� + result = DaTaoKeApiUtil.getRankingList(DaTaoKeApiUtil.RANK_TYPE_REBUY, null); + if (result != null && result.getGoodsList() != null) + listPreGoodsList.addAll(result.getGoodsList()); + // 缁煎悎鎼滅储 + try { + result = DaTaoKeApiUtil.search("", null, null, null, 1, 200, DaTaoKeApiUtil.SORT_DEFAULT); + if (result == null) + throw new Exception(); + } catch (Exception e) {// 寮傚父閲嶅涓�娆� + result = DaTaoKeApiUtil.search("", null, null, null, 1, 200, DaTaoKeApiUtil.SORT_DEFAULT); } + + if (result != null && result.getGoodsList() != null) + listPreGoodsList.addAll(result.getGoodsList()); + + List<DaTaoKeDetailV2> goodsList = new ArrayList<>(); + for (DaTaoKeDetailV2 v2 : listPreGoodsList) { + if (canAddToTLJBuyGoods(v2)) { + Date time = new Date(TimeUtil.convertToTimeTemp(v2.getCouponEndTime(), "yyyy-MM-dd HH:mm:ss")); + + Date targetTime = new Date(TimeUtil + .convertToTimeTemp(TimeUtil.getGernalTime( + System.currentTimeMillis() + 1000 * 60 * 60 * 24 * 2L, "yyyy-MM-dd"), "yyyy-MM-dd") + - 1000L); + // 濡傛灉鏄噷鏅ㄩ�夋嫨鐨� + if (Calendar.getInstance().get(Calendar.HOUR_OF_DAY) < 12) {// 涓婂崍閫夋嫨鐨勮绠椾负褰撳ぉ鐨� + targetTime = new Date(TimeUtil.convertToTimeTemp(TimeUtil.getGernalTime( + System.currentTimeMillis() + 1000 * 60 * 60 * 24 * 1L, "yyyy-MM-dd"), "yyyy-MM-dd") + - 1000L); + } + if (time.getTime() >= targetTime.getTime()) + goodsList.add(v2); + } + } + + // 鍘婚噸 + Map<Long, DaTaoKeDetailV2> goodsMap = new HashMap<>(); + for (DaTaoKeDetailV2 v2 : goodsList) { + goodsMap.put(v2.getGoodsId(), v2); + } + goodsList.clear(); + for (Iterator<Long> its = goodsMap.keySet().iterator(); its.hasNext();) { + goodsList.add(goodsMap.get(its.next())); + } + Comparator<DaTaoKeDetailV2> cm = new Comparator<DaTaoKeDetailV2>() { + + @Override + public int compare(DaTaoKeDetailV2 o1, DaTaoKeDetailV2 o2) { + return o1.getActualPrice().compareTo(o2.getActualPrice()); + } + }; + Collections.sort(goodsList, cm); return goodsList; } else return new ArrayList<>(); } + @Override + public void deleteOutOfDate(Date minTime) { + 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); + } + + private List<DaTaoKeDetailV2> getDefaultDingDongQiang() { + // 鎸夋洿鏂版椂闂村姞 + DaTaoKeGoodsResult result = DaTaoKeApiUtil.getRankingList(DaTaoKeApiUtil.RANK_TYPE_TIME, null); + if (result != null && result.getGoodsList().size() > 0) { + List<DaTaoKeDetailV2> finalList = new ArrayList<>(); + Collections.shuffle(result.getGoodsList()); + finalList.addAll(result.getGoodsList().subList(0, + result.getGoodsList().size() > 8 ? 8 : result.getGoodsList().size())); + 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; + } + + @Cacheable(value = "daTaoKeGoodsCache", key = "'getDingDongQiangData-'+#time") + @Override + public List<DaTaoKeDetailV2> getDingDongQiangData(String time) { + List<DingDongQiangDTO> list = getDingDongQiangData(); + if (list == null || list.size() == 0) { + return getDefaultDingDongQiang(); + } + + 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); + } + + // 濡傛灉鍟嗗搧鏁板皬浜�4锛岄渶瑕佸啀鍔犲晢鍝� + if (finalList == null || finalList.size() <= 3) { + // 鎸夋洿鏂版椂闂村姞 + List<DaTaoKeDetailV2> latestList = daTaoKeGoodsDetailV2Dao.listPreShareHotGoods(0, 50, "updateTime", + new BigDecimal("0.5")); + if (latestList != null && latestList.size() > 0) { + Collections.shuffle(latestList); + finalList.addAll(latestList.subList(0, latestList.size() > 8 ? 8 : latestList.size())); + } + } + + 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; + } else { + return getDefaultDingDongQiang(); + } + } + + @Override + public List<String> getDingDongQiangTime() { + List<DingDongQiangDTO> list = getDingDongQiangData(); + List<String> dateList = new ArrayList<>(); + for (DingDongQiangDTO dto : list) { + dateList.add(dto.getTime()); + } + return dateList; + } + } -- Gitblit v1.8.0