reports-service добавил поддержку запуска SimpleReportCollector

This commit is contained in:
AKurakin 2023-01-10 19:37:47 +03:00
parent 324a1546c4
commit c116c93b37
2 changed files with 54 additions and 18 deletions

View file

@ -26,8 +26,8 @@ public class ReportsServiceApplication {
//todo это тест. Переписать код с учётом параметров запуска - как сервис или разово все из командной строки.
ReportsServiceCommand reportCommand = context.getBean(ReportsServiceCommand.class);
reportCommand.writeAllXML();
Logger log = LoggerFactory.getLogger(ReportsServiceApplication.class);
log.info("Shutdown application after work");
// Logger log = LoggerFactory.getLogger(ReportsServiceApplication.class);
// log.info("Shutdown application after work");
// context.close(); // todo если будет запущен как сервис, сделать выход опционально, по другому.
} catch (Throwable e) {
LoggerFactory.getLogger(ReportsServiceApplication.class).error("Report-service start failed: {} -> {}", e.getClass().getSimpleName(), ExceptionUtils.getStackTrace(e));

View file

@ -30,23 +30,34 @@ public class ReportsServiceCommand implements InitializingBean {
protected ReportsServiceSettings settings;
protected ImdgProvider imdg;
protected List<ReportWithPeriodCollector> allReports; // Spring services
private final Map<ReportId, ReportWithPeriodCollector> collectorForReportById;
protected List<ReportWithPeriodCollector> allPeriodReports; // Spring services
protected List<SimpleReportCollector> allSimpleReports;
private final Map<ReportId, AbstractReportCollector> collectorForReportById;
@Autowired
public ReportsServiceCommand(ImdgProvider imdg, List<ReportWithPeriodCollector> allReports, ReportsServiceSettings settings) {
public ReportsServiceCommand(ImdgProvider imdg, List<ReportWithPeriodCollector> allPeriodReports,
List<SimpleReportCollector> allSimpleReports,
ReportsServiceSettings settings) {
this.imdg = imdg;
this.settings = settings;
this.allReports = allReports; // allReports = context.getBeansOfType(ReportDataCollector.class);
this.allSimpleReports = allSimpleReports;
this.allPeriodReports = allPeriodReports; // allReports = context.getBeansOfType(ReportDataCollector.class);
this.collectorForReportById = new HashMap<>();
for (ReportWithPeriodCollector<?> collector : allReports) {
for (ReportWithPeriodCollector<?> collector : allPeriodReports) {
ReportId rId = collector.getReportId();
collectorForReportById.put(rId, collector);
String idStr = rId == null ? null : rId.getKey();
log.info("Register collector service {} (report id \"{}\")for generate {}", collector, idStr, collector.getReportClass().getSimpleName());
log.info("Register collector service {} (period report id \"{}\")for generate {}", collector, idStr, collector.getReportClass().getSimpleName());
}
assert allReports.size() == collectorForReportById.size();
assert allPeriodReports.size() == collectorForReportById.size();
for (SimpleReportCollector<?> collector : allSimpleReports) {
ReportId rId = collector.getReportId();
collectorForReportById.put(rId, collector);
String idStr = rId == null ? null : rId.getKey();
log.info("Register collector service {} (simple report id \"{}\")for generate {}", collector, idStr, collector.getReportClass().getSimpleName());
}
}
@Override
@ -57,18 +68,27 @@ public class ReportsServiceCommand implements InitializingBean {
}
public void generateReportAll(LocalDate startDate, LocalDate endDate) throws IOException {
for (ReportWithPeriodCollector<?> reportDataCollector : allReports) {
for (ReportWithPeriodCollector<?> reportDataCollector : allPeriodReports) {
makeSingleReport(reportDataCollector, startDate, endDate);
}
for (SimpleReportCollector<?> reportDataCollector : allSimpleReports) {
makeSingleReport(reportDataCollector);
}
}
public void generateReportById(String reportIdStr, LocalDate startDate, LocalDate endDate) throws IOException {
ReportId reportId = parseReportId(reportIdStr);
ReportWithPeriodCollector<?> reportDataCollector = collectorForReportById.get(reportId);
AbstractReportCollector<?> reportDataCollector = collectorForReportById.get(reportId);
if (reportDataCollector == null)
throw new IllegalStateException("Collector for ReportID " + reportId + " not implemented yet");
makeSingleReport(reportDataCollector, startDate, endDate);
if (reportDataCollector instanceof ReportWithPeriodCollector) {
makeSingleReport((ReportWithPeriodCollector) reportDataCollector, startDate, endDate);
} else if (reportDataCollector instanceof SimpleReportCollector) {
makeSingleReport((SimpleReportCollector) reportDataCollector);
} else {
throw new IllegalArgumentException("Uncknown report class: " + reportDataCollector.getClass().getName());
}
}
@ -86,23 +106,39 @@ public class ReportsServiceCommand implements InitializingBean {
File outPath = new File(settings.getReportModuleOut());
XMLReportBuilder reportBuilder = new XMLReportBuilder(reportDataCollector.getReportClass(), outPath);
AbstractReport report = reportDataCollector.collectReportWithPeriod(startDate, endDate);
File reportFile = null;
reportFile = reportBuilder.createReport(report);
File reportFile = reportBuilder.createReport(report);
if (reportFile != null) {
log.debug("New report file done: \"{}\"", reportFile);
}
}
protected void makeSingleReport(SimpleReportCollector<?> reportDataCollector) throws IOException {
log.debug("Generate report by collector {} - {}", reportDataCollector.getClass().getSimpleName(), reportDataCollector.getReportClass().getSimpleName());
File outPath = new File(settings.getReportModuleOut());
XMLReportBuilder reportBuilder = new XMLReportBuilder(reportDataCollector.getReportClass(), outPath);
AbstractReport report = reportDataCollector.collectReport();
File reportFile = reportBuilder.createReport(report);
if (reportFile != null) {
log.debug("New report file done: \"{}\"", reportFile);
}
}
public void writeAllXML() throws IOException {
log.info("Report types: {}", allReports);
for (ReportWithPeriodCollector collector : allReports) {
log.info("Report types with data range: {}", allPeriodReports);
for (ReportWithPeriodCollector collector : allPeriodReports) {
log.info("Make report {}", collector);
LocalDate date2 = LocalDate.now();
LocalDate date1 = LocalDate.of(date2.getYear(), date2.getMonth(), 1);//date2.minusMonths(1);
makeSingleReport(collector, date1, date2);
}
log.info("Shutdown application after work");
log.info("Report types: {}", allSimpleReports);
for (SimpleReportCollector collector : allSimpleReports) {
log.info("Make report {}", collector);
LocalDate date2 = LocalDate.now();
makeSingleReport(collector);
}
log.info("All done");
}
public void writeAllDocx() {