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); // private final XkyService xkyService; // private final ApiService apiService; // private final MesStaffService staffService; // private final DeliveryNoticeService deliveryNoticeService; // private final MesInvItemArnService invItemArnService; // private final Executor taskExecutor; // 注入通用线程池 // 用于标记各任务是否正在执行 // private final AtomicBoolean isDeviceDataRunning = new AtomicBoolean(false); // private final AtomicBoolean isCompensateRunning = new AtomicBoolean(false); // private final AtomicBoolean isDingTalkRunning = new AtomicBoolean(false); /** * 每天上午9点执行 * 导出生产数据并发送钉钉消息 */ @Async("taskExecutor") @Scheduled(cron = "0 0 8,16 * * ?") 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); } } // /** // * 每五分钟执行一次 // * 获取协客云最近的一条记录 // */ // @Scheduled(cron = "0 0/5 * * * ?") // public void getDeviceRealTimeData() { // // 如果任务已经在运行,则跳过本次执行 // if (!isDeviceDataRunning.compareAndSet(false, true)) { // log.info("【getDeviceRealTimeData】上一次任务还在执行中,跳过本次执行"); // return; // } // // log.info("【getDeviceRealTimeData】开始获取设备实时数据"); // // // 使用异步执行,避免阻塞调度线程 // CompletableFuture.runAsync(() -> { // try { // xkyService.GetSaveDetail(); // log.info("【getDeviceRealTimeData】获取设备实时数据成功"); // } catch (IOException e) { // log.error("【getDeviceRealTimeData】获取设备实时数据异常: {}", e.getMessage(), e); // } finally { // isDeviceDataRunning.set(false); // } // }, taskExecutor); // } // // /** // * 定时执行补偿逻辑 // */ // @Scheduled(cron = "10 3,8,13,18,23,28,33,38,43,48,53,58 * * * ?") // public void compensateMethod() { // // 如果任务已经在运行,则跳过本次执行 // if (!isCompensateRunning.compareAndSet(false, true)) { // log.info("【compensateMethod】上一次任务还在执行中,跳过本次执行"); // return; // } // // log.info("【compensateMethod】开始执行补偿逻辑"); // // // 使用异步执行,避免阻塞调度线程 // CompletableFuture.runAsync(() -> { // try { // // 补偿逻辑 // List itemArnMinus = invItemArnService.getItemArnMinus(); // deliveryNoticeService.processMesInvItemArnStatusAsync(itemArnMinus); // log.info("【compensateMethod】补偿逻辑执行成功"); // } catch (Exception e) { // log.error("【compensateMethod】补偿逻辑执行异常: {}", e.getMessage(), e); // } finally { // isCompensateRunning.set(false); // } // }, taskExecutor); // } // // /** // * 定时获取钉钉数据 // */ // @Scheduled(cron = "0 0/53 * * * ?") // public void getDinTalkData() { // // 如果任务已经在运行,则跳过本次执行 // if (!isDingTalkRunning.compareAndSet(false, true)) { // log.info("【getDinTalkData】上一次任务还在执行中,跳过本次执行"); // return; // } // // log.info("【getDinTalkData】开始获取钉钉数据"); // // // 使用异步执行,避免阻塞调度线程 // CompletableFuture.runAsync(() -> { // try { // DingTalkParam dingTalkParam = new DingTalkParam(1); // DingTalkResponse employeeInfoDingTalkResponse = // apiService.sendListRequest(dingTalkParam, EmployeeInfo.class, // "http://192.168.1.64/eHR/eHRExternalService/Service.ashx"); // // List collect = employeeInfoDingTalkResponse.getData().stream() // .filter(s -> "造梦者(浙江)科技有限公司".equals(s.getCUnitName())) // .collect(Collectors.toList()); // // log.info("【getDinTalkData】获取到{}条员工数据", collect.size()); // // List> partition = ListUtil.partition(collect, 100); // partition.forEach(staffService::UpdateStaff); // // log.info("【getDinTalkData】钉钉数据处理完成"); // } catch (IOException e) { // log.error("【getDinTalkData】获取钉钉数据异常: {}", e.getMessage(), e); // } finally { // isDingTalkRunning.set(false); // } // }, taskExecutor); // } }