diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryStationStatusController.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryStationStatusController.java index faef9a02..46181882 100644 --- a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryStationStatusController.java +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/api/QueryStationStatusController.java @@ -1,14 +1,30 @@ package com.xhpc.evcs.api; import com.xhpc.common.api.dto.ChargingStationDto; -import com.xhpc.evcs.dto.*; +import com.xhpc.common.domain.XhpcTerminal; +import com.xhpc.evcs.dto.CommonRequest; +import com.xhpc.evcs.dto.CommonResponse; +import com.xhpc.evcs.dto.ConnectorStatusInfo; +import com.xhpc.evcs.dto.StationStatusInfo; +import com.xhpc.evcs.dto.StationStatusInfoWrapper; +import com.xhpc.evcs.dto.StationStatusRequest; import com.xhpc.evcs.encryption.EvcsConst; +import com.xhpc.evcs.jpa.XhpcTerminalRepository; import com.xhpc.evcs.utils.JSONUtil; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; -import java.util.*; +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; import static cn.hutool.core.util.NumberUtil.isInteger; import static com.xhpc.common.data.redis.StaticBeanUtil.REDIS; @@ -16,6 +32,8 @@ import static com.xhpc.common.data.redis.StaticBeanUtil.REDIS; @RestController public class QueryStationStatusController { + @Resource + XhpcTerminalRepository terminalRepository; @PostMapping("/v1/query_station_status") public CommonResponse queryStationsInfo(@RequestBody CommonRequest commonRequest) throws Exception { @@ -46,6 +64,10 @@ public class QueryStationStatusController { for (int i = 0; i < keys.length; i++) { statusMap.put(keys[i], values[i]); } + + List terminalList = terminalRepository.selectStatusBySql(); + Map terminalDBMap = terminalList.stream().collect(Collectors.toMap(XhpcTerminal::getSerialNumber,XhpcTerminal::getStatus)); + for (String stationID : stationIDs) { ChargingStationDto chargingStationDto = REDIS.getCacheObject("station:" + stationID); Set pileIds = new HashSet<>(); @@ -59,11 +81,20 @@ public class QueryStationStatusController { if (pileId.equals(value.substring(0, 14))) { existsGun = true; ConnectorStatusInfo connectorStatusInfo = new ConnectorStatusInfo(); - Object status = REDIS.getCacheMapValue("gun:" + value, "status"); - if (isInteger(status.toString())) { - connectorStatusInfo.setStatus(3); + Integer gunStatus = terminalDBMap.get(value); + if (gunStatus == null){ + existsGun = false; } else { - connectorStatusInfo.setStatus(statusMap.get(status)); + if (gunStatus == 0){ + Object status = REDIS.getCacheMapValue("gun:" + value, "status"); + if (isInteger(status.toString())) { + connectorStatusInfo.setStatus(3); + } else { + connectorStatusInfo.setStatus(statusMap.get(status)); + } + } else { + connectorStatusInfo.setStatus(0); + } } connectorStatusInfo.setConnectorID(value); connectorStatusInfos.add(connectorStatusInfo); diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/jpa/XhpcTerminalRepository.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/jpa/XhpcTerminalRepository.java index 2918c6eb..88d22ba6 100644 --- a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/jpa/XhpcTerminalRepository.java +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/jpa/XhpcTerminalRepository.java @@ -7,6 +7,7 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.QueryByExampleExecutor; import org.springframework.stereotype.Repository; +import java.util.List; import java.util.Optional; /** @@ -31,4 +32,7 @@ public interface XhpcTerminalRepository extends JpaRepository selectStatusBySql(); } diff --git a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/NotificationStationStatusTask.java b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/NotificationStationStatusTask.java index 6ec28d03..4ed540e8 100644 --- a/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/NotificationStationStatusTask.java +++ b/evcs-modules/evcs-core/src/main/java/com/xhpc/evcs/notification/NotificationStationStatusTask.java @@ -1,6 +1,7 @@ package com.xhpc.evcs.notification; import com.xhpc.common.api.dto.ChargingStationDto; +import com.xhpc.common.domain.XhpcTerminal; import com.xhpc.evcs.domain.AuthSecretToken; import com.xhpc.evcs.domain.XhpcInternetUser; import com.xhpc.evcs.domain.XhpcStationInternetBlacklist; @@ -10,6 +11,7 @@ import com.xhpc.evcs.dto.ConnectorStatusInfoReq; import com.xhpc.evcs.jpa.AuthSecretTokenRepository; import com.xhpc.evcs.jpa.XhpcInternetUserRepository; import com.xhpc.evcs.jpa.XhpcStationInternetBlacklistRepository; +import com.xhpc.evcs.jpa.XhpcTerminalRepository; import com.xhpc.evcs.utils.ChangePoleStatus; import com.xhpc.evcs.utils.JSONUtil; import lombok.extern.slf4j.Slf4j; @@ -17,13 +19,22 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import javax.annotation.Resource; import java.io.IOException; import java.time.Instant; -import java.util.*; +import java.util.Collection; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; import static com.xhpc.common.data.redis.StaticBeanUtil.REDIS; import static com.xhpc.evcs.domain.AuthSecretToken.SECRET_TOKEN_TYPE_OUT; -import static com.xhpc.evcs.dto.ConnectorStatusInfo.*; +import static com.xhpc.evcs.dto.ConnectorStatusInfo.CHARGING; +import static com.xhpc.evcs.dto.ConnectorStatusInfo.ERROR; +import static com.xhpc.evcs.dto.ConnectorStatusInfo.FREE; +import static com.xhpc.evcs.dto.ConnectorStatusInfo.OFF_LINE; @Component @Slf4j @@ -35,12 +46,17 @@ public class NotificationStationStatusTask extends CoreDispatcher { private XhpcInternetUserRepository xhpcInternetUserRepository; @Autowired private XhpcStationInternetBlacklistRepository xhpcStationInternetBlacklistRepo; + @Resource + private XhpcTerminalRepository terminalRepository; @Scheduled(fixedRate = 1000 * 45) protected void run() throws IOException { Collection stationTerminalKeys = REDIS.keys("stationTerminalStatus:*"); + List terminalList = terminalRepository.selectStatusBySql(); + Map terminalDBMap = terminalList.stream().collect(Collectors.toMap(XhpcTerminal::getSerialNumber,XhpcTerminal::getStatus)); + Instant now = Instant.now(); List xhpcInternetUserList = xhpcInternetUserRepository.findByCooperationStartTimeBeforeAndCooperationEndTimeAfter(now, now); @@ -49,7 +65,7 @@ public class NotificationStationStatusTask extends CoreDispatcher { "station")); String operatorId = chargingStationDto.getOperatorId(); Map terminalStatusMap = REDIS.getCacheMap(stationTerminalKey); - Set connectorStatusInfos = translateStatus(operatorId, terminalStatusMap); + Set connectorStatusInfos = translateStatus(operatorId, terminalStatusMap, terminalDBMap); Set changeStatus = ChangePoleStatus.getChangeStatus(connectorStatusInfos); if (!changeStatus.isEmpty()) { for (XhpcInternetUser xhpcInternetUser : xhpcInternetUserList) { @@ -70,7 +86,7 @@ public class NotificationStationStatusTask extends CoreDispatcher { } } - private Set translateStatus(String operatorId, Map terminalStatusMap) { + private Set translateStatus(String operatorId, Map terminalStatusMap, Map terminalDBMap) { Set connectorStatusInfoList = new HashSet<>(); final Set connectorIds = terminalStatusMap.keySet(); @@ -78,7 +94,12 @@ public class NotificationStationStatusTask extends CoreDispatcher { ConnectorStatusInfo connectorStatusInfo = new ConnectorStatusInfo(); connectorStatusInfo.setConnectorID(gunId); connectorStatusInfo.setOperatorID(operatorId); - connectorStatusInfo.setStatus(translateStatus(terminalStatusMap.get(gunId))); + Integer dbStatus = terminalDBMap.get(gunId); + if(dbStatus == 0){ + connectorStatusInfo.setStatus(translateStatus(terminalStatusMap.get(gunId))); + } else { + connectorStatusInfo.setStatus(0); + } connectorStatusInfoList.add(connectorStatusInfo); } return connectorStatusInfoList;