diff --git a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/listener/OrderCurrencyListener.java b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/listener/OrderCurrencyListener.java index b4ebffa9b..f95aba999 100644 --- a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/listener/OrderCurrencyListener.java +++ b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/listener/OrderCurrencyListener.java @@ -27,9 +27,11 @@ import ru.clearing.classes.statics.data.misc.SCrossRate; import ru.clearing.classes.statics.data.misc.SOrders; import ru.clearing.classes.statics.data.registry.Registry; import ru.clearing.classes.statics.data.registry.TradingClearingRegistry; +import ru.clearing.classes.statics.data.security.Rates; import ru.clearing.platform.dictionary.CurrencyPairDictionary; import ru.spcex.clearing.dflt.management.component.validation.OrderCurrencyValidationStored; import ru.spcex.clearing.dflt.management.service.ImdgQueryService; +import ru.spcex.clearing.dflt.management.service.TransferDateService; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.platform.messaging.domain.BaseRequest; import ru.spcex.clearing.platform.messaging.domain.Consts; @@ -69,6 +71,7 @@ public class OrderCurrencyListener extends QueueConsumer implements Initializing private final Function orderCompanyDeleteValidator; private final ImdgQueryService imdgQueryService; private final IMessageResolver msgResolver; + private final TransferDateService transferDateService; @Autowired public OrderCurrencyListener(Consumer kafkaQueue, @@ -86,7 +89,8 @@ public class OrderCurrencyListener extends QueueConsumer implements Initializing Function orderCurrencyUpdateStatusValidator, Function orderCompanyDeleteValidator, ImdgQueryService imdgQueryService, - IMessageResolver msgResolver) { + IMessageResolver msgResolver, + TransferDateService transferDateService) { super(kafkaQueue, kafkaProducer); this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); this.overnightSettingsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_OvernightSettings, OvernightSettings.class); @@ -100,6 +104,7 @@ public class OrderCurrencyListener extends QueueConsumer implements Initializing this.imdgQueryService = imdgQueryService; this.msgResolver = msgResolver; this.orderCurrencyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_OrderCurrency, OrderCurrency.class); + this.transferDateService = transferDateService; } @Override @@ -273,6 +278,10 @@ public class OrderCurrencyListener extends QueueConsumer implements Initializing Market market = imdgQueryService.getSwapMarket(); Listing listing = imdgQueryService.findListing(rgs, market.getCode(), SettleCode.T1.getKey()); + CurrencyPairDictionary pair = imdgQueryService.getCurrencyPairDictionaryBySecurityId(listing.getSecurityId()); + BigDecimal n = transferDateService.numberOfDaysOfTransfer(); + LocalDate searchingValueDate = LocalDate.now().plusDays(n.longValue()); + Rates rates = imdgQueryService.getRate(pair.getBaseCurrency(), searchingValueDate); copyCommonFields(order1, swap); swap.setSecurityId(listing.getSecurityId()); @@ -281,7 +290,7 @@ public class OrderCurrencyListener extends QueueConsumer implements Initializing swap.setOvernightType(OvernightType.SWAP.getKey()); swap.setMarket(market.getCode()); swap.setPrice(safeBD(spotT1.getPrice()).subtract(safeBD(spotT0.getPrice()))); - swap.setBasePrice(safeBD(spotT1.getBasePrice())); + swap.setBasePrice(safeBD(rates.getValue())); swap.setCreated(Instant.now()); return swap; } diff --git a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/OrderCalculationService.java b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/OrderCalculationService.java index b89686acb..ab9bed0d8 100644 --- a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/OrderCalculationService.java +++ b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/OrderCalculationService.java @@ -54,10 +54,7 @@ public class OrderCalculationService { BigDecimal quantityLot = result.sum3().abs(); BigDecimal price; long nextWorkDayDelta = n.longValue(); - LocalDate searchingValueDate = LocalDate.now(); - if (SettleCode.T1.equals(settleCode)) { - searchingValueDate = searchingValueDate.plusDays(nextWorkDayDelta); - } + LocalDate searchingValueDate = LocalDate.now().plusDays(nextWorkDayDelta); int precision = listing.getPrecision().intValue(); Rates rates = imdgQueryService.getRate(pair.getBaseCurrency(), searchingValueDate); price = swapPriceCalc(rates, s, n, precision);