reports-service http://jira.mfd.msk:8088/browse/CLS-283 запуск новых отчётов по GREP

This commit is contained in:
AKurakin 2023-05-27 15:33:49 +03:00
parent 3c252ca3f6
commit adc4d101f0
4 changed files with 112 additions and 7 deletions

View file

@ -17,6 +17,7 @@ import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
@Deprecated
public abstract class AbstractReportCollector<T extends AbstractReport> {
public static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("dd.MM.yyyy");
public static final DateTimeFormatter TIME_FORMATTER = DateTimeFormatter.ofPattern("HH:mm:ss");

View file

@ -10,6 +10,7 @@ import java.time.Instant;
import java.time.LocalDate;
import java.util.Collection;
@Deprecated
public abstract class ReportWithPeriodCollector<T extends AbstractReport> extends AbstractReportCollector<T> {
/**
* Подготовка отчета на период startDate..endDate

View file

@ -4,12 +4,22 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.lang.Nullable;
import org.springframework.stereotype.Service;
import ru.clearing.classes.statics.data.misc.Session;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequestWithPeriod;
import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequestWithSessionId;
import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequestWithSessionIdList;
import ru.spcex.clearing.reports.config.ReportBuildersConfig;
import ru.spcex.clearing.reports.config.element.ReportsServiceSettings;
import ru.spcex.clearing.reports.reports.AbstractReport;
import ru.spcex.clearing.reports.reports.ReportId;
import ru.spcex.clearing.reports.reports.*;
import ru.spcex.clearing.reports.services.builders.XMLReportBuilder;
import ru.spcex.platform.enumeration.ReportType;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.utils.enumeration.IEnumKey;
import ru.spcex.platform.utils.log.ExceptionUtils;
@ -17,9 +27,7 @@ import ru.spcex.platform.utils.log.ExceptionUtils;
import java.io.File;
import java.io.IOException;
import java.time.LocalDate;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
* Исполняет создание отчётов.
@ -35,17 +43,42 @@ public class ReportsServiceCommand implements InitializingBean {
protected ReportsServiceSettings settings;
protected ImdgProvider imdg;
@Deprecated
protected List<ReportWithPeriodCollector> allPeriodReports; // Spring services
@Deprecated
protected List<SimpleReportCollector> allSimpleReports;
@Deprecated
private final Map<ReportId, AbstractReportCollector> collectorForReportById;
// new format report:
ReportService newReportService; // by ReportBuildersConfig
Map<ReportType, List<CSVReportBuilder<EmptyParams>>> reportBuildersWithoutParams;
Map<ReportType, List<CSVReportBuilder<SessionIdParam>>> reportBuildersWithSessionIdParam;
Map<ReportType, List<CSVReportBuilder<SessionIdListParams>>> reportBuildersWithSessionIdListParam;
Map<ReportType, List<CSVReportBuilder<PeriodParams>>> reportBuildersWithPeriodParams;
@Autowired
public ReportsServiceCommand(ImdgProvider imdg, List<ReportWithPeriodCollector> allPeriodReports,
public ReportsServiceCommand(ImdgProvider imdg,
List<ReportWithPeriodCollector> allPeriodReports,
List<SimpleReportCollector> allSimpleReports,
@Qualifier("reportBuildersWithoutParams") Map<ReportType, List<CSVReportBuilder<EmptyParams>>> reportBuildersWithoutParams,
@Qualifier("reportBuildersWithSessionIdParam") Map<ReportType, List<CSVReportBuilder<SessionIdParam>>> reportBuildersWithSessionIdParam,
@Qualifier("reportBuildersWithSessionIdListParam") Map<ReportType, List<CSVReportBuilder<SessionIdListParams>>> reportBuildersWithSessionIdListParam,
@Qualifier("reportBuildersWithPeriodParams") Map<ReportType, List<CSVReportBuilder<PeriodParams>>> reportBuildersWithPeriodParams,
ReportService reportService,
ReportsServiceSettings settings) {
this.imdg = imdg;
this.settings = settings;
this.newReportService = reportService;
this.reportBuildersWithoutParams = reportBuildersWithoutParams;
this.reportBuildersWithSessionIdParam = reportBuildersWithSessionIdParam;
this.reportBuildersWithSessionIdListParam = reportBuildersWithSessionIdListParam;
this.reportBuildersWithPeriodParams = reportBuildersWithPeriodParams;
this.allSimpleReports = allSimpleReports;
this.allPeriodReports = allPeriodReports; // allReports = context.getBeansOfType(ReportDataCollector.class);
this.collectorForReportById = new HashMap<>();
@ -73,6 +106,75 @@ public class ReportsServiceCommand implements InitializingBean {
}
public void generateReportAll(@Nullable String reportGroup, LocalDate startDate, LocalDate endDate) throws IOException {
// new reports:
{
HashSet<ReportType> reported=new HashSet<>();
for (ReportType rType : reportBuildersWithoutParams.keySet()) {
if (reported.contains(rType)) continue;
reported.add(rType);
log.info("Make report {}", rType);
try {
BaseRequest<ReportRequest> request = new BaseRequest<>();
request.setRequestPayload(new ReportRequest());
request.getRequestPayload().setReportId(rType.getKey());
newReportService.createReport(request);
} catch (Exception e) {
log.error("Error make report {}: {}", rType, ExceptionUtils.getStackTrace(e));
}
}
Imdg<Session> sessionImdg = imdg.getImdg(IMDGDistributedNames.Map_Session, Session.class);
Long sessionId = sessionImdg.aggregateLongMax("id", sessionImdg.predicateBuilder().greatEqual("id", 0L)); // max, always true
log.info("For all report sessionId={}", sessionId);
for (ReportType rType : reportBuildersWithSessionIdParam.keySet()) {
if (reported.contains(rType)) continue;
reported.add(rType);
log.info("Make report {}, session {}", rType, sessionId);
try {
BaseRequest<ReportRequestWithSessionId> request = new BaseRequest<>();
request.setRequestPayload(new ReportRequestWithSessionId());
request.getRequestPayload().setReportId(rType.getKey());
request.getRequestPayload().setSessionId(sessionId);
newReportService.createReportForSessionId(request);
} catch (Exception e) {
log.error("Error make report {}: {}", rType, ExceptionUtils.getStackTrace(e));
}
}
for (ReportType rType : reportBuildersWithSessionIdListParam.keySet()) {
if (reported.contains(rType)) continue;
reported.add(rType);
log.info("Make report {}, sessions {}", rType, sessionId);
try {
BaseRequest<ReportRequestWithSessionIdList> request = new BaseRequest<>();
request.setRequestPayload(new ReportRequestWithSessionIdList());
request.getRequestPayload().setReportId(rType.getKey());
request.getRequestPayload().setSessionIdList(Arrays.asList(sessionId));
newReportService.createReportForSessionIdList(request);
} catch (Exception e) {
log.error("Error make report {}: {}", rType, ExceptionUtils.getStackTrace(e));
}
}
for (ReportType rType : reportBuildersWithPeriodParams.keySet()) {
if (reported.contains(rType)) continue;
reported.add(rType);
LocalDate d1=LocalDate.now().minusDays(1);
LocalDate d2=LocalDate.now().minusDays(1);
log.info("Make report {} period {} - {}", rType, d1, d2);
try {
BaseRequest<ReportRequestWithPeriod> request = new BaseRequest<>();
request.setRequestPayload(new ReportRequestWithPeriod());
request.getRequestPayload().setReportId(rType.getKey());
request.getRequestPayload().setStartDate(d1);
request.getRequestPayload().setStartDate(d2);
newReportService.createReportForPeriod(request);
} catch (Exception e) {
log.error("Error make report {}: {}", rType, ExceptionUtils.getStackTrace(e));
}
}
}
log.info(" Old format report...");
// deprecated code:
for (ReportWithPeriodCollector<?> reportDataCollector : allPeriodReports) {
if (reportGroup == null || QUEUE_RUN_REPORT_COMMAND.equals(reportGroup)) {
try {
@ -124,7 +226,7 @@ public class ReportsServiceCommand implements InitializingBean {
XMLReportBuilder reportBuilder = new XMLReportBuilder(reportDataCollector.getReportClass(), outPath);
AbstractReport report = reportDataCollector.collectReportWithPeriod(startDate, endDate);
if (report == null) {
throw new NullPointerException("reportDataCollector "+ reportDataCollector +" return null");
throw new NullPointerException("reportDataCollector " + reportDataCollector + " return null");
}
File reportFile = reportBuilder.createReport(report);
if (reportFile != null) {

View file

@ -2,6 +2,7 @@ package ru.spcex.clearing.reports.services;
import ru.spcex.clearing.reports.reports.AbstractReport;
@Deprecated
public abstract class SimpleReportCollector<T extends AbstractReport> extends AbstractReportCollector<T> {
/**
* Подготовка отчета (без входных параметров)