registry-service fix, ImdgPredicateBuilder fix, RegistryCodeSqlBuilder fix dot

This commit is contained in:
akulikov 2023-12-08 13:53:12 +03:00
parent 0dd5cec12e
commit de9619376b
6 changed files with 36 additions and 44 deletions

View file

@ -24,6 +24,7 @@ import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder; import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder;
import ru.spcex.platform.utils.enumeration.IEnumKey; import ru.spcex.platform.utils.enumeration.IEnumKey;
import java.math.BigDecimal;
import java.time.Instant; import java.time.Instant;
import java.time.temporal.ChronoUnit; import java.time.temporal.ChronoUnit;
import java.util.Collection; import java.util.Collection;
@ -67,7 +68,10 @@ public class DepoBalanceRegisterService extends QueueConsumer implements Initial
} }
log.debug("Select {} Registry history by query {}", registryHistories.size(), predicate); log.debug("Select {} Registry history by query {}", registryHistories.size(), predicate);
preClearMap.preClearMap(); preClearMap.preClearMap();
registryHistories.forEach(this::insertDepoBalanceRegister); for (RegistryHistory registryHistory : registryHistories) {
if (BigDecimal.ZERO.compareTo(registryHistory.getObject().getDiffBalance()) != 0) continue;
insertDepoBalanceRegister(registryHistory);
}
log.debug("Successfully processed"); log.debug("Successfully processed");
} }
@ -91,8 +95,7 @@ public class DepoBalanceRegisterService extends QueueConsumer implements Initial
private ImdgPredicate getPredicateForRegistries(Long companyId) { private ImdgPredicate getPredicateForRegistries(Long companyId) {
Instant now = Instant.now().truncatedTo(ChronoUnit.DAYS); Instant now = Instant.now().truncatedTo(ChronoUnit.DAYS);
ImdgPredicateBuilder pb = registryHistoryMap.predicateBuilder(); ImdgPredicateBuilder pb = registryHistoryMap.predicateBuilder();
RegistryCodeSqlBuilder codeSql = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.AS_T) RegistryCodeSqlBuilder codeSql = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.AS_T).prefix("object");
.prefix("object.");
ImdgPredicate registryPredicate; ImdgPredicate registryPredicate;
if (companyId == null) { if (companyId == null) {
registryPredicate = pb.sql(codeSql.build()); registryPredicate = pb.sql(codeSql.build());
@ -104,7 +107,6 @@ public class DepoBalanceRegisterService extends QueueConsumer implements Initial
} }
ImdgPredicate finalPredicate = pb.and( ImdgPredicate finalPredicate = pb.and(
registryPredicate, registryPredicate,
pb.zero("object.diffBalance"),
pb.notNull("object.tradingClearingRegistry"), pb.notNull("object.tradingClearingRegistry"),
pb.and( pb.and(
pb.greatEqual("eventTime", now), pb.greatEqual("eventTime", now),

View file

@ -25,6 +25,7 @@ import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder; import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder;
import ru.spcex.platform.utils.enumeration.IEnumKey; import ru.spcex.platform.utils.enumeration.IEnumKey;
import java.math.BigDecimal;
import java.time.Instant; import java.time.Instant;
import java.time.temporal.ChronoUnit; import java.time.temporal.ChronoUnit;
import java.util.Collection; import java.util.Collection;
@ -70,7 +71,10 @@ public class MoneyBalanceRegisterService extends QueueConsumer implements Initia
} }
log.debug("Select {} Registry history by query {}", registryHistories.size(), predicate); log.debug("Select {} Registry history by query {}", registryHistories.size(), predicate);
preClearMap.preClearMap(); preClearMap.preClearMap();
registryHistories.forEach((this::insertMoneyBalanceRegister)); for (RegistryHistory registryHistory : registryHistories) {
if (BigDecimal.ZERO.compareTo(registryHistory.getObject().getDiffBalance()) != 0) continue;
insertMoneyBalanceRegister(registryHistory);
}
log.debug("successfully processed"); log.debug("successfully processed");
} }
@ -100,19 +104,18 @@ public class MoneyBalanceRegisterService extends QueueConsumer implements Initia
protected ImdgPredicate getSqlForRegistryHistory(Long companyId) { protected ImdgPredicate getSqlForRegistryHistory(Long companyId) {
Instant now = Instant.now().truncatedTo(ChronoUnit.DAYS); Instant now = Instant.now().truncatedTo(ChronoUnit.DAYS);
ImdgPredicateBuilder pb = registryHistoryMap.predicateBuilder(); ImdgPredicateBuilder pb = registryHistoryMap.predicateBuilder();
RegistryCodeSqlBuilder codeSql = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.AM_T); RegistryCodeSqlBuilder codeSql = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.AM_T).prefix("object");
ImdgPredicate registryPredicate; ImdgPredicate registryPredicate = codeSql.buildPredicate(pb);
if (companyId == null) { if (companyId == null) {
registryPredicate = pb.sql(codeSql.build("object.")); registryPredicate = pb.sql(codeSql.build());
} else { } else {
registryPredicate = pb.and( registryPredicate = pb.and(
pb.equals("object.companyId", companyId), pb.equals("object.companyId", companyId),
pb.sql(codeSql.build("object.")) pb.sql(codeSql.build())
); );
} }
ImdgPredicate finalPredicate = pb.and( ImdgPredicate finalPredicate = pb.and(
registryPredicate, registryPredicate,
pb.zero("object.diffBalance"),
pb.notNull("object.tradingClearingRegistry"), pb.notNull("object.tradingClearingRegistry"),
pb.and( pb.and(
pb.greatEqual("eventTime", now), pb.greatEqual("eventTime", now),

View file

@ -112,15 +112,4 @@ public class ImdgPredicateBuilderHazelcast implements ImdgPredicateBuilder {
public ImdgPredicate alwaysFalse() { public ImdgPredicate alwaysFalse() {
return new ImdgPredicateHazelcast(Predicates.alwaysFalse()); return new ImdgPredicateHazelcast(Predicates.alwaysFalse());
} }
@Override
public ImdgPredicate zero(String key) {
return zero(key, 10);
}
@Override
public ImdgPredicate zero(String key, int scale) {
double zeros = Math.pow(0.1, scale);
return new ImdgPredicateHazelcast(Predicates.between(key, -zeros, +zeros));
}
} }

View file

@ -22,7 +22,4 @@ public interface ImdgPredicateBuilder {
ImdgPredicate alwaysTrue(); ImdgPredicate alwaysTrue();
ImdgPredicate alwaysFalse(); ImdgPredicate alwaysFalse();
ImdgPredicate zero(String key, int scale);
ImdgPredicate zero(String key);
} }

View file

@ -12,7 +12,7 @@ import java.util.stream.Collectors;
public class RegistryCodeSqlBuilder { public class RegistryCodeSqlBuilder {
private List<RegistryTradingParams> registryTradingParams; private List<RegistryTradingParams> registryTradingParams;
private String prefix = ""; private String prefix = null;
public static RegistryCodeSqlBuilder getInstance(RegistryTradingParams... tradingParams) { public static RegistryCodeSqlBuilder getInstance(RegistryTradingParams... tradingParams) {
return new RegistryCodeSqlBuilder(Arrays.asList(tradingParams)); return new RegistryCodeSqlBuilder(Arrays.asList(tradingParams));
@ -24,10 +24,16 @@ public class RegistryCodeSqlBuilder {
public String build() { public String build() {
List<StringBuilder> conditions = new ArrayList<>(); List<StringBuilder> conditions = new ArrayList<>();
final String REGISTRY_DESIGNATION_FORMAT = prefix + "registryDesignation = '%s'"; String REGISTRY_DESIGNATION_FORMAT = "registryDesignation = '%s'";
final String REGISTRY_INSTRUMENT_TYPE_FORMAT = prefix + "registryInstrumentType = '%s'"; String REGISTRY_INSTRUMENT_TYPE_FORMAT = "registryInstrumentType = '%s'";
final String REGISTRY_CAPACITY_FORMAT = prefix + "registryCapacity = '%s'"; String REGISTRY_CAPACITY_FORMAT = "registryCapacity = '%s'";
final String REGISTRY_UNIT_FORMAT = prefix + "registryUnit = '%s'"; String REGISTRY_UNIT_FORMAT = "registryUnit = '%s'";
if (prefix != null) {
REGISTRY_DESIGNATION_FORMAT = "%s.%s".formatted(prefix, REGISTRY_DESIGNATION_FORMAT);
REGISTRY_INSTRUMENT_TYPE_FORMAT = "%s.%s".formatted(prefix, REGISTRY_INSTRUMENT_TYPE_FORMAT);
REGISTRY_CAPACITY_FORMAT = "%s.%s".formatted(prefix, REGISTRY_CAPACITY_FORMAT);
REGISTRY_UNIT_FORMAT = "%s.%s".formatted(prefix, REGISTRY_UNIT_FORMAT);
}
for (RegistryTradingParams tradingParams : this.registryTradingParams) { for (RegistryTradingParams tradingParams : this.registryTradingParams) {
StringBuilder condition = new StringBuilder(); StringBuilder condition = new StringBuilder();
boolean wasAddedCondition = false; boolean wasAddedCondition = false;
@ -69,10 +75,16 @@ public class RegistryCodeSqlBuilder {
public ImdgPredicate buildPredicate(ImdgPredicateBuilder pb) { public ImdgPredicate buildPredicate(ImdgPredicateBuilder pb) {
List<ImdgPredicate> conditionsOr = new ArrayList<>(); List<ImdgPredicate> conditionsOr = new ArrayList<>();
final String REGISTRY_DESIGNATION_FIELD = prefix + "registryDesignation"; String REGISTRY_DESIGNATION_FIELD = "registryDesignation";
final String REGISTRY_INSTRUMENT_TYPE_FIELD = prefix + "registryInstrumentType"; String REGISTRY_INSTRUMENT_TYPE_FIELD = "registryInstrumentType";
final String REGISTRY_CAPACITY_FIELD = prefix + "registryCapacity"; String REGISTRY_CAPACITY_FIELD = "registryCapacity";
final String REGISTRY_UNIT_FIELD = prefix + "registryUnit"; String REGISTRY_UNIT_FIELD = "registryUnit";
if (prefix != null) {
REGISTRY_DESIGNATION_FIELD = "%s.%s".formatted(prefix, REGISTRY_DESIGNATION_FIELD);
REGISTRY_INSTRUMENT_TYPE_FIELD = "%s.%s".formatted(prefix, REGISTRY_INSTRUMENT_TYPE_FIELD);
REGISTRY_CAPACITY_FIELD = "%s.%s".formatted(prefix, REGISTRY_CAPACITY_FIELD);
REGISTRY_UNIT_FIELD = "%s.%s".formatted(prefix, REGISTRY_UNIT_FIELD);
}
for (RegistryTradingParams tradingParams : this.registryTradingParams) { for (RegistryTradingParams tradingParams : this.registryTradingParams) {
List<ImdgPredicate> conditionsAnd = new ArrayList<>(4); List<ImdgPredicate> conditionsAnd = new ArrayList<>(4);
if (tradingParams.registryDesignation() != null) { if (tradingParams.registryDesignation() != null) {

View file

@ -105,17 +105,6 @@ public class ImdgPredicateBuilderSqlMock implements ImdgPredicateBuilder {
return sql("false"); return sql("false");
} }
@Override
public ImdgPredicate zero(String key) {
return zero(key, 10);
}
@Override
public ImdgPredicate zero(String key, int scale) {
String zeros = "0." + "0".repeat(scale) + "1";
return sql("%s > -%s and %s < %s".formatted(key, zeros, key, zeros));
}
static class SimpleSQLPredicate implements ImdgPredicate { static class SimpleSQLPredicate implements ImdgPredicate {
protected String sql; protected String sql;