This commit is contained in:
parent
43847b4a0a
commit
00f62b5be6
5 changed files with 24 additions and 72 deletions
|
|
@ -24,7 +24,6 @@ import ru.clearing.classes.statics.data.misc.Listing;
|
||||||
import ru.clearing.classes.statics.data.misc.Market;
|
import ru.clearing.classes.statics.data.misc.Market;
|
||||||
import ru.clearing.classes.statics.data.misc.OrderCurrency;
|
import ru.clearing.classes.statics.data.misc.OrderCurrency;
|
||||||
import ru.clearing.classes.statics.data.misc.OvernightSettings;
|
import ru.clearing.classes.statics.data.misc.OvernightSettings;
|
||||||
import ru.clearing.classes.statics.data.misc.SCrossRate;
|
|
||||||
import ru.clearing.classes.statics.data.misc.SOrders;
|
import ru.clearing.classes.statics.data.misc.SOrders;
|
||||||
import ru.clearing.classes.statics.data.registry.Registry;
|
import ru.clearing.classes.statics.data.registry.Registry;
|
||||||
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
|
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
|
||||||
|
|
@ -233,9 +232,9 @@ public class OrderCurrencyListener extends QueueConsumer implements Initializing
|
||||||
LocalDate now = LocalDate.now();
|
LocalDate now = LocalDate.now();
|
||||||
//мб возвращать вместе с листингом?
|
//мб возвращать вместе с листингом?
|
||||||
CurrencyPairDictionary currPairT0 = imdgQueryService.getCurrencyPairDictionaryBySecurityId(listingT0.getSecurityId());
|
CurrencyPairDictionary currPairT0 = imdgQueryService.getCurrencyPairDictionaryBySecurityId(listingT0.getSecurityId());
|
||||||
SCrossRate rateT0 = imdgQueryService.getSCrossRates(currPairT0.getBaseCurrency(), now);
|
Rates rateT0 = imdgQueryService.getRateOnNextWorkingDay(currPairT0.getBaseCurrency());
|
||||||
CurrencyPairDictionary currPairT1 = imdgQueryService.getCurrencyPairDictionaryBySecurityId(listingT1.getSecurityId());
|
CurrencyPairDictionary currPairT1 = imdgQueryService.getCurrencyPairDictionaryBySecurityId(listingT1.getSecurityId());
|
||||||
SCrossRate rateT1 = imdgQueryService.getSCrossRates(currPairT1.getBaseCurrency(), now);
|
Rates rateT1 = imdgQueryService.getRateOnNextWorkingDay(currPairT1.getBaseCurrency());
|
||||||
|
|
||||||
var pair = new Pair<>(orderT0, orderT1);
|
var pair = new Pair<>(orderT0, orderT1);
|
||||||
Pair.forEach(pair, o -> {
|
Pair.forEach(pair, o -> {
|
||||||
|
|
@ -246,8 +245,8 @@ public class OrderCurrencyListener extends QueueConsumer implements Initializing
|
||||||
});
|
});
|
||||||
updateOrderFieldsByListing(orderT0, listingT0);
|
updateOrderFieldsByListing(orderT0, listingT0);
|
||||||
updateOrderFieldsByListing(orderT1, listingT1);
|
updateOrderFieldsByListing(orderT1, listingT1);
|
||||||
orderT0.setPrice(rateT0.getUnitRate());
|
orderT0.setPrice(rateT0.getValue());
|
||||||
orderT1.setPrice(BigDecimalUtil.safeSumBD(swap.getPrice(), rateT1.getUnitRate()));
|
orderT1.setPrice(BigDecimalUtil.safeSumBD(swap.getPrice(), rateT1.getValue()));
|
||||||
return pair;
|
return pair;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -280,9 +279,7 @@ public class OrderCurrencyListener extends QueueConsumer implements Initializing
|
||||||
Market market = imdgQueryService.getSwapMarket();
|
Market market = imdgQueryService.getSwapMarket();
|
||||||
Listing listing = imdgQueryService.findListing(rgs, market.getCode(), SettleCode.T1.getKey());
|
Listing listing = imdgQueryService.findListing(rgs, market.getCode(), SettleCode.T1.getKey());
|
||||||
CurrencyPairDictionary pair = imdgQueryService.getCurrencyPairDictionaryBySecurityId(listing.getSecurityId());
|
CurrencyPairDictionary pair = imdgQueryService.getCurrencyPairDictionaryBySecurityId(listing.getSecurityId());
|
||||||
BigDecimal n = transferDateService.numberOfDaysOfTransfer();
|
Rates rates = imdgQueryService.getRateOnNextWorkingDay(pair.getBaseCurrency());
|
||||||
LocalDate searchingValueDate = LocalDate.now().plusDays(n.longValue());
|
|
||||||
Rates rates = imdgQueryService.getRate(pair.getBaseCurrency(), searchingValueDate);
|
|
||||||
BigDecimal rateValue = null;
|
BigDecimal rateValue = null;
|
||||||
copyCommonFields(order1, swap);
|
copyCommonFields(order1, swap);
|
||||||
swap.setSecurityId(listing.getSecurityId());
|
swap.setSecurityId(listing.getSecurityId());
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,6 @@ import java.nio.charset.Charset;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.time.LocalDate;
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
|
@ -24,8 +23,8 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import ru.clearing.classes.statics.data.misc.OrderCurrency;
|
import ru.clearing.classes.statics.data.misc.OrderCurrency;
|
||||||
import ru.clearing.classes.statics.data.misc.OvernightSettings;
|
import ru.clearing.classes.statics.data.misc.OvernightSettings;
|
||||||
import ru.clearing.classes.statics.data.misc.SCrossRate;
|
|
||||||
import ru.clearing.classes.statics.data.registry.Registry;
|
import ru.clearing.classes.statics.data.registry.Registry;
|
||||||
|
import ru.clearing.classes.statics.data.security.Rates;
|
||||||
import ru.spcex.clearing.dflt.management.config.settings.DefaultManagementSettings;
|
import ru.spcex.clearing.dflt.management.config.settings.DefaultManagementSettings;
|
||||||
import ru.spcex.clearing.dflt.management.enums.SendOrdersTypes;
|
import ru.spcex.clearing.dflt.management.enums.SendOrdersTypes;
|
||||||
import ru.spcex.clearing.dflt.management.service.ImdgQueryService;
|
import ru.spcex.clearing.dflt.management.service.ImdgQueryService;
|
||||||
|
|
@ -182,11 +181,11 @@ public class TaskListener extends QueueConsumer implements InitializingBean {
|
||||||
}
|
}
|
||||||
|
|
||||||
String currency = isRubPmt ? CurrencyCode.CNY.getKey() : pmtRegistry.getSecuritySymbol();
|
String currency = isRubPmt ? CurrencyCode.CNY.getKey() : pmtRegistry.getSecuritySymbol();
|
||||||
SCrossRate sCrossRate = imdgQueryService.getSCrossRates(currency, LocalDate.now());
|
Rates rates = imdgQueryService.getRateOnNextWorkingDay(currency);
|
||||||
|
|
||||||
BigDecimal val = orderCurrency.getQuantityLot()
|
BigDecimal val = orderCurrency.getQuantityLot()
|
||||||
.multiply(orderCurrency.getLotSize())
|
.multiply(orderCurrency.getLotSize())
|
||||||
.multiply(sCrossRate.getUnitRate());
|
.multiply(rates.getValue());
|
||||||
|
|
||||||
BigDecimal diff = isRubPmt ?
|
BigDecimal diff = isRubPmt ?
|
||||||
pmtRegistry.getBalance().add(val) :
|
pmtRegistry.getBalance().add(val) :
|
||||||
|
|
|
||||||
|
|
@ -50,9 +50,11 @@ public class ImdgQueryService {
|
||||||
private final Imdg<Registry> registryImdg;
|
private final Imdg<Registry> registryImdg;
|
||||||
private final Imdg<OvernightSettings> overnightSettingsImdg;
|
private final Imdg<OvernightSettings> overnightSettingsImdg;
|
||||||
private final Imdg<OrderCurrency> orderCurrencyImdg;
|
private final Imdg<OrderCurrency> orderCurrencyImdg;
|
||||||
|
private final TransferDateService transferDateService;
|
||||||
|
|
||||||
|
|
||||||
public ImdgQueryService(ImdgProvider imdgProvider) {
|
public ImdgQueryService(ImdgProvider imdgProvider,
|
||||||
|
TransferDateService transferDateService) {
|
||||||
this.categoryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class);
|
this.categoryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class);
|
||||||
this.companyRoleSetImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanyRoleSet, CompanyRoleSet.class);
|
this.companyRoleSetImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanyRoleSet, CompanyRoleSet.class);
|
||||||
this.companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
|
this.companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
|
||||||
|
|
@ -67,6 +69,7 @@ public class ImdgQueryService {
|
||||||
this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
|
this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
|
||||||
this.overnightSettingsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_OvernightSettings, OvernightSettings.class);
|
this.overnightSettingsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_OvernightSettings, OvernightSettings.class);
|
||||||
this.orderCurrencyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_OrderCurrency, OrderCurrency.class);
|
this.orderCurrencyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_OrderCurrency, OrderCurrency.class);
|
||||||
|
this.transferDateService = transferDateService;
|
||||||
}
|
}
|
||||||
public Collection<Long> getCurrencyRegistry() {
|
public Collection<Long> getCurrencyRegistry() {
|
||||||
ImdgPredicateBuilder builder = registryImdg.predicateBuilder();
|
ImdgPredicateBuilder builder = registryImdg.predicateBuilder();
|
||||||
|
|
@ -194,27 +197,18 @@ public class ImdgQueryService {
|
||||||
: findRiskParameterForOtherCurrency(registry);
|
: findRiskParameterForOtherCurrency(registry);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Rates getRate(String currency, LocalDate valueDate) {
|
public Rates getRateOnNextWorkingDay(String currency) {
|
||||||
|
LocalDate nextWorkingDate = transferDateService.findNextWorkingDate();
|
||||||
ImdgPredicateBuilder pb = ratesImdg.predicateBuilder();
|
ImdgPredicateBuilder pb = ratesImdg.predicateBuilder();
|
||||||
return ratesImdg.getSingleObjectByPredicate(
|
return ratesImdg.getSingleObjectByPredicate(
|
||||||
pb.and(
|
pb.and(
|
||||||
pb.equals("currency", currency),
|
pb.equals("currency", currency),
|
||||||
pb.equals("valueDate", valueDate),
|
pb.equals("valueDate", nextWorkingDate),
|
||||||
pb.equals("workflowStatus", WorkflowStatus.Active.getKey())
|
pb.equals("workflowStatus", WorkflowStatus.Active.getKey())
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public SCrossRate getSCrossRates(String currency, LocalDate date) {
|
|
||||||
ImdgPredicateBuilder pb = sCrossRateImdg.predicateBuilder();
|
|
||||||
return sCrossRateImdg.getSingleObjectByPredicate(
|
|
||||||
pb.and(
|
|
||||||
pb.equals("currency", currency),
|
|
||||||
pb.equals("date", date)
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public BigDecimal defineTransferRate(Long currencyPairDictionaryId, String securitySymbol) {
|
public BigDecimal defineTransferRate(Long currencyPairDictionaryId, String securitySymbol) {
|
||||||
ImdgPredicateBuilder pb = riskParameterImdg.predicateBuilder();
|
ImdgPredicateBuilder pb = riskParameterImdg.predicateBuilder();
|
||||||
boolean isRub = "RUB".equals(securitySymbol);
|
boolean isRub = "RUB".equals(securitySymbol);
|
||||||
|
|
|
||||||
|
|
@ -3,13 +3,11 @@ package ru.spcex.clearing.dflt.management.service;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.math.MathContext;
|
import java.math.MathContext;
|
||||||
import java.math.RoundingMode;
|
import java.math.RoundingMode;
|
||||||
import java.time.LocalDate;
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import ru.clearing.classes.statics.data.misc.Listing;
|
import ru.clearing.classes.statics.data.misc.Listing;
|
||||||
import ru.clearing.classes.statics.data.misc.SCrossRate;
|
|
||||||
import ru.clearing.classes.statics.data.registry.Registry;
|
import ru.clearing.classes.statics.data.registry.Registry;
|
||||||
import ru.clearing.classes.statics.data.security.Rates;
|
import ru.clearing.classes.statics.data.security.Rates;
|
||||||
import ru.clearing.platform.dictionary.CurrencyPairDictionary;
|
import ru.clearing.platform.dictionary.CurrencyPairDictionary;
|
||||||
|
|
@ -53,10 +51,8 @@ public class OrderCalculationService {
|
||||||
|
|
||||||
BigDecimal quantityLot = result.sum3().abs();
|
BigDecimal quantityLot = result.sum3().abs();
|
||||||
BigDecimal price;
|
BigDecimal price;
|
||||||
long nextWorkDayDelta = n.longValue();
|
|
||||||
LocalDate searchingValueDate = LocalDate.now().plusDays(nextWorkDayDelta);
|
|
||||||
int precision = listing.getPrecision().intValue();
|
int precision = listing.getPrecision().intValue();
|
||||||
Rates rates = imdgQueryService.getRate(pair.getBaseCurrency(), searchingValueDate);
|
Rates rates = imdgQueryService.getRateOnNextWorkingDay(pair.getBaseCurrency());
|
||||||
price = swapPriceCalc(rates, s, n, precision);
|
price = swapPriceCalc(rates, s, n, precision);
|
||||||
return new FinalCalculationResult(price, rates.getValue().setScale(precision, RoundingMode.HALF_UP), s, quantityLot, result);
|
return new FinalCalculationResult(price, rates.getValue().setScale(precision, RoundingMode.HALF_UP), s, quantityLot, result);
|
||||||
}
|
}
|
||||||
|
|
@ -74,8 +70,7 @@ public class OrderCalculationService {
|
||||||
? calculationRubSums(registry, listing.getLotSize().intValue(), s, n)
|
? calculationRubSums(registry, listing.getLotSize().intValue(), s, n)
|
||||||
: calculationSums(registry, listing.getLotSize().intValue(), s, n);
|
: calculationSums(registry, listing.getLotSize().intValue(), s, n);
|
||||||
|
|
||||||
long nextWorkDayDelta = n.longValue();
|
Rates rates = imdgQueryService.getRateOnNextWorkingDay(pair.getBaseCurrency());
|
||||||
Rates rates = imdgQueryService.getRate(pair.getBaseCurrency(), LocalDate.now().plusDays(nextWorkDayDelta));
|
|
||||||
BigDecimal quantityLot;
|
BigDecimal quantityLot;
|
||||||
BigDecimal price;
|
BigDecimal price;
|
||||||
if (SettleCode.T0 == settleCode) {
|
if (SettleCode.T0 == settleCode) {
|
||||||
|
|
@ -94,11 +89,11 @@ public class OrderCalculationService {
|
||||||
BigDecimal planPosition = registry.getBalance();
|
BigDecimal planPosition = registry.getBalance();
|
||||||
BigDecimal sum1 = planPosition.abs();
|
BigDecimal sum1 = planPosition.abs();
|
||||||
|
|
||||||
SCrossRate sCrossRates = imdgQueryService.getSCrossRates(registry.getSecuritySymbol(), LocalDate.now());
|
Rates rates = imdgQueryService.getRateOnNextWorkingDay(registry.getSecuritySymbol());
|
||||||
if (sCrossRates == null) {
|
if (rates == null) {
|
||||||
throw new IllegalStateException(String.format("Not fond rate by security symbol: %s", CurrencyCode.CNY.getKey()));
|
throw new IllegalStateException(String.format("Not fond rate by security symbol: %s", CurrencyCode.CNY.getKey()));
|
||||||
}
|
}
|
||||||
BigDecimal rateValue = sCrossRates.getUnitRate();
|
BigDecimal rateValue = rates.getValue();
|
||||||
BigDecimal sum3 = mathCeil(sum1, lotSize);
|
BigDecimal sum3 = mathCeil(sum1, lotSize);
|
||||||
BigDecimal sum4 = sum3.multiply(rateValue, MC).negate();
|
BigDecimal sum4 = sum3.multiply(rateValue, MC).negate();
|
||||||
BigDecimal sum5 = sum3.negate();
|
BigDecimal sum5 = sum3.negate();
|
||||||
|
|
@ -115,11 +110,11 @@ public class OrderCalculationService {
|
||||||
|
|
||||||
private CalculationResult calculationRubSums(Registry registry, Integer lotSize, BigDecimal s, BigDecimal n) {
|
private CalculationResult calculationRubSums(Registry registry, Integer lotSize, BigDecimal s, BigDecimal n) {
|
||||||
BigDecimal planPosition = registry.getBalance();
|
BigDecimal planPosition = registry.getBalance();
|
||||||
SCrossRate sCrossRates = imdgQueryService.getSCrossRates(CurrencyCode.CNY.getKey(), LocalDate.now());
|
Rates rates = imdgQueryService.getRateOnNextWorkingDay(CurrencyCode.CNY.getKey());
|
||||||
if (sCrossRates == null) {
|
if (rates == null) {
|
||||||
throw new IllegalStateException(String.format("Not fond rate by security symbol: %s", CurrencyCode.CNY.getKey()));
|
throw new IllegalStateException(String.format("Not fond rate by security symbol: %s", CurrencyCode.CNY.getKey()));
|
||||||
}
|
}
|
||||||
BigDecimal rateValue = sCrossRates.getUnitRate();
|
BigDecimal rateValue = rates.getValue();
|
||||||
|
|
||||||
BigDecimal sum1 = planPosition.divide(rateValue, MC).abs();
|
BigDecimal sum1 = planPosition.divide(rateValue, MC).abs();
|
||||||
|
|
||||||
|
|
@ -162,8 +157,7 @@ public class OrderCalculationService {
|
||||||
}
|
}
|
||||||
|
|
||||||
private BigDecimal swapPriceCalcT1(String baseCurrency, BigDecimal s, BigDecimal n, int precision) {
|
private BigDecimal swapPriceCalcT1(String baseCurrency, BigDecimal s, BigDecimal n, int precision) {
|
||||||
long nextWorkDayDelta = n.longValue();
|
Rates rate = imdgQueryService.getRateOnNextWorkingDay(baseCurrency);
|
||||||
Rates rate = imdgQueryService.getRate(baseCurrency, LocalDate.now().plusDays(nextWorkDayDelta));
|
|
||||||
BigDecimal p = n.divide(BigDecimal.valueOf(365), MC);
|
BigDecimal p = n.divide(BigDecimal.valueOf(365), MC);
|
||||||
log.info("Calculation swap price: {}*{}*{}", rate.getValue(), s, p);
|
log.info("Calculation swap price: {}*{}*{}", rate.getValue(), s, p);
|
||||||
return rate.getValue()
|
return rate.getValue()
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,6 @@ package ru.spcex.clearing.dflt.management.service;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.time.LocalDate;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -11,15 +10,7 @@ import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import ru.clearing.classes.statics.data.misc.OrderCurrency;
|
import ru.clearing.classes.statics.data.misc.OrderCurrency;
|
||||||
import ru.clearing.classes.statics.data.security.Rates;
|
|
||||||
import ru.clearing.platform.dictionary.CurrencyPairDictionary;
|
|
||||||
import ru.spcex.clearing.platform.messaging.domain.Consts;
|
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.utilities.NotificationNewRequest;
|
|
||||||
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
|
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
|
||||||
import ru.spcex.platform.enumeration.ObjectType;
|
|
||||||
import ru.spcex.platform.enumeration.OvernightType;
|
|
||||||
import ru.spcex.platform.enumeration.Priority;
|
|
||||||
import ru.spcex.platform.enumeration.SettleCode;
|
|
||||||
import ru.spcex.platform.enumeration.Side;
|
import ru.spcex.platform.enumeration.Side;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
|
|
@ -89,29 +80,6 @@ public class OrderCurrencyTriExportService {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
public String resolveBaseRate(OrderCurrency orderCurrency) {
|
|
||||||
if (OvernightType.SPOT.equalsByKey(orderCurrency.getOvernightType())) {
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
CurrencyPairDictionary currencyPairDictionary = imdgQueryService.getCurrencyPairDictionaryBySecurityId(orderCurrency.getSecurityId());
|
|
||||||
String baseCurrency = currencyPairDictionary.getBaseCurrency();
|
|
||||||
LocalDate rateDate = LocalDate.now();
|
|
||||||
|
|
||||||
if (SettleCode.T1.equalsByKey(orderCurrency.getSettleCode())) { //всегда т.к. SWAP?
|
|
||||||
BigDecimal n = transferDateService.numberOfDaysOfTransfer();
|
|
||||||
rateDate = rateDate.plusDays(n.longValue());
|
|
||||||
}
|
|
||||||
Rates rates = imdgQueryService.getRate(currencyPairDictionary.getBaseCurrency(), rateDate);
|
|
||||||
|
|
||||||
if (rates == null || rates.getValue() == null) {
|
|
||||||
log.warn("Не найден активный курс для валюты {} на дату {}", baseCurrency, rateDate);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return formatDecimalStripZeroes(rates.getValue());
|
|
||||||
}
|
|
||||||
|
|
||||||
private String formatDecimal(BigDecimal value) {
|
private String formatDecimal(BigDecimal value) {
|
||||||
return value == null ? "" : value.toPlainString();
|
return value == null ? "" : value.toPlainString();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue