http://jira.mfd.msk:8088/browse/CLS-736 // http://jira.mfd.msk:8088/browse/CLS-733 // http://jira.mfd.msk:8088/browse/CLS-738 // http://jira.mfd.msk:8088/browse/CLS-738
This commit is contained in:
parent
e4f378aaf6
commit
2ceec4d42c
9 changed files with 69 additions and 159 deletions
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
// }
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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) {
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue