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> response = vehicleDataApiClient.getDailyVehicleData(dateStr); if (response != null && response.getCode().equals(200) && CollectionUtil.isNotEmpty(response.getData())) { List 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> response = vehicleDataApiClient.getDailyVehicleData(date); if (response != null && response.getCode().equals(200) && CollectionUtil.isNotEmpty(response.getData())) { List 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); } } }