Skip to content

Commit

Permalink
Merge pull request #65 from it-at-m/sprint
Browse files Browse the repository at this point in the history
Vorbereitung Demo 03.04.2024
  • Loading branch information
DanielOber authored Apr 2, 2024
2 parents f64120c + 709964f commit c0e6155
Show file tree
Hide file tree
Showing 47 changed files with 2,818 additions and 404 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,14 @@

import de.muenchen.dave.domain.dtos.CsvDTO;
import de.muenchen.dave.domain.dtos.OptionsDTO;
import de.muenchen.dave.domain.dtos.messstelle.MessstelleOptionsDTO;
import de.muenchen.dave.exceptions.DataNotFoundException;
import de.muenchen.dave.services.GenerateCsvService;
import de.muenchen.dave.services.messstelle.GenerateCsvMstService;
import javax.validation.Valid;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
Expand All @@ -20,18 +23,17 @@

@RestController
@Slf4j
@RequiredArgsConstructor
@Validated
@PreAuthorize("hasAnyRole(T(de.muenchen.dave.security.AuthoritiesEnum).ANWENDER.name(), " +
"T(de.muenchen.dave.security.AuthoritiesEnum).POWERUSER.name())")
public class GenerateCsvController {

private static final String REQUEST_PARAMETER_ZAEHLUNG_ID = "zaehlung_id";
private static final String REQUEST_PARAMETER_MESSSTELLE_ID = "messstelle_id";

private final GenerateCsvService generateCsvService;

public GenerateCsvController(final GenerateCsvService generateCsvService) {
this.generateCsvService = generateCsvService;
}
private final GenerateCsvMstService generateCsvServiceMst;

/**
* Nimmt Daten aus dem Frontend entgegen und gibt eine CSV als String zurück.
Expand All @@ -54,4 +56,18 @@ public ResponseEntity<CsvDTO> generateCSV(
}
}

@PostMapping(value = "/generate-csv-mst")
public ResponseEntity<CsvDTO> generateCSVMessstelle(
@RequestParam(value = REQUEST_PARAMETER_MESSSTELLE_ID) @NotEmpty final String messstelleId,
@Valid @RequestBody @NotNull final MessstelleOptionsDTO options) {
try {
log.info("GenerateCSV für Messstelle {} aufgerufen", messstelleId);
final CsvDTO dto = generateCsvServiceMst.generateDatentabelleCsv(messstelleId, options);
log.info("CSV wurde erstellt");
return new ResponseEntity<>(dto, HttpStatus.OK);
} catch (final DataNotFoundException exception) {
throw new ResponseStatusException(HttpStatus.NOT_FOUND, exception.getMessage());
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,18 @@
package de.muenchen.dave.controller;

import de.muenchen.dave.domain.dtos.laden.messwerte.LadeProcessedMesswerteDTO;
import de.muenchen.dave.domain.dtos.messstelle.MessstelleOptionsDTO;
import de.muenchen.dave.services.messstelle.MesswerteService;
import javax.validation.Valid;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

Expand All @@ -32,12 +36,13 @@ public class MesswerteMessquerschnittController {
* @param messstelleId Die Id der Messstelle.
* @return Die aufbereiteten Daten einer Messstelle für die Gangline im Frontend.
*/
@GetMapping(value = "/lade-messwerte", produces = MediaType.APPLICATION_JSON_VALUE)
@PostMapping(value = "/lade-messwerte", produces = MediaType.APPLICATION_JSON_VALUE)
@Transactional(readOnly = true)
public ResponseEntity<LadeProcessedMesswerteDTO> ladeMesswerte(
@RequestParam(value = REQUEST_PARAMETER_MESSSTELLE_ID) @NotEmpty final String messstelleId) {
@RequestParam(value = REQUEST_PARAMETER_MESSSTELLE_ID) @NotEmpty final String messstelleId,
@Valid @RequestBody @NotNull final MessstelleOptionsDTO options) {
log.info("ladeMEsswerte für Messstelle {} aufgerufen", messstelleId);
final LadeProcessedMesswerteDTO processedZaehldaten = messwerteService.ladeMesswerte(messstelleId);
final LadeProcessedMesswerteDTO processedZaehldaten = messwerteService.ladeMesswerte(messstelleId, options);
log.info("Laden der Daten abgeschlossen.");
log.debug("Messdaten: {}", processedZaehldaten.toString());
return ResponseEntity.ok(processedZaehldaten);
Expand Down
Original file line number Diff line number Diff line change
@@ -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<LadeBelastungsplanMessquerschnittDataDTO> 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;
}
Original file line number Diff line number Diff line change
@@ -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;
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,5 @@ public class LadeProcessedMesswerteDTO implements Serializable {

LadeZaehldatenHeatmapDTO zaehldatenHeatmap;

BelastungsplanMessquerschnitteDTO listBelastungsplanMessquerschnitteDTO;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
/*
* Copyright (c): it@M - Dienstleister für Informations- und Telekommunikationstechnik
* der Landeshauptstadt München, 2020
*/
package de.muenchen.dave.domain.dtos.messstelle;

import java.io.Serializable;
import javax.validation.constraints.NotNull;
import lombok.Data;

@Data
public class FahrzeugOptionsDTO implements Serializable {

@NotNull
private boolean kraftfahrzeugverkehr;
@NotNull
private boolean schwerverkehr;
@NotNull
private boolean gueterverkehr;
@NotNull
private boolean schwerverkehrsanteilProzent;
@NotNull
private boolean gueterverkehrsanteilProzent;
@NotNull
private boolean radverkehr;
@NotNull
private boolean fussverkehr;
@NotNull
private boolean lastkraftwagen;
@NotNull
private boolean lastzuege;
@NotNull
private boolean busse;
@NotNull
private boolean kraftraeder;
@NotNull
private boolean personenkraftwagen;
@NotNull
private boolean lieferwagen;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
/*
* Copyright (c): it@M - Dienstleister für Informations- und Telekommunikationstechnik
* der Landeshauptstadt München, 2020
*/
package de.muenchen.dave.domain.dtos.messstelle;

import de.muenchen.dave.domain.enums.ZaehldatenIntervall;
import de.muenchen.dave.domain.enums.Zeitblock;
import java.io.Serializable;
import java.time.LocalDate;
import java.util.List;
import java.util.Set;
import javax.validation.constraints.NotNull;
import lombok.Data;

@Data
public class MessstelleOptionsDTO implements Serializable {

@NotNull
private List<LocalDate> zeitraum;

@NotNull
private FahrzeugOptionsDTO fahrzeuge;

@NotNull
private String zeitauswahl;

@NotNull
private Zeitblock zeitblock;

private String tagesTyp;

@NotNull
private ZaehldatenIntervall intervall;

@NotNull
private Set<String> messquerschnittIds;

// Belastungsplan
@NotNull
private Boolean werteHundertRunden;
// Listenausgabe
@NotNull
private Boolean stundensumme;
@NotNull
private Boolean blocksumme;
@NotNull
private Boolean tagessumme;
@NotNull
private Boolean spitzenstunde;
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,6 @@ public class MessstelleOverviewDTO implements Serializable {
private String status;
private Boolean sichtbarDatenportal;
private Boolean geprueft;
private String stadtbezirk;
private String stadtbezirkNummer;
}
3 changes: 2 additions & 1 deletion src/main/java/de/muenchen/dave/domain/enums/AssetType.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@
@Getter
public enum AssetType {
TEXT("TEXT"), HEADING1("HEADING1"), HEADING2("HEADING2"), HEADING3("HEADING3"), HEADING4("HEADING4"), HEADING5("HEADING5"), IMAGE("IMAGE"), PAGEBREAK(
"PAGEBREAK"), NEWLINE("NEWLINE"), LOGO("LOGO"), DATATABLE("DATATABLE"), ZAEHLUNGSKENNGROESSEN("ZAEHLUNGSKENNGROESSEN");
"PAGEBREAK"), NEWLINE("NEWLINE"), LOGO(
"LOGO"), DATATABLE("DATATABLE"), DATATABLE_MESSSTELLE("DATATABLE_MESSSTELLE"), ZAEHLUNGSKENNGROESSEN("ZAEHLUNGSKENNGROESSEN");

private final String type;
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,13 @@
@Getter
public enum ZaehldatenIntervall {

STUNDE_VIERTEL(1),
STUNDE_VIERTEL(1, 15),

STUNDE_HALB(2),
STUNDE_HALB(2, 30),

STUNDE_KOMPLETT(4);
STUNDE_KOMPLETT(4, 60);

private final Integer quarterPerIntervall;
private final Integer minutesPerIntervall;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package de.muenchen.dave.domain.mapper;

import de.muenchen.dave.domain.dtos.laden.messwerte.LadeMesswerteDTO;
import de.muenchen.dave.domain.dtos.messstelle.FahrzeugOptionsDTO;
import de.muenchen.dave.domain.pdf.helper.DatentabellePdfZaehldaten;
import de.muenchen.dave.domain.pdf.helper.DatentabellePdfZaehldatum;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import org.mapstruct.AfterMapping;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.MappingTarget;
import org.mapstruct.Mappings;

/**
* Mapper wird benötigt, da Mustache nicht mit @JsonGetter umgehen kann.
* Mustache ist eine Sprache für Templates aus denen die für die PDF benötigten HTML Strings
* entstehen.
*/
@Mapper(componentModel = "spring")
public interface DatentabellePdfMessstelleMapper {

String UHRZEIT_23_59 = "23:59";
String UHRZEIT_24_00 = "24:00";

@Mappings({
@Mapping(target = "endeUhrzeit", source = "dto.endeUhrzeit", dateFormat = "HH:mm"),
@Mapping(target = "startUhrzeit", source = "dto.startUhrzeit", dateFormat = "HH:mm"),
})
DatentabellePdfZaehldatum ladeMesswerteDTO2bean(LadeMesswerteDTO dto);

@AfterMapping
default void ladeMesswerteDTO2beanAfterMapping(@MappingTarget DatentabellePdfZaehldatum bean, LadeMesswerteDTO dto) {
if (StringUtils.equals(bean.getEndeUhrzeit(), UHRZEIT_23_59)) {
bean.setEndeUhrzeit(UHRZEIT_24_00);
}
}

List<DatentabellePdfZaehldatum> ladeMesswerteDTOList2beanList(List<LadeMesswerteDTO> LadeMesswerteDTOList);

@Mapping(target = "activeTabsFahrzeugtypen", ignore = true)
@Mapping(target = "activeTabsFahrzeugklassen", ignore = true)
@Mapping(target = "activeTabsAnteile", ignore = true)
@Mapping(target = "showPkwEinheiten", ignore = true)
@Mapping(target = "zaehldatenList", ignore = true)
@Mapping(target = "showPersonenkraftwagen", source = "personenkraftwagen")
@Mapping(target = "showLastkraftwagen", source = "lastkraftwagen")
@Mapping(target = "showLastzuege", source = "lastzuege")
@Mapping(target = "showLieferwagen", source = "lieferwagen")
@Mapping(target = "showBusse", source = "busse")
@Mapping(target = "showKraftraeder", source = "kraftraeder")
@Mapping(target = "showRadverkehr", source = "radverkehr")
@Mapping(target = "showFussverkehr", source = "fussverkehr")
@Mapping(target = "showKraftfahrzeugverkehr", source = "kraftfahrzeugverkehr")
@Mapping(target = "showSchwerverkehr", source = "schwerverkehr")
@Mapping(target = "showGueterverkehr", source = "gueterverkehr")
@Mapping(target = "showSchwerverkehrsanteilProzent", source = "schwerverkehrsanteilProzent")
@Mapping(target = "showGueterverkehrsanteilProzent", source = "gueterverkehrsanteilProzent")
DatentabellePdfZaehldaten fahrzeugOptionsToDatentabellePdfZaehldaten(final FahrzeugOptionsDTO options);

}
Original file line number Diff line number Diff line change
Expand Up @@ -118,4 +118,10 @@ default void toSucheMessstelleSuggestDto(@MappingTarget SucheMessstelleSuggestDT

List<MessstelleOverviewDTO> bean2overviewDto(List<Messstelle> bean);

@AfterMapping
default void bean2overviewDtoAftermapping(@MappingTarget MessstelleOverviewDTO dto, Messstelle bean) {
dto.setStadtbezirkNummer(String.valueOf(bean.getStadtbezirkNummer()));
dto.setStadtbezirk(Stadtbezirk.bezeichnungOf(bean.getStadtbezirkNummer()));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
@JsonSubTypes.Type(value = NewlineAsset.class, name = "NEWLINE"),
@JsonSubTypes.Type(value = LogoAsset.class, name = "LOGO"),
@JsonSubTypes.Type(value = DatatableAsset.class, name = "DATATABLE"),
@JsonSubTypes.Type(value = MessstelleDatatableAsset.class, name = "DATATABLE_MESSSTELLE"),
@JsonSubTypes.Type(value = ZaehlungskenngroessenAsset.class, name = "ZAEHLUNGSKENNGROESSEN") })
@Data
public class BaseAsset implements MustacheBean {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package de.muenchen.dave.domain.pdf.assets;

import de.muenchen.dave.domain.dtos.messstelle.MessstelleOptionsDTO;
import de.muenchen.dave.domain.pdf.helper.DatentabellePdfZaehldaten;
import lombok.Data;

@Data
public class MessstelleDatatableAsset extends BaseAsset {

private DatentabellePdfZaehldaten datentabelleZaehldaten;

private String randomTableId;

private String text;

private MessstelleOptionsDTO options;

private String mstId;

}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ public class DatentabellePdfZaehldaten {

private boolean showLastzuege;

private boolean showLieferwagen;

private boolean showBusse;

private boolean showKraftraeder;
Expand Down Expand Up @@ -116,6 +118,8 @@ public String getRightBorderFahrzeugtypen() {
return "kraftraeder";
} else if (isShowBusse()) {
return "busse";
} else if (isShowLieferwagen()) {
return "lieferwagen";
} else if (isShowLastzuege()) {
return "lastzuege";
} else if (isShowLastkraftwagen()) {
Expand Down
Loading

0 comments on commit c0e6155

Please sign in to comment.