CockpitFacilityGeometryController.java 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package com.zksy.web.controller.cockpit;
  2. import com.zksy.cockpit.foundation.CockpitErrorCategory;
  3. import com.zksy.cockpit.foundation.CockpitErrorPayload;
  4. import com.zksy.cockpit.geometry.CockpitFacilityGeometryService;
  5. import com.zksy.common.core.domain.AjaxResult;
  6. import com.zksy.common.utils.uuid.IdUtils;
  7. import org.springframework.http.HttpStatus;
  8. import org.springframework.http.ResponseEntity;
  9. import org.springframework.web.bind.annotation.ExceptionHandler;
  10. import org.springframework.web.bind.annotation.GetMapping;
  11. import org.springframework.web.bind.annotation.RestController;
  12. import javax.servlet.http.HttpServletRequest;
  13. import java.time.Clock;
  14. import java.time.ZoneId;
  15. import java.time.format.DateTimeFormatter;
  16. @RestController
  17. public class CockpitFacilityGeometryController {
  18. private final CockpitFacilityGeometryService service;
  19. private final Clock clock;
  20. public CockpitFacilityGeometryController(CockpitFacilityGeometryService service, Clock clock) {
  21. this.service = service;
  22. this.clock = clock;
  23. }
  24. @GetMapping("/api/cockpit/v1/infrastructure/geometry")
  25. public ResponseEntity<AjaxResult> geometry() {
  26. return ResponseEntity.ok(AjaxResult.success(service.load()));
  27. }
  28. @ExceptionHandler(RuntimeException.class)
  29. public ResponseEntity<AjaxResult> handleReadFailure(HttpServletRequest request, RuntimeException exception) {
  30. // Includes transaction begin/commit failures thrown outside service.load()'s body.
  31. org.slf4j.LoggerFactory.getLogger(CockpitFacilityGeometryController.class)
  32. .error("Facility geometry read failed", exception);
  33. String requestId = request.getHeader("X-Request-Id");
  34. if (requestId == null || requestId.trim().isEmpty()) {
  35. requestId = IdUtils.fastSimpleUUID();
  36. }
  37. CockpitErrorPayload payload = new CockpitErrorPayload(CockpitErrorCategory.SERVER_ERROR,
  38. "facility geometry source unavailable", requestId,
  39. DateTimeFormatter.ISO_OFFSET_DATE_TIME.format(clock.instant().atZone(ZoneId.of("Asia/Shanghai"))));
  40. return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
  41. .body(new AjaxResult(500, payload.getMessage(), payload));
  42. }
  43. }