|
|
@@ -71,15 +71,17 @@ public class StartChargeDelayJob implements DelayService<DelayChargeOrder> {
|
|
|
START_DELAY_QUEUE.addAll(delayList);
|
|
|
|
|
|
// 开启线程处理队列消息
|
|
|
+ processDelayedOrders();
|
|
|
+ }
|
|
|
+
|
|
|
+ private void processDelayedOrders() {
|
|
|
while (true) {
|
|
|
executor.execute(() -> {
|
|
|
- ThreadLocal<String> threadLocal = new ThreadLocal<>();
|
|
|
+ ThreadLocal<String> threadLocal = ThreadLocal.withInitial(() -> null); // 初始化为空值,避免使用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());
|
|
|
// 启动充电
|
|
|
@@ -87,8 +89,8 @@ public class StartChargeDelayJob implements DelayService<DelayChargeOrder> {
|
|
|
threadLocal.set(order.getStartChargeSeq());
|
|
|
chargeService.queryStartCharge(order.getUserId(), order.getConnectorId(), null, false, null, null);
|
|
|
log.info("预约充电启动成功:用户:{},订单号:{},预约启动时间:{}", order.getUserId(), order.getStartChargeSeq(), order.getStartTime());
|
|
|
- // 线程休眠100ms
|
|
|
- Thread.sleep(200);
|
|
|
+ // 线程休眠250ms
|
|
|
+ Thread.sleep(250);
|
|
|
} catch (Exception e) {
|
|
|
if (e instanceof InterruptedException) {
|
|
|
log.error("预约充电队列take异常", e);
|
|
|
@@ -107,6 +109,14 @@ public class StartChargeDelayJob implements DelayService<DelayChargeOrder> {
|
|
|
threadLocal.remove();
|
|
|
}
|
|
|
});
|
|
|
+ if (!executor.isTerminated()) {
|
|
|
+ try {
|
|
|
+ Thread.sleep(100);
|
|
|
+ } catch (InterruptedException e) {
|
|
|
+ log.error("Delay queue processing interrupted.", e);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|