http://jira.mfd.msk:8088/browse/CLS-358 some fixes
This commit is contained in:
parent
810ebc3f58
commit
262166d470
30 changed files with 595 additions and 352 deletions
|
|
@ -1,63 +1,163 @@
|
|||
package ru.spcex.clearing.reports.config;
|
||||
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.ComponentScan;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import ru.spcex.clearing.reports.reports.*;
|
||||
import ru.spcex.clearing.reports.reports.bp.*;
|
||||
import ru.spcex.clearing.reports.reports.ks.*;
|
||||
import ru.spcex.platform.enumeration.ReportType;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Configuration
|
||||
@ComponentScan(basePackages = "ru.spcex.clearing.reports.reports")
|
||||
public class ReportBuildersConfig {
|
||||
@Bean("reportBuildersWithoutParams")
|
||||
public Map<ReportType, List<CSVReportBuilder<EmptyParams>>> reportBuildersWithoutParams(ImdgProvider imdgProvider) {
|
||||
public Map<ReportType, List<CSVReportBuilder<EmptyParams>>> reportBuildersWithoutParams(
|
||||
SummaryLiabilitiesClaimsReportBuilder summaryLiabilitiesClaimsReportBuilder,
|
||||
SummaryMoneyChangeReportBuilder summaryMoneyChangeReportBuilder,
|
||||
KSRepCashRegistersReportBuilder ksRepCashRegistersReportBuilder,
|
||||
KSRepCashRegisterSumsReportBuilder ksRepCashRegisterSumsReportBuilder,
|
||||
KSRepDepoRegistersReportBuilder ksRepDepoRegistersReportBuilder,
|
||||
KSRepDepoRegisterQuantitiesReportBuilder ksRepDepoRegisterQuantitiesReportBuilder,
|
||||
KSRepTradesReportBuilder ksRepTradesReportBuilder,
|
||||
KSRepFirmDetailsReportBuilder ksRepFirmDetailsReportBuilder
|
||||
) {
|
||||
Map<ReportType, List<CSVReportBuilder<EmptyParams>>> resultMap = new HashMap<>();
|
||||
resultMap.put(ReportType.SUMMARY_LIABILITIES_CLAIMS, List.of(new SummaryLiabilitiesClaimsReportBuilder(imdgProvider)));
|
||||
resultMap.put(ReportType.SUMMARY_MONEY_CHANGE, List.of(new SummaryMoneyChangeReportBuilder(imdgProvider)));
|
||||
resultMap.put(ReportType.KS_REP_CASH_REGISTERS, List.of(new KSRepCashRegistersReportBuilder(imdgProvider)));
|
||||
resultMap.put(ReportType.KS_REP_CASH_REGISTER_SUMS, List.of(new KSRepCashRegisterSumsReportBuilder(imdgProvider)));
|
||||
resultMap.put(ReportType.KS_REP_DEPO_REGISTERS, List.of(new KSRepDepoRegistersReportBuilder(imdgProvider)));
|
||||
resultMap.put(ReportType.KS_REP_DEPO_REGISTER_QUANTITIES, List.of(new KSRepDepoRegisterQuantitiesReportBuilder(imdgProvider)));
|
||||
resultMap.put(ReportType.KS_REP_TRADES, List.of(new KSRepTradesReportBuilder(imdgProvider)));
|
||||
resultMap.put(ReportType.KS_REP_FIRM_DETAILS, List.of(new KSRepFirmDetailsReportBuilder(imdgProvider)));
|
||||
resultMap.put(ReportType.SUMMARY_LIABILITIES_CLAIMS, List.of(summaryLiabilitiesClaimsReportBuilder));
|
||||
resultMap.put(ReportType.SUMMARY_MONEY_CHANGE, List.of(summaryMoneyChangeReportBuilder));
|
||||
resultMap.put(ReportType.KS_REP_CASH_REGISTERS, List.of(ksRepCashRegistersReportBuilder));
|
||||
resultMap.put(ReportType.KS_REP_CASH_REGISTER_SUMS, List.of(ksRepCashRegisterSumsReportBuilder));
|
||||
resultMap.put(ReportType.KS_REP_DEPO_REGISTERS, List.of(ksRepDepoRegistersReportBuilder));
|
||||
resultMap.put(ReportType.KS_REP_DEPO_REGISTER_QUANTITIES, List.of(ksRepDepoRegisterQuantitiesReportBuilder));
|
||||
resultMap.put(ReportType.KS_REP_TRADES, List.of(ksRepTradesReportBuilder));
|
||||
resultMap.put(ReportType.KS_REP_FIRM_DETAILS, List.of(ksRepFirmDetailsReportBuilder));
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
@Bean("reportBuildersWithSessionIdParam")
|
||||
public Map<ReportType, List<CSVReportBuilder<SessionIdParam>>> reportBuildersWithSessionIdParam(ImdgProvider imdgProvider) {
|
||||
public Map<ReportType, List<CSVReportBuilder<SessionIdParam>>> reportBuildersWithSessionIdParam(
|
||||
OperationalLiabilitiesClaimsReportBuilder operationalLiabilitiesClaimsReportBuilder,
|
||||
OperationalMoneyChangeReportBuilder operationalMoneyChangeReportBuilder,
|
||||
ExecutedDealReportBuilder_INFTYPE_1 executedDealReportBuilder_inftype_1,
|
||||
ExecutedDealReportBuilder_INFTYPE_2 executedDealReportBuilder_inftype_2,
|
||||
ExecutedDealReportBuilder_INFTYPE_3 executedDealReportBuilder_inftype_3,
|
||||
ExecutedDealReportBuilder_INFTYPE_4 executedDealReportBuilder_inftype_4,
|
||||
UnfulfilledDealReportBuilder unfulfilledDealReportBuilder,
|
||||
KSRepCashNettoReportBuilder ksRepCashNettoReportBuilder,
|
||||
KSRepDepoNettoReportBuilder ksRepDepoNettoReportBuilder
|
||||
) {
|
||||
Map<ReportType, List<CSVReportBuilder<SessionIdParam>>> resultMap = new HashMap<>();
|
||||
resultMap.put(ReportType.OPERATIONAL_LIABILITIES_CLAIMS, List.of(new OperationalLiabilitiesClaimsReportBuilder(imdgProvider)));
|
||||
resultMap.put(ReportType.OPERATIONAL_MONEY_CHANGE, List.of(new OperationalMoneyChangeReportBuilder(imdgProvider)));
|
||||
resultMap.put(ReportType.OPERATIONAL_LIABILITIES_CLAIMS, List.of(operationalLiabilitiesClaimsReportBuilder));
|
||||
resultMap.put(ReportType.OPERATIONAL_MONEY_CHANGE, List.of(operationalMoneyChangeReportBuilder));
|
||||
resultMap.put(ReportType.EXECUTED_DEAL_REPORT,
|
||||
List.of(
|
||||
new ExecutedDealReportBuilder_INFTYPE_1(imdgProvider),
|
||||
new ExecutedDealReportBuilder_INFTYPE_2(imdgProvider),
|
||||
new ExecutedDealReportBuilder_INFTYPE_3(imdgProvider),
|
||||
new ExecutedDealReportBuilder_INFTYPE_4(imdgProvider)
|
||||
executedDealReportBuilder_inftype_1,
|
||||
executedDealReportBuilder_inftype_2,
|
||||
executedDealReportBuilder_inftype_3,
|
||||
executedDealReportBuilder_inftype_4
|
||||
)
|
||||
);
|
||||
resultMap.put(ReportType.UNFULFILLED_DEAL_REPORT, List.of(new UnfulfilledDealReportBuilder(imdgProvider)));
|
||||
resultMap.put(ReportType.KS_REP_CASH_NETTO, List.of(new KSRepCashNettoReportBuilder(imdgProvider)));
|
||||
resultMap.put(ReportType.KS_REP_DEPO_NETTO, List.of(new KSRepDepoNettoReportBuilder(imdgProvider)));
|
||||
resultMap.put(ReportType.UNFULFILLED_DEAL_REPORT, List.of(unfulfilledDealReportBuilder));
|
||||
resultMap.put(ReportType.KS_REP_CASH_NETTO, List.of(ksRepCashNettoReportBuilder));
|
||||
resultMap.put(ReportType.KS_REP_DEPO_NETTO, List.of(ksRepDepoNettoReportBuilder));
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
@Bean("reportBuildersWithSessionIdListParam")
|
||||
public Map<ReportType, List<CSVReportBuilder<SessionIdListParams>>> reportBuildersWithSessionIdListParams(ImdgProvider imdgProvider) {
|
||||
public Map<ReportType, List<CSVReportBuilder<SessionIdListParams>>> reportBuildersWithSessionIdListParams(
|
||||
PeriodLiabilitiesClaimsReportBuilder periodLiabilitiesClaimsReportBuilder
|
||||
) {
|
||||
Map<ReportType, List<CSVReportBuilder<SessionIdListParams>>> resultMap = new HashMap<>();
|
||||
resultMap.put(ReportType.PERIOD_LIABILITIES_CLAIMS, List.of(new PeriodLiabilitiesClaimsReportBuilder(imdgProvider)));
|
||||
resultMap.put(ReportType.PERIOD_LIABILITIES_CLAIMS, List.of(periodLiabilitiesClaimsReportBuilder));
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
@Bean("reportBuildersWithPeriodParams")
|
||||
public Map<ReportType, List<CSVReportBuilder<PeriodParams>>> reportBuildersWithPeriodParams(ImdgProvider imdgProvider) {
|
||||
public Map<ReportType, List<CSVReportBuilder<PeriodParams>>> reportBuildersWithPeriodParams(
|
||||
PeriodMoneyChangeReportBuilder periodMoneyChangeReportBuilder
|
||||
) {
|
||||
Map<ReportType, List<CSVReportBuilder<PeriodParams>>> resultMap = new HashMap<>();
|
||||
resultMap.put(ReportType.PERIOD_MONEY_CHANGE, List.of(new PeriodMoneyChangeReportBuilder(imdgProvider)));
|
||||
resultMap.put(ReportType.PERIOD_MONEY_CHANGE, List.of(periodMoneyChangeReportBuilder));
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
@Bean("reportBuildersForGREP")
|
||||
public Map<ReportType, List<CSVReportBuilder<?>>> reportBuildersForGREP(
|
||||
SummaryLiabilitiesClaimsReportBuilder summaryLiabilitiesClaimsReportBuilder,
|
||||
SummaryMoneyChangeReportBuilder summaryMoneyChangeReportBuilder,
|
||||
KSRepCashRegistersReportBuilder ksRepCashRegistersReportBuilder,
|
||||
KSRepCashRegisterSumsReportBuilder ksRepCashRegisterSumsReportBuilder,
|
||||
KSRepDepoRegistersReportBuilder ksRepDepoRegistersReportBuilder,
|
||||
KSRepDepoRegisterQuantitiesReportBuilder ksRepDepoRegisterQuantitiesReportBuilder,
|
||||
KSRepTradesReportBuilder ksRepTradesReportBuilder,
|
||||
KSRepFirmDetailsReportBuilder ksRepFirmDetailsReportBuilder,
|
||||
KSRepCashNettoReportBuilder ksRepCashNettoReportBuilder,
|
||||
KSRepDepoNettoReportBuilder ksRepDepoNettoReportBuilder,
|
||||
PeriodLiabilitiesClaimsReportBuilder periodLiabilitiesClaimsReportBuilder,
|
||||
PeriodMoneyChangeReportBuilder periodMoneyChangeReportBuilder
|
||||
) {
|
||||
Map<ReportType, List<CSVReportBuilder<?>>> resultMap = new HashMap<>();
|
||||
resultMap.put(ReportType.SUMMARY_LIABILITIES_CLAIMS, List.of(summaryLiabilitiesClaimsReportBuilder));
|
||||
resultMap.put(ReportType.SUMMARY_MONEY_CHANGE, List.of(summaryMoneyChangeReportBuilder));
|
||||
resultMap.put(ReportType.KS_REP_CASH_REGISTERS, List.of(ksRepCashRegistersReportBuilder));
|
||||
resultMap.put(ReportType.KS_REP_CASH_REGISTER_SUMS, List.of(ksRepCashRegisterSumsReportBuilder));
|
||||
resultMap.put(ReportType.KS_REP_DEPO_REGISTERS, List.of(ksRepDepoRegistersReportBuilder));
|
||||
resultMap.put(ReportType.KS_REP_DEPO_REGISTER_QUANTITIES, List.of(ksRepDepoRegisterQuantitiesReportBuilder));
|
||||
resultMap.put(ReportType.KS_REP_TRADES, List.of(ksRepTradesReportBuilder));
|
||||
resultMap.put(ReportType.KS_REP_FIRM_DETAILS, List.of(ksRepFirmDetailsReportBuilder));
|
||||
resultMap.put(ReportType.KS_REP_CASH_NETTO, List.of(ksRepCashNettoReportBuilder));
|
||||
resultMap.put(ReportType.KS_REP_DEPO_NETTO, List.of(ksRepDepoNettoReportBuilder));
|
||||
resultMap.put(ReportType.PERIOD_LIABILITIES_CLAIMS, List.of(periodLiabilitiesClaimsReportBuilder));
|
||||
resultMap.put(ReportType.PERIOD_MONEY_CHANGE, List.of(periodMoneyChangeReportBuilder));
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
@Bean("reportBuildersForGREF")
|
||||
public Map<ReportType, List<CSVReportBuilder<?>>> reportBuildersForGREF(
|
||||
KSRepCashRegistersReportBuilder ksRepCashRegistersReportBuilder,
|
||||
KSRepCashRegisterSumsReportBuilder ksRepCashRegisterSumsReportBuilder,
|
||||
KSRepDepoRegistersReportBuilder ksRepDepoRegistersReportBuilder,
|
||||
KSRepDepoRegisterQuantitiesReportBuilder ksRepDepoRegisterQuantitiesReportBuilder,
|
||||
KSRepTradesReportBuilder ksRepTradesReportBuilder,
|
||||
KSRepFirmDetailsReportBuilder ksRepFirmDetailsReportBuilder,
|
||||
KSRepCashNettoReportBuilder ksRepCashNettoReportBuilder,
|
||||
KSRepDepoNettoReportBuilder ksRepDepoNettoReportBuilder
|
||||
) {
|
||||
Map<ReportType, List<CSVReportBuilder<?>>> resultMap = new HashMap<>();
|
||||
resultMap.put(ReportType.KS_REP_CASH_REGISTERS, List.of(ksRepCashRegistersReportBuilder));
|
||||
resultMap.put(ReportType.KS_REP_CASH_REGISTER_SUMS, List.of(ksRepCashRegisterSumsReportBuilder));
|
||||
resultMap.put(ReportType.KS_REP_DEPO_REGISTERS, List.of(ksRepDepoRegistersReportBuilder));
|
||||
resultMap.put(ReportType.KS_REP_DEPO_REGISTER_QUANTITIES, List.of(ksRepDepoRegisterQuantitiesReportBuilder));
|
||||
resultMap.put(ReportType.KS_REP_TRADES, List.of(ksRepTradesReportBuilder));
|
||||
resultMap.put(ReportType.KS_REP_FIRM_DETAILS, List.of(ksRepFirmDetailsReportBuilder));
|
||||
resultMap.put(ReportType.KS_REP_CASH_NETTO, List.of(ksRepCashNettoReportBuilder));
|
||||
resultMap.put(ReportType.KS_REP_DEPO_NETTO, List.of(ksRepDepoNettoReportBuilder));
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
@Bean("reportBuildersForGRET")
|
||||
public Map<ReportType, List<CSVReportBuilder<?>>> reportBuildersForGRET(
|
||||
ExecutedDealReportBuilder_INFTYPE_1 executedDealReportBuilder_inftype_1,
|
||||
ExecutedDealReportBuilder_INFTYPE_2 executedDealReportBuilder_inftype_2,
|
||||
ExecutedDealReportBuilder_INFTYPE_3 executedDealReportBuilder_inftype_3,
|
||||
ExecutedDealReportBuilder_INFTYPE_4 executedDealReportBuilder_inftype_4,
|
||||
UnfulfilledDealReportBuilder unfulfilledDealReportBuilder
|
||||
) {
|
||||
Map<ReportType, List<CSVReportBuilder<?>>> resultMap = new HashMap<>();
|
||||
resultMap.put(ReportType.EXECUTED_DEAL_REPORT,
|
||||
List.of(
|
||||
executedDealReportBuilder_inftype_1,
|
||||
executedDealReportBuilder_inftype_2,
|
||||
executedDealReportBuilder_inftype_3,
|
||||
executedDealReportBuilder_inftype_4
|
||||
)
|
||||
);
|
||||
resultMap.put(ReportType.UNFULFILLED_DEAL_REPORT, List.of(unfulfilledDealReportBuilder));
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -155,7 +155,7 @@ public class ValidationConfig {
|
|||
|
||||
// todo оставил бин валидатора на будущее, если в дальнейшем придется проверять запрос. в текущей версии, по факту,
|
||||
// запрос не проверяется: в случае если sessionId не указан отчеты не строятся
|
||||
@Bean("reportRequestGREP")
|
||||
@Bean("reportRequestGREPValidator")
|
||||
public Function<LauncherCommandRequest, IValidator> reportRequestGREPValidator(
|
||||
Map<String, Imdg<? extends SpcexObjectBase>> imdgForValidation
|
||||
) {
|
||||
|
|
@ -174,7 +174,7 @@ public class ValidationConfig {
|
|||
|
||||
// todo оставил бин валидатора на будущее, если в дальнейшем придется проверять запрос. в текущей версии, по факту,
|
||||
// запрос не проверяется: в случае если sessionId не указан отчеты не строятся
|
||||
@Bean("reportRequestGRET")
|
||||
@Bean("reportRequestGRETValidator")
|
||||
public Function<LauncherCommandRequest, IValidator> reportRequestGRETValidator(
|
||||
Map<String, Imdg<? extends SpcexObjectBase>> imdgForValidation
|
||||
) {
|
||||
|
|
@ -193,7 +193,7 @@ public class ValidationConfig {
|
|||
|
||||
// todo оставил бин валидатора на будущее, если в дальнейшем придется проверять запрос. в текущей версии, по факту,
|
||||
// запрос не проверяется: в случае если sessionId не указан отчеты не строятся
|
||||
@Bean("reportRequestGREF")
|
||||
@Bean("reportRequestGREFValidator")
|
||||
public Function<LauncherCommandRequest, IValidator> reportRequestGREFValidator(
|
||||
Map<String, Imdg<? extends SpcexObjectBase>> imdgForValidation
|
||||
) {
|
||||
|
|
|
|||
|
|
@ -53,6 +53,11 @@ public abstract class CSVReportBuilder<P> {
|
|||
*/
|
||||
public abstract ReportType getReportType();
|
||||
|
||||
/**
|
||||
* Тип параметров для построения отчетов
|
||||
*/
|
||||
public abstract Class<P> getParamsType();
|
||||
|
||||
/**
|
||||
* Формирование отчета на основе параметров
|
||||
*
|
||||
|
|
|
|||
|
|
@ -38,4 +38,12 @@ public class PairRegistryId {
|
|||
public int hashCode() {
|
||||
return Objects.hash(groupId, settlementDate);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
PairRegistryId that = (PairRegistryId) o;
|
||||
return Objects.equals(groupId, that.groupId) && Objects.equals(settlementDate, that.settlementDate);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,7 +14,10 @@ import java.math.RoundingMode;
|
|||
import java.time.LocalDate;
|
||||
import java.time.ZoneId;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public abstract class ExecutedDealReportBuilderCommon<T> extends CSVReportBuilder<T> {
|
||||
protected final DateTimeFormatter fileNameDateTimeFormatter = DateTimeFormatter.ofPattern("yyMMddHHmmssSSS");
|
||||
|
|
@ -55,17 +58,11 @@ public abstract class ExecutedDealReportBuilderCommon<T> extends CSVReportBuilde
|
|||
protected void collect(T params) {
|
||||
Collection<ExecutionFond> executionFonds = getExecutionFondsForReport(params);
|
||||
|
||||
Map<Long, Boolean> activeCompanyForId = new HashMap<>();
|
||||
lines = new ArrayList<>(executionFonds.size());
|
||||
for (ExecutionFond executionFond : executionFonds) {
|
||||
try {
|
||||
Boolean activeCompany = activeCompanyForId.get(executionFond.getCompanyId());
|
||||
if (activeCompany == null) {
|
||||
Company company = companyImdg.getSingleObjectByID(executionFond.getCompanyId());
|
||||
activeCompany = WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus());
|
||||
activeCompanyForId.put(executionFond.getCompanyId(), activeCompany);
|
||||
}
|
||||
if (!activeCompany) continue;
|
||||
Company company = companyImdg.getSingleObjectByID(executionFond.getCompanyId());
|
||||
if (!WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus())) continue;
|
||||
|
||||
STrades sTrade = null;
|
||||
if (executionFond.getSide() != null && executionFond.getExchangeExecutionId() != null) {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,8 @@
|
|||
package ru.spcex.clearing.reports.reports.bp;
|
||||
|
||||
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Component;
|
||||
import ru.clearing.classes.statics.data.execution.ExecutionFond;
|
||||
import ru.spcex.clearing.reports.reports.SessionIdParam;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
|
|
@ -9,6 +12,8 @@ import java.time.LocalDate;
|
|||
import java.time.LocalDateTime;
|
||||
import java.util.Collection;
|
||||
|
||||
@Component
|
||||
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
|
||||
public class ExecutedDealReportBuilder_INFTYPE_1 extends ExecutedDealReportBuilderCommon<SessionIdParam> {
|
||||
|
||||
public ExecutedDealReportBuilder_INFTYPE_1(ImdgProvider imdgProvider) {
|
||||
|
|
@ -20,6 +25,11 @@ public class ExecutedDealReportBuilder_INFTYPE_1 extends ExecutedDealReportBuild
|
|||
return "KS_BR_PFX64_INFTYPE_1_%s".formatted(fileNameDateTimeFormatter.format(LocalDateTime.now()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<SessionIdParam> getParamsType() {
|
||||
return SessionIdParam.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Collection<ExecutionFond> getExecutionFondsForReport(SessionIdParam params) {
|
||||
ImdgPredicateBuilder pb = executionFondImdg.predicateBuilder();
|
||||
|
|
|
|||
|
|
@ -1,5 +1,8 @@
|
|||
package ru.spcex.clearing.reports.reports.bp;
|
||||
|
||||
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Component;
|
||||
import ru.clearing.classes.statics.data.execution.ExecutionFond;
|
||||
import ru.spcex.clearing.reports.reports.SessionIdParam;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
|
|
@ -9,6 +12,8 @@ import java.time.LocalDate;
|
|||
import java.time.LocalDateTime;
|
||||
import java.util.Collection;
|
||||
|
||||
@Component
|
||||
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
|
||||
public class ExecutedDealReportBuilder_INFTYPE_2 extends ExecutedDealReportBuilderCommon<SessionIdParam> {
|
||||
|
||||
public ExecutedDealReportBuilder_INFTYPE_2(ImdgProvider imdgProvider) {
|
||||
|
|
@ -20,6 +25,11 @@ public class ExecutedDealReportBuilder_INFTYPE_2 extends ExecutedDealReportBuild
|
|||
return "KS_BR_PFX64_INFTYPE_2_%s".formatted(fileNameDateTimeFormatter.format(LocalDateTime.now()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<SessionIdParam> getParamsType() {
|
||||
return SessionIdParam.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Collection<ExecutionFond> getExecutionFondsForReport(SessionIdParam params) {
|
||||
ImdgPredicateBuilder pb = executionFondImdg.predicateBuilder();
|
||||
|
|
|
|||
|
|
@ -1,5 +1,8 @@
|
|||
package ru.spcex.clearing.reports.reports.bp;
|
||||
|
||||
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Component;
|
||||
import ru.clearing.classes.statics.data.execution.ExecutionFond;
|
||||
import ru.spcex.clearing.reports.reports.SessionIdParam;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
|
|
@ -9,6 +12,8 @@ import java.time.LocalDate;
|
|||
import java.time.LocalDateTime;
|
||||
import java.util.Collection;
|
||||
|
||||
@Component
|
||||
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
|
||||
public class ExecutedDealReportBuilder_INFTYPE_3 extends ExecutedDealReportBuilderCommon<SessionIdParam> {
|
||||
|
||||
public ExecutedDealReportBuilder_INFTYPE_3(ImdgProvider imdgProvider) {
|
||||
|
|
@ -20,6 +25,11 @@ public class ExecutedDealReportBuilder_INFTYPE_3 extends ExecutedDealReportBuild
|
|||
return "KS_BR_PFX64_INFTYPE_3_%s".formatted(fileNameDateTimeFormatter.format(LocalDateTime.now()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<SessionIdParam> getParamsType() {
|
||||
return SessionIdParam.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Collection<ExecutionFond> getExecutionFondsForReport(SessionIdParam params) {
|
||||
ImdgPredicateBuilder pb = executionFondImdg.predicateBuilder();
|
||||
|
|
|
|||
|
|
@ -1,5 +1,8 @@
|
|||
package ru.spcex.clearing.reports.reports.bp;
|
||||
|
||||
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Component;
|
||||
import ru.clearing.classes.statics.data.execution.ExecutionFond;
|
||||
import ru.spcex.clearing.reports.reports.SessionIdParam;
|
||||
import ru.spcex.platform.enumeration.Allowed;
|
||||
|
|
@ -10,6 +13,8 @@ import java.time.LocalDate;
|
|||
import java.time.LocalDateTime;
|
||||
import java.util.Collection;
|
||||
|
||||
@Component
|
||||
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
|
||||
public class ExecutedDealReportBuilder_INFTYPE_4 extends ExecutedDealReportBuilderCommon<SessionIdParam> {
|
||||
|
||||
public ExecutedDealReportBuilder_INFTYPE_4(ImdgProvider imdgProvider) {
|
||||
|
|
@ -21,6 +26,11 @@ public class ExecutedDealReportBuilder_INFTYPE_4 extends ExecutedDealReportBuild
|
|||
return "KS_BR_PFX64_INFTYPE_4_%s".formatted(fileNameDateTimeFormatter.format(LocalDateTime.now()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<SessionIdParam> getParamsType() {
|
||||
return SessionIdParam.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Collection<ExecutionFond> getExecutionFondsForReport(SessionIdParam params) {
|
||||
ImdgPredicateBuilder pb = executionFondImdg.predicateBuilder();
|
||||
|
|
|
|||
|
|
@ -1,5 +1,8 @@
|
|||
package ru.spcex.clearing.reports.reports.bp;
|
||||
|
||||
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Component;
|
||||
import ru.clearing.classes.statics.data.execution.ExecutionDeposit;
|
||||
import ru.clearing.classes.statics.data.execution.ExecutionFond;
|
||||
import ru.spcex.clearing.reports.reports.SessionIdParam;
|
||||
|
|
@ -10,6 +13,8 @@ import java.time.LocalDateTime;
|
|||
import java.util.Collection;
|
||||
import java.util.Map;
|
||||
|
||||
@Component
|
||||
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
|
||||
public class OperationalLiabilitiesClaimsReportBuilder extends LiabilitiesClaimsReportBuilder<SessionIdParam> {
|
||||
public OperationalLiabilitiesClaimsReportBuilder(ImdgProvider imdgProvider) {
|
||||
super(imdgProvider);
|
||||
|
|
@ -40,4 +45,9 @@ public class OperationalLiabilitiesClaimsReportBuilder extends LiabilitiesClaims
|
|||
public ReportType getReportType() {
|
||||
return ReportType.OPERATIONAL_LIABILITIES_CLAIMS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<SessionIdParam> getParamsType() {
|
||||
return SessionIdParam.class;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,8 @@
|
|||
package ru.spcex.clearing.reports.reports.bp;
|
||||
|
||||
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Component;
|
||||
import ru.clearing.classes.statics.data.registry.Registry;
|
||||
import ru.spcex.clearing.reports.reports.SessionIdParam;
|
||||
import ru.spcex.platform.enumeration.ReportType;
|
||||
|
|
@ -9,6 +12,8 @@ import java.time.LocalDateTime;
|
|||
import java.util.Collection;
|
||||
import java.util.Map;
|
||||
|
||||
@Component
|
||||
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
|
||||
public class OperationalMoneyChangeReportBuilder extends MoneyChangeReportBuilder<SessionIdParam> {
|
||||
public OperationalMoneyChangeReportBuilder(ImdgProvider imdgProvider) {
|
||||
super(imdgProvider);
|
||||
|
|
@ -30,4 +35,9 @@ public class OperationalMoneyChangeReportBuilder extends MoneyChangeReportBuilde
|
|||
public ReportType getReportType() {
|
||||
return ReportType.OPERATIONAL_MONEY_CHANGE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<SessionIdParam> getParamsType() {
|
||||
return SessionIdParam.class;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,8 @@
|
|||
package ru.spcex.clearing.reports.reports.bp;
|
||||
|
||||
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Component;
|
||||
import ru.clearing.classes.statics.data.execution.ExecutionDeposit;
|
||||
import ru.clearing.classes.statics.data.execution.ExecutionFond;
|
||||
import ru.spcex.clearing.reports.reports.SessionIdListParams;
|
||||
|
|
@ -13,6 +16,8 @@ import java.time.LocalDateTime;
|
|||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
|
||||
@Component
|
||||
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
|
||||
public class PeriodLiabilitiesClaimsReportBuilder extends LiabilitiesClaimsReportBuilder<SessionIdListParams> {
|
||||
|
||||
public PeriodLiabilitiesClaimsReportBuilder(ImdgProvider imdgProvider) {
|
||||
|
|
@ -29,6 +34,11 @@ public class PeriodLiabilitiesClaimsReportBuilder extends LiabilitiesClaimsRepor
|
|||
return ReportType.PERIOD_LIABILITIES_CLAIMS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<SessionIdListParams> getParamsType() {
|
||||
return SessionIdListParams.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Collection<ExecutionFond> getExecutionFondsForReport(SessionIdListParams params) {
|
||||
if (params.getSessionIdList() == null || params.getSessionIdList().isEmpty()) return Collections.emptyList();
|
||||
|
|
|
|||
|
|
@ -1,15 +1,21 @@
|
|||
package ru.spcex.clearing.reports.reports.bp;
|
||||
|
||||
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Component;
|
||||
import ru.clearing.classes.statics.data.registry.Registry;
|
||||
import ru.spcex.clearing.reports.reports.PeriodParams;
|
||||
import ru.spcex.platform.enumeration.RegistryTradingParams;
|
||||
import ru.spcex.platform.enumeration.ReportType;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
||||
import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Collection;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Component
|
||||
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
|
||||
public class PeriodMoneyChangeReportBuilder extends MoneyChangeReportBuilder<PeriodParams> {
|
||||
|
||||
public PeriodMoneyChangeReportBuilder(ImdgProvider imdgProvider) {
|
||||
|
|
@ -19,16 +25,14 @@ public class PeriodMoneyChangeReportBuilder extends MoneyChangeReportBuilder<Per
|
|||
@Override
|
||||
protected Collection<Registry> getRegistryForReport(PeriodParams params) {
|
||||
ImdgPredicateBuilder pb = registryImdg.predicateBuilder();
|
||||
Collection<Registry> registries = registryImdg.getCollectionObjectsByPredicate(
|
||||
String sql = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.CM__, RegistryTradingParams.LM__).build();
|
||||
return registryImdg.getCollectionObjectsByPredicate(
|
||||
pb.and(
|
||||
pb.sql(sql),
|
||||
pb.greatEqual("clearingDate", params.getStartDate()),
|
||||
pb.lessEqual("clearingDate", params.getEndDate())
|
||||
)
|
||||
);
|
||||
registries = registries.stream()
|
||||
.filter(registry -> registry.getRegistryCode().startsWith("CM") || registry.getRegistryCode().startsWith("LM"))
|
||||
.collect(Collectors.toList());
|
||||
return registries;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -45,4 +49,9 @@ public class PeriodMoneyChangeReportBuilder extends MoneyChangeReportBuilder<Per
|
|||
return ReportType.PERIOD_MONEY_CHANGE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<PeriodParams> getParamsType() {
|
||||
return PeriodParams.class;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,8 @@
|
|||
package ru.spcex.clearing.reports.reports.bp;
|
||||
|
||||
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Component;
|
||||
import ru.clearing.classes.statics.data.execution.ExecutionDeposit;
|
||||
import ru.clearing.classes.statics.data.execution.ExecutionFond;
|
||||
import ru.spcex.clearing.reports.reports.EmptyParams;
|
||||
|
|
@ -11,6 +14,8 @@ import java.time.LocalDate;
|
|||
import java.time.LocalDateTime;
|
||||
import java.util.Collection;
|
||||
|
||||
@Component
|
||||
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
|
||||
public class SummaryLiabilitiesClaimsReportBuilder extends LiabilitiesClaimsReportBuilder<EmptyParams> {
|
||||
public SummaryLiabilitiesClaimsReportBuilder(ImdgProvider imdgProvider) {
|
||||
super(imdgProvider);
|
||||
|
|
@ -41,4 +46,9 @@ public class SummaryLiabilitiesClaimsReportBuilder extends LiabilitiesClaimsRepo
|
|||
public ReportType getReportType() {
|
||||
return ReportType.SUMMARY_LIABILITIES_CLAIMS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<EmptyParams> getParamsType() {
|
||||
return EmptyParams.class;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,16 +1,22 @@
|
|||
package ru.spcex.clearing.reports.reports.bp;
|
||||
|
||||
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Component;
|
||||
import ru.clearing.classes.statics.data.registry.Registry;
|
||||
import ru.spcex.clearing.reports.reports.EmptyParams;
|
||||
import ru.spcex.platform.enumeration.RegistryTradingParams;
|
||||
import ru.spcex.platform.enumeration.ReportType;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
||||
import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Collection;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Component
|
||||
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
|
||||
public class SummaryMoneyChangeReportBuilder extends MoneyChangeReportBuilder<EmptyParams> {
|
||||
public SummaryMoneyChangeReportBuilder(ImdgProvider imdgProvider) {
|
||||
super(imdgProvider);
|
||||
|
|
@ -20,18 +26,16 @@ public class SummaryMoneyChangeReportBuilder extends MoneyChangeReportBuilder<Em
|
|||
protected Collection<Registry> getRegistryForReport(EmptyParams param) {
|
||||
// todo отсечение по периоду - временный код, пока не решили как передавать в GREP период.
|
||||
// по изначальной задумке в summary отчет должны включаться все записи.
|
||||
String sql = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.CM__, RegistryTradingParams.LM__).build();
|
||||
ImdgPredicateBuilder pb = registryImdg.predicateBuilder();
|
||||
LocalDate now = LocalDate.now();
|
||||
Collection<Registry> registries = registryImdg.getCollectionObjectsByPredicate(
|
||||
return registryImdg.getCollectionObjectsByPredicate(
|
||||
pb.and(
|
||||
pb.sql(sql),
|
||||
pb.greatEqual("clearingDate", now),
|
||||
pb.lessEqual("clearingDate", now)
|
||||
)
|
||||
);
|
||||
registries = registries.stream()
|
||||
.filter(registry -> registry.getRegistryCode().startsWith("CM") || registry.getRegistryCode().startsWith("LM"))
|
||||
.collect(Collectors.toList());
|
||||
return registries;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -44,4 +48,9 @@ public class SummaryMoneyChangeReportBuilder extends MoneyChangeReportBuilder<Em
|
|||
return ReportType.SUMMARY_MONEY_CHANGE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<EmptyParams> getParamsType() {
|
||||
return EmptyParams.class;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,8 @@
|
|||
package ru.spcex.clearing.reports.reports.bp;
|
||||
|
||||
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Component;
|
||||
import ru.clearing.classes.statics.data.company.Company;
|
||||
import ru.clearing.classes.statics.data.execution.ExecutionFond;
|
||||
import ru.clearing.classes.statics.data.misc.STrades;
|
||||
|
|
@ -17,6 +20,8 @@ import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
|||
import java.time.LocalDateTime;
|
||||
import java.util.*;
|
||||
|
||||
@Component
|
||||
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
|
||||
public class UnfulfilledDealReportBuilder extends CSVReportBuilder<SessionIdParam> {
|
||||
private final Imdg<ExecutionFond> executionFondImdg;
|
||||
private final Imdg<Company> companyImdg;
|
||||
|
|
@ -52,6 +57,11 @@ public class UnfulfilledDealReportBuilder extends CSVReportBuilder<SessionIdPara
|
|||
return ReportType.UNFULFILLED_DEAL_REPORT;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<SessionIdParam> getParamsType() {
|
||||
return SessionIdParam.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void collect(SessionIdParam params) {
|
||||
ImdgPredicateBuilder pb = executionFondImdg.predicateBuilder();
|
||||
|
|
|
|||
|
|
@ -23,10 +23,7 @@ import java.math.BigDecimal;
|
|||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.ZoneId;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Component
|
||||
|
|
@ -65,6 +62,11 @@ public class KSRepCashNettoReportBuilder extends CSVReportBuilder<SessionIdParam
|
|||
return ReportType.KS_REP_CASH_NETTO;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<SessionIdParam> getParamsType() {
|
||||
return SessionIdParam.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void collect(SessionIdParam params) {
|
||||
LocalDate nowDate = LocalDate.now();
|
||||
|
|
@ -78,14 +80,12 @@ public class KSRepCashNettoReportBuilder extends CSVReportBuilder<SessionIdParam
|
|||
pb.or(
|
||||
pb.equals("accountType", AccountType.Clrn.getKey()),
|
||||
pb.equals("accountType", AccountType.Info.getKey())
|
||||
)
|
||||
),
|
||||
pb.notNull("settlementDate"),
|
||||
pb.notNull("groupId")
|
||||
);
|
||||
Collection<Registry> registries = registryImdg.getCollectionObjectsByPredicate(finalPredicate);
|
||||
|
||||
// todo check filter (skip register without log)
|
||||
Map<PairRegistryId, List<Registry>> registryMap = registries.stream()
|
||||
.filter(r -> r.getGroupId() != null && r.getSettlementDate() != null)
|
||||
.collect(Collectors.groupingBy(PairRegistryId::new));
|
||||
Map<PairRegistryId, List<Registry>> registryMap = registries.stream().collect(Collectors.groupingBy(PairRegistryId::new));
|
||||
|
||||
lines = new ArrayList<>(registryMap.size());
|
||||
for (Map.Entry<PairRegistryId, List<Registry>> entry : registryMap.entrySet()) {
|
||||
|
|
@ -113,8 +113,8 @@ public class KSRepCashNettoReportBuilder extends CSVReportBuilder<SessionIdParam
|
|||
continue;
|
||||
}
|
||||
|
||||
if (!tmtRegistry.getAccount().equals(omtRegistry.getAccount()) ||
|
||||
!tmtRegistry.getTradingCode().equals(omtRegistry.getTradingCode())) {
|
||||
if (!Objects.equals(tmtRegistry.getAccount(), omtRegistry.getAccount()) ||
|
||||
!Objects.equals(tmtRegistry.getTradingCode(), omtRegistry.getTradingCode())) {
|
||||
log.warn("Invalid TM_T and OM_T registry pair, account or tradingCode not equals. Registry pair was skipped");
|
||||
continue;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,24 +1,33 @@
|
|||
package ru.spcex.clearing.reports.reports.ks;
|
||||
|
||||
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Component;
|
||||
import ru.clearing.classes.statics.data.company.Company;
|
||||
import ru.clearing.classes.statics.data.registry.Registry;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.clearing.reports.reports.CSVReportBuilder;
|
||||
import ru.spcex.clearing.reports.reports.EmptyParams;
|
||||
import ru.spcex.platform.enumeration.AccountType;
|
||||
import ru.spcex.platform.enumeration.RegistryTradingParams;
|
||||
import ru.spcex.platform.enumeration.ReportType;
|
||||
import ru.spcex.platform.enumeration.WorkflowStatus;
|
||||
import ru.spcex.platform.imdg.api.Imdg;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
|
||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
||||
import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
@Component
|
||||
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
|
||||
public class KSRepCashRegisterSumsReportBuilder extends CSVReportBuilder<EmptyParams> {
|
||||
private final Imdg<Registry> registryImdg;
|
||||
private final Imdg<Company> companyImdg;
|
||||
|
|
@ -53,14 +62,20 @@ public class KSRepCashRegisterSumsReportBuilder extends CSVReportBuilder<EmptyPa
|
|||
return ReportType.KS_REP_CASH_REGISTER_SUMS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<EmptyParams> getParamsType() {
|
||||
return EmptyParams.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void collect(EmptyParams params) {
|
||||
LocalDate nowDate = LocalDate.now();
|
||||
Instant instantNow = Instant.now();
|
||||
|
||||
ImdgPredicateBuilder pb = registryImdg.predicateBuilder();
|
||||
String sql = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.AM__).build();
|
||||
ImdgPredicate finalPredicate = pb.and(
|
||||
pb.regex("registryCode", "AM.."),
|
||||
pb.sql(sql),
|
||||
pb.greatEqual("updated", instantNow.truncatedTo(ChronoUnit.DAYS)),
|
||||
pb.less("updated", instantNow.plus(1, ChronoUnit.DAYS).truncatedTo(ChronoUnit.DAYS)),
|
||||
pb.or(
|
||||
|
|
@ -69,18 +84,11 @@ public class KSRepCashRegisterSumsReportBuilder extends CSVReportBuilder<EmptyPa
|
|||
)
|
||||
);
|
||||
Collection<Registry> registries = registryImdg.getCollectionObjectsByPredicate(finalPredicate);
|
||||
|
||||
Map<Long, Boolean> activeCompanyForId = new HashMap<>();
|
||||
lines = new ArrayList<>(registries.size());
|
||||
for (Registry registry : registries) {
|
||||
try {
|
||||
Boolean activeCompany = activeCompanyForId.get(registry.getCompanyId());
|
||||
if (activeCompany == null) {
|
||||
Company company = companyImdg.getSingleObjectByID(registry.getCompanyId());
|
||||
activeCompany = WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus());
|
||||
activeCompanyForId.put(registry.getCompanyId(), activeCompany);
|
||||
}
|
||||
if (!activeCompany) continue;
|
||||
Company company = companyImdg.getSingleObjectByID(registry.getCompanyId());
|
||||
if (!WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus())) continue;
|
||||
|
||||
String firmId = registry.getTradingCode() != null ? registry.getTradingCode() : "";
|
||||
String account = registry.getAccount();
|
||||
|
|
|
|||
|
|
@ -1,5 +1,8 @@
|
|||
package ru.spcex.clearing.reports.reports.ks;
|
||||
|
||||
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Component;
|
||||
import ru.clearing.classes.statics.data.company.Company;
|
||||
import ru.clearing.classes.statics.data.registry.Registry;
|
||||
import ru.clearing.platform.dictionary.RegistryCodeDictionary;
|
||||
|
|
@ -7,19 +10,26 @@ import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
|||
import ru.spcex.clearing.reports.reports.CSVReportBuilder;
|
||||
import ru.spcex.clearing.reports.reports.EmptyParams;
|
||||
import ru.spcex.platform.enumeration.AccountType;
|
||||
import ru.spcex.platform.enumeration.RegistryTradingParams;
|
||||
import ru.spcex.platform.enumeration.ReportType;
|
||||
import ru.spcex.platform.enumeration.WorkflowStatus;
|
||||
import ru.spcex.platform.imdg.api.Imdg;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
|
||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
||||
import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Component
|
||||
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
|
||||
public class KSRepCashRegistersReportBuilder extends CSVReportBuilder<EmptyParams> {
|
||||
private final Imdg<Registry> registryImdg;
|
||||
private final Imdg<Company> companyImdg;
|
||||
|
|
@ -56,14 +66,20 @@ public class KSRepCashRegistersReportBuilder extends CSVReportBuilder<EmptyParam
|
|||
return ReportType.KS_REP_CASH_REGISTERS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<EmptyParams> getParamsType() {
|
||||
return EmptyParams.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void collect(EmptyParams params) {
|
||||
LocalDate nowDate = LocalDate.now();
|
||||
Instant instantNow = Instant.now();
|
||||
|
||||
ImdgPredicateBuilder pb = registryImdg.predicateBuilder();
|
||||
String sql = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.AM_T).build();
|
||||
ImdgPredicate finalPredicate = pb.and(
|
||||
pb.regex("registryCode", "AM.T"),
|
||||
pb.sql(sql),
|
||||
pb.greatEqual("updated", instantNow.truncatedTo(ChronoUnit.DAYS)),
|
||||
pb.less("updated", instantNow.plus(1, ChronoUnit.DAYS).truncatedTo(ChronoUnit.DAYS)),
|
||||
pb.or(
|
||||
|
|
@ -72,20 +88,11 @@ public class KSRepCashRegistersReportBuilder extends CSVReportBuilder<EmptyParam
|
|||
)
|
||||
);
|
||||
Collection<Registry> registries = registryImdg.getCollectionObjectsByPredicate(finalPredicate);
|
||||
|
||||
Map<String, String> nameForRegisterCode = new HashMap<>();
|
||||
Map<Long, Boolean> activeCompanyForId = new HashMap<>();
|
||||
|
||||
lines = new ArrayList<>(registries.size());
|
||||
for (Registry registry : registries) {
|
||||
try {
|
||||
Boolean activeCompany = activeCompanyForId.get(registry.getCompanyId());
|
||||
if (activeCompany == null) {
|
||||
Company company = companyImdg.getSingleObjectByID(registry.getCompanyId());
|
||||
activeCompany = WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus());
|
||||
activeCompanyForId.put(registry.getCompanyId(), activeCompany);
|
||||
}
|
||||
if (!activeCompany) continue;
|
||||
Company company = companyImdg.getSingleObjectByID(registry.getCompanyId());
|
||||
if (!WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus())) continue;
|
||||
|
||||
String firmId = registry.getTradingCode() != null ? registry.getTradingCode() : "";
|
||||
String account = registry.getAccount();
|
||||
|
|
@ -93,12 +100,9 @@ public class KSRepCashRegistersReportBuilder extends CSVReportBuilder<EmptyParam
|
|||
String date = dateFormatter.format(nowDate);
|
||||
String registerCode = registry.getRegistryCode();
|
||||
|
||||
String registerName = nameForRegisterCode.get(registerCode);
|
||||
if (registerName == null) {
|
||||
RegistryCodeDictionary registryCodeDescription = registryCodeDictionaryImdg.getSingleObjectByFieldValues(Map.of("code", registerCode));
|
||||
registerName = registryCodeDescription != null && registryCodeDescription.getName() != null ? registryCodeDescription.getName() : "";
|
||||
nameForRegisterCode.put(registerCode, registerName);
|
||||
}
|
||||
String registerName = "";
|
||||
RegistryCodeDictionary registryCodeDictionary = registryCodeDictionaryImdg.getSingleObjectByFieldValues(Map.of("code", registerCode));
|
||||
if (registryCodeDictionary != null) registerName = registryCodeDictionary.getName();
|
||||
|
||||
String openBalance = registry.getOpenBalance() != null ? df02Format.format(registry.getOpenBalance()) : "";
|
||||
|
||||
|
|
|
|||
|
|
@ -1,23 +1,33 @@
|
|||
package ru.spcex.clearing.reports.reports.ks;
|
||||
|
||||
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Component;
|
||||
import ru.clearing.classes.statics.data.misc.Session;
|
||||
import ru.clearing.classes.statics.data.registry.Registry;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.clearing.reports.reports.CSVReportBuilder;
|
||||
import ru.spcex.clearing.reports.reports.PairRegistryId;
|
||||
import ru.spcex.clearing.reports.reports.SessionIdParam;
|
||||
import ru.spcex.platform.enumeration.AccountType;
|
||||
import ru.spcex.platform.enumeration.RegistryDesignation;
|
||||
import ru.spcex.platform.enumeration.RegistryTradingParams;
|
||||
import ru.spcex.platform.enumeration.ReportType;
|
||||
import ru.spcex.platform.imdg.api.Imdg;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
|
||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
||||
import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.ZoneId;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Component
|
||||
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
|
||||
public class KSRepDepoNettoReportBuilder extends CSVReportBuilder<SessionIdParam> {
|
||||
private final Imdg<Registry> registryImdg;
|
||||
private final Imdg<Session> sessionImdg;
|
||||
|
|
@ -52,81 +62,72 @@ public class KSRepDepoNettoReportBuilder extends CSVReportBuilder<SessionIdParam
|
|||
return ReportType.KS_REP_DEPO_NETTO;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<SessionIdParam> getParamsType() {
|
||||
return SessionIdParam.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void collect(SessionIdParam params) {
|
||||
LocalDate nowDate = LocalDate.now();
|
||||
|
||||
ImdgPredicateBuilder pb = registryImdg.predicateBuilder();
|
||||
String sql = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.TS_T, RegistryTradingParams.OS_T).build();
|
||||
ImdgPredicate finalPredicate = pb.and(
|
||||
pb.equals("sessionId", params.getSessionId()),
|
||||
pb.equals("clearingDate", nowDate),
|
||||
pb.regex("registryCode","[T|O]S.T"),
|
||||
pb.equals("accountType", AccountType.Depo.getKey())
|
||||
pb.sql(sql),
|
||||
pb.equals("accountType", AccountType.Depo.getKey()),
|
||||
pb.notNull("settlementDate"),
|
||||
pb.notNull("groupId")
|
||||
);
|
||||
Collection<Registry> registries = registryImdg.getCollectionObjectsByPredicate(finalPredicate);
|
||||
|
||||
Map<String, Boolean> registryAlreadySaved = new HashMap<>();
|
||||
Map<String, Registry> ostRegistries = new HashMap<>();
|
||||
Map<String, Registry> tstRegistries = new HashMap<>();
|
||||
for (Registry registry : registries) {
|
||||
if (registry.getGroupId() == null || registry.getSettlementDate() == null) continue;
|
||||
registryAlreadySaved.put(registry.getGroupId() + registry.getSettlementDate().toString(), false);
|
||||
if (registry.getRegistryCode().startsWith("O")) {
|
||||
Registry existOSTRegistry = ostRegistries.get(registry.getGroupId() + registry.getSettlementDate().toString());
|
||||
if (existOSTRegistry != null && existOSTRegistry.getBalance() != null) {
|
||||
log.warn("Duplicated registry OM*T (id = {} and id = {}). Use id = {}",
|
||||
registry.getId(),
|
||||
existOSTRegistry,
|
||||
existOSTRegistry);
|
||||
} else ostRegistries.put(registry.getGroupId() + registry.getSettlementDate().toString(), registry);
|
||||
}
|
||||
if (registry.getRegistryCode().startsWith("T")) {
|
||||
Registry existTSTRegistry = tstRegistries.get(registry.getGroupId() + registry.getSettlementDate().toString());
|
||||
if (existTSTRegistry != null && existTSTRegistry.getBalance() != null) {
|
||||
log.warn("Duplicated registry TM*T (id = {} and id = {}). Use id = {}",
|
||||
registry.getId(),
|
||||
existTSTRegistry,
|
||||
existTSTRegistry);
|
||||
} else tstRegistries.put(registry.getGroupId() + registry.getSettlementDate().toString(), registry);
|
||||
}
|
||||
}
|
||||
|
||||
Map<Long, String> createdAtForSessionId = new HashMap<>();
|
||||
Map<PairRegistryId, List<Registry>> registryMap = registries.stream().collect(Collectors.groupingBy(PairRegistryId::new));
|
||||
lines = new ArrayList<>(registries.size());
|
||||
for (Registry registry : registries) {
|
||||
for (Map.Entry<PairRegistryId, List<Registry>> entry : registryMap.entrySet()) {
|
||||
PairRegistryId pairRegistryId = entry.getKey();
|
||||
List<Registry> groupedRegistry = entry.getValue();
|
||||
try {
|
||||
if (registry.getGroupId() == null || registry.getSettlementDate() == null) {
|
||||
log.warn("Registry without GroupId or SettlementDate, id = {}. Skipped", registry.getId());
|
||||
continue;
|
||||
}
|
||||
if (registryAlreadySaved.get(registry.getGroupId() + registry.getSettlementDate().toString())) continue;
|
||||
|
||||
Registry tstRegistry = tstRegistries.get(registry.getGroupId() + registry.getSettlementDate().toString());
|
||||
Registry ostRegistry = ostRegistries.get(registry.getGroupId() + registry.getSettlementDate().toString());
|
||||
|
||||
if (!tstRegistry.getTradingCode().equalsIgnoreCase(ostRegistry.getTradingCode()) ||
|
||||
!tstRegistry.getSessionId().equals(ostRegistry.getSessionId()) ||
|
||||
!tstRegistry.getAccount().equals(ostRegistry.getAccount())) {
|
||||
log.warn("Invalid registry OS*T (id = {}) and TS*T (id = {}) registry pair: fields not equal. GroupId = {}, SettlementDate = {}. Skipped",
|
||||
ostRegistry.getId(),
|
||||
tstRegistry.getId(),
|
||||
registry.getSettlementDate(),
|
||||
registry.getGroupId());
|
||||
if (groupedRegistry.size() != 2) {
|
||||
log.warn("Invalid OM_T and TM_T registries for GroupId = {} and SettlementDate = {}. Registries with id = [{}] was skipped",
|
||||
pairRegistryId.getGroupId(),
|
||||
pairRegistryId.getSettlementDate(),
|
||||
groupedRegistry.stream().map(r -> String.valueOf(r.getId())).collect(Collectors.joining(", "))
|
||||
);
|
||||
continue;
|
||||
}
|
||||
|
||||
String firmId = registry.getTradingCode() != null ? registry.getTradingCode() : "";
|
||||
String sessionId = String.valueOf(registry.getSessionId());
|
||||
|
||||
String sessionDate = createdAtForSessionId.get(registry.getSessionId());
|
||||
if (sessionDate == null) {
|
||||
Session session = sessionImdg.getSingleObjectByID(registry.getSessionId());
|
||||
sessionDate = session != null && session.getCreated() != null ? dateTimeFormatter.format(LocalDateTime.ofInstant(session.getCreated(), ZoneId.systemDefault())) : "";
|
||||
createdAtForSessionId.put(registry.getSessionId(), sessionDate);
|
||||
Registry tstRegistry = null;
|
||||
Registry ostRegistry = null;
|
||||
for (Registry registry : groupedRegistry) {
|
||||
if (RegistryDesignation.O.equalsByKey(registry.getRegistryDesignation())) ostRegistry = registry;
|
||||
if (RegistryDesignation.T.equalsByKey(registry.getRegistryDesignation())) tstRegistry = registry;
|
||||
}
|
||||
|
||||
String account = registry.getAccount();
|
||||
String securityId = registry.getSecuritySymbol() != null ? registry.getSecuritySymbol() : "";
|
||||
if (tstRegistry == null || ostRegistry == null) {
|
||||
log.warn("Invalid TM_T and OM_T registry pair, {} doubled. Registry pair was skipped", tstRegistry == null ? "OM_T" : "TM_T");
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
if (!Objects.equals(tstRegistry.getTradingCode(), ostRegistry.getTradingCode()) ||
|
||||
!Objects.equals(tstRegistry.getAccount(), ostRegistry.getAccount()) ||
|
||||
!Objects.equals(tstRegistry.getSecuritySymbol(), ostRegistry.getSecuritySymbol())) {
|
||||
log.warn("Invalid TS_T and OS_T registry pair, account/tradingCode/securityId not equals. Registry pair was skipped");
|
||||
continue;
|
||||
}
|
||||
|
||||
String firmId = tstRegistry.getTradingCode() != null ? tstRegistry.getTradingCode() : "";
|
||||
String sessionId = String.valueOf(tstRegistry.getSessionId());
|
||||
|
||||
Session session = sessionImdg.getSingleObjectByID(tstRegistry.getSessionId());
|
||||
String sessionDate = "";
|
||||
if (session != null && session.getCreated() != null)
|
||||
sessionDate = dateTimeFormatter.format(LocalDateTime.ofInstant(session.getCreated(), ZoneId.systemDefault()));
|
||||
|
||||
String account = tstRegistry.getAccount();
|
||||
String securityId = tstRegistry.getSecuritySymbol() != null ? tstRegistry.getSecuritySymbol() : "";
|
||||
|
||||
BigDecimal tmtBalance = tstRegistry.getBalance() != null ? tstRegistry.getBalance() : BigDecimal.ZERO;
|
||||
BigDecimal omtBalance = ostRegistry.getBalance() != null ? ostRegistry.getBalance() : BigDecimal.ZERO;
|
||||
|
|
@ -145,9 +146,12 @@ public class KSRepDepoNettoReportBuilder extends CSVReportBuilder<SessionIdParam
|
|||
line[valueIdx++] = date;
|
||||
lines.add(line);
|
||||
|
||||
registryAlreadySaved.put(registry.getGroupId() + registry.getSettlementDate().toString(), true);
|
||||
} catch (Throwable e) {
|
||||
log.error("Can't create report row for registry (id = %d), skipped".formatted(registry.getId()), e);
|
||||
log.error(
|
||||
"Can't create report row for registries (id = [%s]), row was skipped".formatted(
|
||||
groupedRegistry.stream().map(r -> String.valueOf(r.getId())).collect(Collectors.joining(", "))
|
||||
), e
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,24 +1,33 @@
|
|||
package ru.spcex.clearing.reports.reports.ks;
|
||||
|
||||
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Component;
|
||||
import ru.clearing.classes.statics.data.company.Company;
|
||||
import ru.clearing.classes.statics.data.registry.Registry;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.clearing.reports.reports.CSVReportBuilder;
|
||||
import ru.spcex.clearing.reports.reports.EmptyParams;
|
||||
import ru.spcex.platform.enumeration.AccountType;
|
||||
import ru.spcex.platform.enumeration.RegistryTradingParams;
|
||||
import ru.spcex.platform.enumeration.ReportType;
|
||||
import ru.spcex.platform.enumeration.WorkflowStatus;
|
||||
import ru.spcex.platform.imdg.api.Imdg;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
|
||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
||||
import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
@Component
|
||||
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
|
||||
public class KSRepDepoRegisterQuantitiesReportBuilder extends CSVReportBuilder<EmptyParams> {
|
||||
private final Imdg<Registry> registryImdg;
|
||||
private final Imdg<Company> companyImdg;
|
||||
|
|
@ -53,32 +62,31 @@ public class KSRepDepoRegisterQuantitiesReportBuilder extends CSVReportBuilder<E
|
|||
return ReportType.KS_REP_DEPO_REGISTER_QUANTITIES;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<EmptyParams> getParamsType() {
|
||||
return EmptyParams.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void collect(EmptyParams params) {
|
||||
LocalDate nowDate = LocalDate.now();
|
||||
Instant instantNow = Instant.now();
|
||||
|
||||
ImdgPredicateBuilder pb = registryImdg.predicateBuilder();
|
||||
String sql = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.AS__).build();
|
||||
ImdgPredicate finalPredicate = pb.and(
|
||||
pb.regex("registryCode", "AS.."),
|
||||
pb.sql(sql),
|
||||
pb.greatEqual("updated", instantNow.truncatedTo(ChronoUnit.DAYS)),
|
||||
pb.less("updated", instantNow.plus(1, ChronoUnit.DAYS).truncatedTo(ChronoUnit.DAYS)),
|
||||
pb.equals("accountType", AccountType.Depo.getKey())
|
||||
);
|
||||
Collection<Registry> registries = registryImdg.getCollectionObjectsByPredicate(finalPredicate);
|
||||
|
||||
Map<Long, Boolean> activeCompanyForId = new HashMap<>();
|
||||
|
||||
lines = new ArrayList<>(registries.size());
|
||||
for (Registry registry : registries) {
|
||||
try {
|
||||
Boolean activeCompany = activeCompanyForId.get(registry.getCompanyId());
|
||||
if (activeCompany == null) {
|
||||
Company company = companyImdg.getSingleObjectByID(registry.getCompanyId());
|
||||
activeCompany = WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus());
|
||||
activeCompanyForId.put(registry.getCompanyId(), activeCompany);
|
||||
}
|
||||
if (!activeCompany) continue;
|
||||
Company company = companyImdg.getSingleObjectByID(registry.getCompanyId());
|
||||
if (!WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus())) continue;
|
||||
|
||||
String firmId = registry.getTradingCode() != null ? registry.getTradingCode() : "";
|
||||
String account = registry.getAccount();
|
||||
|
|
|
|||
|
|
@ -1,5 +1,8 @@
|
|||
package ru.spcex.clearing.reports.reports.ks;
|
||||
|
||||
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Component;
|
||||
import ru.clearing.classes.statics.data.company.Company;
|
||||
import ru.clearing.classes.statics.data.registry.Registry;
|
||||
import ru.clearing.platform.dictionary.RegistryCodeDictionary;
|
||||
|
|
@ -7,19 +10,26 @@ import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
|||
import ru.spcex.clearing.reports.reports.CSVReportBuilder;
|
||||
import ru.spcex.clearing.reports.reports.EmptyParams;
|
||||
import ru.spcex.platform.enumeration.AccountType;
|
||||
import ru.spcex.platform.enumeration.RegistryTradingParams;
|
||||
import ru.spcex.platform.enumeration.ReportType;
|
||||
import ru.spcex.platform.enumeration.WorkflowStatus;
|
||||
import ru.spcex.platform.imdg.api.Imdg;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
|
||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
||||
import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Component
|
||||
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
|
||||
public class KSRepDepoRegistersReportBuilder extends CSVReportBuilder<EmptyParams> {
|
||||
private final Imdg<Registry> registryImdg;
|
||||
private final Imdg<Company> companyImdg;
|
||||
|
|
@ -56,33 +66,31 @@ public class KSRepDepoRegistersReportBuilder extends CSVReportBuilder<EmptyParam
|
|||
return ReportType.KS_REP_DEPO_REGISTERS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<EmptyParams> getParamsType() {
|
||||
return EmptyParams.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void collect(EmptyParams params) {
|
||||
LocalDate nowDate = LocalDate.now();
|
||||
Instant instantNow = Instant.now();
|
||||
|
||||
ImdgPredicateBuilder pb = registryImdg.predicateBuilder();
|
||||
String sql = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.AS_T).build();
|
||||
ImdgPredicate finalPredicate = pb.and(
|
||||
pb.regex("registryCode", "AS.T"),
|
||||
pb.sql(sql),
|
||||
pb.greatEqual("updated", instantNow.truncatedTo(ChronoUnit.DAYS)),
|
||||
pb.less("updated", instantNow.plus(1, ChronoUnit.DAYS).truncatedTo(ChronoUnit.DAYS)),
|
||||
pb.equals("accountType", AccountType.Depo.getKey())
|
||||
);
|
||||
Collection<Registry> registries = registryImdg.getCollectionObjectsByPredicate(finalPredicate);
|
||||
|
||||
Map<String, String> nameForRegisterCode = new HashMap<>();
|
||||
Map<Long, Boolean> activeCompanyForId = new HashMap<>();
|
||||
|
||||
lines = new ArrayList<>(registries.size());
|
||||
for (Registry registry : registries) {
|
||||
try {
|
||||
Boolean activeCompany = activeCompanyForId.get(registry.getCompanyId());
|
||||
if (activeCompany == null) {
|
||||
Company company = companyImdg.getSingleObjectByID(registry.getCompanyId());
|
||||
activeCompany = WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus());
|
||||
activeCompanyForId.put(registry.getCompanyId(), activeCompany);
|
||||
}
|
||||
if (!activeCompany) continue;
|
||||
Company company = companyImdg.getSingleObjectByID(registry.getCompanyId());
|
||||
if (!WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus())) continue;
|
||||
|
||||
String firmId = registry.getTradingCode() != null ? registry.getTradingCode() : "";
|
||||
String account = registry.getAccount();
|
||||
|
|
@ -90,12 +98,9 @@ public class KSRepDepoRegistersReportBuilder extends CSVReportBuilder<EmptyParam
|
|||
String securityId = registry.getSecuritySymbol() != null ? registry.getSecuritySymbol() : "";
|
||||
String registerCode = registry.getRegistryCode();
|
||||
|
||||
String registerName = nameForRegisterCode.get(registerCode);
|
||||
if (registerName == null) {
|
||||
RegistryCodeDictionary registryCodeDescription = registryCodeDictionaryImdg.getSingleObjectByFieldValues(Map.of("code", registerCode));
|
||||
registerName = registryCodeDescription != null && registryCodeDescription.getName() != null ? registryCodeDescription.getName() : "";
|
||||
nameForRegisterCode.put(registerCode, registerName);
|
||||
}
|
||||
RegistryCodeDictionary registryCodeDescription = registryCodeDictionaryImdg.getSingleObjectByFieldValues(Map.of("code", registerCode));
|
||||
String registerName = "";
|
||||
if (registryCodeDescription != null) registerName = registryCodeDescription.getName();
|
||||
|
||||
String openQuantity = registry.getOpenBalance() != null ? registry.getOpenBalance().toString() : "";
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,8 @@
|
|||
package ru.spcex.clearing.reports.reports.ks;
|
||||
|
||||
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Component;
|
||||
import ru.clearing.classes.statics.data.company.Company;
|
||||
import ru.clearing.classes.statics.data.company.CompanySymbols;
|
||||
import ru.clearing.classes.statics.data.profile.ProfileDocument;
|
||||
|
|
@ -13,14 +16,14 @@ import ru.spcex.platform.enumeration.WorkflowStatus;
|
|||
import ru.spcex.platform.imdg.api.Imdg;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Component
|
||||
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
|
||||
public class KSRepFirmDetailsReportBuilder extends CSVReportBuilder<EmptyParams> {
|
||||
private final Imdg<Company> companyImdg;
|
||||
private final Imdg<CompanySymbols> companySymbolsImdg;
|
||||
|
|
@ -58,10 +61,12 @@ public class KSRepFirmDetailsReportBuilder extends CSVReportBuilder<EmptyParams>
|
|||
}
|
||||
|
||||
@Override
|
||||
protected void collect(EmptyParams params) {
|
||||
LocalDate nowDate = LocalDate.now();
|
||||
Instant instantNow = Instant.now();
|
||||
public Class<EmptyParams> getParamsType() {
|
||||
return EmptyParams.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void collect(EmptyParams params) {
|
||||
Collection<Company> companies = companyImdg.getCollectionObjectsByFieldValues(Map.of("workflowStatus", WorkflowStatus.Active.getKey()));
|
||||
|
||||
lines = new ArrayList<>(companies.size());
|
||||
|
|
|
|||
|
|
@ -1,5 +1,8 @@
|
|||
package ru.spcex.clearing.reports.reports.ks;
|
||||
|
||||
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Component;
|
||||
import ru.clearing.classes.statics.data.company.Company;
|
||||
import ru.clearing.classes.statics.data.execution.ExecutionCommon;
|
||||
import ru.clearing.classes.statics.data.execution.ExecutionDeposit;
|
||||
|
|
@ -9,13 +12,11 @@ import ru.clearing.classes.statics.data.registry.Registry;
|
|||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.clearing.reports.reports.CSVReportBuilder;
|
||||
import ru.spcex.clearing.reports.reports.EmptyParams;
|
||||
import ru.spcex.platform.enumeration.CoverageStatus;
|
||||
import ru.spcex.platform.enumeration.RegistryInstrumentType;
|
||||
import ru.spcex.platform.enumeration.RegistryStatus;
|
||||
import ru.spcex.platform.enumeration.ReportType;
|
||||
import ru.spcex.platform.enumeration.*;
|
||||
import ru.spcex.platform.imdg.api.Imdg;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
||||
import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder;
|
||||
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
||||
|
||||
import java.time.LocalDate;
|
||||
|
|
@ -24,6 +25,8 @@ import java.time.ZoneId;
|
|||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Component
|
||||
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
|
||||
public class KSRepTradesReportBuilder extends CSVReportBuilder<EmptyParams> {
|
||||
private final Imdg<ExecutionDeposit> executionDepositImdg;
|
||||
private final Imdg<ExecutionFond> executionFondImdg;
|
||||
|
|
@ -64,6 +67,11 @@ public class KSRepTradesReportBuilder extends CSVReportBuilder<EmptyParams> {
|
|||
return ReportType.KS_REP_TRADES;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<EmptyParams> getParamsType() {
|
||||
return EmptyParams.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void collect(EmptyParams params) {
|
||||
LocalDate nowDate = LocalDate.now();
|
||||
|
|
@ -84,7 +92,6 @@ public class KSRepTradesReportBuilder extends CSVReportBuilder<EmptyParams> {
|
|||
Map<Long, String> sessionDateForSessionId = new HashMap<>();
|
||||
lines = new ArrayList<>(executions.size());
|
||||
for (ExecutionCommon execution : executions) {
|
||||
boolean brokenExecution = false;
|
||||
try {
|
||||
String sessionId = execution.getSessionId() != null ? String.valueOf(execution.getSessionId()) : "";
|
||||
|
||||
|
|
@ -141,9 +148,15 @@ public class KSRepTradesReportBuilder extends CSVReportBuilder<EmptyParams> {
|
|||
execution.getExchangeExecutionId(),
|
||||
execution.getMarket()
|
||||
);
|
||||
String sql = RegistryCodeSqlBuilder.getInstance(
|
||||
RegistryTradingParams.OS_T,
|
||||
RegistryTradingParams.TS_T,
|
||||
RegistryTradingParams.OM_T,
|
||||
RegistryTradingParams.TM_T
|
||||
).build();
|
||||
Collection<Registry> registryCollection = registryImdg.getCollectionObjectsByPredicate(
|
||||
pb.and(
|
||||
pb.regex("registryCode", "[O|T][S|M].[T]"),
|
||||
pb.sql(sql),
|
||||
pb.equals("groupId", groupId)
|
||||
)
|
||||
);
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@ public class ReportService extends QueueConsumer implements InitializingBean {
|
|||
private final UserRoleVerification userRoleVerification;
|
||||
private final ValidationHelper validationHelper;
|
||||
private final KafkaSender kafkaSender;
|
||||
|
||||
private final Function<ReportRequest, IValidator> reportRequestValidator;
|
||||
private final Function<ReportRequestWithSessionId, IValidator> reportRequestWithSessionIdValidator;
|
||||
private final Function<ReportRequestWithSessionIdList, IValidator> reportRequestWithSessionIdListValidator;
|
||||
|
|
@ -46,10 +47,14 @@ public class ReportService extends QueueConsumer implements InitializingBean {
|
|||
private final Function<LauncherCommandRequest, IValidator> reportRequestGREPValidator;
|
||||
private final Function<LauncherCommandRequest, IValidator> reportRequestGRETValidator;
|
||||
private final Function<LauncherCommandRequest, IValidator> reportRequestGREFValidator;
|
||||
|
||||
private final Map<ReportType, List<CSVReportBuilder<EmptyParams>>> reportBuildersWithoutParams;
|
||||
private final Map<ReportType, List<CSVReportBuilder<SessionIdParam>>> reportBuildersWithSessionIdParam;
|
||||
private final Map<ReportType, List<CSVReportBuilder<SessionIdListParams>>> reportBuildersWithSessionIdListParam;
|
||||
private final Map<ReportType, List<CSVReportBuilder<PeriodParams>>> reportBuildersWithPeriodParams;
|
||||
private final Map<ReportType, List<CSVReportBuilder<?>>> reportBuildersForGREP;
|
||||
private final Map<ReportType, List<CSVReportBuilder<?>>> reportBuildersForGREF;
|
||||
private final Map<ReportType, List<CSVReportBuilder<?>>> reportBuildersForGRET;
|
||||
|
||||
private final File outFolder;
|
||||
|
||||
|
|
@ -59,6 +64,7 @@ public class ReportService extends QueueConsumer implements InitializingBean {
|
|||
UserRoleVerification userRoleVerification,
|
||||
ValidationHelper validationHelper,
|
||||
ReportsServiceSettings reportsServiceSettings,
|
||||
|
||||
@Qualifier("reportBuildersWithoutParams")
|
||||
Map<ReportType, List<CSVReportBuilder<EmptyParams>>> reportBuildersWithoutParams,
|
||||
@Qualifier("reportBuildersWithSessionIdParam")
|
||||
|
|
@ -67,6 +73,14 @@ public class ReportService extends QueueConsumer implements InitializingBean {
|
|||
Map<ReportType, List<CSVReportBuilder<SessionIdListParams>>> reportBuildersWithSessionIdListParam,
|
||||
@Qualifier("reportBuildersWithPeriodParams")
|
||||
Map<ReportType, List<CSVReportBuilder<PeriodParams>>> reportBuildersWithPeriodParams,
|
||||
|
||||
@Qualifier("reportBuildersForGREP")
|
||||
Map<ReportType, List<CSVReportBuilder<?>>> reportBuildersForGREP,
|
||||
@Qualifier("reportBuildersForGREF")
|
||||
Map<ReportType, List<CSVReportBuilder<?>>> reportBuildersForGREF,
|
||||
@Qualifier("reportBuildersForGRET")
|
||||
Map<ReportType, List<CSVReportBuilder<?>>> reportBuildersForGRET,
|
||||
|
||||
@Qualifier("reportRequestValidator")
|
||||
Function<ReportRequest, IValidator> reportRequestValidator,
|
||||
@Qualifier("reportRequestWithSessionIdValidator")
|
||||
|
|
@ -75,12 +89,15 @@ public class ReportService extends QueueConsumer implements InitializingBean {
|
|||
Function<ReportRequestWithSessionIdList, IValidator> reportRequestWithSessionIdListValidator,
|
||||
@Qualifier("reportRequestWithPeriodValidator")
|
||||
Function<ReportRequestWithPeriod, IValidator> reportRequestWithPeriodValidator,
|
||||
@Qualifier("reportRequestGREP")
|
||||
|
||||
@Qualifier("reportRequestGREPValidator")
|
||||
Function<LauncherCommandRequest, IValidator> reportRequestGREPValidator,
|
||||
@Qualifier("reportRequestGRET")
|
||||
@Qualifier("reportRequestGRETValidator")
|
||||
Function<LauncherCommandRequest, IValidator> reportRequestGRETValidator,
|
||||
@Qualifier("reportRequestGREF")
|
||||
Function<LauncherCommandRequest, IValidator> reportRequestGREFValidator) {
|
||||
@Qualifier("reportRequestGREFValidator")
|
||||
Function<LauncherCommandRequest, IValidator> reportRequestGREFValidator
|
||||
|
||||
) {
|
||||
super(kafkaQueue, kafkaResponseQueue);
|
||||
this.userRoleVerification = userRoleVerification;
|
||||
this.validationHelper = validationHelper;
|
||||
|
|
@ -97,6 +114,9 @@ public class ReportService extends QueueConsumer implements InitializingBean {
|
|||
this.reportRequestGRETValidator = reportRequestGRETValidator;
|
||||
this.reportRequestGREFValidator = reportRequestGREFValidator;
|
||||
this.outFolder = new File(reportsServiceSettings.getReportModuleOut());
|
||||
this.reportBuildersForGREP = reportBuildersForGREP;
|
||||
this.reportBuildersForGREF = reportBuildersForGREF;
|
||||
this.reportBuildersForGRET = reportBuildersForGRET;
|
||||
assert outFolder.isDirectory();
|
||||
}
|
||||
|
||||
|
|
@ -275,94 +295,15 @@ public class ReportService extends QueueConsumer implements InitializingBean {
|
|||
|
||||
public RequestInfoUpdate createReportForGREP(BaseRequest<LauncherCommandRequest> userRequest) {
|
||||
log.debug("GREP task received");
|
||||
|
||||
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest);
|
||||
if (requestInfoUpdate != null) return null;
|
||||
|
||||
requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestGREPValidator);
|
||||
if (requestInfoUpdate != null) return null;
|
||||
|
||||
Long sessionId = userRequest.getRequestPayload().getSessionId();
|
||||
|
||||
logUnknownProperties(userRequest);
|
||||
|
||||
int cntErrors = 0;
|
||||
Map<String, ReportType> outFilenames = new HashMap<>();
|
||||
|
||||
Collection<List<CSVReportBuilder<EmptyParams>>> buildersWithoutParams = reportBuildersWithoutParams.values();
|
||||
for (List<CSVReportBuilder<EmptyParams>> builderList : buildersWithoutParams) {
|
||||
for (CSVReportBuilder<EmptyParams> builder : builderList) {
|
||||
File outFile = builder.createReport(new EmptyParams(), outFolder);
|
||||
if (outFile == null) {
|
||||
log.warn("Something wrong, report type: {}", builder.getReportType().getKey());
|
||||
cntErrors++;
|
||||
continue;
|
||||
}
|
||||
outFilenames.put(outFile.getName(), builder.getReportType());
|
||||
}
|
||||
}
|
||||
|
||||
if (sessionId != null) {
|
||||
|
||||
Collection<List<CSVReportBuilder<SessionIdParam>>> buildersWithSessionIdParam = reportBuildersWithSessionIdParam.values();
|
||||
for (List<CSVReportBuilder<SessionIdParam>> builderList : buildersWithSessionIdParam) {
|
||||
for (CSVReportBuilder<SessionIdParam> builder : builderList) {
|
||||
// todo возможно, для тасков GRET/GREP/GREF стоит сделать отдельные коллекции с билдерами, чтобы не проверять эти условия
|
||||
if (
|
||||
builder.getReportType() == ReportType.OPERATIONAL_MONEY_CHANGE ||
|
||||
builder.getReportType() == ReportType.OPERATIONAL_LIABILITIES_CLAIMS ||
|
||||
builder.getReportType() == ReportType.UNFULFILLED_DEAL_REPORT ||
|
||||
builder.getReportType() == ReportType.EXECUTED_DEAL_REPORT
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
SessionIdParam sessionIdParam = new SessionIdParam();
|
||||
sessionIdParam.setSessionId(sessionId);
|
||||
File outFile = builder.createReport(sessionIdParam, outFolder);
|
||||
if (outFile == null) {
|
||||
log.warn("Something wrong, report type: {}", builder.getReportType().getKey());
|
||||
cntErrors++;
|
||||
continue;
|
||||
}
|
||||
outFilenames.put(outFile.getName(), builder.getReportType());
|
||||
}
|
||||
}
|
||||
|
||||
Collection<List<CSVReportBuilder<SessionIdListParams>>> buildersWithSessionIdListParam = reportBuildersWithSessionIdListParam.values();
|
||||
for (List<CSVReportBuilder<SessionIdListParams>> builderList : buildersWithSessionIdListParam) {
|
||||
for (CSVReportBuilder<SessionIdListParams> builder : builderList) {
|
||||
SessionIdListParams sessionIdListParams = new SessionIdListParams();
|
||||
sessionIdListParams.setSessionIdList(List.of(sessionId));
|
||||
File outFile = builder.createReport(sessionIdListParams, outFolder);
|
||||
if (outFile == null) {
|
||||
log.warn("Something wrong, report type: {}", builder.getReportType().getKey());
|
||||
cntErrors++;
|
||||
continue;
|
||||
}
|
||||
outFilenames.put(outFile.getName(), builder.getReportType());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
LocalDate now = LocalDate.now();
|
||||
Collection<List<CSVReportBuilder<PeriodParams>>> buildersWithPeriodParams = reportBuildersWithPeriodParams.values();
|
||||
for (List<CSVReportBuilder<PeriodParams>> builderList : buildersWithPeriodParams) {
|
||||
for (CSVReportBuilder<PeriodParams> builder : builderList) {
|
||||
PeriodParams periodParams = new PeriodParams();
|
||||
periodParams.setStartDate(now);
|
||||
periodParams.setEndDate(now);
|
||||
File outFile = builder.createReport(periodParams, outFolder);
|
||||
if (outFile == null) {
|
||||
log.warn("Something wrong, report type: {}", builder.getReportType().getKey());
|
||||
cntErrors++;
|
||||
continue;
|
||||
}
|
||||
outFilenames.put(outFile.getName(), builder.getReportType());
|
||||
}
|
||||
}
|
||||
|
||||
if (cntErrors == 0) log.debug("All reports successfully created. Output files: {}", String.join(", ", outFilenames.keySet()));
|
||||
else log.debug("Some reports ({}) create failed. Output files: {}", cntErrors, String.join(", ", outFilenames.keySet()));
|
||||
Long sessionId = userRequest.getRequestPayload().getSessionId();
|
||||
Map<String, ReportType> outFilenames = createReportsForTask(sessionId, reportBuildersForGREP.values());
|
||||
|
||||
sendReportsToGateway(sessionId, outFilenames, "REPORT_KS_TMP");
|
||||
return null;
|
||||
|
|
@ -370,46 +311,15 @@ public class ReportService extends QueueConsumer implements InitializingBean {
|
|||
|
||||
public RequestInfoUpdate createReportForGRET(BaseRequest<LauncherCommandRequest> userRequest) {
|
||||
log.debug("GRET task received");
|
||||
|
||||
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest);
|
||||
if (requestInfoUpdate != null) return null;
|
||||
|
||||
requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestGRETValidator);
|
||||
if (requestInfoUpdate != null) return null;
|
||||
|
||||
Long sessionId = userRequest.getRequestPayload().getSessionId();
|
||||
|
||||
logUnknownProperties(userRequest);
|
||||
|
||||
int cntErrors = 0;
|
||||
Map<String, ReportType> outFilenames = new HashMap<>();
|
||||
|
||||
if (sessionId != null) {
|
||||
|
||||
Collection<List<CSVReportBuilder<SessionIdParam>>> buildersWithSessionIdParam = reportBuildersWithSessionIdParam.values();
|
||||
for (List<CSVReportBuilder<SessionIdParam>> builderList : buildersWithSessionIdParam) {
|
||||
for (CSVReportBuilder<SessionIdParam> builder : builderList) {
|
||||
// todo возможно, для тасков GRET/GREP/GREF стоит сделать отдельные коллекции с билдерами, чтобы не проверять эти условия
|
||||
if (
|
||||
builder.getReportType() != ReportType.UNFULFILLED_DEAL_REPORT &&
|
||||
builder.getReportType() != ReportType.EXECUTED_DEAL_REPORT
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
SessionIdParam sessionIdParam = new SessionIdParam();
|
||||
sessionIdParam.setSessionId(sessionId);
|
||||
File outFile = builder.createReport(sessionIdParam, outFolder);
|
||||
if (outFile == null) {
|
||||
log.warn("Something wrong, report type: {}", builder.getReportType().getKey());
|
||||
cntErrors++;
|
||||
continue;
|
||||
}
|
||||
outFilenames.put(outFile.getName(), builder.getReportType());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (cntErrors == 0) log.debug("All reports successfully created. Output files: {}", String.join(", ", outFilenames.keySet()));
|
||||
else log.debug("Some reports ({}) create failed. Output files: {}", cntErrors, String.join(", ", outFilenames.keySet()));
|
||||
Long sessionId = userRequest.getRequestPayload().getSessionId();
|
||||
Map<String, ReportType> outFilenames = createReportsForTask(sessionId, reportBuildersForGRET.values());
|
||||
|
||||
sendReportsToGateway(sessionId, outFilenames, null);
|
||||
return null;
|
||||
|
|
@ -420,55 +330,56 @@ public class ReportService extends QueueConsumer implements InitializingBean {
|
|||
|
||||
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest);
|
||||
if (requestInfoUpdate != null) return null;
|
||||
|
||||
requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestGREFValidator);
|
||||
if (requestInfoUpdate != null) return null;
|
||||
|
||||
Long sessionId = userRequest.getRequestPayload().getSessionId();
|
||||
|
||||
logUnknownProperties(userRequest);
|
||||
|
||||
int cntErrors = 0;
|
||||
Long sessionId = userRequest.getRequestPayload().getSessionId();
|
||||
Map<String, ReportType> outFilenames = createReportsForTask(sessionId, reportBuildersForGREF.values());
|
||||
|
||||
sendReportsToGateway(sessionId, outFilenames, "REPORT_KS_FINAL");
|
||||
return null;
|
||||
}
|
||||
|
||||
private Map<String, ReportType> createReportsForTask(Long sessionId, Collection<List<CSVReportBuilder<?>>> buildersForTask) {
|
||||
Map<String, ReportType> outFilenames = new HashMap<>();
|
||||
|
||||
Collection<List<CSVReportBuilder<EmptyParams>>> buildersWithoutParams = reportBuildersWithoutParams.values();
|
||||
for (List<CSVReportBuilder<EmptyParams>> builderList : buildersWithoutParams) {
|
||||
for (CSVReportBuilder<EmptyParams> builder : builderList) {
|
||||
// todo возможно, для тасков GRET/GREP/GREF стоит сделать отдельные коллекции с билдерами, чтобы не проверять эти условия
|
||||
if (
|
||||
builder.getReportType() != ReportType.KS_REP_CASH_REGISTERS &&
|
||||
builder.getReportType() != ReportType.KS_REP_CASH_REGISTER_SUMS &&
|
||||
builder.getReportType() != ReportType.KS_REP_DEPO_REGISTERS &&
|
||||
builder.getReportType() != ReportType.KS_REP_DEPO_REGISTER_QUANTITIES &&
|
||||
builder.getReportType() != ReportType.KS_REP_TRADES &&
|
||||
builder.getReportType() != ReportType.KS_REP_FIRM_DETAILS
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
File outFile = builder.createReport(new EmptyParams(), outFolder);
|
||||
if (outFile == null) {
|
||||
log.warn("Something wrong, report type: {}", builder.getReportType().getKey());
|
||||
cntErrors++;
|
||||
continue;
|
||||
}
|
||||
outFilenames.put(outFile.getName(), builder.getReportType());
|
||||
}
|
||||
}
|
||||
|
||||
if (sessionId != null) {
|
||||
Collection<List<CSVReportBuilder<SessionIdParam>>> buildersWithSessionIdParam = reportBuildersWithSessionIdParam.values();
|
||||
for (List<CSVReportBuilder<SessionIdParam>> builderList : buildersWithSessionIdParam) {
|
||||
for (CSVReportBuilder<SessionIdParam> builder : builderList) {
|
||||
// todo возможно, для тасков GRET/GREP/GREF стоит сделать отдельные коллекции с билдерами, чтобы не проверять эти условия
|
||||
if (
|
||||
builder.getReportType() != ReportType.KS_REP_CASH_NETTO &&
|
||||
builder.getReportType() != ReportType.KS_REP_DEPO_NETTO
|
||||
) {
|
||||
int cntErrors = 0;
|
||||
LocalDate now = LocalDate.now();
|
||||
for (List<CSVReportBuilder<?>> builders : buildersForTask) {
|
||||
for (CSVReportBuilder<?> builder : builders) {
|
||||
if (builder.getParamsType() == EmptyParams.class) {
|
||||
File outFile = ((CSVReportBuilder<EmptyParams>) builder).createReport(new EmptyParams(), outFolder);
|
||||
if (outFile == null) {
|
||||
log.warn("Something wrong, report type: {}", builder.getReportType().getKey());
|
||||
cntErrors++;
|
||||
continue;
|
||||
}
|
||||
outFilenames.put(outFile.getName(), builder.getReportType());
|
||||
} else if (builder.getParamsType() == SessionIdParam.class && sessionId != null) {
|
||||
SessionIdParam sessionIdParam = new SessionIdParam();
|
||||
sessionIdParam.setSessionId(sessionId);
|
||||
File outFile = builder.createReport(sessionIdParam, outFolder);
|
||||
File outFile = ((CSVReportBuilder<SessionIdParam>) builder).createReport(sessionIdParam, outFolder);
|
||||
if (outFile == null) {
|
||||
log.warn("Something wrong, report type: {}", builder.getReportType().getKey());
|
||||
cntErrors++;
|
||||
continue;
|
||||
}
|
||||
outFilenames.put(outFile.getName(), builder.getReportType());
|
||||
} else if (builder.getParamsType() == SessionIdListParams.class && sessionId != null) {
|
||||
SessionIdListParams sessionIdListParams = new SessionIdListParams();
|
||||
sessionIdListParams.setSessionIdList(List.of(sessionId));
|
||||
File outFile = ((CSVReportBuilder<SessionIdListParams>) builder).createReport(sessionIdListParams, outFolder);
|
||||
if (outFile == null) {
|
||||
log.warn("Something wrong, report type: {}", builder.getReportType().getKey());
|
||||
cntErrors++;
|
||||
continue;
|
||||
}
|
||||
outFilenames.put(outFile.getName(), builder.getReportType());
|
||||
} else if (builder.getParamsType() == PeriodParams.class) {
|
||||
PeriodParams periodParams = new PeriodParams();
|
||||
periodParams.setStartDate(now);
|
||||
periodParams.setEndDate(now);
|
||||
File outFile = ((CSVReportBuilder<PeriodParams>) builder).createReport(periodParams, outFolder);
|
||||
if (outFile == null) {
|
||||
log.warn("Something wrong, report type: {}", builder.getReportType().getKey());
|
||||
cntErrors++;
|
||||
|
|
@ -478,12 +389,10 @@ public class ReportService extends QueueConsumer implements InitializingBean {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (cntErrors == 0) log.debug("All reports successfully created. Output files: {}", String.join(", ", outFilenames.keySet()));
|
||||
else log.debug("Some reports ({}) create failed. Output files: {}", cntErrors, String.join(", ", outFilenames.keySet()));
|
||||
|
||||
sendReportsToGateway(sessionId, outFilenames, "REPORT_KS_FINAL");
|
||||
return null;
|
||||
return outFilenames;
|
||||
}
|
||||
|
||||
private void sendReportsToGateway(Long sessionId, Map<String, ReportType> reportsWithReportType, String type) {
|
||||
|
|
|
|||
|
|
@ -779,6 +779,8 @@ public class ReportServiceTest_BP {
|
|||
testRegistry_1.setAccountId(TEST_MONEY_ACCOUNT_1);
|
||||
String TEST_REGISTRY_CODE_1 = "CM";
|
||||
testRegistry_1.setRegistryCode(TEST_REGISTRY_CODE_1);
|
||||
testRegistry_1.setRegistryDesignation(RegistryDesignation.C.getKey());
|
||||
testRegistry_1.setRegistryInstrumentType(RegistryInstrumentType.M.getKey());
|
||||
testRegistry_1.setOpenBalance(TEST_OPEN_BALANCE_1);
|
||||
testRegistry_1.setCloseBalance(TEST_CLOSE_BALANCE_1);
|
||||
testRegistry_1.setCredit(TEST_CREDIT_1);
|
||||
|
|
@ -797,6 +799,8 @@ public class ReportServiceTest_BP {
|
|||
testRegistry_2.setAccountId(TEST_MONEY_ACCOUNT_2);
|
||||
String TEST_REGISTRY_CODE_2 = "CM";
|
||||
testRegistry_2.setRegistryCode(TEST_REGISTRY_CODE_2);
|
||||
testRegistry_2.setRegistryDesignation(RegistryDesignation.C.getKey());
|
||||
testRegistry_2.setRegistryInstrumentType(RegistryInstrumentType.M.getKey());
|
||||
testRegistry_2.setOpenBalance(TEST_OPEN_BALANCE_2);
|
||||
testRegistry_2.setCloseBalance(TEST_CLOSE_BALANCE_2);
|
||||
testRegistry_2.setCredit(TEST_CREDIT_2);
|
||||
|
|
@ -810,15 +814,27 @@ public class ReportServiceTest_BP {
|
|||
testRegistryForCompanyId_2.setTradingClearingRegistry(TEST_TRADING_CLEARING_REGISTRY_2);
|
||||
testRegistryForCompanyId_2.setUpdated(Instant.now());
|
||||
tm_tRegistry_1.setRegistryCode("TM_T");
|
||||
tm_tRegistry_1.setRegistryDesignation(RegistryDesignation.T.getKey());
|
||||
tm_tRegistry_1.setRegistryInstrumentType(RegistryInstrumentType.M.getKey());
|
||||
tm_tRegistry_1.setRegistryUnit(RegistryUnit.T.getKey());
|
||||
tm_tRegistry_1.setBalance(BigDecimal.valueOf(779L));
|
||||
tm_tRegistry_1.setUpdated(Instant.now());
|
||||
om_tRegistry_1.setRegistryCode("OM_T");
|
||||
om_tRegistry_1.setRegistryDesignation(RegistryDesignation.O.getKey());
|
||||
om_tRegistry_1.setRegistryInstrumentType(RegistryInstrumentType.M.getKey());
|
||||
om_tRegistry_1.setRegistryUnit(RegistryUnit.T.getKey());
|
||||
om_tRegistry_1.setBalance(BigDecimal.valueOf(2L));
|
||||
om_tRegistry_1.setUpdated(Instant.now());
|
||||
ts_tRegistry_1.setRegistryCode("TS_T");
|
||||
ts_tRegistry_1.setRegistryDesignation(RegistryDesignation.T.getKey());
|
||||
ts_tRegistry_1.setRegistryInstrumentType(RegistryInstrumentType.S.getKey());
|
||||
ts_tRegistry_1.setRegistryUnit(RegistryUnit.T.getKey());
|
||||
ts_tRegistry_1.setBalance(BigDecimal.valueOf(889L));
|
||||
ts_tRegistry_1.setUpdated(Instant.now());
|
||||
os_tRegistry_1.setRegistryCode("OS_T");
|
||||
os_tRegistry_1.setRegistryDesignation(RegistryDesignation.O.getKey());
|
||||
os_tRegistry_1.setRegistryInstrumentType(RegistryInstrumentType.S.getKey());
|
||||
os_tRegistry_1.setRegistryUnit(RegistryUnit.T.getKey());
|
||||
os_tRegistry_1.setBalance(BigDecimal.valueOf(1L));
|
||||
os_tRegistry_1.setUpdated(Instant.now());
|
||||
tm_tRegistry_1.setSessionId(TEST_SESSION_ID_1);
|
||||
|
|
@ -826,15 +842,27 @@ public class ReportServiceTest_BP {
|
|||
ts_tRegistry_1.setSessionId(TEST_SESSION_ID_1);
|
||||
os_tRegistry_1.setSessionId(TEST_SESSION_ID_1);
|
||||
tm_tRegistry_2.setRegistryCode("TM_T");
|
||||
tm_tRegistry_2.setRegistryDesignation(RegistryDesignation.T.getKey());
|
||||
tm_tRegistry_2.setRegistryInstrumentType(RegistryInstrumentType.M.getKey());
|
||||
tm_tRegistry_2.setRegistryUnit(RegistryUnit.T.getKey());
|
||||
tm_tRegistry_2.setBalance(BigDecimal.valueOf(779L));
|
||||
tm_tRegistry_2.setUpdated(Instant.now());
|
||||
om_tRegistry_2.setRegistryCode("OM_T");
|
||||
om_tRegistry_2.setRegistryDesignation(RegistryDesignation.O.getKey());
|
||||
om_tRegistry_2.setRegistryInstrumentType(RegistryInstrumentType.M.getKey());
|
||||
om_tRegistry_2.setRegistryUnit(RegistryUnit.T.getKey());
|
||||
om_tRegistry_2.setBalance(BigDecimal.valueOf(2L));
|
||||
om_tRegistry_2.setUpdated(Instant.now());
|
||||
ts_tRegistry_2.setRegistryCode("TS_T");
|
||||
ts_tRegistry_2.setRegistryDesignation(RegistryDesignation.T.getKey());
|
||||
ts_tRegistry_2.setRegistryInstrumentType(RegistryInstrumentType.S.getKey());
|
||||
ts_tRegistry_2.setRegistryUnit(RegistryUnit.T.getKey());
|
||||
ts_tRegistry_2.setBalance(BigDecimal.valueOf(889L));
|
||||
ts_tRegistry_2.setUpdated(Instant.now());
|
||||
os_tRegistry_2.setRegistryCode("OS_T");
|
||||
os_tRegistry_2.setRegistryDesignation(RegistryDesignation.O.getKey());
|
||||
os_tRegistry_2.setRegistryInstrumentType(RegistryInstrumentType.S.getKey());
|
||||
os_tRegistry_2.setRegistryUnit(RegistryUnit.T.getKey());
|
||||
os_tRegistry_2.setBalance(BigDecimal.valueOf(1L));
|
||||
os_tRegistry_2.setUpdated(Instant.now());
|
||||
tm_tRegistry_2.setSessionId(TEST_SESSION_ID_2);
|
||||
|
|
|
|||
|
|
@ -128,6 +128,9 @@ public class ReportServiceTest_KS {
|
|||
Registry registry = new Registry();
|
||||
registry.setCompanyId(COMPANY_ID);
|
||||
registry.setRegistryCode("AM_T");
|
||||
registry.setRegistryDesignation(RegistryDesignation.A.getKey());
|
||||
registry.setRegistryInstrumentType(RegistryInstrumentType.M.getKey());
|
||||
registry.setRegistryUnit(RegistryUnit.T.getKey());
|
||||
registry.setUpdated(Instant.now());
|
||||
registry.setTradingCode("TRADING_CODE");
|
||||
registry.setAccount("ACCOUNT");
|
||||
|
|
@ -169,6 +172,8 @@ public class ReportServiceTest_KS {
|
|||
Registry registry_1 = new Registry();
|
||||
registry_1.setCompanyId(COMPANY_ID);
|
||||
registry_1.setRegistryCode("AM__");
|
||||
registry_1.setRegistryDesignation(RegistryDesignation.A.getKey());
|
||||
registry_1.setRegistryInstrumentType(RegistryInstrumentType.M.getKey());
|
||||
registry_1.setUpdated(Instant.now());
|
||||
registry_1.setTradingCode("TRADING_CODE");
|
||||
registry_1.setAccount("ACCOUNT");
|
||||
|
|
@ -210,6 +215,9 @@ public class ReportServiceTest_KS {
|
|||
Registry registry = new Registry();
|
||||
registry.setCompanyId(COMPANY_ID);
|
||||
registry.setRegistryCode("AS_T");
|
||||
registry.setRegistryDesignation(RegistryDesignation.A.getKey());
|
||||
registry.setRegistryInstrumentType(RegistryInstrumentType.S.getKey());
|
||||
registry.setRegistryUnit(RegistryUnit.T.getKey());
|
||||
registry.setUpdated(Instant.now());
|
||||
registry.setTradingCode("TRADING_CODE");
|
||||
registry.setAccount("ACCOUNT");
|
||||
|
|
@ -251,6 +259,8 @@ public class ReportServiceTest_KS {
|
|||
Registry registry_1 = new Registry();
|
||||
registry_1.setCompanyId(COMPANY_ID);
|
||||
registry_1.setRegistryCode("AS__");
|
||||
registry_1.setRegistryDesignation(RegistryDesignation.A.getKey());
|
||||
registry_1.setRegistryInstrumentType(RegistryInstrumentType.S.getKey());
|
||||
registry_1.setSecuritySymbol("SECURITY_SYMBOL");
|
||||
registry_1.setUpdated(Instant.now());
|
||||
registry_1.setTradingCode("TRADING_CODE");
|
||||
|
|
@ -308,6 +318,9 @@ public class ReportServiceTest_KS {
|
|||
Registry registry = new Registry();
|
||||
registry.setSessionId(sessionId_2);
|
||||
registry.setRegistryCode("OM_T");
|
||||
registry.setRegistryDesignation(RegistryDesignation.O.getKey());
|
||||
registry.setRegistryInstrumentType(RegistryInstrumentType.M.getKey());
|
||||
registry.setRegistryUnit(RegistryUnit.T.getKey());
|
||||
registry.setGroupId(Long.parseLong("%s%d%s".formatted(dateFormatter_yyMMdd.format(LocalDate.now()), 222, "333")));
|
||||
registry.setRegistryStatus(RegistryStatus.FAIL.getKey());
|
||||
registry.setRegistryInstrumentType(RegistryInstrumentType.S.getKey());
|
||||
|
|
@ -365,6 +378,9 @@ public class ReportServiceTest_KS {
|
|||
registry_1.setGroupId(Long.MAX_VALUE);
|
||||
registry_1.setClearingDate(LocalDate.now());
|
||||
registry_1.setRegistryCode("OM_T");
|
||||
registry_1.setRegistryDesignation(RegistryDesignation.O.getKey());
|
||||
registry_1.setRegistryInstrumentType(RegistryInstrumentType.M.getKey());
|
||||
registry_1.setRegistryUnit(RegistryUnit.T.getKey());
|
||||
registry_1.setSessionId(sessionId);
|
||||
registry_1.setAccount("ACCOUNT");
|
||||
registry_1.setAccountType(AccountType.Clrn.getKey());
|
||||
|
|
@ -377,6 +393,9 @@ public class ReportServiceTest_KS {
|
|||
registry_2.setGroupId(Long.MAX_VALUE);
|
||||
registry_2.setClearingDate(LocalDate.now());
|
||||
registry_2.setRegistryCode("TM_T");
|
||||
registry_2.setRegistryDesignation(RegistryDesignation.T.getKey());
|
||||
registry_2.setRegistryInstrumentType(RegistryInstrumentType.M.getKey());
|
||||
registry_2.setRegistryUnit(RegistryUnit.T.getKey());
|
||||
registry_2.setSessionId(sessionId);
|
||||
registry_2.setAccount("ACCOUNT");
|
||||
registry_2.setAccountType(AccountType.Clrn.getKey());
|
||||
|
|
@ -421,6 +440,9 @@ public class ReportServiceTest_KS {
|
|||
registry_1.setGroupId(Long.MAX_VALUE);
|
||||
registry_1.setSettlementDate(LocalDate.now());
|
||||
registry_1.setRegistryCode("TS_T");
|
||||
registry_1.setRegistryDesignation(RegistryDesignation.T.getKey());
|
||||
registry_1.setRegistryInstrumentType(RegistryInstrumentType.S.getKey());
|
||||
registry_1.setRegistryUnit(RegistryUnit.T.getKey());
|
||||
registry_1.setSecuritySymbol("SECURITY_SYMBOL");
|
||||
registry_1.setSessionId(sessionId);
|
||||
registry_1.setAccount("ACCOUNT");
|
||||
|
|
@ -434,6 +456,9 @@ public class ReportServiceTest_KS {
|
|||
registry_2.setGroupId(Long.MAX_VALUE);
|
||||
registry_2.setSettlementDate(LocalDate.now());
|
||||
registry_2.setRegistryCode("OS_T");
|
||||
registry_2.setRegistryDesignation(RegistryDesignation.O.getKey());
|
||||
registry_2.setRegistryInstrumentType(RegistryInstrumentType.S.getKey());
|
||||
registry_2.setRegistryUnit(RegistryUnit.T.getKey());
|
||||
registry_2.setSecuritySymbol("SECURITY_SYMBOL");
|
||||
registry_2.setSessionId(sessionId);
|
||||
registry_2.setAccount("ACCOUNT");
|
||||
|
|
|
|||
|
|
@ -34,6 +34,8 @@ public record RegistryTradingParams(RegistryDesignation registryDesignation,
|
|||
public final static RegistryTradingParams DM__;
|
||||
public final static RegistryTradingParams AM__;
|
||||
public final static RegistryTradingParams AS__;
|
||||
public final static RegistryTradingParams CM__;
|
||||
public final static RegistryTradingParams LM__;
|
||||
|
||||
static {
|
||||
OS_T = new RegistryTradingParams(RegistryDesignation.O,
|
||||
|
|
@ -117,6 +119,14 @@ public record RegistryTradingParams(RegistryDesignation registryDesignation,
|
|||
RegistryInstrumentType.S,
|
||||
null,
|
||||
null);
|
||||
CM__ = new RegistryTradingParams(RegistryDesignation.C,
|
||||
RegistryInstrumentType.M,
|
||||
null,
|
||||
null);
|
||||
LM__ = new RegistryTradingParams(RegistryDesignation.L,
|
||||
RegistryInstrumentType.M,
|
||||
null,
|
||||
null);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -40,6 +40,11 @@ public class ImdgPredicateBuilderHazelcast implements ImdgPredicateBuilder {
|
|||
return new ImdgPredicateHazelcast(Predicates.lessThan(key, cmpValue));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ImdgPredicate notNull(String key) {
|
||||
return new ImdgPredicateHazelcast(Predicates.not(Predicates.equal(key, null)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ImdgPredicate in(String key, Comparable[] values) {
|
||||
return new ImdgPredicateHazelcast(Predicates.in(key, values));
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ public interface ImdgPredicateBuilder {
|
|||
ImdgPredicate lessEqual(String key, Comparable value);
|
||||
ImdgPredicate greater(String key, Comparable value);
|
||||
ImdgPredicate less(String key, Comparable value);
|
||||
ImdgPredicate notNull(String key);
|
||||
|
||||
ImdgPredicate in(String key, Comparable... values);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue