This commit is contained in:
akulikov 2024-08-22 19:07:18 +03:00
parent 3f57080c16
commit 05b19f488a
2 changed files with 126 additions and 103 deletions

View file

@ -248,7 +248,7 @@ public class DBProvider implements ImdgProvider {
this.fieldsMatcherForTable.put(RegistryCodeDictionary.class, registryCodeDictionaryMatcher);
Map<String, String> clearingMemberCategoryMatcher = new HashMap<>();
clearingMemberCategoryMatcher.put("company_id", "company_id");
clearingMemberCategoryMatcher.put("companyId", "company_id");
clearingMemberCategoryMatcher.put("clearingMemberCategory", "clearing_member_category");
clearingMemberCategoryMatcher.put("id", "id");
this.fieldsMatcherForTable.put(ClearingMemberCategory.class, clearingMemberCategoryMatcher);
@ -300,7 +300,7 @@ public class DBProvider implements ImdgProvider {
executionCurrencyMatcher.put("settlementAmount", "settlement_amount");
executionCurrencyMatcher.put("quantity", "quantity");
executionCurrencyMatcher.put("side", "side");
executionCurrencyMatcher.put("currencyCode", "_currency_code");
executionCurrencyMatcher.put("currencyCode", "currency_code");
executionCurrencyMatcher.put("settlementOrganization", "settlement_organization");
executionCurrencyMatcher.put("coverageStatus", "coverage_status");
executionCurrencyMatcher.put("sessionId", "session_id");

View file

@ -1,5 +1,13 @@
package ru.spcex.clearing.reports.services;
import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
import org.apache.kafka.clients.consumer.Consumer;
import org.apache.kafka.clients.producer.Producer;
import org.slf4j.Logger;
@ -35,11 +43,6 @@ import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.utils.enumeration.IEnumKey;
import ru.spcex.platform.utils.validation.IValidator;
import java.io.File;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
@Service
public class ReportService extends QueueConsumer implements InitializingBean {
private final Logger log = LoggerFactory.getLogger(getClass());
@ -146,147 +149,167 @@ public class ReportService extends QueueConsumer implements InitializingBean {
public RequestInfoUpdate createReport(BaseRequest<ReportRequest> userRequest) {
log.debug("ReportRequest received");
RequestInfoUpdate requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestValidator);
if (requestInfoUpdate != null) return null;
try {
RequestInfoUpdate requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestValidator);
if (requestInfoUpdate != null) return null;
ReportRequest req = userRequest.getRequestPayload();
ReportRequest req = userRequest.getRequestPayload();
logUnknownProperties(userRequest);
logUnknownProperties(userRequest);
log.debug("Create report type {}...", req.getReportId());
log.debug("Create report type {}...", req.getReportId());
List<CSVReportBuilder<EmptyParams, ?>> builders = reportBuildersWithoutParams.get(
List<CSVReportBuilder<EmptyParams, ?>> builders = reportBuildersWithoutParams.get(
IEnumKey.getEnumByKey(ReportBuilderType.class, req.getReportId())
);
List<String> outFilenames = new ArrayList<>();
List<File> outFiles = new ArrayList<>();
for (CSVReportBuilder<EmptyParams, ?> builder : builders) {
File outFile = builder.createReport(new EmptyParams(), outFolder);
if (outFile == null) continue;
outFilenames.add(outFile.getAbsolutePath());
outFiles.add(outFile);
}
);
List<String> outFilenames = new ArrayList<>();
List<File> outFiles = new ArrayList<>();
for (CSVReportBuilder<EmptyParams, ?> builder : builders) {
File outFile = builder.createReport(new EmptyParams(), outFolder);
if (outFile == null) continue;
outFilenames.add(outFile.getAbsolutePath());
outFiles.add(outFile);
}
int outFilesCnt = outFilenames.size();
if (outFilesCnt == 0) {
log.error("Create report {} failed, see log", req.getReportId());
} else if (outFilesCnt < builders.size()) {
log.error("Create some error for {} failed, see log", req.getReportId());
} else {
log.debug("Reports {} successfully created. Output files: {}", req.getReportId(), String.join(", ", outFilenames));
}
int outFilesCnt = outFilenames.size();
if (outFilesCnt == 0) {
log.error("Create report {} failed, see log", req.getReportId());
} else if (outFilesCnt < builders.size()) {
log.error("Create some error for {} failed, see log", req.getReportId());
} else {
log.debug("Reports {} successfully created. Output files: {}", req.getReportId(), String.join(", ", outFilenames));
}
sendFilesToSftp(outFiles);
sendFilesToSftp(outFiles);
} catch (Exception e) {
log.error("Unexpected exception", e);
}
return null;
}
public RequestInfoUpdate createReportForSessionId(BaseRequest<ReportRequestWithSessionId> userRequest) {
log.debug("ReportRequestWithSessionId received");
RequestInfoUpdate requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestWithSessionIdValidator);
if (requestInfoUpdate != null) return null;
try {
RequestInfoUpdate requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestWithSessionIdValidator);
if (requestInfoUpdate != null) return null;
ReportRequestWithSessionId req = userRequest.getRequestPayload();
ReportRequestWithSessionId req = userRequest.getRequestPayload();
logUnknownProperties(userRequest);
logUnknownProperties(userRequest);
log.debug("Create report type {}...", req.getReportId());
log.debug("Create report type {}...", req.getReportId());
List<CSVReportBuilder<SessionIdParam, ?>> builders = reportBuildersWithSessionIdParam.get(
List<CSVReportBuilder<SessionIdParam, ?>> builders = reportBuildersWithSessionIdParam.get(
IEnumKey.getEnumByKey(ReportBuilderType.class, req.getReportId())
);
List<String> outFilenames = new ArrayList<>();
List<File> outFiles = new ArrayList<>();
for (CSVReportBuilder<SessionIdParam, ?> builder : builders) {
SessionIdParam sessionIdParam = new SessionIdParam();
sessionIdParam.setSessionId(List.of(req.getSessionId()));
File outFile = builder.createReport(sessionIdParam, outFolder);
if (outFile == null) continue;
outFilenames.add(outFile.getAbsolutePath());
}
);
List<String> outFilenames = new ArrayList<>();
List<File> outFiles = new ArrayList<>();
for (CSVReportBuilder<SessionIdParam, ?> builder : builders) {
SessionIdParam sessionIdParam = new SessionIdParam();
sessionIdParam.setSessionId(List.of(req.getSessionId()));
File outFile = builder.createReport(sessionIdParam, outFolder);
if (outFile == null) continue;
outFilenames.add(outFile.getAbsolutePath());
}
int outFilesCnt = outFilenames.size();
if (outFilesCnt == 0) {
log.error("Create report {} failed, see log", req.getReportId());
} else if (outFilesCnt < builders.size()) {
log.error("Create some error for {} failed, see log", req.getReportId());
} else {
log.debug("Reports {} successfully created. Output files: {}", req.getReportId(), String.join(", ", outFilenames));
}
int outFilesCnt = outFilenames.size();
if (outFilesCnt == 0) {
log.error("Create report {} failed, see log", req.getReportId());
} else if (outFilesCnt < builders.size()) {
log.error("Create some error for {} failed, see log", req.getReportId());
} else {
log.debug("Reports {} successfully created. Output files: {}", req.getReportId(), String.join(", ", outFilenames));
}
sendFilesToSftp(outFiles);
sendFilesToSftp(outFiles);
} catch (Exception e) {
log.error("Unexpected exception", e);
}
return null;
}
public RequestInfoUpdate createReportForGREP(BaseRequest<LauncherCommandRequest> userRequest) {
log.debug("GREP task received");
RequestInfoUpdate requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestGREPValidator);
if (requestInfoUpdate != null) return null;
logUnknownProperties(userRequest);
try {
RequestInfoUpdate requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestGREPValidator);
if (requestInfoUpdate != null) return null;
logUnknownProperties(userRequest);
List<Long> sessionIds = null;
if (userRequest.getRequestPayload().getSessionId() != null) {
sessionIds = List.of(userRequest.getRequestPayload().getSessionId());
List<Long> sessionIds = null;
if (userRequest.getRequestPayload().getSessionId() != null) {
sessionIds = List.of(userRequest.getRequestPayload().getSessionId());
}
Map<File, ReportInfo> outFiles = createReportsForTask(sessionIds, reportBuildersForGREP.values());
sendReportsToGateway(sessionIds, outFiles, ReportType.REPORT_KS_TMP.getKey());
sendFilesToSftp(outFiles.keySet());
} catch (Exception e) {
log.error("Unexpected exception", e);
}
Map<File, ReportInfo> outFiles = createReportsForTask(sessionIds, reportBuildersForGREP.values());
sendReportsToGateway(sessionIds, outFiles, ReportType.REPORT_KS_TMP.getKey());
sendFilesToSftp(outFiles.keySet());
return null;
}
public RequestInfoUpdate createReportForGRET(BaseRequest<LauncherCommandRequest> userRequest) {
log.debug("GRET task received");
RequestInfoUpdate requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestGRETValidator);
if (requestInfoUpdate != null) return null;
logUnknownProperties(userRequest);
try {
RequestInfoUpdate requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestGRETValidator);
if (requestInfoUpdate != null) return null;
logUnknownProperties(userRequest);
List<Long> sessionIds = null;
if (userRequest.getRequestPayload().getSessionId() != null) {
sessionIds = List.of(userRequest.getRequestPayload().getSessionId());
}
Map<File, ReportInfo> outFiles = createReportsForTask(sessionIds, reportBuildersForGRET.values());
Map<File, ReportInfo> outFilesWithReportType_PFX64 = new HashMap<>();
Map<File, ReportInfo> outFilesWithReportType_PFX65 = new HashMap<>();
for (Map.Entry<File, ReportInfo> entry : outFiles.entrySet()) {
File reportFile = entry.getKey();
ReportInfo reportInfo = entry.getValue();
ReportKeys reportKey = IEnumKey.getEnumByKey(ReportKeys.class, reportInfo.reportKey());
if (reportKey == ReportKeys.KS_BR_PFX65_DEALS) {
outFilesWithReportType_PFX65.put(reportFile, reportInfo);
} else if (
reportKey == ReportKeys.KS_BR_PFX64_INFTYPE_1 ||
reportKey == ReportKeys.KS_BR_PFX64_INFTYPE_2 ||
reportKey == ReportKeys.KS_BR_PFX64_INFTYPE_3 ||
reportKey == ReportKeys.KS_BR_PFX64_INFTYPE_4
) {
outFilesWithReportType_PFX64.put(reportFile, reportInfo);
List<Long> sessionIds = null;
if (userRequest.getRequestPayload().getSessionId() != null) {
sessionIds = List.of(userRequest.getRequestPayload().getSessionId());
}
Map<File, ReportInfo> outFiles = createReportsForTask(sessionIds, reportBuildersForGRET.values());
Map<File, ReportInfo> outFilesWithReportType_PFX64 = new HashMap<>();
Map<File, ReportInfo> outFilesWithReportType_PFX65 = new HashMap<>();
for (Map.Entry<File, ReportInfo> entry : outFiles.entrySet()) {
File reportFile = entry.getKey();
ReportInfo reportInfo = entry.getValue();
ReportKeys reportKey = IEnumKey.getEnumByKey(ReportKeys.class, reportInfo.reportKey());
if (reportKey == ReportKeys.KS_BR_PFX65_DEALS) {
outFilesWithReportType_PFX65.put(reportFile, reportInfo);
} else if (
reportKey == ReportKeys.KS_BR_PFX64_INFTYPE_1 ||
reportKey == ReportKeys.KS_BR_PFX64_INFTYPE_2 ||
reportKey == ReportKeys.KS_BR_PFX64_INFTYPE_3 ||
reportKey == ReportKeys.KS_BR_PFX64_INFTYPE_4
) {
outFilesWithReportType_PFX64.put(reportFile, reportInfo);
}
}
sendReportsToGateway(sessionIds, outFilesWithReportType_PFX64, ReportType.PFX64.getKey());
sendReportsToGateway(sessionIds, outFilesWithReportType_PFX65, ReportType.PFX65.getKey());
sendFilesToSftp(outFiles.keySet());
} catch (Exception e) {
log.error("Unexpected exception", e);
}
sendReportsToGateway(sessionIds, outFilesWithReportType_PFX64, ReportType.PFX64.getKey());
sendReportsToGateway(sessionIds, outFilesWithReportType_PFX65, ReportType.PFX65.getKey());
sendFilesToSftp(outFiles.keySet());
return null;
}
public RequestInfoUpdate createReportForGREF(BaseRequest<LauncherCommandRequest> userRequest) {
log.debug("GREF task received");
RequestInfoUpdate requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestGREFValidator);
if (requestInfoUpdate != null) return null;
logUnknownProperties(userRequest);
try {
RequestInfoUpdate requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestGREFValidator);
if (requestInfoUpdate != null) return null;
logUnknownProperties(userRequest);
List<Long> sessionIds = null;
if (userRequest.getRequestPayload().getSessionId() != null) {
sessionIds = List.of(userRequest.getRequestPayload().getSessionId());
List<Long> sessionIds = null;
if (userRequest.getRequestPayload().getSessionId() != null) {
sessionIds = List.of(userRequest.getRequestPayload().getSessionId());
}
Map<File, ReportInfo> outFiles = createReportsForTask(sessionIds, reportBuildersForGREF.values());
sendReportsToGateway(sessionIds, outFiles, ReportType.REPORT_KS_FINAL.getKey());
sendFilesToSftp(outFiles.keySet());
} catch (Exception e) {
log.error("Unexpected exception", e);
}
Map<File, ReportInfo> outFiles = createReportsForTask(sessionIds, reportBuildersForGREF.values());
sendReportsToGateway(sessionIds, outFiles, ReportType.REPORT_KS_FINAL.getKey());
sendFilesToSftp(outFiles.keySet());
return null;
}