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.dataoke.DaTaoKeApiUtil;
|
|
@Service
|
public class DaTaoKeGoodsServiceImpl implements DaTaoKeGoodsService {
|
@Resource
|
private DaTaoKeDetailMapper daTaoKeDetailMapper;
|
|
@Resource
|
private RedisManager redisManager;
|
|
@Override
|
public void startSyncGoods() {
|
// 判断是否有正在进行的更新
|
String key1 = "dataoke-updating";
|
// if (!StringUtil.isNullOrEmpty(redisManager.getCommonString(key1)))
|
// return;
|
|
// 开始更新
|
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);
|
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);
|
}
|
|
}
|