This commit is contained in:
parent
4a31317f85
commit
1940d47344
2 changed files with 17 additions and 3 deletions
|
|
@ -66,6 +66,7 @@ public class KSRepLccValueReport {
|
|||
|
||||
@CsvBindByName(column = "VALUE")
|
||||
@CsvBindByPosition(position = 12)
|
||||
@CsvNumber(value = "#0.00", writeFormat = "#0.00")
|
||||
private BigDecimal value;
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue