| | |
| | | package com.gs.xky.task; |
| | | |
| | | |
| | | import cn.hutool.core.collection.ListUtil; |
| | | import com.gs.xky.config.DingTalkParam; |
| | | import com.gs.xky.config.DingTalkResponse; |
| | | import com.gs.xky.dto.EmployeeInfo; |
| | | import com.gs.xky.entity.MesInvItemArn; |
| | | import com.gs.xky.service.*; |
| | | import lombok.RequiredArgsConstructor; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.scheduling.annotation.Scheduled; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.io.IOException; |
| | | import java.util.List; |
| | | import java.util.concurrent.CompletableFuture; |
| | | import java.util.concurrent.Executor; |
| | | import java.util.concurrent.atomic.AtomicBoolean; |
| | | import java.util.stream.Collectors; |
| | | |
| | | @Component |
| | | @RequiredArgsConstructor |
| | | public class ScheduledTasks { |
| | | private static final Logger log = LoggerFactory.getLogger(ScheduledTasks.class); |
| | | |
| | | 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); |
| | | |
| | | /** |
| | | * æ¯äºåéæ§è¡ä¸æ¬¡ |
| | |
| | | */ |
| | | @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); |
| | | } |
| | | } |