report create methods

This commit is contained in:
akulikov 2023-05-15 18:33:18 +03:00
parent c76aee2428
commit 47fbbabb1b
3 changed files with 127 additions and 3 deletions

View file

@ -0,0 +1,46 @@
package ru.spcex.clearing.reports.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import ru.spcex.clearing.reports.reports.*;
import ru.spcex.clearing.reports.reports.bp.*;
import ru.spcex.platform.enumeration.ReportType;
import ru.spcex.platform.imdg.api.ImdgProvider;
import java.util.HashMap;
import java.util.Map;
@Configuration
public class ReportBuildersConfig {
@Bean("reportBuildersWithoutParams")
public Map<ReportType, CSVReportBuilder<EmptyParams>> reportBuildersWithoutParams(ImdgProvider imdgProvider) {
Map<ReportType, CSVReportBuilder<EmptyParams>> resultMap = new HashMap<>();
resultMap.put(ReportType.SUMMARY_LIABILITIES_CLAIMS, new SummaryLiabilitiesClaimsReportBuilder(imdgProvider));
resultMap.put(ReportType.SUMMARY_MONEY_CHANGE, new SummaryMoneyChangeReportBuilder(imdgProvider));
return resultMap;
}
@Bean("reportBuildersWithSessionIdParam")
public Map<ReportType, CSVReportBuilder<SessionIdParam>> reportBuildersWithSessionIdParam(ImdgProvider imdgProvider) {
Map<ReportType, CSVReportBuilder<SessionIdParam>> resultMap = new HashMap<>();
resultMap.put(ReportType.OPERATIONAL_LIABILITIES_CLAIMS, new OperationalLiabilitiesClaimsReportBuilder(imdgProvider));
resultMap.put(ReportType.OPERATIONAL_MONEY_CHANGE, new OperationalMoneyChangeReportBuilder(imdgProvider));
resultMap.put(ReportType.EXECUTED_DEAL_REPORT, new ExecutedDealReportBuilder(imdgProvider));
resultMap.put(ReportType.UNFULFILLED_DEAL_REPORT, new UnfulfilledDealReportBuilder(imdgProvider));
return resultMap;
}
@Bean("reportBuildersWithSessionIdListParam")
public Map<ReportType, CSVReportBuilder<SessionIdListParams>> reportBuildersWithSessionIdListParams(ImdgProvider imdgProvider) {
Map<ReportType, CSVReportBuilder<SessionIdListParams>> resultMap = new HashMap<>();
resultMap.put(ReportType.PERIOD_LIABILITIES_CLAIMS, new PeriodLiabilitiesClaimsReportBuilder(imdgProvider));
return resultMap;
}
@Bean("reportBuildersWithPeriodParams")
public Map<ReportType, CSVReportBuilder<PeriodParams>> reportBuildersWithPeriodParams(ImdgProvider imdgProvider) {
Map<ReportType, CSVReportBuilder<PeriodParams>> resultMap = new HashMap<>();
resultMap.put(ReportType.PERIOD_MONEY_CHANGE, new PeriodMoneyChangeReportBuilder(imdgProvider));
return resultMap;
}
}

View file

@ -2,6 +2,8 @@ package ru.spcex.clearing.reports.services;
import org.apache.kafka.clients.consumer.Consumer;
import org.apache.kafka.clients.producer.Producer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
@ -13,16 +15,23 @@ import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequestWith
import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequestWithSessionIdList;
import ru.spcex.clearing.platform.messaging.service.QueueConsumer;
import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate;
import ru.spcex.clearing.reports.config.element.ReportsServiceSettings;
import ru.spcex.clearing.reports.reports.*;
import ru.spcex.clearing.util.security.UserRoleVerification;
import ru.spcex.clearing.validation.common.ValidationHelper;
import ru.spcex.platform.enumeration.ReportType;
import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.utils.enumeration.IEnumKey;
import ru.spcex.platform.utils.enumeration.IMessageResolver;
import ru.spcex.platform.utils.validation.IValidator;
import java.io.File;
import java.util.Map;
import java.util.function.Function;
@Service
public class ReportService extends QueueConsumer implements InitializingBean {
private final Logger log = LoggerFactory.getLogger(getClass());
private final ImdgProvider imdgProvider;
private final IMessageResolver messageResolver;
private final UserRoleVerification userRoleVerification;
@ -31,6 +40,12 @@ public class ReportService extends QueueConsumer implements InitializingBean {
private final Function<ReportRequestWithSessionId, IValidator> reportRequestWithSessionIdValidator;
private final Function<ReportRequestWithSessionIdList, IValidator> reportRequestWithSessionIdListValidator;
private final Function<ReportRequestWithPeriod, IValidator> reportRequestWithPeriodValidator;
private final Map<ReportType, CSVReportBuilder<EmptyParams>> reportBuildersWithoutParams;
private final Map<ReportType, CSVReportBuilder<SessionIdParam>> reportBuildersWithSessionIdParam;
private final Map<ReportType, CSVReportBuilder<SessionIdListParams>> reportBuildersWithSessionIdListParam;
private final Map<ReportType, CSVReportBuilder<PeriodParams>> reportBuildersWithPeriodParams;
private final File outFolder;
public ReportService(Consumer<String, Object> kafkaQueue,
Producer<String, Object> kafkaResponseQueue,
@ -38,14 +53,23 @@ public class ReportService extends QueueConsumer implements InitializingBean {
IMessageResolver messageResolver,
UserRoleVerification userRoleVerification,
ValidationHelper validationHelper,
ReportsServiceSettings reportsServiceSettings,
@Qualifier("reportBuildersWithoutParams")
Map<ReportType, CSVReportBuilder<EmptyParams>> reportBuildersWithoutParams,
@Qualifier("reportBuildersWithSessionIdParam")
Map<ReportType, CSVReportBuilder<SessionIdParam>> reportBuildersWithSessionIdParam,
@Qualifier("reportBuildersWithSessionIdListParam")
Map<ReportType, CSVReportBuilder<SessionIdListParams>> reportBuildersWithSessionIdListParam,
@Qualifier("reportBuildersWithPeriodParams")
Map<ReportType, CSVReportBuilder<PeriodParams>> reportBuildersWithPeriodParams,
@Qualifier("reportRequestValidator")
Function<ReportRequest, IValidator> reportRequestValidator,
@Qualifier("reportRequestWithSessionIdValidator")
Function<ReportRequestWithSessionId, IValidator> reportRequestWithSessionIdValidator,
@Qualifier("reportRequestWithSessionIdListValidator")
@Qualifier("reportRequestWithSessionIdListValidator")
Function<ReportRequestWithSessionIdList, IValidator> reportRequestWithSessionIdListValidator,
@Qualifier("reportRequestWithPeriodValidator")
Function<ReportRequestWithPeriod, IValidator> ReportRequestWithPeriodValidator) {
Function<ReportRequestWithPeriod, IValidator> reportRequestWithPeriodValidator) {
super(kafkaQueue, kafkaResponseQueue);
this.imdgProvider = imdgProvider;
this.messageResolver = messageResolver;
@ -54,7 +78,13 @@ public class ReportService extends QueueConsumer implements InitializingBean {
this.reportRequestValidator = reportRequestValidator;
this.reportRequestWithSessionIdValidator = reportRequestWithSessionIdValidator;
this.reportRequestWithSessionIdListValidator = reportRequestWithSessionIdListValidator;
reportRequestWithPeriodValidator = ReportRequestWithPeriodValidator;
this.reportRequestWithPeriodValidator = reportRequestWithPeriodValidator;
this.reportBuildersWithoutParams = reportBuildersWithoutParams;
this.reportBuildersWithSessionIdParam = reportBuildersWithSessionIdParam;
this.reportBuildersWithSessionIdListParam = reportBuildersWithSessionIdListParam;
this.reportBuildersWithPeriodParams = reportBuildersWithPeriodParams;
this.outFolder = new File(reportsServiceSettings.getReportModuleOut());
assert outFolder.isDirectory();
}
@Override
@ -74,42 +104,89 @@ public class ReportService extends QueueConsumer implements InitializingBean {
}
public RequestInfoUpdate createReport(BaseRequest<ReportRequest> userRequest) {
log.debug("ReportRequest received");
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest);
if (requestInfoUpdate != null) return null;
requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestValidator);
if (requestInfoUpdate != null) return null;
ReportRequest req = userRequest.getRequestPayload();
log.debug("Create report type {}...", req.getReportId());
CSVReportBuilder<EmptyParams> builder = reportBuildersWithoutParams.get(
IEnumKey.getEnumByKey(ReportType.class, req.getReportId())
);
File outFile = builder.createReport(new EmptyParams(), outFolder);
log.debug("Report {} successfully created. Output file: {}", req.getReportId(), outFile.getAbsolutePath());
return null;
}
public RequestInfoUpdate createReportForSessionId(BaseRequest<ReportRequestWithSessionId> userRequest) {
log.debug("ReportRequestWithSessionId received");
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest);
if (requestInfoUpdate != null) return null;
requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestWithSessionIdValidator);
if (requestInfoUpdate != null) return null;
ReportRequestWithSessionId req = userRequest.getRequestPayload();
log.debug("Create report type {}...", req.getReportId());
CSVReportBuilder<SessionIdParam> builder = reportBuildersWithSessionIdParam.get(
IEnumKey.getEnumByKey(ReportType.class, req.getReportId())
);
SessionIdParam sessionIdParam = new SessionIdParam();
sessionIdParam.setSessionId(req.getSessionId());
File outFile = builder.createReport(sessionIdParam, outFolder);
log.debug("Report {} successfully created. Output file: {}", req.getReportId(), outFile.getAbsolutePath());
return null;
}
public RequestInfoUpdate createReportForSessionIdList(BaseRequest<ReportRequestWithSessionIdList> userRequest) {
log.debug("ReportRequestWithSessionIdList received");
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest);
if (requestInfoUpdate != null) return null;
requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestWithSessionIdListValidator);
if (requestInfoUpdate != null) return null;
ReportRequestWithSessionIdList req = userRequest.getRequestPayload();
log.debug("Create report type {}...", req.getReportId());
CSVReportBuilder<SessionIdListParams> builder = reportBuildersWithSessionIdListParam.get(
IEnumKey.getEnumByKey(ReportType.class, req.getReportId())
);
SessionIdListParams sessionIdListParams = new SessionIdListParams();
sessionIdListParams.setSessionIdList(req.getSessionIdList());
File outFile = builder.createReport(sessionIdListParams, outFolder);
log.debug("Report {} successfully created. Output file: {}", req.getReportId(), outFile.getAbsolutePath());
return null;
}
public RequestInfoUpdate createReportForPeriod(BaseRequest<ReportRequestWithPeriod> userRequest) {
log.debug("ReportRequestWithPeriod received");
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest);
if (requestInfoUpdate != null) return null;
requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestWithPeriodValidator);
if (requestInfoUpdate != null) return null;
ReportRequestWithPeriod req = userRequest.getRequestPayload();
log.debug("Create report type {}...", req.getReportId());
CSVReportBuilder<PeriodParams> builder = reportBuildersWithPeriodParams.get(
IEnumKey.getEnumByKey(ReportType.class, req.getReportId())
);
PeriodParams periodParams = new PeriodParams();
periodParams.setStartDate(req.getStartDate());
periodParams.setEndDate(req.getEndDate());
File outFile = builder.createReport(periodParams, outFolder);
log.debug("Report {} successfully created. Output file: {}", req.getReportId(), outFile.getAbsolutePath());
return null;
}

View file

@ -27,4 +27,5 @@ public enum ReportType implements IEnumKey {
public String getKey() {
return key;
}
}