ialbert 2025-11-28 18:34:43 +03:00
parent 4beff10362
commit 5b70542ff7

View file

@ -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;
@ -10,6 +9,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.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.event.Level;
@ -299,14 +299,9 @@ public class ExecutionFondComponent implements IExecutionUploadComponent {
eFond.setMarket(sTrades.getClassCode());
BigDecimal price = sTrades.getPrice();
if (InstrumentType.DGCT.equalsByKey(security.getInstrumentType())) {
DigitalCertificateSecurity dcs = (DigitalCertificateSecurity) security;
BigDecimal baseUnitSize = BigDecimal.valueOf(Optional.ofNullable(dcs.getBaseUnitSize()).orElse(0L));
price = safeBD(sTrades.getPrice())
.multiply(safeBD(dcs.getNominalValue()))
.multiply(baseUnitSize);
if (!InstrumentType.DGCT.equalsByKey(security.getInstrumentType())) {
eFond.setPrice(price);
}
eFond.setPrice(price);
eFond.setLots(sTrades.getQty());
eFond.setQuantity(sTrades.getQtyPcs());
{
@ -342,7 +337,20 @@ public class ExecutionFondComponent implements IExecutionUploadComponent {
eFond.setQuantity(qty);
BigDecimal settlementAmount = BigDecimal.ZERO;
if (InstrumentType.DGCT.equalsByKey(security.getInstrumentType())) {
settlementAmount = qty.multiply(eFond.getPrice()).setScale(2, RoundingMode.HALF_UP);
DigitalCertificateSecurity dcs = (DigitalCertificateSecurity) security;
BigDecimal baseUnitSize = BigDecimal.valueOf(Optional.ofNullable(dcs.getBaseUnitSize()).orElse(0L));
int precision;
if (listing != null && listing.getPrecision() != null) {
precision = listing.getPrecision().intValue();
} else {
precision = 2;
}
price = safeBD(sTrades.getPrice())
.multiply(safeBD(dcs.getNominalValue()))
.multiply(baseUnitSize)
.setScale(precision, RoundingMode.HALF_UP);
eFond.setPrice(price);
settlementAmount = qty.multiply(price).setScale(2, RoundingMode.HALF_UP);
} else if (InstrumentType.BOND.equalsByKey(security.getInstrumentType())) {
FixedIncomeSecurity fixedIncome = (FixedIncomeSecurity) security;
BigDecimal nominalValue;