package com.ruoyi.quartz.task; import java.util.Calendar; import java.util.Date; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.ruoyi.system.service.IVehicleMileageStatsService; /** * 车辆里程统计定时任务 */ @Component("vehicleMileageStatsTask") public class VehicleMileageStatsTask { private static final Logger logger = LoggerFactory.getLogger(VehicleMileageStatsTask.class); @Autowired private IVehicleMileageStatsService vehicleMileageStatsService; /** * 计算昨日所有车辆的里程统计 */ public void calculateYesterdayMileage() { logger.info("开始执行车辆里程统计定时任务 - 统计昨日里程"); try { // 获取昨天的日期 Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.DAY_OF_MONTH, -1); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0); Date yesterday = calendar.getTime(); // 批量计算里程统计 int successCount = vehicleMileageStatsService.batchCalculateMileageStats(yesterday); logger.info("车辆里程统计定时任务执行完成 - 成功统计: {} 辆车", successCount); } catch (Exception e) { logger.error("车辆里程统计定时任务执行失败", e); throw new RuntimeException("定时任务执行失败: " + e.getMessage()); } } /** * 计算指定日期的里程统计(用于手动触发或补算历史数据) * * @param dateStr 日期字符串,格式:yyyy-MM-dd */ public void calculateMileageByDate(String dateStr) { logger.info("开始执行车辆里程统计定时任务 - 统计日期: {}", dateStr); try { // 解析日期字符串 String[] parts = dateStr.split("-"); if (parts.length != 3) { throw new IllegalArgumentException("日期格式错误,应为: yyyy-MM-dd"); } Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.YEAR, Integer.parseInt(parts[0])); calendar.set(Calendar.MONTH, Integer.parseInt(parts[1]) - 1); // 月份从0开始 calendar.set(Calendar.DAY_OF_MONTH, Integer.parseInt(parts[2])); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0); Date targetDate = calendar.getTime(); // 批量计算里程统计 int successCount = vehicleMileageStatsService.batchCalculateMileageStats(targetDate); logger.info("车辆里程统计定时任务执行完成 - 日期: {}, 成功统计: {} 辆车", dateStr, successCount); } catch (Exception e) { logger.error("车辆里程统计定时任务执行失败 - 日期: {}", dateStr, e); throw new RuntimeException("定时任务执行失败: " + e.getMessage()); } } }