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.jdbc.core.JdbcTemplate;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
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;
|
import ru.spcex.platform.enumeration.RegistryDesignation;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
|
|
@ -11,18 +13,14 @@ public class A_D_RegistryMapStore extends OptionalRegistryMapStore {
|
||||||
super(jdbcTemplate);
|
super(jdbcTemplate);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected RegistrySqlFilter registrySqlFilter() {
|
||||||
|
return RegistrySqlFilterBuilder.BUILDER
|
||||||
|
.designationFilter(RegistryDesignation.A, RegistryDesignation.D)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
@Override
|
@Override
|
||||||
public String getMapName() {
|
public String getMapName() {
|
||||||
return IMDGDistributedNames.Map_A_D_Registry;
|
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;
|
package ru.spcex.clearing.imdg.businessobject;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
import org.springframework.jdbc.core.JdbcTemplate;
|
import org.springframework.jdbc.core.JdbcTemplate;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
import ru.spcex.clearing.imdg.filter.RegistrySqlFilter;
|
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
|
@Component
|
||||||
public class FailObligationRegistryMapStore extends OptionalRegistryMapStore {
|
public class FailObligationRegistryMapStore extends OptionalRegistryMapStore {
|
||||||
|
|
@ -13,29 +18,15 @@ public class FailObligationRegistryMapStore extends OptionalRegistryMapStore {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected RegistrySqlFilter registrySqlFilter() {
|
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
|
@Override
|
||||||
public String getMapName() {
|
public String getMapName() {
|
||||||
return IMDGDistributedNames.Map_FailObligationRegistry;
|
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.IMDGDistributedNames;
|
||||||
import ru.spcex.clearing.imdg.filter.RegistrySqlFilter;
|
import ru.spcex.clearing.imdg.filter.RegistrySqlFilter;
|
||||||
import ru.spcex.clearing.imdg.filter.RegistrySqlFilterBuilder;
|
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.RegistryDesignation;
|
||||||
import ru.spcex.platform.enumeration.RegistryStatus;
|
import ru.spcex.platform.enumeration.RegistryStatus;
|
||||||
|
|
||||||
|
|
@ -20,7 +21,7 @@ public class OkObligationRegistryMapStore extends OptionalRegistryMapStore {
|
||||||
return RegistrySqlFilterBuilder.BUILDER
|
return RegistrySqlFilterBuilder.BUILDER
|
||||||
.designationFilter(RegistryDesignation.O, RegistryDesignation.T)
|
.designationFilter(RegistryDesignation.O, RegistryDesignation.T)
|
||||||
.statusFilter(RegistryStatus.OK, RegistryStatus.CLRD)
|
.statusFilter(RegistryStatus.OK, RegistryStatus.CLRD)
|
||||||
.dateFilter(LocalDate.now())
|
.dateRangeFilter("settlement_date", SqlCompareOperators.EQUALS, LocalDate.now())
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -29,20 +30,4 @@ public class OkObligationRegistryMapStore extends OptionalRegistryMapStore {
|
||||||
return IMDGDistributedNames.Map_OkObligationRegistry;
|
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.IMDGDistributedNames;
|
||||||
import ru.spcex.clearing.imdg.filter.RegistrySqlFilter;
|
import ru.spcex.clearing.imdg.filter.RegistrySqlFilter;
|
||||||
import ru.spcex.clearing.imdg.filter.RegistrySqlFilterBuilder;
|
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.RegistryDesignation;
|
||||||
import ru.spcex.platform.enumeration.RegistryStatus;
|
import ru.spcex.platform.enumeration.RegistryStatus;
|
||||||
|
|
||||||
|
|
@ -20,29 +21,12 @@ public class ProcObligationRegistryMapStore extends OptionalRegistryMapStore {
|
||||||
return RegistrySqlFilterBuilder.BUILDER
|
return RegistrySqlFilterBuilder.BUILDER
|
||||||
.designationFilter(RegistryDesignation.O, RegistryDesignation.T)
|
.designationFilter(RegistryDesignation.O, RegistryDesignation.T)
|
||||||
.statusFilter(RegistryStatus.PROC, RegistryStatus.MNG, RegistryStatus.SPLT)
|
.statusFilter(RegistryStatus.PROC, RegistryStatus.MNG, RegistryStatus.SPLT)
|
||||||
.dateFilter(LocalDate.now());
|
.dateRangeFilter("settlement_date", SqlCompareOperators.GREATER_THAN, LocalDate.now())
|
||||||
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getMapName() {
|
public String getMapName() {
|
||||||
return IMDGDistributedNames.Map_ProcObligationRegistry;
|
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.time.LocalDate;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Iterator;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
import org.springframework.util.StringUtils;
|
||||||
import ru.spcex.platform.enumeration.RegistryDesignation;
|
import ru.spcex.platform.enumeration.RegistryDesignation;
|
||||||
import ru.spcex.platform.enumeration.RegistryStatus;
|
import ru.spcex.platform.enumeration.RegistryStatus;
|
||||||
|
|
||||||
|
|
@ -14,13 +15,7 @@ public enum RegistrySqlFilterBuilder {
|
||||||
|
|
||||||
private RegistryDesignation[] designations;
|
private RegistryDesignation[] designations;
|
||||||
private RegistryStatus[] statuses;
|
private RegistryStatus[] statuses;
|
||||||
private LocalDate[] dates = null;
|
private DateRangeFilter dateRangeFilter = null;
|
||||||
private List<GroupOfConditions> conditions = new ArrayList<>();
|
|
||||||
|
|
||||||
public RegistrySqlFilterBuilder addCondition(GroupOfConditions groupOfConditions) {
|
|
||||||
this.conditions.add(groupOfConditions);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public RegistrySqlFilterBuilder designationFilter(RegistryDesignation... designations) {
|
public RegistrySqlFilterBuilder designationFilter(RegistryDesignation... designations) {
|
||||||
this.designations = designations;
|
this.designations = designations;
|
||||||
|
|
@ -32,51 +27,42 @@ public enum RegistrySqlFilterBuilder {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public RegistrySqlFilterBuilder dateFilter(LocalDate... dates) {
|
public RegistrySqlFilterBuilder dateRangeFilter(String filteringFieldName, SqlCompareOperators sqlOperator, LocalDate value) {
|
||||||
this.dates = dates;
|
this.dateRangeFilter = new DateRangeFilter(filteringFieldName, sqlOperator, value);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public RegistrySqlFilter build() {
|
public RegistrySqlFilter build() {
|
||||||
List<Filter> sqlFilters = new ArrayList<>();
|
List<String> sqlFilters = new ArrayList<>();
|
||||||
Iterator<GroupOfConditions> iterator = conditions.iterator();
|
|
||||||
while (iterator.hasNext()) {
|
|
||||||
GroupOfConditions conditions = iterator.next();
|
|
||||||
Arrays.stream(conditions.getConditions()).map(this::buildFilter).c
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (designations != null) {
|
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));
|
Arrays.stream(designations).map(RegistryDesignation::getKey).toArray(String[]::new));
|
||||||
sqlFilters.add(filter);
|
sqlFilters.add(filter);
|
||||||
}
|
}
|
||||||
if (statuses != null) {
|
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));
|
Arrays.stream(statuses).map(RegistryStatus::getKey).toArray(String[]::new));
|
||||||
sqlFilters.add(filter);
|
sqlFilters.add(filter);
|
||||||
}
|
}
|
||||||
if (dates != null){
|
if (dateRangeFilter != null) {
|
||||||
String filter = "settlement_date > ?";
|
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) {
|
private String buildSqlFilter(SqlConditionOperators operatorValue, String filteringFieldName, SqlCompareOperators sqlOperator, String... values) {
|
||||||
String sql = String.format("%s %s '%s'", sqlCondition.getFieldName(), sqlCondition.getSqlOperators().getKey(), sqlCondition.getValue());
|
Collection<String> conditions = Arrays.stream(values)
|
||||||
return new Filter(sql, sqlCondition.isStrictCondition() ? "and" : "or");
|
.map(value -> String.format("%s %s %s", filteringFieldName, sqlOperator.getKey(),
|
||||||
// return Arrays.stream(values)
|
StringUtils.hasText(value) ? String.format("'%s'", value) : "?"))
|
||||||
// .map(value -> String.format("%s %s '%s'", filteringFieldName, sqlOperator.getKey(), value))
|
.toList();
|
||||||
// .collect(Collectors.joining(String.format(" %s ", operatorValue)));
|
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 record DateRangeFilter(String filteringFieldName, SqlCompareOperators sqlOperator, LocalDate value) {
|
||||||
private final String sqlFilter;
|
|
||||||
private final String conditionOperator;
|
|
||||||
|
|
||||||
private Filter(String sqlFilter, String conditionOperator) {
|
|
||||||
this.sqlFilter = sqlFilter;
|
|
||||||
this.conditionOperator = conditionOperator;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ package ru.spcex.clearing.imdg.filter;
|
||||||
|
|
||||||
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
||||||
|
|
||||||
public enum SqlOperators implements IEnumKey {
|
public enum SqlCompareOperators implements IEnumKey {
|
||||||
EQUALS("="),
|
EQUALS("="),
|
||||||
GREATER_THAN(">="),
|
GREATER_THAN(">="),
|
||||||
GREATER(">"),
|
GREATER(">"),
|
||||||
|
|
@ -11,12 +11,12 @@ public enum SqlOperators implements IEnumKey {
|
||||||
|
|
||||||
private final String key;
|
private final String key;
|
||||||
|
|
||||||
SqlOperators(String key) {
|
SqlCompareOperators(String key) {
|
||||||
this.key = key;
|
this.key = key;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getKey() {
|
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