admin
2019-04-26 8e30aa7c1f0384f09278699318b4902b815b42a7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
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);
    }
 
}