From 32f9f49ce5bcb34276a16230b2c088c3167e5cc1 Mon Sep 17 00:00:00 2001 From: DanielOber <145556033+DanielOber@users.noreply.github.com> Date: Tue, 26 Mar 2024 10:34:42 +0100 Subject: [PATCH] Feat/dave 88 kfz detektordaten auswertung belastungsplan (#63) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * gen von geodaten eai * anpassungen fürs frontend * alle zahlen werden dymaisch ausgefüllt * rad Daten hinzugefügt * umbennenung files * unnötige variable entfernt * test für belastungsplan hinzugefügt * review eingefügt * Serializable hinzugefügt und private gemacht * spotless * header hinzugefügt --- .../BelastungsplanMessquerschnitteDTO.java | 24 ++ ...eBelastungsplanMessquerschnittDataDTO.java | 23 ++ .../messwerte/LadeProcessedMesswerteDTO.java | 1 + .../MessstelleOptionsmenuControllerApi.java | 8 +- .../geodateneai/gen/api/MesswerteApi.java | 18 +- .../gen/model/MeasurementValuesResponse.java | 137 +++++++++++ .../model/TotalSumOfAllMessquerschnitte.java | 115 +++++++++ .../gen/model/TotalSumPerMessquerschnitt.java | 231 ++++++++++++++++++ .../messstelle/BelastungsplanService.java | 72 ++++++ .../services/messstelle/MesswerteService.java | 34 ++- src/main/resources/api/geodateneai.json | 72 +++++- .../messstelle/BelastungsplanServiceTest.java | 166 +++++++++++++ 12 files changed, 865 insertions(+), 36 deletions(-) create mode 100644 src/main/java/de/muenchen/dave/domain/dtos/laden/messwerte/BelastungsplanMessquerschnitteDTO.java create mode 100644 src/main/java/de/muenchen/dave/domain/dtos/laden/messwerte/LadeBelastungsplanMessquerschnittDataDTO.java create mode 100644 src/main/java/de/muenchen/dave/geodateneai/gen/model/MeasurementValuesResponse.java create mode 100644 src/main/java/de/muenchen/dave/geodateneai/gen/model/TotalSumOfAllMessquerschnitte.java create mode 100644 src/main/java/de/muenchen/dave/geodateneai/gen/model/TotalSumPerMessquerschnitt.java create mode 100644 src/main/java/de/muenchen/dave/services/messstelle/BelastungsplanService.java create mode 100644 src/test/java/de/muenchen/dave/services/messstelle/BelastungsplanServiceTest.java diff --git a/src/main/java/de/muenchen/dave/domain/dtos/laden/messwerte/BelastungsplanMessquerschnitteDTO.java b/src/main/java/de/muenchen/dave/domain/dtos/laden/messwerte/BelastungsplanMessquerschnitteDTO.java new file mode 100644 index 00000000..40349f93 --- /dev/null +++ b/src/main/java/de/muenchen/dave/domain/dtos/laden/messwerte/BelastungsplanMessquerschnitteDTO.java @@ -0,0 +1,24 @@ +/* + * Copyright (c): it@M - Dienstleister für Informations- und Telekommunikationstechnik + * der Landeshauptstadt München, 2020 + */ +package de.muenchen.dave.domain.dtos.laden.messwerte; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.List; +import lombok.Data; + +@Data +public class BelastungsplanMessquerschnitteDTO implements Serializable { + private List ladeBelastungsplanMessquerschnittDataDTOList; + private String strassenname; + private String mstId; + private Integer stadtbezirkNummer; + private Integer totalKfz; + private Integer totalSv; + private Integer totalGv; + private Integer totalRad; + private BigDecimal totalPercentSv; + private BigDecimal totalPercentGv; +} diff --git a/src/main/java/de/muenchen/dave/domain/dtos/laden/messwerte/LadeBelastungsplanMessquerschnittDataDTO.java b/src/main/java/de/muenchen/dave/domain/dtos/laden/messwerte/LadeBelastungsplanMessquerschnittDataDTO.java new file mode 100644 index 00000000..2d58f278 --- /dev/null +++ b/src/main/java/de/muenchen/dave/domain/dtos/laden/messwerte/LadeBelastungsplanMessquerschnittDataDTO.java @@ -0,0 +1,23 @@ +/* + * Copyright (c): it@M - Dienstleister für Informations- und Telekommunikationstechnik + * der Landeshauptstadt München, 2020 + */ +package de.muenchen.dave.domain.dtos.laden.messwerte; + +import java.io.Serializable; +import java.math.BigDecimal; +import lombok.Data; + +@Data +public class LadeBelastungsplanMessquerschnittDataDTO implements Serializable { + + private String mqId; + private Integer sumKfz; + private Integer sumSv; + private Integer sumGv; + private Integer sumRad; + private String direction; + + private BigDecimal percentSv; + private BigDecimal percentGV; +} diff --git a/src/main/java/de/muenchen/dave/domain/dtos/laden/messwerte/LadeProcessedMesswerteDTO.java b/src/main/java/de/muenchen/dave/domain/dtos/laden/messwerte/LadeProcessedMesswerteDTO.java index 2dd22f2b..ee05663f 100644 --- a/src/main/java/de/muenchen/dave/domain/dtos/laden/messwerte/LadeProcessedMesswerteDTO.java +++ b/src/main/java/de/muenchen/dave/domain/dtos/laden/messwerte/LadeProcessedMesswerteDTO.java @@ -18,4 +18,5 @@ public class LadeProcessedMesswerteDTO implements Serializable { LadeZaehldatenHeatmapDTO zaehldatenHeatmap; + BelastungsplanMessquerschnitteDTO listBelastungsplanMessquerschnitteDTO; } diff --git a/src/main/java/de/muenchen/dave/geodateneai/gen/api/MessstelleOptionsmenuControllerApi.java b/src/main/java/de/muenchen/dave/geodateneai/gen/api/MessstelleOptionsmenuControllerApi.java index cccdbdb5..e982b4e2 100644 --- a/src/main/java/de/muenchen/dave/geodateneai/gen/api/MessstelleOptionsmenuControllerApi.java +++ b/src/main/java/de/muenchen/dave/geodateneai/gen/api/MessstelleOptionsmenuControllerApi.java @@ -130,8 +130,8 @@ public ResponseSpec getNichtPlausibleTageWithResponseSpec(String messstelleId) t /** * Gibt zurück, ob der im Optionsmenue ausgewählte TagesTyp valide ist * - *

500 - Bei der Erstellung oder Durchführung des Requests ist ein Fehler aufgetreten. *

200 - TagesTyp erfolgreich validiert + *

500 - Bei der Erstellung oder Durchführung des Requests ist ein Fehler aufgetreten. * @param chosenTagesTypValidRequestDto The chosenTagesTypValidRequestDto parameter * @return ChosenTagesTypValidDTO * @throws WebClientResponseException if an error occurs while attempting to invoke the API @@ -168,8 +168,8 @@ private ResponseSpec isTagesTypDataValidRequestCreation(ChosenTagesTypValidReque /** * Gibt zurück, ob der im Optionsmenue ausgewählte TagesTyp valide ist * - *

500 - Bei der Erstellung oder Durchführung des Requests ist ein Fehler aufgetreten. *

200 - TagesTyp erfolgreich validiert + *

500 - Bei der Erstellung oder Durchführung des Requests ist ein Fehler aufgetreten. * @param chosenTagesTypValidRequestDto The chosenTagesTypValidRequestDto parameter * @return ChosenTagesTypValidDTO * @throws WebClientResponseException if an error occurs while attempting to invoke the API @@ -182,8 +182,8 @@ public Mono isTagesTypDataValid(ChosenTagesTypValidReque /** * Gibt zurück, ob der im Optionsmenue ausgewählte TagesTyp valide ist * - *

500 - Bei der Erstellung oder Durchführung des Requests ist ein Fehler aufgetreten. *

200 - TagesTyp erfolgreich validiert + *

500 - Bei der Erstellung oder Durchführung des Requests ist ein Fehler aufgetreten. * @param chosenTagesTypValidRequestDto The chosenTagesTypValidRequestDto parameter * @return ResponseEntity<ChosenTagesTypValidDTO> * @throws WebClientResponseException if an error occurs while attempting to invoke the API @@ -196,8 +196,8 @@ public Mono> isTagesTypDataValidWithHttpI /** * Gibt zurück, ob der im Optionsmenue ausgewählte TagesTyp valide ist * - *

500 - Bei der Erstellung oder Durchführung des Requests ist ein Fehler aufgetreten. *

200 - TagesTyp erfolgreich validiert + *

500 - Bei der Erstellung oder Durchführung des Requests ist ein Fehler aufgetreten. * @param chosenTagesTypValidRequestDto The chosenTagesTypValidRequestDto parameter * @return ResponseSpec * @throws WebClientResponseException if an error occurs while attempting to invoke the API diff --git a/src/main/java/de/muenchen/dave/geodateneai/gen/api/MesswerteApi.java b/src/main/java/de/muenchen/dave/geodateneai/gen/api/MesswerteApi.java index ac0c2f73..4ed1c5df 100644 --- a/src/main/java/de/muenchen/dave/geodateneai/gen/api/MesswerteApi.java +++ b/src/main/java/de/muenchen/dave/geodateneai/gen/api/MesswerteApi.java @@ -2,10 +2,10 @@ import de.muenchen.dave.geodateneai.gen.geodaten.ApiClient; -import de.muenchen.dave.geodateneai.gen.model.AverageMeasurementValuesPerIntervalResponse; import de.muenchen.dave.geodateneai.gen.model.GetMeasurementValuesRequest; import de.muenchen.dave.geodateneai.gen.model.GetMesswerteTagesaggregatMessquerschnittResponse; import de.muenchen.dave.geodateneai.gen.model.InformationResponseDto; +import de.muenchen.dave.geodateneai.gen.model.MeasurementValuesResponse; import java.util.HashMap; import java.util.List; @@ -55,7 +55,7 @@ public void setApiClient(ApiClient apiClient) { *

200 - MesswerteIntervalle erfolgreich abgefragt. *

500 - Bei der Erstellung oder Durchführung des Requests ist ein Fehler aufgetreten. * @param getMeasurementValuesRequest The getMeasurementValuesRequest parameter - * @return AverageMeasurementValuesPerIntervalResponse + * @return MeasurementValuesResponse * @throws WebClientResponseException if an error occurs while attempting to invoke the API */ private ResponseSpec getAverageMeasurementValuesPerIntervalRequestCreation(GetMeasurementValuesRequest getMeasurementValuesRequest) throws WebClientResponseException { @@ -83,7 +83,7 @@ private ResponseSpec getAverageMeasurementValuesPerIntervalRequestCreation(GetMe String[] localVarAuthNames = new String[] { }; - ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference() {}; + ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference() {}; return apiClient.invokeAPI("/messwerte/average-per-interval", HttpMethod.POST, pathParams, queryParams, postBody, headerParams, cookieParams, formParams, localVarAccept, localVarContentType, localVarAuthNames, localVarReturnType); } @@ -93,11 +93,11 @@ private ResponseSpec getAverageMeasurementValuesPerIntervalRequestCreation(GetMe *

200 - MesswerteIntervalle erfolgreich abgefragt. *

500 - Bei der Erstellung oder Durchführung des Requests ist ein Fehler aufgetreten. * @param getMeasurementValuesRequest The getMeasurementValuesRequest parameter - * @return AverageMeasurementValuesPerIntervalResponse + * @return MeasurementValuesResponse * @throws WebClientResponseException if an error occurs while attempting to invoke the API */ - public Mono getAverageMeasurementValuesPerInterval(GetMeasurementValuesRequest getMeasurementValuesRequest) throws WebClientResponseException { - ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference() {}; + public Mono getAverageMeasurementValuesPerInterval(GetMeasurementValuesRequest getMeasurementValuesRequest) throws WebClientResponseException { + ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference() {}; return getAverageMeasurementValuesPerIntervalRequestCreation(getMeasurementValuesRequest).bodyToMono(localVarReturnType); } @@ -107,11 +107,11 @@ public Mono getAverageMeasurementVa *

200 - MesswerteIntervalle erfolgreich abgefragt. *

500 - Bei der Erstellung oder Durchführung des Requests ist ein Fehler aufgetreten. * @param getMeasurementValuesRequest The getMeasurementValuesRequest parameter - * @return ResponseEntity<AverageMeasurementValuesPerIntervalResponse> + * @return ResponseEntity<MeasurementValuesResponse> * @throws WebClientResponseException if an error occurs while attempting to invoke the API */ - public Mono> getAverageMeasurementValuesPerIntervalWithHttpInfo(GetMeasurementValuesRequest getMeasurementValuesRequest) throws WebClientResponseException { - ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference() {}; + public Mono> getAverageMeasurementValuesPerIntervalWithHttpInfo(GetMeasurementValuesRequest getMeasurementValuesRequest) throws WebClientResponseException { + ParameterizedTypeReference localVarReturnType = new ParameterizedTypeReference() {}; return getAverageMeasurementValuesPerIntervalRequestCreation(getMeasurementValuesRequest).toEntity(localVarReturnType); } diff --git a/src/main/java/de/muenchen/dave/geodateneai/gen/model/MeasurementValuesResponse.java b/src/main/java/de/muenchen/dave/geodateneai/gen/model/MeasurementValuesResponse.java new file mode 100644 index 00000000..671a78dc --- /dev/null +++ b/src/main/java/de/muenchen/dave/geodateneai/gen/model/MeasurementValuesResponse.java @@ -0,0 +1,137 @@ +/* + * DAVE GEODATA EAI + * DAVE GEODATA EAI - Service zum Abfragen von Geoinformationen + * + * The version of the OpenAPI document: 1.0.0 + * Contact: unbekannt@muenchen.de + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package de.muenchen.dave.geodateneai.gen.model; + +import java.util.Objects; +import java.util.Arrays; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import de.muenchen.dave.geodateneai.gen.model.AverageMeasurementValuesPerIntervalResponse; +import de.muenchen.dave.geodateneai.gen.model.TotalSumOfAllMessquerschnitte; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.annotation.JsonTypeName; + +/** + * MeasurementValuesResponse + */ +@JsonPropertyOrder({ + MeasurementValuesResponse.JSON_PROPERTY_AVERAGE_MEASUREMENT_VALUES_PER_INTERVAL_RESPONSE, + MeasurementValuesResponse.JSON_PROPERTY_TOTAL_SUM_OF_ALL_MESSQUERSCHNITTE +}) +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen") +public class MeasurementValuesResponse { + public static final String JSON_PROPERTY_AVERAGE_MEASUREMENT_VALUES_PER_INTERVAL_RESPONSE = "averageMeasurementValuesPerIntervalResponse"; + private AverageMeasurementValuesPerIntervalResponse averageMeasurementValuesPerIntervalResponse; + + public static final String JSON_PROPERTY_TOTAL_SUM_OF_ALL_MESSQUERSCHNITTE = "totalSumOfAllMessquerschnitte"; + private TotalSumOfAllMessquerschnitte totalSumOfAllMessquerschnitte; + + public MeasurementValuesResponse() { + } + + public MeasurementValuesResponse averageMeasurementValuesPerIntervalResponse(AverageMeasurementValuesPerIntervalResponse averageMeasurementValuesPerIntervalResponse) { + + this.averageMeasurementValuesPerIntervalResponse = averageMeasurementValuesPerIntervalResponse; + return this; + } + + /** + * Get averageMeasurementValuesPerIntervalResponse + * @return averageMeasurementValuesPerIntervalResponse + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_AVERAGE_MEASUREMENT_VALUES_PER_INTERVAL_RESPONSE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + + public AverageMeasurementValuesPerIntervalResponse getAverageMeasurementValuesPerIntervalResponse() { + return averageMeasurementValuesPerIntervalResponse; + } + + + @JsonProperty(JSON_PROPERTY_AVERAGE_MEASUREMENT_VALUES_PER_INTERVAL_RESPONSE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setAverageMeasurementValuesPerIntervalResponse(AverageMeasurementValuesPerIntervalResponse averageMeasurementValuesPerIntervalResponse) { + this.averageMeasurementValuesPerIntervalResponse = averageMeasurementValuesPerIntervalResponse; + } + + + public MeasurementValuesResponse totalSumOfAllMessquerschnitte(TotalSumOfAllMessquerschnitte totalSumOfAllMessquerschnitte) { + + this.totalSumOfAllMessquerschnitte = totalSumOfAllMessquerschnitte; + return this; + } + + /** + * Get totalSumOfAllMessquerschnitte + * @return totalSumOfAllMessquerschnitte + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_TOTAL_SUM_OF_ALL_MESSQUERSCHNITTE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + + public TotalSumOfAllMessquerschnitte getTotalSumOfAllMessquerschnitte() { + return totalSumOfAllMessquerschnitte; + } + + + @JsonProperty(JSON_PROPERTY_TOTAL_SUM_OF_ALL_MESSQUERSCHNITTE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setTotalSumOfAllMessquerschnitte(TotalSumOfAllMessquerschnitte totalSumOfAllMessquerschnitte) { + this.totalSumOfAllMessquerschnitte = totalSumOfAllMessquerschnitte; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + MeasurementValuesResponse measurementValuesResponse = (MeasurementValuesResponse) o; + return Objects.equals(this.averageMeasurementValuesPerIntervalResponse, measurementValuesResponse.averageMeasurementValuesPerIntervalResponse) && + Objects.equals(this.totalSumOfAllMessquerschnitte, measurementValuesResponse.totalSumOfAllMessquerschnitte); + } + + @Override + public int hashCode() { + return Objects.hash(averageMeasurementValuesPerIntervalResponse, totalSumOfAllMessquerschnitte); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class MeasurementValuesResponse {\n"); + sb.append(" averageMeasurementValuesPerIntervalResponse: ").append(toIndentedString(averageMeasurementValuesPerIntervalResponse)).append("\n"); + sb.append(" totalSumOfAllMessquerschnitte: ").append(toIndentedString(totalSumOfAllMessquerschnitte)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + +} + diff --git a/src/main/java/de/muenchen/dave/geodateneai/gen/model/TotalSumOfAllMessquerschnitte.java b/src/main/java/de/muenchen/dave/geodateneai/gen/model/TotalSumOfAllMessquerschnitte.java new file mode 100644 index 00000000..4c797add --- /dev/null +++ b/src/main/java/de/muenchen/dave/geodateneai/gen/model/TotalSumOfAllMessquerschnitte.java @@ -0,0 +1,115 @@ +/* + * DAVE GEODATA EAI + * DAVE GEODATA EAI - Service zum Abfragen von Geoinformationen + * + * The version of the OpenAPI document: 1.0.0 + * Contact: unbekannt@muenchen.de + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package de.muenchen.dave.geodateneai.gen.model; + +import java.util.Objects; +import java.util.Arrays; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import de.muenchen.dave.geodateneai.gen.model.TotalSumPerMessquerschnitt; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.annotation.JsonTypeName; + +/** + * TotalSumOfAllMessquerschnitte + */ +@JsonPropertyOrder({ + TotalSumOfAllMessquerschnitte.JSON_PROPERTY_TOTAL_SUM_PER_MESSQUERSCHNITT_LIST +}) +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen") +public class TotalSumOfAllMessquerschnitte { + public static final String JSON_PROPERTY_TOTAL_SUM_PER_MESSQUERSCHNITT_LIST = "totalSumPerMessquerschnittList"; + private List totalSumPerMessquerschnittList; + + public TotalSumOfAllMessquerschnitte() { + } + + public TotalSumOfAllMessquerschnitte totalSumPerMessquerschnittList(List totalSumPerMessquerschnittList) { + + this.totalSumPerMessquerschnittList = totalSumPerMessquerschnittList; + return this; + } + + public TotalSumOfAllMessquerschnitte addTotalSumPerMessquerschnittListItem(TotalSumPerMessquerschnitt totalSumPerMessquerschnittListItem) { + if (this.totalSumPerMessquerschnittList == null) { + this.totalSumPerMessquerschnittList = new ArrayList<>(); + } + this.totalSumPerMessquerschnittList.add(totalSumPerMessquerschnittListItem); + return this; + } + + /** + * Get totalSumPerMessquerschnittList + * @return totalSumPerMessquerschnittList + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_TOTAL_SUM_PER_MESSQUERSCHNITT_LIST) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + + public List getTotalSumPerMessquerschnittList() { + return totalSumPerMessquerschnittList; + } + + + @JsonProperty(JSON_PROPERTY_TOTAL_SUM_PER_MESSQUERSCHNITT_LIST) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setTotalSumPerMessquerschnittList(List totalSumPerMessquerschnittList) { + this.totalSumPerMessquerschnittList = totalSumPerMessquerschnittList; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + TotalSumOfAllMessquerschnitte totalSumOfAllMessquerschnitte = (TotalSumOfAllMessquerschnitte) o; + return Objects.equals(this.totalSumPerMessquerschnittList, totalSumOfAllMessquerschnitte.totalSumPerMessquerschnittList); + } + + @Override + public int hashCode() { + return Objects.hash(totalSumPerMessquerschnittList); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class TotalSumOfAllMessquerschnitte {\n"); + sb.append(" totalSumPerMessquerschnittList: ").append(toIndentedString(totalSumPerMessquerschnittList)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + +} + diff --git a/src/main/java/de/muenchen/dave/geodateneai/gen/model/TotalSumPerMessquerschnitt.java b/src/main/java/de/muenchen/dave/geodateneai/gen/model/TotalSumPerMessquerschnitt.java new file mode 100644 index 00000000..49471b1a --- /dev/null +++ b/src/main/java/de/muenchen/dave/geodateneai/gen/model/TotalSumPerMessquerschnitt.java @@ -0,0 +1,231 @@ +/* + * DAVE GEODATA EAI + * DAVE GEODATA EAI - Service zum Abfragen von Geoinformationen + * + * The version of the OpenAPI document: 1.0.0 + * Contact: unbekannt@muenchen.de + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package de.muenchen.dave.geodateneai.gen.model; + +import java.util.Objects; +import java.util.Arrays; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.fasterxml.jackson.annotation.JsonValue; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.annotation.JsonTypeName; + +/** + * TotalSumPerMessquerschnitt + */ +@JsonPropertyOrder({ + TotalSumPerMessquerschnitt.JSON_PROPERTY_MQ_ID, + TotalSumPerMessquerschnitt.JSON_PROPERTY_SUM_KFZ, + TotalSumPerMessquerschnitt.JSON_PROPERTY_SUM_SV, + TotalSumPerMessquerschnitt.JSON_PROPERTY_SUM_GV, + TotalSumPerMessquerschnitt.JSON_PROPERTY_SUM_RAD +}) +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen") +public class TotalSumPerMessquerschnitt { + public static final String JSON_PROPERTY_MQ_ID = "mqId"; + private String mqId; + + public static final String JSON_PROPERTY_SUM_KFZ = "sumKfz"; + private Integer sumKfz; + + public static final String JSON_PROPERTY_SUM_SV = "sumSv"; + private Integer sumSv; + + public static final String JSON_PROPERTY_SUM_GV = "sumGv"; + private Integer sumGv; + + public static final String JSON_PROPERTY_SUM_RAD = "sumRad"; + private Integer sumRad; + + public TotalSumPerMessquerschnitt() { + } + + public TotalSumPerMessquerschnitt mqId(String mqId) { + + this.mqId = mqId; + return this; + } + + /** + * Get mqId + * @return mqId + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_MQ_ID) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + + public String getMqId() { + return mqId; + } + + + @JsonProperty(JSON_PROPERTY_MQ_ID) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setMqId(String mqId) { + this.mqId = mqId; + } + + + public TotalSumPerMessquerschnitt sumKfz(Integer sumKfz) { + + this.sumKfz = sumKfz; + return this; + } + + /** + * Get sumKfz + * @return sumKfz + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_SUM_KFZ) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + + public Integer getSumKfz() { + return sumKfz; + } + + + @JsonProperty(JSON_PROPERTY_SUM_KFZ) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setSumKfz(Integer sumKfz) { + this.sumKfz = sumKfz; + } + + + public TotalSumPerMessquerschnitt sumSv(Integer sumSv) { + + this.sumSv = sumSv; + return this; + } + + /** + * Get sumSv + * @return sumSv + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_SUM_SV) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + + public Integer getSumSv() { + return sumSv; + } + + + @JsonProperty(JSON_PROPERTY_SUM_SV) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setSumSv(Integer sumSv) { + this.sumSv = sumSv; + } + + + public TotalSumPerMessquerschnitt sumGv(Integer sumGv) { + + this.sumGv = sumGv; + return this; + } + + /** + * Get sumGv + * @return sumGv + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_SUM_GV) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + + public Integer getSumGv() { + return sumGv; + } + + + @JsonProperty(JSON_PROPERTY_SUM_GV) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setSumGv(Integer sumGv) { + this.sumGv = sumGv; + } + + + public TotalSumPerMessquerschnitt sumRad(Integer sumRad) { + + this.sumRad = sumRad; + return this; + } + + /** + * Get sumRad + * @return sumRad + **/ + @javax.annotation.Nullable + @JsonProperty(JSON_PROPERTY_SUM_RAD) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + + public Integer getSumRad() { + return sumRad; + } + + + @JsonProperty(JSON_PROPERTY_SUM_RAD) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public void setSumRad(Integer sumRad) { + this.sumRad = sumRad; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + TotalSumPerMessquerschnitt totalSumPerMessquerschnitt = (TotalSumPerMessquerschnitt) o; + return Objects.equals(this.mqId, totalSumPerMessquerschnitt.mqId) && + Objects.equals(this.sumKfz, totalSumPerMessquerschnitt.sumKfz) && + Objects.equals(this.sumSv, totalSumPerMessquerschnitt.sumSv) && + Objects.equals(this.sumGv, totalSumPerMessquerschnitt.sumGv) && + Objects.equals(this.sumRad, totalSumPerMessquerschnitt.sumRad); + } + + @Override + public int hashCode() { + return Objects.hash(mqId, sumKfz, sumSv, sumGv, sumRad); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class TotalSumPerMessquerschnitt {\n"); + sb.append(" mqId: ").append(toIndentedString(mqId)).append("\n"); + sb.append(" sumKfz: ").append(toIndentedString(sumKfz)).append("\n"); + sb.append(" sumSv: ").append(toIndentedString(sumSv)).append("\n"); + sb.append(" sumGv: ").append(toIndentedString(sumGv)).append("\n"); + sb.append(" sumRad: ").append(toIndentedString(sumRad)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces + * (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + +} + diff --git a/src/main/java/de/muenchen/dave/services/messstelle/BelastungsplanService.java b/src/main/java/de/muenchen/dave/services/messstelle/BelastungsplanService.java new file mode 100644 index 00000000..a69a3070 --- /dev/null +++ b/src/main/java/de/muenchen/dave/services/messstelle/BelastungsplanService.java @@ -0,0 +1,72 @@ +/* + * Copyright (c): it@M - Dienstleister für Informations- und Telekommunikationstechnik + * der Landeshauptstadt München, 2020 + */ +package de.muenchen.dave.services.messstelle; + +import de.muenchen.dave.domain.dtos.laden.messwerte.BelastungsplanMessquerschnitteDTO; +import de.muenchen.dave.domain.dtos.laden.messwerte.LadeBelastungsplanMessquerschnittDataDTO; +import de.muenchen.dave.domain.dtos.messstelle.ReadMessquerschnittDTO; +import de.muenchen.dave.domain.dtos.messstelle.ReadMessstelleInfoDTO; +import de.muenchen.dave.geodateneai.gen.model.TotalSumPerMessquerschnitt; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; + +@AllArgsConstructor +@Service +public class BelastungsplanService { + private final MessstelleService messstelleService; + + public BelastungsplanMessquerschnitteDTO ladeBelastungsplan(final List totalSumOfAllMessquerschnitte, + final String messstelleId) { + final BelastungsplanMessquerschnitteDTO belastungsplanMessquerschnitteDTO = new BelastungsplanMessquerschnitteDTO(); + final List listBelastungsplanMessquerschnitteDTO = new ArrayList<>(); + final ReadMessstelleInfoDTO messstelle = messstelleService.readMessstelleInfo(messstelleId); + belastungsplanMessquerschnitteDTO.setMstId(messstelle.getMstId()); + belastungsplanMessquerschnitteDTO.setStadtbezirkNummer(messstelle.getStadtbezirkNummer()); + belastungsplanMessquerschnitteDTO.setStrassenname(messstelle.getStandort()); + totalSumOfAllMessquerschnitte.forEach(sumOfMessquerschnitt -> { + LadeBelastungsplanMessquerschnittDataDTO ladeBelastungsplanMessquerschnittDataDTO = new LadeBelastungsplanMessquerschnittDataDTO(); + ladeBelastungsplanMessquerschnittDataDTO.setSumKfz(sumOfMessquerschnitt.getSumKfz()); + ladeBelastungsplanMessquerschnittDataDTO.setSumGv(sumOfMessquerschnitt.getSumGv()); + ladeBelastungsplanMessquerschnittDataDTO.setSumSv(sumOfMessquerschnitt.getSumSv()); + ladeBelastungsplanMessquerschnittDataDTO.setSumRad(sumOfMessquerschnitt.getSumRad()); + ladeBelastungsplanMessquerschnittDataDTO.setPercentGV(calcPercentage(sumOfMessquerschnitt.getSumGv(), sumOfMessquerschnitt.getSumKfz())); + ladeBelastungsplanMessquerschnittDataDTO.setPercentSv(calcPercentage(sumOfMessquerschnitt.getSumSv(), sumOfMessquerschnitt.getSumKfz())); + ladeBelastungsplanMessquerschnittDataDTO.setMqId(sumOfMessquerschnitt.getMqId()); + ladeBelastungsplanMessquerschnittDataDTO.setDirection(getDirection(messstelle, sumOfMessquerschnitt.getMqId())); + listBelastungsplanMessquerschnitteDTO.add(ladeBelastungsplanMessquerschnittDataDTO); + }); + final Integer totalSumKfz = totalSumOfAllMessquerschnitte.stream().mapToInt(TotalSumPerMessquerschnitt::getSumKfz).sum(); + final Integer totalSumSv = totalSumOfAllMessquerschnitte.stream().mapToInt(TotalSumPerMessquerschnitt::getSumSv).sum(); + final Integer totalSumGv = totalSumOfAllMessquerschnitte.stream().mapToInt(TotalSumPerMessquerschnitt::getSumGv).sum(); + final Integer totalSumRad = totalSumOfAllMessquerschnitte.stream().mapToInt(TotalSumPerMessquerschnitt::getSumRad).sum(); + belastungsplanMessquerschnitteDTO.setTotalKfz(totalSumKfz); + belastungsplanMessquerschnitteDTO.setTotalSv(totalSumSv); + belastungsplanMessquerschnitteDTO.setTotalGv(totalSumGv); + belastungsplanMessquerschnitteDTO.setTotalRad(totalSumRad); + final Integer totalSum = totalSumGv + totalSumKfz + totalSumSv; + belastungsplanMessquerschnitteDTO.setTotalPercentGv(calcPercentage(totalSumGv, totalSum)); + belastungsplanMessquerschnitteDTO.setTotalPercentSv(calcPercentage(totalSumSv, totalSum)); + belastungsplanMessquerschnitteDTO.setLadeBelastungsplanMessquerschnittDataDTOList(listBelastungsplanMessquerschnitteDTO); + return belastungsplanMessquerschnitteDTO; + } + + protected String getDirection(final ReadMessstelleInfoDTO messstelle, final String messquerschnittId) { + ReadMessquerschnittDTO messquerschnittDto = messstelle.getMessquerschnitte().stream() + .filter(readMessquerschnittDTO -> Objects.equals(readMessquerschnittDTO.getMqId(), messquerschnittId)).collect(Collectors.toList()).get(0); + return messquerschnittDto.getFahrtrichtung(); + } + + protected BigDecimal calcPercentage(final Integer part, final Integer total) { + BigDecimal partInBigDecimal = BigDecimal.valueOf(part); + BigDecimal totalInBigDecimal = BigDecimal.valueOf(total); + return partInBigDecimal.divide(totalInBigDecimal, 3, RoundingMode.HALF_UP).scaleByPowerOfTen(2); + } +} diff --git a/src/main/java/de/muenchen/dave/services/messstelle/MesswerteService.java b/src/main/java/de/muenchen/dave/services/messstelle/MesswerteService.java index db462f20..5982c910 100644 --- a/src/main/java/de/muenchen/dave/services/messstelle/MesswerteService.java +++ b/src/main/java/de/muenchen/dave/services/messstelle/MesswerteService.java @@ -1,13 +1,15 @@ package de.muenchen.dave.services.messstelle; +import de.muenchen.dave.domain.dtos.laden.messwerte.BelastungsplanMessquerschnitteDTO; import de.muenchen.dave.domain.dtos.laden.messwerte.LadeProcessedMesswerteDTO; import de.muenchen.dave.domain.dtos.messstelle.MessstelleOptionsDTO; import de.muenchen.dave.exceptions.BadRequestException; import de.muenchen.dave.exceptions.ResourceNotFoundException; import de.muenchen.dave.geodateneai.gen.api.MesswerteApi; -import de.muenchen.dave.geodateneai.gen.model.AverageMeasurementValuesPerIntervalResponse; import de.muenchen.dave.geodateneai.gen.model.GetMeasurementValuesRequest; import de.muenchen.dave.geodateneai.gen.model.MeasurementValuesPerInterval; +import de.muenchen.dave.geodateneai.gen.model.MeasurementValuesResponse; +import de.muenchen.dave.geodateneai.gen.model.TotalSumPerMessquerschnitt; import de.muenchen.dave.util.OptionsUtil; import java.util.List; import lombok.AllArgsConstructor; @@ -30,6 +32,7 @@ public class MesswerteService { private final GanglinieService ganglinieService; private final HeatmapService heatmapService; private final ListenausgabeService listenausgabeService; + private final BelastungsplanService belastungsplanService; private final SpitzenstundeService spitzenstundeService; private static final String ERROR_MESSAGE = "Beim Laden der AverageMeasurementValuesPerIntervalResponse ist ein Fehler aufgetreten"; @@ -37,19 +40,22 @@ public class MesswerteService { public LadeProcessedMesswerteDTO ladeMesswerte(final String messstelleId, final MessstelleOptionsDTO options) { validateOptions(options); log.debug("#ladeMesswerte {}", messstelleId); - final AverageMeasurementValuesPerIntervalResponse response = this.ladeMesswerteIntervall(options); + final MeasurementValuesResponse response = this.ladeMesswerteIntervall(options); final List intervals; if (OptionsUtil.isZeitauswahlSpitzenstunde(options.getZeitauswahl())) { - intervals = spitzenstundeService.getIntervalsOfSpitzenstunde(response.getIntervals(), + intervals = spitzenstundeService.getIntervalsOfSpitzenstunde(response.getAverageMeasurementValuesPerIntervalResponse().getIntervals(), messstelleService.isKfzMessstelle(messstelleId)); } else { - intervals = response.getIntervals(); + intervals = response.getAverageMeasurementValuesPerIntervalResponse().getIntervals(); } + final List totalSumPerMessquerschnittList = response.getTotalSumOfAllMessquerschnitte().getTotalSumPerMessquerschnittList(); final LadeProcessedMesswerteDTO processedZaehldaten = new LadeProcessedMesswerteDTO(); processedZaehldaten.setZaehldatenStepline(ganglinieService.ladeGanglinie(intervals, options)); processedZaehldaten.setZaehldatenHeatmap(heatmapService.ladeHeatmap(intervals, options)); processedZaehldaten.setZaehldatenTable(listenausgabeService.ladeListenausgabe(intervals, messstelleService.isKfzMessstelle(messstelleId), options)); + processedZaehldaten.setListBelastungsplanMessquerschnitteDTO(new BelastungsplanMessquerschnitteDTO()); + processedZaehldaten.setListBelastungsplanMessquerschnitteDTO(belastungsplanService.ladeBelastungsplan(totalSumPerMessquerschnittList, messstelleId)); return processedZaehldaten; } @@ -59,7 +65,7 @@ protected void validateOptions(final MessstelleOptionsDTO options) { } } - protected AverageMeasurementValuesPerIntervalResponse ladeMesswerteIntervall(final MessstelleOptionsDTO options) { + protected MeasurementValuesResponse ladeMesswerteIntervall(final MessstelleOptionsDTO options) { final GetMeasurementValuesRequest request = new GetMeasurementValuesRequest(); // Anhand der MesstellenId die entsprechenden MessquerschnittIds ermitteln request.setMessquerschnittIds(options.getMessquerschnittIds()); @@ -76,20 +82,28 @@ protected AverageMeasurementValuesPerIntervalResponse ladeMesswerteIntervall(fin request.setUhrzeitEnde(options.getZeitblock().getEnd().toLocalTime()); request.setMinutesPerZeitintervall(options.getIntervall().getMinutesPerIntervall()); - final Mono> response = messwerteApi + final Mono> response = messwerteApi .getAverageMeasurementValuesPerIntervalWithHttpInfo( request); - final ResponseEntity block = response.block(); + final ResponseEntity block = response.block(); if (ObjectUtils.isEmpty(block)) { log.error("ResponseEntity der Anfrage ist leer."); throw new ResourceNotFoundException(ERROR_MESSAGE); } - final AverageMeasurementValuesPerIntervalResponse body = block.getBody(); + final MeasurementValuesResponse body = block.getBody(); if (ObjectUtils.isEmpty(body)) { - log.error("Body der Anfrage ist leer."); + log.error("Body der Anfrage ist leer."); throw new ResourceNotFoundException(ERROR_MESSAGE); } - if (CollectionUtils.isEmpty(body.getIntervals())) { + if (ObjectUtils.isEmpty(body.getAverageMeasurementValuesPerIntervalResponse())) { + log.error("Body der Anfrage enthält keine AverageMeasurementValuesPerInterval."); + throw new ResourceNotFoundException(ERROR_MESSAGE); + } + if (ObjectUtils.isEmpty(body.getTotalSumOfAllMessquerschnitte())) { + log.error("Body der Anfrage enthält keine TotalSumOfAllMessquerschnitte."); + throw new ResourceNotFoundException(ERROR_MESSAGE); + } + if (CollectionUtils.isEmpty(body.getAverageMeasurementValuesPerIntervalResponse().getIntervals())) { log.error("Body der Anfrage enthält keine Messwerte."); throw new ResourceNotFoundException(ERROR_MESSAGE); } diff --git a/src/main/resources/api/geodateneai.json b/src/main/resources/api/geodateneai.json index cc477435..472b9fd3 100644 --- a/src/main/resources/api/geodateneai.json +++ b/src/main/resources/api/geodateneai.json @@ -139,7 +139,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/AverageMeasurementValuesPerIntervalResponse" + "$ref": "#/components/schemas/MeasurementValuesResponse" } } } @@ -175,22 +175,22 @@ "required": true }, "responses": { - "500": { - "description": "Bei der Erstellung oder Durchführung des Requests ist ein Fehler aufgetreten.", + "200": { + "description": "TagesTyp erfolgreich validiert", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/InformationResponseDto" + "$ref": "#/components/schemas/ChosenTagesTypValidDTO" } } } }, - "200": { - "description": "TagesTyp erfolgreich validiert", + "500": { + "description": "Bei der Erstellung oder Durchführung des Requests ist ein Fehler aufgetreten.", "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/ChosenTagesTypValidDTO" + "$ref": "#/components/schemas/InformationResponseDto" } } } @@ -404,10 +404,10 @@ "flaecheQm": { "type": "number" }, - "ycoordinate": { + "xcoordinate": { "type": "number" }, - "xcoordinate": { + "ycoordinate": { "type": "number" } } @@ -715,6 +715,52 @@ } } }, + "MeasurementValuesResponse": { + "type": "object", + "properties": { + "averageMeasurementValuesPerIntervalResponse": { + "$ref": "#/components/schemas/AverageMeasurementValuesPerIntervalResponse" + }, + "totalSumOfAllMessquerschnitte": { + "$ref": "#/components/schemas/TotalSumOfAllMessquerschnitte" + } + } + }, + "TotalSumOfAllMessquerschnitte": { + "type": "object", + "properties": { + "totalSumPerMessquerschnittList": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TotalSumPerMessquerschnitt" + } + } + } + }, + "TotalSumPerMessquerschnitt": { + "type": "object", + "properties": { + "mqId": { + "type": "string" + }, + "sumKfz": { + "type": "integer", + "format": "int32" + }, + "sumSv": { + "type": "integer", + "format": "int32" + }, + "sumGv": { + "type": "integer", + "format": "int32" + }, + "sumRad": { + "type": "integer", + "format": "int32" + } + } + }, "ChosenTagesTypValidRequestDto": { "type": "object", "properties": { @@ -771,11 +817,11 @@ "type": "integer", "format": "int32" }, - "ycoordinate": { + "xcoordinate": { "type": "number", "format": "double" }, - "xcoordinate": { + "ycoordinate": { "type": "number", "format": "double" } @@ -834,11 +880,11 @@ "$ref": "#/components/schemas/MessquerschnittDto" } }, - "ycoordinate": { + "xcoordinate": { "type": "number", "format": "double" }, - "xcoordinate": { + "ycoordinate": { "type": "number", "format": "double" } diff --git a/src/test/java/de/muenchen/dave/services/messstelle/BelastungsplanServiceTest.java b/src/test/java/de/muenchen/dave/services/messstelle/BelastungsplanServiceTest.java new file mode 100644 index 00000000..14c1ee81 --- /dev/null +++ b/src/test/java/de/muenchen/dave/services/messstelle/BelastungsplanServiceTest.java @@ -0,0 +1,166 @@ +/* + * Copyright (c): it@M - Dienstleister für Informations- und Telekommunikationstechnik + * der Landeshauptstadt München, 2020 + */ +package de.muenchen.dave.services.messstelle; + +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.doReturn; + +import de.muenchen.dave.domain.dtos.laden.messwerte.BelastungsplanMessquerschnitteDTO; +import de.muenchen.dave.domain.dtos.laden.messwerte.LadeBelastungsplanMessquerschnittDataDTO; +import de.muenchen.dave.domain.dtos.messstelle.ReadMessquerschnittDTO; +import de.muenchen.dave.domain.dtos.messstelle.ReadMessstelleInfoDTO; +import de.muenchen.dave.geodateneai.gen.model.TotalSumPerMessquerschnitt; +import java.math.BigDecimal; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +class BelastungsplanServiceTest { + @Mock + MessstelleService messstelleService; + private BelastungsplanService belastungsplanService; + + @BeforeEach + void setup() { + belastungsplanService = new BelastungsplanService(messstelleService); + } + + @Test + void ladeBelastungsplan() { + // setup + List totalSumOfAllMessquerschnitte = new ArrayList<>(); + TotalSumPerMessquerschnitt totalSumPerMessquerschnitt1 = new TotalSumPerMessquerschnitt(); + totalSumPerMessquerschnitt1.setSumGv(50); + totalSumPerMessquerschnitt1.setSumKfz(200); + totalSumPerMessquerschnitt1.setSumRad(20); + totalSumPerMessquerschnitt1.setSumSv(30); + totalSumPerMessquerschnitt1.setMqId("1"); + + TotalSumPerMessquerschnitt totalSumPerMessquerschnitt2 = new TotalSumPerMessquerschnitt(); + totalSumPerMessquerschnitt2.setSumGv(30); + totalSumPerMessquerschnitt2.setSumKfz(100); + totalSumPerMessquerschnitt2.setSumRad(10); + totalSumPerMessquerschnitt2.setSumSv(50); + totalSumPerMessquerschnitt2.setMqId("2"); + totalSumOfAllMessquerschnitte.add(totalSumPerMessquerschnitt1); + totalSumOfAllMessquerschnitte.add(totalSumPerMessquerschnitt2); + + // expected + LadeBelastungsplanMessquerschnittDataDTO ladeBelastungsplanMessquerschnittDataDTO1 = new LadeBelastungsplanMessquerschnittDataDTO(); + ladeBelastungsplanMessquerschnittDataDTO1.setSumGv(50); + ladeBelastungsplanMessquerschnittDataDTO1.setSumKfz(200); + ladeBelastungsplanMessquerschnittDataDTO1.setSumRad(20); + ladeBelastungsplanMessquerschnittDataDTO1.setSumSv(30); + ladeBelastungsplanMessquerschnittDataDTO1.setMqId("1"); + ladeBelastungsplanMessquerschnittDataDTO1.setPercentSv(new BigDecimal("15.0")); + ladeBelastungsplanMessquerschnittDataDTO1.setPercentGV(new BigDecimal("25.0")); + ladeBelastungsplanMessquerschnittDataDTO1.setDirection("O"); + + LadeBelastungsplanMessquerschnittDataDTO ladeBelastungsplanMessquerschnittDataDTO2 = new LadeBelastungsplanMessquerschnittDataDTO(); + ladeBelastungsplanMessquerschnittDataDTO2.setSumGv(30); + ladeBelastungsplanMessquerschnittDataDTO2.setSumKfz(100); + ladeBelastungsplanMessquerschnittDataDTO2.setSumRad(10); + ladeBelastungsplanMessquerschnittDataDTO2.setSumSv(50); + ladeBelastungsplanMessquerschnittDataDTO2.setMqId("2"); + ladeBelastungsplanMessquerschnittDataDTO2.setPercentSv(new BigDecimal("50.0")); + ladeBelastungsplanMessquerschnittDataDTO2.setPercentGV(new BigDecimal("30.0")); + ladeBelastungsplanMessquerschnittDataDTO2.setDirection("W"); + + List ladeBelastungsplanMessquerschnittDataDTOS = new ArrayList<>(); + ladeBelastungsplanMessquerschnittDataDTOS.add(ladeBelastungsplanMessquerschnittDataDTO1); + ladeBelastungsplanMessquerschnittDataDTOS.add(ladeBelastungsplanMessquerschnittDataDTO2); + + BelastungsplanMessquerschnitteDTO expected = new BelastungsplanMessquerschnitteDTO(); + expected.setLadeBelastungsplanMessquerschnittDataDTOList(ladeBelastungsplanMessquerschnittDataDTOS); + expected.setTotalGv(80); + expected.setTotalKfz(300); + expected.setTotalSv(80); + expected.setTotalRad(30); + expected.setTotalPercentSv(new BigDecimal("17.4")); + expected.setTotalPercentGv(new BigDecimal("17.4")); + expected.setStrassenname("Hauptstraße 1"); + expected.setStadtbezirkNummer(1); + expected.setMstId("13"); + + doReturn(getMessstelle()).when(messstelleService).readMessstelleInfo(anyString()); + //result + var result = belastungsplanService.ladeBelastungsplan(totalSumOfAllMessquerschnitte, "123"); + + Assertions.assertThat(result) + .isNotNull() + .usingRecursiveComparison() + .isEqualTo(expected); + } + + @Test + void calcPercentage() { + var result = belastungsplanService.calcPercentage(25, 100); + var expected = new BigDecimal("25.0"); + Assertions.assertThat(result).isEqualTo(expected); + } + + @Test + void getDirection() { + var result = belastungsplanService.getDirection(getMessstelle(), "1"); + var expected = "O"; + Assertions.assertThat(result).isEqualTo(expected); + } + + ReadMessstelleInfoDTO getMessstelle() { + ReadMessstelleInfoDTO readMessstelleInfoDTO = new ReadMessstelleInfoDTO(); + readMessstelleInfoDTO.setId("123"); + readMessstelleInfoDTO.setMstId("13"); + readMessstelleInfoDTO.setStandort("Hauptstraße 1"); + readMessstelleInfoDTO.setStadtbezirk("Mitte"); + readMessstelleInfoDTO.setStadtbezirkNummer(1); + readMessstelleInfoDTO.setFahrzeugKlassen("PKW, LKW"); + readMessstelleInfoDTO.setDetektierteVerkehrsarten("PKW, LKW, Motorrad"); + readMessstelleInfoDTO.setHersteller("Messung GmbH"); + readMessstelleInfoDTO.setLongitude(10.12345); + readMessstelleInfoDTO.setLatitude(50.67890); + readMessstelleInfoDTO.setDatumLetztePlausibleMessung(LocalDate.now()); + readMessstelleInfoDTO.setRealisierungsdatum(LocalDate.of(2022, 1, 1)); + readMessstelleInfoDTO.setAbbaudatum(LocalDate.of(2023, 12, 31)); + readMessstelleInfoDTO.setKommentar("Messstelle an belebter Hauptstraße"); + + ReadMessquerschnittDTO readMessquerschnittDTO1 = new ReadMessquerschnittDTO(); + readMessquerschnittDTO1.setId("1001"); + readMessquerschnittDTO1.setMqId("1"); + readMessquerschnittDTO1.setLongitude(9.1234); + readMessquerschnittDTO1.setLatitude(48.5678); + readMessquerschnittDTO1.setStrassenname("Musterstraße"); + readMessquerschnittDTO1.setLageMessquerschnitt("außerorts"); + readMessquerschnittDTO1.setFahrtrichtung("O"); + readMessquerschnittDTO1.setAnzahlFahrspuren(3); + readMessquerschnittDTO1.setAnzahlDetektoren(6); + readMessquerschnittDTO1.setStandort("Autobahnauffahrt"); + + ReadMessquerschnittDTO readMessquerschnittDTO2 = new ReadMessquerschnittDTO(); + readMessquerschnittDTO2.setId("112312"); + readMessquerschnittDTO2.setMqId("2"); + readMessquerschnittDTO2.setLongitude(10.5678); + readMessquerschnittDTO2.setLatitude(49.8765); + readMessquerschnittDTO2.setStrassenname("Teststraße"); + readMessquerschnittDTO2.setLageMessquerschnitt("innerorts"); + readMessquerschnittDTO2.setFahrtrichtung("W"); + readMessquerschnittDTO2.setAnzahlFahrspuren(2); + readMessquerschnittDTO2.setAnzahlDetektoren(4); + readMessquerschnittDTO2.setStandort("Kreuzung"); + + List listMessquerschnitte = new ArrayList<>(); + listMessquerschnitte.add(readMessquerschnittDTO1); + listMessquerschnitte.add(readMessquerschnittDTO2); + readMessstelleInfoDTO.setMessquerschnitte(listMessquerschnitte); + + return readMessstelleInfoDTO; + } +}