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 это тест. Переписать код с учётом параметров запуска - как сервис или разово все из командной строки. //todo это тест. Переписать код с учётом параметров запуска - как сервис или разово все из командной строки.
ReportsServiceCommand reportCommand = context.getBean(ReportsServiceCommand.class); ReportsServiceCommand reportCommand = context.getBean(ReportsServiceCommand.class);
reportCommand.writeAllXML(); reportCommand.writeAllXML();
Logger log = LoggerFactory.getLogger(ReportsServiceApplication.class); // Logger log = LoggerFactory.getLogger(ReportsServiceApplication.class);
log.info("Shutdown application after work"); // log.info("Shutdown application after work");
// context.close(); // todo если будет запущен как сервис, сделать выход опционально, по другому. // context.close(); // todo если будет запущен как сервис, сделать выход опционально, по другому.
} catch (Throwable e) { } catch (Throwable e) {
LoggerFactory.getLogger(ReportsServiceApplication.class).error("Report-service start failed: {} -> {}", e.getClass().getSimpleName(), ExceptionUtils.getStackTrace(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 ReportsServiceSettings settings;
protected ImdgProvider imdg; protected ImdgProvider imdg;
protected List<ReportWithPeriodCollector> allReports; // Spring services protected List<ReportWithPeriodCollector> allPeriodReports; // Spring services
private final Map<ReportId, ReportWithPeriodCollector> collectorForReportById; protected List<SimpleReportCollector> allSimpleReports;
private final Map<ReportId, AbstractReportCollector> collectorForReportById;
@Autowired @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.imdg = imdg;
this.settings = settings; 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<>(); this.collectorForReportById = new HashMap<>();
for (ReportWithPeriodCollector<?> collector : allReports) { for (ReportWithPeriodCollector<?> collector : allPeriodReports) {
ReportId rId = collector.getReportId(); ReportId rId = collector.getReportId();
collectorForReportById.put(rId, collector); collectorForReportById.put(rId, collector);
String idStr = rId == null ? null : rId.getKey(); 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 @Override
@ -57,18 +68,27 @@ public class ReportsServiceCommand implements InitializingBean {
} }
public void generateReportAll(LocalDate startDate, LocalDate endDate) throws IOException { public void generateReportAll(LocalDate startDate, LocalDate endDate) throws IOException {
for (ReportWithPeriodCollector<?> reportDataCollector : allReports) { for (ReportWithPeriodCollector<?> reportDataCollector : allPeriodReports) {
makeSingleReport(reportDataCollector, startDate, endDate); makeSingleReport(reportDataCollector, startDate, endDate);
} }
for (SimpleReportCollector<?> reportDataCollector : allSimpleReports) {
makeSingleReport(reportDataCollector);
}
} }
public void generateReportById(String reportIdStr, LocalDate startDate, LocalDate endDate) throws IOException { public void generateReportById(String reportIdStr, LocalDate startDate, LocalDate endDate) throws IOException {
ReportId reportId = parseReportId(reportIdStr); ReportId reportId = parseReportId(reportIdStr);
ReportWithPeriodCollector<?> reportDataCollector = collectorForReportById.get(reportId); AbstractReportCollector<?> reportDataCollector = collectorForReportById.get(reportId);
if (reportDataCollector == null) if (reportDataCollector == null)
throw new IllegalStateException("Collector for ReportID " + reportId + " not implemented yet"); 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()); File outPath = new File(settings.getReportModuleOut());
XMLReportBuilder reportBuilder = new XMLReportBuilder(reportDataCollector.getReportClass(), outPath); XMLReportBuilder reportBuilder = new XMLReportBuilder(reportDataCollector.getReportClass(), outPath);
AbstractReport report = reportDataCollector.collectReportWithPeriod(startDate, endDate); AbstractReport report = reportDataCollector.collectReportWithPeriod(startDate, endDate);
File reportFile = null; File reportFile = reportBuilder.createReport(report);
reportFile = reportBuilder.createReport(report);
if (reportFile != null) { if (reportFile != null) {
log.debug("New report file done: \"{}\"", reportFile); 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 { public void writeAllXML() throws IOException {
log.info("Report types: {}", allReports); log.info("Report types with data range: {}", allPeriodReports);
for (ReportWithPeriodCollector collector : allReports) { for (ReportWithPeriodCollector collector : allPeriodReports) {
log.info("Make report {}", collector); log.info("Make report {}", collector);
LocalDate date2 = LocalDate.now(); LocalDate date2 = LocalDate.now();
LocalDate date1 = LocalDate.of(date2.getYear(), date2.getMonth(), 1);//date2.minusMonths(1); LocalDate date1 = LocalDate.of(date2.getYear(), date2.getMonth(), 1);//date2.minusMonths(1);
makeSingleReport(collector, date1, date2); 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() { public void writeAllDocx() {