Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bug/dave 179 nicht sichtbare messstellen #51

Merged
merged 3 commits into from
Feb 19, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package de.muenchen.dave.domain.dtos;

import de.muenchen.dave.domain.enums.MessstelleStatus;
import java.io.Serializable;
import lombok.Data;

Expand All @@ -17,8 +16,6 @@ public class ErhebungsstelleKarteDTO implements Serializable {

private Double latitude;

private MessstelleStatus status;

private ErhebungsstelleTooltipDTO tooltip;

private Boolean sichtbarDatenportal;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,21 +1,14 @@
package de.muenchen.dave.domain.dtos.messstelle;

import java.io.Serializable;
import de.muenchen.dave.domain.dtos.ErhebungsstelleKarteDTO;
import de.muenchen.dave.domain.enums.MessstelleStatus;
import lombok.Data;
import lombok.EqualsAndHashCode;

@Data
public class MessstelleKarteDTO implements Serializable {
@EqualsAndHashCode(callSuper = true)
public class MessstelleKarteDTO extends ErhebungsstelleKarteDTO {

private String id;

private String mstId;

private Double longitude;

private Double latitude;

private MessstelleTooltipDTO tooltip;

private Boolean sichtbarDatenportal;
private MessstelleStatus status;

}
71 changes: 44 additions & 27 deletions src/main/java/de/muenchen/dave/domain/mapper/SucheMapper.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,45 @@
package de.muenchen.dave.domain.mapper;

import de.muenchen.dave.domain.dtos.ZaehlstelleKarteDTO;
import de.muenchen.dave.domain.dtos.ZaehlstelleTooltipDTO;
import de.muenchen.dave.domain.dtos.messstelle.MessstelleKarteDTO;
import de.muenchen.dave.domain.dtos.messstelle.MessstelleTooltipDTO;
import de.muenchen.dave.domain.elasticsearch.Zaehlstelle;
import de.muenchen.dave.domain.elasticsearch.detektor.Messstelle;
import de.muenchen.dave.services.IndexServiceUtils;
import org.apache.commons.collections4.CollectionUtils;
import java.util.List;
import java.util.Set;
import org.mapstruct.AfterMapping;
import org.mapstruct.Mapper;
import org.mapstruct.MappingTarget;

public class SucheMapper {
@Mapper(componentModel = "spring")
public interface SucheMapper {

MessstelleTooltipDTO messstelleToMessstelleTooltipDTO(final Messstelle messstelle);

MessstelleKarteDTO messstelleToMessstelleKarteDTO(final Messstelle messstelle);

Set<MessstelleKarteDTO> messstelleToMessstelleKarteDTO(final List<Messstelle> messstellen);

@AfterMapping
default void messstelleToMessstelleKarteDTOAfterMapping(@MappingTarget MessstelleKarteDTO dto, Messstelle bean) {
dto.setType("messstelle");
dto.setFachId(bean.getMstId());
dto.setLatitude(bean.getPunkt().getLat());
dto.setLongitude(bean.getPunkt().getLon());
dto.setTooltip(messstelleToMessstelleTooltipDTO(bean));
}

@AfterMapping
default void messstelleToMessstelleTooltipDTOAfterMapping(@MappingTarget MessstelleTooltipDTO dto, Messstelle bean) {
dto.setStadtbezirk(IndexServiceUtils.getStadtbezirkBezeichnung(bean.getStadtbezirkNummer()));
dto.setStadtbezirknummer(bean.getStadtbezirkNummer());
dto.setRealisierungsdatum(bean.getRealisierungsdatum().toString());
if (bean.getAbbaudatum() != null)
dto.setAbbaudatum(bean.getAbbaudatum().toString());
dto.setDatumLetztePlausibleMessung(bean.getDatumLetztePlausibleMessung().toString());
}

/**
* Erstellt ein TooltipDTO für die Metainformationen einer Zählstelle.
Expand All @@ -21,7 +54,7 @@ public class SucheMapper {
* @param kreuzungsname Kreuzungsname als String
* @return TooltipDTO mit allen benötigten Feldern
*/
public static ZaehlstelleTooltipDTO createZaehlstelleTooltip(final String stadtbezirk,
default ZaehlstelleTooltipDTO createZaehlstelleTooltip(final String stadtbezirk,
final Integer stadtbezirknummer,
final String nummer,
final Integer anzahlZaehlungen,
Expand All @@ -37,29 +70,13 @@ public static ZaehlstelleTooltipDTO createZaehlstelleTooltip(final String stadtb
return zaehlstelleTooltipDTO;
}

/**
* Erstellt ein TooltipDTO für die Metainformationen einer Messstelle.
* Das DTO wird im Frontend als MouseOver bei einem Marker in der Karte
* angezeigt.
*
* @param messstelle Messstelle
* @return MessstelleTooltipDTO
*/
public static MessstelleTooltipDTO createMessstelleTooltip(
final Messstelle messstelle) {
final MessstelleTooltipDTO tooltipDTO = new MessstelleTooltipDTO();
tooltipDTO.setMstId(messstelle.getMstId());
tooltipDTO.setStandort(messstelle.getStandort());
tooltipDTO.setStadtbezirk(IndexServiceUtils.getStadtbezirkBezeichnung(messstelle.getStadtbezirkNummer()));
tooltipDTO.setStadtbezirknummer(messstelle.getStadtbezirkNummer());
tooltipDTO.setRealisierungsdatum(messstelle.getRealisierungsdatum().toString());
if (messstelle.getAbbaudatum() != null)
tooltipDTO.setAbbaudatum(messstelle.getAbbaudatum().toString());
tooltipDTO.setDatumLetztePlausibleMessung(messstelle.getDatumLetztePlausibleMessung().toString());
if (CollectionUtils.isNotEmpty(messstelle.getMessquerschnitte())) {
tooltipDTO.setDetektierteVerkehrsarten(messstelle.getDetektierteVerkehrsarten());
}
return tooltipDTO;
}
ZaehlstelleKarteDTO zaehlstelleToZaehlstelleKarteDTO(final Zaehlstelle zaehlstelle);

@AfterMapping
default void zaehlstelleToZaehlstelleKarteDTOAfterMapping(@MappingTarget ZaehlstelleKarteDTO dto, Zaehlstelle bean) {
dto.setType("zaehlstelle");
dto.setFachId(bean.getNummer());
dto.setLatitude(bean.getPunkt().getLat());
dto.setLongitude(bean.getPunkt().getLon());
}
}
46 changes: 8 additions & 38 deletions src/main/java/de/muenchen/dave/services/SucheService.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import de.muenchen.dave.domain.dtos.ErhebungsstelleKarteDTO;
import de.muenchen.dave.domain.dtos.ZaehlartenKarteDTO;
import de.muenchen.dave.domain.dtos.ZaehlstelleKarteDTO;
import de.muenchen.dave.domain.dtos.messstelle.MessstelleKarteDTO;
import de.muenchen.dave.domain.dtos.suche.SucheComplexSuggestsDTO;
import de.muenchen.dave.domain.dtos.suche.SucheMessstelleSuggestDTO;
import de.muenchen.dave.domain.dtos.suche.SucheWordSuggestDTO;
Expand Down Expand Up @@ -70,6 +71,8 @@ public class SucheService {

private final ZaehlungMapper zaehlungMapper;

private final SucheMapper sucheMapper;

private final ElasticsearchOperations elasticsearchOperations;

/**
Expand Down Expand Up @@ -212,7 +215,7 @@ public Set<ErhebungsstelleKarteDTO> sucheErhebungsstelleSichtbarDatenportal(fina
public Set<ErhebungsstelleKarteDTO> sucheErhebungsstelle(final String query, final boolean noFilter) {
log.debug("Zugriff auf den Service #sucheErhebungsstelle");
final Set<ZaehlstelleKarteDTO> zaehlstellen = sucheZaehlstelle(query, noFilter);
final Set<ErhebungsstelleKarteDTO> messstellen = sucheMessstelle(query);
final Set<MessstelleKarteDTO> messstellen = sucheMessstelle(query);
return Stream.concat(zaehlstellen.stream(), messstellen.stream()).collect(Collectors.toSet());
}

Expand Down Expand Up @@ -276,7 +279,7 @@ private List<SucheMessstelleSuggestDTO> getMessstellenSuggest(final String query
* @param query Eine Suchquery
* @return Ein Set von befüllten ErhebungsstelleKarteDTOs
*/
private Set<ErhebungsstelleKarteDTO> sucheMessstelle(final String query) {
private Set<MessstelleKarteDTO> sucheMessstelle(final String query) {
final List<Messstelle> messstellen;
final PageRequest pageable = PageRequest.of(0, 10000);
if (StringUtils.isEmpty(query)) {
Expand All @@ -286,7 +289,7 @@ private Set<ErhebungsstelleKarteDTO> sucheMessstelle(final String query) {
log.debug("query '{}'", q);
messstellen = this.messstelleIndex.suggestSearch(q, pageable).toList();
}
return this.getMessstelleKarteDTOS(messstellen);
return sucheMapper.messstelleToMessstelleKarteDTO(messstellen);
}

private boolean isDateEqualOrAfter(final LocalDate datum, final LocalDate datumAfter) {
Expand Down Expand Up @@ -395,21 +398,15 @@ private Set<ZaehlstelleKarteDTO> getZaehlstelleKarteDTOS(final List<Zaehlstelle>
+ StringUtils.SPACE
+ zaehlstelle.getLetzteZaehlungJahr();

final ZaehlstelleKarteDTO zaehlstelleKarteDTO = new ZaehlstelleKarteDTO();
zaehlstelleKarteDTO.setId(zaehlstelle.getId());
zaehlstelleKarteDTO.setLatitude(zaehlstelle.getPunkt().getLat());
zaehlstelleKarteDTO.setLongitude(zaehlstelle.getPunkt().getLon());
zaehlstelleKarteDTO.setFachId(nummer);
zaehlstelleKarteDTO.setType("zaehlstelle");
zaehlstelleKarteDTO.setSichtbarDatenportal(zaehlstelle.getSichtbarDatenportal());
final ZaehlstelleKarteDTO zaehlstelleKarteDTO = sucheMapper.zaehlstelleToZaehlstelleKarteDTO(zaehlstelle);

zaehlstelleKarteDTO.setLetzteZaehlungId(
letzeZaehlung == null
? ""
: letzeZaehlung.getId());

zaehlstelleKarteDTO.setTooltip(
SucheMapper.createZaehlstelleTooltip(
sucheMapper.createZaehlstelleTooltip(
stadtbezirk,
stadtbezirksnummer,
nummer,
Expand All @@ -426,33 +423,6 @@ private Set<ZaehlstelleKarteDTO> getZaehlstelleKarteDTOS(final List<Zaehlstelle>
return zaehlstelleKarteDTOSet;
}

/**
* Befüllt ErhebungsstelleKarteDTO mit den entsprechenden Daten der Messstelle zum Anzeigen auf
* einer Karte und liefert diese zurück
*
* @param messstellen messstellen, die in ErhebungsstelleKarteDTOs umgewandelt werden sollen
* @return Ein Set von befüllten ErhebungsstelleKarteDTOs
*/
private Set<ErhebungsstelleKarteDTO> getMessstelleKarteDTOS(final List<Messstelle> messstellen) {
final Set<ErhebungsstelleKarteDTO> erhebungsstelleKarteDTOSet = new HashSet<>();

for (final Messstelle messstelle : messstellen) {
final ErhebungsstelleKarteDTO erhebungsstelleKarteDTO = new ErhebungsstelleKarteDTO();
erhebungsstelleKarteDTO.setId(messstelle.getId());
erhebungsstelleKarteDTO.setLatitude(messstelle.getPunkt().getLat());
erhebungsstelleKarteDTO.setLongitude(messstelle.getPunkt().getLon());
erhebungsstelleKarteDTO.setFachId(messstelle.getMstId());
erhebungsstelleKarteDTO.setType("messstelle");
erhebungsstelleKarteDTO.setStatus(messstelle.getStatus());

erhebungsstelleKarteDTO.setTooltip(SucheMapper.createMessstelleTooltip(messstelle));

erhebungsstelleKarteDTOSet.add(erhebungsstelleKarteDTO);
}

return erhebungsstelleKarteDTOSet;
}

/**
* Holt die Suggestions passend zur Query.
*
Expand Down
108 changes: 108 additions & 0 deletions src/test/java/de/muenchen/dave/domain/mapper/SucheMapperTests.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
package de.muenchen.dave.domain.mapper;

import de.muenchen.dave.domain.dtos.ZaehlstelleKarteDTO;
import de.muenchen.dave.domain.dtos.ZaehlstelleTooltipDTO;
import de.muenchen.dave.domain.dtos.messstelle.MessstelleKarteDTO;
import de.muenchen.dave.domain.dtos.messstelle.MessstelleTooltipDTO;
import de.muenchen.dave.domain.elasticsearch.MessstelleRandomFactory;
import de.muenchen.dave.domain.elasticsearch.Zaehlstelle;
import de.muenchen.dave.domain.elasticsearch.ZaehlstelleRandomFactory;
import de.muenchen.dave.domain.elasticsearch.detektor.Messstelle;
import de.muenchen.dave.services.IndexServiceUtils;
import lombok.extern.slf4j.Slf4j;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;

@Slf4j
class SucheMapperTests {

private final SucheMapper mapper = new SucheMapperImpl();

@Test
void testMessstelleToMessstelleTooltipDTO() {
final Messstelle messstelle = MessstelleRandomFactory.getMessstelle();
final MessstelleTooltipDTO actual = mapper.messstelleToMessstelleTooltipDTO(messstelle);

final MessstelleTooltipDTO expected = new MessstelleTooltipDTO();
expected.setMstId(messstelle.getMstId());
expected.setStandort(messstelle.getStandort());
expected.setStadtbezirk(IndexServiceUtils.getStadtbezirkBezeichnung(messstelle.getStadtbezirkNummer()));
expected.setStadtbezirknummer(messstelle.getStadtbezirkNummer());
expected.setRealisierungsdatum(messstelle.getRealisierungsdatum().toString());
expected.setAbbaudatum(messstelle.getAbbaudatum().toString());
expected.setDatumLetztePlausibleMessung(messstelle.getDatumLetztePlausibleMessung().toString());
expected.setDetektierteVerkehrsarten(messstelle.getDetektierteVerkehrsarten());

Assertions.assertThat(actual)
.isNotNull()
.usingRecursiveComparison()
.isEqualTo(expected);
}

@Test
void testMessstelleToMessstelleKarteDTO() {
final Messstelle messstelle = MessstelleRandomFactory.getMessstelle();
final MessstelleKarteDTO actual = mapper.messstelleToMessstelleKarteDTO(messstelle);
final MessstelleKarteDTO expected = new MessstelleKarteDTO();
expected.setId(messstelle.getId());
expected.setFachId(messstelle.getMstId());
expected.setType("messstelle");
expected.setLongitude(messstelle.getPunkt().getLon());
expected.setLatitude(messstelle.getPunkt().getLat());
expected.setStatus(messstelle.getStatus());
expected.setSichtbarDatenportal(messstelle.getSichtbarDatenportal());

Assertions.assertThat(actual)
.isNotNull()
.usingRecursiveComparison()
.ignoringFields("tooltip")
.isEqualTo(expected);
}

@Test
void testZaehlstelleToZaehlstelleKarteDTO() {
final Zaehlstelle zaehlstelle = ZaehlstelleRandomFactory.getOne();
final ZaehlstelleKarteDTO actual = mapper.zaehlstelleToZaehlstelleKarteDTO(zaehlstelle);
final ZaehlstelleKarteDTO expected = new ZaehlstelleKarteDTO();
expected.setId(zaehlstelle.getId());
expected.setFachId(zaehlstelle.getNummer());
expected.setType("zaehlstelle");
expected.setLongitude(zaehlstelle.getPunkt().getLon());
expected.setLatitude(zaehlstelle.getPunkt().getLat());
expected.setSichtbarDatenportal(zaehlstelle.getSichtbarDatenportal());

Assertions.assertThat(actual)
.isNotNull()
.usingRecursiveComparison()
.ignoringFields("tooltip", "letzteZaehlungId", "zaehlartenKarte")
.isEqualTo(expected);

}

@Test
void testCreateZaehlstelleTooltip() {
final String stadtbezirk = "stadtbezirk";
final Integer stadtbezirknummer = 1;
final String nummer = "123456";
final Integer anzahlZaehlungen = 12;
final String datumLetzteZaehlung = "2024-02-16";
final String kreuzungsname = "kreuzungsname";
final ZaehlstelleTooltipDTO actual = mapper.createZaehlstelleTooltip(stadtbezirk, stadtbezirknummer, nummer, anzahlZaehlungen,
datumLetzteZaehlung, kreuzungsname);

final ZaehlstelleTooltipDTO expected = new ZaehlstelleTooltipDTO();
expected.setZaehlstellennnummer(nummer);
expected.setStadtbezirk(stadtbezirk);
expected.setStadtbezirknummer(stadtbezirknummer);
expected.setAnzahlZaehlungen(anzahlZaehlungen);
expected.setDatumLetzteZaehlung(datumLetzteZaehlung);
expected.setKreuzungsname(kreuzungsname);

Assertions.assertThat(actual)
.isNotNull()
.usingRecursiveComparison()
.isEqualTo(expected);

}

}
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public class SucheServiceTests {
null,
null,
null,
null);
null, null);

@Test
public void mapZaehlungenToZaehlartenKarte() {
Expand Down
Loading