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);
|
}
|
}
|
}
|