reports-service запускалки... Ещё доделать осталось.
This commit is contained in:
parent
9e9229588c
commit
fa5d6fbcc6
8 changed files with 120 additions and 7 deletions
|
|
@ -12,6 +12,7 @@ import ru.spcex.clearing.reports.services.ReportsService;
|
|||
import ru.spcex.clearing.reports.services.builders.XMLReportBuilder;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
|
||||
import java.io.File;
|
||||
import java.time.LocalDate;
|
||||
import java.util.Map;
|
||||
|
||||
|
|
@ -32,7 +33,8 @@ public class ReportsServiceApplication {
|
|||
log.info("Report types: {}", allReports);
|
||||
for (ReportDataCollector collector : allReports.values()) {
|
||||
log.info("Make report {}", collector);
|
||||
XMLReportBuilder xmlReportBuilder = new XMLReportBuilder(collector.getReportClass());
|
||||
File outPath=new File(".");
|
||||
XMLReportBuilder xmlReportBuilder = new XMLReportBuilder(collector.getReportClass(), outPath);
|
||||
LocalDate date2 = LocalDate.now();
|
||||
LocalDate date1 = LocalDate.of(date2.getYear(), date2.getMonth(), 1);//date2.minusMonths(1);
|
||||
AbstractReport report = collector.collectReportWithPeriod(date1, date2);
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ public class ReportsServiceSettings {
|
|||
private HazelcastClientParams hazelcast;
|
||||
private KafkaConsumerSettings kafkaConsumer;
|
||||
private KafkaProducerSettings kafkaProducer;
|
||||
private String reportModuleOut;
|
||||
|
||||
public HazelcastClientParams getHazelcast() {
|
||||
return hazelcast;
|
||||
|
|
@ -43,4 +44,12 @@ public class ReportsServiceSettings {
|
|||
public void setKafkaProducer(KafkaProducerSettings kafkaProducer) {
|
||||
this.kafkaProducer = kafkaProducer;
|
||||
}
|
||||
|
||||
public String getReportModuleOut() {
|
||||
return reportModuleOut;
|
||||
}
|
||||
|
||||
public void setReportModuleOut(String reportModuleOut) {
|
||||
this.reportModuleOut = reportModuleOut;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -41,4 +41,7 @@ public abstract class AbstractReport {
|
|||
|
||||
abstract public String getReportName(LocalDateTime reportDateTime);
|
||||
|
||||
public ReportId getReportId() {
|
||||
return reportId;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,11 +7,13 @@ import org.springframework.beans.factory.InitializingBean;
|
|||
import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportWithPeriodRequest;
|
||||
import ru.spcex.clearing.platform.messaging.service.QueueConsumer;
|
||||
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.services.builders.XMLReportBuilder;
|
||||
import ru.spcex.platform.enumeration.Task;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
import ru.spcex.platform.utils.log.ExceptionUtils;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
|
@ -24,13 +26,22 @@ public class QCommandExecutor extends QueueConsumer implements InitializingBean
|
|||
private final Logger log = LoggerFactory.getLogger(getClass());
|
||||
private final Map<ReportId, ReportDataCollector> collectorForReport = new HashMap<>();
|
||||
|
||||
// private final ImdgId idGenerator;
|
||||
// private final ImdgId idGenerator;
|
||||
// private final KafkaSender kafkaReqProducer;
|
||||
|
||||
ReportsServiceCommand reportsServiceCommand;
|
||||
ReportsServiceSettings config;
|
||||
|
||||
public QCommandExecutor(Consumer<String, Object> kafkaQueue, ImdgProvider imdgProvider,
|
||||
List<ReportDataCollector> listOfCollectors) {
|
||||
List<ReportDataCollector> listOfCollectors,
|
||||
ReportsServiceCommand reportsServiceCommand,
|
||||
ReportsServiceSettings config) {
|
||||
super(kafkaQueue);
|
||||
for (ReportDataCollector<?> collector : listOfCollectors) {
|
||||
ReportId rId = collector.getReportId();
|
||||
collectorForReport.put(rId, collector);
|
||||
}
|
||||
this.reportsServiceCommand = reportsServiceCommand;
|
||||
this.config = config;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -59,12 +70,14 @@ public class QCommandExecutor extends QueueConsumer implements InitializingBean
|
|||
LocalDate endDate = request.getEndDate();
|
||||
if (startDate.isAfter(endDate)) throw new IllegalStateException("StartDate > EndDate");
|
||||
|
||||
XMLReportBuilder reportBuilder = new XMLReportBuilder(reportDataCollector.getReportClass());
|
||||
File outPath = new File(config.getReportModuleOut());
|
||||
XMLReportBuilder reportBuilder = new XMLReportBuilder(reportDataCollector.getReportClass(), outPath);
|
||||
AbstractReport report = reportDataCollector.collectReportWithPeriod(startDate, endDate);
|
||||
File reportFile = null;
|
||||
try {
|
||||
reportFile = reportBuilder.createReport(report);
|
||||
} catch (IOException e) {
|
||||
log.error("Error create report {}: {}", request.getReportId(), ExceptionUtils.getStackTrace(e));
|
||||
}
|
||||
|
||||
if (reportFile != null) {
|
||||
|
|
|
|||
|
|
@ -3,8 +3,11 @@ package ru.spcex.clearing.reports.services;
|
|||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import ru.spcex.clearing.reports.reports.AbstractReport;
|
||||
import ru.spcex.clearing.reports.reports.ReportId;
|
||||
import ru.spcex.platform.utils.time.TimeUtil;
|
||||
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.time.Instant;
|
||||
|
|
@ -37,6 +40,25 @@ public abstract class ReportDataCollector<T extends AbstractReport> {
|
|||
|
||||
abstract public Class<T> getReportClass();
|
||||
|
||||
public ReportId getReportId() {
|
||||
Class<T> theClass = getReportClass();
|
||||
Constructor[] constructors = theClass.getConstructors(); // getConstructors - public, getDeclaredConstructors - all
|
||||
Constructor<T> useConstructor = null;
|
||||
for (int i = 0; i < constructors.length; i++) {
|
||||
if (useConstructor == null || useConstructor.getParameterCount() > constructors[i].getParameterCount()) {
|
||||
useConstructor = constructors[i];
|
||||
}
|
||||
}
|
||||
Object[] cArg = new Object[useConstructor.getParameterCount()]; // all null
|
||||
try {
|
||||
T object = useConstructor.newInstance(cArg);
|
||||
ReportId theId = object.getReportId();
|
||||
return theId;
|
||||
} catch (InstantiationException | IllegalAccessException | InvocationTargetException e) {
|
||||
throw new RuntimeException("Can not found ReportId from class " + theClass.getName(), e);
|
||||
}
|
||||
}
|
||||
|
||||
protected void validateDateRange(LocalDate startDate, LocalDate endDate) throws IllegalArgumentException {
|
||||
if (startDate.isAfter(endDate)) {
|
||||
throw new IllegalArgumentException("startDate(" + startDate + ") > endDate(" + endDate + ")");
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ import ru.spcex.clearing.reports.reports.bt_17_5.*;
|
|||
import java.time.LocalDate;
|
||||
import java.time.LocalTime;
|
||||
|
||||
@Deprecated
|
||||
public class ReportsService {
|
||||
private final Logger log = LoggerFactory.getLogger(getClass());
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,61 @@
|
|||
package ru.spcex.clearing.reports.services;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import ru.spcex.clearing.reports.config.element.ReportsServiceSettings;
|
||||
import ru.spcex.clearing.reports.reports.AbstractReport;
|
||||
import ru.spcex.clearing.reports.services.builders.XMLReportBuilder;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.time.LocalDate;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Исполняет создание отчётов.
|
||||
* @see QCommandExecutor
|
||||
*/
|
||||
@Service
|
||||
public class ReportsServiceCommand implements InitializingBean {
|
||||
private final Logger log = LoggerFactory.getLogger(getClass());
|
||||
|
||||
protected ReportsServiceSettings settings;
|
||||
protected ImdgProvider imdg;
|
||||
protected Map<String, ReportDataCollector> allReports;
|
||||
|
||||
@Autowired
|
||||
public ReportsServiceCommand(ImdgProvider imdg, Map<String, ReportDataCollector> allReports, ReportsServiceSettings settings) {
|
||||
this.imdg = imdg;
|
||||
this.allReports = allReports; // allReports = context.getBeansOfType(ReportDataCollector.class);
|
||||
this.settings = settings;
|
||||
}
|
||||
|
||||
public void writeAllXML() throws IOException {
|
||||
log.info("Report types: {}", allReports);
|
||||
for (ReportDataCollector collector : allReports.values()) {
|
||||
log.info("Make report {}", collector);
|
||||
File outPath = new File(settings.getReportModuleOut());
|
||||
XMLReportBuilder xmlReportBuilder = new XMLReportBuilder(collector.getReportClass(), outPath);
|
||||
LocalDate date2 = LocalDate.now();
|
||||
LocalDate date1 = LocalDate.of(date2.getYear(), date2.getMonth(), 1);//date2.minusMonths(1);
|
||||
AbstractReport report = collector.collectReportWithPeriod(date1, date2);
|
||||
xmlReportBuilder.createReport(report);
|
||||
}
|
||||
log.info("Shutdown application after work");
|
||||
}
|
||||
|
||||
public void writeAllDocx() {
|
||||
log.info("TODO write docx"); // todo write docx
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterPropertiesSet() {
|
||||
log.info("Wait IMDG...");
|
||||
imdg.waitAvailable();
|
||||
log.info("Report generator ready. Available reports: {}", allReports.keySet());
|
||||
}
|
||||
}
|
||||
|
|
@ -15,11 +15,13 @@ import java.time.LocalDateTime;
|
|||
public class XMLReportBuilder extends FileReportBuilder {
|
||||
private final Logger log = LoggerFactory.getLogger(getClass());
|
||||
protected final XStream xStream;
|
||||
protected final File outFolder;
|
||||
|
||||
public XMLReportBuilder(Class<? extends AbstractReport> reportClass) {
|
||||
public XMLReportBuilder(Class<? extends AbstractReport> reportClass, File outFolder) {
|
||||
super(reportClass);
|
||||
this.xStream = new XStream(new XppDriver(new NoNameCoder()));
|
||||
xStream.processAnnotations(reportClass);
|
||||
this.outFolder = outFolder;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -27,7 +29,7 @@ public class XMLReportBuilder extends FileReportBuilder {
|
|||
String reportName = report.getReportName(LocalDateTime.now());
|
||||
String reportFileName = makeFileName(reportName, ".xml");
|
||||
|
||||
File reportFile = new File(reportFileName);
|
||||
File reportFile = new File(outFolder, reportFileName);
|
||||
if (reportFile.exists()) {
|
||||
if (reportFile.isFile()) {
|
||||
log.warn("Файл {} существует и будет перезаписан", reportFileName);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue