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.IEnumKey;
|
||||
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;
|
||||
|
|
@ -47,6 +48,7 @@ import java.util.Map;
|
|||
import java.util.Optional;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
@Service
|
||||
public class Sdf01Executor extends AbstractExecutor<SDf01> {
|
||||
|
|
@ -143,23 +145,23 @@ public class Sdf01Executor extends AbstractExecutor<SDf01> {
|
|||
updateReg(stmt, rgs);
|
||||
registryImdg.update(rgs);
|
||||
};
|
||||
Consumer<RegistryDesignation> create = (dsgn) -> {
|
||||
Registry registry = createRegistryByStatement(stmt, company, account, dsgn);
|
||||
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());
|
||||
Supplier<Registry> create = () -> {
|
||||
Registry registry = createRegistryByStatement(stmt, company, account);
|
||||
registryImdg.insert(registry);
|
||||
registryImdg.insert(registryF);
|
||||
registryImdg.insert(registryB);
|
||||
return registry;
|
||||
};
|
||||
|
||||
findReg(stmt, RegistryInstrumentType.M).ifPresentOrElse(update, () -> create.accept(RegistryDesignation.A));
|
||||
findReg(stmt, RegistryInstrumentType.S).ifPresentOrElse(update, () -> create.accept(RegistryDesignation.D));
|
||||
Optional<Registry> reg = findReg(stmt);
|
||||
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());
|
||||
} else {
|
||||
stmt.setErrorCodeId(err.get().getSubject().getId()); // fixme ErrorText insert
|
||||
|
|
@ -254,7 +256,7 @@ public class Sdf01Executor extends AbstractExecutor<SDf01> {
|
|||
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();
|
||||
rgs.setCompanyId(statement.getAddresseeId());
|
||||
rgs.setTradingCode(company.getTradingCode());
|
||||
|
|
@ -264,16 +266,14 @@ public class Sdf01Executor extends AbstractExecutor<SDf01> {
|
|||
rgs.setAccountId(account.getId());
|
||||
rgs.setAccountType(account.getAccountType());
|
||||
rgs.setAccount(account.getAccount());
|
||||
rgs.setRegistryDesignation(designation.getKey());
|
||||
rgs.setRegistryDesignation(RegistryDesignation.A.getKey());
|
||||
rgs.setRegistryInstrumentType(RegistryInstrumentType.M.getKey());
|
||||
|
||||
ClearingAccount accountForStatement = clearingAccountImdg.getSingleObjectByID(statement.getAccountId());
|
||||
if (accountForStatement != null) {
|
||||
rgs.setRegistryCapacity(accountForStatement.getClearingAccountType());
|
||||
}
|
||||
rgs.setRegistryUnit(RegistryUnit.T.getKey());
|
||||
rgs.setRegistryCode(RegistryUtil.clearingCode(rgs));
|
||||
|
||||
Collection<TradingClearingRegistry> tcrsByAccount = tradingClearingRegistryImdg.getCollectionObjectsByFieldValues(Map.of(
|
||||
"moneyAccountId", statement.getAccountId()
|
||||
));
|
||||
|
|
@ -291,25 +291,14 @@ public class Sdf01Executor extends AbstractExecutor<SDf01> {
|
|||
rgs.setSecuritySymbol(security.getSecuritySymbol());
|
||||
}
|
||||
}
|
||||
InOutDirection inOutDirection = IEnumKey.getEnumByKey(InOutDirection.class, statement.getInOutDirection());
|
||||
//считаю balance при создании нулевым и исхожу из этого
|
||||
//При добавлении (на базе изменения 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.setCheckBalance(BigDecimalUtil.safeBD(statement.getAmount()));
|
||||
rgs.setCheckBalance(rgs.getCheckBalance().negate());
|
||||
rgs.setBalanceDimension(BalanceDimension.MONY.getKey()); //fixme ! смотри описание и ссылка на начало html'ки
|
||||
//fixme !rgs.setSettlementCode();
|
||||
rgs.setTradingDate(statement.getSettlementDate()); //fixme ! today ?
|
||||
rgs.setClearingDate(LocalDate.now());
|
||||
//fixme rgs.setRefundDate();
|
||||
//fixme rgs.setValueDate();
|
||||
rgs.setContract(statement.getContract());
|
||||
//создается на базе stmt, companyCred, accountDeb
|
||||
rgs.setCounterPartyId(statement.getAddresseeId());
|
||||
rgs.setCreated(Instant.now());
|
||||
|
|
@ -325,9 +314,9 @@ public class Sdf01Executor extends AbstractExecutor<SDf01> {
|
|||
r.setUpdated(Instant.now());
|
||||
}
|
||||
|
||||
private Optional<Registry> findReg(Statement s, RegistryInstrumentType registryInstrumentType) {
|
||||
private Optional<Registry> findReg(Statement s) {
|
||||
RegistryTradingParams p = new RegistryTradingParams(
|
||||
RegistryDesignation.A, registryInstrumentType, RegistryCapacity.A, RegistryUnit.T
|
||||
RegistryDesignation.A, RegistryInstrumentType.M, null, RegistryUnit.T
|
||||
);
|
||||
String sql = RegistryCodeSqlBuilder.getInstance(p).build();
|
||||
ImdgPredicateBuilder pb = registryImdg.predicateBuilder();
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue