reports-service рефакторинг, оптимизация IMDF API, мелкие правки ReportPA_IV (название файла).

This commit is contained in:
AKurakin 2023-01-11 14:43:54 +03:00
parent 4ffdf50b39
commit 1084a79a97
8 changed files with 34 additions and 25 deletions

View file

@ -40,7 +40,7 @@ public class ReportPA_IV extends ReportWithPeriod {
@Override @Override
public String getReportName(LocalDateTime reportDateTime) { public String getReportName(LocalDateTime reportDateTime) {
return "REPPA.BT12.2.IV.%s-%s.%s".formatted( return "REPPA.IV.%s-%s.%s".formatted(
DATE_FORMATTER.format(startDate), DATE_FORMATTER.format(startDate),
DATE_FORMATTER.format(endDate), DATE_FORMATTER.format(endDate),
DATE_TIME_FORMATTER.format(reportDateTime) DATE_TIME_FORMATTER.format(reportDateTime)

View file

@ -2,6 +2,7 @@ package ru.spcex.clearing.reports.services.collector;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.journal.InDocumentJournal; import ru.clearing.classes.statics.data.journal.InDocumentJournal;
import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.reports.bt_13.ReportDOCIN; import ru.spcex.clearing.reports.reports.bt_13.ReportDOCIN;
@ -15,6 +16,7 @@ import java.time.LocalDate;
import java.time.LocalTime; import java.time.LocalTime;
import java.util.Collection; import java.util.Collection;
@Component
public class ReportDOCIN_Collector extends SimpleReportCollector<ReportDOCIN> { public class ReportDOCIN_Collector extends SimpleReportCollector<ReportDOCIN> {
protected final Logger log = LoggerFactory.getLogger(getClass()); protected final Logger log = LoggerFactory.getLogger(getClass());

View file

@ -2,6 +2,7 @@ package ru.spcex.clearing.reports.services.collector;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.journal.OutDocumentJournal; import ru.clearing.classes.statics.data.journal.OutDocumentJournal;
import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.reports.bt_13.ReportDOCOUT; import ru.spcex.clearing.reports.reports.bt_13.ReportDOCOUT;
@ -15,6 +16,7 @@ import java.time.LocalDate;
import java.time.LocalTime; import java.time.LocalTime;
import java.util.Collection; import java.util.Collection;
@Component
public class ReportDOCOUT_Collector extends SimpleReportCollector<ReportDOCOUT> { public class ReportDOCOUT_Collector extends SimpleReportCollector<ReportDOCOUT> {
protected final Logger log = LoggerFactory.getLogger(getClass()); protected final Logger log = LoggerFactory.getLogger(getClass());

View file

@ -1,5 +1,6 @@
package ru.spcex.clearing.reports.services.collector; package ru.spcex.clearing.reports.services.collector;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.account.AccountBalance; import ru.clearing.classes.statics.data.account.AccountBalance;
import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.company.Company;
import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.imdg.IMDGDistributedNames;
@ -10,7 +11,6 @@ import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider; import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate; import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
import ru.spcex.platform.imdg.iml.hazelcast.adapter.predicate.ImdgPredicateBuilderHazelcast;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalTime; import java.time.LocalTime;
@ -18,6 +18,7 @@ import java.util.Collection;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Component
public class ReportINACCNT_Collector extends ReportForClearingCodeCollector<ReportINACCNT> { public class ReportINACCNT_Collector extends ReportForClearingCodeCollector<ReportINACCNT> {
private final Imdg<AccountBalance> accountBalanceImdg; private final Imdg<AccountBalance> accountBalanceImdg;
private final Imdg<Company> companyImdg; private final Imdg<Company> companyImdg;
@ -35,7 +36,7 @@ public class ReportINACCNT_Collector extends ReportForClearingCodeCollector<Repo
@Override @Override
public ReportINACCNT collectReportForClearingCode(String clearingCode) { public ReportINACCNT collectReportForClearingCode(String clearingCode) {
ImdgPredicateBuilder builder = new ImdgPredicateBuilderHazelcast(); ImdgPredicateBuilder builder = companyImdg.predicateBuilder();
ImdgPredicate clearingCodePredicate = builder.equals("clearingCode", clearingCode); ImdgPredicate clearingCodePredicate = builder.equals("clearingCode", clearingCode);
Collection<Company> companies = companyImdg.getCollectionObjectsByPredicate(clearingCodePredicate); Collection<Company> companies = companyImdg.getCollectionObjectsByPredicate(clearingCodePredicate);
@ -47,10 +48,8 @@ public class ReportINACCNT_Collector extends ReportForClearingCodeCollector<Repo
builder.equals("accountType", AccountType.Clrn.getKey()), builder.equals("accountType", AccountType.Clrn.getKey()),
builder.equals("accountType", AccountType.Info.getKey()) builder.equals("accountType", AccountType.Info.getKey())
); );
ImdgPredicate companyIdPredicates = builder.equals("companyId", -1); ImdgPredicate companyIdPredicates = builder.in("companyId", companyIds.toArray(new Comparable[0]));
for (Long companyId : companyIds) {
companyIdPredicates = builder.or(companyIdPredicates, builder.equals("companyId", companyId));
}
ImdgPredicate finalPredicate = builder.and(accountTypePredicate, companyIdPredicates); ImdgPredicate finalPredicate = builder.and(accountTypePredicate, companyIdPredicates);
Collection<AccountBalance> accountBalances = accountBalanceImdg.getCollectionObjectsByPredicate(finalPredicate); Collection<AccountBalance> accountBalances = accountBalanceImdg.getCollectionObjectsByPredicate(finalPredicate);

View file

@ -1,5 +1,6 @@
package ru.spcex.clearing.reports.services.collector; package ru.spcex.clearing.reports.services.collector;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.generated.ClearingMemberCategory; import ru.clearing.classes.statics.data.generated.ClearingMemberCategory;
import ru.clearing.classes.transaction.data.execution.LiabilitiesClaimsAssets; import ru.clearing.classes.transaction.data.execution.LiabilitiesClaimsAssets;
import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.imdg.IMDGDistributedNames;
@ -10,14 +11,15 @@ import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider; import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate; import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
import ru.spcex.platform.imdg.iml.hazelcast.adapter.predicate.ImdgPredicateBuilderHazelcast;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.Collection; import java.util.Collection;
import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Component
public class ReportPA_B_Collector extends ReportWithPeriodCollector<ReportPA_B> { public class ReportPA_B_Collector extends ReportWithPeriodCollector<ReportPA_B> {
private final Imdg<LiabilitiesClaimsAssets> liabilitiesClaimsAssetsImdg; private final Imdg<LiabilitiesClaimsAssets> liabilitiesClaimsAssetsImdg;
private final Imdg<ClearingMemberCategory> clearingMemberCategoryImdg; private final Imdg<ClearingMemberCategory> clearingMemberCategoryImdg;
@ -36,24 +38,23 @@ public class ReportPA_B_Collector extends ReportWithPeriodCollector<ReportPA_B>
@Override @Override
public ReportPA_B collectReportWithPeriod(LocalDate startDate, LocalDate endDate) { public ReportPA_B collectReportWithPeriod(LocalDate startDate, LocalDate endDate) {
validateDateRange(startDate, endDate); validateDateRange(startDate, endDate);
ImdgPredicateBuilder builder = new ImdgPredicateBuilderHazelcast();
ImdgPredicate clearingMemberCategoryPredicate = builder.equals("clearingMemberCategory", ClearingMemberCategoryD.B.getKey());
Collection<ClearingMemberCategory> clearingMemberCategories = Collection<ClearingMemberCategory> clearingMemberCategories =
clearingMemberCategoryImdg.getCollectionObjectsByPredicate(clearingMemberCategoryPredicate); clearingMemberCategoryImdg.getCollectionObjectsByFieldValues(Map.of(
"clearingMemberCategory", ClearingMemberCategoryD.B.getKey()
));
Set<Long> companyIds = clearingMemberCategories.stream() Set<Long> companyIds = clearingMemberCategories.stream()
.map(ClearingMemberCategory::getCompanyId) .map(ClearingMemberCategory::getCompanyId)
.collect(Collectors.toSet()); .collect(Collectors.toSet());
ImdgPredicateBuilder builder = liabilitiesClaimsAssetsImdg.predicateBuilder();
ImdgPredicate refundDatePredicate = builder.and( ImdgPredicate refundDatePredicate = builder.and(
builder.greatEqual("refundDate", toInstantStartDay(startDate)), builder.greatEqual("refundDate", toInstantStartDay(startDate)),
builder.lessEqual("refundDate", toInstantStartDay(endDate)) builder.lessEqual("refundDate", toInstantStartDay(endDate))
); );
ImdgPredicate companyIdPredicates = builder.equals("companyId", -1); ImdgPredicate companyIdPredicates = builder.in("companyId", companyIds.toArray(new Comparable[0]));
for (Long companyId : companyIds) {
companyIdPredicates = builder.or(companyIdPredicates, builder.equals("companyId", companyId));
}
ImdgPredicate finalPredicate = builder.and(refundDatePredicate, companyIdPredicates); ImdgPredicate finalPredicate = builder.and(refundDatePredicate, companyIdPredicates);
Collection<LiabilitiesClaimsAssets> liabilitiesClaimsAssets = Collection<LiabilitiesClaimsAssets> liabilitiesClaimsAssets =
liabilitiesClaimsAssetsImdg.getCollectionObjectsByPredicate(finalPredicate); liabilitiesClaimsAssetsImdg.getCollectionObjectsByPredicate(finalPredicate);

View file

@ -1,16 +1,17 @@
package ru.spcex.clearing.reports.services.collector; package ru.spcex.clearing.reports.services.collector;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.generated.ClearingMemberCategory; import ru.clearing.classes.statics.data.generated.ClearingMemberCategory;
import ru.clearing.classes.transaction.data.execution.LiabilitiesClaimsAssets; import ru.clearing.classes.transaction.data.execution.LiabilitiesClaimsAssets;
import ru.clearing.platform.dictionary.ClearingStatusDictionary; import ru.clearing.platform.dictionary.ClearingStatusDictionary;
import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.reports.bt_12_2.ReportPA_IV; import ru.spcex.clearing.reports.reports.bt_12_2.ReportPA_IV;
import ru.spcex.clearing.reports.services.ReportWithPeriodCollector; import ru.spcex.clearing.reports.services.ReportWithPeriodCollector;
import ru.spcex.platform.enumeration.ClearingMemberCategoryD;
import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider; import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate; import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
import ru.spcex.platform.imdg.iml.hazelcast.adapter.predicate.ImdgPredicateBuilderHazelcast;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDate; import java.time.LocalDate;
@ -18,6 +19,7 @@ import java.util.Collection;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Component
public class ReportPA_IV_Collector extends ReportWithPeriodCollector<ReportPA_IV> { public class ReportPA_IV_Collector extends ReportWithPeriodCollector<ReportPA_IV> {
private final Imdg<LiabilitiesClaimsAssets> liabilitiesClaimsAssetsImdg; private final Imdg<LiabilitiesClaimsAssets> liabilitiesClaimsAssetsImdg;
private final Imdg<ClearingStatusDictionary> clearingStatusDictionaryImdg; private final Imdg<ClearingStatusDictionary> clearingStatusDictionaryImdg;
@ -41,26 +43,22 @@ public class ReportPA_IV_Collector extends ReportWithPeriodCollector<ReportPA_IV
@Override @Override
public ReportPA_IV collectReportWithPeriod(LocalDate startDate, LocalDate endDate) { public ReportPA_IV collectReportWithPeriod(LocalDate startDate, LocalDate endDate) {
validateDateRange(startDate, endDate); validateDateRange(startDate, endDate);
ImdgPredicateBuilder builder = new ImdgPredicateBuilderHazelcast();
ImdgPredicate clearingMemberCategoryPredicate = builder.or( String clearingMemberCategorySql = "clearingMemberCategory='%s' or clearingMemberCategory='%s'".formatted(
builder.equals("clearingMemberCategory", "I"), ClearingMemberCategoryD.I.getKey(), ClearingMemberCategoryD.V.getKey()
builder.equals("clearingMemberCategory", "V")
); );
Collection<ClearingMemberCategory> clearingMemberCategories = Collection<ClearingMemberCategory> clearingMemberCategories =
clearingMemberCategoryImdg.getCollectionObjectsByPredicate(clearingMemberCategoryPredicate); clearingMemberCategoryImdg.getCollectionObjectsBySQL(clearingMemberCategorySql);
Set<Long> companyIds = clearingMemberCategories.stream() Set<Long> companyIds = clearingMemberCategories.stream()
.map(ClearingMemberCategory::getCompanyId) .map(ClearingMemberCategory::getCompanyId)
.collect(Collectors.toSet()); .collect(Collectors.toSet());
ImdgPredicateBuilder builder = liabilitiesClaimsAssetsImdg.predicateBuilder();
ImdgPredicate refundDatePredicate = builder.and( ImdgPredicate refundDatePredicate = builder.and(
builder.greatEqual("refundDate", toInstantStartDay(startDate)), builder.greatEqual("refundDate", toInstantStartDay(startDate)),
builder.lessEqual("refundDate", toInstantStartDay(endDate)) builder.lessEqual("refundDate", toInstantStartDay(endDate))
); );
ImdgPredicate companyIdPredicates = builder.equals("companyId", -1); ImdgPredicate companyIdPredicates = builder.in("companyId", companyIds.toArray(new Comparable[0]));
for (Long companyId : companyIds) {
companyIdPredicates = builder.or(companyIdPredicates, builder.equals("companyId", companyId));
}
ImdgPredicate finalPredicate = builder.and(refundDatePredicate, companyIdPredicates); ImdgPredicate finalPredicate = builder.and(refundDatePredicate, companyIdPredicates);
Collection<LiabilitiesClaimsAssets> liabilitiesClaimsAssets = Collection<LiabilitiesClaimsAssets> liabilitiesClaimsAssets =
liabilitiesClaimsAssetsImdg.getCollectionObjectsByPredicate(finalPredicate); liabilitiesClaimsAssetsImdg.getCollectionObjectsByPredicate(finalPredicate);

View file

@ -38,6 +38,11 @@ public class ImdgPredicateBuilderHazelcast implements ImdgPredicateBuilder {
return new ImdgPredicateHazelcast(Predicates.lessThan(key, cmpValue)); return new ImdgPredicateHazelcast(Predicates.lessThan(key, cmpValue));
} }
@Override
public ImdgPredicate in(String key, Comparable[] values) {
return new ImdgPredicateHazelcast(Predicates.in(key, values));
}
@Override @Override
public ImdgPredicate not(ImdgPredicate param) { public ImdgPredicate not(ImdgPredicate param) {
ImdgPredicateHazelcast paramMy = (ImdgPredicateHazelcast) param; ImdgPredicateHazelcast paramMy = (ImdgPredicateHazelcast) param;

View file

@ -7,6 +7,8 @@ public interface ImdgPredicateBuilder {
ImdgPredicate greater(String key, Comparable value); ImdgPredicate greater(String key, Comparable value);
ImdgPredicate less(String key, Comparable value); ImdgPredicate less(String key, Comparable value);
ImdgPredicate in(String key, Comparable... values);
ImdgPredicate not(ImdgPredicate param); ImdgPredicate not(ImdgPredicate param);
ImdgPredicate and(ImdgPredicate paramA, ImdgPredicate paramB); ImdgPredicate and(ImdgPredicate paramA, ImdgPredicate paramB);
ImdgPredicate and(ImdgPredicate paramA, ImdgPredicate paramB, ImdgPredicate paramC); ImdgPredicate and(ImdgPredicate paramA, ImdgPredicate paramB, ImdgPredicate paramC);