skyline 2 lat temu
rodzic
commit
e1f1733c42

+ 12 - 11
miniapp/src/main/java/com/kym/miniapp/jobs/StartChargeDelayJob.java

@@ -1,6 +1,7 @@
 package com.kym.miniapp.jobs;
 
 import com.baomidou.dynamic.datasource.annotation.DS;
+import com.google.common.util.concurrent.RateLimiter;
 import com.kym.common.utils.CommUtil;
 import com.kym.entity.miniapp.ChargeOrder;
 import com.kym.entity.miniapp.delay.DelayChargeOrder;
@@ -30,6 +31,7 @@ import java.util.concurrent.Executors;
 @Scope(ConfigurableBeanFactory.SCOPE_SINGLETON) // 设置成单例
 public class StartChargeDelayJob implements DelayService<DelayChargeOrder> {
 
+    private final static RateLimiter rateLimiter = RateLimiter.create(4);
 
     /**
      * 预约订单队列
@@ -69,16 +71,17 @@ public class StartChargeDelayJob implements DelayService<DelayChargeOrder> {
         START_DELAY_QUEUE.addAll(delayList);
 
         // 开启线程处理队列消息
-        executor.execute(() -> {
-            ThreadLocal<String> threadLocal = new ThreadLocal<>();
-            log.info("预约充电订单处理线程:{}", Thread.currentThread().getName());
-            DelayedItem<DelayChargeOrder> delayedItem;
-            while (true) {
+        while (true) {
+            executor.execute(() -> {
+                ThreadLocal<String> threadLocal = new ThreadLocal<>();
+                log.info("预约充电订单处理线程:{}", Thread.currentThread().getName());
+                DelayedItem<DelayChargeOrder> delayedItem;
+
                 try {
                     // 线程休眠100ms
                     Thread.sleep(100);
                     delayedItem = START_DELAY_QUEUE.take();
-                    log.info("出队预约充电订单:{},队列剩余:{}", delayedItem.data.getStartChargeSeq(), START_DELAY_QUEUE.size() - 1);
+                    log.info("出队预约充电订单:{},队列剩余:{}", delayedItem.data.getStartChargeSeq(), START_DELAY_QUEUE.size());
                     // 启动充电
                     var order = delayedItem.data;
                     threadLocal.set(order.getStartChargeSeq());
@@ -97,16 +100,14 @@ public class StartChargeDelayJob implements DelayService<DelayChargeOrder> {
                                 .eq(ChargeOrder::getStartChargeSeq, threadLocal.get())
                                 .set(ChargeOrder::getChargeStatus, ChargeOrder.CHARGE_STATUS_已结束)
                                 .set(ChargeOrder::getOrderStatus, ChargeOrder.ORDER_STATUS_失败)
-                                .set(ChargeOrder::getStopReason, "预约启动充电失败")
+                                .set(ChargeOrder::getStopReason, ChargeOrder.STOP_REASON_预约启动充电失败)
                                 .update();
-                        // todo 这里是否会阻塞线程
                     }
                 } finally {
                     threadLocal.remove();
                 }
-            }
-        });
-
+            });
+        }
     }