admin
2020-06-30 9bd6a19ee855d489dd7598e6c5fb580e7be61bbf
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
package com.yeshi.fanli.job.order.vipshop;
 
import java.util.ArrayList;
import java.util.List;
 
import javax.annotation.Resource;
 
import org.springframework.stereotype.Component;
 
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.annotation.XxlJob;
import com.yeshi.fanli.dto.vipshop.VipShopOrderQueryModel;
import com.yeshi.fanli.dto.vipshop.VipShopQueryOrderResultDTO;
import com.yeshi.fanli.entity.vipshop.VipShopOrder;
import com.yeshi.fanli.exception.vipshop.VipShopOrderException;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.order.vipshop.VipShopOrderService;
import com.yeshi.fanli.util.RedisKeyEnum;
import com.yeshi.fanli.util.RedisManager;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.mq.cmq.order.VipShopOrderCMQManager;
import com.yeshi.fanli.util.vipshop.VipShopApiUtil;
 
//从淘宝爬去订单更新
@Component
public class UpdateVipShopOrderJob {
 
    @Resource
    private VipShopOrderService vipShopOrderService;
 
    @Resource
    private RedisManager redisManager;
 
    /**
     * 保存订单
     * 
     * @param VipShopOrderList
     */
    public void saveVipShopOrders(List<VipShopOrder> vipShopOrderList) {
        for (VipShopOrder order : vipShopOrderList) {
            try {
                vipShopOrderService.addOrder(order);
                /**
                 * 做频率限制
                 */
                String key = RedisKeyEnum.getRedisKey(RedisKeyEnum.VIPShopOrder, order.getOrderSn() + "");
                String result = redisManager.getCommonString(key);
                // 判断
//                if (StringUtil.isNullOrEmpty(result)) {
                    VipShopOrderCMQManager.getInstance().addVipShopOrder(order.getOrderSn() + "");
                    redisManager.cacheCommonString(key, "1", 60 * 60 * 2);// 2小时内不再更新
                    LogHelper.test("唯品会订单消息发送成功");
//                }else{
//                    LogHelper.test("唯品会订单频率限制");
//                }
            } catch (VipShopOrderException e) {
                e.printStackTrace();
                LogHelper.errorDetailInfo(e);
            }
        }
    }
 
    /**
     * 快速订单更新(爬取本小时内的单,每分钟一次)
     */
    @XxlJob("updateVipShopOrderHandler")
    public ReturnT<String> updateVipShopSoonOrder(String param) throws Exception {
        LogHelper.test("updateVipShopOrderHandler:"+param);
        long endTime = System.currentTimeMillis();
        if ("1hour".equalsIgnoreCase(param)) {// 更新1小时内的订单
            updateByOrderTime(endTime - 1000 * 60 * 60 * 1L, endTime);
            updateByUpdateTime(endTime - 1000 * 60 * 60 * 1L, endTime);
        } else if ("1day".equalsIgnoreCase(param)) {// 更新最近1天更新的数据
            updateByOrderTime(endTime - 1000 * 60 * 60 * 24L, endTime);
            updateByUpdateTime(endTime - 1000 * 60 * 60 * 24L, endTime);
        }
        /*
         * else if ("3day".equalsIgnoreCase(param)) {// 更新最近3天更新的数据
         * updateByOrderTime(endTime - 1000 * 60 * 60 * 24 * 3L, endTime);
         * updateByUpdateTime(endTime - 1000 * 60 * 60 * 24 * 3L, endTime); }
         */
        return ReturnT.SUCCESS;
    }
 
    /**
     * 按下单时间更新
     * @Title: updateByOrderTime
     * @Description: 
     * @param startTime
     * @param endTime 
     * void 返回类型
     * @throws
     */
 
    public void updateByOrderTime(long startTime, long endTime) {
        List<VipShopOrder> vipShopOrderList = new ArrayList<>();
        int page = 1;
        VipShopQueryOrderResultDTO result = VipShopApiUtil
                .getOrderList(VipShopOrderQueryModel.createOrderTime(startTime, endTime, null, page));
 
        while (result != null && result.getOrderList().size() > 0) {
            page++;
            vipShopOrderList.addAll(result.getOrderList());
            result = VipShopApiUtil
                    .getOrderList(VipShopOrderQueryModel.createOrderTime(startTime, endTime, null, page));
        }
 
        saveVipShopOrders(vipShopOrderList);
    }
 
    /**
     * 按更新时间更新
     * @Title: updateByOrderTime
     * @Description: 
     * @param startTime
     * @param endTime 
     * void 返回类型
     * @throws
     */
 
    public void updateByUpdateTime(long startTime, long endTime) {
        List<VipShopOrder> vipShopOrderList = new ArrayList<>();
        int page = 1;
        VipShopQueryOrderResultDTO result = VipShopApiUtil
                .getOrderList(VipShopOrderQueryModel.createUpdateTime(startTime, endTime, null, page));
 
        while (result != null && result.getOrderList().size() > 0) {
            page++;
            vipShopOrderList.addAll(result.getOrderList());
            result = VipShopApiUtil
                    .getOrderList(VipShopOrderQueryModel.createUpdateTime(startTime, endTime, null, page));
        }
        saveVipShopOrders(vipShopOrderList);
    }
 
}