| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.gs.xky.task; |
| | | |
| | | import com.gs.xky.service.PurchaseService; |
| | | 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.concurrent.CompletableFuture; |
| | | import java.util.concurrent.Executor; |
| | | import java.util.concurrent.atomic.AtomicBoolean; |
| | | |
| | | /** |
| | | * éè´è®¢å忥宿¶ä»»å¡ |
| | | */ |
| | | @Component |
| | | @RequiredArgsConstructor |
| | | public class PurchaseOrderSyncTask { |
| | | private static final Logger log = LoggerFactory.getLogger(PurchaseOrderSyncTask.class); |
| | | |
| | | private final PurchaseService purchaseService; |
| | | private final Executor purchaseTaskExecutor; // 注å
¥ä¸ç¨çº¿ç¨æ± |
| | | |
| | | // ç¨äºæ è®°ä»»å¡æ¯å¦æ£å¨æ§è¡ |
| | | private final AtomicBoolean isRunning = new AtomicBoolean(false); |
| | | |
| | | /** |
| | | * 宿¶æ§è¡éè´è®¢ååæ¥ä»»å¡ |
| | | * æ¯å¤©12ç¹æ´æ§è¡ä¸æ¬¡ |
| | | * 设置为12ç¹05åæ§è¡ï¼é¿å
ä¸å
¶ä»å®æ¶ä»»å¡å²çª |
| | | * 使ç¨å¼æ¥æ§è¡ï¼é²æ¢é»å¡å
¶ä»å®æ¶ä»»å¡ |
| | | */ |
| | | @Scheduled(cron = "0 5 12 * * ?") |
| | | public void syncPurchaseOrders() { |
| | | // 妿任å¡å·²ç»å¨è¿è¡ï¼åè·³è¿æ¬æ¬¡æ§è¡ |
| | | if (!isRunning.compareAndSet(false, true)) { |
| | | log.info("ãsyncPurchaseOrdersãä¸ä¸æ¬¡ä»»å¡è¿å¨æ§è¡ä¸ï¼è·³è¿æ¬æ¬¡æ§è¡"); |
| | | return; |
| | | } |
| | | |
| | | log.info("ãsyncPurchaseOrdersãå¼å§æ§è¡éè´è®¢å忥任å¡"); |
| | | |
| | | // 使ç¨ä¸ç¨çº¿ç¨æ± æ§è¡å¼æ¥ä»»å¡ |
| | | CompletableFuture.runAsync(() -> { |
| | | try { |
| | | log.info("ãsyncPurchaseOrdersã弿¥çº¿ç¨å¼å§æ§è¡éè´è®¢å忥"); |
| | | purchaseService.syncPurchaseOrderDetails(); |
| | | log.info("ãsyncPurchaseOrdersãéè´è®¢å忥任塿§è¡æå"); |
| | | } catch (IOException e) { |
| | | log.error("ãsyncPurchaseOrdersãéè´è®¢å忥任塿§è¡å¼å¸¸: {}", e.getMessage(), e); |
| | | } finally { |
| | | // æ 论æåè¿æ¯å¤±è´¥ï¼é½å°è¿è¡ç¶æéç½® |
| | | isRunning.set(false); |
| | | log.info("ãsyncPurchaseOrdersãä»»å¡ç¶æå·²éç½®ï¼å¯ä»¥æ¥åæ°çä»»å¡"); |
| | | } |
| | | }, purchaseTaskExecutor); |
| | | |
| | | // ä¸çå¾
ä»»å¡å®æï¼ç«å³è¿åï¼é¿å
é»å¡è°åº¦çº¿ç¨ |
| | | log.info("ãsyncPurchaseOrdersãéè´è®¢å忥任å¡å·²æäº¤å°å¼æ¥çº¿ç¨æ§è¡"); |
| | | } |
| | | |
| | | /** |
| | | * æå¨è§¦åéè´è®¢ååæ¥ä»»å¡ |
| | | * ç¨äºç³»ç»ç®¡çåæå¨è§¦å忥 |
| | | * |
| | | * @return 任塿¯å¦å·²æäº¤æ§è¡ |
| | | */ |
| | | public boolean manualSyncPurchaseOrders() { |
| | | // 妿任å¡å·²ç»å¨è¿è¡ï¼åæç»æ¬æ¬¡æ§è¡ |
| | | if (!isRunning.compareAndSet(false, true)) { |
| | | log.info("ãmanualSyncPurchaseOrdersãä¸ä¸æ¬¡ä»»å¡è¿å¨æ§è¡ä¸ï¼æç»æ¬æ¬¡æ§è¡"); |
| | | return false; |
| | | } |
| | | |
| | | log.info("ãmanualSyncPurchaseOrdersãæå¨è§¦åéè´è®¢å忥任å¡"); |
| | | |
| | | // 使ç¨ä¸ç¨çº¿ç¨æ± æ§è¡å¼æ¥ä»»å¡ |
| | | CompletableFuture.runAsync(() -> { |
| | | try { |
| | | log.info("ãmanualSyncPurchaseOrdersã弿¥çº¿ç¨å¼å§æ§è¡éè´è®¢å忥"); |
| | | purchaseService.syncPurchaseOrderDetails(); |
| | | log.info("ãmanualSyncPurchaseOrdersãéè´è®¢å忥任塿§è¡æå"); |
| | | } catch (IOException e) { |
| | | log.error("ãmanualSyncPurchaseOrdersãéè´è®¢å忥任塿§è¡å¼å¸¸: {}", e.getMessage(), e); |
| | | } finally { |
| | | // æ 论æåè¿æ¯å¤±è´¥ï¼é½å°è¿è¡ç¶æéç½® |
| | | isRunning.set(false); |
| | | log.info("ãmanualSyncPurchaseOrdersãä»»å¡ç¶æå·²éç½®ï¼å¯ä»¥æ¥åæ°çä»»å¡"); |
| | | } |
| | | }, purchaseTaskExecutor); |
| | | |
| | | return true; |
| | | } |
| | | } |