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")
|
@CsvBindByName(column = "VALUE")
|
||||||
@CsvBindByPosition(position = 12)
|
@CsvBindByPosition(position = 12)
|
||||||
|
@CsvNumber(value = "#0.00", writeFormat = "#0.00")
|
||||||
private BigDecimal value;
|
private BigDecimal value;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import org.springframework.stereotype.Component;
|
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.registry.Registry;
|
||||||
import ru.clearing.classes.statics.data.security.Rates;
|
import ru.clearing.classes.statics.data.security.Rates;
|
||||||
import ru.clearing.classes.statics.data.security.RiskParameter;
|
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> {
|
public class KSRepLccValueReportBuilder extends CSVReportBuilder<EmptyParams, KSRepLccValueReport> {
|
||||||
private final Imdg<Registry> registryImdg;
|
private final Imdg<Registry> registryImdg;
|
||||||
private final Imdg<Rates> ratesImdg;
|
private final Imdg<Rates> ratesImdg;
|
||||||
|
private final Imdg<Currency> currencyImdg;
|
||||||
private final Imdg<RiskParameter> riskParameterImdg;
|
private final Imdg<RiskParameter> riskParameterImdg;
|
||||||
private final Imdg<CurrencyPairDictionary> currencyPairDictionaryImdg;
|
private final Imdg<CurrencyPairDictionary> currencyPairDictionaryImdg;
|
||||||
|
|
||||||
|
|
@ -47,6 +49,7 @@ public class KSRepLccValueReportBuilder extends CSVReportBuilder<EmptyParams, KS
|
||||||
ratesImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Rates, Rates.class);
|
ratesImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Rates, Rates.class);
|
||||||
riskParameterImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_RiskParameter, RiskParameter.class);
|
riskParameterImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_RiskParameter, RiskParameter.class);
|
||||||
currencyPairDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CurrencyPairDictionary, CurrencyPairDictionary.class);
|
currencyPairDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CurrencyPairDictionary, CurrencyPairDictionary.class);
|
||||||
|
currencyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Currency, Currency.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -103,6 +106,7 @@ public class KSRepLccValueReportBuilder extends CSVReportBuilder<EmptyParams, KS
|
||||||
Map<String, Rates> currencyRates = new HashMap<>();
|
Map<String, Rates> currencyRates = new HashMap<>();
|
||||||
LocalDateTime nowTime = LocalDateTime.now();
|
LocalDateTime nowTime = LocalDateTime.now();
|
||||||
for (Map.Entry<String, List<Registry>> entryTKR : groupedByTKR.entrySet()) {
|
for (Map.Entry<String, List<Registry>> entryTKR : groupedByTKR.entrySet()) {
|
||||||
|
currencyRates.clear();
|
||||||
try {
|
try {
|
||||||
String tkr = entryTKR.getKey();
|
String tkr = entryTKR.getKey();
|
||||||
List<Registry> registriesForTKR = entryTKR.getValue();
|
List<Registry> registriesForTKR = entryTKR.getValue();
|
||||||
|
|
@ -236,7 +240,7 @@ public class KSRepLccValueReportBuilder extends CSVReportBuilder<EmptyParams, KS
|
||||||
BigDecimal sValueExt = BigDecimal.ZERO;
|
BigDecimal sValueExt = BigDecimal.ZERO;
|
||||||
BigDecimal m0ValueExt = BigDecimal.ZERO;
|
BigDecimal m0ValueExt = BigDecimal.ZERO;
|
||||||
for (Rates currRate : currencyRates.values()) {
|
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());
|
BigDecimal value = posMoneys.get(currRate.getCurrencyId()).multiply(currRate.getValue());
|
||||||
sValueExt = sValueExt.add(value);
|
sValueExt = sValueExt.add(value);
|
||||||
m0ValueExt = m0ValueExt.add(value.multiply(risk.get(currRate.getCurrencyId()).getValue()));
|
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);
|
constValue = sValueExt.subtract(m0ValueExt);
|
||||||
BigDecimal posMoney = posMoneys.get(rate.getCurrencyId());
|
BigDecimal posMoney = posMoneys.get(rate.getCurrencyId());
|
||||||
BigDecimal riskValue = risk.get(rate.getCurrencyId()).getValue();
|
BigDecimal riskValue = risk.get(rate.getCurrencyId()).getValue();
|
||||||
BigDecimal NPRExt = posMoney.multiply(rate.getValue()).multiply(BigDecimal.ONE.subtract(riskValue)).add(constValue);
|
BigDecimal minPos = BigDecimal.ZERO;
|
||||||
BigDecimal minPos = constValue.negate().divide(BigDecimal.ONE.subtract(riskValue).multiply(rate.getValue()), RoundingMode.HALF_UP);
|
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);
|
BigDecimal delta = posMoney.subtract(minPos);
|
||||||
if (delta.compareTo(BigDecimal.ZERO) >= 0 && delta.compareTo(quantity) <= 0) {
|
if (delta.compareTo(BigDecimal.ZERO) >= 0 && delta.compareTo(quantity) <= 0) {
|
||||||
|
|
@ -295,7 +301,14 @@ public class KSRepLccValueReportBuilder extends CSVReportBuilder<EmptyParams, KS
|
||||||
if (!rates.isEmpty()) {
|
if (!rates.isEmpty()) {
|
||||||
currencyRate = rates.iterator().next();
|
currencyRate = rates.iterator().next();
|
||||||
} else {
|
} 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 = new Rates();
|
||||||
|
currencyRate.setCurrency(securitySymbol);
|
||||||
|
currencyRate.setCurrencyId(securityId);
|
||||||
currencyRate.setValue(BigDecimal.ONE);
|
currencyRate.setValue(BigDecimal.ONE);
|
||||||
}
|
}
|
||||||
currencyRates.put(securitySymbol, currencyRate);
|
currencyRates.put(securitySymbol, currencyRate);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue