package com.gs.xky.task; import com.gs.xky.service.VwCjScSjTsBbService; import lombok.RequiredArgsConstructor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.concurrent.atomic.AtomicBoolean; @Component @RequiredArgsConstructor public class ScheduledTasks { private static final Logger log = LoggerFactory.getLogger(ScheduledTasks.class); private final VwCjScSjTsBbService vwCjScSjTsBbService; private final AtomicBoolean exportTaskRunning = new AtomicBoolean(false); /** * 每五分钟执行一次 * 获取设备最近的一条记录 */ @Scheduled(cron = "0 0/5 * * * ?") public void getDeviceRealTimeData() { } /** * 每天上午9点执行 * 导出生产数据并发送钉钉消息 */ @Async("taskExecutor") @Scheduled(cron = "0 0 9 * * ?") public void exportAndSendProductionDataTask() { if (!exportTaskRunning.compareAndSet(false, true)) { log.warn("生产数据导出任务正在执行中,跳过本次执行"); return; } try { log.info("开始执行生产数据导出并发送钉钉任务"); boolean result = vwCjScSjTsBbService.exportAndSendToDingtalk(); if (result) { log.info("生产数据导出并发送钉钉任务执行成功"); } else { log.error("生产数据导出并发送钉钉任务执行失败"); } } catch (Exception e) { log.error("生产数据导出并发送钉钉任务执行异常", e); } finally { exportTaskRunning.set(false); } } }