diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/A_D_RegistryMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/A_D_RegistryMapStore.java index 65d9e16e6..e953e2a3c 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/A_D_RegistryMapStore.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/A_D_RegistryMapStore.java @@ -3,6 +3,8 @@ package ru.spcex.clearing.imdg.businessobject; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Component; import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.imdg.filter.RegistrySqlFilter; +import ru.spcex.clearing.imdg.filter.RegistrySqlFilterBuilder; import ru.spcex.platform.enumeration.RegistryDesignation; @Component @@ -11,18 +13,14 @@ public class A_D_RegistryMapStore extends OptionalRegistryMapStore { super(jdbcTemplate); } + @Override + protected RegistrySqlFilter registrySqlFilter() { + return RegistrySqlFilterBuilder.BUILDER + .designationFilter(RegistryDesignation.A, RegistryDesignation.D) + .build(); + } @Override public String getMapName() { return IMDGDistributedNames.Map_A_D_Registry; } - - @Override - protected String statusFilter() { - return trueFilter(); - } - - @Override - protected String designationFilter() { - return buildFilter("or", "registry_designation", RegistryDesignation.O, RegistryDesignation.T); - } } diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/FailObligationRegistryMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/FailObligationRegistryMapStore.java index 7b5e20585..b3021025a 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/FailObligationRegistryMapStore.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/FailObligationRegistryMapStore.java @@ -1,9 +1,14 @@ package ru.spcex.clearing.imdg.businessobject; +import java.time.LocalDate; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Component; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.imdg.filter.RegistrySqlFilter; +import ru.spcex.clearing.imdg.filter.RegistrySqlFilterBuilder; +import ru.spcex.clearing.imdg.filter.SqlCompareOperators; +import ru.spcex.platform.enumeration.RegistryDesignation; +import ru.spcex.platform.enumeration.RegistryStatus; @Component public class FailObligationRegistryMapStore extends OptionalRegistryMapStore { @@ -13,29 +18,15 @@ public class FailObligationRegistryMapStore extends OptionalRegistryMapStore { @Override protected RegistrySqlFilter registrySqlFilter() { - return null; + return RegistrySqlFilterBuilder.BUILDER + .designationFilter(RegistryDesignation.O, RegistryDesignation.T) + .statusFilter(RegistryStatus.FAIL, RegistryStatus.UNCV, RegistryStatus.NACK, RegistryStatus.NACC) + .dateRangeFilter("settlement_date", SqlCompareOperators.EQUALS, LocalDate.now()) + .build(); } @Override public String getMapName() { return IMDGDistributedNames.Map_FailObligationRegistry; } - - @Override - protected String statusFilter() { - return null; -// return buildFilter("or", "status", -// RegistryStatus.FAIL, RegistryStatus.UNCV, RegistryStatus.NACK, RegistryStatus.NACC); - } - - @Override - protected String dateFilter() { - return ""; - } - - @Override - protected String designationFilter() { - return null; -// return buildFilter("or", "registry_designation", RegistryDesignation.O, RegistryDesignation.T); - } } diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/OkObligationRegistryMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/OkObligationRegistryMapStore.java index fc6c77b32..2134cde62 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/OkObligationRegistryMapStore.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/OkObligationRegistryMapStore.java @@ -6,6 +6,7 @@ import org.springframework.stereotype.Component; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.imdg.filter.RegistrySqlFilter; import ru.spcex.clearing.imdg.filter.RegistrySqlFilterBuilder; +import ru.spcex.clearing.imdg.filter.SqlCompareOperators; import ru.spcex.platform.enumeration.RegistryDesignation; import ru.spcex.platform.enumeration.RegistryStatus; @@ -20,7 +21,7 @@ public class OkObligationRegistryMapStore extends OptionalRegistryMapStore { return RegistrySqlFilterBuilder.BUILDER .designationFilter(RegistryDesignation.O, RegistryDesignation.T) .statusFilter(RegistryStatus.OK, RegistryStatus.CLRD) - .dateFilter(LocalDate.now()) + .dateRangeFilter("settlement_date", SqlCompareOperators.EQUALS, LocalDate.now()) .build(); } @@ -29,20 +30,4 @@ public class OkObligationRegistryMapStore extends OptionalRegistryMapStore { return IMDGDistributedNames.Map_OkObligationRegistry; } - @Override - protected String statusFilter() { - return buildFilter("or", "status", - RegistryStatus.OK.getKey(), RegistryStatus.CLRD.getKey()); - } - - @Override - protected String designationFilter() { - return buildFilter("or", "registry_designation", RegistryDesignation.O.getKey(), RegistryDesignation.T.getKey()); - } - - @Override - protected String dateFilter() { - return null; - } - } diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/ProcObligationRegistryMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/ProcObligationRegistryMapStore.java index 56c74e550..5db406ad0 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/ProcObligationRegistryMapStore.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/ProcObligationRegistryMapStore.java @@ -6,6 +6,7 @@ import org.springframework.stereotype.Component; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.imdg.filter.RegistrySqlFilter; import ru.spcex.clearing.imdg.filter.RegistrySqlFilterBuilder; +import ru.spcex.clearing.imdg.filter.SqlCompareOperators; import ru.spcex.platform.enumeration.RegistryDesignation; import ru.spcex.platform.enumeration.RegistryStatus; @@ -20,29 +21,12 @@ public class ProcObligationRegistryMapStore extends OptionalRegistryMapStore { return RegistrySqlFilterBuilder.BUILDER .designationFilter(RegistryDesignation.O, RegistryDesignation.T) .statusFilter(RegistryStatus.PROC, RegistryStatus.MNG, RegistryStatus.SPLT) - .dateFilter(LocalDate.now()); + .dateRangeFilter("settlement_date", SqlCompareOperators.GREATER_THAN, LocalDate.now()) + .build(); } @Override public String getMapName() { return IMDGDistributedNames.Map_ProcObligationRegistry; } - -// @Override -// protected String statusFilter() { -// return null; -//// return buildFilter("or", "status", -//// RegistryStatus.PROC, RegistryStatus.MNG, RegistryStatus.SPLT); -// } -// -// @Override -// protected String dateFilter() { -// return ""; -// } -// -// @Override -// protected String designationFilter() { -// return null; -//// return buildFilter("or", "registry_designation", RegistryDesignation.O, RegistryDesignation.T); -// } } diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/filter/GroupOfConditions.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/filter/GroupOfConditions.java deleted file mode 100644 index fcfc05552..000000000 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/filter/GroupOfConditions.java +++ /dev/null @@ -1,14 +0,0 @@ -package ru.spcex.clearing.imdg.filter; - -public class GroupOfConditions { - private SqlCondition[] conditions; - private String operatorBetweenConditions; - - public SqlCondition[] getConditions() { - return conditions; - } - - public String getOperatorBetweenConditions() { - return operatorBetweenConditions; - } -} diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/filter/RegistrySqlFilterBuilder.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/filter/RegistrySqlFilterBuilder.java index 322c7ff52..517b61b24 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/filter/RegistrySqlFilterBuilder.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/filter/RegistrySqlFilterBuilder.java @@ -3,9 +3,10 @@ package ru.spcex.clearing.imdg.filter; import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; -import java.util.Iterator; +import java.util.Collection; import java.util.List; import java.util.stream.Collectors; +import org.springframework.util.StringUtils; import ru.spcex.platform.enumeration.RegistryDesignation; import ru.spcex.platform.enumeration.RegistryStatus; @@ -14,13 +15,7 @@ public enum RegistrySqlFilterBuilder { private RegistryDesignation[] designations; private RegistryStatus[] statuses; - private LocalDate[] dates = null; - private List conditions = new ArrayList<>(); - - public RegistrySqlFilterBuilder addCondition(GroupOfConditions groupOfConditions) { - this.conditions.add(groupOfConditions); - return this; - } + private DateRangeFilter dateRangeFilter = null; public RegistrySqlFilterBuilder designationFilter(RegistryDesignation... designations) { this.designations = designations; @@ -32,51 +27,42 @@ public enum RegistrySqlFilterBuilder { return this; } - public RegistrySqlFilterBuilder dateFilter(LocalDate... dates) { - this.dates = dates; + public RegistrySqlFilterBuilder dateRangeFilter(String filteringFieldName, SqlCompareOperators sqlOperator, LocalDate value) { + this.dateRangeFilter = new DateRangeFilter(filteringFieldName, sqlOperator, value); return this; } public RegistrySqlFilter build() { - List sqlFilters = new ArrayList<>(); - Iterator iterator = conditions.iterator(); - while (iterator.hasNext()) { - GroupOfConditions conditions = iterator.next(); - Arrays.stream(conditions.getConditions()).map(this::buildFilter).c - } - - + List sqlFilters = new ArrayList<>(); if (designations != null) { - String filter = buildFilter("or", "registry_designation", + String filter = buildSqlFilter(SqlConditionOperators.OR, "registry_designation", SqlCompareOperators.EQUALS, Arrays.stream(designations).map(RegistryDesignation::getKey).toArray(String[]::new)); sqlFilters.add(filter); } if (statuses != null) { - String filter = buildFilter("or", "status", + String filter = buildSqlFilter(SqlConditionOperators.OR, "registry_status", SqlCompareOperators.EQUALS, Arrays.stream(statuses).map(RegistryStatus::getKey).toArray(String[]::new)); sqlFilters.add(filter); } - if (dates != null){ - String filter = "settlement_date > ?"; + if (dateRangeFilter != null) { + String filter = buildSqlFilter(SqlConditionOperators.UNDEFINED, + dateRangeFilter.filteringFieldName, dateRangeFilter.sqlOperator, ""); + sqlFilters.add(filter); } - return new RegistrySqlFilter(String.join("and", sqlFilters), dates); + return new RegistrySqlFilter(String.join(" and ", sqlFilters), new Object[]{dateRangeFilter.value}); } - private Filter buildFilter(SqlCondition sqlCondition) { - String sql = String.format("%s %s '%s'", sqlCondition.getFieldName(), sqlCondition.getSqlOperators().getKey(), sqlCondition.getValue()); - return new Filter(sql, sqlCondition.isStrictCondition() ? "and" : "or"); -// return Arrays.stream(values) -// .map(value -> String.format("%s %s '%s'", filteringFieldName, sqlOperator.getKey(), value)) -// .collect(Collectors.joining(String.format(" %s ", operatorValue))); + private String buildSqlFilter(SqlConditionOperators operatorValue, String filteringFieldName, SqlCompareOperators sqlOperator, String... values) { + Collection conditions = Arrays.stream(values) + .map(value -> String.format("%s %s %s", filteringFieldName, sqlOperator.getKey(), + StringUtils.hasText(value) ? String.format("'%s'", value) : "?")) + .toList(); + if (operatorValue != SqlConditionOperators.UNDEFINED && !conditions.isEmpty()) { + return conditions.stream().collect(Collectors.joining(String.format(" %s ", operatorValue.getKey()), "(", ")")); + } + return String.join("", conditions); } - private static class Filter { - private final String sqlFilter; - private final String conditionOperator; - - private Filter(String sqlFilter, String conditionOperator) { - this.sqlFilter = sqlFilter; - this.conditionOperator = conditionOperator; - } + private record DateRangeFilter(String filteringFieldName, SqlCompareOperators sqlOperator, LocalDate value) { } } diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/filter/SqlOperators.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/filter/SqlCompareOperators.java similarity index 72% rename from clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/filter/SqlOperators.java rename to clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/filter/SqlCompareOperators.java index 691be4e6c..e52ab7b12 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/filter/SqlOperators.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/filter/SqlCompareOperators.java @@ -2,7 +2,7 @@ package ru.spcex.clearing.imdg.filter; import ru.spcex.platform.utils.enumeration.IEnumKey; -public enum SqlOperators implements IEnumKey { +public enum SqlCompareOperators implements IEnumKey { EQUALS("="), GREATER_THAN(">="), GREATER(">"), @@ -11,12 +11,12 @@ public enum SqlOperators implements IEnumKey { private final String key; - SqlOperators(String key) { + SqlCompareOperators(String key) { this.key = key; } @Override public String getKey() { - return ""; + return this.key; } } diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/filter/SqlCondition.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/filter/SqlCondition.java deleted file mode 100644 index 06064da2d..000000000 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/filter/SqlCondition.java +++ /dev/null @@ -1,40 +0,0 @@ -package ru.spcex.clearing.imdg.filter; - -public class SqlCondition { - private String fieldName; - private String value; - private SqlOperators sqlOperators; - private boolean isStrictCondition; - - public String getFieldName() { - return fieldName; - } - - public void setFieldName(String fieldName) { - this.fieldName = fieldName; - } - - public String getValue() { - return value; - } - - public void setValue(String value) { - this.value = value; - } - - public SqlOperators getSqlOperators() { - return sqlOperators; - } - - public void setSqlOperators(SqlOperators sqlOperators) { - this.sqlOperators = sqlOperators; - } - - public boolean isStrictCondition() { - return isStrictCondition; - } - - public void setStrictCondition(boolean strictCondition) { - isStrictCondition = strictCondition; - } -} diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/filter/SqlConditionOperators.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/filter/SqlConditionOperators.java new file mode 100644 index 000000000..8b77b0382 --- /dev/null +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/filter/SqlConditionOperators.java @@ -0,0 +1,20 @@ +package ru.spcex.clearing.imdg.filter; + +import ru.spcex.platform.utils.enumeration.IEnumKey; + +public enum SqlConditionOperators implements IEnumKey { + OR("or"), + AND("and"), + UNDEFINED("undefined"); + + private final String key; + + SqlConditionOperators(String key) { + this.key = key; + } + + @Override + public String getKey() { + return this.key; + } +}