This commit is contained in:
parent
e5d8dd7ddb
commit
dce6f9b7b8
1 changed files with 27 additions and 4 deletions
|
|
@ -1,5 +1,6 @@
|
|||
package ru.spcex.clearing.service.execution;
|
||||
|
||||
import static java.lang.String.format;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.time.Instant;
|
||||
|
|
@ -10,7 +11,6 @@ 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;
|
||||
|
|
@ -30,6 +30,7 @@ import ru.clearing.classes.statics.data.security.CurrencyPairSecurity;
|
|||
import ru.clearing.classes.statics.data.security.DigitalCertificateSecurity;
|
||||
import ru.clearing.classes.statics.data.security.MoneyMarketSecurity;
|
||||
import ru.clearing.classes.statics.data.security.Security;
|
||||
import ru.spcex.clearing.config.element.ClearingServiceSettings;
|
||||
import ru.spcex.clearing.error.ClearingError;
|
||||
import ru.spcex.clearing.error.ClearingException;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
|
|
@ -95,13 +96,15 @@ public class ExecutionCurrencyComponent implements IExecutionUploadComponent {
|
|||
private static final DateTimeFormatter contractFormatter = DateTimeFormatter.ofPattern("ddMMyy");
|
||||
private final Map<ExecUploadKey, ExecUploadCashInfo> cash = new HashMap<>();
|
||||
private final NotificationSender notifications;
|
||||
private final boolean valuation;
|
||||
|
||||
|
||||
@Autowired
|
||||
public ExecutionCurrencyComponent(ImdgProvider imdgProvider, Producer<String, Object> kafka,
|
||||
@Qualifier("kafkaSenderWithoutRequestInfo") KafkaSender kafkaSender,
|
||||
IMessageResolver msgResolver,
|
||||
NotificationSender notifications) {
|
||||
NotificationSender notifications,
|
||||
ClearingServiceSettings serviceSettings) {
|
||||
this.sTradeImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_STrades, STrades.class);
|
||||
this.executionCurrencyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionCurrency, ExecutionCurrency.class);
|
||||
this.listingImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Listing, Listing.class);
|
||||
|
|
@ -114,7 +117,7 @@ public class ExecutionCurrencyComponent implements IExecutionUploadComponent {
|
|||
this.imdgDigitCertSecurity = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_DigitalCertificateSecurity, DigitalCertificateSecurity.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();
|
||||
// resetTradingDay();
|
||||
this.idGen = imdgProvider.getImdgIdGenerator();
|
||||
this.notifications = notifications;
|
||||
|
|
@ -225,6 +228,7 @@ public class ExecutionCurrencyComponent implements IExecutionUploadComponent {
|
|||
}
|
||||
execsToInsert.put(newEC.getId(), newEC);
|
||||
//executionCurrencyImdg.insert(newEC);
|
||||
checkSettlementAmount(newEC, sTrd);
|
||||
sendNotification(newEC);
|
||||
} catch (ClearingException ce) {
|
||||
auditMessage(ce);
|
||||
|
|
@ -243,6 +247,16 @@ public class ExecutionCurrencyComponent implements IExecutionUploadComponent {
|
|||
}
|
||||
}
|
||||
|
||||
private void checkSettlementAmount(ExecutionCurrency newEC, STrades sTrd) {
|
||||
BigDecimal expectedSettlementAmount = sTrd.getValue().setScale(2, RoundingMode.HALF_UP);
|
||||
BigDecimal actualSettlementAmount = newEC.getSettlementAmount();
|
||||
if (expectedSettlementAmount.compareTo(actualSettlementAmount) != 0) {
|
||||
String comment = String.format("Для сделки %s объем сделки в ТС %s не совпадает с рассчитанным в КС %s",
|
||||
sTrd.getTradeNum(), sTrd.getValue(), newEC.getSettlementAmount());
|
||||
notifications.sendNotification(ObjectType.vfrs, comment, Priority.HIGH);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
protected void auditMessage(ClearingException ce) {
|
||||
String err = String.format("AUDIT error code %s: %s", ce.getEnumMsg(), ce.getMessage());
|
||||
|
|
@ -295,7 +309,16 @@ public class ExecutionCurrencyComponent implements IExecutionUploadComponent {
|
|||
// }
|
||||
eCurrency.setPrice(sTrades.getPrice());
|
||||
eCurrency.setLots(sTrades.getQty());
|
||||
eCurrency.setSettlementAmount(safeBD(sTrades.getValue()).setScale(2, RoundingMode.HALF_UP));
|
||||
if (valuation) {
|
||||
BigDecimal lotSize = listing != null ? safeBD(listing.getLotSize()) : BigDecimal.ONE;
|
||||
BigDecimal settlementAmount = safeBD(sTrades.getPrice())
|
||||
.multiply(safeBD(sTrades.getQty()))
|
||||
.multiply(lotSize)
|
||||
.setScale(2, RoundingMode.HALF_UP);
|
||||
eCurrency.setSettlementAmount(settlementAmount);
|
||||
} else {
|
||||
eCurrency.setSettlementAmount(safeBD(sTrades.getValue()).setScale(2, RoundingMode.HALF_UP));
|
||||
}
|
||||
if (listing != null && listing.getLotSize() != null && eCurrency.getLots() != null) {
|
||||
BigDecimal lots = eCurrency.getLots();
|
||||
BigDecimal listingLotSize = listing.getLotSize();
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue