SDF01 executor
This commit is contained in:
parent
fe18b289a3
commit
cd802139b0
1 changed files with 22 additions and 33 deletions
|
|
@ -36,6 +36,7 @@ import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder;
|
||||||
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
||||||
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
||||||
import ru.spcex.platform.utils.enumeration.IMessageResolver;
|
import ru.spcex.platform.utils.enumeration.IMessageResolver;
|
||||||
|
import ru.spcex.platform.utils.number.BigDecimalUtil;
|
||||||
import ru.spcex.platform.utils.validation.IValidator;
|
import ru.spcex.platform.utils.validation.IValidator;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
|
@ -47,6 +48,7 @@ import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class Sdf01Executor extends AbstractExecutor<SDf01> {
|
public class Sdf01Executor extends AbstractExecutor<SDf01> {
|
||||||
|
|
@ -143,23 +145,23 @@ public class Sdf01Executor extends AbstractExecutor<SDf01> {
|
||||||
updateReg(stmt, rgs);
|
updateReg(stmt, rgs);
|
||||||
registryImdg.update(rgs);
|
registryImdg.update(rgs);
|
||||||
};
|
};
|
||||||
Consumer<RegistryDesignation> create = (dsgn) -> {
|
Supplier<Registry> create = () -> {
|
||||||
Registry registry = createRegistryByStatement(stmt, company, account, dsgn);
|
Registry registry = createRegistryByStatement(stmt, company, account);
|
||||||
Registry registryF = registry.clone();
|
|
||||||
registryF.setRegistryUnit(RegistryUnit.F.getKey());
|
|
||||||
registryF.setRegistryCode(RegistryUtil.clearingCode(registryF));
|
|
||||||
registryF.setId(imdgProvider.getImdgIdGenerator().nextId());
|
|
||||||
Registry registryB = registry.clone();
|
|
||||||
registryB.setRegistryUnit(RegistryUnit.B.getKey());
|
|
||||||
registryB.setRegistryCode(RegistryUtil.clearingCode(registryB));
|
|
||||||
registryB.setId(imdgProvider.getImdgIdGenerator().nextId());
|
|
||||||
registryImdg.insert(registry);
|
registryImdg.insert(registry);
|
||||||
registryImdg.insert(registryF);
|
return registry;
|
||||||
registryImdg.insert(registryB);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
findReg(stmt, RegistryInstrumentType.M).ifPresentOrElse(update, () -> create.accept(RegistryDesignation.A));
|
Optional<Registry> reg = findReg(stmt);
|
||||||
findReg(stmt, RegistryInstrumentType.S).ifPresentOrElse(update, () -> create.accept(RegistryDesignation.D));
|
Registry regFinal;
|
||||||
|
if (reg.isPresent()) {
|
||||||
|
update.accept(reg.get());
|
||||||
|
regFinal = reg.get();
|
||||||
|
} else {
|
||||||
|
regFinal = create.get();
|
||||||
|
}
|
||||||
|
//todo
|
||||||
|
//1. stmt.setOperationStatus в зависимости от diffBalance = 0
|
||||||
|
//2. отправить notification на backend
|
||||||
stmt.setOperationStatus(OperationStatus.Executed.getKey());
|
stmt.setOperationStatus(OperationStatus.Executed.getKey());
|
||||||
} else {
|
} else {
|
||||||
stmt.setErrorCodeId(err.get().getSubject().getId()); // fixme ErrorText insert
|
stmt.setErrorCodeId(err.get().getSubject().getId()); // fixme ErrorText insert
|
||||||
|
|
@ -254,7 +256,7 @@ public class Sdf01Executor extends AbstractExecutor<SDf01> {
|
||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
private Registry createRegistryByStatement(Statement statement, Company company, Account account, RegistryDesignation designation) {
|
private Registry createRegistryByStatement(Statement statement, Company company, Account account) {
|
||||||
Registry rgs = new Registry();
|
Registry rgs = new Registry();
|
||||||
rgs.setCompanyId(statement.getAddresseeId());
|
rgs.setCompanyId(statement.getAddresseeId());
|
||||||
rgs.setTradingCode(company.getTradingCode());
|
rgs.setTradingCode(company.getTradingCode());
|
||||||
|
|
@ -264,16 +266,14 @@ public class Sdf01Executor extends AbstractExecutor<SDf01> {
|
||||||
rgs.setAccountId(account.getId());
|
rgs.setAccountId(account.getId());
|
||||||
rgs.setAccountType(account.getAccountType());
|
rgs.setAccountType(account.getAccountType());
|
||||||
rgs.setAccount(account.getAccount());
|
rgs.setAccount(account.getAccount());
|
||||||
rgs.setRegistryDesignation(designation.getKey());
|
rgs.setRegistryDesignation(RegistryDesignation.A.getKey());
|
||||||
rgs.setRegistryInstrumentType(RegistryInstrumentType.M.getKey());
|
rgs.setRegistryInstrumentType(RegistryInstrumentType.M.getKey());
|
||||||
|
|
||||||
ClearingAccount accountForStatement = clearingAccountImdg.getSingleObjectByID(statement.getAccountId());
|
ClearingAccount accountForStatement = clearingAccountImdg.getSingleObjectByID(statement.getAccountId());
|
||||||
if (accountForStatement != null) {
|
if (accountForStatement != null) {
|
||||||
rgs.setRegistryCapacity(accountForStatement.getClearingAccountType());
|
rgs.setRegistryCapacity(accountForStatement.getClearingAccountType());
|
||||||
}
|
}
|
||||||
rgs.setRegistryUnit(RegistryUnit.T.getKey());
|
rgs.setRegistryUnit(RegistryUnit.T.getKey());
|
||||||
rgs.setRegistryCode(RegistryUtil.clearingCode(rgs));
|
rgs.setRegistryCode(RegistryUtil.clearingCode(rgs));
|
||||||
|
|
||||||
Collection<TradingClearingRegistry> tcrsByAccount = tradingClearingRegistryImdg.getCollectionObjectsByFieldValues(Map.of(
|
Collection<TradingClearingRegistry> tcrsByAccount = tradingClearingRegistryImdg.getCollectionObjectsByFieldValues(Map.of(
|
||||||
"moneyAccountId", statement.getAccountId()
|
"moneyAccountId", statement.getAccountId()
|
||||||
));
|
));
|
||||||
|
|
@ -291,25 +291,14 @@ public class Sdf01Executor extends AbstractExecutor<SDf01> {
|
||||||
rgs.setSecuritySymbol(security.getSecuritySymbol());
|
rgs.setSecuritySymbol(security.getSecuritySymbol());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
InOutDirection inOutDirection = IEnumKey.getEnumByKey(InOutDirection.class, statement.getInOutDirection());
|
rgs.setCheckBalance(BigDecimalUtil.safeBD(statement.getAmount()));
|
||||||
//считаю balance при создании нулевым и исхожу из этого
|
rgs.setCheckBalance(rgs.getCheckBalance().negate());
|
||||||
//При добавлении (на базе изменения statement по sDf57):
|
|
||||||
//Если значение statement.inOutDirection=IN, то:
|
|
||||||
//= текущее значение registry.balance + statement.amount
|
|
||||||
//
|
|
||||||
//Если значение statement.inOutDirection=OUT, то:
|
|
||||||
//= текущее значение registry.balance - statement.amount
|
|
||||||
switch (inOutDirection) {
|
|
||||||
case in -> rgs.setBalance(statement.getAmount());
|
|
||||||
case out -> rgs.setBalance(statement.getAmount().negate());
|
|
||||||
}
|
|
||||||
rgs.setBalanceDimension(BalanceDimension.MONY.getKey()); //fixme ! смотри описание и ссылка на начало html'ки
|
rgs.setBalanceDimension(BalanceDimension.MONY.getKey()); //fixme ! смотри описание и ссылка на начало html'ки
|
||||||
//fixme !rgs.setSettlementCode();
|
//fixme !rgs.setSettlementCode();
|
||||||
rgs.setTradingDate(statement.getSettlementDate()); //fixme ! today ?
|
rgs.setTradingDate(statement.getSettlementDate()); //fixme ! today ?
|
||||||
rgs.setClearingDate(LocalDate.now());
|
rgs.setClearingDate(LocalDate.now());
|
||||||
//fixme rgs.setRefundDate();
|
//fixme rgs.setRefundDate();
|
||||||
//fixme rgs.setValueDate();
|
//fixme rgs.setValueDate();
|
||||||
rgs.setContract(statement.getContract());
|
|
||||||
//создается на базе stmt, companyCred, accountDeb
|
//создается на базе stmt, companyCred, accountDeb
|
||||||
rgs.setCounterPartyId(statement.getAddresseeId());
|
rgs.setCounterPartyId(statement.getAddresseeId());
|
||||||
rgs.setCreated(Instant.now());
|
rgs.setCreated(Instant.now());
|
||||||
|
|
@ -325,9 +314,9 @@ public class Sdf01Executor extends AbstractExecutor<SDf01> {
|
||||||
r.setUpdated(Instant.now());
|
r.setUpdated(Instant.now());
|
||||||
}
|
}
|
||||||
|
|
||||||
private Optional<Registry> findReg(Statement s, RegistryInstrumentType registryInstrumentType) {
|
private Optional<Registry> findReg(Statement s) {
|
||||||
RegistryTradingParams p = new RegistryTradingParams(
|
RegistryTradingParams p = new RegistryTradingParams(
|
||||||
RegistryDesignation.A, registryInstrumentType, RegistryCapacity.A, RegistryUnit.T
|
RegistryDesignation.A, RegistryInstrumentType.M, null, RegistryUnit.T
|
||||||
);
|
);
|
||||||
String sql = RegistryCodeSqlBuilder.getInstance(p).build();
|
String sql = RegistryCodeSqlBuilder.getInstance(p).build();
|
||||||
ImdgPredicateBuilder pb = registryImdg.predicateBuilder();
|
ImdgPredicateBuilder pb = registryImdg.predicateBuilder();
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue