This commit is contained in:
parent
ddcb0f2619
commit
9276156e1a
1 changed files with 28 additions and 2 deletions
|
|
@ -1,6 +1,5 @@
|
|||
package ru.spcex.clearing.service.execution;
|
||||
|
||||
import static java.lang.String.format;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.time.Instant;
|
||||
|
|
@ -11,6 +10,7 @@ import java.util.Collection;
|
|||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import static java.lang.String.format;
|
||||
import org.apache.kafka.clients.producer.Producer;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
|
@ -24,6 +24,7 @@ import ru.clearing.classes.statics.data.execution.ExecutionCurrency;
|
|||
import ru.clearing.classes.statics.data.instrument.issue.EquitySecurity;
|
||||
import ru.clearing.classes.statics.data.instrument.issue.FixedIncomeSecurity;
|
||||
import ru.clearing.classes.statics.data.misc.Listing;
|
||||
import ru.clearing.classes.statics.data.misc.Market;
|
||||
import ru.clearing.classes.statics.data.misc.STrades;
|
||||
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
|
||||
import ru.clearing.classes.statics.data.security.CurrencyPairSecurity;
|
||||
|
|
@ -44,6 +45,7 @@ import ru.spcex.clearing.service.validation.strades.CompanyByTradingCodeCashingV
|
|||
import ru.spcex.clearing.service.validation.strades.STradesSecurityPresentValidationRule;
|
||||
import ru.spcex.clearing.service.validation.strades.TcrByCodeAndCmpIsActiveCashingValidationRule;
|
||||
import ru.spcex.clearing.validation.common.rules.FieldNotBlankRequiredRule;
|
||||
import ru.spcex.platform.enumeration.MarketType;
|
||||
import ru.spcex.platform.enumeration.ObjectType;
|
||||
import ru.spcex.platform.enumeration.Priority;
|
||||
import ru.spcex.platform.enumeration.Section;
|
||||
|
|
@ -64,6 +66,7 @@ import ru.spcex.platform.utils.enumeration.IEnumKey;
|
|||
import ru.spcex.platform.utils.enumeration.IMessageResolver;
|
||||
import ru.spcex.platform.utils.log.ExceptionUtils;
|
||||
import static ru.spcex.platform.utils.number.BigDecimalUtil.safeBD;
|
||||
import static ru.spcex.platform.utils.number.BigDecimalUtil.safeSumBD;
|
||||
import ru.spcex.platform.utils.time.TimeUtil;
|
||||
import ru.spcex.platform.utils.validation.IValidator;
|
||||
import ru.spcex.platform.utils.validation.ValidatorImpl;
|
||||
|
|
@ -85,6 +88,7 @@ public class ExecutionCurrencyComponent implements IExecutionUploadComponent {
|
|||
private final Imdg<EquitySecurity> equitySecurityImdg;
|
||||
private final Imdg<Company> cmpImdg;
|
||||
private final Imdg<TradingClearingRegistry> tcrImdg;
|
||||
private final Imdg<Market> mrktImdg;
|
||||
private final ExecCurrCompCash valCash = new ExecCurrCompCash();
|
||||
private final ImdgId idGen;
|
||||
private final Imdg<Listing> listingImdg;
|
||||
|
|
@ -115,6 +119,7 @@ public class ExecutionCurrencyComponent implements IExecutionUploadComponent {
|
|||
this.fixedIncomeSecurityImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, FixedIncomeSecurity.class, null);
|
||||
this.equitySecurityImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_EquitySecurity, EquitySecurity.class, null);
|
||||
this.imdgDigitCertSecurity = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_DigitalCertificateSecurity, DigitalCertificateSecurity.class, null);
|
||||
this.mrktImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_Market, Market.class, null);
|
||||
this.cmpImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_Company, Company.class, null);
|
||||
this.tcrImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class, null);
|
||||
this.valuation = serviceSettings.getTrade().getValuation();
|
||||
|
|
@ -309,7 +314,17 @@ public class ExecutionCurrencyComponent implements IExecutionUploadComponent {
|
|||
// }
|
||||
eCurrency.setPrice(sTrades.getPrice());
|
||||
eCurrency.setLots(sTrades.getQty());
|
||||
if (valuation) {
|
||||
Market market = Optional.of(marketCashingPredicate(eCurrency.getMarket()))
|
||||
.map(mrktImdg::getSingleObjectByPredicate)
|
||||
.orElse(null);
|
||||
if (valuation && market != null && MarketType.SCSW.equalsByKey(market.getMarketType())) {
|
||||
BigDecimal lotSize = listing != null ? safeBD(listing.getLotSize()) : BigDecimal.ONE;
|
||||
BigDecimal settlementAmount = safeSumBD(sTrades.getPrice(), sTrades.getPrice2())
|
||||
.multiply(safeBD(sTrades.getQty()))
|
||||
.multiply(lotSize)
|
||||
.setScale(2, RoundingMode.HALF_UP);
|
||||
eCurrency.setSettlementAmount(settlementAmount);
|
||||
} else if (valuation) {
|
||||
BigDecimal lotSize = listing != null ? safeBD(listing.getLotSize()) : BigDecimal.ONE;
|
||||
BigDecimal settlementAmount = safeBD(sTrades.getPrice())
|
||||
.multiply(safeBD(sTrades.getQty()))
|
||||
|
|
@ -376,6 +391,15 @@ public class ExecutionCurrencyComponent implements IExecutionUploadComponent {
|
|||
return eCurrency;
|
||||
}
|
||||
|
||||
private ImdgPredicate marketCashingPredicate(String code) {
|
||||
ImdgPredicateBuilder pb = mrktImdg.predicateBuilder();
|
||||
return pb.cashed(
|
||||
pb.equals("code", code),
|
||||
valCash.mrktCash,
|
||||
code
|
||||
);
|
||||
}
|
||||
|
||||
private Optional<Long> stripDaysFromSecCode(String secCode) {
|
||||
if (secCode == null || secCode.length() <= 7) {
|
||||
return Optional.empty();
|
||||
|
|
@ -471,6 +495,7 @@ public class ExecutionCurrencyComponent implements IExecutionUploadComponent {
|
|||
private final CashV2ByString<Security> digitCertSecCash;
|
||||
private final CashV2ByString<Company> cmpCash;
|
||||
private final CashV2ByIdAndString<TradingClearingRegistry> tcrCash;
|
||||
private final CashV2ByString<Market> mrktCash;
|
||||
|
||||
public ExecCurrCompCash() {
|
||||
this.cashes = new ArrayList<>();
|
||||
|
|
@ -481,6 +506,7 @@ public class ExecutionCurrencyComponent implements IExecutionUploadComponent {
|
|||
this.cmpCash = add(new CashV2ByString<>("cmpCash", Company::getTradingCode));
|
||||
this.tcrCash = add(new CashV2ByIdAndString<>("tcrCash", tcr -> new CashV2ByIdAndString.CustomKey(tcr.getCompanyId(), tcr.getCode())));
|
||||
this.digitCertSecCash = add(new CashV2ByString<>("digitCertSecCash", Security::getSecuritySymbol));
|
||||
this.mrktCash = add(new CashV2ByString<>("mrktCash", Market::getCode));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue