diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/BeanConfiguration.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/BeanConfiguration.java index 0a228687e..1b160dcda 100644 --- a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/BeanConfiguration.java +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/BeanConfiguration.java @@ -7,6 +7,7 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Scope; import ru.spcex.clearing.gatewayapi.controller.inbound.request.operations.SentAsset; +import ru.spcex.clearing.gatewayapi.controller.outbound.request.OutboundRequest; import ru.spcex.clearing.gatewayapi.errors.GatewayError; import ru.spcex.clearing.util.security.UserRoleVerification; import ru.spcex.clearing.util.services.IMDGMessageResolver; @@ -16,6 +17,7 @@ import ru.spcex.platform.utils.enumeration.IMessageResolver; import java.util.List; import java.util.Map; +import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -50,5 +52,8 @@ public class BeanConfiguration { .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); } - + @Bean + public Map outboundRequestByUuid(){ + return new ConcurrentHashMap<>(); + } } diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/RestTemplateErrorHandler.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/RestTemplateErrorHandler.java index 76df0fb33..be9e81df9 100644 --- a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/RestTemplateErrorHandler.java +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/RestTemplateErrorHandler.java @@ -8,26 +8,35 @@ import org.springframework.http.client.ClientHttpResponse; import org.springframework.stereotype.Component; import org.springframework.util.StreamUtils; import org.springframework.web.client.ResponseErrorHandler; +import ru.spcex.clearing.gatewayapi.controller.outbound.request.OutboundRequest; import ru.spcex.clearing.gatewayapi.controller.outbound.response.ErrorResponse; +import ru.spcex.clearing.gatewayapi.enums.OutboundRequestType; import ru.spcex.clearing.platform.messaging.domain.Consts; import ru.spcex.clearing.platform.messaging.domain.cud.utilities.NotificationNewRequest; import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender; import ru.spcex.platform.enumeration.ObjectType; import ru.spcex.platform.enumeration.Priority; +import ru.spcex.platform.enumeration.Section; +import ru.spcex.platform.utils.enumeration.IEnumKey; import java.io.IOException; import java.nio.charset.Charset; +import java.util.Map; +import java.util.UUID; @Component public class RestTemplateErrorHandler implements ResponseErrorHandler { private final Logger log = LoggerFactory.getLogger(getClass()); private final KafkaSender kafaSender; private final ObjectMapper objectMapper; + private final Map outboundRequestByUuid; public RestTemplateErrorHandler(KafkaSender kafaSender, - ObjectMapper objectMapper) { + ObjectMapper objectMapper, + Map outboundRequestByUuid) { this.kafaSender = kafaSender; this.objectMapper = objectMapper; + this.outboundRequestByUuid = outboundRequestByUuid; } @Override @@ -46,7 +55,8 @@ public class RestTemplateErrorHandler implements ResponseErrorHandler { String error = (String) errorResponse.getUnknownProperties().get("error"); errorMessage = String.format("Error: %s", error); } else { - errorMessage = errorResponse.getMessage(); + OutboundRequest outboundRequest = outboundRequestByUuid.remove(errorResponse.getId()); + errorMessage = makeMessage(outboundRequest, errorResponse); } NotificationNewRequest notificationNewRequest = createNotification(errorMessage); kafaSender.sendRequestToQueue(Consts.NOTIFICATION_NEW, notificationNewRequest); @@ -59,4 +69,26 @@ public class RestTemplateErrorHandler implements ResponseErrorHandler { request.setComment(String.format("Ошибка : %s", message)); return request; } + + private String makeMessage(OutboundRequest outboundRequest, ErrorResponse response) { + OutboundRequestType outboundRequestType = IEnumKey.getEnumByKey(OutboundRequestType.class, outboundRequest.getType()); + Section section = IEnumKey.getEnumByKey(Section.class, outboundRequest.getSection()); + String prefix = "Неизвестный тип ошибки"; + if (outboundRequestType == null) { + return response.getMessage(); + } + switch (outboundRequestType) { + case MEMBER_ON_DEMAND -> prefix = "Ошибка загрузки участников"; + case ON_DEMAND -> { + if (Section.MKR == section) { + prefix = "Ошибка загрузки инструментов"; + } else { + prefix = "Ошибка загрузки биржевых инструментов"; + } + } + case FILL_LIMITS -> prefix = "Ошибка выгрузки лимитов"; + case ASSET_OPERATION -> prefix = "Ошибка при списании/зачислении"; + } + return String.format("%s: %s", prefix, response.getMessage()); + } } diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/service/GatewayService.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/service/GatewayService.java index 1d6c33550..a66b13033 100644 --- a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/service/GatewayService.java +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/service/GatewayService.java @@ -38,20 +38,22 @@ public class GatewayService extends QueueConsumer implements InitializingBean { private final UserRoleVerification userRoleVerification; private final RestTemplate restTemplate; private final InboundServerSettings inboundServerSettings; - private final Map> sentAssets; + private final Map outboundRequestByUuid; public GatewayService(Consumer kafkaQueue, Producer kafkaProducer, RestTemplate restTemplate, UserRoleVerification userRoleVerification, GatewayApiSettings gatewayApiSettings, - @Qualifier("sentAssets") Map> sentAssets) { + @Qualifier("sentAssets") Map> sentAssets, + Map outboundRequestByUuid) { super(kafkaQueue, kafkaProducer); this.restTemplate = restTemplate; this.userRoleVerification = userRoleVerification; this.inboundServerSettings = gatewayApiSettings.getInboundServer(); this.sentAssets = sentAssets; + this.outboundRequestByUuid = outboundRequestByUuid; } @Override @@ -86,6 +88,7 @@ public class GatewayService extends QueueConsumer implements InitializingBean { .build(); HttpEntity request = makeDefaultRequest(outboundFondRequest); + outboundRequestByUuid.put(outboundFondRequest.getId(), outboundFondRequest); ResponseEntity response = restTemplate.exchange(url, HttpMethod.POST, request, SuccessResponse.class); SuccessResponse bodyResponse = response.getBody(); if (bodyResponse != null) { @@ -106,6 +109,7 @@ public class GatewayService extends QueueConsumer implements InitializingBean { .build(); HttpEntity request = makeDefaultRequest(outboundFondRequest); + outboundRequestByUuid.put(outboundFondRequest.getId(), outboundFondRequest); ResponseEntity response = restTemplate.exchange(url, HttpMethod.POST, request, SuccessResponse.class); SuccessResponse bodyResponse = response.getBody(); if (bodyResponse != null) { @@ -136,6 +140,8 @@ public class GatewayService extends QueueConsumer implements InitializingBean { HttpEntity requestFond = makeDefaultRequest(outboundFondRequest); HttpEntity requestMKR = makeDefaultRequest(outboundMkrRequest); + outboundRequestByUuid.put(outboundFondRequest.getId(), outboundFondRequest); + outboundRequestByUuid.put(outboundMkrRequest.getId(), outboundMkrRequest); ResponseEntity response = restTemplate.exchange(url, HttpMethod.POST, requestFond, SuccessResponse.class); SuccessResponse bodyResponse = response.getBody(); if (bodyResponse != null) { @@ -173,6 +179,7 @@ public class GatewayService extends QueueConsumer implements InitializingBean { String url = formingInboundUrl(inboundServerSettings.getPathLOCM()); HttpEntity r = makeDefaultRequest(outboundRequest); try { + outboundRequestByUuid.put(outboundRequest.getId(), outboundRequest); ResponseEntity response = restTemplate.exchange(url, HttpMethod.POST, r, SuccessResponse.class); SuccessResponse bodyResponse = response.getBody(); if (bodyResponse != null) {