| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- package com.tsystems.inwo.vgl.web;
- import com.fasterxml.jackson.databind.*;
- import com.tsystems.inwo.vgl.service.*;
- import com.tsystems.inwo.vgl.view.*;
- import com.tsystems.inwo.vgl.view.SharedRecords.*;
- import org.springframework.stereotype.Controller;
- import org.springframework.ui.Model;
- import org.springframework.web.bind.annotation.*;
- import org.springframework.http.ResponseEntity;
- import java.util.*;
- import java.util.stream.Collectors;
- @Controller
- @RequestMapping("/miete")
- public class MieteController {
- private final ObjectMapper om;
- private final SchemaValidationService validator;
- private final JsonNavigationService jsonNavigationService;
- private final DataComparisonService comparisonService;
- private final VergleichDataExtractor dataExtractor;
-
- public MieteController(ObjectMapper om, SchemaValidationService validator,
- JsonNavigationService jsonNavigationService,
- DataComparisonService comparisonService,
- VergleichDataExtractor dataExtractor) {
- this.om = om;
- this.validator = validator;
- this.jsonNavigationService = jsonNavigationService;
- this.comparisonService = comparisonService;
- this.dataExtractor = dataExtractor;
- }
- @PostMapping
- public String vergleich(
- @RequestParam String leftJson,
- @RequestParam String rightJson,
- @RequestParam(required = false, defaultValue = "true") boolean validate,
- @RequestParam(required = false, defaultValue = "miete") String schemaName,
- @RequestParam(required = false) String leftVorgangId,
- @RequestParam(required = false) String leftZeitraumId,
- @RequestParam(required = false) String rightZeitraumId,
- @RequestParam(required = false) String kunde,
- @RequestHeader(value = "X-Kunde", required = false) String kundeHeader,
- Model model) throws Exception {
- String activeKunde = resolveActiveKunde(kunde, kundeHeader);
- JsonNode left = om.readTree(leftJson);
- JsonNode right = om.readTree(rightJson);
- if (validate) {
- List<String> err = new ArrayList<>();
- err.addAll(validator.validate(left, schemaName));
- err.addAll(validator.validate(right, schemaName));
- if (!err.isEmpty()) {
- model.addAttribute("schemaErrors", err);
- model.addAttribute("leftJson", leftJson);
- model.addAttribute("rightJson", rightJson);
- model.addAttribute("validate", validate);
- model.addAttribute("schemaName", schemaName);
- return "test";
- }
- }
- // --- Rechts (Master) Zeitraum wählen ---
- List<Z> zeitrechte = jsonNavigationService.extractZeitraeume(right);
- if (zeitrechte.isEmpty()) throw new IllegalArgumentException("Right JSON hat keine Zeiträume");
- if (rightZeitraumId == null) rightZeitraumId = zeitrechte.get(0).id();
- JsonNode rightZeitraum = jsonNavigationService.findZeitraumById(right, rightZeitraumId);
- // --- Find the stammvorgang that contains the selected zeitraum ---
- JsonNode stammvorgangJsonNode = jsonNavigationService.findStammvorgangByZeitraumId(right, rightZeitraumId);
- StammvorgangInfo stammvorgangRight = jsonNavigationService.createStammvorgangInfo(stammvorgangJsonNode);
- // --- Extract stammakte info if available ---
- StammakteInfo stammakteRight = jsonNavigationService.extractStammakteInfo(right);
- // --- Links (Baseline) Kandidaten & Auswahl ---
- List<Vorgang> leftCand = jsonNavigationService.parseLeftCandidates(left);
- List<Z> leftZ = List.of();
- JsonNode leftZeitraum = null;
- if (!leftCand.isEmpty()) {
- if (leftVorgangId == null) leftVorgangId = leftCand.get(0).id();
- final String finalLeftVorgangId = leftVorgangId;
- leftZ = leftCand.stream().filter(v -> v.id().equals(finalLeftVorgangId)).findFirst().orElse(leftCand.get(0)).zeitraeume();
- if (leftZeitraumId == null && !leftZ.isEmpty()) leftZeitraumId = leftZ.get(0).id();
- if (leftZeitraumId != null) leftZeitraum = jsonNavigationService.findZeitraumById(jsonNavigationService.getRootOfVorgang(left, leftVorgangId), leftZeitraumId);
- }
- // --- Model füllen & rendern ---
- model.addAttribute("leftJson", leftJson);
- model.addAttribute("rightJson", rightJson);
- model.addAttribute("validate", validate);
- model.addAttribute("schemaName", schemaName);
- model.addAttribute("leftCandidates", leftCand);
- model.addAttribute("leftZeitraeumeOfSelected", leftZ);
- model.addAttribute("leftVorgangId", leftVorgangId);
- model.addAttribute("leftZeitraumId", leftZeitraumId);
- model.addAttribute("zeitraeumeRight", zeitrechte);
- model.addAttribute("rightZeitraumId", rightZeitraumId);
- model.addAttribute("stammvorgangRight", stammvorgangRight);
- model.addAttribute("stammakteRight", stammakteRight);
- model.addAttribute("activeKunde", activeKunde);
- return "miete";
- }
- // ===== Private Helper Methods =====
-
- private String resolveActiveKunde(String kunde, String kundeHeader) {
- return kunde != null ? kunde : kundeHeader;
- }
- }
|