This commit is contained in:
parent
563e7f47c4
commit
db24212cc6
3 changed files with 49 additions and 5 deletions
|
|
@ -7,6 +7,7 @@ import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.context.annotation.Scope;
|
import org.springframework.context.annotation.Scope;
|
||||||
import ru.spcex.clearing.gatewayapi.controller.inbound.request.operations.SentAsset;
|
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.gatewayapi.errors.GatewayError;
|
||||||
import ru.spcex.clearing.util.security.UserRoleVerification;
|
import ru.spcex.clearing.util.security.UserRoleVerification;
|
||||||
import ru.spcex.clearing.util.services.IMDGMessageResolver;
|
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.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.UUID;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.ExecutorService;
|
import java.util.concurrent.ExecutorService;
|
||||||
import java.util.concurrent.Executors;
|
import java.util.concurrent.Executors;
|
||||||
|
|
@ -50,5 +52,8 @@ public class BeanConfiguration {
|
||||||
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
|
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public Map<UUID, OutboundRequest> outboundRequestByUuid(){
|
||||||
|
return new ConcurrentHashMap<>();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,26 +8,35 @@ import org.springframework.http.client.ClientHttpResponse;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import org.springframework.util.StreamUtils;
|
import org.springframework.util.StreamUtils;
|
||||||
import org.springframework.web.client.ResponseErrorHandler;
|
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.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.Consts;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.utilities.NotificationNewRequest;
|
import ru.spcex.clearing.platform.messaging.domain.cud.utilities.NotificationNewRequest;
|
||||||
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
|
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
|
||||||
import ru.spcex.platform.enumeration.ObjectType;
|
import ru.spcex.platform.enumeration.ObjectType;
|
||||||
import ru.spcex.platform.enumeration.Priority;
|
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.io.IOException;
|
||||||
import java.nio.charset.Charset;
|
import java.nio.charset.Charset;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
public class RestTemplateErrorHandler implements ResponseErrorHandler {
|
public class RestTemplateErrorHandler implements ResponseErrorHandler {
|
||||||
private final Logger log = LoggerFactory.getLogger(getClass());
|
private final Logger log = LoggerFactory.getLogger(getClass());
|
||||||
private final KafkaSender kafaSender;
|
private final KafkaSender kafaSender;
|
||||||
private final ObjectMapper objectMapper;
|
private final ObjectMapper objectMapper;
|
||||||
|
private final Map<UUID, OutboundRequest> outboundRequestByUuid;
|
||||||
|
|
||||||
public RestTemplateErrorHandler(KafkaSender kafaSender,
|
public RestTemplateErrorHandler(KafkaSender kafaSender,
|
||||||
ObjectMapper objectMapper) {
|
ObjectMapper objectMapper,
|
||||||
|
Map<UUID, OutboundRequest> outboundRequestByUuid) {
|
||||||
this.kafaSender = kafaSender;
|
this.kafaSender = kafaSender;
|
||||||
this.objectMapper = objectMapper;
|
this.objectMapper = objectMapper;
|
||||||
|
this.outboundRequestByUuid = outboundRequestByUuid;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -46,7 +55,8 @@ public class RestTemplateErrorHandler implements ResponseErrorHandler {
|
||||||
String error = (String) errorResponse.getUnknownProperties().get("error");
|
String error = (String) errorResponse.getUnknownProperties().get("error");
|
||||||
errorMessage = String.format("Error: %s", error);
|
errorMessage = String.format("Error: %s", error);
|
||||||
} else {
|
} else {
|
||||||
errorMessage = errorResponse.getMessage();
|
OutboundRequest outboundRequest = outboundRequestByUuid.remove(errorResponse.getId());
|
||||||
|
errorMessage = makeMessage(outboundRequest, errorResponse);
|
||||||
}
|
}
|
||||||
NotificationNewRequest notificationNewRequest = createNotification(errorMessage);
|
NotificationNewRequest notificationNewRequest = createNotification(errorMessage);
|
||||||
kafaSender.sendRequestToQueue(Consts.NOTIFICATION_NEW, notificationNewRequest);
|
kafaSender.sendRequestToQueue(Consts.NOTIFICATION_NEW, notificationNewRequest);
|
||||||
|
|
@ -59,4 +69,26 @@ public class RestTemplateErrorHandler implements ResponseErrorHandler {
|
||||||
request.setComment(String.format("Ошибка : %s", message));
|
request.setComment(String.format("Ошибка : %s", message));
|
||||||
return request;
|
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());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -38,20 +38,22 @@ public class GatewayService extends QueueConsumer implements InitializingBean {
|
||||||
private final UserRoleVerification userRoleVerification;
|
private final UserRoleVerification userRoleVerification;
|
||||||
private final RestTemplate restTemplate;
|
private final RestTemplate restTemplate;
|
||||||
private final InboundServerSettings inboundServerSettings;
|
private final InboundServerSettings inboundServerSettings;
|
||||||
|
|
||||||
private final Map<Long, List<SentAsset>> sentAssets;
|
private final Map<Long, List<SentAsset>> sentAssets;
|
||||||
|
private final Map<UUID, OutboundRequest> outboundRequestByUuid;
|
||||||
|
|
||||||
public GatewayService(Consumer<String, Object> kafkaQueue,
|
public GatewayService(Consumer<String, Object> kafkaQueue,
|
||||||
Producer<String, Object> kafkaProducer,
|
Producer<String, Object> kafkaProducer,
|
||||||
RestTemplate restTemplate,
|
RestTemplate restTemplate,
|
||||||
UserRoleVerification userRoleVerification,
|
UserRoleVerification userRoleVerification,
|
||||||
GatewayApiSettings gatewayApiSettings,
|
GatewayApiSettings gatewayApiSettings,
|
||||||
@Qualifier("sentAssets") Map<Long, List<SentAsset>> sentAssets) {
|
@Qualifier("sentAssets") Map<Long, List<SentAsset>> sentAssets,
|
||||||
|
Map<UUID, OutboundRequest> outboundRequestByUuid) {
|
||||||
super(kafkaQueue, kafkaProducer);
|
super(kafkaQueue, kafkaProducer);
|
||||||
this.restTemplate = restTemplate;
|
this.restTemplate = restTemplate;
|
||||||
this.userRoleVerification = userRoleVerification;
|
this.userRoleVerification = userRoleVerification;
|
||||||
this.inboundServerSettings = gatewayApiSettings.getInboundServer();
|
this.inboundServerSettings = gatewayApiSettings.getInboundServer();
|
||||||
this.sentAssets = sentAssets;
|
this.sentAssets = sentAssets;
|
||||||
|
this.outboundRequestByUuid = outboundRequestByUuid;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -86,6 +88,7 @@ public class GatewayService extends QueueConsumer implements InitializingBean {
|
||||||
.build();
|
.build();
|
||||||
HttpEntity<OutboundRequest> request = makeDefaultRequest(outboundFondRequest);
|
HttpEntity<OutboundRequest> request = makeDefaultRequest(outboundFondRequest);
|
||||||
|
|
||||||
|
outboundRequestByUuid.put(outboundFondRequest.getId(), outboundFondRequest);
|
||||||
ResponseEntity<SuccessResponse> response = restTemplate.exchange(url, HttpMethod.POST, request, SuccessResponse.class);
|
ResponseEntity<SuccessResponse> response = restTemplate.exchange(url, HttpMethod.POST, request, SuccessResponse.class);
|
||||||
SuccessResponse bodyResponse = response.getBody();
|
SuccessResponse bodyResponse = response.getBody();
|
||||||
if (bodyResponse != null) {
|
if (bodyResponse != null) {
|
||||||
|
|
@ -106,6 +109,7 @@ public class GatewayService extends QueueConsumer implements InitializingBean {
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
HttpEntity<OutboundRequest> request = makeDefaultRequest(outboundFondRequest);
|
HttpEntity<OutboundRequest> request = makeDefaultRequest(outboundFondRequest);
|
||||||
|
outboundRequestByUuid.put(outboundFondRequest.getId(), outboundFondRequest);
|
||||||
ResponseEntity<SuccessResponse> response = restTemplate.exchange(url, HttpMethod.POST, request, SuccessResponse.class);
|
ResponseEntity<SuccessResponse> response = restTemplate.exchange(url, HttpMethod.POST, request, SuccessResponse.class);
|
||||||
SuccessResponse bodyResponse = response.getBody();
|
SuccessResponse bodyResponse = response.getBody();
|
||||||
if (bodyResponse != null) {
|
if (bodyResponse != null) {
|
||||||
|
|
@ -136,6 +140,8 @@ public class GatewayService extends QueueConsumer implements InitializingBean {
|
||||||
HttpEntity<OutboundRequest> requestFond = makeDefaultRequest(outboundFondRequest);
|
HttpEntity<OutboundRequest> requestFond = makeDefaultRequest(outboundFondRequest);
|
||||||
HttpEntity<OutboundRequest> requestMKR = makeDefaultRequest(outboundMkrRequest);
|
HttpEntity<OutboundRequest> requestMKR = makeDefaultRequest(outboundMkrRequest);
|
||||||
|
|
||||||
|
outboundRequestByUuid.put(outboundFondRequest.getId(), outboundFondRequest);
|
||||||
|
outboundRequestByUuid.put(outboundMkrRequest.getId(), outboundMkrRequest);
|
||||||
ResponseEntity<SuccessResponse> response = restTemplate.exchange(url, HttpMethod.POST, requestFond, SuccessResponse.class);
|
ResponseEntity<SuccessResponse> response = restTemplate.exchange(url, HttpMethod.POST, requestFond, SuccessResponse.class);
|
||||||
SuccessResponse bodyResponse = response.getBody();
|
SuccessResponse bodyResponse = response.getBody();
|
||||||
if (bodyResponse != null) {
|
if (bodyResponse != null) {
|
||||||
|
|
@ -173,6 +179,7 @@ public class GatewayService extends QueueConsumer implements InitializingBean {
|
||||||
String url = formingInboundUrl(inboundServerSettings.getPathLOCM());
|
String url = formingInboundUrl(inboundServerSettings.getPathLOCM());
|
||||||
HttpEntity<OutboundRequest> r = makeDefaultRequest(outboundRequest);
|
HttpEntity<OutboundRequest> r = makeDefaultRequest(outboundRequest);
|
||||||
try {
|
try {
|
||||||
|
outboundRequestByUuid.put(outboundRequest.getId(), outboundRequest);
|
||||||
ResponseEntity<SuccessResponse> response = restTemplate.exchange(url, HttpMethod.POST, r, SuccessResponse.class);
|
ResponseEntity<SuccessResponse> response = restTemplate.exchange(url, HttpMethod.POST, r, SuccessResponse.class);
|
||||||
SuccessResponse bodyResponse = response.getBody();
|
SuccessResponse bodyResponse = response.getBody();
|
||||||
if (bodyResponse != null) {
|
if (bodyResponse != null) {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue