MieteController.java 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. package com.tsystems.inwo.vgl.web;
  2. import com.fasterxml.jackson.databind.*;
  3. import com.tsystems.inwo.vgl.service.*;
  4. import com.tsystems.inwo.vgl.view.*;
  5. import com.tsystems.inwo.vgl.view.SharedRecords.*;
  6. import org.springframework.stereotype.Controller;
  7. import org.springframework.ui.Model;
  8. import org.springframework.web.bind.annotation.*;
  9. import org.springframework.http.ResponseEntity;
  10. import java.util.*;
  11. import java.util.stream.Collectors;
  12. @Controller
  13. @RequestMapping("/miete")
  14. public class MieteController {
  15. private final ObjectMapper om;
  16. private final SchemaValidationService validator;
  17. private final JsonNavigationService jsonNavigationService;
  18. private final DataComparisonService comparisonService;
  19. private final VergleichDataExtractor dataExtractor;
  20. public MieteController(ObjectMapper om, SchemaValidationService validator,
  21. JsonNavigationService jsonNavigationService,
  22. DataComparisonService comparisonService,
  23. VergleichDataExtractor dataExtractor) {
  24. this.om = om;
  25. this.validator = validator;
  26. this.jsonNavigationService = jsonNavigationService;
  27. this.comparisonService = comparisonService;
  28. this.dataExtractor = dataExtractor;
  29. }
  30. @PostMapping
  31. public String vergleich(
  32. @RequestParam String leftJson,
  33. @RequestParam String rightJson,
  34. @RequestParam(required = false, defaultValue = "true") boolean validate,
  35. @RequestParam(required = false, defaultValue = "miete") String schemaName,
  36. @RequestParam(required = false) String leftVorgangId,
  37. @RequestParam(required = false) String leftZeitraumId,
  38. @RequestParam(required = false) String rightZeitraumId,
  39. @RequestParam(required = false) String kunde,
  40. @RequestHeader(value = "X-Kunde", required = false) String kundeHeader,
  41. Model model) throws Exception {
  42. String activeKunde = resolveActiveKunde(kunde, kundeHeader);
  43. JsonNode left = om.readTree(leftJson);
  44. JsonNode right = om.readTree(rightJson);
  45. if (validate) {
  46. List<String> err = new ArrayList<>();
  47. err.addAll(validator.validate(left, schemaName));
  48. err.addAll(validator.validate(right, schemaName));
  49. if (!err.isEmpty()) {
  50. model.addAttribute("schemaErrors", err);
  51. model.addAttribute("leftJson", leftJson);
  52. model.addAttribute("rightJson", rightJson);
  53. model.addAttribute("validate", validate);
  54. model.addAttribute("schemaName", schemaName);
  55. return "test";
  56. }
  57. }
  58. // --- Rechts (Master) Zeitraum wählen ---
  59. List<Z> zeitrechte = jsonNavigationService.extractZeitraeume(right);
  60. if (zeitrechte.isEmpty()) throw new IllegalArgumentException("Right JSON hat keine Zeiträume");
  61. if (rightZeitraumId == null) rightZeitraumId = zeitrechte.get(0).id();
  62. JsonNode rightZeitraum = jsonNavigationService.findZeitraumById(right, rightZeitraumId);
  63. // --- Find the stammvorgang that contains the selected zeitraum ---
  64. JsonNode stammvorgangJsonNode = jsonNavigationService.findStammvorgangByZeitraumId(right, rightZeitraumId);
  65. StammvorgangInfo stammvorgangRight = jsonNavigationService.createStammvorgangInfo(stammvorgangJsonNode);
  66. // --- Extract stammakte info if available ---
  67. StammakteInfo stammakteRight = jsonNavigationService.extractStammakteInfo(right);
  68. // --- Links (Baseline) Kandidaten & Auswahl ---
  69. List<Vorgang> leftCand = jsonNavigationService.parseLeftCandidates(left);
  70. List<Z> leftZ = List.of();
  71. JsonNode leftZeitraum = null;
  72. if (!leftCand.isEmpty()) {
  73. if (leftVorgangId == null) leftVorgangId = leftCand.get(0).id();
  74. final String finalLeftVorgangId = leftVorgangId;
  75. leftZ = leftCand.stream().filter(v -> v.id().equals(finalLeftVorgangId)).findFirst().orElse(leftCand.get(0)).zeitraeume();
  76. if (leftZeitraumId == null && !leftZ.isEmpty()) leftZeitraumId = leftZ.get(0).id();
  77. if (leftZeitraumId != null) leftZeitraum = jsonNavigationService.findZeitraumById(jsonNavigationService.getRootOfVorgang(left, leftVorgangId), leftZeitraumId);
  78. }
  79. // --- Model füllen & rendern ---
  80. model.addAttribute("leftJson", leftJson);
  81. model.addAttribute("rightJson", rightJson);
  82. model.addAttribute("validate", validate);
  83. model.addAttribute("schemaName", schemaName);
  84. model.addAttribute("leftCandidates", leftCand);
  85. model.addAttribute("leftZeitraeumeOfSelected", leftZ);
  86. model.addAttribute("leftVorgangId", leftVorgangId);
  87. model.addAttribute("leftZeitraumId", leftZeitraumId);
  88. model.addAttribute("zeitraeumeRight", zeitrechte);
  89. model.addAttribute("rightZeitraumId", rightZeitraumId);
  90. model.addAttribute("stammvorgangRight", stammvorgangRight);
  91. model.addAttribute("stammakteRight", stammakteRight);
  92. model.addAttribute("activeKunde", activeKunde);
  93. return "miete";
  94. }
  95. // ===== Private Helper Methods =====
  96. private String resolveActiveKunde(String kunde, String kundeHeader) {
  97. return kunde != null ? kunde : kundeHeader;
  98. }
  99. }