From 184f58dced941dd3ae7c2bb98854476bf2d84b44 Mon Sep 17 00:00:00 2001 From: "alexander.boxhorn" Date: Tue, 26 Nov 2024 16:12:09 +0100 Subject: [PATCH 1/5] java doc --- .../auswertung/AuswertungService.java | 22 +++++++++----- .../GanglinieGesamtauswertungService.java | 30 ++++++++++++++++--- 2 files changed, 41 insertions(+), 11 deletions(-) diff --git a/src/main/java/de/muenchen/dave/services/messstelle/auswertung/AuswertungService.java b/src/main/java/de/muenchen/dave/services/messstelle/auswertung/AuswertungService.java index 9eae7065..5187d836 100644 --- a/src/main/java/de/muenchen/dave/services/messstelle/auswertung/AuswertungService.java +++ b/src/main/java/de/muenchen/dave/services/messstelle/auswertung/AuswertungService.java @@ -48,10 +48,11 @@ public List getAllVisibleMessstellen() { /** * Ermittelt je Messstelle die in Zeiträume unterteilten Zähldaten. * - * Die Zähldaten werden aufbereitet und zusätzlich als Tabellenkalkulationsdatei bereitgestellt. + * Die Zähldaten werden für die Darstellungen in einem Gangliniendiagramm aufbereitet. + * Zusätzlich werden die Informationen als Tabellenkalkulationsdatei bereitgestellt. * - * @param options - * @return + * @param options zum Laden und Aufbereiten der Messstelleninformationen mit Zähldaten. + * @return die Zähldaten der Messstelleninformationen mitsamt der Tabellenkalkulationsdatei. * @throws IOException */ @LogExecutionTime @@ -59,7 +60,7 @@ public AuswertungMessstelleWithFileDTO ladeAuswertungMessstellen(final Messstell log.debug("#ladeAuswertungMessstellen {}", options); final var auswertungMessstellen = new AuswertungMessstelleWithFileDTO(); final var auswertungenMqByMstId = this.ladeAuswertungGroupedByMstId(options); - final var zaehldatenMessstellen = this.ladeZaehldatenGanglinie(options.getFahrzeuge(), auswertungenMqByMstId); + final var zaehldatenMessstellen = this.createZaehldatenForGanglinie(options.getFahrzeuge(), auswertungenMqByMstId); auswertungMessstellen.setZaehldatenMessstellen(zaehldatenMessstellen); final var spreadsheet = this.createAuswertungMessstellenSpreadsheet(options, auswertungenMqByMstId); final var spreadsheetBase64Encoded = Base64.getEncoder().encodeToString(spreadsheet); @@ -67,14 +68,21 @@ public AuswertungMessstelleWithFileDTO ladeAuswertungMessstellen(final Messstell return auswertungMessstellen; } - protected LadeZaehldatenSteplineDTO ladeZaehldatenGanglinie( + /** + * Bereitet die im Parameter gegebenen Zähldaten für die Gangliniendarstellung auf. + * + * @param fahrzeugOptions die Optionen zur Aufbereitung der Zähldaten für die Gangliniendarstellung. + * @param auswertungenMessstellen die Auswertungen der Messstellen zur Aufbereitung für die Gangliniendarstellung. + * @return die aufbereiteten Daten für die Gangliniendarstellung. + */ + protected LadeZaehldatenSteplineDTO createZaehldatenForGanglinie( final FahrzeugOptionsDTO fahrzeugOptions, final List auswertungenMessstellen) { final var auswertungenProMessstelle = ListUtils.emptyIfNull(auswertungenMessstellen); if (auswertungenProMessstelle.size() == 1) { - return ganglinieGesamtauswertungService.ladeGanglinieForSingleMessstelle(auswertungenProMessstelle.getFirst(), fahrzeugOptions); + return ganglinieGesamtauswertungService.createGanglinieForSingleMessstelle(auswertungenProMessstelle.getFirst(), fahrzeugOptions); } else { - return ganglinieGesamtauswertungService.ladeGanglinieForMultipleMessstellen(auswertungenProMessstelle); + return ganglinieGesamtauswertungService.createGanglinieForMultipleMessstellen(auswertungenProMessstelle); } } diff --git a/src/main/java/de/muenchen/dave/services/messstelle/auswertung/GanglinieGesamtauswertungService.java b/src/main/java/de/muenchen/dave/services/messstelle/auswertung/GanglinieGesamtauswertungService.java index 92f968a5..cfcbb47a 100644 --- a/src/main/java/de/muenchen/dave/services/messstelle/auswertung/GanglinieGesamtauswertungService.java +++ b/src/main/java/de/muenchen/dave/services/messstelle/auswertung/GanglinieGesamtauswertungService.java @@ -29,7 +29,14 @@ public class GanglinieGesamtauswertungService { private static final DateTimeFormatter YEAR_MONTH_FORMATTER = DateTimeFormatter.ofPattern("MM.yyyy"); - public LadeZaehldatenSteplineDTO ladeGanglinieForSingleMessstelle( + /** + * Erstellt die Repräsentation der Zähldaten zur Gangliniendarstellung für eine Messstelle. + * + * @param auswertungMessstelle mit den Zähldaten. + * @param fahrzeugOptions zur Steuerung der zu repräsentierenden Daten. + * @return die Repräsentation der Zähldaten für die Gangliniendarstellung. + */ + public LadeZaehldatenSteplineDTO createGanglinieForSingleMessstelle( final AuswertungMessstelle auswertungMessstelle, final FahrzeugOptionsDTO fahrzeugOptions) { log.debug("#ladeGanglinieForSingleMessstelle"); @@ -133,12 +140,20 @@ public LadeZaehldatenSteplineDTO ladeGanglinieForSingleMessstelle( } - public LadeZaehldatenSteplineDTO ladeGanglinieForMultipleMessstellen(final List auswertungMessstellen) { + /** + * Erstellt die Repräsentation der Zähldaten (Summe KFZ) zur Gangliniendarstellung für mehrere Messstellen. + * + * @param auswertungMessstellen mit den Zähldaten. + * @return die Repräsentation der Zähldaten (Summe KFZ) für die Gangliniendarstellung. + */ + public LadeZaehldatenSteplineDTO createGanglinieForMultipleMessstellen(final List auswertungMessstellen) { log.debug("#ladeGanglinieForMultipleMessstellen"); final var zaehldatenStepline = GanglinieUtil.getInitialZaehldatenStepline(); final var auswertungByZeitraum = new HashMap(); + // Gruppieren der Auswertungen nach Zeitraum + // Jeder Zeitraum umfasst je Messstelle die Anzahl der KFZ CollectionUtils .emptyIfNull(auswertungMessstellen) .forEach(auswertungMessstelle -> CollectionUtils @@ -150,6 +165,7 @@ public LadeZaehldatenSteplineDTO ladeGanglinieForMultipleMessstellen(final List< zeitraum, new AuswertungZeitraum(zeitraum, new HashMap<>())); } + // Hinzufügen der Messstelle mit der Summe an KFZ. auswertungByZeitraum .get(zeitraum) .getSummeKfzByMstId() @@ -158,6 +174,7 @@ public LadeZaehldatenSteplineDTO ladeGanglinieForMultipleMessstellen(final List< auswertung.getDaten().getSummeKraftfahrzeugverkehr()); })); + // Aufbereitung der im oberen Abschnitt gruppierten Zähldaten für Gangliniendarstellung. auswertungByZeitraum.values().forEach(auswertungZeitraum -> { auswertungZeitraum.summeKfzByMstId.forEach((mstId, summeKfz) -> { final var stepLineSeriesEntryMessstelle = new StepLineSeriesEntryIntegerDTO(); @@ -181,9 +198,14 @@ public LadeZaehldatenSteplineDTO ladeGanglinieForMultipleMessstellen(final List< }); return zaehldatenStepline; - } + /** + * Gibt die String-Repräsentation des Zeitraums in der Form "MM.yyyy - MM.yyyy" zurück. + * + * @param zeitraum zur Stringerstellung. + * @return die String-Repräsentation des Zeitraums. + */ public String getZeitraumForXaxis(final Zeitraum zeitraum) { return new StringBuilder() .append(zeitraum.getStart().format(YEAR_MONTH_FORMATTER)) @@ -195,7 +217,7 @@ public String getZeitraumForXaxis(final Zeitraum zeitraum) { } /** - * + * Die Klasse repräsentiert für einen Zeitraum je Messstelle die Summe der Kfz. */ @Data @AllArgsConstructor(access = AccessLevel.PRIVATE) From 4e10a30cd795a5bd82aedd6689af8b9c874779f8 Mon Sep 17 00:00:00 2001 From: "alexander.boxhorn" Date: Tue, 26 Nov 2024 16:41:45 +0100 Subject: [PATCH 2/5] add unit test --- .../services/messstelle/MesswerteService.java | 4 +-- .../dave/services/messstelle/Zeitraum.java | 6 ++-- .../GanglinieGesamtauswertungService.java | 13 +++----- .../GanglinieGesamtauswertungServiceTest.java | 33 +++++++++++++++++++ 4 files changed, 43 insertions(+), 13 deletions(-) create mode 100644 src/test/java/de/muenchen/dave/services/messstelle/auswertung/GanglinieGesamtauswertungServiceTest.java 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 a69f41a3..193bce45 100644 --- a/src/main/java/de/muenchen/dave/services/messstelle/MesswerteService.java +++ b/src/main/java/de/muenchen/dave/services/messstelle/MesswerteService.java @@ -140,8 +140,8 @@ protected IntervalResponseDto ladeMesswerteIntervalle(final MessstelleOptionsDTO public TagesaggregatResponseDto ladeTagesaggregate(final TagesTyp tagesTyp, final Set mqIds, final Zeitraum zeitraum) { final var request = new TagesaggregatRequestDto(); request.setMessquerschnittIds(mqIds.stream().map(Integer::valueOf).toList()); - request.setStartDate(LocalDate.of(zeitraum.start.getYear(), zeitraum.start.getMonthValue(), 1)); - request.setEndDate(LocalDate.of(zeitraum.end.getYear(), zeitraum.end.getMonthValue(), zeitraum.end.atEndOfMonth().getDayOfMonth())); + request.setStartDate(LocalDate.of(zeitraum.getStart().getYear(), zeitraum.getStart().getMonthValue(), 1)); + request.setEndDate(LocalDate.of(zeitraum.getEnd().getYear(), zeitraum.getEnd().getMonthValue(), zeitraum.getEnd().atEndOfMonth().getDayOfMonth())); request.setTagesTyp(tagesTyp.getTagesaggregatTyp()); final ResponseEntity response = messwerteApi.getMeanOfDailyAggregatesPerMQWithHttpInfo(request).block(); diff --git a/src/main/java/de/muenchen/dave/services/messstelle/Zeitraum.java b/src/main/java/de/muenchen/dave/services/messstelle/Zeitraum.java index 7d7379ea..189e3ac0 100644 --- a/src/main/java/de/muenchen/dave/services/messstelle/Zeitraum.java +++ b/src/main/java/de/muenchen/dave/services/messstelle/Zeitraum.java @@ -9,7 +9,7 @@ @Data @AllArgsConstructor public class Zeitraum { - YearMonth start; - YearMonth end; - AuswertungsZeitraum auswertungsZeitraum; + private YearMonth start; + private YearMonth end; + private AuswertungsZeitraum auswertungsZeitraum; } diff --git a/src/main/java/de/muenchen/dave/services/messstelle/auswertung/GanglinieGesamtauswertungService.java b/src/main/java/de/muenchen/dave/services/messstelle/auswertung/GanglinieGesamtauswertungService.java index cfcbb47a..75cc1ded 100644 --- a/src/main/java/de/muenchen/dave/services/messstelle/auswertung/GanglinieGesamtauswertungService.java +++ b/src/main/java/de/muenchen/dave/services/messstelle/auswertung/GanglinieGesamtauswertungService.java @@ -201,19 +201,16 @@ public LadeZaehldatenSteplineDTO createGanglinieForMultipleMessstellen(final Lis } /** - * Gibt die String-Repräsentation des Zeitraums in der Form "MM.yyyy - MM.yyyy" zurück. + * Gibt die String-Repräsentation des Zeitraums zurück. * * @param zeitraum zur Stringerstellung. * @return die String-Repräsentation des Zeitraums. */ public String getZeitraumForXaxis(final Zeitraum zeitraum) { - return new StringBuilder() - .append(zeitraum.getStart().format(YEAR_MONTH_FORMATTER)) - .append(StringUtils.SPACE) - .append("-") - .append(StringUtils.SPACE) - .append(zeitraum.getEnd().format(YEAR_MONTH_FORMATTER)) - .toString(); + final var bezeichnerZeitraum = zeitraum.getAuswertungsZeitraum().getText(); + return bezeichnerZeitraum + .concat(bezeichnerZeitraum.isEmpty() ? StringUtils.EMPTY : StringUtils.SPACE) + .concat(String.valueOf(zeitraum.getStart().getYear())); } /** diff --git a/src/test/java/de/muenchen/dave/services/messstelle/auswertung/GanglinieGesamtauswertungServiceTest.java b/src/test/java/de/muenchen/dave/services/messstelle/auswertung/GanglinieGesamtauswertungServiceTest.java new file mode 100644 index 00000000..3fcda972 --- /dev/null +++ b/src/test/java/de/muenchen/dave/services/messstelle/auswertung/GanglinieGesamtauswertungServiceTest.java @@ -0,0 +1,33 @@ +package de.muenchen.dave.services.messstelle.auswertung; + +import de.muenchen.dave.domain.enums.AuswertungsZeitraum; +import de.muenchen.dave.services.messstelle.Zeitraum; +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.time.YearMonth; + +class GanglinieGesamtauswertungServiceTest { + + private GanglinieGesamtauswertungService ganglinieGesamtauswertungService = new GanglinieGesamtauswertungService(); + + @Test + void getZeitraumForXaxis() { + var zeitraum = new Zeitraum(YearMonth.of(2024, 11), null, AuswertungsZeitraum.SEPTEMBER); + var result = ganglinieGesamtauswertungService.getZeitraumForXaxis(zeitraum); + Assertions.assertThat(result).isNotNull().isEqualTo("09 2024"); + + zeitraum = new Zeitraum(YearMonth.of(2024, 11), null, AuswertungsZeitraum.HALBJAHR_2); + result = ganglinieGesamtauswertungService.getZeitraumForXaxis(zeitraum); + Assertions.assertThat(result).isNotNull().isEqualTo("H2 2024"); + + zeitraum = new Zeitraum(YearMonth.of(2024, 11), null, AuswertungsZeitraum.QUARTAL_3); + result = ganglinieGesamtauswertungService.getZeitraumForXaxis(zeitraum); + Assertions.assertThat(result).isNotNull().isEqualTo("Q3 2024"); + + zeitraum = new Zeitraum(YearMonth.of(2024, 11), null, AuswertungsZeitraum.JAHRE); + result = ganglinieGesamtauswertungService.getZeitraumForXaxis(zeitraum); + Assertions.assertThat(result).isNotNull().isEqualTo("2024"); + } + +} \ No newline at end of file From 80ef711a4d2348cfb52a880a6790bd05def10927 Mon Sep 17 00:00:00 2001 From: "alexander.boxhorn" Date: Tue, 26 Nov 2024 16:46:40 +0100 Subject: [PATCH 3/5] adapt unit test --- .../auswertung/GanglinieGesamtauswertungService.java | 7 ++----- .../auswertung/GanglinieGesamtauswertungServiceTest.java | 3 +++ 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/de/muenchen/dave/services/messstelle/auswertung/GanglinieGesamtauswertungService.java b/src/main/java/de/muenchen/dave/services/messstelle/auswertung/GanglinieGesamtauswertungService.java index 75cc1ded..83dec557 100644 --- a/src/main/java/de/muenchen/dave/services/messstelle/auswertung/GanglinieGesamtauswertungService.java +++ b/src/main/java/de/muenchen/dave/services/messstelle/auswertung/GanglinieGesamtauswertungService.java @@ -18,7 +18,6 @@ import org.springframework.stereotype.Service; import java.math.BigDecimal; -import java.time.format.DateTimeFormatter; import java.util.HashMap; import java.util.List; @@ -27,8 +26,6 @@ @RequiredArgsConstructor public class GanglinieGesamtauswertungService { - private static final DateTimeFormatter YEAR_MONTH_FORMATTER = DateTimeFormatter.ofPattern("MM.yyyy"); - /** * Erstellt die Repräsentation der Zähldaten zur Gangliniendarstellung für eine Messstelle. * @@ -39,7 +36,7 @@ public class GanglinieGesamtauswertungService { public LadeZaehldatenSteplineDTO createGanglinieForSingleMessstelle( final AuswertungMessstelle auswertungMessstelle, final FahrzeugOptionsDTO fahrzeugOptions) { - log.debug("#ladeGanglinieForSingleMessstelle"); + log.debug("#createGanglinieForSingleMessstelle"); final var auswertungenProZeitraum = CollectionUtils.emptyIfNull(auswertungMessstelle.getAuswertungenProZeitraum()); final var zaehldatenStepline = GanglinieUtil.getInitialZaehldatenStepline(); @@ -147,7 +144,7 @@ public LadeZaehldatenSteplineDTO createGanglinieForSingleMessstelle( * @return die Repräsentation der Zähldaten (Summe KFZ) für die Gangliniendarstellung. */ public LadeZaehldatenSteplineDTO createGanglinieForMultipleMessstellen(final List auswertungMessstellen) { - log.debug("#ladeGanglinieForMultipleMessstellen"); + log.debug("#createGanglinieForMultipleMessstellen"); final var zaehldatenStepline = GanglinieUtil.getInitialZaehldatenStepline(); final var auswertungByZeitraum = new HashMap(); diff --git a/src/test/java/de/muenchen/dave/services/messstelle/auswertung/GanglinieGesamtauswertungServiceTest.java b/src/test/java/de/muenchen/dave/services/messstelle/auswertung/GanglinieGesamtauswertungServiceTest.java index 3fcda972..e5694373 100644 --- a/src/test/java/de/muenchen/dave/services/messstelle/auswertung/GanglinieGesamtauswertungServiceTest.java +++ b/src/test/java/de/muenchen/dave/services/messstelle/auswertung/GanglinieGesamtauswertungServiceTest.java @@ -11,6 +11,9 @@ class GanglinieGesamtauswertungServiceTest { private GanglinieGesamtauswertungService ganglinieGesamtauswertungService = new GanglinieGesamtauswertungService(); + @Test + void + @Test void getZeitraumForXaxis() { var zeitraum = new Zeitraum(YearMonth.of(2024, 11), null, AuswertungsZeitraum.SEPTEMBER); From 04e9800a23efa945e51e48a552df9315d0b9d267 Mon Sep 17 00:00:00 2001 From: "alexander.boxhorn" Date: Wed, 27 Nov 2024 10:19:19 +0100 Subject: [PATCH 4/5] change x axis data --- .../auswertung/GanglinieGesamtauswertungService.java | 2 +- .../auswertung/GanglinieGesamtauswertungServiceTest.java | 9 +++------ 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/main/java/de/muenchen/dave/services/messstelle/auswertung/GanglinieGesamtauswertungService.java b/src/main/java/de/muenchen/dave/services/messstelle/auswertung/GanglinieGesamtauswertungService.java index 83dec557..a96fc9c2 100644 --- a/src/main/java/de/muenchen/dave/services/messstelle/auswertung/GanglinieGesamtauswertungService.java +++ b/src/main/java/de/muenchen/dave/services/messstelle/auswertung/GanglinieGesamtauswertungService.java @@ -206,7 +206,7 @@ public LadeZaehldatenSteplineDTO createGanglinieForMultipleMessstellen(final Lis public String getZeitraumForXaxis(final Zeitraum zeitraum) { final var bezeichnerZeitraum = zeitraum.getAuswertungsZeitraum().getText(); return bezeichnerZeitraum - .concat(bezeichnerZeitraum.isEmpty() ? StringUtils.EMPTY : StringUtils.SPACE) + .concat(bezeichnerZeitraum.isEmpty() ? StringUtils.EMPTY : ".") .concat(String.valueOf(zeitraum.getStart().getYear())); } diff --git a/src/test/java/de/muenchen/dave/services/messstelle/auswertung/GanglinieGesamtauswertungServiceTest.java b/src/test/java/de/muenchen/dave/services/messstelle/auswertung/GanglinieGesamtauswertungServiceTest.java index e5694373..a7b4699f 100644 --- a/src/test/java/de/muenchen/dave/services/messstelle/auswertung/GanglinieGesamtauswertungServiceTest.java +++ b/src/test/java/de/muenchen/dave/services/messstelle/auswertung/GanglinieGesamtauswertungServiceTest.java @@ -11,22 +11,19 @@ class GanglinieGesamtauswertungServiceTest { private GanglinieGesamtauswertungService ganglinieGesamtauswertungService = new GanglinieGesamtauswertungService(); - @Test - void - @Test void getZeitraumForXaxis() { var zeitraum = new Zeitraum(YearMonth.of(2024, 11), null, AuswertungsZeitraum.SEPTEMBER); var result = ganglinieGesamtauswertungService.getZeitraumForXaxis(zeitraum); - Assertions.assertThat(result).isNotNull().isEqualTo("09 2024"); + Assertions.assertThat(result).isNotNull().isEqualTo("09.2024"); zeitraum = new Zeitraum(YearMonth.of(2024, 11), null, AuswertungsZeitraum.HALBJAHR_2); result = ganglinieGesamtauswertungService.getZeitraumForXaxis(zeitraum); - Assertions.assertThat(result).isNotNull().isEqualTo("H2 2024"); + Assertions.assertThat(result).isNotNull().isEqualTo("H2.2024"); zeitraum = new Zeitraum(YearMonth.of(2024, 11), null, AuswertungsZeitraum.QUARTAL_3); result = ganglinieGesamtauswertungService.getZeitraumForXaxis(zeitraum); - Assertions.assertThat(result).isNotNull().isEqualTo("Q3 2024"); + Assertions.assertThat(result).isNotNull().isEqualTo("Q3.2024"); zeitraum = new Zeitraum(YearMonth.of(2024, 11), null, AuswertungsZeitraum.JAHRE); result = ganglinieGesamtauswertungService.getZeitraumForXaxis(zeitraum); From 6e6cbba72f79a0724b5256e8722dd6674d4b5c10 Mon Sep 17 00:00:00 2001 From: "alexander.boxhorn" Date: Wed, 27 Nov 2024 12:34:59 +0100 Subject: [PATCH 5/5] add unit test --- .../auswertung/AuswertungService.java | 3 +- .../GanglinieGesamtauswertungService.java | 56 +++++---- .../GanglinieGesamtauswertungServiceTest.java | 109 +++++++++++++++++- 3 files changed, 144 insertions(+), 24 deletions(-) diff --git a/src/main/java/de/muenchen/dave/services/messstelle/auswertung/AuswertungService.java b/src/main/java/de/muenchen/dave/services/messstelle/auswertung/AuswertungService.java index 5187d836..6d7ea718 100644 --- a/src/main/java/de/muenchen/dave/services/messstelle/auswertung/AuswertungService.java +++ b/src/main/java/de/muenchen/dave/services/messstelle/auswertung/AuswertungService.java @@ -72,7 +72,8 @@ public AuswertungMessstelleWithFileDTO ladeAuswertungMessstellen(final Messstell * Bereitet die im Parameter gegebenen Zähldaten für die Gangliniendarstellung auf. * * @param fahrzeugOptions die Optionen zur Aufbereitung der Zähldaten für die Gangliniendarstellung. - * @param auswertungenMessstellen die Auswertungen der Messstellen zur Aufbereitung für die Gangliniendarstellung. + * @param auswertungenMessstellen die Auswertungen der Messstellen zur Aufbereitung für die + * Gangliniendarstellung. * @return die aufbereiteten Daten für die Gangliniendarstellung. */ protected LadeZaehldatenSteplineDTO createZaehldatenForGanglinie( diff --git a/src/main/java/de/muenchen/dave/services/messstelle/auswertung/GanglinieGesamtauswertungService.java b/src/main/java/de/muenchen/dave/services/messstelle/auswertung/GanglinieGesamtauswertungService.java index a96fc9c2..fe329688 100644 --- a/src/main/java/de/muenchen/dave/services/messstelle/auswertung/GanglinieGesamtauswertungService.java +++ b/src/main/java/de/muenchen/dave/services/messstelle/auswertung/GanglinieGesamtauswertungService.java @@ -18,6 +18,7 @@ import org.springframework.stereotype.Service; import java.math.BigDecimal; +import java.util.Comparator; import java.util.HashMap; import java.util.List; @@ -133,12 +134,15 @@ public LadeZaehldatenSteplineDTO createGanglinieForSingleMessstelle( zaehldatenStepline.setXAxisDataFirstChart(newXAxisData); }); + + zaehldatenStepline.setSeriesEntriesFirstChart(seriesEntries.getChosenStepLineSeriesEntries(fahrzeugOptions)); return zaehldatenStepline; } /** - * Erstellt die Repräsentation der Zähldaten (Summe KFZ) zur Gangliniendarstellung für mehrere Messstellen. + * Erstellt die Repräsentation der Zähldaten (Summe KFZ) zur Gangliniendarstellung für mehrere + * Messstellen. * * @param auswertungMessstellen mit den Zähldaten. * @return die Repräsentation der Zähldaten (Summe KFZ) für die Gangliniendarstellung. @@ -172,27 +176,35 @@ public LadeZaehldatenSteplineDTO createGanglinieForMultipleMessstellen(final Lis })); // Aufbereitung der im oberen Abschnitt gruppierten Zähldaten für Gangliniendarstellung. - auswertungByZeitraum.values().forEach(auswertungZeitraum -> { - auswertungZeitraum.summeKfzByMstId.forEach((mstId, summeKfz) -> { - final var stepLineSeriesEntryMessstelle = new StepLineSeriesEntryIntegerDTO(); - stepLineSeriesEntryMessstelle.setName("MST " + mstId); - GanglinieUtil.setSeriesIndexForFirstChartValue(stepLineSeriesEntryMessstelle); - stepLineSeriesEntryMessstelle.getYAxisData().add(GanglinieUtil.getIntValueIfNotNull(summeKfz)); - GanglinieUtil.setLegendInZaehldatenStepline( - zaehldatenStepline, - stepLineSeriesEntryMessstelle.getName()); - GanglinieUtil.setRangeMaxRoundedToTwentyInZaehldatenStepline( - zaehldatenStepline, - GanglinieUtil.getIntValueIfNotNull(summeKfz)); - }); - - final var currentXAxisData = zaehldatenStepline.getXAxisDataFirstChart(); - final var newXAxisData = ZaehldatenProcessingUtil.checkAndAddToXAxisWhenNotAvailable( - currentXAxisData, - getZeitraumForXaxis(auswertungZeitraum.getZeitraum())); - zaehldatenStepline.setXAxisDataFirstChart(newXAxisData); - - }); + auswertungByZeitraum + .values() + .stream() + .sorted(Comparator.comparing(auswertungZeitraum -> auswertungZeitraum.getZeitraum().getStart())) + .forEach(auswertungZeitraum -> { + + final var stepLineSeriesEntryMessstelle = new StepLineSeriesEntryIntegerDTO(); + + auswertungZeitraum.summeKfzByMstId.forEach((mstId, summeKfz) -> { + stepLineSeriesEntryMessstelle.setName("MST " + mstId); + GanglinieUtil.setSeriesIndexForFirstChartValue(stepLineSeriesEntryMessstelle); + stepLineSeriesEntryMessstelle.getYAxisData().add(GanglinieUtil.getIntValueIfNotNull(summeKfz)); + GanglinieUtil.setLegendInZaehldatenStepline( + zaehldatenStepline, + stepLineSeriesEntryMessstelle.getName()); + GanglinieUtil.setRangeMaxRoundedToTwentyInZaehldatenStepline( + zaehldatenStepline, + GanglinieUtil.getIntValueIfNotNull(summeKfz)); + + zaehldatenStepline.getSeriesEntriesFirstChart().add(stepLineSeriesEntryMessstelle); + }); + + final var currentXAxisData = zaehldatenStepline.getXAxisDataFirstChart(); + final var newXAxisData = ZaehldatenProcessingUtil.checkAndAddToXAxisWhenNotAvailable( + currentXAxisData, + getZeitraumForXaxis(auswertungZeitraum.getZeitraum())); + zaehldatenStepline.setXAxisDataFirstChart(newXAxisData); + + }); return zaehldatenStepline; } diff --git a/src/test/java/de/muenchen/dave/services/messstelle/auswertung/GanglinieGesamtauswertungServiceTest.java b/src/test/java/de/muenchen/dave/services/messstelle/auswertung/GanglinieGesamtauswertungServiceTest.java index a7b4699f..f17b7a92 100644 --- a/src/test/java/de/muenchen/dave/services/messstelle/auswertung/GanglinieGesamtauswertungServiceTest.java +++ b/src/test/java/de/muenchen/dave/services/messstelle/auswertung/GanglinieGesamtauswertungServiceTest.java @@ -1,16 +1,123 @@ package de.muenchen.dave.services.messstelle.auswertung; +import de.muenchen.dave.domain.dtos.laden.LadeZaehldatenSteplineDTO; +import de.muenchen.dave.domain.dtos.messstelle.auswertung.Auswertung; +import de.muenchen.dave.domain.dtos.messstelle.auswertung.AuswertungMessstelle; import de.muenchen.dave.domain.enums.AuswertungsZeitraum; +import de.muenchen.dave.geodateneai.gen.model.TagesaggregatDto; import de.muenchen.dave.services.messstelle.Zeitraum; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; +import java.math.BigDecimal; import java.time.YearMonth; +import java.util.ArrayList; class GanglinieGesamtauswertungServiceTest { private GanglinieGesamtauswertungService ganglinieGesamtauswertungService = new GanglinieGesamtauswertungService(); + @Test + void createGanglinieForMultipleMessstellen() { + final var auswertungMessstellen = new ArrayList(); + var auswertungMessstelle = new AuswertungMessstelle(); + auswertungMessstelle.setMstId("1"); + + var auswertung = new Auswertung(); + var zeitraum = new Zeitraum(YearMonth.of(2024, 1), YearMonth.of(2024, 3), AuswertungsZeitraum.QUARTAL_1); + var tagesaggregat = new TagesaggregatDto(); + tagesaggregat.setSummeKraftfahrzeugverkehr(BigDecimal.valueOf(100)); + auswertung.setZeitraum(zeitraum); + auswertung.setDaten(tagesaggregat); + auswertungMessstelle.getAuswertungenProZeitraum().add(auswertung); + + auswertung = new Auswertung(); + zeitraum = new Zeitraum(YearMonth.of(2024, 4), YearMonth.of(2024, 6), AuswertungsZeitraum.QUARTAL_2); + tagesaggregat = new TagesaggregatDto(); + tagesaggregat.setSummeKraftfahrzeugverkehr(BigDecimal.valueOf(101)); + auswertung.setZeitraum(zeitraum); + auswertung.setDaten(tagesaggregat); + auswertungMessstelle.getAuswertungenProZeitraum().add(auswertung); + + auswertung = new Auswertung(); + zeitraum = new Zeitraum(YearMonth.of(2024, 7), YearMonth.of(2024, 9), AuswertungsZeitraum.QUARTAL_3); + tagesaggregat = new TagesaggregatDto(); + tagesaggregat.setSummeKraftfahrzeugverkehr(BigDecimal.valueOf(102)); + auswertung.setZeitraum(zeitraum); + auswertung.setDaten(tagesaggregat); + auswertungMessstelle.getAuswertungenProZeitraum().add(auswertung); + + auswertung = new Auswertung(); + zeitraum = new Zeitraum(YearMonth.of(2024, 10), YearMonth.of(2024, 12), AuswertungsZeitraum.QUARTAL_4); + tagesaggregat = new TagesaggregatDto(); + tagesaggregat.setSummeKraftfahrzeugverkehr(BigDecimal.valueOf(103)); + auswertung.setZeitraum(zeitraum); + auswertung.setDaten(tagesaggregat); + auswertungMessstelle.getAuswertungenProZeitraum().add(auswertung); + + auswertung = new Auswertung(); + zeitraum = new Zeitraum(YearMonth.of(2025, 1), YearMonth.of(2025, 3), AuswertungsZeitraum.QUARTAL_1); + tagesaggregat = new TagesaggregatDto(); + tagesaggregat.setSummeKraftfahrzeugverkehr(BigDecimal.valueOf(104)); + auswertung.setZeitraum(zeitraum); + auswertung.setDaten(tagesaggregat); + auswertungMessstelle.getAuswertungenProZeitraum().add(auswertung); + + auswertungMessstellen.add(auswertungMessstelle); + + auswertungMessstelle = new AuswertungMessstelle(); + auswertungMessstelle.setMstId("2"); + + auswertung = new Auswertung(); + zeitraum = new Zeitraum(YearMonth.of(2024, 1), YearMonth.of(2024, 3), AuswertungsZeitraum.QUARTAL_1); + tagesaggregat = new TagesaggregatDto(); + tagesaggregat.setSummeKraftfahrzeugverkehr(BigDecimal.valueOf(200)); + auswertung.setZeitraum(zeitraum); + auswertung.setDaten(tagesaggregat); + auswertungMessstelle.getAuswertungenProZeitraum().add(auswertung); + + auswertung = new Auswertung(); + zeitraum = new Zeitraum(YearMonth.of(2024, 4), YearMonth.of(2024, 6), AuswertungsZeitraum.QUARTAL_2); + tagesaggregat = new TagesaggregatDto(); + tagesaggregat.setSummeKraftfahrzeugverkehr(BigDecimal.valueOf(201)); + auswertung.setZeitraum(zeitraum); + auswertung.setDaten(tagesaggregat); + auswertungMessstelle.getAuswertungenProZeitraum().add(auswertung); + + auswertung = new Auswertung(); + zeitraum = new Zeitraum(YearMonth.of(2024, 7), YearMonth.of(2024, 9), AuswertungsZeitraum.QUARTAL_3); + tagesaggregat = new TagesaggregatDto(); + tagesaggregat.setSummeKraftfahrzeugverkehr(BigDecimal.valueOf(202)); + auswertung.setZeitraum(zeitraum); + auswertung.setDaten(tagesaggregat); + auswertungMessstelle.getAuswertungenProZeitraum().add(auswertung); + + auswertung = new Auswertung(); + zeitraum = new Zeitraum(YearMonth.of(2024, 10), YearMonth.of(2024, 12), AuswertungsZeitraum.QUARTAL_4); + tagesaggregat = new TagesaggregatDto(); + tagesaggregat.setSummeKraftfahrzeugverkehr(BigDecimal.valueOf(203)); + auswertung.setZeitraum(zeitraum); + auswertung.setDaten(tagesaggregat); + auswertungMessstelle.getAuswertungenProZeitraum().add(auswertung); + + auswertung = new Auswertung(); + zeitraum = new Zeitraum(YearMonth.of(2025, 1), YearMonth.of(2025, 3), AuswertungsZeitraum.QUARTAL_1); + tagesaggregat = new TagesaggregatDto(); + tagesaggregat.setSummeKraftfahrzeugverkehr(BigDecimal.valueOf(204)); + auswertung.setZeitraum(zeitraum); + auswertung.setDaten(tagesaggregat); + auswertungMessstelle.getAuswertungenProZeitraum().add(auswertung); + + auswertungMessstellen.add(auswertungMessstelle); + + final var result = ganglinieGesamtauswertungService.createGanglinieForMultipleMessstellen(auswertungMessstellen); + + final var expected = new LadeZaehldatenSteplineDTO(); + + Assertions.assertThat(result).isNotNull().isEqualTo(expected); + + } + @Test void getZeitraumForXaxis() { var zeitraum = new Zeitraum(YearMonth.of(2024, 11), null, AuswertungsZeitraum.SEPTEMBER); @@ -30,4 +137,4 @@ void getZeitraumForXaxis() { Assertions.assertThat(result).isNotNull().isEqualTo("2024"); } -} \ No newline at end of file +}