ialbert 2024-02-09 18:21:33 +03:00
parent f64910154c
commit 960e4ffab0

View file

@ -1,5 +1,18 @@
package ru.spcex.clearing.service.executors;
import java.math.BigDecimal;
import java.time.Instant;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -39,7 +52,28 @@ import ru.spcex.clearing.service.schedule.TradingTimeService;
import ru.spcex.clearing.service.validation.ValidationStored;
import ru.spcex.clearing.session.stage.util.RegistryUtil;
import ru.spcex.platform.classes.base.SpcexObjectBase;
import ru.spcex.platform.enumeration.*;
import ru.spcex.platform.enumeration.AccountType;
import ru.spcex.platform.enumeration.BalanceDimension;
import ru.spcex.platform.enumeration.CurrencyCode;
import ru.spcex.platform.enumeration.InOutDirection;
import ru.spcex.platform.enumeration.InOutSDfType;
import ru.spcex.platform.enumeration.ObjectType;
import ru.spcex.platform.enumeration.OperationStatus;
import ru.spcex.platform.enumeration.Priority;
import ru.spcex.platform.enumeration.RegistryCapacity;
import ru.spcex.platform.enumeration.RegistryDesignation;
import ru.spcex.platform.enumeration.RegistryInstrumentType;
import ru.spcex.platform.enumeration.RegistryStatus;
import ru.spcex.platform.enumeration.RegistryTradingParams;
import ru.spcex.platform.enumeration.RegistryUnit;
import ru.spcex.platform.enumeration.Section;
import ru.spcex.platform.enumeration.Sender;
import ru.spcex.platform.enumeration.SessionStatus;
import ru.spcex.platform.enumeration.SessionType;
import ru.spcex.platform.enumeration.SpecifFlag;
import ru.spcex.platform.enumeration.StatementType;
import ru.spcex.platform.enumeration.Task;
import ru.spcex.platform.enumeration.WorkflowStatus;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
@ -51,21 +85,6 @@ import ru.spcex.platform.utils.enumeration.IMessageResolver;
import ru.spcex.platform.utils.log.ExceptionUtils;
import ru.spcex.platform.utils.text.TextUtil;
import ru.spcex.platform.utils.validation.IValidator;
import java.math.BigDecimal;
import java.time.Instant;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import static ru.spcex.platform.enumeration.RegistryTradingParams.D__V;
import static ru.spcex.platform.enumeration.RegistryTradingParams.OM_T;
import static ru.spcex.platform.utils.number.BigDecimalUtil.safeBD;
@ -327,7 +346,7 @@ public class Sdf57Executor extends AbstractExecutor<SDf57> {
om_t.getId(),
registryD.getId());
sessionIsNeededFlag.set(true);
} else if (tm_tFound.isPresent()) {
} else if (tm_tFound.isPresent() && safeBD(stmt.getAmount()).compareTo(safeBD(tm_tFound.get().getBalance())) == 0) {
Optional<Registry> dm_xFound = RegistrySearch.builder(registryImdg)
.rgsCode(RegistryTradingParams.DM_X)
.companyId(company.getId())
@ -357,6 +376,12 @@ public class Sdf57Executor extends AbstractExecutor<SDf57> {
dm_x.getId());
sessionIsNeededFlag.set(true);
}
} else if (tm_tFound.isPresent()) {
log.debug("skipping DM_X creation for stmt.id={} contract {}; " +
"TM_T.id={} TM_T.balance[{}] != Statement.amount[{}]",
stmt.getId(), stmt.getContract(),
tm_tFound.get().getId(), tm_tFound.get().getBalance(), stmt.getAmount()
);
}
}
stmt.setOperationStatus(OperationStatus.Executed.getKey());