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.Collection;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
import java.util.function.Function;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class RegistryService {
|
public class RegistryService {
|
||||||
|
|
@ -68,8 +69,13 @@ public class RegistryService {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
log.debug("TCR new event, TCR#id={}", tcr.getId());
|
log.debug("TCR new event, TCR#id={}", tcr.getId());
|
||||||
Long accountId = tcr.getMoneyAccountId() != null ? tcr.getMoneyAccountId() : tcr.getDepoAccountId();
|
Optional<ImdgPredicate> registriesCondition = registsryPredicate(tcr.getCompanyId(), tcr.getMoneyAccountId(), tcr.getDepoAccountId());
|
||||||
Collection<Registry> registries = findRegistry(tcr.getCompanyId(), accountId);
|
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());
|
log.debug("TCR#id={} registries for update found: {}", tcr.getId(), registries.size());
|
||||||
registries.forEach(rgs -> {
|
registries.forEach(rgs -> {
|
||||||
rgs.setTradingClearingRegistryId(tcr.getId());
|
rgs.setTradingClearingRegistryId(tcr.getId());
|
||||||
|
|
@ -77,23 +83,33 @@ public class RegistryService {
|
||||||
rgs.setRegistryCapacity(tcr.getTradingClearingRegistryType());
|
rgs.setRegistryCapacity(tcr.getTradingClearingRegistryType());
|
||||||
rgs.setUpdated(Instant.now());
|
rgs.setUpdated(Instant.now());
|
||||||
registryImdg.update(rgs);
|
registryImdg.update(rgs);
|
||||||
|
log.trace("TCR#id={} registry#id={} updated", tcr.getId(), rgs.getId());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* находим все регистры AM__/AS__ по пришедшему ТКР
|
* находим все регистры 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();
|
ImdgPredicateBuilder prdBldr = registryImdg.predicateBuilder();
|
||||||
String rgsCodeSQL = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.AM__, RegistryTradingParams.AS__).build();
|
Function<RegistryTradingParams, String> sql = p -> RegistryCodeSqlBuilder.getInstance(p).build();
|
||||||
ImdgPredicate rgsCodeSqlPredicate = prdBldr.and(
|
Optional<ImdgPredicate> moneyPredicate = Optional.ofNullable(moneyAccountId)
|
||||||
prdBldr.sql(rgsCodeSQL),
|
.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("companyId", companyId),
|
||||||
prdBldr.equals("accountId", accountId),
|
prdBldr.equals("accountId", moneyAccountId),
|
||||||
// prdBldr.equals("account", account),
|
|
||||||
prdBldr.sql("tradingClearingRegistryId is null")
|
prdBldr.sql("tradingClearingRegistryId is null")
|
||||||
);
|
));
|
||||||
return registryImdg.getCollectionObjectsByPredicate(rgsCodeSqlPredicate);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private RegistryTradingParams createRegistryInfoByType(String type) {
|
private RegistryTradingParams createRegistryInfoByType(String type) {
|
||||||
|
|
|
||||||
|
|
@ -92,4 +92,9 @@ public class ImdgPredicateBuilderHazelcast implements ImdgPredicateBuilder {
|
||||||
public ImdgPredicate regex(String key, String regex) {
|
public ImdgPredicate regex(String key, String regex) {
|
||||||
return new ImdgPredicateHazelcast(Predicates.regex(key, 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 sql(String sql);
|
||||||
ImdgPredicate regex(String key, String regex);
|
ImdgPredicate regex(String key, String regex);
|
||||||
|
|
||||||
|
ImdgPredicate alwaysTrue();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue