From 0b2bef797e639d017a2b3a50d15c5ec2c62551b6 Mon Sep 17 00:00:00 2001 From: akulikov Date: Wed, 22 Nov 2023 14:22:35 +0300 Subject: [PATCH] http://jira.mfd.msk:8088/browse/CLS-596 --- .../reports/builders/CSVReportBuilder.java | 43 ++++++++++--------- .../ks/KSCommissionTradesReportBuilder.java | 9 ++-- .../ks/KSRepCashNettoReportBuilder.java | 38 +++++++++------- .../KSRepCashRegisterSumsReportBuilder.java | 2 +- .../ks/KSRepCashRegistersReportBuilder.java | 12 ++++-- .../ks/KSRepDepoNettoReportBuilder.java | 7 ++- ...epDepoRegisterQuantitiesReportBuilder.java | 6 +-- .../ks/KSRepDepoRegistersReportBuilder.java | 3 +- .../builders/ks/KSRepTradesReportBuilder.java | 7 ++- 9 files changed, 69 insertions(+), 58 deletions(-) diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/CSVReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/CSVReportBuilder.java index 6f07fde90..53a3b4243 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/CSVReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/CSVReportBuilder.java @@ -1,12 +1,13 @@ package ru.spcex.clearing.reports.builders; -import com.opencsv.CSVWriterBuilder; +import com.opencsv.CSVWriter; import com.opencsv.ICSVWriter; import com.opencsv.bean.*; import com.opencsv.exceptions.CsvBadConverterException; import com.opencsv.exceptions.CsvChainedException; import com.opencsv.exceptions.CsvFieldAssignmentException; import com.opencsv.exceptions.CsvRequiredFieldEmptyException; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ru.clearing.classes.statics.data.misc.Session; @@ -91,23 +92,6 @@ public abstract class CSVReportBuilder { */ protected abstract void collect(P params); - /** - * Создает CSVWriter. Если требуется изменить параметры выходного CSV файла, этот метод следует переопределить. - * - * @param file Файл отчета - * @return Созданный CSVWriter - *

- * todo check it - */ - protected ICSVWriter createCsvWriter(File file) throws IOException { - Writer writer = new FileWriter(file); - CSVWriterBuilder csvWriterBuilder = new CSVWriterBuilder(writer) - .withLineEnd("\n") - .withSeparator(',') - .withQuoteChar('\"'); - return csvWriterBuilder.build(); - } - public File createReport(P params, File outFolder) { assert outFolder != null && outFolder.isDirectory(); @@ -118,10 +102,11 @@ public abstract class CSVReportBuilder { assert rows != null; - try (Writer writer = new FileWriter(reportFile)) { + try (Writer writer = new FileWriter(reportFile); + ICSVWriter icsvWriter = new CustomCSVWriter(writer)) { CustomStrategy customStrategy = new CustomStrategy<>(); customStrategy.setType(getReportClass()); - StatefulBeanToCsv sbc = new StatefulBeanToCsvBuilder(writer) + StatefulBeanToCsv sbc = new StatefulBeanToCsvBuilder(icsvWriter) .withMappingStrategy(customStrategy) .withLineEnd("\n") .withSeparator(',') @@ -160,6 +145,24 @@ public abstract class CSVReportBuilder { return sessionIds.stream().toList(); } + static class CustomCSVWriter extends CSVWriter { + public CustomCSVWriter(Writer writer) { + super(writer); + } + + @Override + protected void writeNext(String[] nextLine, boolean applyQuotesToAll, Appendable appendable) throws IOException { + if (nextLine != null) { + for (int i = 0; i < nextLine.length; i++) { + if (StringUtils.isEmpty(nextLine[i])) { + nextLine[i] = null; + } + } + } + super.writeNext(nextLine, applyQuotesToAll, appendable); + } + } + static class CustomStrategy extends ColumnPositionMappingStrategy { public String[] generateHeader(T bean) throws CsvRequiredFieldEmptyException { super.generateHeader(bean); diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/ks/KSCommissionTradesReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/ks/KSCommissionTradesReportBuilder.java index cbb29529f..8d29bcf51 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/ks/KSCommissionTradesReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/ks/KSCommissionTradesReportBuilder.java @@ -16,7 +16,6 @@ import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder; import ru.spcex.platform.utils.enumeration.IEnumKey; -import java.math.BigDecimal; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.ArrayList; @@ -105,8 +104,8 @@ public class KSCommissionTradesReportBuilder extends CSVReportBuilder sessionTypeForValue = Set.of( SessionType.IPOT, SessionType.TRDT, @@ -198,12 +196,12 @@ public class KSRepCashNettoReportBuilder extends CSVReportBuilder groupedRegistry = entry.getValue(); try { if (groupedRegistry.isEmpty()) { - log.warn("Empty LS_T and CS_T registries for {}. Registries with id = [{}] was skipped", - pairRegistryId, - groupedRegistry.stream().map(r -> String.valueOf(r.getId())).collect(Collectors.joining(", ")) + log.warn("Empty LS_T and CS_T registries for {}", + pairRegistryId ); continue; } @@ -110,7 +109,7 @@ public class KSRepDepoNettoReportBuilder extends CSVReportBuilder statusForExecution = new HashMap<>(); executions.forEach(execution -> { if (Set.of("S", "SELL").contains(execution.getSide())) { - String status = ""; + String status = null; if (execution.getCoverageStatus() != null) { Long groupId = execution.getExchangeExecutionId(); String coverageStatus = execution.getCoverageStatus().toUpperCase(); @@ -190,8 +190,8 @@ public class KSRepTradesReportBuilder extends CSVReportBuilder