From 8f4f1a1a9a49edecfa9df8bb610dbec7ae87322b Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Fri, 24 Apr 2026 15:45:31 +0300 Subject: [PATCH] http://jira.mfd.msk:8088/browse/CLS-943 --- .../management/service/OrderCalculationService.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) 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 335da6a62..3f94dfb8c 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 @@ -4,6 +4,8 @@ import java.math.BigDecimal; import java.math.MathContext; import java.math.RoundingMode; import java.time.LocalDate; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import ru.clearing.classes.statics.data.misc.Listing; import ru.clearing.classes.statics.data.misc.OrderCurrency; @@ -17,6 +19,7 @@ import ru.spcex.platform.enumeration.SettleCode; @Service public class OrderCalculationService { + protected final Logger log = LoggerFactory.getLogger(getClass()); private static final MathContext MC = new MathContext(20, RoundingMode.HALF_UP); private final ImdgQueryService imdgQueryService; @@ -106,6 +109,9 @@ public class OrderCalculationService { private CalculationResult calculationRubSums(Registry registry, Integer lotSize, BigDecimal s, BigDecimal n) { BigDecimal planPosition = registry.getBalance(); Rates cnyRate = imdgQueryService.getRate(registry.getSecuritySymbol(), LocalDate.now()); + if (cnyRate == null) { + throw new IllegalStateException(String.format("Not fond rate by security symbol: %s", registry.getSecuritySymbol())); + } BigDecimal rateValue = cnyRate.getValue(); BigDecimal sum1 = planPosition.divide(rateValue, MC); @@ -130,10 +136,13 @@ public class OrderCalculationService { private BigDecimal swapPriceCalc(String baseCurrency, BigDecimal s, BigDecimal n) { Rates rate = imdgQueryService.getRate(baseCurrency, LocalDate.now()); + BigDecimal p = BigDecimal.ONE.divide(n, MC); + log.info("Calculation swap price: {}*{}*{}", s, n, p); return rate.getValue() .multiply(s, MC) .multiply(n, MC) - .divide(BigDecimal.valueOf(365), MC); + .multiply(p, MC) + .setScale(8, RoundingMode.HALF_UP); } private boolean isRub(Registry registry) {