package com.klp.task; import com.klp.service.IWmsCostCoilDailyService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.time.LocalDate; /** * 成本日统计定时任务 * * 每天凌晨 2 点执行: * 1. 按钢卷维度生成前一日的日成本记录; * 2. 按入场钢卷号维度生成前一日的日成本记录。 * * 说明: * - 具体的计算逻辑在 {@link IWmsCostCoilDailyService#calculateDailyCost(LocalDate)} 和 * {@link IWmsCostCoilDailyService#calculateDailyCostByEnterCoilNo(LocalDate)} 中实现。 * - 当前任务只负责在固定时间触发这两个方法。 */ @Slf4j @RequiredArgsConstructor @Component public class CostCoilDailyTask { private final IWmsCostCoilDailyService costCoilDailyService; /** * 每天凌晨 2:00 计算前一日钢卷日成本(按钢卷维度) */ @Scheduled(cron = "0 0 2 * * ?") public void calculateDailyCostByCoil() { LocalDate calcDate = LocalDate.now().minusDays(1); log.info("[成本定时任务] 开始按钢卷维度计算日期 {} 的成本", calcDate); int count = costCoilDailyService.calculateDailyCost(calcDate); log.info("[成本定时任务] 按钢卷维度计算日期 {} 的成本完成,成功 {} 条", calcDate, count); } /** * 每天凌晨 2:10 计算前一日钢卷日成本(按入场钢卷号维度) * 与上一个任务错开几分钟,避免同时占用资源。 */ @Scheduled(cron = "0 10 2 * * ?") public void calculateDailyCostByEnterCoilNo() { LocalDate calcDate = LocalDate.now().minusDays(1); log.info("[成本定时任务] 开始按入场钢卷号维度计算日期 {} 的成本", calcDate); int count = costCoilDailyService.calculateDailyCostByEnterCoilNo(calcDate); log.info("[成本定时任务] 按入场钢卷号维度计算日期 {} 的成本完成,成功 {} 个入场钢卷号", calcDate, count); } }