This commit is contained in:
akulikov 2024-12-03 14:30:04 +03:00
parent 4a31317f85
commit 1940d47344
2 changed files with 17 additions and 3 deletions

View file

@ -66,6 +66,7 @@ public class KSRepLccValueReport {
@CsvBindByName(column = "VALUE")
@CsvBindByPosition(position = 12)
@CsvNumber(value = "#0.00", writeFormat = "#0.00")
private BigDecimal value;

View file

@ -11,6 +11,7 @@ import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.misc.Currency;
import ru.clearing.classes.statics.data.registry.Registry;
import ru.clearing.classes.statics.data.security.Rates;
import ru.clearing.classes.statics.data.security.RiskParameter;
@ -37,6 +38,7 @@ import ru.spcex.platform.utils.enumeration.IEnumKey;
public class KSRepLccValueReportBuilder extends CSVReportBuilder<EmptyParams, KSRepLccValueReport> {
private final Imdg<Registry> registryImdg;
private final Imdg<Rates> ratesImdg;
private final Imdg<Currency> currencyImdg;
private final Imdg<RiskParameter> riskParameterImdg;
private final Imdg<CurrencyPairDictionary> currencyPairDictionaryImdg;
@ -47,6 +49,7 @@ public class KSRepLccValueReportBuilder extends CSVReportBuilder<EmptyParams, KS
ratesImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Rates, Rates.class);
riskParameterImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_RiskParameter, RiskParameter.class);
currencyPairDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CurrencyPairDictionary, CurrencyPairDictionary.class);
currencyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Currency, Currency.class);
}
@Override
@ -103,6 +106,7 @@ public class KSRepLccValueReportBuilder extends CSVReportBuilder<EmptyParams, KS
Map<String, Rates> currencyRates = new HashMap<>();
LocalDateTime nowTime = LocalDateTime.now();
for (Map.Entry<String, List<Registry>> entryTKR : groupedByTKR.entrySet()) {
currencyRates.clear();
try {
String tkr = entryTKR.getKey();
List<Registry> registriesForTKR = entryTKR.getValue();
@ -236,7 +240,7 @@ public class KSRepLccValueReportBuilder extends CSVReportBuilder<EmptyParams, KS
BigDecimal sValueExt = BigDecimal.ZERO;
BigDecimal m0ValueExt = BigDecimal.ZERO;
for (Rates currRate : currencyRates.values()) {
if (currRate.getId().equals(rate.getId())) continue;
if (currRate.getCurrency().equals(rate.getCurrency())) continue;
BigDecimal value = posMoneys.get(currRate.getCurrencyId()).multiply(currRate.getValue());
sValueExt = sValueExt.add(value);
m0ValueExt = m0ValueExt.add(value.multiply(risk.get(currRate.getCurrencyId()).getValue()));
@ -244,8 +248,10 @@ public class KSRepLccValueReportBuilder extends CSVReportBuilder<EmptyParams, KS
constValue = sValueExt.subtract(m0ValueExt);
BigDecimal posMoney = posMoneys.get(rate.getCurrencyId());
BigDecimal riskValue = risk.get(rate.getCurrencyId()).getValue();
BigDecimal NPRExt = posMoney.multiply(rate.getValue()).multiply(BigDecimal.ONE.subtract(riskValue)).add(constValue);
BigDecimal minPos = constValue.negate().divide(BigDecimal.ONE.subtract(riskValue).multiply(rate.getValue()), RoundingMode.HALF_UP);
BigDecimal minPos = BigDecimal.ZERO;
if (riskValue.compareTo(BigDecimal.ONE) != 0) {
minPos = constValue.negate().divide(BigDecimal.ONE.subtract(riskValue).multiply(rate.getValue()), RoundingMode.HALF_UP);
}
BigDecimal delta = posMoney.subtract(minPos);
if (delta.compareTo(BigDecimal.ZERO) >= 0 && delta.compareTo(quantity) <= 0) {
@ -295,7 +301,14 @@ public class KSRepLccValueReportBuilder extends CSVReportBuilder<EmptyParams, KS
if (!rates.isEmpty()) {
currencyRate = rates.iterator().next();
} else {
Collection<Currency> currency = currencyImdg.getCollectionObjectsByPredicate(
currencyImdg.predicateBuilder().equals("currencyCode", securitySymbol)
);
Long securityId = (long) securitySymbol.hashCode();
if (!currency.isEmpty()) securityId = currency.iterator().next().getId();
currencyRate = new Rates();
currencyRate.setCurrency(securitySymbol);
currencyRate.setCurrencyId(securityId);
currencyRate.setValue(BigDecimal.ONE);
}
currencyRates.put(securitySymbol, currencyRate);