etreschenkov 2024-08-21 13:42:11 +03:00
parent 7a49e4b727
commit 2183ff953a
9 changed files with 69 additions and 159 deletions

View file

@ -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);
}
}

View file

@ -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);
}
}

View file

@ -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;
}
}

View file

@ -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);
// }
}

View file

@ -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;
}
}

View file

@ -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<GroupOfConditions> 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<Filter> sqlFilters = new ArrayList<>();
Iterator<GroupOfConditions> iterator = conditions.iterator();
while (iterator.hasNext()) {
GroupOfConditions conditions = iterator.next();
Arrays.stream(conditions.getConditions()).map(this::buildFilter).c
}
List<String> 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<String> 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) {
}
}

View file

@ -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;
}
}

View file

@ -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;
}
}

View file

@ -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;
}
}