From ec99db02e969db5a15e5f662b67a80592b8a8f67 Mon Sep 17 00:00:00 2001 From: DanielOber <145556033+DanielOber@users.noreply.github.com> Date: Tue, 26 Mar 2024 10:31:40 +0100 Subject: [PATCH] Feat/dave 88 kfz detektordaten auswertung belastungsplan (#95) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * belastungsplan hinzugefügt * alle anzeigen statisch hinzugefügt * unnötige komponente entfernt * leserlichkeit verbessert * belastungsplan statisch fertig, dyamische werte fehlen * computed variablen hinzugefügt * variable werte eingefügt * alle zahlen werden dymaisch ausgefüllt * größe und schriftpositionen korrekt anzeigen * auslagerung funktionalität in composable * anzeige reihenfolge angepasst * anpassungen position * funktion für texte hinzugefügt * funktion für texte für die pfeile nach süden hinzugefügt * vereinheitlichung der textanzeige * texte durch funktion ersetzt * file umstrukturiert * strokeSize angepasst, texte angepasst * dyamische anzeige fertig, radverkehr fehlt * rad Daten hinzugefügt * umbennenung files * review eingearbeitet --- frontend/components.d.ts | 1 + .../src/api/service/LadeMessdatenService.ts | 3 +- .../BelastungsplanMessquerschnittCard.vue | 601 ++++++++++++++++++ .../messstelle/charts/MessstelleDiagramme.vue | 24 +- .../composable/belastungsplanAnzeigeUtils.ts | 64 ++ ...ungsoptionenPanelBelastungsplanContent.vue | 22 +- .../store/modules/filteroptionsMessstelle.ts | 32 + .../BelastungsplanMessquerschnitteDTO.ts | 14 + ...LadeBelastungsplanMessqueschnittDataDTO.ts | 17 + .../messstelle/LadeProcessedMessdatenDTO.ts | 14 + frontend/src/views/MessstelleView.vue | 5 +- 11 files changed, 775 insertions(+), 22 deletions(-) create mode 100644 frontend/src/components/messstelle/charts/BelastungsplanMessquerschnittCard.vue create mode 100644 frontend/src/components/messstelle/optionsmenue/composable/belastungsplanAnzeigeUtils.ts create mode 100644 frontend/src/types/messstelle/BelastungsplanMessquerschnitteDTO.ts create mode 100644 frontend/src/types/messstelle/LadeBelastungsplanMessqueschnittDataDTO.ts create mode 100644 frontend/src/types/messstelle/LadeProcessedMessdatenDTO.ts diff --git a/frontend/components.d.ts b/frontend/components.d.ts index bf608316..1587252f 100644 --- a/frontend/components.d.ts +++ b/frontend/components.d.ts @@ -25,6 +25,7 @@ declare module '@vue/runtime-core' { BelastungsplanKreisverkehr: typeof import('./src/components/zaehlstelle/charts/BelastungsplanKreisverkehr.vue')['default'] BelastungsplanKreuzungSvg: typeof import('./src/components/zaehlstelle/charts/BelastungsplanKreuzungSvg.vue')['default'] BelastungsplanKreuzungSvgSchematischeUebersicht: typeof import('./src/components/zaehlstelle/charts/BelastungsplanKreuzungSvgSchematischeUebersicht.vue')['default'] + BelastungsplanMessquerschnittCard: typeof import('./src/components/messstelle/charts/BelastungsplanMessquerschnittCard.vue')['default'] DarstellungsoptionenPanel: typeof import('./src/components/zaehlstelle/optionsmenue/panels/DarstellungsoptionenPanel.vue')['default'] DarstellungsoptionenPanelBelastungsplanContent: typeof import('./src/components/messstelle/optionsmenue/panels/content/DarstellungsoptionenPanelBelastungsplanContent.vue')['default'] DarstellungsoptionenPanelGanglinieContent: typeof import('./src/components/messstelle/optionsmenue/panels/content/DarstellungsoptionenPanelGanglinieContent.vue')['default'] diff --git a/frontend/src/api/service/LadeMessdatenService.ts b/frontend/src/api/service/LadeMessdatenService.ts index 5a92b74c..869cee98 100644 --- a/frontend/src/api/service/LadeMessdatenService.ts +++ b/frontend/src/api/service/LadeMessdatenService.ts @@ -1,6 +1,7 @@ import FetchService from "@/api/service/FetchService"; import LadeProcessedZaehldatenDTO from "@/types/zaehlung/zaehldaten/LadeProcessedZaehldatenDTO"; import MessstelleOptionsDTO from "@/types/messstelle/MessstelleOptionsDTO"; +import LadeProcessedMessdatenDTO from "@/types/messstelle/LadeProcessedMessdatenDTO"; export default class LadeMessdatenService { private static readonly ENDPOINT_LADE_MESSDATEN_PROCESSED: string = @@ -9,7 +10,7 @@ export default class LadeMessdatenService { public static ladeMessdatenProcessed( messstelleId: string, options: MessstelleOptionsDTO - ): Promise { + ): Promise { return FetchService.postData( options, `${this.ENDPOINT_LADE_MESSDATEN_PROCESSED}?messstelle_id=${messstelleId}`, diff --git a/frontend/src/components/messstelle/charts/BelastungsplanMessquerschnittCard.vue b/frontend/src/components/messstelle/charts/BelastungsplanMessquerschnittCard.vue new file mode 100644 index 00000000..3aa4daa6 --- /dev/null +++ b/frontend/src/components/messstelle/charts/BelastungsplanMessquerschnittCard.vue @@ -0,0 +1,601 @@ + + + + \ No newline at end of file diff --git a/frontend/src/components/messstelle/charts/MessstelleDiagramme.vue b/frontend/src/components/messstelle/charts/MessstelleDiagramme.vue index 5055e2e8..9e6f4303 100644 --- a/frontend/src/components/messstelle/charts/MessstelleDiagramme.vue +++ b/frontend/src/components/messstelle/charts/MessstelleDiagramme.vue @@ -41,17 +41,17 @@ - - - mdi-account-hard-hat-outline - Under Construction - mdi-car-wrench - - + @@ -130,7 +130,7 @@ import StepLineCard from "@/components/zaehlstelle/charts/StepLineCard.vue"; import HeatmapCard from "@/components/zaehlstelle/charts/HeatmapCard.vue"; import ZeitreiheCard from "@/components/zaehlstelle/charts/ZeitreiheCard.vue"; import LadeMessdatenService from "@/api/service/LadeMessdatenService"; -import LadeProcessedZaehldatenDTO from "@/types/zaehlung/zaehldaten/LadeProcessedZaehldatenDTO"; +import LadeProcessedMessdatenDTO from "@/types/messstelle/LadeProcessedMessdatenDTO"; import Loader from "@/components/common/Loader.vue"; import { useStore } from "@/api/util/useStore"; import { useRoute } from "vue-router/composables"; @@ -139,6 +139,8 @@ import { useReportTools } from "@/util/reportTools"; import LadeZaehldatenHeatmapDTO from "@/types/zaehlung/zaehldaten/LadeZaehldatenHeatmapDTO"; import LadeZaehldatumDTO from "@/types/zaehlung/zaehldaten/LadeZaehldatumDTO"; import MesswerteListenausgabe from "@/components/messstelle/charts/MesswerteListenausgabe.vue"; +import BelastungsplanMessquerschnitteDTO from "@/types/messstelle/BelastungsplanMessquerschnitteDTO"; +import BelastungsplanMessquerschnittCard from "@/components/messstelle/charts/BelastungsplanMessquerschnittCard.vue"; import MessstelleHistoryItem from "@/types/app/MessstelleHistoryItem"; import MessstelleInfoDTO from "@/types/messstelle/MessstelleInfoDTO"; import MessstelleOptionsDTO from "@/types/messstelle/MessstelleOptionsDTO"; @@ -167,6 +169,8 @@ const zaehldatenHeatmapDTO: Ref = ref( const listenausgabeDTO: Ref> = ref([]); +const belastungsplanDataDTO = ref({} as BelastungsplanMessquerschnitteDTO); + // Wieder entfernen, wenn alle Tabs fertig sind const showSpeedial: Ref = ref(false); @@ -221,12 +225,14 @@ function loadProcessedChartData() { messstelleId.value, options.value ) - .then((processedZaehldaten: LadeProcessedZaehldatenDTO) => { + .then((processedZaehldaten: LadeProcessedMessdatenDTO) => { zaehldatenSteplineDTO.value = processedZaehldaten.zaehldatenStepline; zaehldatenHeatmapDTO.value = processedZaehldaten.zaehldatenHeatmap; listenausgabeDTO.value = processedZaehldaten.zaehldatenTable.zaehldaten; + belastungsplanDataDTO.value = + processedZaehldaten.listBelastungsplanMessquerschnitteDTO; setMaxRangeYAchse(); }) .finally(() => { diff --git a/frontend/src/components/messstelle/optionsmenue/composable/belastungsplanAnzeigeUtils.ts b/frontend/src/components/messstelle/optionsmenue/composable/belastungsplanAnzeigeUtils.ts new file mode 100644 index 00000000..8fd3ee1e --- /dev/null +++ b/frontend/src/components/messstelle/optionsmenue/composable/belastungsplanAnzeigeUtils.ts @@ -0,0 +1,64 @@ +import { useStore } from "@/api/util/useStore"; +import { computed } from "vue"; + +export function belastungsplanAnzeigeUtils() { + const store = useStore(); + + const chosenOptionsCopy = computed(() => { + return store.getters["filteroptionsMessstelle/getFilteroptions"]; + }); + + const chosenOptionsCopyFahrzeuge = computed(() => { + return chosenOptionsCopy.value.fahrzeuge; + }); + + const isSv_pInBelastungsPlan = computed(() => { + let actualNumberOfSelectedKfzSvAndGv = 0; + if (chosenOptionsCopyFahrzeuge.value.kraftfahrzeugverkehr) { + actualNumberOfSelectedKfzSvAndGv++; + } + if (chosenOptionsCopyFahrzeuge.value.schwerverkehr) { + actualNumberOfSelectedKfzSvAndGv++; + } + if (chosenOptionsCopyFahrzeuge.value.gueterverkehr) { + actualNumberOfSelectedKfzSvAndGv++; + } + return ( + chosenOptionsCopyFahrzeuge.value.schwerverkehrsanteilProzent && + (chosenOptionsCopyFahrzeuge.value.kraftfahrzeugverkehr || + chosenOptionsCopyFahrzeuge.value.schwerverkehr || + chosenOptionsCopyFahrzeuge.value.gueterverkehr) && + actualNumberOfSelectedKfzSvAndGv < 3 + ); + }); + + /** + * Hilfsmethode, um zu schauen, ob der Wert GV% im Belastungsplan angezeigt wird. + * Dies ist nur der Fall, wenn KFZ, SV oder GV aktiviert sind und inklusive GV_P nicht + * mehr wie 3 Verkehrsarten (ohne RAD und FUSS) ausgewählt sind + */ + const isGv_pInBelastungsPlan = computed(() => { + let actualNumberOfSelectedKfzSvGvAndSV_P = 0; + if (chosenOptionsCopyFahrzeuge.value.kraftfahrzeugverkehr) { + actualNumberOfSelectedKfzSvGvAndSV_P++; + } + if (chosenOptionsCopyFahrzeuge.value.schwerverkehr) { + actualNumberOfSelectedKfzSvGvAndSV_P++; + } + if (chosenOptionsCopyFahrzeuge.value.gueterverkehr) { + actualNumberOfSelectedKfzSvGvAndSV_P++; + } + if (chosenOptionsCopyFahrzeuge.value.schwerverkehrsanteilProzent) { + actualNumberOfSelectedKfzSvGvAndSV_P++; + } + return ( + chosenOptionsCopyFahrzeuge.value.gueterverkehrsanteilProzent && + (chosenOptionsCopyFahrzeuge.value.kraftfahrzeugverkehr || + chosenOptionsCopyFahrzeuge.value.schwerverkehr || + chosenOptionsCopyFahrzeuge.value.gueterverkehr) && + actualNumberOfSelectedKfzSvGvAndSV_P < 3 + ); + }); + + return { isGv_pInBelastungsPlan, isSv_pInBelastungsPlan }; +} diff --git a/frontend/src/components/messstelle/optionsmenue/panels/content/DarstellungsoptionenPanelBelastungsplanContent.vue b/frontend/src/components/messstelle/optionsmenue/panels/content/DarstellungsoptionenPanelBelastungsplanContent.vue index e09fea3c..0fa73bdb 100644 --- a/frontend/src/components/messstelle/optionsmenue/panels/content/DarstellungsoptionenPanelBelastungsplanContent.vue +++ b/frontend/src/components/messstelle/optionsmenue/panels/content/DarstellungsoptionenPanelBelastungsplanContent.vue @@ -26,8 +26,8 @@ @@ -70,7 +70,15 @@ const store = useStore(); const hoverWerteHundertRunden = ref(false); const hoverSizeBelastungsplan = ref(false); const hoverBlackPrintMode = ref(false); -const sizeBelastungsplan = ref(0); +const sizeBelastungsplan = computed({ + get: () => + store.getters["filteroptionsMessstelle/getBelastungsplanChosenSize"], + set: (payload: number) => + store.commit( + "filteroptionsMessstelle/setBelastungsplanChosenSize", + payload + ), +}); const chosenOptionsCopy = computed({ get: () => props.value, @@ -93,12 +101,4 @@ const helpTextBelastungsplan = computed(() => { watch(sizeBelastungsplan, () => { store.dispatch("setSizeBelastungsplanSvg", sizeBelastungsplan.value); }); - -const maxSizeBelastungsplanSvg = computed(() => { - return store.getters.getMaxSizeBelastungsplanSvg; -}); - -const minSizeBelastungsplanSvg = computed(() => { - return store.getters.getMinSizeBelastungsplanSvg; -}); diff --git a/frontend/src/store/modules/filteroptionsMessstelle.ts b/frontend/src/store/modules/filteroptionsMessstelle.ts index be0ba6f8..98808d60 100644 --- a/frontend/src/store/modules/filteroptionsMessstelle.ts +++ b/frontend/src/store/modules/filteroptionsMessstelle.ts @@ -7,6 +7,9 @@ export interface FilteroptionsMessstelle { messstelleFilterOptions: MessstelleOptionsDTO; direction: string; history: boolean; + belastungsplanMinSize: string; + belastungsplanMaxSize: string; + belastungsplanChosenSize: number; } export default { namespaced: true, @@ -29,6 +32,8 @@ export default { werteHundertRunden: false, } as MessstelleOptionsDTO, direction: "", + belastungsplanMinSize: "", + belastungsplanChosenSize: 1, history: false, }, getters: { @@ -41,6 +46,15 @@ export default { isHistory(state: FilteroptionsMessstelle): boolean { return state.history; }, + getBelastungsplanMinSize(state: FilteroptionsMessstelle): string { + return state.belastungsplanMinSize; + }, + getBelastungsplanMaxSize(state: FilteroptionsMessstelle): string { + return state.belastungsplanMinSize; + }, + getBelastungsplanChosenSize(state: FilteroptionsMessstelle): number { + return state.belastungsplanChosenSize; + }, }, mutations: { setFilteroptions( @@ -66,5 +80,23 @@ export default { state.messstelleFilterOptions ); }, + setBelastungsplanMinSize( + state: FilteroptionsMessstelle, + payload: string + ) { + state.belastungsplanMinSize = payload; + }, + setBelastungsplanMaxSize( + state: FilteroptionsMessstelle, + payload: string + ) { + state.belastungsplanMinSize = payload; + }, + setBelastungsplanChosenSize( + state: FilteroptionsMessstelle, + payload: number + ) { + state.belastungsplanChosenSize = payload; + }, }, }; diff --git a/frontend/src/types/messstelle/BelastungsplanMessquerschnitteDTO.ts b/frontend/src/types/messstelle/BelastungsplanMessquerschnitteDTO.ts new file mode 100644 index 00000000..781b65c9 --- /dev/null +++ b/frontend/src/types/messstelle/BelastungsplanMessquerschnitteDTO.ts @@ -0,0 +1,14 @@ +import LadeBelastungsplanMessqueschnittDataDTO from "./LadeBelastungsplanMessqueschnittDataDTO"; + +export default interface BelastungsplanMessquerschnitteDTO { + ladeBelastungsplanMessquerschnittDataDTOList: LadeBelastungsplanMessqueschnittDataDTO[]; + strassenname: string; + stadtbezirkNummer: string; + mstId: string; + totalKfz: number; + totalSv: number; + totalGv: number; + totalRad: number; + totalPercentSv: number; + totalPercentGv: number; +} diff --git a/frontend/src/types/messstelle/LadeBelastungsplanMessqueschnittDataDTO.ts b/frontend/src/types/messstelle/LadeBelastungsplanMessqueschnittDataDTO.ts new file mode 100644 index 00000000..4ba4a263 --- /dev/null +++ b/frontend/src/types/messstelle/LadeBelastungsplanMessqueschnittDataDTO.ts @@ -0,0 +1,17 @@ +export default interface LadeBelastungsplanMessqueschnittDataDTO { + mqId: string; + + sumKfz: number; + + sumSv: number; + + sumGv: number; + + sumRad: number; + + direction: string; + + percentSv: number; + + percentGV: number; +} \ No newline at end of file diff --git a/frontend/src/types/messstelle/LadeProcessedMessdatenDTO.ts b/frontend/src/types/messstelle/LadeProcessedMessdatenDTO.ts new file mode 100644 index 00000000..3b9b4651 --- /dev/null +++ b/frontend/src/types/messstelle/LadeProcessedMessdatenDTO.ts @@ -0,0 +1,14 @@ +import LadeZaehldatenTableDTO from "@/types/zaehlung/zaehldaten/LadeZaehldatenTableDTO"; +import LadeZaehldatenSteplineDTO from "@/types/zaehlung/zaehldaten/LadeZaehldatenSteplineDTO"; +import LadeZaehldatenHeatmapDTO from "@/types/zaehlung/zaehldaten/LadeZaehldatenHeatmapDTO"; +import BelastungsplanMessquerschnitteDTO from "@/types/messstelle/BelastungsplanMessquerschnitteDTO"; + +export default interface LadeProcessedMessdatenDTO { + zaehldatenTable: LadeZaehldatenTableDTO; + + zaehldatenStepline: LadeZaehldatenSteplineDTO; + + zaehldatenHeatmap: LadeZaehldatenHeatmapDTO; + + belastungsplanMessquerschnitte: BelastungsplanMessquerschnitteDTO; +} diff --git a/frontend/src/views/MessstelleView.vue b/frontend/src/views/MessstelleView.vue index 9db78ab6..21321050 100644 --- a/frontend/src/views/MessstelleView.vue +++ b/frontend/src/views/MessstelleView.vue @@ -51,7 +51,7 @@