yujian
2019-04-29 9a24f2802a3d6fe3e82c05e52f2880d65ad04dcf
fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/dataoke/DaTaoKeGoodsServiceImpl.java
@@ -1,18 +1,20 @@
package com.yeshi.fanli.service.impl.taobao.dataoke;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.annotation.Resource;
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.entity.taobao.dataoke.DaTaoKeDetail;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.taobao.dataoke.DaTaoKeGoodsService;
import com.yeshi.fanli.util.RedisManager;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.dataoke.DaTaoKeApiUtil;
@Service
@@ -27,35 +29,44 @@
   public void startSyncGoods() {
      // 判断是否有正在进行的更新
      String key1 = "dataoke-updating";
      if (!StringUtil.isNullOrEmpty(redisManager.getCommonString(key1)))
         return;
      String key2 = "dataoke-update-time";
      String updateTime = redisManager.getCommonString(key2);
      if (!StringUtil.isNullOrEmpty(updateTime)) {
         DaTaoKeApiResult result = DaTaoKeApiUtil.goodsList(1);
         if (result.getUpdateTime().equalsIgnoreCase(updateTime)) {// 和上次更新在同一时间
            return;
         }
      }
      // if (!StringUtil.isNullOrEmpty(redisManager.getCommonString(key1)))
      // return;
      // 开始更新
      redisManager.cacheCommonString(key1, "1");
      List<DaTaoKeDetail> goodsList = new ArrayList<>();
      for (int p = 1; p < 2000; p++) {
      redisManager.cacheCommonString(key1, "1", 60 * 20);
      long firstTime = System.currentTimeMillis() - 1000 * 60 * 5L;
      int totalCount = 0;
      for (int p = 1; p <= 2000; p++) {// 10W数据
         DaTaoKeApiResult result = DaTaoKeApiUtil.goodsList(p);
         goodsList.addAll(result.getDetailList());
         if (result.getDetailList().size() < 50)// 更新完成
         {
            redisManager.removeCommonString(key1);
            break;
         }
         addGoodsList(result.getDetailList());
         totalCount += result.getDetailList().size();
      }
      //
      LogHelper.test("大淘客总共更新数据数量:" + totalCount);
      // 清除过期数据
      if (totalCount > 50000)// 保证有5w数据再清除过期
      {
         daTaoKeDetailMapper.deleteByMinUpdateTime(firstTime);
         LogHelper.test("删除大淘客过期数据:" + totalCount);
      }
   }
   @Transactional
   private void addGoodsList(List<DaTaoKeDetail> goodsList) {
      List<Long> idList = new ArrayList<>();
      for (DaTaoKeDetail goods : goodsList) {
         goods.setUpdateTime(new Date());
         idList.add(goods.getId());
      }
      // 批量删除
      daTaoKeDetailMapper.deleteByIdList(idList);
      // 批量插入
      daTaoKeDetailMapper.insertByBatch(goodsList);
   }
}