ialbert 2023-07-05 12:36:06 +03:00
parent 2ad79bb683
commit a529135daf
3 changed files with 33 additions and 10 deletions

View file

@ -20,6 +20,7 @@ import java.time.Instant;
import java.util.Collection;
import java.util.Map;
import java.util.Optional;
import java.util.function.Function;
@Service
public class RegistryService {
@ -68,8 +69,13 @@ public class RegistryService {
return;
}
log.debug("TCR new event, TCR#id={}", tcr.getId());
Long accountId = tcr.getMoneyAccountId() != null ? tcr.getMoneyAccountId() : tcr.getDepoAccountId();
Collection<Registry> registries = findRegistry(tcr.getCompanyId(), accountId);
Optional<ImdgPredicate> registriesCondition = registsryPredicate(tcr.getCompanyId(), tcr.getMoneyAccountId(), tcr.getDepoAccountId());
if (registriesCondition.isEmpty()) {
log.debug("TCR#id={} couldn't construct registry search condition", tcr.getId());
return;
}
log.debug("TCR#id registries condition {}", registriesCondition.get());
Collection<Registry> registries = registryImdg.getCollectionObjectsByPredicate(registriesCondition.get());
log.debug("TCR#id={} registries for update found: {}", tcr.getId(), registries.size());
registries.forEach(rgs -> {
rgs.setTradingClearingRegistryId(tcr.getId());
@ -77,23 +83,33 @@ public class RegistryService {
rgs.setRegistryCapacity(tcr.getTradingClearingRegistryType());
rgs.setUpdated(Instant.now());
registryImdg.update(rgs);
log.trace("TCR#id={} registry#id={} updated", tcr.getId(), rgs.getId());
});
}
/**
* находим все регистры AM__/AS__ по пришедшему ТКР
*/
private Collection<Registry> findRegistry(Long companyId, Long accountId) { //String account
private Optional<ImdgPredicate> registsryPredicate(Long companyId, Long moneyAccountId, Long depoAccountId) {
ImdgPredicateBuilder prdBldr = registryImdg.predicateBuilder();
String rgsCodeSQL = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.AM__, RegistryTradingParams.AS__).build();
ImdgPredicate rgsCodeSqlPredicate = prdBldr.and(
prdBldr.sql(rgsCodeSQL),
Function<RegistryTradingParams, String> sql = p -> RegistryCodeSqlBuilder.getInstance(p).build();
Optional<ImdgPredicate> moneyPredicate = Optional.ofNullable(moneyAccountId)
.map(accId -> sql.apply(RegistryTradingParams.AM__))
.map(prdBldr::sql)
.map(codePredicate -> prdBldr.and(codePredicate, prdBldr.equals("accountId", moneyAccountId)));
Optional<ImdgPredicate> depoPredicate = Optional.ofNullable(depoAccountId)
.map(accId -> sql.apply(RegistryTradingParams.AS__))
.map(prdBldr::sql)
.map(codePredicate -> prdBldr.and(codePredicate, prdBldr.equals("accountId", depoAccountId)));
if (moneyPredicate.isEmpty() && depoPredicate.isEmpty()) {
return Optional.empty();
}
return Optional.ofNullable(prdBldr.and(
prdBldr.or(moneyPredicate.orElse(prdBldr.alwaysTrue()), depoPredicate.orElse(prdBldr.alwaysTrue())),
prdBldr.equals("companyId", companyId),
prdBldr.equals("accountId", accountId),
// prdBldr.equals("account", account),
prdBldr.equals("accountId", moneyAccountId),
prdBldr.sql("tradingClearingRegistryId is null")
);
return registryImdg.getCollectionObjectsByPredicate(rgsCodeSqlPredicate);
));
}
private RegistryTradingParams createRegistryInfoByType(String type) {

View file

@ -92,4 +92,9 @@ public class ImdgPredicateBuilderHazelcast implements ImdgPredicateBuilder {
public ImdgPredicate regex(String key, String regex) {
return new ImdgPredicateHazelcast(Predicates.regex(key, regex));
}
@Override
public ImdgPredicate alwaysTrue() {
return new ImdgPredicateHazelcast(Predicates.alwaysTrue());
}
}

View file

@ -17,4 +17,6 @@ public interface ImdgPredicateBuilder {
ImdgPredicate sql(String sql);
ImdgPredicate regex(String key, String regex);
ImdgPredicate alwaysTrue();
}