Period*ReportBuilder

This commit is contained in:
akulikov 2023-05-15 15:11:34 +03:00
parent 75e8a83aad
commit 8d7c725a06
11 changed files with 194 additions and 155 deletions

View file

@ -0,0 +1,7 @@
package ru.spcex.clearing.reports.reports;
/**
* Класс для формирования отчета без параметров
*/
public class EmptyParams {
}

View file

@ -10,13 +10,11 @@ import ru.clearing.classes.statics.data.registry.Registry;
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.reports.CSVReportBuilder;
import ru.spcex.clearing.reports.reports.SessionIdParam;
import ru.spcex.platform.enumeration.Market;
import ru.spcex.platform.enumeration.Side;
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 java.math.RoundingMode;
import java.time.Instant;
@ -26,23 +24,23 @@ import java.util.List;
import java.util.Map;
// todo check typo
public abstract class LiabilitiesClaimsReportBuilder extends CSVReportBuilder<SessionIdParam> {
private final Imdg<ExecutionFond> executionFondImdg;
private final Imdg<ExecutionDeposit> executionDepositImdg;
private final Imdg<Company> companyImdg;
private final Imdg<Registry> registryImdg;
private final Imdg<Listing> listingImdg;
private final Imdg<FixedIncomeSecurity> fixedIncomeSecurityImdg;
private final Imdg<TradingClearingRegistry> tradingClearingRegistryImdg;
public abstract class LiabilitiesClaimsReportBuilder<P> extends CSVReportBuilder<P> {
protected final Imdg<ExecutionFond> executionFondImdg;
protected final Imdg<ExecutionDeposit> executionDepositImdg;
protected final Imdg<Company> companyImdg;
protected final Imdg<Registry> registryImdg;
protected final Imdg<Listing> listingImdg;
protected final Imdg<FixedIncomeSecurity> fixedIncomeSecurityImdg;
protected final Imdg<TradingClearingRegistry> tradingClearingRegistryImdg;
private final String[] headers = {
protected final String[] headers = {
"id", "doc_date", "doc_time", "doc_type", "clearingHouse", "firmId", "firName", "session_id",
"clearing_date", "clearing_time", "trdAccId", "account", "depo_account", "currency", "tr_id", "securityId",
"tr_buySell", "tr_date", "tr_execDate", "exec_status", "repaym_date", "tr_price", "nominal", "lot_value",
"tr_lot", "tr_quantity", "tr_value", "tr_accruedint", "accruedint", "tr_clrComm", "tr_exhComm", "cash_liability",
"depo_liability", "cash_netto", "depo_netto"
};
private List<String[]> lines = null;
protected List<String[]> lines = null;
public LiabilitiesClaimsReportBuilder(ImdgProvider imdgProvider) {
this.executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class);
@ -68,17 +66,14 @@ public abstract class LiabilitiesClaimsReportBuilder extends CSVReportBuilder<Se
return lines;
}
@Override
protected void collect(SessionIdParam params) {
ImdgPredicate executionFondPredicate = executionFondImdg
.predicateBuilder()
.equals("sessionId", params.getSessionId());
Collection<ExecutionFond> executionFonds = executionFondImdg.getCollectionObjectsByPredicate(executionFondPredicate);
protected abstract Collection<ExecutionFond> getExecutionFondsForReport(P params);
ImdgPredicate executionDepositPredicate = executionDepositImdg
.predicateBuilder()
.equals("sessionId", params.getSessionId());
Collection<ExecutionDeposit> executionDeposits = executionDepositImdg.getCollectionObjectsByPredicate(executionDepositPredicate);
protected abstract Collection<ExecutionDeposit> getExecutionDepositsForReport(P params);
@Override
protected void collect(P params) {
Collection<ExecutionFond> executionFonds = getExecutionFondsForReport(params);
Collection<ExecutionDeposit> executionDeposits = getExecutionDepositsForReport(params);
List<ExecutionCommon> executions = new ArrayList<>(executionFonds.size() + executionDeposits.size());
executions.addAll(executionFonds);
@ -114,7 +109,7 @@ public abstract class LiabilitiesClaimsReportBuilder extends CSVReportBuilder<Se
String firName = company.getFullName();
String sessionId = String.valueOf(execution.getSessionId());
String clearingDate = dateFormatter.format(execution.getClearingDate());
String clearingTime = dateFormatter.format(execution.getClearingDate()); // todo check it
String clearingTime = dateFormatter.format(execution.getClearingDate());
String trdAccId = registry.getTradingClearingRegistry();
String account = String.valueOf(tradingClearingRegistry.getMoneyAccountId());
String depoAccount = String.valueOf(tradingClearingRegistry.getDepoAaccountId());

View file

@ -7,7 +7,6 @@ import ru.clearing.classes.statics.data.registry.Registry;
import ru.clearing.classes.statics.data.statement.Statement;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.reports.CSVReportBuilder;
import ru.spcex.clearing.reports.reports.PeriodParams;
import ru.spcex.platform.enumeration.InOutDirection;
import ru.spcex.platform.enumeration.WorkflowStatus;
import ru.spcex.platform.imdg.api.Imdg;
@ -20,18 +19,18 @@ import java.util.Collection;
import java.util.List;
import java.util.Map;
public abstract class MoneyChangeReportBuilder extends CSVReportBuilder<PeriodParams> {
private final Imdg<Registry> registryImdg;
private final Imdg<Company> companyImdg;
private final Imdg<Listing> listingImdg;
private final Imdg<Statement> statementImdg;
private final Imdg<PaymentInstruction> paymentInstructionImdg;
private final String[] headers = {
public abstract class MoneyChangeReportBuilder<P> extends CSVReportBuilder<P> {
protected final Imdg<Registry> registryImdg;
protected final Imdg<Company> companyImdg;
protected final Imdg<Listing> listingImdg;
protected final Imdg<Statement> statementImdg;
protected final Imdg<PaymentInstruction> paymentInstructionImdg;
protected final String[] headers = {
"id", "doc_date", "doc_time", "doc_name", "doc_type", "clearingHouse", "firmId", "firName", "trdAccId",
"account", "currency", "registry_code", "registry_name", "open_balance", "change_balance", "add_withdraw",
"close_balance", "remarks", "add_sum", "add_time", "withdraw_sum", "withdraw_time"
};
private List<String[]> lines = null;
protected List<String[]> lines = null;
public MoneyChangeReportBuilder(ImdgProvider imdgProvider) {
this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
@ -51,15 +50,12 @@ public abstract class MoneyChangeReportBuilder extends CSVReportBuilder<PeriodPa
return lines;
}
protected abstract Collection<Registry> getRegistryForReport(P param);
@Override
protected void collect(PeriodParams params) {
protected void collect(P params) {
ImdgPredicateBuilder pb = registryImdg.predicateBuilder();
Collection<Registry> registries = registryImdg.getCollectionObjectsByPredicate(
pb.and(
pb.greatEqual("clearingDate", params.getStartDate()),
pb.lessEqual("clearingDate", params.getEndDate())
)
);
Collection<Registry> registries = getRegistryForReport(params);
Company clearingHouseCompany = companyImdg.getSingleObjectByID(1L);
String clearingHouse = clearingHouseCompany.getFullName();

View file

@ -1,16 +1,34 @@
package ru.spcex.clearing.reports.reports.bp;
import ru.clearing.classes.statics.data.execution.ExecutionDeposit;
import ru.clearing.classes.statics.data.execution.ExecutionFond;
import ru.spcex.clearing.reports.reports.SessionIdParam;
import ru.spcex.platform.enumeration.ReportType;
import ru.spcex.platform.imdg.api.ImdgProvider;
import java.time.Instant;
import java.util.Collection;
import java.util.Map;
public class OperationalLiabilitiesClaimsReportBuilder extends LiabilitiesClaimsReportBuilder {
public class OperationalLiabilitiesClaimsReportBuilder extends LiabilitiesClaimsReportBuilder<SessionIdParam> {
public OperationalLiabilitiesClaimsReportBuilder(ImdgProvider imdgProvider) {
super(imdgProvider);
}
@Override
protected Collection<ExecutionFond> getExecutionFondsForReport(SessionIdParam params) {
return executionFondImdg.getCollectionObjectsByFieldValues(
Map.of("sessionId", params.getSessionId())
);
}
@Override
protected Collection<ExecutionDeposit> getExecutionDepositsForReport(SessionIdParam params) {
return executionDepositImdg.getCollectionObjectsByFieldValues(
Map.of("sessionId", params.getSessionId())
);
}
@Override
protected String getReportFilename(SessionIdParam params) {
return "operational_liabilities_claims.%s".formatted(Instant.now());

View file

@ -1,25 +1,31 @@
package ru.spcex.clearing.reports.reports.bp;
import ru.spcex.clearing.reports.reports.PeriodParams;
import ru.clearing.classes.statics.data.registry.Registry;
import ru.spcex.clearing.reports.reports.SessionIdParam;
import ru.spcex.platform.enumeration.ReportType;
import ru.spcex.platform.imdg.api.ImdgProvider;
import java.time.Instant;
import java.util.Collection;
import java.util.Map;
public class OperationalMoneyChangeReportBuilder extends MoneyChangeReportBuilder {
public class OperationalMoneyChangeReportBuilder extends MoneyChangeReportBuilder<SessionIdParam> {
public OperationalMoneyChangeReportBuilder(ImdgProvider imdgProvider) {
super(imdgProvider);
}
@Override
protected String getReportFilename(PeriodParams params) {
return "operational_money_change.%s-%s.%s".formatted(
dateFormatter.format(params.getStartDate()),
dateFormatter.format(params.getEndDate()),
dateTimeFormatter.format(Instant.now())
protected Collection<Registry> getRegistryForReport(SessionIdParam param) {
return registryImdg.getCollectionObjectsByFieldValues(
Map.of("sessionId", param.getSessionId())
);
}
@Override
protected String getReportFilename(SessionIdParam params) {
return "operational_money_change.%s".formatted(dateTimeFormatter.format(Instant.now()));
}
@Override
protected ReportType getReportType() {
return ReportType.OPERATIONAL_MONEY_CHANGE;

View file

@ -1,51 +0,0 @@
package ru.spcex.clearing.reports.reports.bp;
import ru.spcex.clearing.reports.reports.ReportId;
import ru.spcex.clearing.reports.reports.ReportWithPeriod;
import java.time.LocalDate;
import java.time.LocalDateTime;
public class PeriodLiabilitiesClaims extends ReportWithPeriod {
private final String[] headers = {
"id", "doc_date", "doc_time", "doc_name", "doc_type", "clearingHouse", "firmId", "firName", "session_id",
"clearing_date", "clearing_time", "trdAccId", "account", "depo_account", "currency", "tr_id", "securityId",
"tr_buySell", "tr_date", "tr_execDate", "exec_status", "repaym_date", "tr_price", "nominal", "lot_value",
"tr_lot", "tr_quantity", "tr_value", "tr_accruedint", "accruedint", "tr_clrComm", "tr_exhComm",
"cash_liability", "depo_liability", "cash_netto", "depo_netto"
};
public PeriodLiabilitiesClaims(LocalDate startDate, LocalDate endDate) {
super(ReportId.PERIOD_LIABILITIES_CLAIMS,
"0.0.1",
"BP",
"Отчет за период. Отчет об обязательствах",
startDate,
endDate);
}
@Override
public String getReportName(LocalDateTime reportDateTime) {
return "period_liabilities_claims.%s-%s.%s".formatted(
DATE_FORMATTER.format(startDate),
DATE_FORMATTER.format(endDate),
DATE_TIME_FORMATTER.format(reportDateTime)
);
}
public String[] getHeaders() {
return headers;
}
public record InfoPeriodLiabilitiesClaims(String id, String docDate, String docTime, String docName,
String docType, String clearingHouse, String firmId, String firName,
String sessionId, String clearingDate, String clearingTime, String trdAccId,
String account, String depoAccount, String currency, String trId, String securityId,
String trBuySell, String trDate, String trExecDate, String execStatus,
String repaymDate, String trPrice, String nominal, String lotValue,
String trLot, String trQuantity, String trValue, String trAccruedInt,
String accruedInt, String trClrComm, String trExhComm, String cashLiability,
String depoLiability, String cashNetto, String depoNetto) {
}
}

View file

@ -0,0 +1,54 @@
package ru.spcex.clearing.reports.reports.bp;
import ru.clearing.classes.statics.data.execution.ExecutionDeposit;
import ru.clearing.classes.statics.data.execution.ExecutionFond;
import ru.spcex.clearing.reports.reports.PeriodParams;
import ru.spcex.platform.enumeration.ReportType;
import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
import java.time.Instant;
import java.util.Collection;
public class PeriodLiabilitiesClaimsReportBuilder extends LiabilitiesClaimsReportBuilder<PeriodParams> {
public PeriodLiabilitiesClaimsReportBuilder(ImdgProvider imdgProvider) {
super(imdgProvider);
}
@Override
protected String getReportFilename(PeriodParams params) {
return "period_liabilities_claims.%s-%s.%s".formatted(
dateFormatter.format(params.getStartDate()),
dateFormatter.format(params.getEndDate()),
dateTimeFormatter.format(Instant.now())
);
}
@Override
protected ReportType getReportType() {
return ReportType.PERIOD_LIABILITIES_CLAIMS;
}
@Override
protected Collection<ExecutionFond> getExecutionFondsForReport(PeriodParams params) {
ImdgPredicateBuilder pb = executionFondImdg.predicateBuilder();
return executionFondImdg.getCollectionObjectsByPredicate(
pb.and(
pb.greatEqual("clearingDate", params.getStartDate()),
pb.lessEqual("clearingDate", params.getEndDate())
)
);
}
@Override
protected Collection<ExecutionDeposit> getExecutionDepositsForReport(PeriodParams params) {
ImdgPredicateBuilder pb = executionDepositImdg.predicateBuilder();
return executionDepositImdg.getCollectionObjectsByPredicate(
pb.and(
pb.greatEqual("clearingDate", params.getStartDate()),
pb.lessEqual("clearingDate", params.getEndDate())
)
);
}
}

View file

@ -1,46 +0,0 @@
package ru.spcex.clearing.reports.reports.bp;
import ru.spcex.clearing.reports.reports.ReportId;
import ru.spcex.clearing.reports.reports.ReportWithPeriod;
import java.time.LocalDate;
import java.time.LocalDateTime;
public class PeriodMoneyChange extends ReportWithPeriod {
private final String[] headers = {
"id", "doc_date", "doc_time", "doc_name", "doc_type", "clearingHouse", "firmId", "firName", "trdAccId",
"account", "currency", "registry_code", "registry_name", "open_balance", "change_balance", "add_withdraw",
"close_balance", "remarks", "add_sum", "add_time", "withdraw_sum", "withdraw_time"
};
public PeriodMoneyChange(LocalDate startDate, LocalDate endDate) {
super(ReportId.PERIOD_MONEY_CHANGE,
"0.0.1",
"BP",
"Отчет за период. Отчет о денежных средствах",
startDate,
endDate);
}
@Override
public String getReportName(LocalDateTime reportDateTime) {
return "period_money_change.%s-%s.%s".formatted(
DATE_FORMATTER.format(startDate),
DATE_FORMATTER.format(endDate),
DATE_TIME_FORMATTER.format(reportDateTime)
);
}
public String[] getHeaders() {
return headers;
}
public record InfoPeriodMoneyChange(String id, String docDate, String docTime, String docName, String docType,
String clearingHouse, String firmId, String firName, String trdAccId,
String account, String currency, String registryCode, String registryName,
String openBalance, String changeBalance, String addWithdraw,
String closeBalance, String remarks, String addSum, String addTime,
String withdrawSum, String withdrawTime) {
}
}

View file

@ -0,0 +1,43 @@
package ru.spcex.clearing.reports.reports.bp;
import ru.clearing.classes.statics.data.registry.Registry;
import ru.spcex.clearing.reports.reports.PeriodParams;
import ru.spcex.platform.enumeration.ReportType;
import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
import java.time.Instant;
import java.util.Collection;
public class PeriodMoneyChangeReportBuilder extends MoneyChangeReportBuilder<PeriodParams> {
public PeriodMoneyChangeReportBuilder(ImdgProvider imdgProvider) {
super(imdgProvider);
}
@Override
protected Collection<Registry> getRegistryForReport(PeriodParams params) {
ImdgPredicateBuilder pb = registryImdg.predicateBuilder();
return registryImdg.getCollectionObjectsByPredicate(
pb.and(
pb.greatEqual("clearingDate", params.getStartDate()),
pb.lessEqual("clearingDate", params.getEndDate())
)
);
}
@Override
public String getReportFilename(PeriodParams params) {
return "period_money_change.%s-%s.%s".formatted(
dateFormatter.format(params.getStartDate()),
dateFormatter.format(params.getEndDate()),
dateTimeFormatter.format(Instant.now())
);
}
@Override
protected ReportType getReportType() {
return ReportType.PERIOD_MONEY_CHANGE;
}
}

View file

@ -1,18 +1,31 @@
package ru.spcex.clearing.reports.reports.bp;
import ru.spcex.clearing.reports.reports.SessionIdParam;
import ru.clearing.classes.statics.data.execution.ExecutionDeposit;
import ru.clearing.classes.statics.data.execution.ExecutionFond;
import ru.spcex.clearing.reports.reports.EmptyParams;
import ru.spcex.platform.enumeration.ReportType;
import ru.spcex.platform.imdg.api.ImdgProvider;
import java.time.Instant;
import java.util.Collection;
public class SummaryLiabilitiesClaimsReportBuilder extends LiabilitiesClaimsReportBuilder {
public class SummaryLiabilitiesClaimsReportBuilder extends LiabilitiesClaimsReportBuilder<EmptyParams> {
public SummaryLiabilitiesClaimsReportBuilder(ImdgProvider imdgProvider) {
super(imdgProvider);
}
@Override
protected String getReportFilename(SessionIdParam params) {
protected Collection<ExecutionFond> getExecutionFondsForReport(EmptyParams params) {
return executionFondImdg.getAllValues();
}
@Override
protected Collection<ExecutionDeposit> getExecutionDepositsForReport(EmptyParams params) {
return executionDepositImdg.getAllValues();
}
@Override
protected String getReportFilename(EmptyParams params) {
return "summary_money_change.%s".formatted(dateTimeFormatter.format(Instant.now()));
}

View file

@ -1,27 +1,31 @@
package ru.spcex.clearing.reports.reports.bp;
import ru.spcex.clearing.reports.reports.PeriodParams;
import ru.clearing.classes.statics.data.registry.Registry;
import ru.spcex.clearing.reports.reports.EmptyParams;
import ru.spcex.platform.enumeration.ReportType;
import ru.spcex.platform.imdg.api.ImdgProvider;
import java.time.Instant;
import java.util.Collection;
public class SummaryMoneyChangeReportBuilder extends MoneyChangeReportBuilder {
public class SummaryMoneyChangeReportBuilder extends MoneyChangeReportBuilder<EmptyParams> {
public SummaryMoneyChangeReportBuilder(ImdgProvider imdgProvider) {
super(imdgProvider);
}
@Override
protected String getReportFilename(PeriodParams params) {
return "summary_money_change.%s-%s.%s".formatted(
dateFormatter.format(params.getStartDate()),
dateFormatter.format(params.getEndDate()),
dateTimeFormatter.format(Instant.now())
);
protected Collection<Registry> getRegistryForReport(EmptyParams param) {
return registryImdg.getAllValues();
}
@Override
protected String getReportFilename(EmptyParams params) {
return "summary_money_change.%s".formatted(dateTimeFormatter.format(Instant.now()));
}
@Override
protected ReportType getReportType() {
return ReportType.SUMMARY_MONEY_CHANGE;
}
}