admin
2025-02-25 30d8e227e8d823b6c38c3b9c90ac2df03b63befe
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
137
138
139
140
141
142
package com.yeshi.fanli.job.order.dy;
 
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.annotation.XxlJob;
import com.yeshi.fanli.dto.mq.order.body.CommonOrderMQMsg;
import com.yeshi.fanli.entity.dy.DYOrder;
import com.yeshi.fanli.exception.dy.DYOrderException;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.order.dy.DYOrderService;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.RedisKeyEnum;
import com.yeshi.fanli.util.RedisManager;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.goods.douyin.CSJCPSApiUtil;
import com.yeshi.fanli.util.goods.douyin.vo.DYOrderFilter;
import com.yeshi.fanli.util.goods.douyin.vo.DYOrderResult;
import com.yeshi.fanli.util.mq.cmq.order.OrdersCMQManager;
import com.yeshi.fanli.util.mq.rabbit.RabbitmqManager;
import org.springframework.stereotype.Component;
 
import javax.annotation.Resource;
import java.util.List;
 
//从抖音爬取订单更新
@Component
public class UpdateDYOrderJob {
 
    @Resource
    private DYOrderService dyOrderService;
 
    @Resource
    private RedisManager redisManager;
 
    @Resource
    private OrdersCMQManager ordersCMQManager;
 
 
    /**
     * 保存订单
     *
     * @param dyOrderList
     */
    public void saveDYOrders(List<DYOrder> dyOrderList) {
        //5分钟不更新就报警
        try {
            redisManager.cacheCommonString(RedisKeyEnum.monitor.getKey() + Constant.SOURCE_TYPE_DY, "1", 60 * 5);
        } catch (Exception e) {
        }
 
        for (DYOrder order : dyOrderList) {
            LogHelper.orderInfo("抖音订单:" + order.getOrder_id() + "-" + order.getFlow_point());
            try {
                dyOrderService.addOrder(order);
                /**
                 * 做频率限制
                 */
                String key = RedisKeyEnum.getRedisKey(RedisKeyEnum.DYOrder, order.getOrder_id() + "");
                String result = redisManager.getCommonString(key);
                // 判断
                if (StringUtil.isNullOrEmpty(result)) {
                    ordersCMQManager.addOrder(new CommonOrderMQMsg(order.getOrder_id() + "", Constant.SOURCE_TYPE_DY));
                    redisManager.cacheCommonString(key, "1", 60 * 60 * 2);// 2小时内不再更新
                }
            } catch (DYOrderException e) {
                e.printStackTrace();
            }
        }
    }
 
    /**
     * 快速订单更新(爬取本小时内的单,每分钟一次)
     */
    @XxlJob("updateDYOrderHandler")
    public ReturnT<String> updateDYOrder(String param) throws Exception {
        if ("1".equalsIgnoreCase(param)) {// 更新5分钟内的订单
            LogHelper.job("开始爬取抖音订单");
            DYOrderFilter filter = new DYOrderFilter();
            filter.setCursor("0");
            filter.setEnd_time(System.currentTimeMillis() / 1000);
            filter.setStart_time(filter.getEnd_time() - 60 * 5);
            //商品分销订单
            filter.setOrder_type(DYOrderFilter.ORDER_TYPE_GOODS);
            updateOrder(filter);
            //直播分销订单
            filter.setOrder_type(DYOrderFilter.ORDER_TYPE_LIVE);
            updateOrder(filter);
        } else if ("1hour".equalsIgnoreCase(param)) {// 更新1小时内的订单
            DYOrderFilter filter = new DYOrderFilter();
            filter.setCursor("0");
            filter.setEnd_time(System.currentTimeMillis() / 1000);
            filter.setStart_time(filter.getEnd_time() - 60 * 60);
            //商品分销订单
            filter.setOrder_type(DYOrderFilter.ORDER_TYPE_GOODS);
            updateOrder(filter);
            //直播分销订单
            filter.setOrder_type(DYOrderFilter.ORDER_TYPE_LIVE);
            updateOrder(filter);
        } else if ("1day".equalsIgnoreCase(param)) {// 更新1天内的订单
            DYOrderFilter filter = new DYOrderFilter();
            filter.setCursor("0");
            filter.setEnd_time(System.currentTimeMillis() / 1000);
            filter.setStart_time(filter.getEnd_time() - 60 * 60 * 24);
            //商品分销订单
            filter.setOrder_type(DYOrderFilter.ORDER_TYPE_GOODS);
            updateOrder(filter);
            //直播分销订单
            filter.setOrder_type(DYOrderFilter.ORDER_TYPE_LIVE);
            updateOrder(filter);
        } else if ("3day".equalsIgnoreCase(param)) {// 更新最近3天更新的数据
            DYOrderFilter filter = new DYOrderFilter();
            filter.setCursor("0");
            filter.setEnd_time(System.currentTimeMillis() / 1000);
            filter.setStart_time(filter.getEnd_time() - 60 * 60 * 24 * 10);
            //商品分销订单
            filter.setOrder_type(DYOrderFilter.ORDER_TYPE_GOODS);
            updateOrder(filter);
            //直播分销订单
            filter.setOrder_type(DYOrderFilter.ORDER_TYPE_LIVE);
            updateOrder(filter);
        }
 
        return ReturnT.SUCCESS;
    }
 
    public void updateOrder(DYOrderFilter filter) {
        if (filter.getSize() == null) {
            filter.setSize(50);
        }
        filter.setTime_type("update");
        DYOrderResult result = CSJCPSApiUtil.orderList(filter);
        if (result != null && result.getOrders() != null) {
            saveDYOrders(result.getOrders());
        }
        if (result != null && !StringUtil.isNullOrEmpty(result.getCursor())) {
            filter.setCursor(result.getCursor());
            updateOrder(filter);
        }
 
    }
 
 
}