wujianwei
2025-12-23 fa5e8e2df6c3208a3b90549b88037f5ad14bbb0b
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
package com.ruoyi.quartz.task;
 
import cn.hutool.core.collection.CollectionUtil;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.cwgl.domain.ApiResponse;
import com.ruoyi.cwgl.domain.VehicleDailyData;
import com.ruoyi.cwgl.service.IVehicleDailyDataService;
import com.ruoyi.cwgl.service.impl.VehicleDataApiClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
 
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
 
/**
 * 车辆每日数据同步定时任务
 * 
 * @author ruoyi
 */
@Component("vehicleDataSyncTask")
public class VehicleDataSyncTask {
    private static Logger logger = LoggerFactory.getLogger(VehicleDataSyncTask.class);
    
    @Autowired
    private IVehicleDailyDataService vehicleDailyDataService;
    
    @Autowired
    private VehicleDataApiClient vehicleDataApiClient;
 
    /**
     * 同步前一天的车辆数据(简单版本,执行即同步昨天数据)
     */
    public void syncVehicleData() {
        logger.info("开始同步车辆每日数据任务");
        
        // 获取前一天的日期,格式为yyyy-MM-dd
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date yesterday = DateUtils.addDays(new Date(), -1);
        String dateStr = sdf.format(yesterday);
        
        logger.info("开始同步日期[{}]的车辆数据", dateStr);
        
        try {
            // 直接使用注入的API客户端调用方法
            ApiResponse<List<VehicleDailyData>> response = vehicleDataApiClient.getDailyVehicleData(dateStr);
            
            if (response != null && response.getCode().equals(200)  && CollectionUtil.isNotEmpty(response.getData())) {
                List<VehicleDailyData> vehicleDataList = response.getData();
                logger.info("成功获取到{}条车辆数据", vehicleDataList.size());
                
                // 设置创建时间和事件日期
                Date now = new Date();
                SimpleDateFormat dateTimeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                for (VehicleDailyData data : vehicleDataList) {
                    data.setCreateTime(now);
 
                    try {
                        // 设置事件日期
                        data.setEventDate(dateTimeFormat.parse(dateStr + " 00:00:00"));
                    } catch (Exception e) {
                        logger.error("日期格式化错误: {}", e.getMessage());
                    }
                }
                
                // 批量插入数据库
                int rows = vehicleDailyDataService.insertVehicleDailyDataBatch(vehicleDataList);
                logger.info("车辆数据同步完成,成功插入{}条记录", rows);
            } else {
                String errorMsg = response != null ? response.getMsg() : "获取API响应失败";
                logger.error("获取车辆数据失败: {}", errorMsg);
            }
        } catch (Exception e) {
            logger.error("车辆数据同步任务执行异常: {}", e.getMessage(), e);
        }
    }
    
    /**
     * 根据指定日期同步车辆数据(保留用于手动触发特定日期的数据同步)
     * @param date 日期,格式为yyyy-MM-dd
     */
    public void syncVehicleDataByDate(String date) {
        logger.info("开始同步日期[{}]的车辆数据", date);
        
        try {
            // 直接使用注入的API客户端调用方法
            ApiResponse<List<VehicleDailyData>> response = vehicleDataApiClient.getDailyVehicleData(date);
            
            if (response != null && response.getCode().equals(200) && CollectionUtil.isNotEmpty(response.getData())) {
                List<VehicleDailyData> vehicleDataList = response.getData();
                logger.info("成功获取到{}条车辆数据", vehicleDataList.size());
                
                // 设置创建时间和事件日期
                Date now = new Date();
                SimpleDateFormat dateTimeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                for (VehicleDailyData data : vehicleDataList) {
                    data.setCreateTime(now);
 
                    try {
                        // 设置事件日期
                        data.setEventDate(dateTimeFormat.parse(date + " 00:00:00"));
                    } catch (Exception e) {
                        logger.error("日期格式化错误: {}", e.getMessage());
                    }
                }
                
                // 批量插入数据库
                int rows = vehicleDailyDataService.insertVehicleDailyDataBatch(vehicleDataList);
                logger.info("车辆数据同步完成,成功插入{}条记录", rows);
            } else {
                String errorMsg = response != null ? response.getMsg() : "获取API响应失败";
                logger.error("获取车辆数据失败: {}", errorMsg);
            }
        } catch (Exception e) {
            logger.error("车辆数据同步任务执行异常: {}", e.getMessage(), e);
        }
    }
}