From 2f27d41972c3cc67d923dcfdfb0cb3d66100853d Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Fri, 17 Apr 2026 12:38:07 +0300 Subject: [PATCH] http://jira.mfd.msk:8088/browse/CLS-911 --- .../securities/service/facade/RatesFacade.java | 1 + .../service/facade/SCrossRateFacade.java | 4 ++-- .../listeners/SCrossRatesMessageListener.java | 15 +++++++++++++++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/facade/RatesFacade.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/facade/RatesFacade.java index 6b0dc62f5..083718c55 100644 --- a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/facade/RatesFacade.java +++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/facade/RatesFacade.java @@ -51,6 +51,7 @@ public class RatesFacade implements IClearingFacade { ratesForUpdate.setValue(request.getValue()); ratesForUpdate.setWorkflowStatus(request.getStatus()); + ratesForUpdate.setUpdated(Instant.now()); ratesImdg.update(ratesForUpdate); log.debug("successfully processed, updated rates id {}", ratesForUpdate.getId()); diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/facade/SCrossRateFacade.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/facade/SCrossRateFacade.java index f528b32ad..4fc8b7761 100644 --- a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/facade/SCrossRateFacade.java +++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/facade/SCrossRateFacade.java @@ -30,7 +30,7 @@ public class SCrossRateFacade { sCrossRate.setCreated(Instant.now()); sCrossRate.setDate(req.getDate()); sCrossRate.setCurrency(req.getCurrency()); - sCrossRate.setUnitRate(req.getRate()); + sCrossRate.setUnitRate(req.getUnitRate()); sCrossRate.setFaceValue(req.getFaceValue()); sCrossRate.setRate(req.getRate()); sCrossRateImdg.insert(sCrossRate); @@ -38,7 +38,7 @@ public class SCrossRateFacade { public void update(SCrossRateUpdateRequest req) { SCrossRate sCrossRate = sCrossRateImdg.getSingleObjectByID(req.getId()); - sCrossRate.setUnitRate(req.getRate()); + sCrossRate.setUnitRate(req.getUnitRate()); sCrossRate.setFaceValue(req.getFaceValue()); sCrossRate.setRate(req.getRate()); sCrossRate.setUpdated(Instant.now()); diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/listeners/SCrossRatesMessageListener.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/listeners/SCrossRatesMessageListener.java index afa9259ff..82922c8cf 100644 --- a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/listeners/SCrossRatesMessageListener.java +++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/listeners/SCrossRatesMessageListener.java @@ -9,6 +9,7 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.InitializingBean; import org.springframework.stereotype.Service; import ru.clearing.classes.statics.data.misc.SCrossRate; +import ru.clearing.platform.dictionary.CurrencyCodeDictionary; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.platform.messaging.domain.BaseRequest; import ru.spcex.clearing.platform.messaging.domain.Consts; @@ -31,6 +32,7 @@ public class SCrossRatesMessageListener extends QueueConsumer implements Initial private final UserRoleVerification userRoleVerification; private final IMessageResolver messageResolver; private final Imdg sCrossRateImdg; + private final Imdg currencyCodeDictionaryImdg; private final SCrossRateFacade sCrossRateFacade; public SCrossRatesMessageListener(Consumer kafkaQueue, @@ -45,6 +47,7 @@ public class SCrossRatesMessageListener extends QueueConsumer implements Initial this.messageResolver = messageResolver; this.sCrossRateImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SCrossRate, SCrossRate.class); this.sCrossRateFacade = sCrossRateFacade; + this.currencyCodeDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CurrencyCodeDictionary, CurrencyCodeDictionary.class); } @Override @@ -61,6 +64,11 @@ public class SCrossRatesMessageListener extends QueueConsumer implements Initial SCrossRateGatewayRequest payload = sCrossRatesReq.getRequestPayload(); for (CurrencyRateGatewayElem elem : payload.getCrossRateElems()) { + CurrencyCodeDictionary codeDictionary = currencyByCode(elem.getBaseCurrencyLetterCode()); + if (codeDictionary == null) { + log.debug("Skip creating sCrossRate gateway element with code {}", elem.getBaseCurrencyLetterCode()); + continue; + } ImdgPredicateBuilder predicateBuilder = sCrossRateImdg.predicateBuilder(); Collection sCrossRateIds = sCrossRateImdg.getCollectionIdsByPredicate( predicateBuilder.and( @@ -95,4 +103,11 @@ public class SCrossRatesMessageListener extends QueueConsumer implements Initial updateRequest.setRate(sCrossRateElem.getPrice()); return updateRequest; } + + private CurrencyCodeDictionary currencyByCode(String code) { + ImdgPredicateBuilder predicateBuilder = currencyCodeDictionaryImdg.predicateBuilder(); + return currencyCodeDictionaryImdg.getFirstObjectByPredicate( + predicateBuilder.equals("code", code) + ); + } }