SDF57 обработка добавил логи

This commit is contained in:
ialbert 2023-06-27 17:56:42 +03:00
parent 864f64bba3
commit d52e335174

View file

@ -26,6 +26,7 @@ import ru.spcex.clearing.service.LoggingService;
import ru.spcex.clearing.service.model.Result;
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.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
@ -130,6 +131,7 @@ public class Sdf57Executor extends AbstractExecutor<SDf57> {
Result result = new Result();
Long generationIdForGroup = imdgProvider.getImdgIdGenerator().nextId();
result.setGenerationId(generationIdForGroup);
log.info("SDF01 execution: sdf57 number={}, groupId={}", sdf.size(), sdf.stream().findFirst().map(SDf57::getGenerationId).orElse(null));
for (SDf57 sdf57 : sdf) {
IValidator validator = sDf57Validator.apply(sdf57);
Optional<EnumMessage> error = validator.tillFirstError();
@ -150,11 +152,18 @@ public class Sdf57Executor extends AbstractExecutor<SDf57> {
Account accountDeb = validator.getStored(ValidationStored.Sdf57AccountDeb);
Company companyCred = validator.getStored(ValidationStored.Sdf57CompanyCred);//получатель
Account accountCred = validator.getStored(ValidationStored.Sdf57AccountCred);
log.debug("companyDeb.id={}, accountDeb.id={}, companyCred.id={}, accountCred.id={}",
companyDeb != null ? companyDeb.getId() : null,
accountDeb != null ? accountDeb.getId() : null,
companyCred != null ? companyCred.getId() : null,
accountCred != null ? accountCred.getId() : null);
//адресат CREDIT / владелец DEBIT
Optional<Statement> statementDeb = createStatementIfNeeded.apply(companyDeb, accountDeb, InOutDirection.out);
//адресат DEBIT / владелец CREDIT
Optional<Statement> statementCred = createStatementIfNeeded.apply(companyCred, accountCred, InOutDirection.in);
log.debug("created statementDeb.id={}, statementCred.id={}",
statementDeb.map(SpcexObjectBase::getId).orElse(null),
statementCred.map(SpcexObjectBase::getId).orElse(null));
Consumer<StmtCmpAcc> createRegistryIfNeeded = stmtCmpAcc -> {
Statement stmt = stmtCmpAcc.statement();
@ -165,6 +174,7 @@ public class Sdf57Executor extends AbstractExecutor<SDf57> {
Optional<EnumMessage> err = validateActiveness(company, account);
if (err.isEmpty()) {
findRegByDesignation(stmt, RegistryDesignation.A).ifPresentOrElse(rgs -> {
log.debug("stmt.id={}, found AM*T.id={}, updating...", stmt.getId(), rgs.getId());
updateReg(stmt, rgs);
//добавил создание если не найдены
Registry registryUnitB = findRegByUnit(stmt, rgs, RegistryUnit.B).orElse(copyRegB(rgs));
@ -174,14 +184,23 @@ public class Sdf57Executor extends AbstractExecutor<SDf57> {
//registry F всегда меняется
if (registryUnitF.getId() == null) {
registryImdg.insert(registryUnitF);
log.debug("stmt.id={}, new AM*F.id={}", stmt.getId(), registryUnitF.getId());
} else {
registryImdg.update(registryUnitF);
log.debug("stmt.id={}, updated AM*F.id={}", stmt.getId(), registryUnitF.getId());
}
//нужно сохранить registry B только если его не было
if (registryUnitB.getId() == null) {
registryImdg.insert(registryUnitB);
log.debug("stmt.id={}, new AM*B.id={}", stmt.getId(), registryUnitB.getId());
}
registryImdg.update(rgs);
log.debug("stmt.id={}, updated AM*T.id={}: balance {}/debit {}/ credit {}",
stmt.getId(),
rgs.getId(),
rgs.getBalance(),
rgs.getDebit(),
rgs.getCredit());
}, () -> {
Registry registry = createRegistryByStatement(stmt, company, account, RegistryDesignation.A);
Registry registryB = copyRegB(registry);
@ -190,6 +209,11 @@ public class Sdf57Executor extends AbstractExecutor<SDf57> {
registryImdg.insert(registry);
registryImdg.insert(registryF);
registryImdg.insert(registryB);
log.debug("stmt.id={}, new AM*T.id={}, new AM*F.id={}, new AM*B.id={}",
stmt.getId(),
registry.getId(),
registryF.getId(),
registryB.getId());
});
InOutDirection direction = IEnumKey.getEnumByKey(InOutDirection.class, stmt.getInOutDirection());
if (!StringUtils.isEmpty(sdf57.getSpecif()) && pattern.matcher(sdf57.getSpecif()).find() && InOutDirection.in.equals(direction)) {
@ -198,14 +222,25 @@ public class Sdf57Executor extends AbstractExecutor<SDf57> {
rgs.setBalance(safeBD(rgs.getBalance()).add(safeBD(stmt.getAmount())));
rgs.setUpdated(Instant.now());
registryImdg.update(rgs);
log.debug("stmt.id={}, sdf57.specif={} updated DM*T.id={}",
stmt.getId(),
sdf57.getSpecif(),
rgs.getId());
},
() -> findRegByDesignation(stmt, RegistryDesignation.O).ifPresent(rgs -> {
Registry registryD = copyRegD(rgs);
registryImdg.insert(registryD);
log.debug("stmt.id={}, sdf57.specif={} new DM*T.id={}",
stmt.getId(),
sdf57.getSpecif(),
rgs.getId());
}));
}
stmt.setOperationStatus(OperationStatus.Executed.getKey());
statementImdg.update(stmt);
log.debug("stmt.id={} status -> {}", stmt.getId(), OperationStatus.Executed.getKey());
} else {
log.debug("statement.id={} activness validation failed {}", stmt.getId(), messageResolver.resolve(err.get()));
stmt.setErrorCodeId(err.get().getSubject().getId()); // fixme ErrorText insert
stmt.setOperationStatus(OperationStatus.Rejected.getKey());
statementImdg.update(stmt);