This commit is contained in:
parent
960e4ffab0
commit
4d7a2ebbf7
2 changed files with 53 additions and 32 deletions
|
|
@ -1,5 +1,12 @@
|
|||
package ru.spcex.clearing.service.executors;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.Instant;
|
||||
import java.time.LocalDate;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Optional;
|
||||
import java.util.function.Function;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
|
@ -10,6 +17,7 @@ import ru.clearing.classes.statics.data.company.Company;
|
|||
import ru.clearing.classes.statics.data.registry.Registry;
|
||||
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
|
||||
import ru.clearing.classes.statics.data.sdf.SDf20;
|
||||
import ru.clearing.classes.statics.data.sdf.SDf21;
|
||||
import ru.clearing.classes.statics.data.security.Security;
|
||||
import ru.clearing.classes.statics.data.statement.Statement;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
|
|
@ -24,28 +32,29 @@ import ru.spcex.clearing.service.registry.AssetTBFProcessing;
|
|||
import ru.spcex.clearing.service.registry.RegistryManager;
|
||||
import ru.spcex.clearing.service.validation.ValidationStored;
|
||||
import ru.spcex.clearing.session.stage.util.RegistryUtil;
|
||||
import ru.spcex.platform.enumeration.*;
|
||||
import ru.spcex.platform.enumeration.InOutDirection;
|
||||
import ru.spcex.platform.enumeration.InOutSDfType;
|
||||
import ru.spcex.platform.enumeration.OperationCode;
|
||||
import ru.spcex.platform.enumeration.OperationStatus;
|
||||
import ru.spcex.platform.enumeration.RegistryDesignation;
|
||||
import ru.spcex.platform.enumeration.RegistryStatus;
|
||||
import ru.spcex.platform.enumeration.RegistryUnit;
|
||||
import ru.spcex.platform.enumeration.Sender;
|
||||
import ru.spcex.platform.enumeration.StatementType;
|
||||
import ru.spcex.platform.imdg.api.Imdg;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
||||
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
||||
import ru.spcex.platform.utils.enumeration.IMessageResolver;
|
||||
import ru.spcex.platform.utils.number.BigDecimalUtil;
|
||||
import ru.spcex.platform.utils.validation.IValidator;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.Instant;
|
||||
import java.time.LocalDate;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Optional;
|
||||
import java.util.function.Function;
|
||||
|
||||
import static ru.spcex.platform.utils.number.BigDecimalUtil.safeBD;
|
||||
|
||||
@Service
|
||||
public class Sdf20Executor {
|
||||
private final Logger log = LoggerFactory.getLogger(getClass());
|
||||
private final Imdg<SDf20> sDf20Imdg;
|
||||
private final Imdg<SDf21> sDf21Imdg;
|
||||
private final Imdg<Registry> rgsImdg;
|
||||
private final Imdg<Statement> stmtImdg;
|
||||
private final Function<SDf20, IValidator> validation;
|
||||
|
|
@ -62,6 +71,7 @@ public class Sdf20Executor {
|
|||
this.sDf20Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf20, SDf20.class);
|
||||
this.rgsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
|
||||
this.stmtImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Statement, Statement.class);
|
||||
this.sDf21Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf21, SDf21.class);
|
||||
this.validation = validation;
|
||||
this.msgRslv = msgRslv;
|
||||
this.kafka = kafka;
|
||||
|
|
@ -134,27 +144,39 @@ public class Sdf20Executor {
|
|||
ds_i.setContract(sDf20.getInDocument());
|
||||
ds_i.setRegistryStatus(RegistryStatus.OK.getKey());
|
||||
ds_i.setUpdated(now);
|
||||
as_t.setBalance(safeBD(as_t.getBalance()).add(quantity));
|
||||
if (direction.equals(InOutDirection.in)) {
|
||||
as_t.setCredit(safeBD(as_t.getCredit()).add(quantity.abs()));
|
||||
} else {
|
||||
as_t.setDebit(safeBD(as_t.getDebit()).add(quantity.abs()));
|
||||
}
|
||||
as_t.setCheckBalance(BigDecimalUtil.parseLeadingZeroes(sDf20.getCloseBalance()));
|
||||
as_t.setUpdated(now);
|
||||
rgsImdg.update(as_t);
|
||||
rgsImdg.update(ds_i);
|
||||
assetsMng.process(assets.a__b(), assets.a__t(), assets.a__f(), BigDecimal.ZERO);
|
||||
ImdgPredicateBuilder pb = sDf21Imdg.predicateBuilder();
|
||||
SDf21 sdf21 = sDf21Imdg.getFirstObjectByPredicate(
|
||||
pb.equals("transactionNumber", sDf20.getTransactionNumber())
|
||||
);
|
||||
if (sdf21 == null) {
|
||||
as_t.setBalance(safeBD(as_t.getBalance()).add(quantity));
|
||||
if (direction.equals(InOutDirection.in)) {
|
||||
as_t.setCredit(safeBD(as_t.getCredit()).add(quantity.abs()));
|
||||
} else {
|
||||
as_t.setDebit(safeBD(as_t.getDebit()).add(quantity.abs()));
|
||||
}
|
||||
as_t.setCheckBalance(BigDecimalUtil.parseLeadingZeroes(sDf20.getCloseBalance()));
|
||||
as_t.setUpdated(now);
|
||||
rgsImdg.update(as_t);
|
||||
assetsMng.process(assets.a__b(), assets.a__t(), assets.a__f(), BigDecimal.ZERO);
|
||||
|
||||
//statement recfree in
|
||||
//statement delfree out
|
||||
Statement statement = createStatement(cmp.getId(), acc, quantity, sDf20.getId(), sDf20.getTransactionNumber(), security.getId());
|
||||
stmtImdg.insert(statement);
|
||||
log.debug("sdf20.id={}, processing as_t.id={}, as_f.id={}, as_b.id={}, ds_t.id={}. statement.id={}",
|
||||
//statement recfree in
|
||||
//statement delfree out
|
||||
Statement statement = createStatement(cmp.getId(), acc, quantity, sDf20.getId(), sDf20.getTransactionNumber(), security.getId());
|
||||
stmtImdg.insert(statement);
|
||||
log.debug("sdf20.id={}, processing as_t.id={}, as_f.id={}, as_b.id={}, ds_t.id={}. statement.id={}",
|
||||
sDf20.getId(),
|
||||
assets.a__t().getId(), assets.a__f().getId(), assets.a__b().getId(),
|
||||
ds_i.getId(),
|
||||
statement.getId());
|
||||
} else {
|
||||
log.debug("sdf20.id={}, found sdf21.id={} by transactionNumber={}. skipping to gateway request",
|
||||
sDf20.getId(),
|
||||
sdf21.getId(),
|
||||
sDf20.getTransactionNumber());
|
||||
assetsMng.process(assets.a__b(), assets.a__t(), assets.a__f(), BigDecimal.ZERO);
|
||||
}
|
||||
//только при зачислении на 20 и 21 идет запрос в gateway в Торговую систему
|
||||
if (InOutDirection.in.equals(direction)) {
|
||||
Collection<AssetOperationRequest> requests = new ArrayList<>();
|
||||
|
|
|
|||
|
|
@ -1,5 +1,8 @@
|
|||
package ru.spcex.clearing.service.validation;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Collection;
|
||||
import java.util.Optional;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import ru.clearing.classes.statics.data.account.Account;
|
||||
|
|
@ -19,10 +22,6 @@ import ru.spcex.platform.utils.enumeration.EnumMessage;
|
|||
import ru.spcex.platform.utils.text.TextUtil;
|
||||
import ru.spcex.platform.utils.validation.IValidationRule;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Collection;
|
||||
import java.util.Optional;
|
||||
|
||||
public enum Sdf21ValidationRule implements IValidationRule<ImdgValidationContext<SDf21>> {
|
||||
|
||||
AccountPresent() {
|
||||
|
|
@ -58,9 +57,9 @@ public enum Sdf21ValidationRule implements IValidationRule<ImdgValidationContext
|
|||
} else if (OperationCode.RECFREE.equalsByKey(sdf21.getOperationCode())) {
|
||||
prdct = pb.and(prdct, pb.greatEqual("balance", BigDecimal.ZERO));
|
||||
}
|
||||
Registry ds_t = rgsImdg.getFirstObjectByPredicate(prdct);
|
||||
if (ds_t != null) {
|
||||
log.debug("sdf21.id={} found DS*T.id={}", sdf21.getId(), ds_t.getId());
|
||||
Registry ds_i = rgsImdg.getFirstObjectByPredicate(prdct);
|
||||
if (ds_i != null) {
|
||||
log.debug("sdf21.id={} found DS*I.id={}", sdf21.getId(), ds_i.getId());
|
||||
return of(ClearingError.SuchRecordAlreadyExists);
|
||||
}
|
||||
return empty();
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue