Преглед на файлове

Merge branch 'master' into dev

skyline преди 2 години
родител
ревизия
19969f3869

+ 2 - 1
common/src/main/java/com/kym/common/constant/ResponseEnum.java

@@ -53,7 +53,8 @@ public enum ResponseEnum implements BusinessExceptionAssert {
     // EN+
     EN_PLUS_API_EXCEPTION(90000, "接口数据异常"),
     EN_PLUS_QUERY_TOKEN_ERROR(90001, "TOKEN获取异常"),
-    EN_PLUS_PUSH_SIGN_FAIL(90002, "EN+推送数据验签失败");
+    EN_PLUS_PUSH_SIGN_FAIL(90002, "EN+推送数据验签失败"),
+    EN_PLUS_TOKEN_EXCEPTION(90003,"EN+TOKEN过期");
 
     private final Integer code;
     private final String message;

+ 8 - 1
miniapp/src/main/java/com/kym/miniapp/jobs/StartChargeDelayJob.java

@@ -2,6 +2,8 @@ package com.kym.miniapp.jobs;
 
 import com.baomidou.dynamic.datasource.annotation.DS;
 import com.google.common.util.concurrent.RateLimiter;
+import com.kym.common.constant.ResponseEnum;
+import com.kym.common.exception.BusinessException;
 import com.kym.common.utils.CommUtil;
 import com.kym.entity.miniapp.ChargeOrder;
 import com.kym.entity.miniapp.delay.DelayChargeOrder;
@@ -81,7 +83,7 @@ public class StartChargeDelayJob implements DelayService<DelayChargeOrder> {
             executor.execute(() -> {
                 ThreadLocal<String> threadLocal = ThreadLocal.withInitial(() -> null); // 初始化为空值,避免使用new ThreadLocal()
                 log.info("预约启动充电处理线程:{}", Thread.currentThread().getName());
-                DelayedItem<DelayChargeOrder> delayedItem;
+                DelayedItem<DelayChargeOrder> delayedItem = null;
 
                 try {
                     delayedItem = START_DELAY_QUEUE.take();
@@ -98,6 +100,11 @@ public class StartChargeDelayJob implements DelayService<DelayChargeOrder> {
                         log.error("预约充电队列take异常", e);
                     } else {
                         log.info("预约启动充电失败,订单号:{}", threadLocal.get());
+                        if (e instanceof BusinessException && (ResponseEnum.EN_PLUS_TOKEN_EXCEPTION.getCode().equals(((BusinessException) e).getCode()))) {
+                            log.info("EN+ token异常,预约订单重试");
+                            // token异常就重新放入队列重试
+                            addToDelayQueue(delayedItem);
+                        }
                         log.error(e.getMessage());
                         // 启动失败将订单状态修改为充电状态已结束,订单状态已确认,结束原因:预约启动失败
                         chargeOrderService.lambdaUpdate()

+ 5 - 1
service/src/main/java/com/kym/service/enplus/impl/EnPlusServiceImpl.java

@@ -87,7 +87,11 @@ public class EnPlusServiceImpl implements EnPlusService {
             return response;
         } else {
             LOGGER.error(":url:{}\n params:{}\ntoken:{}\n返回信息:{}", url, params, token, response);
-            // todo 如果返回Ret=4002,token错误的情况下,删除redis中的token,如果是预约订单则将此订单设置为延迟启动
+            if(4002 == response.getRet() ){
+                // 如果返回Ret=4002,token错误的情况下,删除redis中的token,如果是预约订单则将此订单设置为延迟启动
+                redisTemplate.delete(RedisKeys.EN_PLUS_TOKEN);
+                throw new BusinessException(ResponseEnum.EN_PLUS_TOKEN_EXCEPTION);
+            }
             throw new BusinessException(ResponseEnum.EN_PLUS_API_EXCEPTION);
         }
     }