diff --git a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/model/FinalCalculationResult.java b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/model/FinalCalculationResult.java index 85844fca4..5a7cf2079 100644 --- a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/model/FinalCalculationResult.java +++ b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/model/FinalCalculationResult.java @@ -4,6 +4,7 @@ import java.math.BigDecimal; public record FinalCalculationResult( BigDecimal price, + BigDecimal basePrice, BigDecimal rate, BigDecimal quantityLot, CalculationResult calculationResult 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 913ea2463..b89686acb 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 @@ -53,13 +53,15 @@ public class OrderCalculationService { BigDecimal quantityLot = result.sum3().abs(); BigDecimal price; + long nextWorkDayDelta = n.longValue(); + LocalDate searchingValueDate = LocalDate.now(); if (SettleCode.T1.equals(settleCode)) { - price = swapPriceCalcT1(pair.getBaseCurrency(), s, n, listing.getPrecision().intValue()); - } else { - price = swapPriceCalc(pair.getBaseCurrency(), s, n, listing.getPrecision().intValue()); + searchingValueDate = searchingValueDate.plusDays(nextWorkDayDelta); } - - return new FinalCalculationResult(price, s, quantityLot, result); + int precision = listing.getPrecision().intValue(); + Rates rates = imdgQueryService.getRate(pair.getBaseCurrency(), searchingValueDate); + price = swapPriceCalc(rates, s, n, precision); + return new FinalCalculationResult(price, rates.getValue().setScale(precision, RoundingMode.HALF_UP), s, quantityLot, result); } public FinalCalculationResult calcAndEnrichSpot(SettleCode settleCode, @@ -88,7 +90,7 @@ public class OrderCalculationService { price = rates.getValue().add(delta).setScale(listing.getPrecision().intValue(), RoundingMode.HALF_UP);; } - return new FinalCalculationResult(price, s, quantityLot, result); + return new FinalCalculationResult(price, null, s, quantityLot, result); } private CalculationResult calculationSums(Registry registry, Integer lotSize, BigDecimal s, BigDecimal n) { @@ -153,8 +155,7 @@ public class OrderCalculationService { return new CalculationResult(sum1, sum2, sum3, sum4, sum5, sum6); } - private BigDecimal swapPriceCalc(String baseCurrency, BigDecimal s, BigDecimal n, int precision) { - Rates rate = imdgQueryService.getRate(baseCurrency, LocalDate.now()); + private BigDecimal swapPriceCalc(Rates rate, BigDecimal s, BigDecimal n, int precision) { BigDecimal p = n.divide(BigDecimal.valueOf(365), MC); log.info("Calculation swap price: {}*{}*{}", rate.getValue(), s, p); return rate.getValue() diff --git a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/OrderTemplateBuilder.java b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/OrderTemplateBuilder.java index 3d341a054..1bcbf8dba 100644 --- a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/OrderTemplateBuilder.java +++ b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/OrderTemplateBuilder.java @@ -230,6 +230,7 @@ public class OrderTemplateBuilder { order.setCreated(Instant.now()); order.setPrice(finalCalculationResult.price()); + order.setBasePrice(finalCalculationResult.basePrice()); order.setQuantityLot(finalCalculationResult.quantityLot()); order.setRate(finalCalculationResult.rate()); }