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 index aed401c44..3ddea924f 100644 --- 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 @@ -3,7 +3,9 @@ package ru.spcex.clearing.reports.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; -import ru.spcex.clearing.reports.reports.*; +import ru.spcex.clearing.reports.reports.CSVReportBuilder; +import ru.spcex.clearing.reports.reports.EmptyParams; +import ru.spcex.clearing.reports.reports.SessionIdParam; import ru.spcex.clearing.reports.reports.bp.*; import ru.spcex.clearing.reports.reports.ks.*; import ru.spcex.platform.enumeration.ReportBuilderType; @@ -16,9 +18,7 @@ import java.util.Map; @ComponentScan(basePackages = "ru.spcex.clearing.reports.reports") public class ReportBuildersConfig { @Bean("reportBuildersWithoutParams") - public Map>> reportBuildersWithoutParams( - SummaryLiabilitiesClaimsReportBuilder summaryLiabilitiesClaimsReportBuilder, - SummaryMoneyChangeReportBuilder summaryMoneyChangeReportBuilder, + public Map>> reportBuildersWithoutParams( KSRepCashRegistersReportBuilder ksRepCashRegistersReportBuilder, KSRepCashRegisterSumsReportBuilder ksRepCashRegisterSumsReportBuilder, KSRepDepoRegistersReportBuilder ksRepDepoRegistersReportBuilder, @@ -26,9 +26,7 @@ public class ReportBuildersConfig { KSRepTradesReportBuilder ksRepTradesReportBuilder, KSRepFirmDetailsReportBuilder ksRepFirmDetailsReportBuilder ) { - Map>> resultMap = new HashMap<>(); - resultMap.put(ReportBuilderType.SUMMARY_LIABILITIES_CLAIMS, List.of(summaryLiabilitiesClaimsReportBuilder)); - resultMap.put(ReportBuilderType.SUMMARY_MONEY_CHANGE, List.of(summaryMoneyChangeReportBuilder)); + Map>> resultMap = new HashMap<>(); resultMap.put(ReportBuilderType.KS_REP_CASH_REGISTERS, List.of(ksRepCashRegistersReportBuilder)); resultMap.put(ReportBuilderType.KS_REP_CASH_REGISTER_SUMS, List.of(ksRepCashRegisterSumsReportBuilder)); resultMap.put(ReportBuilderType.KS_REP_DEPO_REGISTERS, List.of(ksRepDepoRegistersReportBuilder)); @@ -39,9 +37,7 @@ public class ReportBuildersConfig { } @Bean("reportBuildersWithSessionIdParam") - public Map>> reportBuildersWithSessionIdParam( - OperationalLiabilitiesClaimsReportBuilder operationalLiabilitiesClaimsReportBuilder, - OperationalMoneyChangeReportBuilder operationalMoneyChangeReportBuilder, + public Map>> reportBuildersWithSessionIdParam( ExecutedDealReportBuilder_INFTYPE_1 executedDealReportBuilder_inftype_1, ExecutedDealReportBuilder_INFTYPE_2 executedDealReportBuilder_inftype_2, ExecutedDealReportBuilder_INFTYPE_3 executedDealReportBuilder_inftype_3, @@ -50,9 +46,7 @@ public class ReportBuildersConfig { KSRepCashNettoReportBuilder ksRepCashNettoReportBuilder, KSRepDepoNettoReportBuilder ksRepDepoNettoReportBuilder ) { - Map>> resultMap = new HashMap<>(); - resultMap.put(ReportBuilderType.OPERATIONAL_LIABILITIES_CLAIMS, List.of(operationalLiabilitiesClaimsReportBuilder)); - resultMap.put(ReportBuilderType.OPERATIONAL_MONEY_CHANGE, List.of(operationalMoneyChangeReportBuilder)); + Map>> resultMap = new HashMap<>(); resultMap.put(ReportBuilderType.EXECUTED_DEAL_REPORT, List.of( executedDealReportBuilder_inftype_1, @@ -67,57 +61,8 @@ public class ReportBuildersConfig { return resultMap; } - @Bean("reportBuildersWithSessionIdListParam") - public Map>> reportBuildersWithSessionIdListParams( - PeriodLiabilitiesClaimsReportBuilder periodLiabilitiesClaimsReportBuilder - ) { - Map>> resultMap = new HashMap<>(); - resultMap.put(ReportBuilderType.PERIOD_LIABILITIES_CLAIMS, List.of(periodLiabilitiesClaimsReportBuilder)); - return resultMap; - } - - @Bean("reportBuildersWithPeriodParams") - public Map>> reportBuildersWithPeriodParams( - PeriodMoneyChangeReportBuilder periodMoneyChangeReportBuilder - ) { - Map>> resultMap = new HashMap<>(); - resultMap.put(ReportBuilderType.PERIOD_MONEY_CHANGE, List.of(periodMoneyChangeReportBuilder)); - return resultMap; - } - @Bean("reportBuildersForGREP") - public Map>> reportBuildersForGREP( - SummaryLiabilitiesClaimsReportBuilder summaryLiabilitiesClaimsReportBuilder, - SummaryMoneyChangeReportBuilder summaryMoneyChangeReportBuilder, - KSRepCashRegistersReportBuilder ksRepCashRegistersReportBuilder, - KSRepCashRegisterSumsReportBuilder ksRepCashRegisterSumsReportBuilder, - KSRepDepoRegistersReportBuilder ksRepDepoRegistersReportBuilder, - KSRepDepoRegisterQuantitiesReportBuilder ksRepDepoRegisterQuantitiesReportBuilder, - KSRepTradesReportBuilder ksRepTradesReportBuilder, - KSRepFirmDetailsReportBuilder ksRepFirmDetailsReportBuilder, - KSRepCashNettoReportBuilder ksRepCashNettoReportBuilder, - KSRepDepoNettoReportBuilder ksRepDepoNettoReportBuilder, - PeriodLiabilitiesClaimsReportBuilder periodLiabilitiesClaimsReportBuilder, - PeriodMoneyChangeReportBuilder periodMoneyChangeReportBuilder - ) { - Map>> resultMap = new HashMap<>(); - resultMap.put(ReportBuilderType.SUMMARY_LIABILITIES_CLAIMS, List.of(summaryLiabilitiesClaimsReportBuilder)); - resultMap.put(ReportBuilderType.SUMMARY_MONEY_CHANGE, List.of(summaryMoneyChangeReportBuilder)); - resultMap.put(ReportBuilderType.KS_REP_CASH_REGISTERS, List.of(ksRepCashRegistersReportBuilder)); - resultMap.put(ReportBuilderType.KS_REP_CASH_REGISTER_SUMS, List.of(ksRepCashRegisterSumsReportBuilder)); - resultMap.put(ReportBuilderType.KS_REP_DEPO_REGISTERS, List.of(ksRepDepoRegistersReportBuilder)); - resultMap.put(ReportBuilderType.KS_REP_DEPO_REGISTER_QUANTITIES, List.of(ksRepDepoRegisterQuantitiesReportBuilder)); - resultMap.put(ReportBuilderType.KS_REP_TRADES, List.of(ksRepTradesReportBuilder)); - resultMap.put(ReportBuilderType.KS_REP_FIRM_DETAILS, List.of(ksRepFirmDetailsReportBuilder)); - resultMap.put(ReportBuilderType.KS_REP_CASH_NETTO, List.of(ksRepCashNettoReportBuilder)); - resultMap.put(ReportBuilderType.KS_REP_DEPO_NETTO, List.of(ksRepDepoNettoReportBuilder)); - resultMap.put(ReportBuilderType.PERIOD_LIABILITIES_CLAIMS, List.of(periodLiabilitiesClaimsReportBuilder)); - resultMap.put(ReportBuilderType.PERIOD_MONEY_CHANGE, List.of(periodMoneyChangeReportBuilder)); - return resultMap; - } - - @Bean("reportBuildersForGREF") - public Map>> reportBuildersForGREF( + public Map>> reportBuildersForGREP( KSRepCashRegistersReportBuilder ksRepCashRegistersReportBuilder, KSRepCashRegisterSumsReportBuilder ksRepCashRegisterSumsReportBuilder, KSRepDepoRegistersReportBuilder ksRepDepoRegistersReportBuilder, @@ -127,7 +72,30 @@ public class ReportBuildersConfig { KSRepCashNettoReportBuilder ksRepCashNettoReportBuilder, KSRepDepoNettoReportBuilder ksRepDepoNettoReportBuilder ) { - Map>> resultMap = new HashMap<>(); + Map>> resultMap = new HashMap<>(); + resultMap.put(ReportBuilderType.KS_REP_CASH_REGISTERS, List.of(ksRepCashRegistersReportBuilder)); + resultMap.put(ReportBuilderType.KS_REP_CASH_REGISTER_SUMS, List.of(ksRepCashRegisterSumsReportBuilder)); + resultMap.put(ReportBuilderType.KS_REP_DEPO_REGISTERS, List.of(ksRepDepoRegistersReportBuilder)); + resultMap.put(ReportBuilderType.KS_REP_DEPO_REGISTER_QUANTITIES, List.of(ksRepDepoRegisterQuantitiesReportBuilder)); + resultMap.put(ReportBuilderType.KS_REP_TRADES, List.of(ksRepTradesReportBuilder)); + resultMap.put(ReportBuilderType.KS_REP_FIRM_DETAILS, List.of(ksRepFirmDetailsReportBuilder)); + resultMap.put(ReportBuilderType.KS_REP_CASH_NETTO, List.of(ksRepCashNettoReportBuilder)); + resultMap.put(ReportBuilderType.KS_REP_DEPO_NETTO, List.of(ksRepDepoNettoReportBuilder)); + return resultMap; + } + + @Bean("reportBuildersForGREF") + public Map>> reportBuildersForGREF( + KSRepCashRegistersReportBuilder ksRepCashRegistersReportBuilder, + KSRepCashRegisterSumsReportBuilder ksRepCashRegisterSumsReportBuilder, + KSRepDepoRegistersReportBuilder ksRepDepoRegistersReportBuilder, + KSRepDepoRegisterQuantitiesReportBuilder ksRepDepoRegisterQuantitiesReportBuilder, + KSRepTradesReportBuilder ksRepTradesReportBuilder, + KSRepFirmDetailsReportBuilder ksRepFirmDetailsReportBuilder, + KSRepCashNettoReportBuilder ksRepCashNettoReportBuilder, + KSRepDepoNettoReportBuilder ksRepDepoNettoReportBuilder + ) { + Map>> resultMap = new HashMap<>(); resultMap.put(ReportBuilderType.KS_REP_CASH_REGISTERS, List.of(ksRepCashRegistersReportBuilder)); resultMap.put(ReportBuilderType.KS_REP_CASH_REGISTER_SUMS, List.of(ksRepCashRegisterSumsReportBuilder)); resultMap.put(ReportBuilderType.KS_REP_DEPO_REGISTERS, List.of(ksRepDepoRegistersReportBuilder)); @@ -140,14 +108,14 @@ public class ReportBuildersConfig { } @Bean("reportBuildersForGRET") - public Map>> reportBuildersForGRET( + public Map>> reportBuildersForGRET( ExecutedDealReportBuilder_INFTYPE_1 executedDealReportBuilder_inftype_1, ExecutedDealReportBuilder_INFTYPE_2 executedDealReportBuilder_inftype_2, ExecutedDealReportBuilder_INFTYPE_3 executedDealReportBuilder_inftype_3, ExecutedDealReportBuilder_INFTYPE_4 executedDealReportBuilder_inftype_4, UnfulfilledDealReportBuilder unfulfilledDealReportBuilder ) { - Map>> resultMap = new HashMap<>(); + Map>> resultMap = new HashMap<>(); resultMap.put(ReportBuilderType.EXECUTED_DEAL_REPORT, List.of( executedDealReportBuilder_inftype_1, diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/validation/ValidationConfig.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/validation/ValidationConfig.java index 00dd77545..ed1c129c4 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/validation/ValidationConfig.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/validation/ValidationConfig.java @@ -6,13 +6,10 @@ import org.springframework.context.annotation.Configuration; import ru.clearing.classes.statics.data.company.Company; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequest; -import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequestWithPeriod; import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequestWithSessionId; -import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequestWithSessionIdList; import ru.spcex.clearing.platform.messaging.domain.cud.schedule.LauncherCommandRequest; import ru.spcex.clearing.reports.errors.ReportError; import ru.spcex.clearing.validation.common.ValidationHelper; -import ru.spcex.clearing.validation.common.rules.EndDtAfterStartDtRule; import ru.spcex.clearing.validation.common.rules.EnumPresentRule; import ru.spcex.clearing.validation.common.rules.FieldRequiredRule; import ru.spcex.platform.classes.base.SpcexObjectBase; @@ -59,8 +56,6 @@ public class ValidationConfig { EnumPresentRule.instance("reportId", ReportRequest::getReportId, new IEnumKey[]{ - ReportBuilderType.SUMMARY_LIABILITIES_CLAIMS, - ReportBuilderType.SUMMARY_MONEY_CHANGE, ReportBuilderType.KS_REP_CASH_REGISTERS, ReportBuilderType.KS_REP_CASH_REGISTER_SUMS, ReportBuilderType.KS_REP_DEPO_REGISTERS, @@ -85,8 +80,6 @@ public class ValidationConfig { EnumPresentRule.instance("reportId", ReportRequestWithSessionId::getReportId, new IEnumKey[]{ - ReportBuilderType.OPERATIONAL_LIABILITIES_CLAIMS, - ReportBuilderType.OPERATIONAL_MONEY_CHANGE, ReportBuilderType.EXECUTED_DEAL_REPORT, ReportBuilderType.UNFULFILLED_DEAL_REPORT, ReportBuilderType.KS_REP_CASH_NETTO, @@ -102,57 +95,6 @@ public class ValidationConfig { }; } - @Bean("reportRequestWithSessionIdListValidator") - public Function reportRequestWithSessionIdListValidator( - Map> imdgForValidation - ) { - return reportRequestWithSessionIdList -> { - ImdgValidationContext context = new ImdgValidationContext<>(); - context.setValidatedObject(reportRequestWithSessionIdList); - return new ValidatorImpl<>(context, - EnumPresentRule.instance("reportId", - ReportRequestWithSessionIdList::getReportId, - new IEnumKey[]{ - ReportBuilderType.PERIOD_LIABILITIES_CLAIMS - }, - ReportError.WrongFieldValue, - ReportError.RequiredFieldEmpty), - FieldRequiredRule.instance("sessionIdList", - ReportRequestWithSessionIdList::getSessionIdList, - ReportError.RequiredFieldEmpty, - sessionIdList -> { - if (sessionIdList == null || sessionIdList.isEmpty()) - return ReportError.WrongFieldValue; - return null; - }) - ); - }; - } - - @Bean("reportRequestWithPeriodValidator") - public Function reportRequestWithPeriodValidator( - Map> imdgForValidation - ) { - return reportRequestWithPeriod -> { - ImdgValidationContext context = new ImdgValidationContext<>(); - context.setValidatedObject(reportRequestWithPeriod); - return new ValidatorImpl<>(context, - EnumPresentRule.instance("reportId", - ReportRequestWithPeriod::getReportId, - new IEnumKey[]{ - ReportBuilderType.PERIOD_MONEY_CHANGE, - }, - ReportError.WrongFieldValue, - ReportError.RequiredFieldEmpty), - EndDtAfterStartDtRule.instance("startDate", "endDate", - ReportRequestWithPeriod::getStartDate, - ReportRequestWithPeriod::getEndDate, - ReportError.RequiredFieldEmpty, - ReportError.WrongFieldValue) - ); - }; - } - // todo оставил бин валидатора на будущее, если в дальнейшем придется проверять запрос. в текущей версии, по факту, // запрос не проверяется: в случае если sessionId не указан отчеты не строятся @Bean("reportRequestGREPValidator") diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/CSVReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/CSVReportBuilder.java index 08d5dc502..365190613 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/CSVReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/CSVReportBuilder.java @@ -2,44 +2,41 @@ package ru.spcex.clearing.reports.reports; import com.opencsv.CSVWriterBuilder; 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.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.format.datetime.standard.InstantFormatter; import ru.spcex.platform.enumeration.ReportBuilderType; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.Writer; -import java.text.DecimalFormat; +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.math.BigDecimal; import java.time.format.DateTimeFormatter; import java.util.List; +import java.util.Locale; /** * Класс для построения отчетов в формате CSV * * @param

тип параметров, используемых при построении отчета */ -public abstract class CSVReportBuilder

{ +public abstract class CSVReportBuilder { protected static final Logger log = LoggerFactory.getLogger(CSVReportBuilder.class); - - protected DecimalFormat df02Format = new DecimalFormat("#0.00"); - protected DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("dd.MM.yyyy"); protected DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd.MM.yyyy'T'HH:mm:ss"); - protected DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss"); protected DateTimeFormatter dateTimeFormatter_YYMMDDHHmmssSSS = DateTimeFormatter.ofPattern("yyMMddHHmmssSSS"); protected DateTimeFormatter dateFormatter_yyMMdd = DateTimeFormatter.ofPattern("yyMMdd"); - protected InstantFormatter instantFormatter = new InstantFormatter(); - - /** - * Метод получения заголовков для CSV отчета - */ - protected abstract String[] getHeaders(); /** * Возвращает списком значения CSV отчета. Каждый элемент списка - строка, элемент массива внутри списка - столбец. */ - protected abstract List getLines(); + protected abstract List getRows(); /** * Название отчета, используется для формирования имени отчета (без указания формата) @@ -56,7 +53,9 @@ public abstract class CSVReportBuilder

{ /** * Тип параметров для построения отчетов */ - public abstract Class

getParamsType(); + public abstract Class

getParamsClass(); + + public abstract Class getReportClass(); /** * Формирование отчета на основе параметров @@ -88,16 +87,29 @@ public abstract class CSVReportBuilder

{ File reportFile = new File(outFolder, normalizeFilenameForOS(getReportFilename(params) + ".csv")); collect(params); - String[] headers = getHeaders(); - List lines = getLines(); + List rows = getRows(); - assert headers != null; - assert lines != null; + assert rows != null; - try (ICSVWriter csvWriter = createCsvWriter(reportFile)) { - csvWriter.writeNext(headers, false); - csvWriter.writeAll(lines, true); - } catch (IOException e) { + try (Writer writer = new FileWriter(reportFile)) { + CustomStrategy customStrategy = new CustomStrategy<>(); + customStrategy.setType(getReportClass()); + StatefulBeanToCsv sbc = new StatefulBeanToCsvBuilder(writer) + .withMappingStrategy(customStrategy) + .withLineEnd("\n") + .withSeparator(',') + .withQuotechar('\"') + .build(); + if (!rows.isEmpty()) sbc.write(rows); + else { + // Для записи заголовков в пустой файл + Constructor constructor = getReportClass().getDeclaredConstructor(); + R obj = constructor.newInstance(); + String[] headers = customStrategy.generateHeader(obj); + writer.write("\"" + String.join("\",\"", headers) + "\""); + } + + } catch (Exception e) { log.error("Can't create report", e); return null; } @@ -111,15 +123,37 @@ public abstract class CSVReportBuilder

{ return filename; } - public void setDateFormatter(DateTimeFormatter dateFormatter) { - this.dateFormatter = dateFormatter; - } + static class CustomStrategy extends ColumnPositionMappingStrategy { + @Override + public String[] generateHeader(T bean) throws CsvRequiredFieldEmptyException { + super.generateHeader(bean); + String[] headers = new String[this.getFieldMap().values().size()]; + for (BeanField field : this.getFieldMap().values()) { + CsvBindByPosition positionAnnotation = field.getField().getAnnotation(CsvBindByPosition.class); + CsvBindByName nameAnnotation = field.getField().getAnnotation(CsvBindByName.class); + headers[positionAnnotation.position()] = nameAnnotation.column(); + } + return headers; + } - public void setDateTimeFormatter(DateTimeFormatter dateTimeFormatter) { - this.dateTimeFormatter = dateTimeFormatter; - } + @Override + public String[] transmuteBean(T bean) throws CsvFieldAssignmentException, CsvChainedException { + return super.transmuteBean(bean); + } + + @Override + protected CsvConverter determineConverter(Field field, Class elementType, String locale, String writeLocale, Class customConverter) throws CsvBadConverterException { + CsvConverter csvConverter = super.determineConverter(field, elementType, locale, writeLocale, customConverter); + if (csvConverter instanceof ConverterNumber && field.getType() == BigDecimal.class) { + csvConverter = new ConverterNumber(BigDecimal.class, + Locale.getDefault().toString(), + Locale.getDefault().toString(), + Locale.getDefault(), + "#0.00", + "#0.00"); + } + return csvConverter; + } - public void setTimeFormatter(DateTimeFormatter timeFormatter) { - this.timeFormatter = timeFormatter; } } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/CSVReportBuilder_.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/CSVReportBuilder_.java deleted file mode 100644 index ba084f0b3..000000000 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/CSVReportBuilder_.java +++ /dev/null @@ -1,108 +0,0 @@ -package ru.spcex.clearing.reports.reports; - -import com.opencsv.CSVWriterBuilder; -import com.opencsv.ICSVWriter; -import com.opencsv.bean.HeaderColumnNameMappingStrategy; -import com.opencsv.bean.StatefulBeanToCsv; -import com.opencsv.bean.StatefulBeanToCsvBuilder; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import ru.spcex.platform.enumeration.ReportBuilderType; - -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.io.Writer; -import java.time.format.DateTimeFormatter; -import java.util.List; - -/** - * Класс для построения отчетов в формате CSV - * - * @param

тип параметров, используемых при построении отчета - */ -public abstract class CSVReportBuilder_ { - protected static final Logger log = LoggerFactory.getLogger(CSVReportBuilder_.class); - protected DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd.MM.yyyy'T'HH:mm:ss"); - /** - * Возвращает списком значения CSV отчета. Каждый элемент списка - строка, элемент массива внутри списка - столбец. - */ - protected abstract List getRows(); - - /** - * Название отчета, используется для формирования имени отчета (без указания формата) - * - * @param params Параметры формирования отчета - */ - protected abstract String getReportFilename(P params); - - /** - * Тип отчета по {@link ReportBuilderType} - */ - public abstract ReportBuilderType getReportType(); - - /** - * Тип параметров для построения отчетов - */ - public abstract Class

getParamsClass(); - - public abstract Class getReportClass(); - - /** - * Формирование отчета на основе параметров - * - * @param params Параметры формирования отчета - */ - 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(); - - File reportFile = new File(outFolder, normalizeFilenameForOS(getReportFilename(params) + ".csv")); - - collect(params); - List lines = getRows(); - - assert lines != null; - - try (Writer writer = new FileWriter(reportFile)) { - HeaderColumnNameMappingStrategy headerColumnNameMappingStrategy = new HeaderColumnNameMappingStrategy<>(); - headerColumnNameMappingStrategy.setType(getReportClass()); - StatefulBeanToCsv sbc = new StatefulBeanToCsvBuilder(writer) - .withMappingStrategy(headerColumnNameMappingStrategy) - .withLineEnd("\n") - .withSeparator(',') - .withQuotechar('\"') - .build(); - sbc.write(lines); - } catch (Exception e) { - log.error("Can't create report", e); - return null; - } - - return reportFile; - } - - protected String normalizeFilenameForOS(String filename) { - if (System.getProperty("os.name").toLowerCase().contains("windows")) - return filename.replace(":", "_"); - return filename; - } -} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/PeriodParams.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/PeriodParams.java deleted file mode 100644 index 4d30c335a..000000000 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/PeriodParams.java +++ /dev/null @@ -1,27 +0,0 @@ -package ru.spcex.clearing.reports.reports; - -import java.time.LocalDate; - -/** - * Параметры для формирования отчета на период - */ -public class PeriodParams { - private LocalDate startDate; - private LocalDate endDate; - - public LocalDate getStartDate() { - return startDate; - } - - public void setStartDate(LocalDate startDate) { - this.startDate = startDate; - } - - public LocalDate getEndDate() { - return endDate; - } - - public void setEndDate(LocalDate endDate) { - this.endDate = endDate; - } -} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/SessionIdListParams.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/SessionIdListParams.java deleted file mode 100644 index 2b198bf17..000000000 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/SessionIdListParams.java +++ /dev/null @@ -1,18 +0,0 @@ -package ru.spcex.clearing.reports.reports; - -import java.util.List; - -/** - * Параметры для формирования отчета по списку SessionId - */ -public class SessionIdListParams { - private List sessionIdList; - - public List getSessionIdList() { - return sessionIdList; - } - - public void setSessionIdList(List sessionIdList) { - this.sessionIdList = sessionIdList; - } -} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bean/ExecutedDealReport.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bean/ExecutedDealReport.java new file mode 100644 index 000000000..dd5c37a0f --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bean/ExecutedDealReport.java @@ -0,0 +1,127 @@ +package ru.spcex.clearing.reports.reports.bean; + +import com.opencsv.bean.CsvBindByName; +import com.opencsv.bean.CsvBindByPosition; +import com.opencsv.bean.CsvDate; +import com.opencsv.bean.CsvNumber; + +import java.math.BigDecimal; +import java.time.Instant; +import java.time.LocalDate; + +public class ExecutedDealReport { + @CsvBindByName(column = "SECURITYID") + @CsvBindByPosition(position = 0) + private String securityId; + + @CsvBindByName(column = "TRADENO") + @CsvBindByPosition(position = 1) + private Long tradeNo; + + @CsvBindByName(column = "TRADEDATE") + @CsvBindByPosition(position = 2) + @CsvDate(value = "dd.MM.yyyy") + private LocalDate tradeDate; + + @CsvBindByName(column = "TRADETIME") + @CsvBindByPosition(position = 3) + @CsvDate(value = "dd.MM.yyyy'T'HH:mm:ss") + private Instant tradeTime; + + @CsvBindByName(column = "SETTLEDATE") + @CsvBindByPosition(position = 4) + @CsvDate(value = "dd.MM.yyyy") + private LocalDate settleDate; + + @CsvBindByName(column = "SETTLECODE") + @CsvBindByPosition(position = 5) + private String settleCode; + + @CsvBindByName(column = "PRICE") + @CsvBindByPosition(position = 6) + @CsvNumber(value = "#0.00", writeFormat = "#0.00") + private BigDecimal price; + + @CsvBindByName(column = "QUANTITY") + @CsvBindByPosition(position = 7) + @CsvNumber(value = "#0.00", writeFormat = "#0.00") + private BigDecimal quantity; + + @CsvBindByName(column = "VALUE") + @CsvBindByPosition(position = 8) + @CsvNumber(value = "#0.00", writeFormat = "#0.00") + private BigDecimal value; + + + public String getSecurityId() { + return securityId; + } + + public void setSecurityId(String securityId) { + this.securityId = securityId; + } + + public Long getTradeNo() { + return tradeNo; + } + + public void setTradeNo(Long tradeNo) { + this.tradeNo = tradeNo; + } + + public LocalDate getTradeDate() { + return tradeDate; + } + + public void setTradeDate(LocalDate tradeDate) { + this.tradeDate = tradeDate; + } + + public Instant getTradeTime() { + return tradeTime; + } + + public void setTradeTime(Instant tradeTime) { + this.tradeTime = tradeTime; + } + + public LocalDate getSettleDate() { + return settleDate; + } + + public void setSettleDate(LocalDate settleDate) { + this.settleDate = settleDate; + } + + public String getSettleCode() { + return settleCode; + } + + public void setSettleCode(String settleCode) { + this.settleCode = settleCode; + } + + public BigDecimal getPrice() { + return price; + } + + public void setPrice(BigDecimal price) { + this.price = price; + } + + public BigDecimal getQuantity() { + return quantity; + } + + public void setQuantity(BigDecimal quantity) { + this.quantity = quantity; + } + + public BigDecimal getValue() { + return value; + } + + public void setValue(BigDecimal value) { + this.value = value; + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bean/KSRepCashNettoReport.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bean/KSRepCashNettoReport.java new file mode 100644 index 000000000..7eb605f6e --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bean/KSRepCashNettoReport.java @@ -0,0 +1,88 @@ +package ru.spcex.clearing.reports.reports.bean; + +import com.opencsv.bean.CsvBindByName; +import com.opencsv.bean.CsvBindByPosition; +import com.opencsv.bean.CsvDate; +import com.opencsv.bean.CsvNumber; + +import java.math.BigDecimal; +import java.time.Instant; +import java.time.LocalDate; + +public class KSRepCashNettoReport { + @CsvBindByName(column = "FIRMID") + @CsvBindByPosition(position = 0) + private String firmId; + + @CsvBindByName(column = "SESSION_ID") + @CsvBindByPosition(position = 1) + private Long sessionId; + + @CsvBindByName(column = "SESSION_DATE") + @CsvBindByPosition(position = 2) + @CsvDate(value = "dd.MM.yyyy'T'HH:mm:ss") + private Instant sessionDate; + + @CsvBindByName(column = "ACCOUNT") + @CsvBindByPosition(position = 3) + private String account; + + @CsvBindByName(column = "VALUE") + @CsvBindByPosition(position = 4) + @CsvNumber(value = "#0.00", writeFormat = "#0.00") + private BigDecimal value; + + @CsvBindByName(column = "DATE") + @CsvBindByPosition(position = 5) + @CsvDate(value = "dd.MM.yyyy") + private LocalDate date; + + + public String getFirmId() { + return firmId; + } + + public void setFirmId(String firmId) { + this.firmId = firmId; + } + + public Long getSessionId() { + return sessionId; + } + + public void setSessionId(Long sessionId) { + this.sessionId = sessionId; + } + + public Instant getSessionDate() { + return sessionDate; + } + + public void setSessionDate(Instant sessionDate) { + this.sessionDate = sessionDate; + } + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public BigDecimal getValue() { + return value; + } + + public void setValue(BigDecimal value) { + this.value = value; + } + + public LocalDate getDate() { + return date; + } + + public void setDate(LocalDate date) { + this.date = date; + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bean/KSRepCashRegisterSumsReport.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bean/KSRepCashRegisterSumsReport.java new file mode 100644 index 000000000..22b72a380 --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bean/KSRepCashRegisterSumsReport.java @@ -0,0 +1,85 @@ +package ru.spcex.clearing.reports.reports.bean; + +import com.opencsv.bean.CsvBindByName; +import com.opencsv.bean.CsvBindByPosition; +import com.opencsv.bean.CsvNumber; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalTime; + +public class KSRepCashRegisterSumsReport { + @CsvBindByName(column = "FIRMID") + @CsvBindByPosition(position = 0) + private String firmId; + + @CsvBindByName(column = "ACCOUNT") + @CsvBindByPosition(position = 1) + private String account; + + @CsvBindByName(column = "REGISTER_CODE") + @CsvBindByPosition(position = 2) + private String registerCode; + + @CsvBindByName(column = "ADD_SUM") + @CsvBindByPosition(position = 3) + @CsvNumber(value = "#0.00", writeFormat = "#0.00") + private BigDecimal addSum; + + @CsvBindByName(column = "ADD_TIME") + @CsvBindByPosition(position = 4) + private LocalTime addTime; + + @CsvBindByName(column = "ADD_DATE") + @CsvBindByPosition(position = 5) + private LocalDate addDate; + + + public String getFirmId() { + return firmId; + } + + public void setFirmId(String firmId) { + this.firmId = firmId; + } + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getRegisterCode() { + return registerCode; + } + + public void setRegisterCode(String registerCode) { + this.registerCode = registerCode; + } + + public BigDecimal getAddSum() { + return addSum; + } + + public void setAddSum(BigDecimal addSum) { + this.addSum = addSum; + } + + public LocalTime getAddTime() { + return addTime; + } + + public void setAddTime(LocalTime addTime) { + this.addTime = addTime; + } + + public LocalDate getAddDate() { + return addDate; + } + + public void setAddDate(LocalDate addDate) { + this.addDate = addDate; + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bean/KSRepCashRegistersReport.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bean/KSRepCashRegistersReport.java new file mode 100644 index 000000000..0e41180fd --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bean/KSRepCashRegistersReport.java @@ -0,0 +1,137 @@ +package ru.spcex.clearing.reports.reports.bean; + +import com.opencsv.bean.CsvBindByName; +import com.opencsv.bean.CsvBindByPosition; +import com.opencsv.bean.CsvDate; +import com.opencsv.bean.CsvNumber; + +import java.math.BigDecimal; +import java.time.LocalDate; + +public class KSRepCashRegistersReport { + @CsvBindByName(column = "FIRMID") + @CsvBindByPosition(position = 0) + private String firmId; + + @CsvBindByName(column = "ACCOUNT") + @CsvBindByPosition(position = 1) + private String account; + + @CsvBindByName(column = "DATE") + @CsvBindByPosition(position = 2) + @CsvDate(value = "dd.MM.yyyy") + private LocalDate date; + + @CsvBindByName(column = "REGISTER_CODE") + @CsvBindByPosition(position = 3) + private String registerCode; + + @CsvBindByName(column = "REGISTER_NAME") + @CsvBindByPosition(position = 4) + private String registerName; + + @CsvBindByName(column = "OPEN_BALANCE") + @CsvBindByPosition(position = 5) + @CsvNumber(value = "#0.00", writeFormat = "#0.00") + private BigDecimal openBalance; + + @CsvBindByName(column = "CHANGE_BALANCE") + @CsvBindByPosition(position = 6) + @CsvNumber(value = "#0.00", writeFormat = "#0.00") + private BigDecimal changeBalance; + + @CsvBindByName(column = "ADD_WITHDRAW") + @CsvBindByPosition(position = 7) + @CsvNumber(value = "#0.00", writeFormat = "#0.00") + private BigDecimal addWithdraw; + + @CsvBindByName(column = "CLOSE_BALANCE") + @CsvBindByPosition(position = 8) + @CsvNumber(value = "#0.00", writeFormat = "#0.00") + private BigDecimal closeBalance; + + @CsvBindByName(column = "REMARKS") + @CsvBindByPosition(position = 9) + private String remarks; + + + public String getFirmId() { + return firmId; + } + + public void setFirmId(String firmId) { + this.firmId = firmId; + } + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public LocalDate getDate() { + return date; + } + + public void setDate(LocalDate date) { + this.date = date; + } + + public String getRegisterCode() { + return registerCode; + } + + public void setRegisterCode(String registerCode) { + this.registerCode = registerCode; + } + + public String getRegisterName() { + return registerName; + } + + public void setRegisterName(String registerName) { + this.registerName = registerName; + } + + public BigDecimal getOpenBalance() { + return openBalance; + } + + public void setOpenBalance(BigDecimal openBalance) { + this.openBalance = openBalance; + } + + public BigDecimal getChangeBalance() { + return changeBalance; + } + + public void setChangeBalance(BigDecimal changeBalance) { + this.changeBalance = changeBalance; + } + + public BigDecimal getAddWithdraw() { + return addWithdraw; + } + + public void setAddWithdraw(BigDecimal addWithdraw) { + this.addWithdraw = addWithdraw; + } + + public BigDecimal getCloseBalance() { + return closeBalance; + } + + public void setCloseBalance(BigDecimal closeBalance) { + this.closeBalance = closeBalance; + } + + public String getRemarks() { + return remarks; + } + + public void setRemarks(String remarks) { + this.remarks = remarks; + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bean/KSRepDepoNettoReport.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bean/KSRepDepoNettoReport.java new file mode 100644 index 000000000..8844a3309 --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bean/KSRepDepoNettoReport.java @@ -0,0 +1,100 @@ +package ru.spcex.clearing.reports.reports.bean; + +import com.opencsv.bean.CsvBindByName; +import com.opencsv.bean.CsvBindByPosition; +import com.opencsv.bean.CsvDate; +import com.opencsv.bean.CsvNumber; + +import java.math.BigDecimal; +import java.time.Instant; +import java.time.LocalDate; + +public class KSRepDepoNettoReport { + @CsvBindByName(column = "FIRMID") + @CsvBindByPosition(position = 0) + private String firmId; + + @CsvBindByName(column = "SESSION_ID") + @CsvBindByPosition(position = 1) + private Long sessionId; + + @CsvBindByName(column = "SESSION_DATE") + @CsvBindByPosition(position = 2) + @CsvDate(value = "dd.MM.yyyy'T'HH:mm:ss") + private Instant sessionDate; + + @CsvBindByName(column = "ACCOUNT") + @CsvBindByPosition(position = 3) + private String account; + + @CsvBindByName(column = "SECURITYID") + @CsvBindByPosition(position = 4) + private String securityId; + + @CsvBindByName(column = "VALUE") + @CsvBindByPosition(position = 5) + @CsvNumber(value = "#0.00", writeFormat = "#0.00") + private BigDecimal value; + + @CsvBindByName(column = "DATE") + @CsvBindByPosition(position = 6) + @CsvDate(value = "dd.MM.yyyy") + private LocalDate date; + + + public String getFirmId() { + return firmId; + } + + public void setFirmId(String firmId) { + this.firmId = firmId; + } + + public Long getSessionId() { + return sessionId; + } + + public void setSessionId(Long sessionId) { + this.sessionId = sessionId; + } + + public Instant getSessionDate() { + return sessionDate; + } + + public void setSessionDate(Instant sessionDate) { + this.sessionDate = sessionDate; + } + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getSecurityId() { + return securityId; + } + + public void setSecurityId(String securityId) { + this.securityId = securityId; + } + + public BigDecimal getValue() { + return value; + } + + public void setValue(BigDecimal value) { + this.value = value; + } + + public LocalDate getDate() { + return date; + } + + public void setDate(LocalDate date) { + this.date = date; + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bean/KSRepDepoRegisterQuantitiesReport.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bean/KSRepDepoRegisterQuantitiesReport.java new file mode 100644 index 000000000..20efa2ca7 --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bean/KSRepDepoRegisterQuantitiesReport.java @@ -0,0 +1,99 @@ +package ru.spcex.clearing.reports.reports.bean; + +import com.opencsv.bean.CsvBindByName; +import com.opencsv.bean.CsvBindByPosition; +import com.opencsv.bean.CsvDate; +import com.opencsv.bean.CsvNumber; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalTime; + +public class KSRepDepoRegisterQuantitiesReport { + @CsvBindByName(column = "FIRMID") + @CsvBindByPosition(position = 0) + private String firmId; + + @CsvBindByName(column = "ACCOUNT") + @CsvBindByPosition(position = 1) + private String account; + + @CsvBindByName(column = "SECURITYID") + @CsvBindByPosition(position = 2) + private String securityId; + + @CsvBindByName(column = "REGISTER_CODE") + @CsvBindByPosition(position = 3) + private String registerCode; + + @CsvBindByName(column = "ADD_QUANTITY") + @CsvBindByPosition(position = 4) + @CsvNumber(value = "#0.00", writeFormat = "#0.00") + private BigDecimal addQuantity; + + @CsvBindByName(column = "ADD_TIME") + @CsvBindByPosition(position = 5) + private LocalTime addTime; + + @CsvBindByName(column = "ADD_DATE") + @CsvBindByPosition(position = 6) + @CsvDate(value = "dd.MM.yyyy") + private LocalDate addDate; + + + public String getFirmId() { + return firmId; + } + + public void setFirmId(String firmId) { + this.firmId = firmId; + } + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getSecurityId() { + return securityId; + } + + public void setSecurityId(String securityId) { + this.securityId = securityId; + } + + public String getRegisterCode() { + return registerCode; + } + + public void setRegisterCode(String registerCode) { + this.registerCode = registerCode; + } + + public BigDecimal getAddQuantity() { + return addQuantity; + } + + public void setAddQuantity(BigDecimal addQuantity) { + this.addQuantity = addQuantity; + } + + public LocalTime getAddTime() { + return addTime; + } + + public void setAddTime(LocalTime addTime) { + this.addTime = addTime; + } + + public LocalDate getAddDate() { + return addDate; + } + + public void setAddDate(LocalDate addDate) { + this.addDate = addDate; + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bean/KSRepDepoRegistersReport.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bean/KSRepDepoRegistersReport.java new file mode 100644 index 000000000..55da5f3d4 --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bean/KSRepDepoRegistersReport.java @@ -0,0 +1,149 @@ +package ru.spcex.clearing.reports.reports.bean; + +import com.opencsv.bean.CsvBindByName; +import com.opencsv.bean.CsvBindByPosition; +import com.opencsv.bean.CsvDate; +import com.opencsv.bean.CsvNumber; + +import java.math.BigDecimal; +import java.time.LocalDate; + +public class KSRepDepoRegistersReport { + @CsvBindByName(column = "FIRMID") + @CsvBindByPosition(position = 0) + private String firmId; + + @CsvBindByName(column = "ACCOUNT") + @CsvBindByPosition(position = 1) + private String account; + + @CsvBindByName(column = "DATE") + @CsvBindByPosition(position = 2) + @CsvDate(value = "dd.MM.yyyy") + private LocalDate date; + + @CsvBindByName(column = "SECURITYID") + @CsvBindByPosition(position = 3) + private String securityId; + + @CsvBindByName(column = "REGISTER_CODE") + @CsvBindByPosition(position = 4) + private String registerCode; + + @CsvBindByName(column = "REGISTER_NAME") + @CsvBindByPosition(position = 5) + private String registerName; + + @CsvBindByName(column = "OPEN_QUANTITY") + @CsvBindByPosition(position = 6) + @CsvNumber(value = "#0.00", writeFormat = "#0.00") + private BigDecimal openQuantity; + + @CsvBindByName(column = "CHANGE_QUANTITY") + @CsvBindByPosition(position = 7) + @CsvNumber(value = "#0.00", writeFormat = "#0.00") + private BigDecimal changeQuantity; + + @CsvBindByName(column = "ADD_WITHDRAW_DEPO") + @CsvBindByPosition(position = 8) + @CsvNumber(value = "#0.00", writeFormat = "#0.00") + private BigDecimal addWithdrawDepo; + + @CsvBindByName(column = "CLOSE_QUANTITY") + @CsvBindByPosition(position = 9) + @CsvNumber(value = "#0.00", writeFormat = "#0.00") + private BigDecimal closeQuantity; + + @CsvBindByName(column = "REMARKS") + @CsvBindByPosition(position = 10) + private String remarks; + + + public String getFirmId() { + return firmId; + } + + public void setFirmId(String firmId) { + this.firmId = firmId; + } + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public LocalDate getDate() { + return date; + } + + public void setDate(LocalDate date) { + this.date = date; + } + + public String getSecurityId() { + return securityId; + } + + public void setSecurityId(String securityId) { + this.securityId = securityId; + } + + public String getRegisterCode() { + return registerCode; + } + + public void setRegisterCode(String registerCode) { + this.registerCode = registerCode; + } + + public String getRegisterName() { + return registerName; + } + + public void setRegisterName(String registerName) { + this.registerName = registerName; + } + + public BigDecimal getOpenQuantity() { + return openQuantity; + } + + public void setOpenQuantity(BigDecimal openQuantity) { + this.openQuantity = openQuantity; + } + + public BigDecimal getChangeQuantity() { + return changeQuantity; + } + + public void setChangeQuantity(BigDecimal changeQuantity) { + this.changeQuantity = changeQuantity; + } + + public BigDecimal getAddWithdrawDepo() { + return addWithdrawDepo; + } + + public void setAddWithdrawDepo(BigDecimal addWithdrawDepo) { + this.addWithdrawDepo = addWithdrawDepo; + } + + public BigDecimal getCloseQuantity() { + return closeQuantity; + } + + public void setCloseQuantity(BigDecimal closeQuantity) { + this.closeQuantity = closeQuantity; + } + + public String getRemarks() { + return remarks; + } + + public void setRemarks(String remarks) { + this.remarks = remarks; + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bean/KSRepFirmDetailsReport.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bean/KSRepFirmDetailsReport.java new file mode 100644 index 000000000..ceeb88cd6 --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bean/KSRepFirmDetailsReport.java @@ -0,0 +1,95 @@ +package ru.spcex.clearing.reports.reports.bean; + +import com.opencsv.bean.CsvBindByName; +import com.opencsv.bean.CsvBindByPosition; +import com.opencsv.bean.CsvDate; + +import java.time.LocalDate; + +public class KSRepFirmDetailsReport { + @CsvBindByName(column = "FIRMID") + @CsvBindByPosition(position = 0) + private String firmId; + + @CsvBindByName(column = "PART_INN") + @CsvBindByPosition(position = 1) + private String partInn; + + @CsvBindByName(column = "PART_KPP") + @CsvBindByPosition(position = 2) + private String partKpp; + + @CsvBindByName(column = "AGREEMENT_NUMBER") + @CsvBindByPosition(position = 3) + private String agreementNumber; + + @CsvBindByName(column = "AGREEMENT_DATE") + @CsvBindByPosition(position = 4) + @CsvDate(value = "dd.MM.yyyy") + private LocalDate agreementDate; + + @CsvBindByName(column = "AGREEMENT_NAME") + @CsvBindByPosition(position = 5) + private String agreementName; + + @CsvBindByName(column = "FIRM_NAME") + @CsvBindByPosition(position = 6) + private String firmName; + + + public String getFirmId() { + return firmId; + } + + public void setFirmId(String firmId) { + this.firmId = firmId; + } + + public String getPartInn() { + return partInn; + } + + public void setPartInn(String partInn) { + this.partInn = partInn; + } + + public String getPartKpp() { + return partKpp; + } + + public void setPartKpp(String partKpp) { + this.partKpp = partKpp; + } + + public String getAgreementNumber() { + return agreementNumber; + } + + public void setAgreementNumber(String agreementNumber) { + this.agreementNumber = agreementNumber; + } + + public LocalDate getAgreementDate() { + return agreementDate; + } + + public void setAgreementDate(LocalDate agreementDate) { + this.agreementDate = agreementDate; + } + + public String getAgreementName() { + return agreementName; + } + + public void setAgreementName(String agreementName) { + this.agreementName = agreementName; + } + + public String getFirmName() { + return firmName; + } + + public void setFirmName(String firmName) { + this.firmName = firmName; + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bean/KSRepTradesReport.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bean/KSRepTradesReport.java new file mode 100644 index 000000000..7048f208a --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bean/KSRepTradesReport.java @@ -0,0 +1,149 @@ +package ru.spcex.clearing.reports.reports.bean; + + +import com.opencsv.bean.CsvBindByName; +import com.opencsv.bean.CsvBindByPosition; +import com.opencsv.bean.CsvDate; +import com.opencsv.bean.CsvNumber; + +import java.math.BigDecimal; +import java.time.Instant; + +public class KSRepTradesReport { + @CsvBindByName(column = "SESSION_ID") + @CsvBindByPosition(position = 0) + private Long sessionId; + + @CsvBindByName(column = "SESSION_DATE") + @CsvBindByPosition(position = 1) + @CsvDate(value = "dd.MM.yyyy'T'HH:mm:ss") + private Instant sessionDate; + + @CsvBindByName(column = "TR_ID") + @CsvBindByPosition(position = 2) + private Long trId; + + @CsvBindByName(column = "FIRM_ID") + @CsvBindByPosition(position = 3) + private String firmId; + + @CsvBindByName(column = "TKR") + @CsvBindByPosition(position = 4) + private Long tkr; + + @CsvBindByName(column = "CASH_LIABILITY") + @CsvBindByPosition(position = 5) + @CsvNumber(value = "#0.00", writeFormat = "#0.00") + private BigDecimal cashLiability; + + @CsvBindByName(column = "DEPO_LIABILITY") + @CsvBindByPosition(position = 6) + @CsvNumber(value = "#0.00", writeFormat = "#0.00") + private BigDecimal depoLiability; + + @CsvBindByName(column = "TRADE_NUM") + @CsvBindByPosition(position = 7) + private Long tradeNum; + + @CsvBindByName(column = "CLASS_CODE") + @CsvBindByPosition(position = 8) + private String classCode; + + @CsvBindByName(column = "TRADE_DATE") + @CsvBindByPosition(position = 9) + @CsvDate(value = "dd.MM.yyyy'T'HH:mm:ss") + private Instant tradeDate; + + @CsvBindByName(column = "STATUS") + @CsvBindByPosition(position = 10) + private String status; + + + public Long getSessionId() { + return sessionId; + } + + public void setSessionId(Long sessionId) { + this.sessionId = sessionId; + } + + public Instant getSessionDate() { + return sessionDate; + } + + public void setSessionDate(Instant sessionDate) { + this.sessionDate = sessionDate; + } + + public Long getTrId() { + return trId; + } + + public void setTrId(Long trId) { + this.trId = trId; + } + + public String getFirmId() { + return firmId; + } + + public void setFirmId(String firmId) { + this.firmId = firmId; + } + + public Long getTkr() { + return tkr; + } + + public void setTkr(Long tkr) { + this.tkr = tkr; + } + + public BigDecimal getCashLiability() { + return cashLiability; + } + + public void setCashLiability(BigDecimal cashLiability) { + this.cashLiability = cashLiability; + } + + public BigDecimal getDepoLiability() { + return depoLiability; + } + + public void setDepoLiability(BigDecimal depoLiability) { + this.depoLiability = depoLiability; + } + + public Long getTradeNum() { + return tradeNum; + } + + public void setTradeNum(Long tradeNum) { + this.tradeNum = tradeNum; + } + + public String getClassCode() { + return classCode; + } + + public void setClassCode(String classCode) { + this.classCode = classCode; + } + + public Instant getTradeDate() { + return tradeDate; + } + + public void setTradeDate(Instant tradeDate) { + this.tradeDate = tradeDate; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bean/UnfulfilledDealReport.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bean/UnfulfilledDealReport.java index f50e2540b..431468e70 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bean/UnfulfilledDealReport.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bean/UnfulfilledDealReport.java @@ -3,37 +3,34 @@ package ru.spcex.clearing.reports.reports.bean; import com.opencsv.bean.CsvBindByName; import com.opencsv.bean.CsvBindByPosition; import com.opencsv.bean.CsvDate; -import com.opencsv.bean.CsvNumber; -import java.math.BigDecimal; import java.time.LocalDate; public class UnfulfilledDealReport { - @CsvBindByName(column = "securityId") + @CsvBindByName(column = "SECURITYID") @CsvBindByPosition(position = 0) - @CsvNumber("#0") - private BigDecimal securityId; + private Long securityId; - @CsvBindByName(column = "tradeNo") + @CsvBindByName(column = "TRADENO") @CsvBindByPosition(position = 1) private Long tradeNo; - @CsvBindByName(column = "tradeDate") + @CsvBindByName(column = "TRADEDATE") @CsvBindByPosition(position = 2) @CsvDate(value = "dd.MM.yyyy") private LocalDate tradeDate; - @CsvBindByName(column = "settleCode") + @CsvBindByName(column = "SETTLECODE") @CsvBindByPosition(position = 3) private String settleCode; - public BigDecimal getSecurityId() { + public Long getSecurityId() { return securityId; } - public void setSecurityId(BigDecimal securityId) { + public void setSecurityId(Long securityId) { this.securityId = securityId; } @@ -60,4 +57,5 @@ public class UnfulfilledDealReport { public void setSettleCode(String settleCode) { this.settleCode = settleCode; } + } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilderCommon.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilderCommon.java index cf140fdf0..e788bc39b 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilderCommon.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilderCommon.java @@ -5,21 +5,20 @@ import ru.clearing.classes.statics.data.execution.ExecutionFond; import ru.clearing.classes.statics.data.misc.STrades; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.reports.reports.CSVReportBuilder; +import ru.spcex.clearing.reports.reports.bean.ExecutedDealReport; import ru.spcex.platform.enumeration.ReportBuilderType; import ru.spcex.platform.enumeration.WorkflowStatus; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; import java.math.RoundingMode; -import java.time.LocalDate; -import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Map; -public abstract class ExecutedDealReportBuilderCommon extends CSVReportBuilder { +public abstract class ExecutedDealReportBuilderCommon

extends CSVReportBuilder { protected final DateTimeFormatter fileNameDateTimeFormatter = DateTimeFormatter.ofPattern("yyMMddHHmmssSSS"); protected final Imdg executionFondImdg; private final Imdg companyImdg; @@ -29,7 +28,7 @@ public abstract class ExecutedDealReportBuilderCommon extends CSVReportBuilde "securityId", "tradeNo", "tradeDate", "tradeTime", "settleDate", "settleCode", "price", "quanity", "value" }; - private List lines = null; + private List lines = null; public ExecutedDealReportBuilderCommon(ImdgProvider imdgProvider) { this.executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class); @@ -38,12 +37,7 @@ public abstract class ExecutedDealReportBuilderCommon extends CSVReportBuilde } @Override - public String[] getHeaders() { - return headers; - } - - @Override - protected List getLines() { + protected List getRows() { return lines; } @@ -52,10 +46,15 @@ public abstract class ExecutedDealReportBuilderCommon extends CSVReportBuilde return ReportBuilderType.EXECUTED_DEAL_REPORT; } - protected abstract Collection getExecutionFondsForReport(T params); + @Override + public Class getReportClass() { + return ExecutedDealReport.class; + } + + protected abstract Collection getExecutionFondsForReport(P params); @Override - protected void collect(T params) { + protected void collect(P params) { Collection executionFonds = getExecutionFondsForReport(params); lines = new ArrayList<>(executionFonds.size()); @@ -73,41 +72,20 @@ public abstract class ExecutedDealReportBuilderCommon extends CSVReportBuilde ) ); } + ExecutedDealReport executedDealReport = new ExecutedDealReport(); - String securityId = String.valueOf(executionFond.getSecuritySymbol()); - String tradeNo = String.valueOf(executionFond.getExchangeExecutionId()); - String tradeDate = ""; - String tradeTime = ""; - String settleDate = ""; - if (executionFond.getTradingDate() != null) { - tradeDate = dateFormatter.format(executionFond.getTradingDate()); - } - if (executionFond.getExchangeExecutionTime() != null) { - tradeTime = dateFormatter.format(LocalDate.ofInstant(executionFond.getExchangeExecutionTime(), ZoneId.systemDefault())); - } - if (executionFond.getSettlementDate() != null) { - settleDate = dateFormatter.format(executionFond.getSettlementDate()); - } - String settleCode = sTrade != null ? sTrade.getSettleCode() : ""; - String quantity = executionFond.getQuantity() != null ? String.valueOf(executionFond.getQuantity()) : ""; - String value = executionFond.getSettlementAmount() != null ? String.valueOf(executionFond.getSettlementAmount()) : ""; - String price = ""; - if (executionFond.getSettlementAmount() != null && executionFond.getQuantity() != null) { - price = String.valueOf(executionFond.getSettlementAmount().divide(executionFond.getQuantity(), RoundingMode.HALF_UP)); - } + executedDealReport.setSecurityId(executionFond.getSecuritySymbol()); + executedDealReport.setTradeNo(executionFond.getExchangeExecutionId()); + executedDealReport.setTradeDate(executionFond.getTradingDate()); + executedDealReport.setTradeTime(executionFond.getExchangeExecutionTime()); + executedDealReport.setSettleDate(executionFond.getSettlementDate()); + executedDealReport.setSettleCode(sTrade != null ? sTrade.getSettleCode() : ""); + executedDealReport.setQuantity(executionFond.getQuantity()); + executedDealReport.setValue(executionFond.getSettlementAmount()); + if (executionFond.getSettlementAmount() != null && executionFond.getQuantity() != null) + executedDealReport.setPrice(executionFond.getSettlementAmount().divide(executionFond.getQuantity(), RoundingMode.HALF_UP)); - int valueIdx = 0; - String[] line = new String[getHeaders().length]; - line[valueIdx++] = securityId; - line[valueIdx++] = tradeNo; - line[valueIdx++] = tradeDate; - line[valueIdx++] = tradeTime; - line[valueIdx++] = settleDate; - line[valueIdx++] = settleCode; - line[valueIdx++] = price; - line[valueIdx++] = quantity; - line[valueIdx++] = value; - lines.add(line); + lines.add(executedDealReport); } catch (Throwable e) { log.error("Can't create report row for execution_fond (id = %d), skipped".formatted(executionFond.getId()), e); } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_1.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_1.java index 19071be95..2f7992784 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_1.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_1.java @@ -26,7 +26,7 @@ public class ExecutedDealReportBuilder_INFTYPE_1 extends ExecutedDealReportBuild } @Override - public Class getParamsType() { + public Class getParamsClass() { return SessionIdParam.class; } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_2.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_2.java index 0b7e667a6..fd00bbcfc 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_2.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_2.java @@ -26,7 +26,7 @@ public class ExecutedDealReportBuilder_INFTYPE_2 extends ExecutedDealReportBuild } @Override - public Class getParamsType() { + public Class getParamsClass() { return SessionIdParam.class; } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_3.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_3.java index 58eef1888..6c6f4b7de 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_3.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_3.java @@ -26,7 +26,7 @@ public class ExecutedDealReportBuilder_INFTYPE_3 extends ExecutedDealReportBuild } @Override - public Class getParamsType() { + public Class getParamsClass() { return SessionIdParam.class; } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_4.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_4.java index 62776a52d..0eb536efe 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_4.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_4.java @@ -27,7 +27,7 @@ public class ExecutedDealReportBuilder_INFTYPE_4 extends ExecutedDealReportBuild } @Override - public Class getParamsType() { + public Class getParamsClass() { return SessionIdParam.class; } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/LiabilitiesClaimsReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/LiabilitiesClaimsReportBuilder.java deleted file mode 100644 index 0fde3a277..000000000 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/LiabilitiesClaimsReportBuilder.java +++ /dev/null @@ -1,296 +0,0 @@ -package ru.spcex.clearing.reports.reports.bp; - -import ru.clearing.classes.statics.data.company.Company; -import ru.clearing.classes.statics.data.execution.ExecutionCommon; -import ru.clearing.classes.statics.data.execution.ExecutionDeposit; -import ru.clearing.classes.statics.data.execution.ExecutionFond; -import ru.clearing.classes.statics.data.instrument.issue.FixedIncomeSecurity; -import ru.clearing.classes.statics.data.misc.Listing; -import ru.clearing.classes.statics.data.registry.Registry; -import ru.clearing.classes.statics.data.registry.TradingClearingRegistry; -import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.reports.reports.CSVReportBuilder; -import ru.spcex.platform.enumeration.Allowed; -import ru.spcex.platform.enumeration.Market; -import ru.spcex.platform.enumeration.Side; -import ru.spcex.platform.enumeration.WorkflowStatus; -import ru.spcex.platform.imdg.api.Imdg; -import ru.spcex.platform.imdg.api.ImdgProvider; - -import java.math.RoundingMode; -import java.time.LocalDate; -import java.time.LocalTime; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Map; - -// todo check typo -public abstract class LiabilitiesClaimsReportBuilder

extends CSVReportBuilder

{ - protected final Imdg executionFondImdg; - protected final Imdg executionDepositImdg; - protected final Imdg companyImdg; - protected final Imdg registryImdg; - protected final Imdg

listingImdg; - protected final Imdg fixedIncomeSecurityImdg; - protected final Imdg tradingClearingRegistryImdg; - - protected final String[] headers = { - "id", "doc_date", "doc_time", "doc_name", "doc_type", "clearingHouse", "firmId", "firName", "session_id", - "clearing_date", "clearing_time", "trdAccId", "account", "depo_account", "currency", "tr_id", "securityId", - "tr_buySell", "tr_date", "tr_execDate", "exec_status", "repaym_date", "tr_price", "nominal", "lot_value", - "tr_lot", "tr_quantity", "tr_value", "tr_accruedint", "accruedint", "tr_clrComm", "tr_exhComm", "cash_liability", - "depo_liability", "cash_netto", "depo_netto" - }; - protected List lines = null; - - public LiabilitiesClaimsReportBuilder(ImdgProvider imdgProvider) { - this.executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class); - this.executionDepositImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionDeposit, ExecutionDeposit.class); - this.companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); - this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); - this.listingImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Listing, Listing.class); - this.fixedIncomeSecurityImdg = imdgProvider.getImdg( - IMDGDistributedNames.Map_FixedIncomeSecurity, FixedIncomeSecurity.class - ); - this.tradingClearingRegistryImdg = imdgProvider.getImdg( - IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class - ); - } - - @Override - public String[] getHeaders() { - return headers; - } - - @Override - protected List getLines() { - return lines; - } - - protected abstract Collection getExecutionFondsForReport(P params); - - protected abstract Collection getExecutionDepositsForReport(P params); - - @Override - protected void collect(P params) { - Collection executionFonds = getExecutionFondsForReport(params); - Collection executionDeposits = getExecutionDepositsForReport(params); - - List executions = new ArrayList<>(executionFonds.size() + executionDeposits.size()); - executions.addAll(executionFonds); - executions.addAll(executionDeposits); - - Company clearingHouseCompany = companyImdg.getSingleObjectByID(1L); - String clearingHouse = clearingHouseCompany.getFullName(); - - LocalDate nowDate = LocalDate.now(); - LocalTime nowTime = LocalTime.now(); - - lines = new ArrayList<>(executions.size()); - long reportRowId = 0L; - for (ExecutionCommon execution : executions) { - try { - Company company = companyImdg.getSingleObjectByID(execution.getCompanyId()); - if (!WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus())) continue; - - if (execution.getSessionId() == null) { - log.warn("On Execution[{}] sessionId was null. Skip in report.", execution.getId()); - continue; - } - Registry registry = null; - if (execution.getCompanyId() != null) { - registry = registryImdg.getSingleObjectByFieldValues(Map.of("companyId", execution.getCompanyId())); - } - Collection registriesForSessionId = null; - if (execution.getSessionId() != null) { - registriesForSessionId = registryImdg.getCollectionObjectsByFieldValues( - Map.of("sessionId", execution.getSessionId()) - ); - } - Listing listing = null; - FixedIncomeSecurity fixedIncomeSecurity = null; - if (execution.getSecurityId() != null) { - listing = listingImdg.getSingleObjectByFieldValues(Map.of("securityId", execution.getSecurityId())); - fixedIncomeSecurity = fixedIncomeSecurityImdg.getSingleObjectByFieldValues( - Map.of("securityId", execution.getSecurityId()) - ); - } - TradingClearingRegistry tradingClearingRegistry = tradingClearingRegistryImdg.getSingleObjectByID( - execution.getTradingClearingRegistryId() - ); - - if (registry == null) { - log.warn("registry not found for companyId={}", execution.getCompanyId()); - } - - String id = String.valueOf(reportRowId++); - String docDate = dateFormatter.format(nowDate); - String docTime = timeFormatter.format(nowTime); - String docName = "Отчет об обязательствах/требованиях Участника клиринга"; - String docType = "KS_FIRMID_LIABILITIES"; - String firmId = String.valueOf(execution.getCompanyId()); - String firName = company.getFullName(); - String sessionId = String.valueOf(execution.getSessionId()); - String clearingDate = dateFormatter.format(execution.getClearingDate()); - String clearingTime = dateFormatter.format(execution.getClearingDate()); - String trdAccId = registry == null ? null : registry.getTradingClearingRegistry(); - String account = String.valueOf(tradingClearingRegistry.getMoneyAccountId()); - String depoAccount = String.valueOf(tradingClearingRegistry.getDepoAccountId()); - String currency = execution.getSettlementCurrency(); - String trId = String.valueOf(execution.getExchangeExecutionId()); - String securityId = String.valueOf(execution.getSecurityId()); - - String trBuySell = ""; - if (Side.BUY.equalsByKey(execution.getSide())) - trBuySell = "B"; - else if (Side.SELL.equalsByKey(execution.getSide())) - trBuySell = "S"; - String trDate = dateFormatter.format(execution.getTradingDate()); - - String trExecDate = ""; - String execStatus = ""; - String repaymDate = ""; - String trPrice = ""; - String nominal = ""; - String trQuantity = ""; - String trValue = ""; - String trAccruedInt = ""; - String accruedInt = ""; - String cashLiability = ""; - String depoLiability = ""; - if (execution instanceof ExecutionDeposit executionDeposit) { - trExecDate = dateFormatter.format(executionDeposit.getSecondLegSettlementDate()); - if (Market.mkrs.equalsByKey(execution.getMarket())) { - - String coverageStatus = executionDeposit.getCoverageStatus(); - if (Allowed.ALLOWED.equalsByKey(coverageStatus)) execStatus = "Y"; - else if (Allowed.DENIED.equalsByKey(coverageStatus)) execStatus = "N"; - else execStatus = "W"; - - repaymDate = dateFormatter.format(executionDeposit.getSecondLegSettlementDate()); - trPrice = String.valueOf(executionDeposit.getPrice()); - trValue = String.valueOf(executionDeposit.getFirstLegAmount()); - cashLiability = String.valueOf(executionDeposit.getFirstLegAmount()); - } - } else if (execution instanceof ExecutionFond executionFond) { - trExecDate = dateFormatter.format(executionFond.getSettlementDate()); - if (Market.fond.equalsByKey(execution.getMarket())) { - if (executionFond.getSettlementAmount() != null && executionFond.getQuantity() != null) { - trPrice = String.valueOf( - executionFond.getSettlementAmount().divide(executionFond.getQuantity(), RoundingMode.HALF_UP) - ); - } - trQuantity = String.valueOf(executionFond.getQuantity()); - if (fixedIncomeSecurity != null) { - nominal = String.valueOf(fixedIncomeSecurity.getNominalValue()); - if (executionFond.getQuantity() != null) { - accruedInt = String.valueOf( - fixedIncomeSecurity.getCoupon().divide(executionFond.getQuantity(), RoundingMode.HALF_UP) - ); - } - trAccruedInt = String.valueOf(fixedIncomeSecurity.getCoupon()); - } - trValue = String.valueOf(executionFond.getSettlementAmount()); - cashLiability = String.valueOf(executionFond.getSettlementAmount()); - depoLiability = String.valueOf(executionFond.getQuantity()); - } - } - - String lotValue = ""; - if (listing != null) { - lotValue = String.valueOf(listing.getLotSize()); - } - String trLot = String.valueOf(execution.getLots()); - String trClrComm = ""; - String trExhComm = ""; - - Registry tm_tRegistry = null; - Registry om_tRegistry = null; - Registry ts_tRegistry = null; - Registry os_tRegistry = null; - if (registriesForSessionId != null) { - for (Registry currRegistry : registriesForSessionId) { - String registryCode = currRegistry.getRegistryCode(); - if (registryCode.endsWith("T")) { - if (registryCode.startsWith("TM")) { - if (tm_tRegistry != null && tm_tRegistry.getUpdated().isAfter(currRegistry.getUpdated())) - continue; - tm_tRegistry = currRegistry; - } - if (registryCode.startsWith("OM")) { - if (om_tRegistry != null && om_tRegistry.getUpdated().isAfter(currRegistry.getUpdated())) - continue; - om_tRegistry = currRegistry; - } - if (registryCode.startsWith("TS")) { - if (ts_tRegistry != null && ts_tRegistry.getUpdated().isAfter(currRegistry.getUpdated())) - continue; - ts_tRegistry = currRegistry; - } - if (registryCode.startsWith("OS")) { - if (os_tRegistry != null && os_tRegistry.getUpdated().isAfter(currRegistry.getUpdated())) - continue; - os_tRegistry = currRegistry; - } - } - } - } - String cashNetto = ""; - if (tm_tRegistry != null && om_tRegistry != null) { - cashNetto = String.valueOf(tm_tRegistry.getBalance().subtract(om_tRegistry.getBalance())); - } - - String depoNetto = ""; - if (ts_tRegistry != null && os_tRegistry != null) { - depoNetto = String.valueOf(ts_tRegistry.getBalance().subtract(os_tRegistry.getBalance())); - } - - - int valueIdx = 0; - String[] line = new String[getHeaders().length]; - line[valueIdx++] = id; - line[valueIdx++] = docDate; - line[valueIdx++] = docTime; - line[valueIdx++] = docName; - line[valueIdx++] = docType; - line[valueIdx++] = clearingHouse; - line[valueIdx++] = firmId; - line[valueIdx++] = firName; - line[valueIdx++] = sessionId; - line[valueIdx++] = clearingDate; - line[valueIdx++] = clearingTime; - line[valueIdx++] = trdAccId; - line[valueIdx++] = account; - line[valueIdx++] = depoAccount; - line[valueIdx++] = currency; - line[valueIdx++] = trId; - line[valueIdx++] = securityId; - line[valueIdx++] = trBuySell; - line[valueIdx++] = trDate; - line[valueIdx++] = trExecDate; - line[valueIdx++] = execStatus; - line[valueIdx++] = repaymDate; - line[valueIdx++] = trPrice; - line[valueIdx++] = nominal; - line[valueIdx++] = lotValue; - line[valueIdx++] = trLot; - line[valueIdx++] = trQuantity; - line[valueIdx++] = trValue; - line[valueIdx++] = trAccruedInt; - line[valueIdx++] = accruedInt; - line[valueIdx++] = trClrComm; - line[valueIdx++] = trExhComm; - line[valueIdx++] = cashLiability; - line[valueIdx++] = depoLiability; - line[valueIdx++] = cashNetto; - line[valueIdx] = depoNetto; - lines.add(line); - } catch (Throwable e) { - log.error("Can't create report row for execution (id = %d), skipped".formatted(execution.getId()), e); - } - } - - } - -} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/MoneyChangeReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/MoneyChangeReportBuilder.java deleted file mode 100644 index e1a4baf1f..000000000 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/MoneyChangeReportBuilder.java +++ /dev/null @@ -1,163 +0,0 @@ -package ru.spcex.clearing.reports.reports.bp; - -import ru.clearing.classes.statics.data.company.Company; -import ru.clearing.classes.statics.data.misc.Listing; -import ru.clearing.classes.statics.data.payment.PaymentInstruction; -import ru.clearing.classes.statics.data.registry.Registry; -import ru.clearing.classes.statics.data.statement.Statement; -import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.reports.reports.CSVReportBuilder; -import ru.spcex.platform.enumeration.InOutDirection; -import ru.spcex.platform.enumeration.WorkflowStatus; -import ru.spcex.platform.imdg.api.Imdg; -import ru.spcex.platform.imdg.api.ImdgProvider; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.LocalTime; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Map; - -public abstract class MoneyChangeReportBuilder

extends CSVReportBuilder

{ - protected final Imdg registryImdg; - protected final Imdg companyImdg; - protected final Imdg

listingImdg; - protected final Imdg statementImdg; - protected final Imdg paymentInstructionImdg; - protected final String[] headers = { - "id", "doc_date", "doc_time", "doc_name", "doc_type", "clearingHouse", "firmId", "firName", "trdAccId", - "account", "currency", "registry_code", "registry_name", "open_balance", "change_balance", "add_withdraw", - "close_balance", "remarks", "add_sum", "add_time", "withdraw_sum", "withdraw_time" - }; - - protected List lines = null; - - public MoneyChangeReportBuilder(ImdgProvider imdgProvider) { - this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); - this.companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); - this.listingImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Listing, Listing.class); - this.statementImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Statement, Statement.class); - this.paymentInstructionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_PaymentInstruction, PaymentInstruction.class); - } - - @Override - public String[] getHeaders() { - return headers; - } - - @Override - protected List getLines() { - return lines; - } - - protected abstract Collection getRegistryForReport(P param); - - @Override - protected void collect(P params) { - Collection registries = getRegistryForReport(params); - - Company clearingHouseCompany = companyImdg.getSingleObjectByID(1L); - String clearingHouse = clearingHouseCompany.getFullName(); - - LocalDate nowDate = LocalDate.now(); - LocalTime nowTime = LocalTime.now(); - lines = new ArrayList<>(registries.size()); - long reportRowId = 0L; - for (Registry registry : registries) { - try { - Company company = companyImdg.getSingleObjectByID(registry.getCompanyId()); - if (!WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus())) continue; - - Listing listing = null; - if (registry.getSecurityId() != null) { - listing = listingImdg.getSingleObjectByFieldValues(Map.of("securityId", registry.getSecurityId())); - } - - Statement statement = null; - if (registry.getCompanyId() != null) { - statement = statementImdg.getSingleObjectByFieldValues(Map.of("addresseeId", registry.getCompanyId())); - } - - PaymentInstruction paymentInstruction = null; - if (registry.getPaymentId() != null) { - paymentInstruction = paymentInstructionImdg.getSingleObjectByFieldValues( - Map.of( - "id", registry.getPaymentId(), - "creditLeg_direction", InOutDirection.out.getKey() - ) - ); - } - - String id = String.valueOf(reportRowId++); - String docDate = dateFormatter.format(nowDate); - String docTime = timeFormatter.format(nowTime); - String docName = "Отчет об изменении суммы денежных средств и (или) количества иного имущества Участника клиринга"; - String docType = "KS_FIRMID_ASSETS"; - String firmId = String.valueOf(registry.getCompanyId()); - String firName = company.getFullName(); - String trdAccId = registry.getTradingClearingRegistry(); - String account = String.valueOf(registry.getAccountId()); - String currency = listing != null ? listing.getTradingCurrency() : ""; - String registryCode = String.valueOf(registry.getId()); - String registryName = registry.getRegistryCode(); - String openBalance = String.valueOf(registry.getOpenBalance()); - String changeBalance = ""; - if (registry.getCloseBalance() != null && registry.getOpenBalance() != null) { - changeBalance = String.valueOf(registry.getCloseBalance().subtract(registry.getOpenBalance())); - } - String addWithdraw = ""; - if (registry.getCredit() != null) { - if (registry.getDebit() != null) { - addWithdraw = String.valueOf(registry.getCredit().subtract(registry.getDebit())); - } else addWithdraw = String.valueOf(registry.getCredit()); - } - String closeBalance = String.valueOf(registry.getCloseBalance()); - String remarks = ""; - String addSum = String.valueOf(registry.getCredit()); - String addTime = ""; - if (statement != null && statement.getCreated() != null) { - addTime = dateTimeFormatter.format(LocalDateTime.ofInstant(statement.getCreated(), ZoneId.systemDefault())); - } - String withdrawSum = String.valueOf(registry.getDebit()); - String withdrawTime = ""; - if (paymentInstruction != null) { - withdrawTime = dateTimeFormatter.format(LocalDateTime.ofInstant(paymentInstruction.getPaymentDate(), ZoneId.systemDefault())); - } else if (registry.getClearingDate() != null) { - withdrawTime = dateTimeFormatter.format(registry.getClearingDate()); - } - - int valueIdx = 0; - String[] line = new String[getHeaders().length]; - line[valueIdx++] = id; - line[valueIdx++] = docDate; - line[valueIdx++] = docTime; - line[valueIdx++] = docName; - line[valueIdx++] = docType; - line[valueIdx++] = clearingHouse; - line[valueIdx++] = firmId; - line[valueIdx++] = firName; - line[valueIdx++] = trdAccId; - line[valueIdx++] = account; - line[valueIdx++] = currency; - line[valueIdx++] = registryCode; - line[valueIdx++] = registryName; - line[valueIdx++] = openBalance; - line[valueIdx++] = changeBalance; - line[valueIdx++] = addWithdraw; - line[valueIdx++] = closeBalance; - line[valueIdx++] = remarks; - line[valueIdx++] = addSum; - line[valueIdx++] = addTime; - line[valueIdx++] = withdrawSum; - line[valueIdx++] = withdrawTime; - lines.add(line); - } catch (Throwable e) { - log.error("Can't create report row for registry (id = %d), skipped".formatted(registry.getId()), e); - } - } - } - -} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalLiabilitiesClaimsReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalLiabilitiesClaimsReportBuilder.java deleted file mode 100644 index 379278bbd..000000000 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalLiabilitiesClaimsReportBuilder.java +++ /dev/null @@ -1,53 +0,0 @@ -package ru.spcex.clearing.reports.reports.bp; - -import org.springframework.beans.factory.config.ConfigurableBeanFactory; -import org.springframework.context.annotation.Scope; -import org.springframework.stereotype.Component; -import ru.clearing.classes.statics.data.execution.ExecutionDeposit; -import ru.clearing.classes.statics.data.execution.ExecutionFond; -import ru.spcex.clearing.reports.reports.SessionIdParam; -import ru.spcex.platform.enumeration.ReportBuilderType; -import ru.spcex.platform.imdg.api.ImdgProvider; - -import java.time.LocalDateTime; -import java.util.Collection; -import java.util.Map; - -@Component -@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON) -public class OperationalLiabilitiesClaimsReportBuilder extends LiabilitiesClaimsReportBuilder { - public OperationalLiabilitiesClaimsReportBuilder(ImdgProvider imdgProvider) { - super(imdgProvider); - } - - @Override - protected Collection getExecutionFondsForReport(SessionIdParam params) { - return executionFondImdg.getCollectionObjectsByFieldValues( - Map.of("sessionId", params.getSessionId()) - ); - } - - @Override - protected Collection getExecutionDepositsForReport(SessionIdParam params) { - return executionDepositImdg.getCollectionObjectsByFieldValues( - Map.of("sessionId", params.getSessionId()) - ); - } - - @Override - protected String getReportFilename(SessionIdParam params) { - return "operational_liabilities_claims.%s".formatted( - dateTimeFormatter.format(LocalDateTime.now()) - ); - } - - @Override - public ReportBuilderType getReportType() { - return ReportBuilderType.OPERATIONAL_LIABILITIES_CLAIMS; - } - - @Override - public Class getParamsType() { - return SessionIdParam.class; - } -} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalMoneyChangeReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalMoneyChangeReportBuilder.java deleted file mode 100644 index 6c9dd7964..000000000 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalMoneyChangeReportBuilder.java +++ /dev/null @@ -1,43 +0,0 @@ -package ru.spcex.clearing.reports.reports.bp; - -import org.springframework.beans.factory.config.ConfigurableBeanFactory; -import org.springframework.context.annotation.Scope; -import org.springframework.stereotype.Component; -import ru.clearing.classes.statics.data.registry.Registry; -import ru.spcex.clearing.reports.reports.SessionIdParam; -import ru.spcex.platform.enumeration.ReportBuilderType; -import ru.spcex.platform.imdg.api.ImdgProvider; - -import java.time.LocalDateTime; -import java.util.Collection; -import java.util.Map; - -@Component -@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON) -public class OperationalMoneyChangeReportBuilder extends MoneyChangeReportBuilder { - public OperationalMoneyChangeReportBuilder(ImdgProvider imdgProvider) { - super(imdgProvider); - } - - @Override - protected Collection getRegistryForReport(SessionIdParam param) { - return registryImdg.getCollectionObjectsByFieldValues( - Map.of("sessionId", param.getSessionId()) - ); - } - - @Override - protected String getReportFilename(SessionIdParam params) { - return "operational_money_change.%s".formatted(dateTimeFormatter.format(LocalDateTime.now())); - } - - @Override - public ReportBuilderType getReportType() { - return ReportBuilderType.OPERATIONAL_MONEY_CHANGE; - } - - @Override - public Class getParamsType() { - return SessionIdParam.class; - } -} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/PeriodLiabilitiesClaimsReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/PeriodLiabilitiesClaimsReportBuilder.java deleted file mode 100644 index 7e6df61fb..000000000 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/PeriodLiabilitiesClaimsReportBuilder.java +++ /dev/null @@ -1,62 +0,0 @@ -package ru.spcex.clearing.reports.reports.bp; - -import org.springframework.beans.factory.config.ConfigurableBeanFactory; -import org.springframework.context.annotation.Scope; -import org.springframework.stereotype.Component; -import ru.clearing.classes.statics.data.execution.ExecutionDeposit; -import ru.clearing.classes.statics.data.execution.ExecutionFond; -import ru.spcex.clearing.reports.reports.SessionIdListParams; -import ru.spcex.platform.enumeration.ReportBuilderType; -import ru.spcex.platform.imdg.api.ImdgProvider; -import ru.spcex.platform.imdg.api.predicate.ImdgPredicate; -import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.util.Collection; -import java.util.Collections; - -@Component -@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON) -public class PeriodLiabilitiesClaimsReportBuilder extends LiabilitiesClaimsReportBuilder { - - public PeriodLiabilitiesClaimsReportBuilder(ImdgProvider imdgProvider) { - super(imdgProvider); - } - - @Override - protected String getReportFilename(SessionIdListParams params) { - return "period_liabilities_claims.%s".formatted(dateTimeFormatter.format(LocalDateTime.now())); - } - - @Override - public ReportBuilderType getReportType() { - return ReportBuilderType.PERIOD_LIABILITIES_CLAIMS; - } - - @Override - public Class getParamsType() { - return SessionIdListParams.class; - } - - @Override - protected Collection getExecutionFondsForReport(SessionIdListParams params) { - if (params.getSessionIdList() == null || params.getSessionIdList().isEmpty()) return Collections.emptyList(); - ImdgPredicateBuilder pb = executionFondImdg.predicateBuilder(); - // todo OR - временное решение. В изначальном плане была передача списка id сессий, но теперь нужно делать на текущий день - // пока не определятся, что именно им нужно - остается OR, в дальнейшем предикат будет правиться - ImdgPredicate predicate = pb.or( - pb.in("sessionId", params.getSessionIdList().toArray(new Long[0])), - pb.equals("clearingDate", LocalDate.now()) - ); - return executionFondImdg.getCollectionObjectsByPredicate(predicate); - } - - @Override - protected Collection getExecutionDepositsForReport(SessionIdListParams params) { - if (params.getSessionIdList() == null || params.getSessionIdList().isEmpty()) return Collections.emptyList(); - return executionDepositImdg.getCollectionObjectsByPredicate( - executionDepositImdg.predicateBuilder().in("sessionId", params.getSessionIdList().toArray(new Long[0])) - ); - } -} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/PeriodMoneyChangeReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/PeriodMoneyChangeReportBuilder.java deleted file mode 100644 index ecc463cd3..000000000 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/PeriodMoneyChangeReportBuilder.java +++ /dev/null @@ -1,57 +0,0 @@ -package ru.spcex.clearing.reports.reports.bp; - -import org.springframework.beans.factory.config.ConfigurableBeanFactory; -import org.springframework.context.annotation.Scope; -import org.springframework.stereotype.Component; -import ru.clearing.classes.statics.data.registry.Registry; -import ru.spcex.clearing.reports.reports.PeriodParams; -import ru.spcex.platform.enumeration.RegistryTradingParams; -import ru.spcex.platform.enumeration.ReportBuilderType; -import ru.spcex.platform.imdg.api.ImdgProvider; -import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; -import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder; - -import java.time.LocalDateTime; -import java.util.Collection; - -@Component -@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON) -public class PeriodMoneyChangeReportBuilder extends MoneyChangeReportBuilder { - - public PeriodMoneyChangeReportBuilder(ImdgProvider imdgProvider) { - super(imdgProvider); - } - - @Override - protected Collection getRegistryForReport(PeriodParams params) { - ImdgPredicateBuilder pb = registryImdg.predicateBuilder(); - String sql = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.CM__, RegistryTradingParams.LM__).build(); - return registryImdg.getCollectionObjectsByPredicate( - pb.and( - pb.sql(sql), - pb.greatEqual("clearingDate", params.getStartDate()), - pb.lessEqual("clearingDate", params.getEndDate()) - ) - ); - } - - @Override - public String getReportFilename(PeriodParams params) { - return "period_money_change.%s-%s.%s".formatted( - dateFormatter.format(params.getStartDate()), - dateFormatter.format(params.getEndDate()), - dateTimeFormatter.format(LocalDateTime.now()) - ); - } - - @Override - public ReportBuilderType getReportType() { - return ReportBuilderType.PERIOD_MONEY_CHANGE; - } - - @Override - public Class getParamsType() { - return PeriodParams.class; - } - -} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummaryLiabilitiesClaimsReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummaryLiabilitiesClaimsReportBuilder.java deleted file mode 100644 index 79160db56..000000000 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummaryLiabilitiesClaimsReportBuilder.java +++ /dev/null @@ -1,54 +0,0 @@ -package ru.spcex.clearing.reports.reports.bp; - -import org.springframework.beans.factory.config.ConfigurableBeanFactory; -import org.springframework.context.annotation.Scope; -import org.springframework.stereotype.Component; -import ru.clearing.classes.statics.data.execution.ExecutionDeposit; -import ru.clearing.classes.statics.data.execution.ExecutionFond; -import ru.spcex.clearing.reports.reports.EmptyParams; -import ru.spcex.platform.enumeration.ReportBuilderType; -import ru.spcex.platform.imdg.api.ImdgProvider; -import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.util.Collection; - -@Component -@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON) -public class SummaryLiabilitiesClaimsReportBuilder extends LiabilitiesClaimsReportBuilder { - public SummaryLiabilitiesClaimsReportBuilder(ImdgProvider imdgProvider) { - super(imdgProvider); - } - - @Override - protected Collection getExecutionFondsForReport(EmptyParams params) { - // todo Временное решение. В изначальном плане была передача списка id сессий, но теперь нужно делать на текущий день - // пока не определятся, что именно им нужно - остается OR, в дальнейшем предикат будет правиться - ImdgPredicateBuilder pb = executionFondImdg.predicateBuilder(); - return executionFondImdg.getCollectionObjectsByPredicate(pb.equals("clearingDate", LocalDate.now())); - } - - @Override - protected Collection getExecutionDepositsForReport(EmptyParams params) { - // todo Временное решение. В изначальном плане была передача списка id сессий, но теперь нужно делать на текущий день - // пока не определятся, что именно им нужно - остается OR, в дальнейшем предикат будет правиться - ImdgPredicateBuilder pb = executionDepositImdg.predicateBuilder(); - return executionDepositImdg.getCollectionObjectsByPredicate(pb.equals("clearingDate", LocalDate.now())); - } - - @Override - protected String getReportFilename(EmptyParams params) { - return "summary_liabilities_claims.%s".formatted(dateTimeFormatter.format(LocalDateTime.now())); - } - - @Override - public ReportBuilderType getReportType() { - return ReportBuilderType.SUMMARY_LIABILITIES_CLAIMS; - } - - @Override - public Class getParamsType() { - return EmptyParams.class; - } -} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummaryMoneyChangeReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummaryMoneyChangeReportBuilder.java deleted file mode 100644 index 2cd6fad68..000000000 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummaryMoneyChangeReportBuilder.java +++ /dev/null @@ -1,56 +0,0 @@ -package ru.spcex.clearing.reports.reports.bp; - -import org.springframework.beans.factory.config.ConfigurableBeanFactory; -import org.springframework.context.annotation.Scope; -import org.springframework.stereotype.Component; -import ru.clearing.classes.statics.data.registry.Registry; -import ru.spcex.clearing.reports.reports.EmptyParams; -import ru.spcex.platform.enumeration.RegistryTradingParams; -import ru.spcex.platform.enumeration.ReportBuilderType; -import ru.spcex.platform.imdg.api.ImdgProvider; -import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; -import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.util.Collection; - -@Component -@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON) -public class SummaryMoneyChangeReportBuilder extends MoneyChangeReportBuilder { - public SummaryMoneyChangeReportBuilder(ImdgProvider imdgProvider) { - super(imdgProvider); - } - - @Override - protected Collection getRegistryForReport(EmptyParams param) { - // todo отсечение по периоду - временный код, пока не решили как передавать в GREP период. - // по изначальной задумке в summary отчет должны включаться все записи. - String sql = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.CM__, RegistryTradingParams.LM__).build(); - ImdgPredicateBuilder pb = registryImdg.predicateBuilder(); - LocalDate now = LocalDate.now(); - return registryImdg.getCollectionObjectsByPredicate( - pb.and( - pb.sql(sql), - pb.greatEqual("clearingDate", now), - pb.lessEqual("clearingDate", now) - ) - ); - } - - @Override - protected String getReportFilename(EmptyParams params) { - return "summary_money_change.%s".formatted(dateTimeFormatter.format(LocalDateTime.now())); - } - - @Override - public ReportBuilderType getReportType() { - return ReportBuilderType.SUMMARY_MONEY_CHANGE; - } - - @Override - public Class getParamsType() { - return EmptyParams.class; - } - -} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/UnfulfilledDealReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/UnfulfilledDealReportBuilder.java index c4041ae26..0f21045ad 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/UnfulfilledDealReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/UnfulfilledDealReportBuilder.java @@ -9,6 +9,7 @@ import ru.clearing.classes.statics.data.misc.STrades; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.reports.reports.CSVReportBuilder; import ru.spcex.clearing.reports.reports.SessionIdParam; +import ru.spcex.clearing.reports.reports.bean.UnfulfilledDealReport; import ru.spcex.platform.enumeration.Allowed; import ru.spcex.platform.enumeration.ReportBuilderType; import ru.spcex.platform.enumeration.WorkflowStatus; @@ -18,18 +19,17 @@ import ru.spcex.platform.imdg.api.predicate.ImdgPredicate; import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; import java.time.LocalDateTime; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; @Component @Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON) -public class UnfulfilledDealReportBuilder extends CSVReportBuilder { +public class UnfulfilledDealReportBuilder extends CSVReportBuilder { private final Imdg executionFondImdg; private final Imdg companyImdg; private final Imdg sTradesImdg; - private final String[] headers = { - "securityId", "tradeNo", "tradeDate", "settleCode" - }; - private List lines = null; public UnfulfilledDealReportBuilder(ImdgProvider imdgProvider) { executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class); @@ -37,14 +37,11 @@ public class UnfulfilledDealReportBuilder extends CSVReportBuilder rows = null; @Override - protected List getLines() { - return lines; + protected List getRows() { + return rows; } @Override @@ -58,10 +55,15 @@ public class UnfulfilledDealReportBuilder extends CSVReportBuilder getParamsType() { + public Class getParamsClass() { return SessionIdParam.class; } + @Override + public Class getReportClass() { + return UnfulfilledDealReport.class; + } + @Override protected void collect(SessionIdParam params) { ImdgPredicateBuilder pb = executionFondImdg.predicateBuilder(); @@ -71,17 +73,11 @@ public class UnfulfilledDealReportBuilder extends CSVReportBuilder executionFonds = executionFondImdg.getCollectionObjectsByPredicate(predicate); - Map activeCompanyForId = new HashMap<>(); - lines = new ArrayList<>(executionFonds.size()); + rows = new ArrayList<>(executionFonds.size()); for (ExecutionFond executionFond : executionFonds) { try { - Boolean activeCompany = activeCompanyForId.get(executionFond.getCompanyId()); - if (activeCompany == null) { - Company company = companyImdg.getSingleObjectByID(executionFond.getCompanyId()); - activeCompany = WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus()); - activeCompanyForId.put(executionFond.getCompanyId(), activeCompany); - } - if (!activeCompany) continue; + Company company = companyImdg.getSingleObjectByID(executionFond.getCompanyId()); + if (!WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus())) continue;; STrades sTrade = sTradesImdg.getSingleObjectByFieldValues( Map.of( @@ -90,18 +86,13 @@ public class UnfulfilledDealReportBuilder extends CSVReportBuilder { - private final Imdg executionFondImdg; - private final Imdg companyImdg; - private final Imdg sTradesImdg; - - public UnfulfilledDealReportBuilder_(ImdgProvider imdgProvider) { - executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class); - companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); - sTradesImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_STrades, STrades.class); - } - - private List rows = null; - - @Override - protected List getRows() { - return rows; - } - - @Override - protected String getReportFilename(SessionIdParam params) { - return "unfulfilled_deal_report.%s".formatted(dateTimeFormatter.format(LocalDateTime.now())); - } - - @Override - public ReportBuilderType getReportType() { - return ReportBuilderType.UNFULFILLED_DEAL_REPORT; - } - - @Override - public Class getParamsClass() { - return SessionIdParam.class; - } - - @Override - public Class getReportClass() { - return UnfulfilledDealReport.class; - } - - @Override - protected void collect(SessionIdParam params) { - ImdgPredicateBuilder pb = executionFondImdg.predicateBuilder(); - ImdgPredicate predicate = pb.and( - pb.equals("sessionId", params.getSessionId()), - pb.equals("coverageStatus", Allowed.DENIED.getKey()) - ); - Collection executionFonds = executionFondImdg.getCollectionObjectsByPredicate(predicate); - - Map activeCompanyForId = new HashMap<>(); - rows = new ArrayList<>(executionFonds.size()); - for (ExecutionFond executionFond : executionFonds) { - try { - Boolean activeCompany = activeCompanyForId.get(executionFond.getCompanyId()); - if (activeCompany == null) { - Company company = companyImdg.getSingleObjectByID(executionFond.getCompanyId()); - activeCompany = WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus()); - activeCompanyForId.put(executionFond.getCompanyId(), activeCompany); - } - if (!activeCompany) continue; - - STrades sTrade = sTradesImdg.getSingleObjectByFieldValues( - Map.of( - "settleCode", executionFond.getSettlementCode(), - "operation", executionFond.getSide() - ) - ); - - UnfulfilledDealReport unfulfilledDealReport = new UnfulfilledDealReport(); - // todo replace to long (example for test) - unfulfilledDealReport.setSecurityId(BigDecimal.valueOf(executionFond.getSecurityId())); - unfulfilledDealReport.setTradeNo(executionFond.getExchangeExecutionId()); - unfulfilledDealReport.setTradeDate(executionFond.getTradingDate()); - unfulfilledDealReport.setSettleCode(sTrade != null ? sTrade.getClassCode() : null); - - rows.add(unfulfilledDealReport); - } catch (Throwable e) { - log.error("Can't create report row for execution_fond (id = %d), skipped".formatted(executionFond.getId()), e); - } - } - } - -} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepCashNettoReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepCashNettoReportBuilder.java index 549f82469..9e5b8b09a 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepCashNettoReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepCashNettoReportBuilder.java @@ -9,6 +9,7 @@ import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.reports.reports.CSVReportBuilder; import ru.spcex.clearing.reports.reports.PairRegistryId; import ru.spcex.clearing.reports.reports.SessionIdParam; +import ru.spcex.clearing.reports.reports.bean.KSRepCashNettoReport; import ru.spcex.platform.enumeration.AccountType; import ru.spcex.platform.enumeration.RegistryDesignation; import ru.spcex.platform.enumeration.RegistryTradingParams; @@ -22,20 +23,16 @@ import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder; import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; -import java.time.ZoneId; import java.util.*; import java.util.stream.Collectors; @Component @Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON) -public class KSRepCashNettoReportBuilder extends CSVReportBuilder { +public class KSRepCashNettoReportBuilder extends CSVReportBuilder { private final Imdg registryImdg; private final Imdg sessionImdg; - private final String[] headers = { - "FIRMID", "SESSION_ID", "SESSION_DATE", "ACCOUNT", "VALUE", "DATE" - }; - private List lines = null; + private List rows = null; public KSRepCashNettoReportBuilder(ImdgProvider imdgProvider) { registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); @@ -43,13 +40,8 @@ public class KSRepCashNettoReportBuilder extends CSVReportBuilder getLines() { - return lines; + protected List getRows() { + return rows; } @Override @@ -63,10 +55,15 @@ public class KSRepCashNettoReportBuilder extends CSVReportBuilder getParamsType() { + public Class getParamsClass() { return SessionIdParam.class; } + @Override + public Class getReportClass() { + return KSRepCashNettoReport.class; + } + @Override protected void collect(SessionIdParam params) { LocalDate nowDate = LocalDate.now(); @@ -87,7 +84,7 @@ public class KSRepCashNettoReportBuilder extends CSVReportBuilder registries = registryImdg.getCollectionObjectsByPredicate(finalPredicate); Map> registryMap = registries.stream().collect(Collectors.groupingBy(PairRegistryId::new)); - lines = new ArrayList<>(registryMap.size()); + rows = new ArrayList<>(registryMap.size()); for (Map.Entry> entry : registryMap.entrySet()) { PairRegistryId pairRegistryId = entry.getKey(); List groupedRegistry = entry.getValue(); @@ -119,33 +116,20 @@ public class KSRepCashNettoReportBuilder extends CSVReportBuilder { +public class KSRepCashRegisterSumsReportBuilder extends CSVReportBuilder { private final Imdg registryImdg; private final Imdg companyImdg; - private final String[] headers = { - "FIRMID", "ACCOUNT", "REGISTER_CODE", "ADD_SUM", "ADD_TIME", "ADD_DATE" - }; - private List lines = null; + private List rows = null; public KSRepCashRegisterSumsReportBuilder(ImdgProvider imdgProvider) { registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); @@ -43,13 +41,8 @@ public class KSRepCashRegisterSumsReportBuilder extends CSVReportBuilder getLines() { - return lines; + protected List getRows() { + return rows; } @Override @@ -63,10 +56,15 @@ public class KSRepCashRegisterSumsReportBuilder extends CSVReportBuilder getParamsType() { + public Class getParamsClass() { return EmptyParams.class; } + @Override + public Class getReportClass() { + return KSRepCashRegisterSumsReport.class; + } + @Override protected void collect(EmptyParams params) { LocalDate nowDate = LocalDate.now(); @@ -84,43 +82,32 @@ public class KSRepCashRegisterSumsReportBuilder extends CSVReportBuilder registries = registryImdg.getCollectionObjectsByPredicate(finalPredicate); - lines = new ArrayList<>(registries.size()); + rows = new ArrayList<>(registries.size()); for (Registry registry : registries) { try { Company company = companyImdg.getSingleObjectByID(registry.getCompanyId()); if (!WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus())) continue; - String firmId = registry.getTradingCode() != null ? registry.getTradingCode() : ""; - String account = registry.getAccount(); - String registerCode = registry.getRegistryCode(); - String addTime = ""; - String addDate = dateFormatter.format(nowDate); - // Если есть одновременно registry.credit и registry.debit, записываем две записи по одному registry - String addSum = ""; if (registry.getCredit() != null) { - addSum = df02Format.format(registry.getCredit()); - int valueIdx = 0; - String[] line = new String[getHeaders().length]; - line[valueIdx++] = firmId; - line[valueIdx++] = account; - line[valueIdx++] = registerCode; - line[valueIdx++] = addSum; - line[valueIdx++] = addTime; - line[valueIdx++] = addDate; - lines.add(line); + KSRepCashRegisterSumsReport ksRepCashRegisterSumsReport = new KSRepCashRegisterSumsReport(); + ksRepCashRegisterSumsReport.setFirmId(registry.getTradingCode()); + ksRepCashRegisterSumsReport.setAccount(registry.getAccount()); + ksRepCashRegisterSumsReport.setRegisterCode(registry.getRegistryCode()); + ksRepCashRegisterSumsReport.setAddDate(nowDate); + ksRepCashRegisterSumsReport.setAddTime(null); + ksRepCashRegisterSumsReport.setAddSum(registry.getCredit()); + rows.add(ksRepCashRegisterSumsReport); } if (registry.getDebit() != null) { - addSum = "-" + df02Format.format(registry.getDebit()); - int valueIdx = 0; - String[] line = new String[getHeaders().length]; - line[valueIdx++] = firmId; - line[valueIdx++] = account; - line[valueIdx++] = registerCode; - line[valueIdx++] = addSum; - line[valueIdx++] = addTime; - line[valueIdx++] = addDate; - lines.add(line); + KSRepCashRegisterSumsReport ksRepCashRegisterSumsReport = new KSRepCashRegisterSumsReport(); + ksRepCashRegisterSumsReport.setFirmId(registry.getTradingCode()); + ksRepCashRegisterSumsReport.setAccount(registry.getAccount()); + ksRepCashRegisterSumsReport.setRegisterCode(registry.getRegistryCode()); + ksRepCashRegisterSumsReport.setAddDate(nowDate); + ksRepCashRegisterSumsReport.setAddTime(null); + ksRepCashRegisterSumsReport.setAddSum(registry.getDebit().negate()); + rows.add(ksRepCashRegisterSumsReport); } } catch (Throwable e) { diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepCashRegistersReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepCashRegistersReportBuilder.java index 66686ffd1..03a1a2eca 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepCashRegistersReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepCashRegistersReportBuilder.java @@ -9,6 +9,7 @@ import ru.clearing.platform.dictionary.RegistryCodeDictionary; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.reports.reports.CSVReportBuilder; import ru.spcex.clearing.reports.reports.EmptyParams; +import ru.spcex.clearing.reports.reports.bean.KSRepCashRegistersReport; import ru.spcex.platform.enumeration.AccountType; import ru.spcex.platform.enumeration.RegistryTradingParams; import ru.spcex.platform.enumeration.ReportBuilderType; @@ -30,15 +31,13 @@ import java.util.Map; @Component @Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON) -public class KSRepCashRegistersReportBuilder extends CSVReportBuilder { +public class KSRepCashRegistersReportBuilder extends CSVReportBuilder { private final Imdg registryImdg; private final Imdg companyImdg; private final Imdg registryCodeDictionaryImdg; - private final String[] headers = { - "FIRMID", "ACCOUNT", "DATE", "REGISTER_CODE", "REGISTER_NAME", "OPEN_BALANCE", "CHANGE_BALANCE", "ADD_WITHDRAW", "CLOSE_BALANCE", "REMARKS" - }; - private List lines = null; + + private List rows = null; public KSRepCashRegistersReportBuilder(ImdgProvider imdgProvider) { registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); @@ -46,14 +45,10 @@ public class KSRepCashRegistersReportBuilder extends CSVReportBuilder getLines() { - return lines; + protected List getRows() { + return rows; } @Override @@ -67,10 +62,15 @@ public class KSRepCashRegistersReportBuilder extends CSVReportBuilder getParamsType() { + public Class getParamsClass() { return EmptyParams.class; } + @Override + public Class getReportClass() { + return KSRepCashRegistersReport.class; + } + @Override protected void collect(EmptyParams params) { LocalDate nowDate = LocalDate.now(); @@ -88,55 +88,37 @@ public class KSRepCashRegistersReportBuilder extends CSVReportBuilder registries = registryImdg.getCollectionObjectsByPredicate(finalPredicate); - lines = new ArrayList<>(registries.size()); + rows = new ArrayList<>(registries.size()); for (Registry registry : registries) { try { Company company = companyImdg.getSingleObjectByID(registry.getCompanyId()); if (!WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus())) continue; - String firmId = registry.getTradingCode() != null ? registry.getTradingCode() : ""; - String account = registry.getAccount(); + KSRepCashRegistersReport ksRepCashRegistersReport = new KSRepCashRegistersReport(); + ksRepCashRegistersReport.setFirmId(registry.getTradingCode()); + ksRepCashRegistersReport.setAccount(registry.getAccount()); + ksRepCashRegistersReport.setDate(nowDate); + ksRepCashRegistersReport.setRegisterCode(registry.getRegistryCode()); + ksRepCashRegistersReport.setOpenBalance(registry.getOpenBalance()); + ksRepCashRegistersReport.setCloseBalance(registry.getCloseBalance()); + ksRepCashRegistersReport.setRemarks(""); - String date = dateFormatter.format(nowDate); - String registerCode = registry.getRegistryCode(); + RegistryCodeDictionary registryCodeDictionary = registryCodeDictionaryImdg.getSingleObjectByFieldValues(Map.of("code", registry.getRegistryCode())); + if (registryCodeDictionary != null) ksRepCashRegistersReport.setRegisterName(registryCodeDictionary.getName()); - String registerName = ""; - RegistryCodeDictionary registryCodeDictionary = registryCodeDictionaryImdg.getSingleObjectByFieldValues(Map.of("code", registerCode)); - if (registryCodeDictionary != null) registerName = registryCodeDictionary.getName(); - - String openBalance = registry.getOpenBalance() != null ? df02Format.format(registry.getOpenBalance()) : ""; - - String changeBalance = ""; if (registry.getSettledCredit() != null) { if (registry.getSettledDebit() != null) - changeBalance = df02Format.format(registry.getSettledCredit().subtract(registry.getSettledDebit())); - else changeBalance = df02Format.format(registry.getSettledCredit()); + ksRepCashRegistersReport.setChangeBalance(registry.getSettledCredit().subtract(registry.getSettledDebit())); + else ksRepCashRegistersReport.setChangeBalance(registry.getSettledCredit()); } - String addWithdraw = ""; if (registry.getCredit() != null) { if (registry.getDebit() != null) - addWithdraw = df02Format.format(registry.getCredit().subtract(registry.getDebit())); - else addWithdraw = df02Format.format(registry.getCredit()); + ksRepCashRegistersReport.setAddWithdraw(registry.getCredit().subtract(registry.getDebit())); + else ksRepCashRegistersReport.setAddWithdraw(registry.getCredit()); } - String closeBalance = registry.getCloseBalance() != null ? df02Format.format(registry.getCloseBalance()) : ""; - String remarks = ""; - - int valueIdx = 0; - String[] line = new String[getHeaders().length]; - line[valueIdx++] = firmId; - line[valueIdx++] = account; - line[valueIdx++] = date; - line[valueIdx++] = registerCode; - line[valueIdx++] = registerName; - line[valueIdx++] = openBalance; - line[valueIdx++] = changeBalance; - line[valueIdx++] = addWithdraw; - line[valueIdx++] = closeBalance; - line[valueIdx++] = remarks; - - lines.add(line); + rows.add(ksRepCashRegistersReport); } catch (Throwable e) { log.error("Can't create report row for registry (id = %d), skipped".formatted(registry.getId()), e); } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepDepoNettoReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepDepoNettoReportBuilder.java index 4f6c5fb4c..579126ec5 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepDepoNettoReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepDepoNettoReportBuilder.java @@ -9,6 +9,7 @@ import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.reports.reports.CSVReportBuilder; import ru.spcex.clearing.reports.reports.PairRegistryId; import ru.spcex.clearing.reports.reports.SessionIdParam; +import ru.spcex.clearing.reports.reports.bean.KSRepDepoNettoReport; import ru.spcex.platform.enumeration.AccountType; import ru.spcex.platform.enumeration.RegistryDesignation; import ru.spcex.platform.enumeration.RegistryTradingParams; @@ -22,20 +23,16 @@ import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder; import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; -import java.time.ZoneId; import java.util.*; import java.util.stream.Collectors; @Component @Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON) -public class KSRepDepoNettoReportBuilder extends CSVReportBuilder { +public class KSRepDepoNettoReportBuilder extends CSVReportBuilder { private final Imdg registryImdg; private final Imdg sessionImdg; - private final String[] headers = { - "FIRMID", "SESSION_ID", "SESSION_DATE", "ACCOUNT", "SECURITYID", "VALUE", "DATE" - }; - private List lines = null; + private List rows = null; public KSRepDepoNettoReportBuilder(ImdgProvider imdgProvider) { registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); @@ -43,13 +40,8 @@ public class KSRepDepoNettoReportBuilder extends CSVReportBuilder getLines() { - return lines; + protected List getRows() { + return rows; } @Override @@ -63,10 +55,15 @@ public class KSRepDepoNettoReportBuilder extends CSVReportBuilder getParamsType() { + public Class getParamsClass() { return SessionIdParam.class; } + @Override + public Class getReportClass() { + return KSRepDepoNettoReport.class; + } + @Override protected void collect(SessionIdParam params) { LocalDate nowDate = LocalDate.now(); @@ -84,7 +81,7 @@ public class KSRepDepoNettoReportBuilder extends CSVReportBuilder registries = registryImdg.getCollectionObjectsByPredicate(finalPredicate); Map> registryMap = registries.stream().collect(Collectors.groupingBy(PairRegistryId::new)); - lines = new ArrayList<>(registries.size()); + rows = new ArrayList<>(registries.size()); for (Map.Entry> entry : registryMap.entrySet()) { PairRegistryId pairRegistryId = entry.getKey(); List groupedRegistry = entry.getValue(); @@ -118,34 +115,21 @@ public class KSRepDepoNettoReportBuilder extends CSVReportBuilder { +public class KSRepDepoRegisterQuantitiesReportBuilder extends CSVReportBuilder { private final Imdg registryImdg; private final Imdg companyImdg; - private final String[] headers = { - "FIRMID", "ACCOUNT", "SECURITYID", "REGISTER_CODE", "ADD_QUANTITY", "ADD_TIME", "ADD_DATE" - }; - private List lines = null; + private List rows = null; public KSRepDepoRegisterQuantitiesReportBuilder(ImdgProvider imdgProvider) { registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); @@ -43,13 +41,8 @@ public class KSRepDepoRegisterQuantitiesReportBuilder extends CSVReportBuilder getLines() { - return lines; + protected List getRows() { + return rows; } @Override @@ -63,10 +56,15 @@ public class KSRepDepoRegisterQuantitiesReportBuilder extends CSVReportBuilder getParamsType() { + public Class getParamsClass() { return EmptyParams.class; } + @Override + public Class getReportClass() { + return KSRepDepoRegisterQuantitiesReport.class; + } + @Override protected void collect(EmptyParams params) { LocalDate nowDate = LocalDate.now(); @@ -82,46 +80,34 @@ public class KSRepDepoRegisterQuantitiesReportBuilder extends CSVReportBuilder registries = registryImdg.getCollectionObjectsByPredicate(finalPredicate); - lines = new ArrayList<>(registries.size()); + rows = new ArrayList<>(registries.size()); for (Registry registry : registries) { try { Company company = companyImdg.getSingleObjectByID(registry.getCompanyId()); if (!WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus())) continue; - String firmId = registry.getTradingCode() != null ? registry.getTradingCode() : ""; - String account = registry.getAccount(); - String securityId = registry.getSecuritySymbol() != null ? registry.getSecuritySymbol() : ""; - String registerCode = registry.getRegistryCode(); - String addTime = ""; - String addDate = dateFormatter.format(nowDate); - // Если есть одновременно registry.credit и registry.debit, записываем две записи по одному registry - String addQuantity = ""; if (registry.getCredit() != null) { - addQuantity = df02Format.format(registry.getCredit()); - int valueIdx = 0; - String[] line = new String[getHeaders().length]; - line[valueIdx++] = firmId; - line[valueIdx++] = account; - line[valueIdx++] = securityId; - line[valueIdx++] = registerCode; - line[valueIdx++] = addQuantity; - line[valueIdx++] = addTime; - line[valueIdx++] = addDate; - lines.add(line); + KSRepDepoRegisterQuantitiesReport ksRepDepoRegisterQuantitiesReport = new KSRepDepoRegisterQuantitiesReport(); + ksRepDepoRegisterQuantitiesReport.setFirmId(registry.getTradingCode()); + ksRepDepoRegisterQuantitiesReport.setAccount(registry.getAccount()); + ksRepDepoRegisterQuantitiesReport.setSecurityId(registry.getSecuritySymbol()); + ksRepDepoRegisterQuantitiesReport.setRegisterCode(registry.getRegistryCode()); + ksRepDepoRegisterQuantitiesReport.setAddTime(null); + ksRepDepoRegisterQuantitiesReport.setAddDate(nowDate); + ksRepDepoRegisterQuantitiesReport.setAddQuantity(registry.getCredit()); + rows.add(ksRepDepoRegisterQuantitiesReport); } if (registry.getDebit() != null) { - addQuantity = "-" + df02Format.format(registry.getDebit()); - int valueIdx = 0; - String[] line = new String[getHeaders().length]; - line[valueIdx++] = firmId; - line[valueIdx++] = account; - line[valueIdx++] = securityId; - line[valueIdx++] = registerCode; - line[valueIdx++] = addQuantity; - line[valueIdx++] = addTime; - line[valueIdx++] = addDate; - lines.add(line); + KSRepDepoRegisterQuantitiesReport ksRepDepoRegisterQuantitiesReport = new KSRepDepoRegisterQuantitiesReport(); + ksRepDepoRegisterQuantitiesReport.setFirmId(registry.getTradingCode()); + ksRepDepoRegisterQuantitiesReport.setAccount(registry.getAccount()); + ksRepDepoRegisterQuantitiesReport.setSecurityId(registry.getSecuritySymbol()); + ksRepDepoRegisterQuantitiesReport.setRegisterCode(registry.getRegistryCode()); + ksRepDepoRegisterQuantitiesReport.setAddTime(null); + ksRepDepoRegisterQuantitiesReport.setAddDate(nowDate); + ksRepDepoRegisterQuantitiesReport.setAddQuantity(registry.getDebit().negate()); + rows.add(ksRepDepoRegisterQuantitiesReport); } } catch (Throwable e) { diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepDepoRegistersReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepDepoRegistersReportBuilder.java index 14ff2ae46..f08665c96 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepDepoRegistersReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepDepoRegistersReportBuilder.java @@ -9,6 +9,7 @@ import ru.clearing.platform.dictionary.RegistryCodeDictionary; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.reports.reports.CSVReportBuilder; import ru.spcex.clearing.reports.reports.EmptyParams; +import ru.spcex.clearing.reports.reports.bean.KSRepDepoRegistersReport; import ru.spcex.platform.enumeration.AccountType; import ru.spcex.platform.enumeration.RegistryTradingParams; import ru.spcex.platform.enumeration.ReportBuilderType; @@ -30,15 +31,12 @@ import java.util.Map; @Component @Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON) -public class KSRepDepoRegistersReportBuilder extends CSVReportBuilder { +public class KSRepDepoRegistersReportBuilder extends CSVReportBuilder { private final Imdg registryImdg; private final Imdg companyImdg; private final Imdg registryCodeDictionaryImdg; - private final String[] headers = { - "FIRMID", "ACCOUNT", "DATE", "SECURITYID", "REGISTER_CODE", "REGISTER_NAME", "OPEN_QUANTITY", "CHANGE_QUANTITY", "ADD_WITHDRAW_DEPO", "CLOSE_QUANTITY", "REMARKS" - }; - private List lines = null; + private List rows = null; public KSRepDepoRegistersReportBuilder(ImdgProvider imdgProvider) { registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); @@ -47,13 +45,8 @@ public class KSRepDepoRegistersReportBuilder extends CSVReportBuilder getLines() { - return lines; + protected List getRows() { + return rows; } @Override @@ -67,10 +60,15 @@ public class KSRepDepoRegistersReportBuilder extends CSVReportBuilder getParamsType() { + public Class getParamsClass() { return EmptyParams.class; } + @Override + public Class getReportClass() { + return KSRepDepoRegistersReport.class; + } + @Override protected void collect(EmptyParams params) { LocalDate nowDate = LocalDate.now(); @@ -86,56 +84,38 @@ public class KSRepDepoRegistersReportBuilder extends CSVReportBuilder registries = registryImdg.getCollectionObjectsByPredicate(finalPredicate); - lines = new ArrayList<>(registries.size()); + rows = new ArrayList<>(registries.size()); for (Registry registry : registries) { try { Company company = companyImdg.getSingleObjectByID(registry.getCompanyId()); if (!WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus())) continue; - String firmId = registry.getTradingCode() != null ? registry.getTradingCode() : ""; - String account = registry.getAccount(); - String date = dateFormatter.format(nowDate); - String securityId = registry.getSecuritySymbol() != null ? registry.getSecuritySymbol() : ""; - String registerCode = registry.getRegistryCode(); + KSRepDepoRegistersReport ksRepDepoRegistersReport = new KSRepDepoRegistersReport(); + ksRepDepoRegistersReport.setFirmId(registry.getTradingCode()); + ksRepDepoRegistersReport.setAccount(registry.getAccount()); + ksRepDepoRegistersReport.setDate(nowDate); + ksRepDepoRegistersReport.setSecurityId(registry.getSecuritySymbol()); + ksRepDepoRegistersReport.setRegisterCode(registry.getRegistryCode()); + ksRepDepoRegistersReport.setOpenQuantity(registry.getOpenBalance()); + ksRepDepoRegistersReport.setCloseQuantity(registry.getCloseBalance()); + ksRepDepoRegistersReport.setRemarks(null); - RegistryCodeDictionary registryCodeDescription = registryCodeDictionaryImdg.getSingleObjectByFieldValues(Map.of("code", registerCode)); - String registerName = ""; - if (registryCodeDescription != null) registerName = registryCodeDescription.getName(); + RegistryCodeDictionary registryCodeDescription = registryCodeDictionaryImdg.getSingleObjectByFieldValues(Map.of("code", registry.getRegistryCode())); + if (registryCodeDescription != null) ksRepDepoRegistersReport.setRegisterName(registryCodeDescription.getName()); - String openQuantity = registry.getOpenBalance() != null ? registry.getOpenBalance().toString() : ""; - - String changeQuantity = ""; if (registry.getSettledCredit() != null) { if (registry.getSettledDebit() != null) - changeQuantity = registry.getSettledCredit().subtract(registry.getSettledDebit()).toString(); - else changeQuantity = registry.getSettledCredit().toString(); + ksRepDepoRegistersReport.setChangeQuantity(registry.getSettledCredit().subtract(registry.getSettledDebit())); + else ksRepDepoRegistersReport.setChangeQuantity(registry.getSettledCredit()); } - String addWithdrawDepo = ""; if (registry.getCredit() != null) { if (registry.getDebit() != null) - addWithdrawDepo = registry.getCredit().subtract(registry.getDebit()).toString(); - else addWithdrawDepo = registry.getCredit().toString(); + ksRepDepoRegistersReport.setAddWithdrawDepo(registry.getCredit().subtract(registry.getDebit())); + else ksRepDepoRegistersReport.setAddWithdrawDepo(registry.getCredit()); } - String closeQuantity = registry.getCloseBalance() != null ? registry.getCloseBalance().toString() : ""; - String remarks = ""; - - int valueIdx = 0; - String[] line = new String[getHeaders().length]; - line[valueIdx++] = firmId; - line[valueIdx++] = account; - line[valueIdx++] = date; - line[valueIdx++] = securityId; - line[valueIdx++] = registerCode; - line[valueIdx++] = registerName; - line[valueIdx++] = openQuantity; - line[valueIdx++] = changeQuantity; - line[valueIdx++] = addWithdrawDepo; - line[valueIdx++] = closeQuantity; - line[valueIdx++] = remarks; - - lines.add(line); + rows.add(ksRepDepoRegistersReport); } catch (Throwable e) { log.error("Can't create report row for registry (id = %d), skipped".formatted(registry.getId()), e); } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepFirmDetailsReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepFirmDetailsReportBuilder.java index 8a97d8ed6..a8bb83159 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepFirmDetailsReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepFirmDetailsReportBuilder.java @@ -9,6 +9,7 @@ import ru.clearing.classes.statics.data.profile.ProfileDocument; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.reports.reports.CSVReportBuilder; import ru.spcex.clearing.reports.reports.EmptyParams; +import ru.spcex.clearing.reports.reports.bean.KSRepFirmDetailsReport; import ru.spcex.platform.enumeration.CompanySymbol; import ru.spcex.platform.enumeration.DocumentTypes; import ru.spcex.platform.enumeration.ReportBuilderType; @@ -24,15 +25,12 @@ import java.util.Map; @Component @Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON) -public class KSRepFirmDetailsReportBuilder extends CSVReportBuilder { +public class KSRepFirmDetailsReportBuilder extends CSVReportBuilder { private final Imdg companyImdg; private final Imdg companySymbolsImdg; private final Imdg profileDocumentImdg; - private final String[] headers = { - "FIRMID", "PART_INN", "PART_KPP", "AGREEMENT_NUMBER", "AGREEMENT_DATE", "AGREEMENT_NAME", "FIRM_NAME" - }; - private List lines = null; + private List rows = null; public KSRepFirmDetailsReportBuilder(ImdgProvider imdgProvider) { companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); @@ -41,13 +39,8 @@ public class KSRepFirmDetailsReportBuilder extends CSVReportBuilder } @Override - protected String[] getHeaders() { - return headers; - } - - @Override - protected List getLines() { - return lines; + protected List getRows() { + return rows; } @Override @@ -61,26 +54,28 @@ public class KSRepFirmDetailsReportBuilder extends CSVReportBuilder } @Override - public Class getParamsType() { + public Class getParamsClass() { return EmptyParams.class; } + @Override + public Class getReportClass() { + return KSRepFirmDetailsReport.class; + } + @Override protected void collect(EmptyParams params) { Collection companies = companyImdg.getCollectionObjectsByFieldValues(Map.of("workflowStatus", WorkflowStatus.Active.getKey())); - lines = new ArrayList<>(companies.size()); + rows = new ArrayList<>(companies.size()); for (Company company : companies) { try { - String firmId = company.getTradingCode() != null ? company.getTradingCode() : ""; - CompanySymbols innCompanySymbol = companySymbolsImdg.getSingleObjectByFieldValues( Map.of( "companyId", company.getId(), "companySymbol", CompanySymbol.INN.getKey() ) ); - String partInn = innCompanySymbol != null && innCompanySymbol.getCompanySymbolValue() != null ? innCompanySymbol.getCompanySymbolValue() : ""; CompanySymbols cppCompanySymbol = companySymbolsImdg.getSingleObjectByFieldValues( Map.of( @@ -88,7 +83,6 @@ public class KSRepFirmDetailsReportBuilder extends CSVReportBuilder "companySymbol", CompanySymbol.CPP.getKey() ) ); - String partKpp = cppCompanySymbol != null && cppCompanySymbol.getCompanySymbolValue() != null ? cppCompanySymbol.getCompanySymbolValue() : ""; ProfileDocument profileDocument = profileDocumentImdg.getSingleObjectByFieldValues( Map.of( @@ -96,28 +90,20 @@ public class KSRepFirmDetailsReportBuilder extends CSVReportBuilder "documentType", DocumentTypes.cntr.getKey() ) ); - String agreementNumber = ""; - String agreementDate = ""; - String agreementName = ""; + + KSRepFirmDetailsReport ksRepFirmDetailsReport = new KSRepFirmDetailsReport(); + ksRepFirmDetailsReport.setFirmId(company.getTradingCode()); + ksRepFirmDetailsReport.setPartInn(innCompanySymbol != null ? innCompanySymbol.getCompanySymbolValue() : null); + ksRepFirmDetailsReport.setPartKpp(cppCompanySymbol != null ? cppCompanySymbol.getCompanySymbolValue() : null); + ksRepFirmDetailsReport.setFirmName(company.getFullName()); + if (profileDocument != null) { - agreementNumber = profileDocument.getNumber() != null ? profileDocument.getNumber() : ""; - agreementDate = profileDocument.getIssueDate() != null ? dateFormatter.format(profileDocument.getIssueDate()) : ""; - agreementName = profileDocument.getName() != null ? profileDocument.getName() : ""; + ksRepFirmDetailsReport.setAgreementNumber(profileDocument.getNumber()); + ksRepFirmDetailsReport.setAgreementDate(profileDocument.getIssueDate()); + ksRepFirmDetailsReport.setAgreementName(profileDocument.getName()); } - String firmName = company.getFullName() != null ? company.getFullName() : ""; - - int valueIdx = 0; - String[] line = new String[getHeaders().length]; - line[valueIdx++] = firmId; - line[valueIdx++] = partInn; - line[valueIdx++] = partKpp; - line[valueIdx++] = agreementNumber; - line[valueIdx++] = agreementDate; - line[valueIdx++] = agreementName; - line[valueIdx++] = firmName; - - lines.add(line); + rows.add(ksRepFirmDetailsReport); } catch (Throwable e) { log.error("Can't create report row for company (id = %d), skipped".formatted(company.getId()), e); } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepTradesReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepTradesReportBuilder.java index 7b949bcc3..33682e467 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepTradesReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSRepTradesReportBuilder.java @@ -12,6 +12,7 @@ import ru.clearing.classes.statics.data.registry.Registry; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.reports.reports.CSVReportBuilder; import ru.spcex.clearing.reports.reports.EmptyParams; +import ru.spcex.clearing.reports.reports.bean.KSRepTradesReport; import ru.spcex.platform.enumeration.*; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; @@ -21,23 +22,21 @@ import ru.spcex.platform.utils.enumeration.IEnumKey; import java.time.LocalDate; import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; import java.util.stream.Collectors; @Component @Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON) -public class KSRepTradesReportBuilder extends CSVReportBuilder { +public class KSRepTradesReportBuilder extends CSVReportBuilder { private final Imdg executionDepositImdg; private final Imdg executionFondImdg; private final Imdg sessionImdg; private final Imdg registryImdg; private final Imdg companyImdg; - private final String[] headers = { - "SESSION_ID", "SESSION_DATE", "TR_ID", "FIRM_ID", "TKR", "CASH_LIABILITY", "DEPO_LIABILITY", "TRADE_NUM", "CLASS_CODE", "TRADE_DATE", "STATUS" - }; - private List lines = null; + private List rows = null; public KSRepTradesReportBuilder(ImdgProvider imdgProvider) { executionDepositImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionDeposit, ExecutionDeposit.class); @@ -48,13 +47,8 @@ public class KSRepTradesReportBuilder extends CSVReportBuilder { } @Override - protected String[] getHeaders() { - return headers; - } - - @Override - protected List getLines() { - return lines; + protected List getRows() { + return rows; } @Override @@ -68,10 +62,15 @@ public class KSRepTradesReportBuilder extends CSVReportBuilder { } @Override - public Class getParamsType() { + public Class getParamsClass() { return EmptyParams.class; } + @Override + public Class getReportClass() { + return KSRepTradesReport.class; + } + @Override protected void collect(EmptyParams params) { LocalDate nowDate = LocalDate.now(); @@ -88,49 +87,30 @@ public class KSRepTradesReportBuilder extends CSVReportBuilder { executions.addAll(executionDeposits); executions.addAll(executionFonds); - Map tradingCodeForCompanyId = new HashMap<>(); - Map sessionDateForSessionId = new HashMap<>(); - lines = new ArrayList<>(executions.size()); + rows = new ArrayList<>(executions.size()); for (ExecutionCommon execution : executions) { try { - String sessionId = execution.getSessionId() != null ? String.valueOf(execution.getSessionId()) : ""; + KSRepTradesReport ksRepTradesReport = new KSRepTradesReport(); + ksRepTradesReport.setSessionId(execution.getSessionId()); + ksRepTradesReport.setTrId(execution.getId()); + ksRepTradesReport.setTkr(execution.getTradingClearingRegistryId()); - String sessionDate = ""; - if (execution.getSessionId() != null) { - sessionDate = sessionDateForSessionId.get(execution.getSessionId()); - if (sessionDate == null) { - Session session = sessionImdg.getSingleObjectByID(execution.getSessionId()); - sessionDate = session != null ? dateTimeFormatter.format(LocalDateTime.ofInstant(session.getCreated(), ZoneId.systemDefault())) : ""; - sessionDateForSessionId.put(execution.getSessionId(), sessionDate); - } - } + Company company = companyImdg.getSingleObjectByID(execution.getCompanyId()); + ksRepTradesReport.setFirmId(company != null ? company.getTradingCode() : null); - String trId = String.valueOf(execution.getId()); + Session session = sessionImdg.getSingleObjectByID(execution.getSessionId()); + ksRepTradesReport.setSessionDate(session != null ? session.getCreated() : null); - String firmId = ""; - if (execution.getCompanyId() != null) { - firmId = tradingCodeForCompanyId.get(execution.getCompanyId()); - if (firmId == null) { - Company company = companyImdg.getSingleObjectByID(execution.getCompanyId()); - firmId = company != null && company.getTradingCode() != null ? company.getTradingCode() : ""; - tradingCodeForCompanyId.put(execution.getCompanyId(), firmId); - } - } - - String tkr = execution.getTradingClearingRegistryId() != null ? String.valueOf(execution.getTradingClearingRegistryId()) : ""; - - String cashLiability = ""; - String depoLiability = ""; if (execution instanceof ExecutionDeposit executionDeposit) { - cashLiability = executionDeposit.getFirstLegAmount() != null ? df02Format.format(executionDeposit.getFirstLegAmount()) : ""; + ksRepTradesReport.setCashLiability(executionDeposit.getFirstLegAmount()); } else if (execution instanceof ExecutionFond executionFond) { - cashLiability = executionFond.getSettlementAmount() != null ? df02Format.format(executionFond.getSettlementAmount()) : ""; - depoLiability = executionFond.getQuantity() != null ? executionFond.getQuantity().toString() : ""; + ksRepTradesReport.setCashLiability(executionFond.getSettlementAmount()); + ksRepTradesReport.setDepoLiability(executionFond.getQuantity()); } - String tradeNum = execution.getExchangeExecutionId() != null ? String.valueOf(execution.getExchangeExecutionId()) : ""; - String classCode = ""; - String tradeDate = execution.getExchangeExecutionTime() != null ? dateTimeFormatter.format(LocalDateTime.ofInstant(execution.getExchangeExecutionTime(), ZoneId.systemDefault())) : ""; + ksRepTradesReport.setTradeNum(execution.getExchangeExecutionId()); + ksRepTradesReport.setClassCode(null); + ksRepTradesReport.setTradeDate(execution.getExchangeExecutionTime()); String status = ""; if (execution.getCoverageStatus() != null) { @@ -227,22 +207,9 @@ public class KSRepTradesReportBuilder extends CSVReportBuilder { } } + ksRepTradesReport.setStatus(status); - int valueIdx = 0; - String[] line = new String[getHeaders().length]; - line[valueIdx++] = sessionId; - line[valueIdx++] = sessionDate; - line[valueIdx++] = trId; - line[valueIdx++] = firmId; - line[valueIdx++] = tkr; - line[valueIdx++] = cashLiability; - line[valueIdx++] = depoLiability; - line[valueIdx++] = tradeNum; - line[valueIdx++] = classCode; - line[valueIdx++] = tradeDate; - line[valueIdx++] = status; - - lines.add(line); + rows.add(ksRepTradesReport); } catch (Throwable e) { log.error("Can't create report row for execution_%s (id = %d), skipped".formatted(execution instanceof ExecutionFond ? "fond" : "deposit", execution.getId()), e); } 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 223d96cb6..88ec1731a 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 @@ -12,15 +12,15 @@ import ru.spcex.clearing.platform.messaging.domain.Consts; import ru.spcex.clearing.platform.messaging.domain.cud.gateway.ReportPart; import ru.spcex.clearing.platform.messaging.domain.cud.gateway.SendReportRequest; import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequest; -import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequestWithPeriod; import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequestWithSessionId; -import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequestWithSessionIdList; import ru.spcex.clearing.platform.messaging.domain.cud.schedule.LauncherCommandRequest; import ru.spcex.clearing.platform.messaging.service.QueueConsumer; import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate; import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender; import ru.spcex.clearing.reports.config.element.ReportsServiceSettings; -import ru.spcex.clearing.reports.reports.*; +import ru.spcex.clearing.reports.reports.CSVReportBuilder; +import ru.spcex.clearing.reports.reports.EmptyParams; +import ru.spcex.clearing.reports.reports.SessionIdParam; import ru.spcex.clearing.util.security.UserRoleVerification; import ru.spcex.clearing.validation.common.ValidationHelper; import ru.spcex.platform.enumeration.ReportBuilderType; @@ -30,7 +30,6 @@ import ru.spcex.platform.utils.enumeration.IEnumKey; import ru.spcex.platform.utils.validation.IValidator; import java.io.File; -import java.time.LocalDate; import java.util.*; import java.util.function.Function; @@ -43,19 +42,15 @@ public class ReportService extends QueueConsumer implements InitializingBean { private final Function reportRequestValidator; private final Function reportRequestWithSessionIdValidator; - private final Function reportRequestWithSessionIdListValidator; - private final Function reportRequestWithPeriodValidator; private final Function reportRequestGREPValidator; private final Function reportRequestGRETValidator; private final Function reportRequestGREFValidator; - private final Map>> reportBuildersWithoutParams; - private final Map>> reportBuildersWithSessionIdParam; - private final Map>> reportBuildersWithSessionIdListParam; - private final Map>> reportBuildersWithPeriodParams; - private final Map>> reportBuildersForGREP; - private final Map>> reportBuildersForGREF; - private final Map>> reportBuildersForGRET; + private final Map>> reportBuildersWithoutParams; + private final Map>> reportBuildersWithSessionIdParam; + private final Map>> reportBuildersForGREP; + private final Map>> reportBuildersForGREF; + private final Map>> reportBuildersForGRET; private final File outFolder; @@ -67,29 +62,21 @@ public class ReportService extends QueueConsumer implements InitializingBean { ReportsServiceSettings reportsServiceSettings, @Qualifier("reportBuildersWithoutParams") - Map>> reportBuildersWithoutParams, + Map>> reportBuildersWithoutParams, @Qualifier("reportBuildersWithSessionIdParam") - Map>> reportBuildersWithSessionIdParam, - @Qualifier("reportBuildersWithSessionIdListParam") - Map>> reportBuildersWithSessionIdListParam, - @Qualifier("reportBuildersWithPeriodParams") - Map>> reportBuildersWithPeriodParams, + Map>> reportBuildersWithSessionIdParam, @Qualifier("reportBuildersForGREP") - Map>> reportBuildersForGREP, + Map>> reportBuildersForGREP, @Qualifier("reportBuildersForGREF") - Map>> reportBuildersForGREF, + Map>> reportBuildersForGREF, @Qualifier("reportBuildersForGRET") - Map>> reportBuildersForGRET, + Map>> reportBuildersForGRET, @Qualifier("reportRequestValidator") Function reportRequestValidator, @Qualifier("reportRequestWithSessionIdValidator") Function reportRequestWithSessionIdValidator, - @Qualifier("reportRequestWithSessionIdListValidator") - Function reportRequestWithSessionIdListValidator, - @Qualifier("reportRequestWithPeriodValidator") - Function reportRequestWithPeriodValidator, @Qualifier("reportRequestGREPValidator") Function reportRequestGREPValidator, @@ -105,12 +92,8 @@ public class ReportService extends QueueConsumer implements InitializingBean { this.kafkaSender = kafkaSender; this.reportRequestValidator = reportRequestValidator; this.reportRequestWithSessionIdValidator = reportRequestWithSessionIdValidator; - this.reportRequestWithSessionIdListValidator = reportRequestWithSessionIdListValidator; - this.reportRequestWithPeriodValidator = reportRequestWithPeriodValidator; this.reportBuildersWithoutParams = reportBuildersWithoutParams; this.reportBuildersWithSessionIdParam = reportBuildersWithSessionIdParam; - this.reportBuildersWithSessionIdListParam = reportBuildersWithSessionIdListParam; - this.reportBuildersWithPeriodParams = reportBuildersWithPeriodParams; this.reportRequestGREPValidator = reportRequestGREPValidator; this.reportRequestGRETValidator = reportRequestGRETValidator; this.reportRequestGREFValidator = reportRequestGREFValidator; @@ -129,12 +112,6 @@ public class ReportService extends QueueConsumer implements InitializingBean { callback(ReportRequestWithSessionId.class) .setFunction(this::createReportForSessionId) .forDestination(Consts.CREATE_REPORT_FOR_SESSION_ID, callbacks::put); - callback(ReportRequestWithSessionIdList.class) - .setFunction(this::createReportForSessionIdList) - .forDestination(Consts.CREATE_REPORT_FOR_SESSION_ID_LIST, callbacks::put); - callback(ReportRequestWithPeriod.class) - .setFunction(this::createReportForPeriod) - .forDestination(Consts.CREATE_REPORT_FOR_PERIOD, callbacks::put); callback(LauncherCommandRequest.class) .setFunction(this::createReportForGREP) .forDestination(Task.createReport_GREP.topic(), callbacks::put); @@ -161,11 +138,11 @@ public class ReportService extends QueueConsumer implements InitializingBean { log.debug("Create report type {}...", req.getReportId()); - List> builders = reportBuildersWithoutParams.get( + List> builders = reportBuildersWithoutParams.get( IEnumKey.getEnumByKey(ReportBuilderType.class, req.getReportId()) ); List outFilenames = new ArrayList<>(); - for (CSVReportBuilder builder : builders) { + for (CSVReportBuilder builder : builders) { File outFile = builder.createReport(new EmptyParams(), outFolder); if (outFile == null) continue; outFilenames.add(outFile.getAbsolutePath()); @@ -196,11 +173,11 @@ public class ReportService extends QueueConsumer implements InitializingBean { log.debug("Create report type {}...", req.getReportId()); - List> builders = reportBuildersWithSessionIdParam.get( + List> builders = reportBuildersWithSessionIdParam.get( IEnumKey.getEnumByKey(ReportBuilderType.class, req.getReportId()) ); List outFilenames = new ArrayList<>(); - for (CSVReportBuilder builder : builders) { + for (CSVReportBuilder builder : builders) { SessionIdParam sessionIdParam = new SessionIdParam(); sessionIdParam.setSessionId(req.getSessionId()); File outFile = builder.createReport(sessionIdParam, outFolder); @@ -219,81 +196,6 @@ public class ReportService extends QueueConsumer implements InitializingBean { 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(); - - logUnknownProperties(userRequest); - - log.debug("Create report type {}...", req.getReportId()); - - List> builders = reportBuildersWithSessionIdListParam.get( - IEnumKey.getEnumByKey(ReportBuilderType.class, req.getReportId()) - ); - List outFilenames = new ArrayList<>(); - for (CSVReportBuilder builder : builders) { - SessionIdListParams sessionIdListParams = new SessionIdListParams(); - sessionIdListParams.setSessionIdList(req.getSessionIdList()); - File outFile = builder.createReport(sessionIdListParams, 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)); - } - 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(); - - logUnknownProperties(userRequest); - - log.debug("Create report type {}...", req.getReportId()); - - List> builders = reportBuildersWithPeriodParams.get( - IEnumKey.getEnumByKey(ReportBuilderType.class, req.getReportId()) - ); - List outFilenames = new ArrayList<>(); - for (CSVReportBuilder builder : builders) { - PeriodParams periodParams = new PeriodParams(); - periodParams.setStartDate(req.getStartDate()); - periodParams.setEndDate(req.getEndDate()); - File outFile = builder.createReport(periodParams, 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)); - } - return null; - } - public RequestInfoUpdate createReportForGREP(BaseRequest userRequest) { log.debug("GREP task received"); @@ -342,45 +244,23 @@ public class ReportService extends QueueConsumer implements InitializingBean { return null; } - private Map createReportsForTask(Long sessionId, Collection>> buildersForTask) { + private Map createReportsForTask(Long sessionId, Collection>> buildersForTask) { Map outFilenames = new HashMap<>(); int cntErrors = 0; - LocalDate now = LocalDate.now(); - for (List> builders : buildersForTask) { - for (CSVReportBuilder builder : builders) { - if (builder.getParamsType() == EmptyParams.class) { - File outFile = ((CSVReportBuilder) builder).createReport(new EmptyParams(), outFolder); + for (List> builders : buildersForTask) { + for (CSVReportBuilder builder : builders) { + if (builder.getParamsClass() == EmptyParams.class) { + File outFile = ((CSVReportBuilder) builder).createReport(new EmptyParams(), outFolder); if (outFile == null) { log.warn("Something wrong, report type: {}", builder.getReportType().getKey()); cntErrors++; continue; } outFilenames.put(outFile.getName(), builder.getReportType()); - } else if (builder.getParamsType() == SessionIdParam.class && sessionId != null) { + } else if (builder.getParamsClass() == SessionIdParam.class && sessionId != null) { SessionIdParam sessionIdParam = new SessionIdParam(); sessionIdParam.setSessionId(sessionId); - File outFile = ((CSVReportBuilder) builder).createReport(sessionIdParam, outFolder); - if (outFile == null) { - log.warn("Something wrong, report type: {}", builder.getReportType().getKey()); - cntErrors++; - continue; - } - outFilenames.put(outFile.getName(), builder.getReportType()); - } else if (builder.getParamsType() == SessionIdListParams.class && sessionId != null) { - SessionIdListParams sessionIdListParams = new SessionIdListParams(); - sessionIdListParams.setSessionIdList(List.of(sessionId)); - File outFile = ((CSVReportBuilder) builder).createReport(sessionIdListParams, outFolder); - if (outFile == null) { - log.warn("Something wrong, report type: {}", builder.getReportType().getKey()); - cntErrors++; - continue; - } - outFilenames.put(outFile.getName(), builder.getReportType()); - } else if (builder.getParamsType() == PeriodParams.class) { - PeriodParams periodParams = new PeriodParams(); - periodParams.setStartDate(now); - periodParams.setEndDate(now); - File outFile = ((CSVReportBuilder) builder).createReport(periodParams, outFolder); + File outFile = ((CSVReportBuilder) builder).createReport(sessionIdParam, outFolder); if (outFile == null) { log.warn("Something wrong, report type: {}", builder.getReportType().getKey()); cntErrors++; diff --git a/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/PrototypeTest.java b/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/PrototypeTest.java deleted file mode 100644 index 268810ebf..000000000 --- a/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/PrototypeTest.java +++ /dev/null @@ -1,211 +0,0 @@ -package ru.spcex.clearing.reports.services; - -import com.opencsv.CSVParser; -import com.opencsv.CSVParserBuilder; -import com.opencsv.CSVReader; -import com.opencsv.CSVReaderBuilder; -import com.opencsv.exceptions.CsvValidationException; -import org.apache.commons.io.FileUtils; -import org.junit.jupiter.api.*; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit.jupiter.SpringExtension; -import ru.clearing.classes.statics.data.company.Company; -import ru.clearing.classes.statics.data.company.CompanySymbols; -import ru.clearing.classes.statics.data.execution.ExecutionDeposit; -import ru.clearing.classes.statics.data.execution.ExecutionFond; -import ru.clearing.classes.statics.data.instrument.issue.FixedIncomeSecurity; -import ru.clearing.classes.statics.data.misc.Listing; -import ru.clearing.classes.statics.data.misc.STrades; -import ru.clearing.classes.statics.data.misc.Session; -import ru.clearing.classes.statics.data.payment.PaymentInstruction; -import ru.clearing.classes.statics.data.profile.ProfileDocument; -import ru.clearing.classes.statics.data.registry.Registry; -import ru.clearing.classes.statics.data.registry.TradingClearingRegistry; -import ru.clearing.classes.statics.data.statement.Statement; -import ru.clearing.platform.dictionary.RegistryCodeDictionary; -import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.reports.config.BeanConfiguration; -import ru.spcex.clearing.reports.config.ReportBuildersConfig; -import ru.spcex.clearing.reports.config.TestConfig; -import ru.spcex.clearing.reports.config.validation.ValidationConfig; -import ru.spcex.clearing.reports.reports.SessionIdParam; -import ru.spcex.clearing.reports.reports.bp.UnfulfilledDealReportBuilder_; -import ru.spcex.clearing.test.config.ImdgTestConfig; -import ru.spcex.clearing.test.config.KafkaTestConfig; -import ru.spcex.platform.enumeration.Allowed; -import ru.spcex.platform.enumeration.Side; -import ru.spcex.platform.enumeration.WorkflowStatus; -import ru.spcex.platform.imdg.api.Imdg; -import ru.spcex.platform.imdg.api.ImdgProvider; - -import javax.annotation.PostConstruct; -import java.io.File; -import java.io.FileReader; -import java.io.IOException; -import java.time.LocalDate; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -@ExtendWith(SpringExtension.class) -@ContextConfiguration(classes = { - BeanConfiguration.class, - ValidationConfig.class, - ReportService.class, - ImdgTestConfig.class, - KafkaTestConfig.class, - ReportBuildersConfig.class, - TestConfig.class -}) -@TestMethodOrder(MethodOrderer.OrderAnnotation.class) -public class PrototypeTest { - private static File outFolder; - private Imdg registryImdg; - private Imdg companyImdg; - private Imdg registryCodeDictionaryImdg; - private Imdg executionDepositImdg; - private Imdg executionFondImdg; - private Imdg sessionImdg; - private Imdg companySymbolsImdg; - private Imdg profileDocumentImdg; - - private Long COMPANY_ID; - private Imdg listingImdg; - private Imdg fixedIncomeSecurityImdg; - private Imdg tradingClearingRegistryImdg; - private Imdg paymentInstructionImdg; - private Imdg statementImdg; - private Imdg sTradeImdg; - - @Autowired - @Qualifier("hazelcastServiceTest") - private ImdgProvider imdgProvider; - - @Autowired - private UnfulfilledDealReportBuilder_ reportBuilder; - - @BeforeAll - public static void createTestFolder() { - outFolder = new File("out"); - outFolder.mkdir(); - } - - @AfterAll - public static void deleteTestFolder() throws IOException { - FileUtils.deleteDirectory(outFolder); - } - - - @Test - @Order(1) - public void test() throws IOException, CsvValidationException { - clearTestDir(); - - Company company = new Company(); - company.setWorkflowStatus(WorkflowStatus.Active.getKey()); - Long id = companyImdg.insert(company); - - Session session = new Session(); - Long sessionId = sessionImdg.insert(session); - - ExecutionFond executionFond = new ExecutionFond(); - executionFond.setSessionId(sessionId); - executionFond.setCompanyId(id); - executionFond.setCoverageStatus(Allowed.DENIED.getKey()); - executionFond.setSettlementCode("SETCODE"); - executionFond.setSide(Side.SELL.getKey()); - - STrades sTrades = new STrades(); - sTrades.setSettleCode("SETCODE"); - sTrades.setOperation(Side.SELL.getKey()); - sTrades.setClassCode("test-class-code"); - sTradeImdg.insert(sTrades); - - executionFond.setSecurityId(3007L); - executionFond.setExchangeExecutionId(777L); - executionFond.setTradingDate(LocalDate.of(2023, 6, 20)); - - executionFondImdg.insert(executionFond); - - SessionIdParam sessionIdParam = new SessionIdParam(); - sessionIdParam.setSessionId(sessionId); - - File outFile = reportBuilder.createReport(sessionIdParam, outFolder); - - File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/bp/unfulfilled_deal_report_expected.csv").getFile()); - compareCSVFiles(expectedFile, outFile, Collections.emptyList()); - } - - private void compareCSVFiles(File expectedFile, File actualFile, List columnsForSkip) throws IOException, CsvValidationException { - if (columnsForSkip == null) columnsForSkip = Collections.emptyList(); - CSVParser csvParser = new CSVParserBuilder().withSeparator(',').withQuoteChar('\"').build(); - CSVReader expectedCSVReader = new CSVReaderBuilder(new FileReader(expectedFile)).withCSVParser(csvParser).build(); - CSVReader actualCSVReader = new CSVReaderBuilder(new FileReader(actualFile)).withCSVParser(csvParser).build(); - - Map expectedValueForColumn = new HashMap<>(); - Map actualValueForColumn = new HashMap<>(); - - String[] expectedHeaders = expectedCSVReader.readNext(); - String[] actualHeaders = actualCSVReader.readNext(); - assertEquals(expectedHeaders.length, actualHeaders.length); - - for (int headerIdx = 0; headerIdx < expectedHeaders.length; headerIdx++) { - String expectedHeader = expectedHeaders[headerIdx]; - String actualHeader = actualHeaders[headerIdx]; - if (!columnsForSkip.contains(expectedHeader)) expectedValueForColumn.put(expectedHeader, headerIdx); - if (!columnsForSkip.contains(actualHeader)) actualValueForColumn.put(actualHeader, headerIdx); - } - - do { - String[] expectedLines = expectedCSVReader.readNext(); - String[] actualLines = actualCSVReader.readNext(); - if (expectedLines == null || actualLines == null) { - if (expectedLines == null && actualLines == null) { - break; - } - Assertions.fail("expected and actual lines not equal"); - } - for (String expectedHeader : expectedValueForColumn.keySet()) { - int expectedIdx = expectedValueForColumn.get(expectedHeader); - int actualIdx = actualValueForColumn.get(expectedHeader); - String expected = expectedLines[expectedIdx]; - String actual = actualLines[actualIdx]; - assertEquals(expected, actual, expectedHeader); - } - } while (true); - - expectedCSVReader.close(); - actualCSVReader.close(); - } - - @PostConstruct - private void init() { - ImdgTestConfig.waitAvailableImdgProviderAndAddAdminWithDefaultId(); - registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); - registryCodeDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_RegistryCodeDictionary, RegistryCodeDictionary.class); - - companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); - Company company = new Company(); - company.setWorkflowStatus(WorkflowStatus.Active.getKey()); - company.setTradingCode("TRADING_CODE"); - COMPANY_ID = companyImdg.insert(company); - - executionDepositImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionDeposit, ExecutionDeposit.class); - executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class); - sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class); - companySymbolsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class); - profileDocumentImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ProfileDocument, ProfileDocument.class); - sTradeImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_STrades, STrades.class); - } - - private void clearTestDir() throws IOException { - FileUtils.deleteDirectory(outFolder); - outFolder.mkdir(); - } -} diff --git a/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest_BP.java b/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest_BP.java index bdb596c85..6fb95ef71 100644 --- a/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest_BP.java +++ b/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest_BP.java @@ -26,10 +26,7 @@ import ru.clearing.classes.statics.data.registry.TradingClearingRegistry; import ru.clearing.classes.statics.data.statement.Statement; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.platform.messaging.domain.Consts; -import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequest; -import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequestWithPeriod; import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequestWithSessionId; -import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequestWithSessionIdList; import ru.spcex.clearing.reports.config.BeanConfiguration; import ru.spcex.clearing.reports.config.ReportBuildersConfig; import ru.spcex.clearing.reports.config.TestConfig; @@ -176,193 +173,6 @@ public class ReportServiceTest_BP { @Test @Order(1) - public void createReportTest_OPERATIONAL_LIABILITIES_CLAIMS() throws IOException, CsvValidationException { - clearTestDir(); - final Long oldSessionIdDeposit = testExecutionDeposit.getSessionId(); - final Long oldSessionIdFond = testExecutionFond.getSessionId(); - - ReportRequestWithSessionId reportRequestWithSessionId = new ReportRequestWithSessionId(); - reportRequestWithSessionId.setReportId(ReportBuilderType.OPERATIONAL_LIABILITIES_CLAIMS.getKey()); - reportRequestWithSessionId.setSessionId(TEST_SESSION_ID_1); - - testExecutionDeposit.setSessionId(TEST_SESSION_ID_1); - testExecutionFond.setSessionId(TEST_SESSION_ID_1); - executionDepositImdg.update(testExecutionDeposit); - executionFondImdg.update(testExecutionFond); - - String jsonString = TestUtils.getJsonStringForSystem(reportRequestWithSessionId, 0L); - - TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(), - Consts.CREATE_REPORT_FOR_SESSION_ID, - reportRequestWithSessionIdCnt++, - 0, - jsonString); - - TestUtils.waitingSendAndCheckRecord(0L, producer); - - File outFile = outFolder.listFiles()[0]; - File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/bp/operational_liabilities_claims_expected.csv").getFile()); - compareCSVFiles(expectedFile, outFile, Arrays.asList("doc_time", "doc_date", "tr_date", "clearing_date", "tr_execDate", "clearing_time", "repaym_date")); - - testExecutionDeposit.setSessionId(oldSessionIdDeposit); - testExecutionFond.setSessionId(oldSessionIdFond); - executionDepositImdg.update(testExecutionDeposit); - executionFondImdg.update(testExecutionFond); - - outFile.delete(); - } - - @Test - @Order(2) - public void createReportTest_PERIOD_LIABILITIES_CLAIMS() throws CsvValidationException, IOException { - clearTestDir(); - ReportRequestWithSessionIdList reportRequestWithPeriod = new ReportRequestWithSessionIdList(); - reportRequestWithPeriod.setReportId(ReportBuilderType.PERIOD_LIABILITIES_CLAIMS.getKey()); - reportRequestWithPeriod.setSessionIdList(Arrays.asList(testExecutionDeposit.getSessionId(), testExecutionFond.getSessionId())); - - String jsonString = TestUtils.getJsonStringForSystem(reportRequestWithPeriod, 0L); - - TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(), - Consts.CREATE_REPORT_FOR_SESSION_ID_LIST, - reportRequestWithSessionIdListCnt++, - 0, - jsonString); - - TestUtils.waitingSendAndCheckRecord(0L, producer); - - File outFile = outFolder.listFiles()[0]; - File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/bp/period_liabilities_claims_expected.csv").getFile()); - compareCSVFiles(expectedFile, outFile, Arrays.asList("doc_time", "doc_date", "tr_date", "clearing_date", "tr_execDate", "clearing_time", "repaym_date")); - - outFile.delete(); - } - - @Test - @Order(3) - public void createReportTest_SUMMARY_LIABILITIES_CLAIMS() throws CsvValidationException, IOException { - clearTestDir(); - ReportRequest reportRequest = new ReportRequest(); - reportRequest.setReportId(ReportBuilderType.SUMMARY_LIABILITIES_CLAIMS.getKey()); - String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L); - - TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(), - Consts.CREATE_REPORT, - reportRequestCnt++, - 0, - jsonString); - - TestUtils.waitingSendAndCheckRecord(0L, producer); - - File outFile = outFolder.listFiles()[0]; - File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/bp/summary_liabilities_claims_expected.csv").getFile()); - compareCSVFiles(expectedFile, outFile, Arrays.asList("doc_time", "doc_date", "tr_date", "clearing_date", "tr_execDate", "clearing_time", "repaym_date")); - - outFile.delete(); - } - - @Test - @Order(4) - public void createReportTest_OPERATIONAL_MONEY_CHANGE() throws CsvValidationException, IOException { - clearTestDir(); - final Long oldRegistrySessionId_1 = testRegistry_1.getSessionId(); - final Long oldRegistrySessionId_2 = testRegistry_2.getSessionId(); - testRegistry_1.setSessionId(TEST_SESSION_ID_3); - testRegistry_2.setSessionId(TEST_SESSION_ID_3); - registryImdg.update(testRegistry_1); - registryImdg.update(testRegistry_2); - - ReportRequestWithSessionId reportRequest = new ReportRequestWithSessionId(); - reportRequest.setReportId(ReportBuilderType.OPERATIONAL_MONEY_CHANGE.getKey()); - reportRequest.setSessionId(TEST_SESSION_ID_3); - - String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L); - - TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(), - Consts.CREATE_REPORT_FOR_SESSION_ID, - reportRequestWithSessionIdCnt++, - 0, - jsonString); - - TestUtils.waitingSendAndCheckRecord(0L, producer); - - File outFile = outFolder.listFiles()[0]; - File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/bp/operational_money_change_expected.csv").getFile()); - compareCSVFiles(expectedFile, outFile, Arrays.asList("doc_time", "doc_date", "add_time", "withdraw_time")); - - testRegistry_1.setSessionId(oldRegistrySessionId_1); - testRegistry_2.setSessionId(oldRegistrySessionId_2); - registryImdg.update(testRegistry_1); - registryImdg.update(testRegistry_2); - outFile.delete(); - } - - @Test - @Order(5) - public void createReportTest_PERIOD_MONEY_CHANGE() throws CsvValidationException, IOException { - clearTestDir(); - ReportRequestWithPeriod reportRequest = new ReportRequestWithPeriod(); - reportRequest.setReportId(ReportBuilderType.PERIOD_MONEY_CHANGE.getKey()); - reportRequest.setStartDate(TEST_START_CLEARING_DATE); - reportRequest.setEndDate(TEST_END_CLEARING_DATE); - - String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L); - - TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(), - Consts.CREATE_REPORT_FOR_PERIOD, - reportRequestWithPeriodCnt++, - 0, - jsonString); - - TestUtils.waitingSendAndCheckRecord(0L, producer); - - File outFile = outFolder.listFiles()[0]; - File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/bp/period_money_change_expected.csv").getFile()); - compareCSVFiles(expectedFile, outFile, Arrays.asList("doc_time", "doc_date", "add_time", "withdraw_time")); - - outFile.delete(); - } - - @Test - @Order(6) - public void createReportTest_SUMMARY_MONEY_CHANGE() throws CsvValidationException, IOException { - clearTestDir(); - ReportRequest reportRequest = new ReportRequest(); - reportRequest.setReportId(ReportBuilderType.SUMMARY_MONEY_CHANGE.getKey()); - TestUtils.clearAllInImdg(registryImdg); - registryImdg.insert(testRegistry_1); - registryImdg.insert(testRegistry_2); - - String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L); - - TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(), - Consts.CREATE_REPORT, - reportRequestCnt++, - 0, - jsonString); - - TestUtils.waitingSendAndCheckRecord(0L, producer); - - File outFile = outFolder.listFiles()[0]; - File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/bp/summary_money_change_expected.csv").getFile()); - compareCSVFiles(expectedFile, outFile, Arrays.asList("doc_time", "doc_date", "add_time", "withdraw_time")); - - registryImdg.insert(testRegistryForCompanyId_1); - registryImdg.insert(testRegistryForCompanyId_2); - registryImdg.insert(tm_tRegistry_1); - registryImdg.insert(om_tRegistry_1); - registryImdg.insert(ts_tRegistry_1); - registryImdg.insert(os_tRegistry_1); - registryImdg.insert(tm_tRegistry_2); - registryImdg.insert(om_tRegistry_2); - registryImdg.insert(ts_tRegistry_2); - registryImdg.insert(os_tRegistry_2); - registryImdg.insert(testRegistry_1); - registryImdg.insert(testRegistry_2); - outFile.delete(); - } - - @Test - @Order(7) public void createReportTest_EXECUTED_DEAL_REPORT_INFTYPE_1() throws CsvValidationException, IOException { clearTestDir(); File expectedEmptyFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/bp/KS_BR_PFX64_empty_expected.csv").getFile()); @@ -397,7 +207,7 @@ public class ReportServiceTest_BP { File outFile = outFolder.listFiles((dir, name) -> name.contains("INFTYPE_1"))[0]; File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/bp/KS_BR_PFX64_INFTYPE_1_expected.csv").getFile()); - compareCSVFiles(expectedFile, outFile, Arrays.asList("tradeDate", "tradeTime", "settleDate")); + compareCSVFiles(expectedFile, outFile, Arrays.asList("TRADEDATE", "TRADETIME", "SETTLEDATE")); for (File file : outFolder.listFiles()) { if (!outFile.getName().equalsIgnoreCase(file.getName())) { @@ -414,7 +224,7 @@ public class ReportServiceTest_BP { } @Test - @Order(8) + @Order(2) public void createReportTest_EXECUTED_DEAL_REPORT_INFTYPE_2() throws CsvValidationException, IOException { clearTestDir(); File expectedEmptyFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/bp/KS_BR_PFX64_empty_expected.csv").getFile()); @@ -449,7 +259,7 @@ public class ReportServiceTest_BP { File outFile = outFolder.listFiles((dir, name) -> name.contains("INFTYPE_2"))[0]; File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/bp/KS_BR_PFX64_INFTYPE_2_expected.csv").getFile()); - compareCSVFiles(expectedFile, outFile, Arrays.asList("tradeDate", "tradeTime", "settleDate")); + compareCSVFiles(expectedFile, outFile, Arrays.asList("TRADEDATE", "TRADETIME", "SETTLEDATE")); for (File file : outFolder.listFiles()) { if (!outFile.getName().equalsIgnoreCase(file.getName())) { @@ -466,7 +276,7 @@ public class ReportServiceTest_BP { } @Test - @Order(9) + @Order(3) public void createReportTest_EXECUTED_DEAL_REPORT_INFTYPE_3() throws CsvValidationException, IOException { clearTestDir(); File expectedEmptyFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/bp/KS_BR_PFX64_empty_expected.csv").getFile()); @@ -498,7 +308,7 @@ public class ReportServiceTest_BP { File outFile = outFolder.listFiles((dir, name) -> name.contains("INFTYPE_3"))[0]; File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/bp/KS_BR_PFX64_INFTYPE_3_expected.csv").getFile()); - compareCSVFiles(expectedFile, outFile, Arrays.asList("tradeDate", "tradeTime", "settleDate")); + compareCSVFiles(expectedFile, outFile, Arrays.asList("TRADEDATE", "TRADETIME", "SETTLEDATE")); for (File file : outFolder.listFiles()) { if (!outFile.getName().equalsIgnoreCase(file.getName())) { @@ -515,7 +325,7 @@ public class ReportServiceTest_BP { } @Test - @Order(10) + @Order(4) public void createReportTest_EXECUTED_DEAL_REPORT_INFTYPE_4() throws CsvValidationException, IOException { clearTestDir(); File expectedEmptyFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/bp/KS_BR_PFX64_empty_expected.csv").getFile()); @@ -548,7 +358,7 @@ public class ReportServiceTest_BP { File outFile = outFolder.listFiles((dir, name) -> name.contains("INFTYPE_4"))[0]; File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/bp/KS_BR_PFX64_INFTYPE_4_expected.csv").getFile()); - compareCSVFiles(expectedFile, outFile, Arrays.asList("tradeDate", "tradeTime", "settleDate")); + compareCSVFiles(expectedFile, outFile, Arrays.asList("TRADEDATE", "TRADETIME", "SETTLEDATE")); for (File file : outFolder.listFiles()) { if (!outFile.getName().equalsIgnoreCase(file.getName())) { @@ -565,7 +375,7 @@ public class ReportServiceTest_BP { } @Test - @Order(11) + @Order(5) public void createReportTest_UNFULFILLED_DEAL_REPORT() throws IOException, CsvValidationException { clearTestDir(); @@ -598,7 +408,7 @@ public class ReportServiceTest_BP { File outFile = outFolder.listFiles()[0]; File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/bp/unfulfilled_deal_report_expected.csv").getFile()); - compareCSVFiles(expectedFile, outFile, Arrays.asList("tradeDate")); + compareCSVFiles(expectedFile, outFile, Arrays.asList("TRADEDATE")); testExecutionFond.setSessionId(oldExecutionFondSessionId); testExecutionFond.setCoverageStatus(oldExecutionFondCoverageStatus); diff --git a/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest_KS.java b/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest_KS.java index dd62a35e0..5d859c6ba 100644 --- a/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest_KS.java +++ b/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest_KS.java @@ -18,15 +18,9 @@ import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.company.CompanySymbols; import ru.clearing.classes.statics.data.execution.ExecutionDeposit; import ru.clearing.classes.statics.data.execution.ExecutionFond; -import ru.clearing.classes.statics.data.instrument.issue.FixedIncomeSecurity; -import ru.clearing.classes.statics.data.misc.Listing; -import ru.clearing.classes.statics.data.misc.STrades; import ru.clearing.classes.statics.data.misc.Session; -import ru.clearing.classes.statics.data.payment.PaymentInstruction; import ru.clearing.classes.statics.data.profile.ProfileDocument; import ru.clearing.classes.statics.data.registry.Registry; -import ru.clearing.classes.statics.data.registry.TradingClearingRegistry; -import ru.clearing.classes.statics.data.statement.Statement; import ru.clearing.platform.dictionary.RegistryCodeDictionary; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.platform.messaging.domain.Consts; @@ -85,12 +79,6 @@ public class ReportServiceTest_KS { private Imdg profileDocumentImdg; private Long COMPANY_ID; - private Imdg listingImdg; - private Imdg fixedIncomeSecurityImdg; - private Imdg tradingClearingRegistryImdg; - private Imdg paymentInstructionImdg; - private Imdg statementImdg; - private Imdg sTradeImdg; @Autowired private ReportService reportService; @Autowired diff --git a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/bp/KS_BR_PFX64_INFTYPE_1_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/bp/KS_BR_PFX64_INFTYPE_1_expected.csv index e229b43e4..8ef89c127 100644 --- a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/bp/KS_BR_PFX64_INFTYPE_1_expected.csv +++ b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/bp/KS_BR_PFX64_INFTYPE_1_expected.csv @@ -1,2 +1,2 @@ -securityId,tradeNo,tradeDate,tradeTime,settleDate,settleCode,price,quanity,value -"test-security-symbol-1","777","20.06.2023","25.08.1994","30.06.2023","test-settle-code","1000","7777","7777777" +"SECURITYID","TRADENO","TRADEDATE","TRADETIME","SETTLEDATE","SETTLECODE","PRICE","QUANTITY","VALUE" +"test-security-symbol-1","777","27.06.2023","25.08.1994T01:22:57","07.07.2023","test-settle-code","1000.00","7777.00","7777777.00" diff --git a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/bp/KS_BR_PFX64_INFTYPE_2_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/bp/KS_BR_PFX64_INFTYPE_2_expected.csv index 2c9194b93..3d74020e4 100644 --- a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/bp/KS_BR_PFX64_INFTYPE_2_expected.csv +++ b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/bp/KS_BR_PFX64_INFTYPE_2_expected.csv @@ -1,2 +1,2 @@ -securityId,tradeNo,tradeDate,tradeTime,settleDate,settleCode,price,quanity,value -"test-security-symbol-1","777","30.06.2023","25.08.1994","30.06.2023","test-settle-code","1000","7777","7777777" +"SECURITYID","TRADENO","TRADEDATE","TRADETIME","SETTLEDATE","SETTLECODE","PRICE","QUANTITY","VALUE" +"test-security-symbol-1","777","07.07.2023","25.08.1994T01:22:57","07.07.2023","test-settle-code","1000.00","7777.00","7777777.00" diff --git a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/bp/KS_BR_PFX64_INFTYPE_3_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/bp/KS_BR_PFX64_INFTYPE_3_expected.csv index 89c68a77a..38dc7cba3 100644 --- a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/bp/KS_BR_PFX64_INFTYPE_3_expected.csv +++ b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/bp/KS_BR_PFX64_INFTYPE_3_expected.csv @@ -1,2 +1,2 @@ -securityId,tradeNo,tradeDate,tradeTime,settleDate,settleCode,price,quanity,value -"test-security-symbol-1","777","10.07.2023","25.08.1994","10.07.2023","test-settle-code","1000","7777","7777777" +"SECURITYID","TRADENO","TRADEDATE","TRADETIME","SETTLEDATE","SETTLECODE","PRICE","QUANTITY","VALUE" +"test-security-symbol-1","777","17.07.2023","25.08.1994T01:22:57","17.07.2023","test-settle-code","1000.00","7777.00","7777777.00" diff --git a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/bp/KS_BR_PFX64_INFTYPE_4_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/bp/KS_BR_PFX64_INFTYPE_4_expected.csv index 380ae1a20..5a47755cb 100644 --- a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/bp/KS_BR_PFX64_INFTYPE_4_expected.csv +++ b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/bp/KS_BR_PFX64_INFTYPE_4_expected.csv @@ -1,2 +1,2 @@ -securityId,tradeNo,tradeDate,tradeTime,settleDate,settleCode,price,quanity,value -"test-security-symbol-1","777","10.07.2023","25.08.1994","30.06.2023","test-settle-code","1000","7777","7777777" +"SECURITYID","TRADENO","TRADEDATE","TRADETIME","SETTLEDATE","SETTLECODE","PRICE","QUANTITY","VALUE" +"test-security-symbol-1","777","17.07.2023","25.08.1994T01:22:57","07.07.2023","test-settle-code","1000.00","7777.00","7777777.00" diff --git a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/bp/KS_BR_PFX64_empty_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/bp/KS_BR_PFX64_empty_expected.csv index 16f77f588..ff4212177 100644 --- a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/bp/KS_BR_PFX64_empty_expected.csv +++ b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/bp/KS_BR_PFX64_empty_expected.csv @@ -1 +1 @@ -securityId,tradeNo,tradeDate,tradeTime,settleDate,settleCode,price,quanity,value +"SECURITYID","TRADENO","TRADEDATE","TRADETIME","SETTLEDATE","SETTLECODE","PRICE","QUANITY","VALUE" diff --git a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/bp/operational_liabilities_claims_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/bp/operational_liabilities_claims_expected.csv deleted file mode 100644 index ece5004dd..000000000 --- a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/bp/operational_liabilities_claims_expected.csv +++ /dev/null @@ -1,3 +0,0 @@ -id,doc_date,doc_time,doc_name,doc_type,clearingHouse,firmId,firName,session_id,clearing_date,clearing_time,trdAccId,account,depo_account,currency,tr_id,securityId,tr_buySell,tr_date,tr_execDate,exec_status,repaym_date,tr_price,nominal,lot_value,tr_lot,tr_quantity,tr_value,tr_accruedint,accruedint,tr_clrComm,tr_exhComm,cash_liability,depo_liability,cash_netto,depo_netto -"0","16.05.2023","20:45:22","Отчет об обязательствах/требованиях Участника клиринга","KS_FIRMID_LIABILITIES","COMPANY_HOUSE","1007","test-company-fullname-1","10007","16.04.2023","16.04.2023","test-trading-clearing-registry-1","11","13","test-settlement-currency-1","777","3007","S","06.05.2023","24.04.2023","","","1000","333","12","777","7777","7777777","3333","0","","","7777777","7777","777","888" -"1","16.05.2023","20:45:25","Отчет об обязательствах/требованиях Участника клиринга","KS_FIRMID_LIABILITIES","COMPANY_HOUSE","1008","test-company-fullname-2","10007","06.04.2023","06.04.2023","test-trading-clearing-registry-2","12","14","test-settlement-currency-2","888","3008","B","26.04.2023","14.05.2023","Y","14.05.2023","88","","34","888","","1","","","","","1","","777","888" diff --git a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/bp/operational_money_change_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/bp/operational_money_change_expected.csv deleted file mode 100644 index b9417e3f8..000000000 --- a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/bp/operational_money_change_expected.csv +++ /dev/null @@ -1,3 +0,0 @@ -id,doc_date,doc_time,doc_name,doc_type,clearingHouse,firmId,firName,trdAccId,account,currency,registry_code,registry_name,open_balance,change_balance,add_withdraw,close_balance,remarks,add_sum,add_time,withdraw_sum,withdraw_time -"0","17.05.2023","12:10:51","Отчет об изменении суммы денежных средств и (или) количества иного имущества Участника клиринга","KS_FIRMID_ASSETS","COMPANY_HOUSE","1007","test-company-fullname-1","test-trading-clearing-registry-1","11","test-trading-currency-1","999","CM","3","777","700000","780","","777777","17.05.2023T12:10:50","77777","17.05.2023T12:10:50" -"1","17.05.2023","12:10:51","Отчет об изменении суммы денежных средств и (или) количества иного имущества Участника клиринга","KS_FIRMID_ASSETS","COMPANY_HOUSE","1008","test-company-fullname-2","test-trading-clearing-registry-2","12","test-trading-currency-2","666","CM","2","888","900000","890","","999999","17.05.2023T12:10:50","99999","17.05.2023T12:10:50" diff --git a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/bp/period_liabilities_claims_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/bp/period_liabilities_claims_expected.csv deleted file mode 100644 index 85759fa8b..000000000 --- a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/bp/period_liabilities_claims_expected.csv +++ /dev/null @@ -1,3 +0,0 @@ -id,doc_date,doc_time,doc_name,doc_type,clearingHouse,firmId,firName,session_id,clearing_date,clearing_time,trdAccId,account,depo_account,currency,tr_id,securityId,tr_buySell,tr_date,tr_execDate,exec_status,repaym_date,tr_price,nominal,lot_value,tr_lot,tr_quantity,tr_value,tr_accruedint,accruedint,tr_clrComm,tr_exhComm,cash_liability,depo_liability,cash_netto,depo_netto -"0","17.05.2023","10:51:13","Отчет об обязательствах/требованиях Участника клиринга","KS_FIRMID_LIABILITIES","COMPANY_HOUSE","1007","test-company-fullname-1","10007","17.04.2023","17.04.2023","test-trading-clearing-registry-1","11","13","test-settlement-currency-1","777","3007","S","07.05.2023","25.04.2023","","","1000","333","12","777","7777","7777777","3333","0","","","7777777","7777","777","888" -"1","17.05.2023","10:51:13","Отчет об обязательствах/требованиях Участника клиринга","KS_FIRMID_LIABILITIES","COMPANY_HOUSE","1008","test-company-fullname-2","10008","07.04.2023","07.04.2023","test-trading-clearing-registry-2","12","14","test-settlement-currency-2","888","3008","B","27.04.2023","15.05.2023","Y","15.05.2023","88","","34","888","","1","","","","","1","","777","888" diff --git a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/bp/period_money_change_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/bp/period_money_change_expected.csv deleted file mode 100644 index a37c93d19..000000000 --- a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/bp/period_money_change_expected.csv +++ /dev/null @@ -1,3 +0,0 @@ -id,doc_date,doc_time,doc_name,doc_type,clearingHouse,firmId,firName,trdAccId,account,currency,registry_code,registry_name,open_balance,change_balance,add_withdraw,close_balance,remarks,add_sum,add_time,withdraw_sum,withdraw_time -"0","17.05.2023","12:18:01","Отчет об изменении суммы денежных средств и (или) количества иного имущества Участника клиринга","KS_FIRMID_ASSETS","COMPANY_HOUSE","1007","test-company-fullname-1","test-trading-clearing-registry-1","11","test-trading-currency-1","999","CM","3","777","700000","780","","777777","17.05.2023T12:18:01","77777","17.05.2023T12:18:01" -"1","17.05.2023","12:18:01","Отчет об изменении суммы денежных средств и (или) количества иного имущества Участника клиринга","KS_FIRMID_ASSETS","COMPANY_HOUSE","1008","test-company-fullname-2","test-trading-clearing-registry-2","12","test-trading-currency-2","666","CM","2","888","900000","890","","999999","17.05.2023T12:18:01","99999","17.05.2023T12:18:01" diff --git a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/bp/summary_liabilities_claims_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/bp/summary_liabilities_claims_expected.csv deleted file mode 100644 index b8140509a..000000000 --- a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/bp/summary_liabilities_claims_expected.csv +++ /dev/null @@ -1,3 +0,0 @@ -id,doc_date,doc_time,doc_name,doc_type,clearingHouse,firmId,firName,session_id,clearing_date,clearing_time,trdAccId,account,depo_account,currency,tr_id,securityId,tr_buySell,tr_date,tr_execDate,exec_status,repaym_date,tr_price,nominal,lot_value,tr_lot,tr_quantity,tr_value,tr_accruedint,accruedint,tr_clrComm,tr_exhComm,cash_liability,depo_liability,cash_netto,depo_netto -0,"17.05.2023","10:58:08","Отчет об обязательствах/требованиях Участника клиринга","KS_FIRMID_LIABILITIES","COMPANY_HOUSE","1007","test-company-fullname-1","10007","17.04.2023","17.04.2023","test-trading-clearing-registry-1","11","13","test-settlement-currency-1","777","3007","S","07.05.2023","25.04.2023","","","1000","333","12","777","7777","7777777","3333","0","","","7777777","7777","777","888" -1,"17.05.2023","10:58:08","Отчет об обязательствах/требованиях Участника клиринга","KS_FIRMID_LIABILITIES","COMPANY_HOUSE","1008","test-company-fullname-2","10008","07.04.2023","07.04.2023","test-trading-clearing-registry-2","12","14","test-settlement-currency-2","888","3008","B","27.04.2023","15.05.2023",Y,"15.05.2023","88","","34","888","","1","","","","","1","","777","888" diff --git a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/bp/summary_money_change_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/bp/summary_money_change_expected.csv deleted file mode 100644 index f117db7c2..000000000 --- a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/bp/summary_money_change_expected.csv +++ /dev/null @@ -1,3 +0,0 @@ -id,doc_date,doc_time,doc_name,doc_type,clearingHouse,firmId,firName,trdAccId,account,currency,registry_code,registry_name,open_balance,change_balance,add_withdraw,close_balance,remarks,add_sum,add_time,withdraw_sum,withdraw_time -"0","17.05.2023","12:25:42","Отчет об изменении суммы денежных средств и (или) количества иного имущества Участника клиринга","KS_FIRMID_ASSETS","COMPANY_HOUSE","1007","test-company-fullname-1","test-trading-clearing-registry-1","11","test-trading-currency-1","999","CM","3","777","700000","780","","777777","17.05.2023T12:25:42","77777","17.05.2023T12:25:42" -"1","17.05.2023","12:25:42","Отчет об изменении суммы денежных средств и (или) количества иного имущества Участника клиринга","KS_FIRMID_ASSETS","COMPANY_HOUSE","1008","test-company-fullname-2","test-trading-clearing-registry-2","12","test-trading-currency-2","666","CM","2","888","900000","890","","999999","17.05.2023T12:25:42","99999","17.05.2023T12:25:42" diff --git a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_CASH_NETTO_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_CASH_NETTO_expected.csv index 1730c1482..5bbee9ce3 100644 --- a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_CASH_NETTO_expected.csv +++ b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_CASH_NETTO_expected.csv @@ -1,2 +1,2 @@ -FIRMID,SESSION_ID,SESSION_DATE,ACCOUNT,VALUE,DATE -"TRADING_CODE","2","20.01.1970T02:49:58","ACCOUNT","22,22","30.06.2023" +"FIRMID","SESSION_ID","SESSION_DATE","ACCOUNT","VALUE","DATE" +"TRADING_CODE","2","19.01.1970T23:49:58","ACCOUNT","22.22","07.07.2023" diff --git a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_CASH_REGISTERS_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_CASH_REGISTERS_expected.csv index fd4d9201b..fcb22f6a3 100644 --- a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_CASH_REGISTERS_expected.csv +++ b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_CASH_REGISTERS_expected.csv @@ -1,2 +1,2 @@ -FIRMID,ACCOUNT,DATE,REGISTER_CODE,REGISTER_NAME,OPEN_BALANCE,CHANGE_BALANCE,ADD_WITHDRAW,CLOSE_BALANCE,REMARKS -"TRADING_CODE","ACCOUNT","30.06.2023","AM_T","AM_T_NAME","77,78","66,67","66,67","11,11","" +"FIRMID","ACCOUNT","DATE","REGISTER_CODE","REGISTER_NAME","OPEN_BALANCE","CHANGE_BALANCE","ADD_WITHDRAW","CLOSE_BALANCE","REMARKS" +"TRADING_CODE","ACCOUNT","07.07.2023","AM_T","AM_T_NAME","77.78","66.67","66.67","11.11","" diff --git a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_CASH_REGISTER_SUMS_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_CASH_REGISTER_SUMS_expected.csv index 3d4a9ed9f..aaa222cf8 100644 --- a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_CASH_REGISTER_SUMS_expected.csv +++ b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_CASH_REGISTER_SUMS_expected.csv @@ -1,3 +1,3 @@ -FIRMID,ACCOUNT,REGISTER_CODE,ADD_SUM,ADD_TIME,ADD_DATE -"TRADING_CODE","ACCOUNT","AM__","44,44","","04.07.2023" -"TRADING_CODE","ACCOUNT","AM__","-22,22","","04.07.2023" +"FIRMID","ACCOUNT","REGISTER_CODE","ADD_SUM","ADD_TIME","ADD_DATE" +"TRADING_CODE","ACCOUNT","AM__","44.44","","2023-07-07" +"TRADING_CODE","ACCOUNT","AM__","-22.22","","2023-07-07" diff --git a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_DEPO_NETTO_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_DEPO_NETTO_expected.csv index d3083705b..a6b2330a1 100644 --- a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_DEPO_NETTO_expected.csv +++ b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_DEPO_NETTO_expected.csv @@ -1,2 +1,2 @@ -FIRMID,SESSION_ID,SESSION_DATE,ACCOUNT,SECURITYID,VALUE,DATE -"TRADING_CODE","2","20.01.1970T02:49:58","ACCOUNT","SECURITY_SYMBOL","22,22","30.06.2023" +"FIRMID","SESSION_ID","SESSION_DATE","ACCOUNT","SECURITYID","VALUE","DATE" +"TRADING_CODE","2","19.01.1970T23:49:58","ACCOUNT","SECURITY_SYMBOL","22.22","07.07.2023" diff --git a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_DEPO_REGISTERS_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_DEPO_REGISTERS_expected.csv index cd8b176ea..994182274 100644 --- a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_DEPO_REGISTERS_expected.csv +++ b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_DEPO_REGISTERS_expected.csv @@ -1,2 +1,2 @@ -FIRMID,ACCOUNT,DATE,SECURITYID,REGISTER_CODE,REGISTER_NAME,OPEN_QUANTITY,CHANGE_QUANTITY,ADD_WITHDRAW_DEPO,CLOSE_QUANTITY,REMARKS -"TRADING_CODE","ACCOUNT","30.06.2023","","AS_T","AS_T_NAME","77.777777777","66.66666668","66.66666668","11.11111111","" +"FIRMID","ACCOUNT","DATE","SECURITYID","REGISTER_CODE","REGISTER_NAME","OPEN_QUANTITY","CHANGE_QUANTITY","ADD_WITHDRAW_DEPO","CLOSE_QUANTITY","REMARKS" +"TRADING_CODE","ACCOUNT","07.07.2023","","AS_T","AS_T_NAME","77.78","66.67","66.67","11.11","" diff --git a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_DEPO_REGISTER_QUANTITIES_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_DEPO_REGISTER_QUANTITIES_expected.csv index 54f7e4e31..04165ce73 100644 --- a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_DEPO_REGISTER_QUANTITIES_expected.csv +++ b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_DEPO_REGISTER_QUANTITIES_expected.csv @@ -1,3 +1,3 @@ -FIRMID,ACCOUNT,SECURITYID,REGISTER_CODE,ADD_QUANTITY,ADD_TIME,ADD_DATE -"TRADING_CODE","ACCOUNT","SECURITY_SYMBOL","AS__","44,44","","04.07.2023" -"TRADING_CODE","ACCOUNT","SECURITY_SYMBOL","AS__","-22,22","","04.07.2023" +"FIRMID","ACCOUNT","SECURITYID","REGISTER_CODE","ADD_QUANTITY","ADD_TIME","ADD_DATE" +"TRADING_CODE","ACCOUNT","SECURITY_SYMBOL","AS__","44.44","","07.07.2023" +"TRADING_CODE","ACCOUNT","SECURITY_SYMBOL","AS__","-22.22","","07.07.2023" diff --git a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_FIRM_DETAILS_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_FIRM_DETAILS_expected.csv index ec5427532..e1c1a755d 100644 --- a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_FIRM_DETAILS_expected.csv +++ b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_FIRM_DETAILS_expected.csv @@ -1,2 +1,2 @@ -FIRMID,PART_INN,PART_KPP,AGREEMENT_NUMBER,AGREEMENT_DATE,AGREEMENT_NAME,FIRM_NAME +"FIRMID","PART_INN","PART_KPP","AGREEMENT_NUMBER","AGREEMENT_DATE","AGREEMENT_NAME","FIRM_NAME" "TRADING_CODE","INN___","CPP____","NUMBER","01.01.1999","NAME","FULL_NAME" diff --git a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_TRADES_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_TRADES_expected.csv index 629273089..8a743f386 100644 --- a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_TRADES_expected.csv +++ b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_TRADES_expected.csv @@ -1,3 +1,3 @@ -SESSION_ID,SESSION_DATE,TR_ID,FIRM_ID,TKR,CASH_LIABILITY,DEPO_LIABILITY,TRADE_NUM,CLASS_CODE,TRADE_DATE,STATUS -"3","20.01.1970T07:09:07","6","TRADING_CODE","666","8888,89","","222","","20.01.1970T02:49:58","3" -"2","20.01.1970T15:54:43","4","TRADING_CODE","666","8888,89","123.456789","222","","20.01.1970T02:49:58","1" +"SESSION_ID","SESSION_DATE","TR_ID","FIRM_ID","TKR","CASH_LIABILITY","DEPO_LIABILITY","TRADE_NUM","CLASS_CODE","TRADE_DATE","STATUS" +"3","20.01.1970T04:09:07","6","TRADING_CODE","666","8888.89","","222","","19.01.1970T23:49:58","3" +"2","20.01.1970T12:54:43","4","TRADING_CODE","666","8888.89","123.46","222","","19.01.1970T23:49:58","1" diff --git a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/ReportBuilderType.java b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/ReportBuilderType.java index 3b551b4f0..66ba08544 100644 --- a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/ReportBuilderType.java +++ b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/ReportBuilderType.java @@ -7,12 +7,6 @@ import ru.spcex.platform.utils.enumeration.IEnumKey; * todo сделать для них dictionary */ public enum ReportBuilderType implements IEnumKey { - OPERATIONAL_LIABILITIES_CLAIMS("operational-liabilities-claims"), - OPERATIONAL_MONEY_CHANGE("operational-money-change"), - SUMMARY_LIABILITIES_CLAIMS("summary-liabilities-claims"), - SUMMARY_MONEY_CHANGE("summary-money-change"), - PERIOD_LIABILITIES_CLAIMS("period-liabilities-claims"), - PERIOD_MONEY_CHANGE("period-money-change"), EXECUTED_DEAL_REPORT("executed-deal-report"), UNFULFILLED_DEAL_REPORT("unfulfilled-deal-report"), KS_REP_CASH_REGISTERS("ks_rep_cash_registers"), @@ -23,8 +17,6 @@ public enum ReportBuilderType implements IEnumKey { KS_REP_CASH_NETTO("ks_rep_cash_netto"), KS_REP_DEPO_NETTO("ks_rep_depo_netto"), KS_REP_FIRM_DETAILS("ks_rep_firm_details"), - - SIMPLE_REPORT("simple_report") ; private final String key; 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 d7004e480..29d023232 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 @@ -11,6 +11,7 @@ public enum ReportType implements IEnumKey { PFX65("PFX65"), REPORT_KS_TMP("REPORT_KS_TMP"), REPORT_KS_FINAL("REPORT_KS_FINAL"), + ; private final String key; diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/Consts.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/Consts.java index f85f7b290..3a524711c 100644 --- a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/Consts.java +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/Consts.java @@ -86,8 +86,6 @@ public interface Consts { String CREATE_NOTIFICATION_NTCR = "create-notification-ntcr"; String CREATE_NOTIFICATION_NCMP = "create-notification-ncmp"; String CREATE_REPORT_FOR_SESSION_ID = "create-report-for-session-id"; - String CREATE_REPORT_FOR_SESSION_ID_LIST = "create-report-for-session-id-list"; - String CREATE_REPORT_FOR_PERIOD = "create-report-for-period"; String CREATE_REPORT_FOR_REGISTRY = "create-report-for-registry"; String ACCOUNT_NEW_SDF01 = "account-new-sdf01";