更新推送第三方判断桩禁用状态

This commit is contained in:
panshuling321 2022-08-24 10:45:24 +08:00
parent 68ef7ab098
commit 8afe372b62
3 changed files with 67 additions and 11 deletions

View File

@ -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<StationStatusRequest> 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<XhpcTerminal> terminalList = terminalRepository.selectStatusBySql();
Map<String,Integer> terminalDBMap = terminalList.stream().collect(Collectors.toMap(XhpcTerminal::getSerialNumber,XhpcTerminal::getStatus));
for (String stationID : stationIDs) {
ChargingStationDto chargingStationDto = REDIS.getCacheObject("station:" + stationID);
Set<String> 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);

View File

@ -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<XhpcTerminal, Inte
@Query("select t.pileSerialNumber from XhpcTerminal as t where t.delFlag = 0 and t.serialNumber = ?1")
String selectBySql(String serialNumber);
@Query("select t.serialNumber, t.status from XhpcTerminal as t where t.delFlag = 0")
List<XhpcTerminal> selectStatusBySql();
}

View File

@ -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<String> stationTerminalKeys = REDIS.keys("stationTerminalStatus:*");
List<XhpcTerminal> terminalList = terminalRepository.selectStatusBySql();
Map<String,Integer> terminalDBMap = terminalList.stream().collect(Collectors.toMap(XhpcTerminal::getSerialNumber,XhpcTerminal::getStatus));
Instant now = Instant.now();
List<XhpcInternetUser> xhpcInternetUserList =
xhpcInternetUserRepository.findByCooperationStartTimeBeforeAndCooperationEndTimeAfter(now, now);
@ -49,7 +65,7 @@ public class NotificationStationStatusTask extends CoreDispatcher {
"station"));
String operatorId = chargingStationDto.getOperatorId();
Map<String, String> terminalStatusMap = REDIS.getCacheMap(stationTerminalKey);
Set<ConnectorStatusInfo> connectorStatusInfos = translateStatus(operatorId, terminalStatusMap);
Set<ConnectorStatusInfo> connectorStatusInfos = translateStatus(operatorId, terminalStatusMap, terminalDBMap);
Set<ConnectorStatusInfo> changeStatus = ChangePoleStatus.getChangeStatus(connectorStatusInfos);
if (!changeStatus.isEmpty()) {
for (XhpcInternetUser xhpcInternetUser : xhpcInternetUserList) {
@ -70,7 +86,7 @@ public class NotificationStationStatusTask extends CoreDispatcher {
}
}
private Set<ConnectorStatusInfo> translateStatus(String operatorId, Map<String, String> terminalStatusMap) {
private Set<ConnectorStatusInfo> translateStatus(String operatorId, Map<String, String> terminalStatusMap, Map<String, Integer> terminalDBMap) {
Set<ConnectorStatusInfo> connectorStatusInfoList = new HashSet<>();
final Set<String> 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;