diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/ReportBuildersConfig.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/ReportBuildersConfig.java new file mode 100644 index 000000000..baa895609 --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/ReportBuildersConfig.java @@ -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> reportBuildersWithoutParams(ImdgProvider imdgProvider) { + Map> 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> reportBuildersWithSessionIdParam(ImdgProvider imdgProvider) { + Map> 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> reportBuildersWithSessionIdListParams(ImdgProvider imdgProvider) { + Map> resultMap = new HashMap<>(); + resultMap.put(ReportType.PERIOD_LIABILITIES_CLAIMS, new PeriodLiabilitiesClaimsReportBuilder(imdgProvider)); + return resultMap; + } + + @Bean("reportBuildersWithPeriodParams") + public Map> reportBuildersWithPeriodParams(ImdgProvider imdgProvider) { + Map> resultMap = new HashMap<>(); + resultMap.put(ReportType.PERIOD_MONEY_CHANGE, new PeriodMoneyChangeReportBuilder(imdgProvider)); + return resultMap; + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportService.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportService.java index 6e1911e25..4fd644a5d 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportService.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportService.java @@ -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 reportRequestWithSessionIdValidator; private final Function reportRequestWithSessionIdListValidator; private final Function reportRequestWithPeriodValidator; + private final Map> reportBuildersWithoutParams; + private final Map> reportBuildersWithSessionIdParam; + private final Map> reportBuildersWithSessionIdListParam; + private final Map> reportBuildersWithPeriodParams; + + private final File outFolder; public ReportService(Consumer kafkaQueue, Producer kafkaResponseQueue, @@ -38,14 +53,23 @@ public class ReportService extends QueueConsumer implements InitializingBean { IMessageResolver messageResolver, UserRoleVerification userRoleVerification, ValidationHelper validationHelper, + ReportsServiceSettings reportsServiceSettings, + @Qualifier("reportBuildersWithoutParams") + Map> reportBuildersWithoutParams, + @Qualifier("reportBuildersWithSessionIdParam") + Map> reportBuildersWithSessionIdParam, + @Qualifier("reportBuildersWithSessionIdListParam") + Map> reportBuildersWithSessionIdListParam, + @Qualifier("reportBuildersWithPeriodParams") + Map> reportBuildersWithPeriodParams, @Qualifier("reportRequestValidator") Function reportRequestValidator, @Qualifier("reportRequestWithSessionIdValidator") Function reportRequestWithSessionIdValidator, - @Qualifier("reportRequestWithSessionIdListValidator") + @Qualifier("reportRequestWithSessionIdListValidator") Function reportRequestWithSessionIdListValidator, @Qualifier("reportRequestWithPeriodValidator") - Function ReportRequestWithPeriodValidator) { + Function 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 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 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 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 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 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 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 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 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; } diff --git a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/ReportType.java b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/ReportType.java index 349687408..411efd74a 100644 --- a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/ReportType.java +++ b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/ReportType.java @@ -27,4 +27,5 @@ public enum ReportType implements IEnumKey { public String getKey() { return key; } + }