| | |
| | | |
| | | private final AtomicBoolean exportTaskRunning = new AtomicBoolean(false); |
| | | |
| | | /** |
| | | * 每五分钟执行一次 |
| | | * 获取设备最近的一条记录 |
| | | */ |
| | | @Scheduled(cron = "0 0/5 * * * ?") |
| | | public void getDeviceRealTimeData() { |
| | | // 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 9 * * ?") |
| | | @Scheduled(cron = "0 0 8,16 * * ?") |
| | | public void exportAndSendProductionDataTask() { |
| | | if (!exportTaskRunning.compareAndSet(false, true)) { |
| | | log.warn("生产数据导出任务正在执行中,跳过本次执行"); |
| | |
| | | } |
| | | } |
| | | |
| | | // /** |
| | | // * 每五分钟执行一次 |
| | | // * 获取协客云最近的一条记录 |
| | | // */ |
| | | // @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<MesInvItemArn> 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<EmployeeInfo> employeeInfoDingTalkResponse = |
| | | // apiService.sendListRequest(dingTalkParam, EmployeeInfo.class, |
| | | // "http://192.168.1.64/eHR/eHRExternalService/Service.ashx"); |
| | | // |
| | | // List<EmployeeInfo> collect = employeeInfoDingTalkResponse.getData().stream() |
| | | // .filter(s -> "造梦者(浙江)科技有限公司".equals(s.getCUnitName())) |
| | | // .collect(Collectors.toList()); |
| | | // |
| | | // log.info("【getDinTalkData】获取到{}条员工数据", collect.size()); |
| | | // |
| | | // List<List<EmployeeInfo>> 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); |
| | | // } |
| | | |
| | | } |