This commit is contained in:
parent
2ad79bb683
commit
a529135daf
3 changed files with 33 additions and 10 deletions
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,4 +17,6 @@ public interface ImdgPredicateBuilder {
|
|||
|
||||
ImdgPredicate sql(String sql);
|
||||
ImdgPredicate regex(String key, String regex);
|
||||
|
||||
ImdgPredicate alwaysTrue();
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue