diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/serializers/InstantWithMillisSerializer.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/serializers/InstantWithMillisSerializer.java new file mode 100644 index 000000000..633826152 --- /dev/null +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/serializers/InstantWithMillisSerializer.java @@ -0,0 +1,21 @@ +package ru.spcex.clearing.gatewayapi.config.serializers; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; +import ru.spcex.platform.utils.time.TimeUtil; + +import java.io.IOException; +import java.time.Instant; +import java.time.format.DateTimeFormatter; + +public class InstantWithMillisSerializer extends JsonSerializer { + private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss:SSS"); + + @Override + public void serialize(Instant value, JsonGenerator gen, SerializerProvider serializers) throws IOException { + if (value == null) return; + gen.writeString(TimeUtil.formatInstant(value, formatter)); + } +} + diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/InboundRequest.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/InboundRequest.java index 008e0919d..288123707 100644 --- a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/InboundRequest.java +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/InboundRequest.java @@ -5,7 +5,7 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import io.swagger.annotations.ApiModelProperty; import ru.spcex.clearing.gatewayapi.config.deserializers.InstantDeserializer; -import ru.spcex.clearing.gatewayapi.config.serializers.InstantSerializer; +import ru.spcex.clearing.gatewayapi.config.serializers.InstantWithMillisSerializer; import java.time.Instant; import java.util.Map; @@ -35,7 +35,7 @@ public class InboundRequest { @JsonProperty("datetime") @JsonDeserialize(using = InstantDeserializer.class) - @JsonSerialize(using = InstantSerializer.class) + @JsonSerialize(using = InstantWithMillisSerializer.class) @ApiModelProperty( value = "Передавать дату и время формирования JSON объекта в формате «ДД.ММ.ГГГГ ЧЧ:ММ:СС:ссс».", example = "01.01.2023 12:34:56:789" diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/response/CommonResponse.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/response/CommonResponse.java index 8ecf85791..8b63e4a8f 100644 --- a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/response/CommonResponse.java +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/response/CommonResponse.java @@ -4,7 +4,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; -import ru.spcex.clearing.gatewayapi.config.serializers.InstantSerializer; +import ru.spcex.clearing.gatewayapi.config.serializers.InstantWithMillisSerializer; import java.time.Instant; import java.util.UUID; @@ -26,7 +26,7 @@ public class CommonResponse { private String type; @JsonProperty("datetime") - @JsonSerialize(using = InstantSerializer.class) + @JsonSerialize(using = InstantWithMillisSerializer.class) @ApiModelProperty( value = "Значение соответствует полученному из запроса", example = "01.01.2023 12:34:56:789" 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 e17c17b5a..6a8c5fd4c 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 @@ -5,9 +5,7 @@ import org.apache.kafka.clients.producer.Producer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.InitializingBean; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpHeaders; -import org.springframework.http.MediaType; +import org.springframework.http.*; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; import ru.spcex.clearing.gatewayapi.config.GatewayApiSettings; @@ -80,9 +78,9 @@ public class GatewayService extends QueueConsumer implements InitializingBean { inboundRequest.setDatetime(Instant.now()); HttpEntity request = new HttpEntity<>(inboundRequest, httpHeaders); - String response = restTemplate.postForObject(url, request, String.class); - - log.debug("LOCM task complete, response: {}", response); + ResponseEntity response = restTemplate.exchange(url, HttpMethod.POST, request, Map.class); + Map bodyResponse = response.getBody(); + log.debug("LOCM task complete, response: {}", bodyResponse); } public void requestOnLimit(BaseRequest userRequest) { @@ -102,9 +100,9 @@ public class GatewayService extends QueueConsumer implements InitializingBean { inboundRequest.setContent(content); HttpEntity request = new HttpEntity<>(inboundRequest, httpHeaders); - String response = restTemplate.postForObject(url, request, String.class); - - log.debug("Limit request complete, response: {}", response); + ResponseEntity response = restTemplate.exchange(url, HttpMethod.POST, request, Map.class); + Map bodyResponse = response.getBody(); + log.debug("Limit request complete, response: {}", bodyResponse); } public void requestOnDemandSecurity(BaseRequest userRequest) { @@ -126,14 +124,15 @@ public class GatewayService extends QueueConsumer implements InitializingBean { inboundRequest.setDatetime(Instant.now()); HttpEntity request = new HttpEntity<>(inboundRequest, httpHeaders); - String response = restTemplate.postForObject(url, request, String.class); - log.debug("LOSC task 1/2 complete (FOND section), response: {}", response); + ResponseEntity response = restTemplate.exchange(url, HttpMethod.POST, request, Map.class); + Map bodyResponse = response.getBody(); + log.debug("LOSC task 1/2 complete (FOND section), response: {}", bodyResponse); inboundRequest.setSection(Section.MKR.getKey()); request = new HttpEntity<>(inboundRequest, httpHeaders); - response = restTemplate.postForObject(url, request, String.class); - - log.debug("LOSC task 2/2 complete (MKR section), response: {}", response); + response = restTemplate.exchange(url, HttpMethod.POST, request, Map.class); + bodyResponse = response.getBody(); + log.debug("LOSC task 2/2 complete (MKR section), response: {}", bodyResponse); } private String formingInboundUrl(String path) { diff --git a/clearing-parent/lim-exporter/src/main/java/ru/spcex/clearing/lim/exporter/services/MoneyExporterService.java b/clearing-parent/lim-exporter/src/main/java/ru/spcex/clearing/lim/exporter/services/MoneyExporterService.java index 3e0b110d6..47e162923 100644 --- a/clearing-parent/lim-exporter/src/main/java/ru/spcex/clearing/lim/exporter/services/MoneyExporterService.java +++ b/clearing-parent/lim-exporter/src/main/java/ru/spcex/clearing/lim/exporter/services/MoneyExporterService.java @@ -13,10 +13,7 @@ import ru.spcex.platform.imdg.api.ImdgProvider; import java.math.BigDecimal; import java.time.LocalDate; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; @Service @@ -63,7 +60,7 @@ public class MoneyExporterService extends AbstractExporterService { for (Map.Entry> entryA : byTcrA.entrySet()) { List registriesListA = entryA.getValue(); - List registriesListB = byTcrD.get(entryA.getKey()); + List registriesListB = byTcrD.getOrDefault(entryA.getKey(), Collections.emptyList()); for (Registry registryA : registriesListA) { if (checkNotBlocked(registryA)) { Registry registryD = findRegistryBySecurityId(registryA.getSecurityId(), registriesListB);