فهرست منبع

充电枪口状态缓存修改

skyline 1 سال پیش
والد
کامیت
1402cef706

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

@@ -1,33 +0,0 @@
-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);
-    }
-
-}

+ 1 - 0
entity/src/main/java/com/kym/entity/common/RedisKeys.java

@@ -10,6 +10,7 @@ public interface RedisKeys {
     String OFFLINE = "OFFLINE:";
     String OFFLINE_EXPIRED = "OFFLINE_EXPIRED:";
     String CONNECTOR_ID_TO_SHORT_ID = "CONNECTOR_ID_TO_SHORT_ID:";
+    String CONNECTOR_ID_TO_STATUS = "CONNECTOR_ID_TO_STATUS:";
     String CONNECTOR_ID_TO_STATION_ID = "CONNECTOR_ID_TO_STATION_ID:";
     String STATION_ID_TO_NAME = "STATION_ID_TO_NAME:";
     String CONNECTOR_ID_TO_PARKING_NO = "CONNECTOR_ID_TO_PARKING_NO:";

+ 1 - 0
service/src/main/java/com/kym/service/admin/impl/StationServiceImpl.java

@@ -197,6 +197,7 @@ public class StationServiceImpl extends MyBaseServiceImpl<StationMapper, Station
 
         // 缓存更新,其他数据在站点导入时更新 com.kym.service.admin.impl.StationServiceImpl.importStation
         KymCache.INSTANCE.putStationId2Name(Map.of(stationVo.getStationId(), stationVo.getStationName()));
+        KymCache.INSTANCE.putConnectorId2Status(connectorList.stream().collect(Collectors.toMap(ConnectorInfo::getConnectorId, ConnectorInfo::getStatus)));
 
     }
 

+ 26 - 0
service/src/main/java/com/kym/service/cache/KymCache.java

@@ -13,6 +13,7 @@ import org.springframework.stereotype.Component;
 
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.stream.Collectors;
 
@@ -28,6 +29,31 @@ public enum KymCache {
     private static ConcurrentHashMap<String, String> CONNECTOR_ID_SHORT_ID_MAPPING = new ConcurrentHashMap<>();
 
 
+    /**
+     * 获取枪头状态
+     *
+     * @param connectorId
+     * @return
+     */
+    public Integer getConnectorStatus(String connectorId) {
+        return Integer.valueOf(Objects.requireNonNull(KymCacheInjector.redisTemplate.opsForValue().get(RedisKeys.CONNECTOR_ID_TO_SHORT_ID + connectorId)));
+    }
+
+    /**
+     * 缓存枪头状态
+     *
+     * @param map
+     */
+    public void putConnectorId2Status(Map<String, Integer> map) {
+        map.forEach((k, v) -> KymCacheInjector.redisTemplate.opsForValue().set(RedisKeys.CONNECTOR_ID_TO_STATUS + k, String.valueOf(v)));
+    }
+
+
+    /**
+     * 缓存枪头短编号
+     *
+     * @param map
+     */
     public void putConnectorId2ShortId(Map<String, String> map) {
         CONNECTOR_ID_SHORT_ID_MAPPING.putAll(map);
         map.forEach((k, v) -> KymCacheInjector.redisTemplate.opsForValue().set(RedisKeys.CONNECTOR_ID_TO_SHORT_ID + k, v));

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

@@ -4,7 +4,6 @@ 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.entity.admin.ConnectorInfo;
 import com.kym.entity.admin.EquipmentInfo;
 import com.kym.entity.admin.MonitorLog;
@@ -35,6 +34,7 @@ import org.springframework.transaction.annotation.Transactional;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -75,7 +75,7 @@ public class EnNotifyServiceImpl implements EnNotifyService {
 
     @PostConstruct
     void init() {
-        ConnectorStatusCache.INSTANCE.putAll(equipmentInfoService.list().stream().collect(Collectors.toMap(item -> item.getEquipmentId().concat("1"), EquipmentInfo::getServiceStatus)));
+        KymCache.INSTANCE.putConnectorId2Status(connectorInfoService.list().stream().collect(Collectors.toMap(item -> item.getConnectorId().concat("1"), ConnectorInfo::getStatus)));
     }
 
     /**
@@ -140,11 +140,11 @@ public class EnNotifyServiceImpl implements EnNotifyService {
         }
 
         // 设备状态变为空闲,校验是否有预约订单,有则清除预约订单数据。
-        if (connectorStatus == 1 && ConnectorStatusCache.INSTANCE.get(connectorId) != 1) {
+        if (connectorStatus == EquipmentInfo.SERVICE_STATUS_空闲 && KymCache.INSTANCE.getConnectorStatus(connectorId) != EquipmentInfo.SERVICE_STATUS_空闲) {
             LOGGER.info("设备:{}状态转为空闲,清除设备预约数据...", connectorId);
             chargeService.cancelBookingByConnector(connectorId);
         }
-        ConnectorStatusCache.INSTANCE.put(connectorId, connectorStatus);
+        KymCache.INSTANCE.putConnectorId2Status(Map.of(connectorId, connectorStatus));
 
         return """
                 {

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

@@ -5,7 +5,6 @@ import com.alibaba.fastjson2.JSONObject;
 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;
@@ -20,6 +19,7 @@ import com.kym.entity.miniapp.delay.DelayChargeOrder;
 import com.kym.service.admin.ConnectorInfoService;
 import com.kym.service.admin.EquipmentInfoService;
 import com.kym.service.admin.EquipmentRelationService;
+import com.kym.service.cache.KymCache;
 import com.kym.service.enplus.EnPlusService;
 import com.kym.service.jobs.DelayService;
 import com.kym.service.miniapp.*;
@@ -325,7 +325,7 @@ public class ChargeServiceImpl implements ChargeService {
         }
 
         // 设备是否插枪
-        if (ConnectorStatusCache.INSTANCE.get(connectorId) == EquipmentInfo.SERVICE_STATUS_空闲) {
+        if (KymCache.INSTANCE.getConnectorStatus(connectorId) == EquipmentInfo.SERVICE_STATUS_空闲) {
             throw new BusinessException("请插入充电枪");
         }