SdDf57Executor: фикс поисков регистров B и F в случае инфо счета

This commit is contained in:
ialbert 2023-07-20 11:48:21 +03:00
parent f5d7a7b127
commit a14ee21fd6

View file

@ -188,8 +188,8 @@ public class Sdf57Executor extends AbstractExecutor<SDf57> {
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));
Registry registryUnitF = findRegByUnit(stmt, rgs, RegistryUnit.F).orElse(copyRegF(rgs, null)); //передаю null т.к. отнимется ниже по коду
Registry registryUnitB = findRegByUnit(company.getId(), account.getId(), 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 т.к. отнимется ниже по коду
registryUnitF.setBalance(rgs.getBalance().subtract(registryUnitB.getBalance()));
registryUnitF.setUpdated(Instant.now());
//registry F всегда меняется
@ -548,7 +548,7 @@ public class Sdf57Executor extends AbstractExecutor<SDf57> {
}
}
private Optional<Registry> findRegByUnit(Statement s, Registry registry, RegistryUnit unit) {
private Optional<Registry> findRegByUnit(Long companyId, Long accountId, String contract, Registry registry, RegistryUnit unit) {
RegistryTradingParams p = new RegistryTradingParams(
IEnumKey.getEnumByKey(RegistryDesignation.class, registry.getRegistryDesignation()),
IEnumKey.getEnumByKey(RegistryInstrumentType.class, registry.getRegistryInstrumentType()),
@ -559,12 +559,12 @@ public class Sdf57Executor extends AbstractExecutor<SDf57> {
ImdgPredicateBuilder pb = registryImdg.predicateBuilder();
ImdgPredicate rgstrPredicate = pb.and(pb.sql(sql),
pb.sql(sql),
pb.equals("companyId", s.getAddresseeId()), //fixme companyId?
pb.equals("accountId", s.getAccountId())
pb.equals("companyId", companyId), //fixme companyId?
pb.equals("accountId", accountId)
);
if (RegistryDesignation.D.equalsByKey(registry.getRegistryDesignation()) && !TextUtil.isEmpty(s.getContract())) {
rgstrPredicate = pb.and(rgstrPredicate, pb.equals("contract", s.getContract()));
if (RegistryDesignation.D.equalsByKey(registry.getRegistryDesignation()) && !TextUtil.isEmpty(contract)) {
rgstrPredicate = pb.and(rgstrPredicate, pb.equals("contract", contract));
}
return Optional.ofNullable(registryImdg.getSingleObjectByPredicate(rgstrPredicate));
}