feat: Minor fixes

feature/altai
Terekhin Alexandr 2 years ago
parent 103d5bb8a4
commit d152918b8a
Signed by: didinst
GPG Key ID: D2EF94423C23BF12
  1. 42
      src/main/java/com/yablochkov/ocppstub/TransactionService.java
  2. 7
      src/main/java/com/yablochkov/ocppstub/rest/ResetController.java

@ -18,6 +18,8 @@ import java.util.Objects;
import java.util.Optional; import java.util.Optional;
import java.util.UUID; import java.util.UUID;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -27,6 +29,7 @@ import org.springframework.stereotype.Service;
@Service @Service
@Slf4j @Slf4j
public class TransactionService { public class TransactionService {
private final static long REMOTE_TIMEOUT_SEC = 10;
private final AtomicInteger transactionNumber = new AtomicInteger(); private final AtomicInteger transactionNumber = new AtomicInteger();
private final Map<String,Integer> transactionMap = new HashMap<>(); private final Map<String,Integer> transactionMap = new HashMap<>();
@ -62,11 +65,13 @@ public class TransactionService {
.ifPresentOrElse( .ifPresentOrElse(
(id) -> log.info("Transaction id {} removed ({} requested)", id, transactionId), (id) -> log.info("Transaction id {} removed ({} requested)", id, transactionId),
() -> log.info("Nothing to remove for {}", transactionId)); () -> log.info("Nothing to remove for {}", transactionId));
log.info("Stop by request completed");
} }
public RemoteStartTransactionConfirmation remoteStart(String id, Integer connectorId) { public RemoteStartTransactionConfirmation remoteStart(String identity, Integer connectorId) {
log.info("Try to start transaction for {}", id); log.info("Try to start transaction for {}", identity);
var session = sessionService.getSessionByIdentity(id); var session = sessionService.getSessionByIdentity(identity);
log.info("Found session {}", session); log.info("Found session {}", session);
if (Objects.nonNull(session)) { if (Objects.nonNull(session)) {
@ -79,20 +84,24 @@ public class TransactionService {
request.setConnectorId(connectorId); request.setConnectorId(connectorId);
} }
log.info("Send start transaction request {}", request);
var future = ocppStub.send(session, request); var future = ocppStub.send(session, request);
Confirmation confirmation = future.toCompletableFuture().get(); Confirmation confirmation = future.toCompletableFuture()
.get(REMOTE_TIMEOUT_SEC, TimeUnit.SECONDS);
if (confirmation instanceof RemoteStartTransactionConfirmation startConfirmation) { if (confirmation instanceof RemoteStartTransactionConfirmation startConfirmation) {
var status = startConfirmation.getStatus(); var status = startConfirmation.getStatus();
log.info("Start transaction status {}", status); log.info("Start transaction status {}", status);
if (RemoteStartStopStatus.Accepted.equals(status)) { if (RemoteStartStopStatus.Accepted.equals(status)) {
transactionMap.remove(id); transactionMap.remove(identity);
} }
return startConfirmation; return startConfirmation;
} }
} catch (InterruptedException | ExecutionException | OccurenceConstraintException | } catch (InterruptedException | ExecutionException | OccurenceConstraintException |
UnsupportedFeatureException | NotConnectedException e) { UnsupportedFeatureException | NotConnectedException e) {
log.error("Caught exception on transaction start", e); log.error("Caught exception on transaction start", e);
} catch (TimeoutException e) {
log.error("Remote start transaction confirmation exception, ps not responding", e);
} }
} }
throw new RuntimeException("Can't start transaction"); throw new RuntimeException("Can't start transaction");
@ -130,4 +139,27 @@ public class TransactionService {
} }
throw new RuntimeException("Can't stop transaction"); throw new RuntimeException("Can't stop transaction");
} }
public RemoteStopTransactionConfirmation ByIdentityAndTransactionId(String identity, Integer transactionId) {
var session = Optional.ofNullable(sessionService.getSessionByIdentity(identity))
.orElseThrow();
try {
var future = ocppStub.send(session,
new RemoteStopTransactionRequest(transactionId));
var confirmation = future.toCompletableFuture()
.get(REMOTE_TIMEOUT_SEC, TimeUnit.SECONDS);
if (confirmation instanceof RemoteStopTransactionConfirmation stopConsirmation) {
log.info("Stop confirmation: {}", stopConsirmation);
return stopConsirmation;
}
} catch (OccurenceConstraintException | UnsupportedFeatureException | NotConnectedException |
ExecutionException | InterruptedException | TimeoutException e) {
log.error("Can't stop transaction by id", e);
}
throw new RuntimeException();
}
} }

@ -81,4 +81,11 @@ public class ResetController {
public RemoteStopTransactionConfirmation stopTransaction(@PathVariable("identity") final String identity) { public RemoteStopTransactionConfirmation stopTransaction(@PathVariable("identity") final String identity) {
return transactionService.remoteStop(identity); return transactionService.remoteStop(identity);
} }
@DeleteMapping("/stopById/{identity}/{transactionId}")
public RemoteStopTransactionConfirmation stopTransactionByTransactionId(
@PathVariable("identity") final String identity,
@PathVariable("transactionId") final Integer transactionId ) {
return transactionService.ByIdentityAndTransactionId(identity, transactionId);
}
} }

Loading…
Cancel
Save