SDF08 executor skip error sdf08

This commit is contained in:
ialbert 2023-08-01 16:53:32 +03:00
parent d0eef0b15f
commit b6e19b9f8d

View file

@ -33,6 +33,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.log.ExceptionUtils;
import ru.spcex.platform.utils.text.TextUtil; import ru.spcex.platform.utils.text.TextUtil;
import ru.spcex.platform.utils.validation.IValidator; import ru.spcex.platform.utils.validation.IValidator;
@ -118,6 +119,8 @@ public class Sdf08Executor extends AbstractExecutor<SDf08> {
Long generationIdForGroup = imdgProvider.getImdgIdGenerator().nextId(); Long generationIdForGroup = imdgProvider.getImdgIdGenerator().nextId();
result.setGenerationId(generationIdForGroup); result.setGenerationId(generationIdForGroup);
for (SDf08 sdf08 : sdf) { for (SDf08 sdf08 : sdf) {
Statement stmt = null;
try {
IValidator validator = sDf08Validator.apply(sdf08); IValidator validator = sDf08Validator.apply(sdf08);
Optional<EnumMessage> error = validator.tillFirstError(); Optional<EnumMessage> error = validator.tillFirstError();
Account account = validator.getStored(ValidationStored.Sdf08Account); Account account = validator.getStored(ValidationStored.Sdf08Account);
@ -141,8 +144,7 @@ public class Sdf08Executor extends AbstractExecutor<SDf08> {
// sdf02Imdg.insert(createErrorSdf02(sdf01, error.get(), generationIdForGroup)); // sdf02Imdg.insert(createErrorSdf02(sdf01, error.get(), generationIdForGroup));
continue; continue;
} }
stmt = createSdf08Statement(sdf08, account);
Statement stmt = createSdf08Statement(sdf08, account);
SDf09 sdf09New = createSuccessSdf09(sdf08, generationIdForGroup); //fixme тоже мб убрать SDf09 sdf09New = createSuccessSdf09(sdf08, generationIdForGroup); //fixme тоже мб убрать
sdf09Imdg.insert(sdf09New); sdf09Imdg.insert(sdf09New);
stmt.setOutSDfId(sdf09New.getId()); stmt.setOutSDfId(sdf09New.getId());
@ -158,8 +160,8 @@ public class Sdf08Executor extends AbstractExecutor<SDf08> {
if (reg.isPresent()) { if (reg.isPresent()) {
rgs = reg.get(); rgs = reg.get();
updateReg(stmt, rgs); updateReg(stmt, rgs);
Registry registryUnitB = findRegByUnit(company.getId(), account.getId(), stmt.getContract(), rgs, RegistryUnit.B).orElse(copyRegB(rgs)); Registry registryUnitB = findRegByUnit(company.getId(), account.getId(), stmt.getSecurityId(), stmt.getContract(), rgs, RegistryUnit.B).orElse(copyRegB(rgs));
Registry registryUnitF = findRegByUnit(company.getId(), account.getId(), stmt.getContract(), rgs, RegistryUnit.F).orElse(copyRegF(rgs, null)); //передаю null т.к. отнимется ниже по коду Registry registryUnitF = findRegByUnit(company.getId(), account.getId(), stmt.getSecurityId(), stmt.getContract(), rgs, RegistryUnit.F).orElse(copyRegF(rgs, null)); //передаю null т.к. отнимется ниже по коду
registryUnitF.setBalance(rgs.getBalance().subtract(registryUnitB.getBalance())); registryUnitF.setBalance(rgs.getBalance().subtract(registryUnitB.getBalance()));
registryUnitF.setUpdated(Instant.now()); registryUnitF.setUpdated(Instant.now());
if (registryUnitF.getId() == null) { if (registryUnitF.getId() == null) {
@ -191,6 +193,21 @@ public class Sdf08Executor extends AbstractExecutor<SDf08> {
stmt.setOperationStatus(OperationStatus.Rejected.getKey()); stmt.setOperationStatus(OperationStatus.Rejected.getKey());
statementImdg.update(stmt); statementImdg.update(stmt);
} }
} catch (Exception e) {
log.error("error for sdf08.id={} (statement {}) stacktrace {}",
sdf08.getId(),
stmt == null ? null : stmt.getId(),
ExceptionUtils.getStackTrace(e));
try {
if (stmt != null && stmt.getId() != null) {
log.debug("rejecting statement.id={}", stmt.getId());
stmt.setOperationStatus(OperationStatus.Rejected.getKey());
statementImdg.update(stmt);
}
} catch (Exception e2) {
log.error("error while rejecting statement.id={} stacktrace {}", stmt.getId(), ExceptionUtils.getStackTrace(e2));
}
}
} }
return result; return result;
} }
@ -352,7 +369,7 @@ public class Sdf08Executor extends AbstractExecutor<SDf08> {
return rgsF; return rgsF;
} }
private Optional<Registry> findRegByUnit(Long companyId, Long accountId, String contract, Registry registry, RegistryUnit unit) { private Optional<Registry> findRegByUnit(Long companyId, Long accountId, Long securityId, String contract, Registry registry, RegistryUnit unit) {
RegistryTradingParams p = new RegistryTradingParams( RegistryTradingParams p = new RegistryTradingParams(
IEnumKey.getEnumByKey(RegistryDesignation.class, registry.getRegistryDesignation()), IEnumKey.getEnumByKey(RegistryDesignation.class, registry.getRegistryDesignation()),
IEnumKey.getEnumByKey(RegistryInstrumentType.class, registry.getRegistryInstrumentType()), IEnumKey.getEnumByKey(RegistryInstrumentType.class, registry.getRegistryInstrumentType()),
@ -364,8 +381,8 @@ public class Sdf08Executor extends AbstractExecutor<SDf08> {
ImdgPredicate rgstrPredicate = pb.and(pb.sql(sql), ImdgPredicate rgstrPredicate = pb.and(pb.sql(sql),
pb.sql(sql), pb.sql(sql),
pb.equals("companyId", companyId), //fixme companyId? pb.equals("companyId", companyId), //fixme companyId?
pb.equals("accountId", accountId) pb.equals("accountId", accountId),
pb.equals("securityId", securityId)
); );
if (RegistryDesignation.D.equalsByKey(registry.getRegistryDesignation()) && !TextUtil.isEmpty(contract)) { if (RegistryDesignation.D.equalsByKey(registry.getRegistryDesignation()) && !TextUtil.isEmpty(contract)) {
rgstrPredicate = pb.and(rgstrPredicate, pb.equals("contract", contract)); rgstrPredicate = pb.and(rgstrPredicate, pb.equals("contract", contract));