瀏覽代碼

预约校验已插枪

skyline 2 年之前
父節點
當前提交
287ff57eb7

+ 33 - 0
common/src/main/java/com/kym/common/cache/ConnectorStatusCache.java

@@ -0,0 +1,33 @@
+package com.kym.common.cache;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * @author skyline
+ * @description 充电接口缓存
+ * @date 2023-11-08 22:02
+ */
+public enum ConnectorStatusCache {
+    INSTANCE;
+
+    private static ConcurrentHashMap<String, Integer> cache = new ConcurrentHashMap<>();
+
+    public void put(String key, Integer value) {
+        cache.put(key, value);
+    }
+
+    public void putAll(Map<String, Integer> map) {
+        cache.putAll(map);
+    }
+
+
+    public Integer get(String key) {
+        return cache.get(key);
+    }
+
+    public void remove(String key) {
+        cache.remove(key);
+    }
+
+}

+ 4 - 6
service/src/main/java/com/kym/service/enplus/impl/EnNotifyServiceImpl.java

@@ -4,6 +4,7 @@ import cn.hutool.extra.mail.MailUtil;
 import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.kym.common.cache.ConnectorStatusCache;
 import com.kym.common.config.RedisDBChangeUtil;
 import com.kym.entity.admin.EquipmentInfo;
 import com.kym.entity.admin.MonitorLog;
@@ -29,7 +30,6 @@ import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
-import java.util.concurrent.ConcurrentHashMap;
 import java.util.stream.Collectors;
 
 /**
@@ -42,8 +42,6 @@ import java.util.stream.Collectors;
 public class EnNotifyServiceImpl implements EnNotifyService {
     private static final Logger LOGGER = LoggerFactory.getLogger(EnNotifyServiceImpl.class);
 
-    public static ConcurrentHashMap<String, Integer> equipmentStatusCache = new ConcurrentHashMap<>();
-
     private final EnPlusService enPlusService;
 
     private final ChargeOrderService chargeOrderService;
@@ -84,7 +82,7 @@ public class EnNotifyServiceImpl implements EnNotifyService {
         this.orderRechargeRightsService = orderRechargeRightsService;
         this.kymCache = kymCache;
         this.redisDBChangeUtil = redisDBChangeUtil;
-        equipmentStatusCache.putAll(equipmentInfoService.list().stream().collect(Collectors.toMap(EquipmentInfo::getEquipmentId, EquipmentInfo::getServiceStatus)));
+        ConnectorStatusCache.INSTANCE.putAll(equipmentInfoService.list().stream().collect(Collectors.toMap(EquipmentInfo::getEquipmentId, EquipmentInfo::getServiceStatus)));
     }
 
     /**
@@ -146,11 +144,11 @@ public class EnNotifyServiceImpl implements EnNotifyService {
         }
 
         // 设备状态变为空闲,校验是否有预约订单,有则清除预约订单数据。
-        if (connectorStatus == 1 && equipmentStatusCache.get(equipmentId) != 1) {
+        if (connectorStatus == 1 && ConnectorStatusCache.INSTANCE.get(equipmentId) != 1) {
             LOGGER.info("设备:{}状态转为空闲,清除设备预约数据...", connectorId);
             chargeService.cancelBookingByConnector(connectorId);
         }
-        equipmentStatusCache.put(equipmentId, connectorStatus);
+        ConnectorStatusCache.INSTANCE.put(equipmentId, connectorStatus);
 
         return """
                 {

+ 7 - 0
service/src/main/java/com/kym/service/miniapp/impl/ChargeServiceImpl.java

@@ -4,6 +4,7 @@ import cn.dev33.satoken.stp.StpUtil;
 import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
+import com.kym.common.cache.ConnectorStatusCache;
 import com.kym.common.config.EnPlusConfig;
 import com.kym.common.constant.ResponseEnum;
 import com.kym.common.exception.BusinessException;
@@ -185,6 +186,12 @@ public class ChargeServiceImpl implements ChargeService {
             if (TimeUnit.SECONDS.convert(Duration.between(LocalDateTime.now(), startTime)) > 3600 * 24) {
                 throw new BusinessException("预约充电启动时间不能超过未来24小时");
             }
+
+            // 设备是否插枪
+            if (ConnectorStatusCache.INSTANCE.get(connectorId) != EquipmentInfo.SERVICE_STATUS_已连接) {
+                throw new BusinessException("请插入充电枪");
+            }
+
             // 预约充电通过connectorId查询预约中的订单
             var bookingOrder = chargeOrderService.lambdaQuery().eq(ChargeOrder::getUserId, userId).eq(ChargeOrder::getConnectorId, connectorId).eq(ChargeOrder::getIsBooking, ChargeOrder.IS_BOOKING_是).eq(ChargeOrder::getOrderStatus, ChargeOrder.ORDER_STATUS_未知).eq(ChargeOrder::getChargeStatus, ChargeOrder.CHARGE_STATUS_预约中).one();
             if (bookingOrder != null) {