From 18b8e6d81f699bb2a2484296cc923c190d71051f Mon Sep 17 00:00:00 2001 From: akulikov Date: Wed, 10 May 2023 11:45:28 +0300 Subject: [PATCH 01/32] repackage old reports --- .../reports/ReportsServiceApplication.java | 6 - .../reports/{ => bt}/bt_12_2/ReportPA_B.java | 2 +- .../reports/{ => bt}/bt_12_2/ReportPA_IV.java | 2 +- .../reports/{ => bt}/bt_13/ReportDOCIN.java | 2 +- .../reports/{ => bt}/bt_13/ReportDOCOUT.java | 2 +- .../{ => bt}/bt_16_5/ReportINACCNT.java | 2 +- .../{ => bt}/bt_17_1/ReportBR_0420315_P1.java | 2 +- .../{ => bt}/bt_17_1/ReportBR_0420315_P2.java | 2 +- .../{ => bt}/bt_17_2/ReportBR_0420317.java | 2 +- .../{ => bt}/bt_17_3/ReportBR_0420318.java | 2 +- .../{ => bt}/bt_17_4/ReportBR_0420314_P1.java | 2 +- .../{ => bt}/bt_17_4/ReportBR_0420314_P2.java | 2 +- .../{ => bt}/bt_17_5/ReportBR_0420312_P1.java | 2 +- .../bt_17_5/ReportBR_0420312_P10.java | 2 +- .../{ => bt}/bt_17_5/ReportBR_0420312_P2.java | 2 +- .../{ => bt}/bt_17_5/ReportBR_0420312_P3.java | 2 +- .../{ => bt}/bt_17_5/ReportBR_0420312_P4.java | 2 +- .../{ => bt}/bt_17_5/ReportBR_0420312_P5.java | 2 +- .../{ => bt}/bt_17_5/ReportBR_0420312_P6.java | 2 +- .../{ => bt}/bt_17_5/ReportBR_0420312_P7.java | 2 +- .../{ => bt}/bt_17_5/ReportBR_0420312_P8.java | 2 +- .../{ => bt}/bt_17_5/ReportBR_0420312_P9.java | 2 +- .../bt_12_2}/ReportPA_B_Collector.java | 4 +- .../bt_12_2}/ReportPA_IV_Collector.java | 4 +- .../{ => bt/bt_13}/ReportDOCIN_Collector.java | 4 +- .../bt_13}/ReportDOCOUT_Collector.java | 4 +- .../bt_16_5}/ReportINACCNT_Collector.java | 4 +- .../ReportBR_0420315_P1_Collector.java | 9 +- .../ReportBR_0420315_P2_collector.java | 112 ++++---- .../bt_17_2}/ReportBR_0420317_Collector.java | 4 +- .../bt_17_3}/ReportBR_0420318_Collector.java | 9 +- .../ReportBR_0420314_P1_Collector.java | 199 +++++++------- .../ReportBR_0420314_P2_Collector.java | 257 +++++++++--------- .../ReportBR_0420312_P10_Collector.java | 96 +++---- .../ReportBR_0420312_P1_Collector.java | 167 ++++++------ .../ReportBR_0420312_P2_Collector.java | 123 ++++----- .../ReportBR_0420312_P3_Collector.java | 5 +- .../ReportBR_0420312_P4_Collector.java | 96 +++---- .../ReportBR_0420312_P5_Collector.java | 96 +++---- .../ReportBR_0420312_P6_Collector.java | 96 +++---- .../ReportBR_0420312_P7_Collector.java | 4 +- .../ReportBR_0420312_P8_Collector.java | 197 +++++++------- .../ReportBR_0420312_P9_Collector.java | 161 +++++------ 43 files changed, 851 insertions(+), 848 deletions(-) rename clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/{ => bt}/bt_12_2/ReportPA_B.java (98%) rename clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/{ => bt}/bt_12_2/ReportPA_IV.java (98%) rename clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/{ => bt}/bt_13/ReportDOCIN.java (98%) rename clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/{ => bt}/bt_13/ReportDOCOUT.java (98%) rename clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/{ => bt}/bt_16_5/ReportINACCNT.java (98%) rename clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/{ => bt}/bt_17_1/ReportBR_0420315_P1.java (97%) rename clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/{ => bt}/bt_17_1/ReportBR_0420315_P2.java (97%) rename clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/{ => bt}/bt_17_2/ReportBR_0420317.java (97%) rename clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/{ => bt}/bt_17_3/ReportBR_0420318.java (98%) rename clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/{ => bt}/bt_17_4/ReportBR_0420314_P1.java (98%) rename clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/{ => bt}/bt_17_4/ReportBR_0420314_P2.java (97%) rename clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/{ => bt}/bt_17_5/ReportBR_0420312_P1.java (97%) rename clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/{ => bt}/bt_17_5/ReportBR_0420312_P10.java (96%) rename clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/{ => bt}/bt_17_5/ReportBR_0420312_P2.java (97%) rename clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/{ => bt}/bt_17_5/ReportBR_0420312_P3.java (97%) rename clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/{ => bt}/bt_17_5/ReportBR_0420312_P4.java (96%) rename clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/{ => bt}/bt_17_5/ReportBR_0420312_P5.java (96%) rename clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/{ => bt}/bt_17_5/ReportBR_0420312_P6.java (96%) rename clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/{ => bt}/bt_17_5/ReportBR_0420312_P7.java (96%) rename clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/{ => bt}/bt_17_5/ReportBR_0420312_P8.java (97%) rename clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/{ => bt}/bt_17_5/ReportBR_0420312_P9.java (97%) rename clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/{ => bt/bt_12_2}/ReportPA_B_Collector.java (97%) rename clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/{ => bt/bt_12_2}/ReportPA_IV_Collector.java (97%) rename clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/{ => bt/bt_13}/ReportDOCIN_Collector.java (95%) rename clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/{ => bt/bt_13}/ReportDOCOUT_Collector.java (95%) rename clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/{ => bt/bt_16_5}/ReportINACCNT_Collector.java (96%) rename clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/{ => bt/bt_17_1}/ReportBR_0420315_P1_Collector.java (97%) rename clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/{ => bt/bt_17_1}/ReportBR_0420315_P2_collector.java (92%) rename clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/{ => bt/bt_17_2}/ReportBR_0420317_Collector.java (96%) rename clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/{ => bt/bt_17_3}/ReportBR_0420318_Collector.java (96%) rename clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/{ => bt/bt_17_4}/ReportBR_0420314_P1_Collector.java (95%) rename clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/{ => bt/bt_17_4}/ReportBR_0420314_P2_Collector.java (95%) rename clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/{ => bt/bt_17_5}/ReportBR_0420312_P10_Collector.java (91%) rename clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/{ => bt/bt_17_5}/ReportBR_0420312_P1_Collector.java (95%) rename clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/{ => bt/bt_17_5}/ReportBR_0420312_P2_Collector.java (92%) rename clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/{ => bt/bt_17_5}/ReportBR_0420312_P3_Collector.java (92%) rename clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/{ => bt/bt_17_5}/ReportBR_0420312_P4_Collector.java (91%) rename clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/{ => bt/bt_17_5}/ReportBR_0420312_P5_Collector.java (91%) rename clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/{ => bt/bt_17_5}/ReportBR_0420312_P6_Collector.java (91%) rename clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/{ => bt/bt_17_5}/ReportBR_0420312_P7_Collector.java (93%) rename clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/{ => bt/bt_17_5}/ReportBR_0420312_P8_Collector.java (95%) rename clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/{ => bt/bt_17_5}/ReportBR_0420312_P9_Collector.java (95%) diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/ReportsServiceApplication.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/ReportsServiceApplication.java index 627e9bbf1..06efcbe60 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/ReportsServiceApplication.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/ReportsServiceApplication.java @@ -1,8 +1,5 @@ package ru.spcex.clearing.reports; -import com.thoughtworks.xstream.XStream; -import com.thoughtworks.xstream.io.naming.NoNameCoder; -import com.thoughtworks.xstream.io.xml.XppDriver; import org.apache.commons.lang3.exception.ExceptionUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -10,11 +7,8 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.context.ConfigurableApplicationContext; import ru.spcex.clearing.reports.config.ReportCmdParser; -import ru.spcex.clearing.reports.reports.bt_16_5.ReportINACCNT; import ru.spcex.clearing.reports.services.QCommandExecutor; import ru.spcex.clearing.reports.services.ReportsServiceCommand; -import ru.spcex.clearing.reports.services.collector.ReportINACCNT_Collector; -import ru.spcex.platform.imdg.api.ImdgProvider; @SpringBootApplication public class ReportsServiceApplication { diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_12_2/ReportPA_B.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_12_2/ReportPA_B.java similarity index 98% rename from clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_12_2/ReportPA_B.java rename to clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_12_2/ReportPA_B.java index 1f3c7ae98..b4e020fee 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_12_2/ReportPA_B.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_12_2/ReportPA_B.java @@ -1,4 +1,4 @@ -package ru.spcex.clearing.reports.reports.bt_12_2; +package ru.spcex.clearing.reports.reports.bt.bt_12_2; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAsAttribute; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_12_2/ReportPA_IV.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_12_2/ReportPA_IV.java similarity index 98% rename from clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_12_2/ReportPA_IV.java rename to clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_12_2/ReportPA_IV.java index 12d124dc7..781602111 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_12_2/ReportPA_IV.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_12_2/ReportPA_IV.java @@ -1,4 +1,4 @@ -package ru.spcex.clearing.reports.reports.bt_12_2; +package ru.spcex.clearing.reports.reports.bt.bt_12_2; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAsAttribute; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_13/ReportDOCIN.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_13/ReportDOCIN.java similarity index 98% rename from clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_13/ReportDOCIN.java rename to clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_13/ReportDOCIN.java index 3b8a7171b..5205c1155 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_13/ReportDOCIN.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_13/ReportDOCIN.java @@ -1,4 +1,4 @@ -package ru.spcex.clearing.reports.reports.bt_13; +package ru.spcex.clearing.reports.reports.bt.bt_13; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAsAttribute; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_13/ReportDOCOUT.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_13/ReportDOCOUT.java similarity index 98% rename from clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_13/ReportDOCOUT.java rename to clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_13/ReportDOCOUT.java index 05f22cc48..dae9330e3 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_13/ReportDOCOUT.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_13/ReportDOCOUT.java @@ -1,4 +1,4 @@ -package ru.spcex.clearing.reports.reports.bt_13; +package ru.spcex.clearing.reports.reports.bt.bt_13; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAsAttribute; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_16_5/ReportINACCNT.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_16_5/ReportINACCNT.java similarity index 98% rename from clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_16_5/ReportINACCNT.java rename to clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_16_5/ReportINACCNT.java index 3b1221020..fe67d73f8 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_16_5/ReportINACCNT.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_16_5/ReportINACCNT.java @@ -1,4 +1,4 @@ -package ru.spcex.clearing.reports.reports.bt_16_5; +package ru.spcex.clearing.reports.reports.bt.bt_16_5; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAsAttribute; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_1/ReportBR_0420315_P1.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_1/ReportBR_0420315_P1.java similarity index 97% rename from clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_1/ReportBR_0420315_P1.java rename to clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_1/ReportBR_0420315_P1.java index 67aafde5b..ec2c5bb72 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_1/ReportBR_0420315_P1.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_1/ReportBR_0420315_P1.java @@ -1,4 +1,4 @@ -package ru.spcex.clearing.reports.reports.bt_17_1; +package ru.spcex.clearing.reports.reports.bt.bt_17_1; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAsAttribute; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_1/ReportBR_0420315_P2.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_1/ReportBR_0420315_P2.java similarity index 97% rename from clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_1/ReportBR_0420315_P2.java rename to clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_1/ReportBR_0420315_P2.java index 7520ed7f0..33f54524d 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_1/ReportBR_0420315_P2.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_1/ReportBR_0420315_P2.java @@ -1,4 +1,4 @@ -package ru.spcex.clearing.reports.reports.bt_17_1; +package ru.spcex.clearing.reports.reports.bt.bt_17_1; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAsAttribute; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_2/ReportBR_0420317.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_2/ReportBR_0420317.java similarity index 97% rename from clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_2/ReportBR_0420317.java rename to clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_2/ReportBR_0420317.java index 94009f5c6..fd6fe1cfb 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_2/ReportBR_0420317.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_2/ReportBR_0420317.java @@ -1,4 +1,4 @@ -package ru.spcex.clearing.reports.reports.bt_17_2; +package ru.spcex.clearing.reports.reports.bt.bt_17_2; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAsAttribute; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_3/ReportBR_0420318.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_3/ReportBR_0420318.java similarity index 98% rename from clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_3/ReportBR_0420318.java rename to clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_3/ReportBR_0420318.java index e42c06933..63f5b88e0 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_3/ReportBR_0420318.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_3/ReportBR_0420318.java @@ -1,4 +1,4 @@ -package ru.spcex.clearing.reports.reports.bt_17_3; +package ru.spcex.clearing.reports.reports.bt.bt_17_3; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAsAttribute; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_4/ReportBR_0420314_P1.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_4/ReportBR_0420314_P1.java similarity index 98% rename from clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_4/ReportBR_0420314_P1.java rename to clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_4/ReportBR_0420314_P1.java index a72ecca3b..e50ceef0d 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_4/ReportBR_0420314_P1.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_4/ReportBR_0420314_P1.java @@ -1,4 +1,4 @@ -package ru.spcex.clearing.reports.reports.bt_17_4; +package ru.spcex.clearing.reports.reports.bt.bt_17_4; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAsAttribute; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_4/ReportBR_0420314_P2.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_4/ReportBR_0420314_P2.java similarity index 97% rename from clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_4/ReportBR_0420314_P2.java rename to clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_4/ReportBR_0420314_P2.java index f4019dfdd..368cd90ed 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_4/ReportBR_0420314_P2.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_4/ReportBR_0420314_P2.java @@ -1,4 +1,4 @@ -package ru.spcex.clearing.reports.reports.bt_17_4; +package ru.spcex.clearing.reports.reports.bt.bt_17_4; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAsAttribute; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P1.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P1.java similarity index 97% rename from clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P1.java rename to clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P1.java index 03e5cbc05..b93fd7cce 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P1.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P1.java @@ -1,4 +1,4 @@ -package ru.spcex.clearing.reports.reports.bt_17_5; +package ru.spcex.clearing.reports.reports.bt.bt_17_5; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAsAttribute; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P10.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P10.java similarity index 96% rename from clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P10.java rename to clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P10.java index 08a428309..c2be21c02 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P10.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P10.java @@ -1,4 +1,4 @@ -package ru.spcex.clearing.reports.reports.bt_17_5; +package ru.spcex.clearing.reports.reports.bt.bt_17_5; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAsAttribute; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P2.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P2.java similarity index 97% rename from clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P2.java rename to clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P2.java index 22706fb9d..dea3c98f7 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P2.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P2.java @@ -1,4 +1,4 @@ -package ru.spcex.clearing.reports.reports.bt_17_5; +package ru.spcex.clearing.reports.reports.bt.bt_17_5; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAsAttribute; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P3.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P3.java similarity index 97% rename from clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P3.java rename to clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P3.java index 4b78a1b87..1b856c186 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P3.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P3.java @@ -1,4 +1,4 @@ -package ru.spcex.clearing.reports.reports.bt_17_5; +package ru.spcex.clearing.reports.reports.bt.bt_17_5; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAsAttribute; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P4.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P4.java similarity index 96% rename from clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P4.java rename to clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P4.java index d7aa87a9f..45386395e 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P4.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P4.java @@ -1,4 +1,4 @@ -package ru.spcex.clearing.reports.reports.bt_17_5; +package ru.spcex.clearing.reports.reports.bt.bt_17_5; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAsAttribute; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P5.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P5.java similarity index 96% rename from clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P5.java rename to clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P5.java index 9132d81db..f152b141f 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P5.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P5.java @@ -1,4 +1,4 @@ -package ru.spcex.clearing.reports.reports.bt_17_5; +package ru.spcex.clearing.reports.reports.bt.bt_17_5; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAsAttribute; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P6.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P6.java similarity index 96% rename from clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P6.java rename to clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P6.java index 00a273649..d473dc3f6 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P6.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P6.java @@ -1,4 +1,4 @@ -package ru.spcex.clearing.reports.reports.bt_17_5; +package ru.spcex.clearing.reports.reports.bt.bt_17_5; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAsAttribute; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P7.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P7.java similarity index 96% rename from clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P7.java rename to clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P7.java index c35b4230c..f6cedeb16 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P7.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P7.java @@ -1,4 +1,4 @@ -package ru.spcex.clearing.reports.reports.bt_17_5; +package ru.spcex.clearing.reports.reports.bt.bt_17_5; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAsAttribute; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P8.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P8.java similarity index 97% rename from clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P8.java rename to clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P8.java index eff2fb7a7..97680fce5 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P8.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P8.java @@ -1,4 +1,4 @@ -package ru.spcex.clearing.reports.reports.bt_17_5; +package ru.spcex.clearing.reports.reports.bt.bt_17_5; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAsAttribute; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P9.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P9.java similarity index 97% rename from clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P9.java rename to clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P9.java index 92c5e7f68..e8358e88c 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P9.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P9.java @@ -1,4 +1,4 @@ -package ru.spcex.clearing.reports.reports.bt_17_5; +package ru.spcex.clearing.reports.reports.bt.bt_17_5; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAsAttribute; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportPA_B_Collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_12_2/ReportPA_B_Collector.java similarity index 97% rename from clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportPA_B_Collector.java rename to clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_12_2/ReportPA_B_Collector.java index 22f76e2b2..5694273ad 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportPA_B_Collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_12_2/ReportPA_B_Collector.java @@ -1,10 +1,10 @@ -package ru.spcex.clearing.reports.services.collector; +package ru.spcex.clearing.reports.services.collector.bt.bt_12_2; import org.springframework.stereotype.Component; import ru.clearing.classes.statics.data.company.ClearingMemberCategory; import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets; import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.reports.reports.bt_12_2.ReportPA_B; +import ru.spcex.clearing.reports.reports.bt.bt_12_2.ReportPA_B; import ru.spcex.clearing.reports.services.ReportWithPeriodCollector; import ru.spcex.platform.enumeration.ClearingCategory; import ru.spcex.platform.imdg.api.Imdg; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportPA_IV_Collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_12_2/ReportPA_IV_Collector.java similarity index 97% rename from clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportPA_IV_Collector.java rename to clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_12_2/ReportPA_IV_Collector.java index c7620a313..3a09f9491 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportPA_IV_Collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_12_2/ReportPA_IV_Collector.java @@ -1,11 +1,11 @@ -package ru.spcex.clearing.reports.services.collector; +package ru.spcex.clearing.reports.services.collector.bt.bt_12_2; import org.springframework.stereotype.Component; import ru.clearing.classes.statics.data.company.ClearingMemberCategory; import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets; import ru.clearing.platform.dictionary.ClearingStatusDictionary; import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.reports.reports.bt_12_2.ReportPA_IV; +import ru.spcex.clearing.reports.reports.bt.bt_12_2.ReportPA_IV; import ru.spcex.clearing.reports.services.ReportWithPeriodCollector; import ru.spcex.platform.enumeration.ClearingCategory; import ru.spcex.platform.imdg.api.Imdg; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportDOCIN_Collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_13/ReportDOCIN_Collector.java similarity index 95% rename from clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportDOCIN_Collector.java rename to clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_13/ReportDOCIN_Collector.java index d0f6a9723..2766dac66 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportDOCIN_Collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_13/ReportDOCIN_Collector.java @@ -1,11 +1,11 @@ -package ru.spcex.clearing.reports.services.collector; +package ru.spcex.clearing.reports.services.collector.bt.bt_13; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import ru.clearing.classes.statics.data.journal.InDocumentJournal; import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.reports.reports.bt_13.ReportDOCIN; +import ru.spcex.clearing.reports.reports.bt.bt_13.ReportDOCIN; import ru.spcex.clearing.reports.services.SimpleReportCollector; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportDOCOUT_Collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_13/ReportDOCOUT_Collector.java similarity index 95% rename from clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportDOCOUT_Collector.java rename to clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_13/ReportDOCOUT_Collector.java index 012000faf..539b4931e 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportDOCOUT_Collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_13/ReportDOCOUT_Collector.java @@ -1,11 +1,11 @@ -package ru.spcex.clearing.reports.services.collector; +package ru.spcex.clearing.reports.services.collector.bt.bt_13; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import ru.clearing.classes.statics.data.journal.OutDocumentJournal; import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.reports.reports.bt_13.ReportDOCOUT; +import ru.spcex.clearing.reports.reports.bt.bt_13.ReportDOCOUT; import ru.spcex.clearing.reports.services.SimpleReportCollector; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportINACCNT_Collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_16_5/ReportINACCNT_Collector.java similarity index 96% rename from clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportINACCNT_Collector.java rename to clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_16_5/ReportINACCNT_Collector.java index 8ec532b53..8e7297bf8 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportINACCNT_Collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_16_5/ReportINACCNT_Collector.java @@ -1,10 +1,10 @@ -package ru.spcex.clearing.reports.services.collector; +package ru.spcex.clearing.reports.services.collector.bt.bt_16_5; import org.springframework.stereotype.Component; import ru.clearing.classes.statics.data.account.AccountBalance; import ru.clearing.classes.statics.data.company.Company; import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.reports.reports.bt_16_5.ReportINACCNT; +import ru.spcex.clearing.reports.reports.bt.bt_16_5.ReportINACCNT; import ru.spcex.clearing.reports.services.ReportForClearingCodeCollector; import ru.spcex.platform.enumeration.AccountType; import ru.spcex.platform.imdg.api.Imdg; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportBR_0420315_P1_Collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_1/ReportBR_0420315_P1_Collector.java similarity index 97% rename from clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportBR_0420315_P1_Collector.java rename to clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_1/ReportBR_0420315_P1_Collector.java index 3f4f9f381..9a2cecf52 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportBR_0420315_P1_Collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_1/ReportBR_0420315_P1_Collector.java @@ -1,16 +1,17 @@ -package ru.spcex.clearing.reports.services.collector; +package ru.spcex.clearing.reports.services.collector.bt.bt_17_1; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.company.ClearingMemberCategory; -import ru.clearing.classes.statics.data.misc.Listing; +import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets; +import ru.clearing.classes.statics.data.misc.Listing; import ru.clearing.platform.dictionary.ClearingStatusDictionary; import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.reports.reports.bt_17_1.ReportBR_0420315_P1; +import ru.spcex.clearing.reports.reports.bt.bt_17_1.ReportBR_0420315_P1; import ru.spcex.clearing.reports.services.ReportWithPeriodCollector; +import ru.spcex.clearing.reports.services.collector.MapUtil; import ru.spcex.platform.enumeration.ClearingCategory; import ru.spcex.platform.enumeration.ClearingStatus; import ru.spcex.platform.enumeration.Market; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportBR_0420315_P2_collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_1/ReportBR_0420315_P2_collector.java similarity index 92% rename from clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportBR_0420315_P2_collector.java rename to clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_1/ReportBR_0420315_P2_collector.java index 648f69cd0..eb199191b 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportBR_0420315_P2_collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_1/ReportBR_0420315_P2_collector.java @@ -1,56 +1,56 @@ -package ru.spcex.clearing.reports.services.collector; - -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets; -import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.reports.reports.bt_17_1.ReportBR_0420315_P2; -import ru.spcex.clearing.reports.services.ReportWithPeriodCollector; -import ru.spcex.platform.imdg.api.Imdg; -import ru.spcex.platform.imdg.api.ImdgProvider; - -import java.math.BigDecimal; -import java.time.LocalDate; -import java.util.Collection; -import java.util.HashSet; - -@Component -public class ReportBR_0420315_P2_collector extends ReportWithPeriodCollector { - private Imdg liabilitiesClaimsAssetsImdg; - - @Autowired - public ReportBR_0420315_P2_collector(ImdgProvider imdgProvider) { - liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class); - } - - @Override - public ReportBR_0420315_P2 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) { - validateDateRange(startDate, endDate); - Collection liabilities = searchLiabilitiesClaimsAssets(liabilitiesClaimsAssetsImdg, startDate, endDate); - - long liabilitiesAmount; - BigDecimal contractorQty = BigDecimal.ZERO; - { - HashSet collectedToSumm = new HashSet<>(); - for (LiabilitiesClaimsAssets lContract : liabilities) { - if (lContract.getLiabilitiesQuantity() != null && StringUtils.isNotEmpty(lContract.getContract())) { - collectedToSumm.add(lContract.getContract()); - contractorQty = contractorQty.add(lContract.getLiabilitiesQuantity()); - } - } - liabilitiesAmount = collectedToSumm.size(); - } - - ReportBR_0420315_P2 reportBR_0420315_p2 = new ReportBR_0420315_P2(startDate, endDate); - reportBR_0420315_p2.setRows(new ReportBR_0420315_P2.Info_0420315_P2(toString(contractorQty), - toString(liabilitiesAmount))); - - return reportBR_0420315_p2; - } - - @Override - public Class getReportClass() { - return ReportBR_0420315_P2.class; - } -} +package ru.spcex.clearing.reports.services.collector.bt.bt_17_1; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.reports.reports.bt.bt_17_1.ReportBR_0420315_P2; +import ru.spcex.clearing.reports.services.ReportWithPeriodCollector; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.util.Collection; +import java.util.HashSet; + +@Component +public class ReportBR_0420315_P2_collector extends ReportWithPeriodCollector { + private Imdg liabilitiesClaimsAssetsImdg; + + @Autowired + public ReportBR_0420315_P2_collector(ImdgProvider imdgProvider) { + liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class); + } + + @Override + public ReportBR_0420315_P2 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) { + validateDateRange(startDate, endDate); + Collection liabilities = searchLiabilitiesClaimsAssets(liabilitiesClaimsAssetsImdg, startDate, endDate); + + long liabilitiesAmount; + BigDecimal contractorQty = BigDecimal.ZERO; + { + HashSet collectedToSumm = new HashSet<>(); + for (LiabilitiesClaimsAssets lContract : liabilities) { + if (lContract.getLiabilitiesQuantity() != null && StringUtils.isNotEmpty(lContract.getContract())) { + collectedToSumm.add(lContract.getContract()); + contractorQty = contractorQty.add(lContract.getLiabilitiesQuantity()); + } + } + liabilitiesAmount = collectedToSumm.size(); + } + + ReportBR_0420315_P2 reportBR_0420315_p2 = new ReportBR_0420315_P2(startDate, endDate); + reportBR_0420315_p2.setRows(new ReportBR_0420315_P2.Info_0420315_P2(toString(contractorQty), + toString(liabilitiesAmount))); + + return reportBR_0420315_p2; + } + + @Override + public Class getReportClass() { + return ReportBR_0420315_P2.class; + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportBR_0420317_Collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_2/ReportBR_0420317_Collector.java similarity index 96% rename from clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportBR_0420317_Collector.java rename to clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_2/ReportBR_0420317_Collector.java index c0d7748b0..320a10668 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportBR_0420317_Collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_2/ReportBR_0420317_Collector.java @@ -1,4 +1,4 @@ -package ru.spcex.clearing.reports.services.collector; +package ru.spcex.clearing.reports.services.collector.bt.bt_17_2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -6,7 +6,7 @@ import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.company.CompanySymbols; import ru.clearing.classes.statics.data.company.relation.Relation; import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.reports.reports.bt_17_2.ReportBR_0420317; +import ru.spcex.clearing.reports.reports.bt.bt_17_2.ReportBR_0420317; import ru.spcex.clearing.reports.services.ReportWithPeriodCollector; import ru.spcex.platform.enumeration.DocumentTypes; import ru.spcex.platform.imdg.api.Imdg; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportBR_0420318_Collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_3/ReportBR_0420318_Collector.java similarity index 96% rename from clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportBR_0420318_Collector.java rename to clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_3/ReportBR_0420318_Collector.java index fa512d506..b6046bb5b 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportBR_0420318_Collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_3/ReportBR_0420318_Collector.java @@ -1,15 +1,16 @@ -package ru.spcex.clearing.reports.services.collector; +package ru.spcex.clearing.reports.services.collector.bt.bt_17_3; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import ru.clearing.classes.statics.data.company.ClearingMemberCategory; import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.company.CompanySymbols; -import ru.clearing.classes.statics.data.company.ClearingMemberCategory; -import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsMoney; import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets; +import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsMoney; import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.reports.reports.bt_17_3.ReportBR_0420318; +import ru.spcex.clearing.reports.reports.bt.bt_17_3.ReportBR_0420318; import ru.spcex.clearing.reports.services.ReportWithPeriodCollector; +import ru.spcex.clearing.reports.services.collector.MapUtil; import ru.spcex.platform.enumeration.ClearingCategory; import ru.spcex.platform.enumeration.DocumentTypes; import ru.spcex.platform.imdg.api.Imdg; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportBR_0420314_P1_Collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_4/ReportBR_0420314_P1_Collector.java similarity index 95% rename from clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportBR_0420314_P1_Collector.java rename to clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_4/ReportBR_0420314_P1_Collector.java index 75e0d3f0c..b7e5c0ab2 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportBR_0420314_P1_Collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_4/ReportBR_0420314_P1_Collector.java @@ -1,99 +1,100 @@ -package ru.spcex.clearing.reports.services.collector; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import ru.clearing.classes.statics.data.company.Company; -import ru.clearing.classes.statics.data.company.CompanySymbols; -import ru.clearing.classes.statics.data.company.ClearingMemberCategory; -import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets; -import ru.clearing.platform.dictionary.ClearingStatusDictionary; -import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.reports.reports.bt_17_4.ReportBR_0420314_P1; -import ru.spcex.clearing.reports.services.ReportWithPeriodCollector; -import ru.spcex.platform.enumeration.ClearingStatus; -import ru.spcex.platform.enumeration.DocumentTypes; -import ru.spcex.platform.imdg.api.Imdg; -import ru.spcex.platform.imdg.api.ImdgProvider; - -import java.time.LocalDate; -import java.util.Collection; -import java.util.Map; - -/** - * accountTransactionLiabilities - */ -@Component -public class ReportBR_0420314_P1_Collector extends ReportWithPeriodCollector { - private Imdg companyImdg; - private Imdg companySymbolsImdg; - private Imdg clearingMemberCategoryImdg; - private Imdg liabilitiesClaimsAssetsImdg; - private Imdg clearingStatusDictionaryImdg; - - protected static final String ALLOW_CLEARING_STATUS = ClearingStatus.OK.getKey(); - - @Autowired - public ReportBR_0420314_P1_Collector(ImdgProvider imdgProvider) { - companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); - liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class); - companySymbolsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class); - clearingMemberCategoryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class); - clearingStatusDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingStatusDictionary, ClearingStatusDictionary.class); - } - - protected CompanySymbols findSymbol(DocumentTypes docType, Long companyId) { - CompanySymbols companySymbol = companySymbolsImdg.getSingleObjectByFieldValues(Map.of( - "companySymbol", docType.getKey(), - "companyId", companyId - )); - return companySymbol; - } - - - @Override - public ReportBR_0420314_P1 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) { - validateDateRange(startDate, endDate); - - ReportBR_0420314_P1 reportBR_0420312P1 = new ReportBR_0420314_P1(startDate, endDate, "BR", - ALLOW_CLEARING_STATUS //clearingStatus.getCode() "OK" - ); - final Long allowClearingStatusId = MapUtil.getDictionaryIdByCode(clearingStatusDictionaryImdg, ALLOW_CLEARING_STATUS); // "OK" - - Collection liabilities = searchLiabilitiesClaimsAssets(liabilitiesClaimsAssetsImdg, startDate, endDate, allowClearingStatusId); - - for (LiabilitiesClaimsAssets liability: liabilities) { - final Long companyId = liability.getCompanyId(); - Company company = companyImdg.getSingleObjectByID(companyId); - if (company == null) { - log.warn("Company not found by LiabilitiesClaimsAssets.CompanyId={}", companyId); - continue; - } - Collection cmcLst = clearingMemberCategoryImdg.getCollectionObjectsByFieldValues(Map.of("companyId", companyId)); - String cleanMemberCategories = MapUtil.joinMultiString(cmcLst, ClearingMemberCategory::getClearingMemberCategory); - - CompanySymbols companySymbolCntr = findSymbol(DocumentTypes.cntr, company.getId()); - CompanySymbols companySymbolINN = findSymbol(DocumentTypes.inn, company.getId()); - CompanySymbols companySymbolOGRN = findSymbol(DocumentTypes.ogrn, company.getId()); - - ReportBR_0420314_P1.Info_0420314_P1 info_0420314P1 = new ReportBR_0420314_P1.Info_0420314_P1( - toString(company.getClearingCode()), - toString(companySymbolCntr == null? null : companySymbolCntr.getId()), - toString(company.getFullName()), - toString(companySymbolINN == null ? null : companySymbolINN.getCompanySymbolValue()), - toString(companySymbolOGRN == null? null : companySymbolOGRN.getCompanySymbolValue()), - toString(cleanMemberCategories), // может быть несколько, тогда через запятую перечислить - toString(liability.getRefundPaymentId()), - toString(liability.getTradingDate()), - toString(liability.getLiabilitiesQuantity()) - ); - reportBR_0420312P1.getRows().add(info_0420314P1); - } - - return reportBR_0420312P1; - } - - @Override - public Class getReportClass() { - return ReportBR_0420314_P1.class; - } -} +package ru.spcex.clearing.reports.services.collector.bt.bt_17_4; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import ru.clearing.classes.statics.data.company.ClearingMemberCategory; +import ru.clearing.classes.statics.data.company.Company; +import ru.clearing.classes.statics.data.company.CompanySymbols; +import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets; +import ru.clearing.platform.dictionary.ClearingStatusDictionary; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.reports.reports.bt.bt_17_4.ReportBR_0420314_P1; +import ru.spcex.clearing.reports.services.ReportWithPeriodCollector; +import ru.spcex.clearing.reports.services.collector.MapUtil; +import ru.spcex.platform.enumeration.ClearingStatus; +import ru.spcex.platform.enumeration.DocumentTypes; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; + +import java.time.LocalDate; +import java.util.Collection; +import java.util.Map; + +/** + * accountTransactionLiabilities + */ +@Component +public class ReportBR_0420314_P1_Collector extends ReportWithPeriodCollector { + private Imdg companyImdg; + private Imdg companySymbolsImdg; + private Imdg clearingMemberCategoryImdg; + private Imdg liabilitiesClaimsAssetsImdg; + private Imdg clearingStatusDictionaryImdg; + + protected static final String ALLOW_CLEARING_STATUS = ClearingStatus.OK.getKey(); + + @Autowired + public ReportBR_0420314_P1_Collector(ImdgProvider imdgProvider) { + companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); + liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class); + companySymbolsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class); + clearingMemberCategoryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class); + clearingStatusDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingStatusDictionary, ClearingStatusDictionary.class); + } + + protected CompanySymbols findSymbol(DocumentTypes docType, Long companyId) { + CompanySymbols companySymbol = companySymbolsImdg.getSingleObjectByFieldValues(Map.of( + "companySymbol", docType.getKey(), + "companyId", companyId + )); + return companySymbol; + } + + + @Override + public ReportBR_0420314_P1 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) { + validateDateRange(startDate, endDate); + + ReportBR_0420314_P1 reportBR_0420312P1 = new ReportBR_0420314_P1(startDate, endDate, "BR", + ALLOW_CLEARING_STATUS //clearingStatus.getCode() "OK" + ); + final Long allowClearingStatusId = MapUtil.getDictionaryIdByCode(clearingStatusDictionaryImdg, ALLOW_CLEARING_STATUS); // "OK" + + Collection liabilities = searchLiabilitiesClaimsAssets(liabilitiesClaimsAssetsImdg, startDate, endDate, allowClearingStatusId); + + for (LiabilitiesClaimsAssets liability: liabilities) { + final Long companyId = liability.getCompanyId(); + Company company = companyImdg.getSingleObjectByID(companyId); + if (company == null) { + log.warn("Company not found by LiabilitiesClaimsAssets.CompanyId={}", companyId); + continue; + } + Collection cmcLst = clearingMemberCategoryImdg.getCollectionObjectsByFieldValues(Map.of("companyId", companyId)); + String cleanMemberCategories = MapUtil.joinMultiString(cmcLst, ClearingMemberCategory::getClearingMemberCategory); + + CompanySymbols companySymbolCntr = findSymbol(DocumentTypes.cntr, company.getId()); + CompanySymbols companySymbolINN = findSymbol(DocumentTypes.inn, company.getId()); + CompanySymbols companySymbolOGRN = findSymbol(DocumentTypes.ogrn, company.getId()); + + ReportBR_0420314_P1.Info_0420314_P1 info_0420314P1 = new ReportBR_0420314_P1.Info_0420314_P1( + toString(company.getClearingCode()), + toString(companySymbolCntr == null? null : companySymbolCntr.getId()), + toString(company.getFullName()), + toString(companySymbolINN == null ? null : companySymbolINN.getCompanySymbolValue()), + toString(companySymbolOGRN == null? null : companySymbolOGRN.getCompanySymbolValue()), + toString(cleanMemberCategories), // может быть несколько, тогда через запятую перечислить + toString(liability.getRefundPaymentId()), + toString(liability.getTradingDate()), + toString(liability.getLiabilitiesQuantity()) + ); + reportBR_0420312P1.getRows().add(info_0420314P1); + } + + return reportBR_0420312P1; + } + + @Override + public Class getReportClass() { + return ReportBR_0420314_P1.class; + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportBR_0420314_P2_Collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_4/ReportBR_0420314_P2_Collector.java similarity index 95% rename from clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportBR_0420314_P2_Collector.java rename to clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_4/ReportBR_0420314_P2_Collector.java index 367d11525..73d0ea0af 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportBR_0420314_P2_Collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_4/ReportBR_0420314_P2_Collector.java @@ -1,128 +1,129 @@ -package ru.spcex.clearing.reports.services.collector; - -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import ru.clearing.classes.statics.data.account.AccountBalance; -import ru.clearing.classes.statics.data.company.Company; -import ru.clearing.classes.statics.data.payment.PaymentInstruction; -import ru.clearing.classes.statics.data.profile.ProfileDocument; -import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.reports.reports.bt_17_4.ReportBR_0420314_P2; -import ru.spcex.clearing.reports.services.ReportWithPeriodCollector; -import ru.spcex.platform.enumeration.AccountType; -import ru.spcex.platform.enumeration.DocumentTypes; -import ru.spcex.platform.imdg.api.Imdg; -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.Instant; -import java.time.LocalDate; -import java.util.Collection; -import java.util.List; -import java.util.Map; -import java.util.Objects; - -/** - * accountTransactionLiabilities - */ -@Component -public class ReportBR_0420314_P2_Collector extends ReportWithPeriodCollector { - private Imdg companyImdg; - private Imdg paymentInstructionImdg; - private Imdg accountBalanceImdg; - private Imdg profileDocumentImdg; - - @Autowired - public ReportBR_0420314_P2_Collector(ImdgProvider imdgProvider) { - companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); - paymentInstructionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_PaymentInstruction, PaymentInstruction.class); - accountBalanceImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_AccountBalance, AccountBalance.class); - profileDocumentImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ProfileDocument, ProfileDocument.class); - } - - Collection searchPaymentInstruction(LocalDate startDate, LocalDate endDate) { - ImdgPredicateBuilder pb = paymentInstructionImdg.predicateBuilder(); - Instant dateTimeLo = toInstantStartDay(startDate); - Instant dateTimeHi = toInstantEndDay(endDate); - ImdgPredicate p = pb.and(pb.greatEqual("created", dateTimeLo), pb.lessEqual("created", dateTimeHi)); - Collection paymentInstructionsAll = paymentInstructionImdg.getCollectionObjectsByPredicate(p); - return paymentInstructionsAll; - } - - @Override - public ReportBR_0420314_P2 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) { - validateDateRange(startDate, endDate); - - ReportBR_0420314_P2 reportBR_0420312P2 = new ReportBR_0420314_P2(startDate, endDate, - "", "BR" - ); - - Collection paymentInstructionsAll = searchPaymentInstruction(startDate, endDate); - - Map> companyIdPyPaymtInstruction = - MapUtil.indexList(paymentInstructionsAll, PaymentInstruction::getSenderId); - - for (Map.Entry> entry : companyIdPyPaymtInstruction.entrySet()) { - final Long companyId = entry.getKey(); - List paymentInstructionsByCompany = entry.getValue(); - Company company = companyImdg.getSingleObjectByID(companyId); - if (company == null) { - log.warn("Company not found, id={}", companyId); - continue; - } - ProfileDocument profileDocumentCntr = profileDocumentImdg.getSingleObjectByFieldValues(Map.of( - "companyId", companyId, - "documentType", DocumentTypes.cntr.getKey() - )); - AccountBalance accountBalance = accountBalanceImdg.getSingleObjectByFieldValues(Map.of( - "accountType", AccountType.Clrn.getKey(), - "companyId", companyId - )); - - String documentTypeStr = null; - if (profileDocumentCntr != null) { - documentTypeStr = profileDocumentCntr.getNumber(); - if (profileDocumentCntr.getValidFromDate() != null) { - if (StringUtils.isEmpty(documentTypeStr)) { - documentTypeStr = ""; - } else { - documentTypeStr += " "; - } - documentTypeStr += toString(profileDocumentCntr.getValidFromDate()); - } - } - - Long paymentInstruction_creditLeg_amount = paymentInstructionsByCompany.stream() - .map(PaymentInstruction::getCreditLegAmount) - .filter(Objects::nonNull) - .reduce(Long::sum) - .orElse(0L); - Long paymentInstructiont_debitLeg_amount = paymentInstructionsByCompany.stream() - .map(PaymentInstruction::getDebitLegAmount) - .filter(Objects::nonNull) - .reduce(Long::sum) - .orElse(0L); - - - ReportBR_0420314_P2.Info_0420314_P2 info_0420314P2 = new ReportBR_0420314_P2.Info_0420314_P2( - toString(company.getClearingCode()), - toString(documentTypeStr), - toString(accountBalance == null ? null : accountBalance.getOpenBalanceAmount()), - toString(paymentInstruction_creditLeg_amount), - toString(paymentInstructiont_debitLeg_amount), - toString(accountBalance == null ? null : accountBalance.getCloseBalanceAmount()) - ); - - reportBR_0420312P2.getRows().add(info_0420314P2); - } - - return reportBR_0420312P2; - } - - @Override - public Class getReportClass() { - return ReportBR_0420314_P2.class; - } -} +package ru.spcex.clearing.reports.services.collector.bt.bt_17_4; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import ru.clearing.classes.statics.data.account.AccountBalance; +import ru.clearing.classes.statics.data.company.Company; +import ru.clearing.classes.statics.data.payment.PaymentInstruction; +import ru.clearing.classes.statics.data.profile.ProfileDocument; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.reports.reports.bt.bt_17_4.ReportBR_0420314_P2; +import ru.spcex.clearing.reports.services.ReportWithPeriodCollector; +import ru.spcex.clearing.reports.services.collector.MapUtil; +import ru.spcex.platform.enumeration.AccountType; +import ru.spcex.platform.enumeration.DocumentTypes; +import ru.spcex.platform.imdg.api.Imdg; +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.Instant; +import java.time.LocalDate; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +/** + * accountTransactionLiabilities + */ +@Component +public class ReportBR_0420314_P2_Collector extends ReportWithPeriodCollector { + private Imdg companyImdg; + private Imdg paymentInstructionImdg; + private Imdg accountBalanceImdg; + private Imdg profileDocumentImdg; + + @Autowired + public ReportBR_0420314_P2_Collector(ImdgProvider imdgProvider) { + companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); + paymentInstructionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_PaymentInstruction, PaymentInstruction.class); + accountBalanceImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_AccountBalance, AccountBalance.class); + profileDocumentImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ProfileDocument, ProfileDocument.class); + } + + Collection searchPaymentInstruction(LocalDate startDate, LocalDate endDate) { + ImdgPredicateBuilder pb = paymentInstructionImdg.predicateBuilder(); + Instant dateTimeLo = toInstantStartDay(startDate); + Instant dateTimeHi = toInstantEndDay(endDate); + ImdgPredicate p = pb.and(pb.greatEqual("created", dateTimeLo), pb.lessEqual("created", dateTimeHi)); + Collection paymentInstructionsAll = paymentInstructionImdg.getCollectionObjectsByPredicate(p); + return paymentInstructionsAll; + } + + @Override + public ReportBR_0420314_P2 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) { + validateDateRange(startDate, endDate); + + ReportBR_0420314_P2 reportBR_0420312P2 = new ReportBR_0420314_P2(startDate, endDate, + "", "BR" + ); + + Collection paymentInstructionsAll = searchPaymentInstruction(startDate, endDate); + + Map> companyIdPyPaymtInstruction = + MapUtil.indexList(paymentInstructionsAll, PaymentInstruction::getSenderId); + + for (Map.Entry> entry : companyIdPyPaymtInstruction.entrySet()) { + final Long companyId = entry.getKey(); + List paymentInstructionsByCompany = entry.getValue(); + Company company = companyImdg.getSingleObjectByID(companyId); + if (company == null) { + log.warn("Company not found, id={}", companyId); + continue; + } + ProfileDocument profileDocumentCntr = profileDocumentImdg.getSingleObjectByFieldValues(Map.of( + "companyId", companyId, + "documentType", DocumentTypes.cntr.getKey() + )); + AccountBalance accountBalance = accountBalanceImdg.getSingleObjectByFieldValues(Map.of( + "accountType", AccountType.Clrn.getKey(), + "companyId", companyId + )); + + String documentTypeStr = null; + if (profileDocumentCntr != null) { + documentTypeStr = profileDocumentCntr.getNumber(); + if (profileDocumentCntr.getValidFromDate() != null) { + if (StringUtils.isEmpty(documentTypeStr)) { + documentTypeStr = ""; + } else { + documentTypeStr += " "; + } + documentTypeStr += toString(profileDocumentCntr.getValidFromDate()); + } + } + + Long paymentInstruction_creditLeg_amount = paymentInstructionsByCompany.stream() + .map(PaymentInstruction::getCreditLegAmount) + .filter(Objects::nonNull) + .reduce(Long::sum) + .orElse(0L); + Long paymentInstructiont_debitLeg_amount = paymentInstructionsByCompany.stream() + .map(PaymentInstruction::getDebitLegAmount) + .filter(Objects::nonNull) + .reduce(Long::sum) + .orElse(0L); + + + ReportBR_0420314_P2.Info_0420314_P2 info_0420314P2 = new ReportBR_0420314_P2.Info_0420314_P2( + toString(company.getClearingCode()), + toString(documentTypeStr), + toString(accountBalance == null ? null : accountBalance.getOpenBalanceAmount()), + toString(paymentInstruction_creditLeg_amount), + toString(paymentInstructiont_debitLeg_amount), + toString(accountBalance == null ? null : accountBalance.getCloseBalanceAmount()) + ); + + reportBR_0420312P2.getRows().add(info_0420314P2); + } + + return reportBR_0420312P2; + } + + @Override + public Class getReportClass() { + return ReportBR_0420314_P2.class; + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportBR_0420312_P10_Collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P10_Collector.java similarity index 91% rename from clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportBR_0420312_P10_Collector.java rename to clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P10_Collector.java index 553afb7df..1f65b2cef 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportBR_0420312_P10_Collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P10_Collector.java @@ -1,48 +1,48 @@ -package ru.spcex.clearing.reports.services.collector; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets; -import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.reports.reports.bt_17_5.ReportBR_0420312_P10; -import ru.spcex.clearing.reports.services.ReportWithPeriodCollector; -import ru.spcex.platform.imdg.api.Imdg; -import ru.spcex.platform.imdg.api.ImdgProvider; - -import java.math.BigDecimal; -import java.time.LocalDate; -import java.util.Collection; -import java.util.Objects; - -@Component -public class ReportBR_0420312_P10_Collector extends ReportWithPeriodCollector { - private Imdg liabilitiesClaimsAssetsImdg; - - @Autowired - public ReportBR_0420312_P10_Collector(ImdgProvider imdgProvider) { - liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class); - } - - @Override - public ReportBR_0420312_P10 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) { - validateDateRange(startDate, endDate); - - Collection liabilities = searchLiabilitiesClaimsAssets(liabilitiesClaimsAssetsImdg, startDate, endDate); - - BigDecimal liabilitiesQuantitySum = liabilities.stream() - .map(LiabilitiesClaimsAssets::getLiabilitiesQuantity) - .filter(Objects::nonNull) - .reduce(BigDecimal::add).orElse(BigDecimal.ZERO); - - ReportBR_0420312_P10 reportBR_0420312P10 = new ReportBR_0420312_P10(startDate, endDate); - ReportBR_0420312_P10.Info_0420312_P10 reportInfo = new ReportBR_0420312_P10.Info_0420312_P10(toString(liabilitiesQuantitySum)); - reportBR_0420312P10.getRows().add(reportInfo); - - return reportBR_0420312P10; - } - - @Override - public Class getReportClass() { - return ReportBR_0420312_P10.class; - } -} +package ru.spcex.clearing.reports.services.collector.bt.bt_17_5; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.reports.reports.bt.bt_17_5.ReportBR_0420312_P10; +import ru.spcex.clearing.reports.services.ReportWithPeriodCollector; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.util.Collection; +import java.util.Objects; + +@Component +public class ReportBR_0420312_P10_Collector extends ReportWithPeriodCollector { + private Imdg liabilitiesClaimsAssetsImdg; + + @Autowired + public ReportBR_0420312_P10_Collector(ImdgProvider imdgProvider) { + liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class); + } + + @Override + public ReportBR_0420312_P10 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) { + validateDateRange(startDate, endDate); + + Collection liabilities = searchLiabilitiesClaimsAssets(liabilitiesClaimsAssetsImdg, startDate, endDate); + + BigDecimal liabilitiesQuantitySum = liabilities.stream() + .map(LiabilitiesClaimsAssets::getLiabilitiesQuantity) + .filter(Objects::nonNull) + .reduce(BigDecimal::add).orElse(BigDecimal.ZERO); + + ReportBR_0420312_P10 reportBR_0420312P10 = new ReportBR_0420312_P10(startDate, endDate); + ReportBR_0420312_P10.Info_0420312_P10 reportInfo = new ReportBR_0420312_P10.Info_0420312_P10(toString(liabilitiesQuantitySum)); + reportBR_0420312P10.getRows().add(reportInfo); + + return reportBR_0420312P10; + } + + @Override + public Class getReportClass() { + return ReportBR_0420312_P10.class; + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportBR_0420312_P1_Collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P1_Collector.java similarity index 95% rename from clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportBR_0420312_P1_Collector.java rename to clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P1_Collector.java index 2daa9d14c..686abd725 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportBR_0420312_P1_Collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P1_Collector.java @@ -1,83 +1,84 @@ -package ru.spcex.clearing.reports.services.collector; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import ru.clearing.classes.statics.data.company.Company; -import ru.clearing.classes.statics.data.company.CompanySymbols; -import ru.clearing.classes.statics.data.company.ClearingMemberCategory; -import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets; -import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.reports.reports.bt_17_5.ReportBR_0420312_P1; -import ru.spcex.clearing.reports.services.ReportWithPeriodCollector; -import ru.spcex.platform.enumeration.DocumentTypes; -import ru.spcex.platform.imdg.api.Imdg; -import ru.spcex.platform.imdg.api.ImdgProvider; - -import java.time.LocalDate; -import java.util.Collection; -import java.util.List; -import java.util.Map; - -@Component -public class ReportBR_0420312_P1_Collector extends ReportWithPeriodCollector { - private final Imdg companyImdg; - private final Imdg companySymbolsImdg; - private final Imdg clearingMemberCategoryImdg; - private final Imdg liabilitiesClaimsAssetsImdg; - - @Autowired - public ReportBR_0420312_P1_Collector(ImdgProvider imdgProvider) { - companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); - liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class); - companySymbolsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class); - clearingMemberCategoryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class); - } - - protected CompanySymbols findSymbol(DocumentTypes docType, Long companyId) { - CompanySymbols companySymbol = companySymbolsImdg.getSingleObjectByFieldValues(Map.of( - "companySymbol", docType.getKey(), - "companyId", companyId - )); - return companySymbol; - } - - @Override - public ReportBR_0420312_P1 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) { - validateDateRange(startDate, endDate); - - ReportBR_0420312_P1 reportBR_0420312P1 = new ReportBR_0420312_P1(startDate, endDate, "BR"); - - Collection liabilities = searchLiabilitiesClaimsAssets(liabilitiesClaimsAssetsImdg, startDate, endDate); - Map> indexByCompany = MapUtil.indexList(liabilities, LiabilitiesClaimsAssets::getCompanyId); - - for (Map.Entry> companyEntry : indexByCompany.entrySet()) { - final Long companyId = companyEntry.getKey(); - Company company = companyImdg.getSingleObjectByID(companyId); - if (company == null) { - log.warn("Company not found by LiabilitiesClaimsAssets.CompanyId={}", companyId); - continue; - } - CompanySymbols companySymbolINN = findSymbol(DocumentTypes.inn, company.getId()); - CompanySymbols companySymbolOGRN = findSymbol(DocumentTypes.ogrn, company.getId()); - ClearingMemberCategory cmc = clearingMemberCategoryImdg.getSingleObjectByFieldValues(Map.of("companyId", companyId)); - String clearingMemberCategory = cmc == null ? null : cmc.getClearingMemberCategory(); - ReportBR_0420312_P1.Info_0420312_P1 info_0420312_p1 = new ReportBR_0420312_P1.Info_0420312_P1( - toString(company.getClearingCode()), - toString(companyId), - toString(company.getFullName()), - companySymbolINN == null ? null : toString(companySymbolINN.getCompanySymbolValue()), - companySymbolOGRN == null ? null : toString(companySymbolOGRN.getCompanySymbolValue()), - toString(company.getProfile().getCountryCode()), - toString(clearingMemberCategory)); - reportBR_0420312P1.getRows().add(info_0420312_p1); - } - - return reportBR_0420312P1; - } - - - @Override - public Class getReportClass() { - return ReportBR_0420312_P1.class; - } -} +package ru.spcex.clearing.reports.services.collector.bt.bt_17_5; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import ru.clearing.classes.statics.data.company.ClearingMemberCategory; +import ru.clearing.classes.statics.data.company.Company; +import ru.clearing.classes.statics.data.company.CompanySymbols; +import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.reports.reports.bt.bt_17_5.ReportBR_0420312_P1; +import ru.spcex.clearing.reports.services.ReportWithPeriodCollector; +import ru.spcex.clearing.reports.services.collector.MapUtil; +import ru.spcex.platform.enumeration.DocumentTypes; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; + +import java.time.LocalDate; +import java.util.Collection; +import java.util.List; +import java.util.Map; + +@Component +public class ReportBR_0420312_P1_Collector extends ReportWithPeriodCollector { + private final Imdg companyImdg; + private final Imdg companySymbolsImdg; + private final Imdg clearingMemberCategoryImdg; + private final Imdg liabilitiesClaimsAssetsImdg; + + @Autowired + public ReportBR_0420312_P1_Collector(ImdgProvider imdgProvider) { + companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); + liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class); + companySymbolsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class); + clearingMemberCategoryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class); + } + + protected CompanySymbols findSymbol(DocumentTypes docType, Long companyId) { + CompanySymbols companySymbol = companySymbolsImdg.getSingleObjectByFieldValues(Map.of( + "companySymbol", docType.getKey(), + "companyId", companyId + )); + return companySymbol; + } + + @Override + public ReportBR_0420312_P1 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) { + validateDateRange(startDate, endDate); + + ReportBR_0420312_P1 reportBR_0420312P1 = new ReportBR_0420312_P1(startDate, endDate, "BR"); + + Collection liabilities = searchLiabilitiesClaimsAssets(liabilitiesClaimsAssetsImdg, startDate, endDate); + Map> indexByCompany = MapUtil.indexList(liabilities, LiabilitiesClaimsAssets::getCompanyId); + + for (Map.Entry> companyEntry : indexByCompany.entrySet()) { + final Long companyId = companyEntry.getKey(); + Company company = companyImdg.getSingleObjectByID(companyId); + if (company == null) { + log.warn("Company not found by LiabilitiesClaimsAssets.CompanyId={}", companyId); + continue; + } + CompanySymbols companySymbolINN = findSymbol(DocumentTypes.inn, company.getId()); + CompanySymbols companySymbolOGRN = findSymbol(DocumentTypes.ogrn, company.getId()); + ClearingMemberCategory cmc = clearingMemberCategoryImdg.getSingleObjectByFieldValues(Map.of("companyId", companyId)); + String clearingMemberCategory = cmc == null ? null : cmc.getClearingMemberCategory(); + ReportBR_0420312_P1.Info_0420312_P1 info_0420312_p1 = new ReportBR_0420312_P1.Info_0420312_P1( + toString(company.getClearingCode()), + toString(companyId), + toString(company.getFullName()), + companySymbolINN == null ? null : toString(companySymbolINN.getCompanySymbolValue()), + companySymbolOGRN == null ? null : toString(companySymbolOGRN.getCompanySymbolValue()), + toString(company.getProfile().getCountryCode()), + toString(clearingMemberCategory)); + reportBR_0420312P1.getRows().add(info_0420312_p1); + } + + return reportBR_0420312P1; + } + + + @Override + public Class getReportClass() { + return ReportBR_0420312_P1.class; + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportBR_0420312_P2_Collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P2_Collector.java similarity index 92% rename from clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportBR_0420312_P2_Collector.java rename to clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P2_Collector.java index 80a98b782..a8495f52b 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportBR_0420312_P2_Collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P2_Collector.java @@ -1,61 +1,62 @@ -package ru.spcex.clearing.reports.services.collector; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets; -import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.reports.reports.bt_17_5.ReportBR_0420312_P2; -import ru.spcex.clearing.reports.services.ReportWithPeriodCollector; -import ru.spcex.platform.imdg.api.Imdg; -import ru.spcex.platform.imdg.api.ImdgProvider; - -import java.math.BigDecimal; -import java.time.LocalDate; -import java.util.Collection; -import java.util.List; -import java.util.Map; -import java.util.Objects; - -@Component -public class ReportBR_0420312_P2_Collector extends ReportWithPeriodCollector { - private Imdg liabilitiesClaimsAssetsImdg; - - @Autowired - public ReportBR_0420312_P2_Collector(ImdgProvider imdgProvider) { - liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class); - } - - @Override - public ReportBR_0420312_P2 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) { - validateDateRange(startDate, endDate); - - ReportBR_0420312_P2 reportBR_0420312P1 = new ReportBR_0420312_P2(startDate, endDate, "BR"); - - Collection liabilities = searchLiabilitiesClaimsAssets(liabilitiesClaimsAssetsImdg, startDate, endDate); - Map> indexByCompany = MapUtil.indexList(liabilities, LiabilitiesClaimsAssets::getCompanyId); - - for (Map.Entry> companyEntry : indexByCompany.entrySet()) { - final Long companyId = companyEntry.getKey(); - List companyLiabilities=companyEntry.getValue(); - - BigDecimal liabilitiesQuantitySum = companyLiabilities.stream() - .map(LiabilitiesClaimsAssets::getLiabilitiesQuantity) - .filter(Objects::nonNull) - .reduce(BigDecimal::add).orElse(BigDecimal.ZERO); - - ReportBR_0420312_P2.Info_0420312_P2 info_0420312_p2 = new ReportBR_0420312_P2.Info_0420312_P2( - toString(companyId), - toString(liabilitiesQuantitySum) - ); - reportBR_0420312P1.getRows().add(info_0420312_p2); - } - - return reportBR_0420312P1; - } - - - @Override - public Class getReportClass() { - return ReportBR_0420312_P2.class; - } -} +package ru.spcex.clearing.reports.services.collector.bt.bt_17_5; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.reports.reports.bt.bt_17_5.ReportBR_0420312_P2; +import ru.spcex.clearing.reports.services.ReportWithPeriodCollector; +import ru.spcex.clearing.reports.services.collector.MapUtil; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +@Component +public class ReportBR_0420312_P2_Collector extends ReportWithPeriodCollector { + private Imdg liabilitiesClaimsAssetsImdg; + + @Autowired + public ReportBR_0420312_P2_Collector(ImdgProvider imdgProvider) { + liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class); + } + + @Override + public ReportBR_0420312_P2 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) { + validateDateRange(startDate, endDate); + + ReportBR_0420312_P2 reportBR_0420312P1 = new ReportBR_0420312_P2(startDate, endDate, "BR"); + + Collection liabilities = searchLiabilitiesClaimsAssets(liabilitiesClaimsAssetsImdg, startDate, endDate); + Map> indexByCompany = MapUtil.indexList(liabilities, LiabilitiesClaimsAssets::getCompanyId); + + for (Map.Entry> companyEntry : indexByCompany.entrySet()) { + final Long companyId = companyEntry.getKey(); + List companyLiabilities=companyEntry.getValue(); + + BigDecimal liabilitiesQuantitySum = companyLiabilities.stream() + .map(LiabilitiesClaimsAssets::getLiabilitiesQuantity) + .filter(Objects::nonNull) + .reduce(BigDecimal::add).orElse(BigDecimal.ZERO); + + ReportBR_0420312_P2.Info_0420312_P2 info_0420312_p2 = new ReportBR_0420312_P2.Info_0420312_P2( + toString(companyId), + toString(liabilitiesQuantitySum) + ); + reportBR_0420312P1.getRows().add(info_0420312_p2); + } + + return reportBR_0420312P1; + } + + + @Override + public Class getReportClass() { + return ReportBR_0420312_P2.class; + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportBR_0420312_P3_Collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P3_Collector.java similarity index 92% rename from clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportBR_0420312_P3_Collector.java rename to clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P3_Collector.java index afbd0b0a5..0cb625184 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportBR_0420312_P3_Collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P3_Collector.java @@ -1,11 +1,12 @@ -package ru.spcex.clearing.reports.services.collector; +package ru.spcex.clearing.reports.services.collector.bt.bt_17_5; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets; import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.reports.reports.bt_17_5.ReportBR_0420312_P3; +import ru.spcex.clearing.reports.reports.bt.bt_17_5.ReportBR_0420312_P3; import ru.spcex.clearing.reports.services.ReportWithPeriodCollector; +import ru.spcex.clearing.reports.services.collector.MapUtil; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportBR_0420312_P4_Collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P4_Collector.java similarity index 91% rename from clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportBR_0420312_P4_Collector.java rename to clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P4_Collector.java index c80af2543..b3bed29c7 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportBR_0420312_P4_Collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P4_Collector.java @@ -1,48 +1,48 @@ -package ru.spcex.clearing.reports.services.collector; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets; -import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.reports.reports.bt_17_5.ReportBR_0420312_P4; -import ru.spcex.clearing.reports.services.ReportWithPeriodCollector; -import ru.spcex.platform.imdg.api.Imdg; -import ru.spcex.platform.imdg.api.ImdgProvider; - -import java.math.BigDecimal; -import java.time.LocalDate; -import java.util.Collection; -import java.util.Objects; - -@Component -public class ReportBR_0420312_P4_Collector extends ReportWithPeriodCollector { - private Imdg liabilitiesClaimsAssetsImdg; - - @Autowired - public ReportBR_0420312_P4_Collector(ImdgProvider imdgProvider) { - liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class); - } - - @Override - public ReportBR_0420312_P4 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) { - validateDateRange(startDate, endDate); - - Collection liabilities = searchLiabilitiesClaimsAssets(liabilitiesClaimsAssetsImdg, startDate, endDate); - - BigDecimal liabilitiesQuantitySum = liabilities.stream() - .map(LiabilitiesClaimsAssets::getLiabilitiesQuantity) - .filter(Objects::nonNull) - .reduce(BigDecimal::add).orElse(BigDecimal.ZERO); - - ReportBR_0420312_P4 reportBR_0420312P4 = new ReportBR_0420312_P4(startDate, endDate); - ReportBR_0420312_P4.Info_0420312_P4 reportInfo = new ReportBR_0420312_P4.Info_0420312_P4(toString(liabilitiesQuantitySum)); - reportBR_0420312P4.getRows().add(reportInfo); - - return reportBR_0420312P4; - } - - @Override - public Class getReportClass() { - return ReportBR_0420312_P4.class; - } -} +package ru.spcex.clearing.reports.services.collector.bt.bt_17_5; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.reports.reports.bt.bt_17_5.ReportBR_0420312_P4; +import ru.spcex.clearing.reports.services.ReportWithPeriodCollector; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.util.Collection; +import java.util.Objects; + +@Component +public class ReportBR_0420312_P4_Collector extends ReportWithPeriodCollector { + private Imdg liabilitiesClaimsAssetsImdg; + + @Autowired + public ReportBR_0420312_P4_Collector(ImdgProvider imdgProvider) { + liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class); + } + + @Override + public ReportBR_0420312_P4 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) { + validateDateRange(startDate, endDate); + + Collection liabilities = searchLiabilitiesClaimsAssets(liabilitiesClaimsAssetsImdg, startDate, endDate); + + BigDecimal liabilitiesQuantitySum = liabilities.stream() + .map(LiabilitiesClaimsAssets::getLiabilitiesQuantity) + .filter(Objects::nonNull) + .reduce(BigDecimal::add).orElse(BigDecimal.ZERO); + + ReportBR_0420312_P4 reportBR_0420312P4 = new ReportBR_0420312_P4(startDate, endDate); + ReportBR_0420312_P4.Info_0420312_P4 reportInfo = new ReportBR_0420312_P4.Info_0420312_P4(toString(liabilitiesQuantitySum)); + reportBR_0420312P4.getRows().add(reportInfo); + + return reportBR_0420312P4; + } + + @Override + public Class getReportClass() { + return ReportBR_0420312_P4.class; + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportBR_0420312_P5_Collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P5_Collector.java similarity index 91% rename from clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportBR_0420312_P5_Collector.java rename to clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P5_Collector.java index c309da1fe..e65107aaf 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportBR_0420312_P5_Collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P5_Collector.java @@ -1,48 +1,48 @@ -package ru.spcex.clearing.reports.services.collector; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets; -import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.reports.reports.bt_17_5.ReportBR_0420312_P5; -import ru.spcex.clearing.reports.services.ReportWithPeriodCollector; -import ru.spcex.platform.imdg.api.Imdg; -import ru.spcex.platform.imdg.api.ImdgProvider; - -import java.math.BigDecimal; -import java.time.LocalDate; -import java.util.Collection; -import java.util.Objects; - -@Component -public class ReportBR_0420312_P5_Collector extends ReportWithPeriodCollector { - private Imdg liabilitiesClaimsAssetsImdg; - - @Autowired - public ReportBR_0420312_P5_Collector(ImdgProvider imdgProvider) { - liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class); - } - - @Override - public ReportBR_0420312_P5 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) { - validateDateRange(startDate, endDate); - - Collection liabilities = searchLiabilitiesClaimsAssets(liabilitiesClaimsAssetsImdg, startDate, endDate); - - BigDecimal liabilitiesQuantitySum = liabilities.stream() - .map(LiabilitiesClaimsAssets::getLiabilitiesQuantity) - .filter(Objects::nonNull) - .reduce(BigDecimal::add).orElse(BigDecimal.ZERO); - - ReportBR_0420312_P5 reportBR_0420312P5 = new ReportBR_0420312_P5(startDate, endDate); - ReportBR_0420312_P5.Info_0420312_P5 reportInfo = new ReportBR_0420312_P5.Info_0420312_P5(toString(liabilitiesQuantitySum)); - reportBR_0420312P5.getRows().add(reportInfo); - - return reportBR_0420312P5; - } - - @Override - public Class getReportClass() { - return ReportBR_0420312_P5.class; - } -} +package ru.spcex.clearing.reports.services.collector.bt.bt_17_5; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.reports.reports.bt.bt_17_5.ReportBR_0420312_P5; +import ru.spcex.clearing.reports.services.ReportWithPeriodCollector; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.util.Collection; +import java.util.Objects; + +@Component +public class ReportBR_0420312_P5_Collector extends ReportWithPeriodCollector { + private Imdg liabilitiesClaimsAssetsImdg; + + @Autowired + public ReportBR_0420312_P5_Collector(ImdgProvider imdgProvider) { + liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class); + } + + @Override + public ReportBR_0420312_P5 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) { + validateDateRange(startDate, endDate); + + Collection liabilities = searchLiabilitiesClaimsAssets(liabilitiesClaimsAssetsImdg, startDate, endDate); + + BigDecimal liabilitiesQuantitySum = liabilities.stream() + .map(LiabilitiesClaimsAssets::getLiabilitiesQuantity) + .filter(Objects::nonNull) + .reduce(BigDecimal::add).orElse(BigDecimal.ZERO); + + ReportBR_0420312_P5 reportBR_0420312P5 = new ReportBR_0420312_P5(startDate, endDate); + ReportBR_0420312_P5.Info_0420312_P5 reportInfo = new ReportBR_0420312_P5.Info_0420312_P5(toString(liabilitiesQuantitySum)); + reportBR_0420312P5.getRows().add(reportInfo); + + return reportBR_0420312P5; + } + + @Override + public Class getReportClass() { + return ReportBR_0420312_P5.class; + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportBR_0420312_P6_Collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P6_Collector.java similarity index 91% rename from clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportBR_0420312_P6_Collector.java rename to clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P6_Collector.java index acd227d15..23522d0d2 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportBR_0420312_P6_Collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P6_Collector.java @@ -1,48 +1,48 @@ -package ru.spcex.clearing.reports.services.collector; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets; -import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.reports.reports.bt_17_5.ReportBR_0420312_P6; -import ru.spcex.clearing.reports.services.ReportWithPeriodCollector; -import ru.spcex.platform.imdg.api.Imdg; -import ru.spcex.platform.imdg.api.ImdgProvider; - -import java.math.BigDecimal; -import java.time.LocalDate; -import java.util.Collection; -import java.util.Objects; - -@Component -public class ReportBR_0420312_P6_Collector extends ReportWithPeriodCollector { - private Imdg liabilitiesClaimsAssetsImdg; - - @Autowired - public ReportBR_0420312_P6_Collector(ImdgProvider imdgProvider) { - liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class); - } - - @Override - public ReportBR_0420312_P6 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) { - validateDateRange(startDate, endDate); - - Collection liabilities = searchLiabilitiesClaimsAssets(liabilitiesClaimsAssetsImdg, startDate, endDate); - - BigDecimal liabilitiesQuantitySum = liabilities.stream() - .map(LiabilitiesClaimsAssets::getLiabilitiesQuantity) - .filter(Objects::nonNull) - .reduce(BigDecimal::add).orElse(BigDecimal.ZERO); - - ReportBR_0420312_P6 reportBR_0420312P5 = new ReportBR_0420312_P6(startDate, endDate); - ReportBR_0420312_P6.Info_0420312_P6 reportInfo = new ReportBR_0420312_P6.Info_0420312_P6(toString(liabilitiesQuantitySum)); - reportBR_0420312P5.getRows().add(reportInfo); - - return reportBR_0420312P5; - } - - @Override - public Class getReportClass() { - return ReportBR_0420312_P6.class; - } -} +package ru.spcex.clearing.reports.services.collector.bt.bt_17_5; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.reports.reports.bt.bt_17_5.ReportBR_0420312_P6; +import ru.spcex.clearing.reports.services.ReportWithPeriodCollector; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.util.Collection; +import java.util.Objects; + +@Component +public class ReportBR_0420312_P6_Collector extends ReportWithPeriodCollector { + private Imdg liabilitiesClaimsAssetsImdg; + + @Autowired + public ReportBR_0420312_P6_Collector(ImdgProvider imdgProvider) { + liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class); + } + + @Override + public ReportBR_0420312_P6 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) { + validateDateRange(startDate, endDate); + + Collection liabilities = searchLiabilitiesClaimsAssets(liabilitiesClaimsAssetsImdg, startDate, endDate); + + BigDecimal liabilitiesQuantitySum = liabilities.stream() + .map(LiabilitiesClaimsAssets::getLiabilitiesQuantity) + .filter(Objects::nonNull) + .reduce(BigDecimal::add).orElse(BigDecimal.ZERO); + + ReportBR_0420312_P6 reportBR_0420312P5 = new ReportBR_0420312_P6(startDate, endDate); + ReportBR_0420312_P6.Info_0420312_P6 reportInfo = new ReportBR_0420312_P6.Info_0420312_P6(toString(liabilitiesQuantitySum)); + reportBR_0420312P5.getRows().add(reportInfo); + + return reportBR_0420312P5; + } + + @Override + public Class getReportClass() { + return ReportBR_0420312_P6.class; + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportBR_0420312_P7_Collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P7_Collector.java similarity index 93% rename from clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportBR_0420312_P7_Collector.java rename to clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P7_Collector.java index 9e03ee953..ce5d112d0 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportBR_0420312_P7_Collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P7_Collector.java @@ -1,10 +1,10 @@ -package ru.spcex.clearing.reports.services.collector; +package ru.spcex.clearing.reports.services.collector.bt.bt_17_5; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets; import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.reports.reports.bt_17_5.ReportBR_0420312_P7; +import ru.spcex.clearing.reports.reports.bt.bt_17_5.ReportBR_0420312_P7; import ru.spcex.clearing.reports.services.ReportWithPeriodCollector; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportBR_0420312_P8_Collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P8_Collector.java similarity index 95% rename from clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportBR_0420312_P8_Collector.java rename to clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P8_Collector.java index 76f53b9fc..d04fa1156 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportBR_0420312_P8_Collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P8_Collector.java @@ -1,98 +1,99 @@ -package ru.spcex.clearing.reports.services.collector; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import ru.clearing.classes.statics.data.company.Company; -import ru.clearing.classes.statics.data.company.CompanySymbols; -import ru.clearing.classes.statics.data.company.ClearingMemberCategory; -import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets; -import ru.clearing.platform.dictionary.CurrencyCodeDictionary; -import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.reports.reports.bt_17_5.ReportBR_0420312_P8; -import ru.spcex.clearing.reports.services.ReportWithPeriodCollector; -import ru.spcex.platform.enumeration.DocumentTypes; -import ru.spcex.platform.imdg.api.Imdg; -import ru.spcex.platform.imdg.api.ImdgProvider; - -import java.time.LocalDate; -import java.util.Collection; -import java.util.List; -import java.util.Map; - -@Component -public class ReportBR_0420312_P8_Collector extends ReportWithPeriodCollector { - private Imdg companyImdg; - private Imdg companySymbolsImdg; - private Imdg clearingMemberCategoryImdg; - private Imdg liabilitiesClaimsAssetsImdg; - private Imdg currencyCodeDictionaryImdg; - - @Autowired - public ReportBR_0420312_P8_Collector(ImdgProvider imdgProvider) { - companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); - liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class); - companySymbolsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class); - clearingMemberCategoryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class); - currencyCodeDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CurrencyCodeDictionary, CurrencyCodeDictionary.class); - } - - protected CompanySymbols findSymbol(DocumentTypes docType, Long companyId) { - CompanySymbols companySymbol = companySymbolsImdg.getSingleObjectByFieldValues(Map.of( - "companySymbol", docType.getKey(), - "companyId", companyId - )); - return companySymbol; - } - - @Override - public ReportBR_0420312_P8 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) { - validateDateRange(startDate, endDate); - - ReportBR_0420312_P8 reportBR_0420312P8 = new ReportBR_0420312_P8(startDate, endDate); - - Collection liabilities = searchLiabilitiesClaimsAssets(liabilitiesClaimsAssetsImdg, startDate, endDate); - Map> indexByCompany = MapUtil.indexList(liabilities, LiabilitiesClaimsAssets::getCompanyId); - - for (Map.Entry> companyEntry : indexByCompany.entrySet()) { - final Long companyId = companyEntry.getKey(); - Company company = companyImdg.getSingleObjectByID(companyId); - if (company == null) { - log.warn("Company not found by LiabilitiesClaimsAssets.CompanyId={}", companyId); - continue; - } - CompanySymbols companySymbolINN = findSymbol(DocumentTypes.inn, company.getId()); - CompanySymbols companySymbolOGRN = findSymbol(DocumentTypes.ogrn, company.getId()); - ClearingMemberCategory cmc = clearingMemberCategoryImdg.getSingleObjectByFieldValues(Map.of("companyId", companyId)); - String clearingMemberCategory = cmc == null ? null : cmc.getClearingMemberCategory(); - - - List companyLiabilities = companyEntry.getValue(); - Map> indexByCurrency = MapUtil.indexList(companyLiabilities, LiabilitiesClaimsAssets::getCurrency); - for (Map.Entry> currencyEntry : indexByCurrency.entrySet()) { - String currencyCode = currencyEntry.getKey(); - Long currencyId = MapUtil.getDictionaryIdByCode(currencyCodeDictionaryImdg, currencyCode); - if (currencyId == null) { - log.warn("No currency found for code \"{}\"", currencyEntry.getKey()); - } - ReportBR_0420312_P8.Info_0420312_P8 info_0420312_p8 = new ReportBR_0420312_P8.Info_0420312_P8( - toString(currencyId), - toString(companyId), - toString(company.getFullName()), - companySymbolINN == null ? null : toString(companySymbolINN.getCompanySymbolValue()), - companySymbolOGRN == null ? null : toString(companySymbolOGRN.getCompanySymbolValue()), - toString(company.getProfile().getCountryCode()), - toString(clearingMemberCategory) - ); - reportBR_0420312P8.getRows().add(info_0420312_p8); - } - } - - return reportBR_0420312P8; - } - - - @Override - public Class getReportClass() { - return ReportBR_0420312_P8.class; - } -} +package ru.spcex.clearing.reports.services.collector.bt.bt_17_5; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import ru.clearing.classes.statics.data.company.ClearingMemberCategory; +import ru.clearing.classes.statics.data.company.Company; +import ru.clearing.classes.statics.data.company.CompanySymbols; +import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets; +import ru.clearing.platform.dictionary.CurrencyCodeDictionary; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.reports.reports.bt.bt_17_5.ReportBR_0420312_P8; +import ru.spcex.clearing.reports.services.ReportWithPeriodCollector; +import ru.spcex.clearing.reports.services.collector.MapUtil; +import ru.spcex.platform.enumeration.DocumentTypes; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; + +import java.time.LocalDate; +import java.util.Collection; +import java.util.List; +import java.util.Map; + +@Component +public class ReportBR_0420312_P8_Collector extends ReportWithPeriodCollector { + private Imdg companyImdg; + private Imdg companySymbolsImdg; + private Imdg clearingMemberCategoryImdg; + private Imdg liabilitiesClaimsAssetsImdg; + private Imdg currencyCodeDictionaryImdg; + + @Autowired + public ReportBR_0420312_P8_Collector(ImdgProvider imdgProvider) { + companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); + liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class); + companySymbolsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class); + clearingMemberCategoryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class); + currencyCodeDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CurrencyCodeDictionary, CurrencyCodeDictionary.class); + } + + protected CompanySymbols findSymbol(DocumentTypes docType, Long companyId) { + CompanySymbols companySymbol = companySymbolsImdg.getSingleObjectByFieldValues(Map.of( + "companySymbol", docType.getKey(), + "companyId", companyId + )); + return companySymbol; + } + + @Override + public ReportBR_0420312_P8 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) { + validateDateRange(startDate, endDate); + + ReportBR_0420312_P8 reportBR_0420312P8 = new ReportBR_0420312_P8(startDate, endDate); + + Collection liabilities = searchLiabilitiesClaimsAssets(liabilitiesClaimsAssetsImdg, startDate, endDate); + Map> indexByCompany = MapUtil.indexList(liabilities, LiabilitiesClaimsAssets::getCompanyId); + + for (Map.Entry> companyEntry : indexByCompany.entrySet()) { + final Long companyId = companyEntry.getKey(); + Company company = companyImdg.getSingleObjectByID(companyId); + if (company == null) { + log.warn("Company not found by LiabilitiesClaimsAssets.CompanyId={}", companyId); + continue; + } + CompanySymbols companySymbolINN = findSymbol(DocumentTypes.inn, company.getId()); + CompanySymbols companySymbolOGRN = findSymbol(DocumentTypes.ogrn, company.getId()); + ClearingMemberCategory cmc = clearingMemberCategoryImdg.getSingleObjectByFieldValues(Map.of("companyId", companyId)); + String clearingMemberCategory = cmc == null ? null : cmc.getClearingMemberCategory(); + + + List companyLiabilities = companyEntry.getValue(); + Map> indexByCurrency = MapUtil.indexList(companyLiabilities, LiabilitiesClaimsAssets::getCurrency); + for (Map.Entry> currencyEntry : indexByCurrency.entrySet()) { + String currencyCode = currencyEntry.getKey(); + Long currencyId = MapUtil.getDictionaryIdByCode(currencyCodeDictionaryImdg, currencyCode); + if (currencyId == null) { + log.warn("No currency found for code \"{}\"", currencyEntry.getKey()); + } + ReportBR_0420312_P8.Info_0420312_P8 info_0420312_p8 = new ReportBR_0420312_P8.Info_0420312_P8( + toString(currencyId), + toString(companyId), + toString(company.getFullName()), + companySymbolINN == null ? null : toString(companySymbolINN.getCompanySymbolValue()), + companySymbolOGRN == null ? null : toString(companySymbolOGRN.getCompanySymbolValue()), + toString(company.getProfile().getCountryCode()), + toString(clearingMemberCategory) + ); + reportBR_0420312P8.getRows().add(info_0420312_p8); + } + } + + return reportBR_0420312P8; + } + + + @Override + public Class getReportClass() { + return ReportBR_0420312_P8.class; + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportBR_0420312_P9_Collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P9_Collector.java similarity index 95% rename from clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportBR_0420312_P9_Collector.java rename to clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P9_Collector.java index 025956f07..9138693bc 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportBR_0420312_P9_Collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P9_Collector.java @@ -1,80 +1,81 @@ -package ru.spcex.clearing.reports.services.collector; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import ru.clearing.classes.statics.data.company.Company; -import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets; -import ru.clearing.platform.dictionary.CurrencyCodeDictionary; -import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.reports.reports.bt_17_5.ReportBR_0420312_P9; -import ru.spcex.clearing.reports.services.ReportWithPeriodCollector; -import ru.spcex.platform.imdg.api.Imdg; -import ru.spcex.platform.imdg.api.ImdgProvider; - -import java.math.BigDecimal; -import java.time.LocalDate; -import java.util.Collection; -import java.util.List; -import java.util.Map; -import java.util.Objects; - -@Component -public class ReportBR_0420312_P9_Collector extends ReportWithPeriodCollector { - private Imdg companyImdg; - private Imdg liabilitiesClaimsAssetsImdg; - private Imdg currencyCodeDictionaryImdg; - - @Autowired - public ReportBR_0420312_P9_Collector(ImdgProvider imdgProvider) { - companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); - liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class); - currencyCodeDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CurrencyCodeDictionary, CurrencyCodeDictionary.class); - } - - @Override - public ReportBR_0420312_P9 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) { - validateDateRange(startDate, endDate); - - ReportBR_0420312_P9 reportBR_0420312P9 = new ReportBR_0420312_P9(startDate, endDate); - - Collection liabilities = searchLiabilitiesClaimsAssets(liabilitiesClaimsAssetsImdg, startDate, endDate); - Map> indexByCompany = MapUtil.indexList(liabilities, LiabilitiesClaimsAssets::getCompanyId); - - for (Map.Entry> companyEntry : indexByCompany.entrySet()) { - final Long companyId = companyEntry.getKey(); - Company company = companyImdg.getSingleObjectByID(companyId); - if (company == null) { - log.warn("Company not found by LiabilitiesClaimsAssets.CompanyId={}", companyId); - continue; - } - List companyLiabilities = companyEntry.getValue(); - Map> indexByCurrency = MapUtil.indexList(companyLiabilities, LiabilitiesClaimsAssets::getCurrency); - for (Map.Entry> currencyEntry : indexByCurrency.entrySet()) { - String currencyCode = currencyEntry.getKey(); - Long currencyId = MapUtil.getDictionaryIdByCode(currencyCodeDictionaryImdg, currencyCode); - if (currencyId == null) { - log.warn("No currency found for code \"{}\"", currencyEntry.getKey()); - } - BigDecimal sumOfLiabilities = currencyEntry.getValue().stream() - .map(LiabilitiesClaimsAssets::getLiabilitiesQuantity) - .filter(Objects::nonNull) - .reduce(BigDecimal::add) - .orElse(BigDecimal.ZERO); - ReportBR_0420312_P9.Info_0420312_P9 info_0420312_p9 = new ReportBR_0420312_P9.Info_0420312_P9( - toString(currencyId), - toString(companyId), - toString(currencyCode), - toString(sumOfLiabilities) - ); - reportBR_0420312P9.getRows().add(info_0420312_p9); - } - } - - return reportBR_0420312P9; - } - - @Override - public Class getReportClass() { - return ReportBR_0420312_P9.class; - } -} +package ru.spcex.clearing.reports.services.collector.bt.bt_17_5; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import ru.clearing.classes.statics.data.company.Company; +import ru.clearing.classes.statics.data.liabilities.LiabilitiesClaimsAssets; +import ru.clearing.platform.dictionary.CurrencyCodeDictionary; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.reports.reports.bt.bt_17_5.ReportBR_0420312_P9; +import ru.spcex.clearing.reports.services.ReportWithPeriodCollector; +import ru.spcex.clearing.reports.services.collector.MapUtil; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +@Component +public class ReportBR_0420312_P9_Collector extends ReportWithPeriodCollector { + private Imdg companyImdg; + private Imdg liabilitiesClaimsAssetsImdg; + private Imdg currencyCodeDictionaryImdg; + + @Autowired + public ReportBR_0420312_P9_Collector(ImdgProvider imdgProvider) { + companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); + liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class); + currencyCodeDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CurrencyCodeDictionary, CurrencyCodeDictionary.class); + } + + @Override + public ReportBR_0420312_P9 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) { + validateDateRange(startDate, endDate); + + ReportBR_0420312_P9 reportBR_0420312P9 = new ReportBR_0420312_P9(startDate, endDate); + + Collection liabilities = searchLiabilitiesClaimsAssets(liabilitiesClaimsAssetsImdg, startDate, endDate); + Map> indexByCompany = MapUtil.indexList(liabilities, LiabilitiesClaimsAssets::getCompanyId); + + for (Map.Entry> companyEntry : indexByCompany.entrySet()) { + final Long companyId = companyEntry.getKey(); + Company company = companyImdg.getSingleObjectByID(companyId); + if (company == null) { + log.warn("Company not found by LiabilitiesClaimsAssets.CompanyId={}", companyId); + continue; + } + List companyLiabilities = companyEntry.getValue(); + Map> indexByCurrency = MapUtil.indexList(companyLiabilities, LiabilitiesClaimsAssets::getCurrency); + for (Map.Entry> currencyEntry : indexByCurrency.entrySet()) { + String currencyCode = currencyEntry.getKey(); + Long currencyId = MapUtil.getDictionaryIdByCode(currencyCodeDictionaryImdg, currencyCode); + if (currencyId == null) { + log.warn("No currency found for code \"{}\"", currencyEntry.getKey()); + } + BigDecimal sumOfLiabilities = currencyEntry.getValue().stream() + .map(LiabilitiesClaimsAssets::getLiabilitiesQuantity) + .filter(Objects::nonNull) + .reduce(BigDecimal::add) + .orElse(BigDecimal.ZERO); + ReportBR_0420312_P9.Info_0420312_P9 info_0420312_p9 = new ReportBR_0420312_P9.Info_0420312_P9( + toString(currencyId), + toString(companyId), + toString(currencyCode), + toString(sumOfLiabilities) + ); + reportBR_0420312P9.getRows().add(info_0420312_p9); + } + } + + return reportBR_0420312P9; + } + + @Override + public Class getReportClass() { + return ReportBR_0420312_P9.class; + } +} From eed1e94f07854e7842aaf7f8348c596087ec1727 Mon Sep 17 00:00:00 2001 From: akulikov Date: Wed, 10 May 2023 19:58:18 +0300 Subject: [PATCH 02/32] classes for cls-283 --- clearing-parent/reports-service/pom.xml | 10 ++++ .../clearing/reports/reports/ReportId.java | 13 ++++- .../reports/bp/ExecutedDealReport.java | 40 ++++++++++++++ .../OperationalLiabilitiesClaimsReport.java | 53 +++++++++++++++++++ .../bp/OperationalMoneyChangeReport.java | 49 +++++++++++++++++ .../reports/bp/PeriodLiabilitiesClaims.java | 51 ++++++++++++++++++ .../reports/reports/bp/PeriodMoneyChange.java | 46 ++++++++++++++++ .../bp/SummaryLiabilitiesClaimsReport.java | 52 ++++++++++++++++++ .../reports/bp/SummarylMoneyChange.java | 46 ++++++++++++++++ .../reports/bp/UnfulfilledDealReport.java | 39 ++++++++++++++ 10 files changed, 398 insertions(+), 1 deletion(-) create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReport.java create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalLiabilitiesClaimsReport.java create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalMoneyChangeReport.java create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/PeriodLiabilitiesClaims.java create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/PeriodMoneyChange.java create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummaryLiabilitiesClaimsReport.java create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummarylMoneyChange.java create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/UnfulfilledDealReport.java diff --git a/clearing-parent/reports-service/pom.xml b/clearing-parent/reports-service/pom.xml index 969ee84ed..4c4ff1026 100644 --- a/clearing-parent/reports-service/pom.xml +++ b/clearing-parent/reports-service/pom.xml @@ -40,17 +40,27 @@ jackson-dataformat-xml + com.thoughtworks.xstream xstream 1.4.19 + + org.apache.poi poi-ooxml 5.1.0 + + + com.opencsv + opencsv + 5.5.2 + + ru.spcex.clearing diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ReportId.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ReportId.java index a235a2a83..00b21d565 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ReportId.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ReportId.java @@ -5,6 +5,7 @@ import ru.spcex.platform.utils.enumeration.IEnumKey; /** * Идентификаторы отчётов */ +// todo create new ID public enum ReportId implements IEnumKey { PA_B("REPPA.B"), PA_IV("REPPA.IV"), @@ -22,8 +23,18 @@ public enum ReportId implements IEnumKey { BR_0420312_P1("REPBR.0420312_р1-1"), BR_0420312_P2("REPBR.0420312_р1-2"), BR_0420312_P3("REPBR.0420312_р1-3"), BR_0420312_P4("REPBR.0420312_р1-4"), BR_0420312_P5("REPBR.0420312_р1-5"), BR_0420312_P6("REPBR.0420312_р1-6"), BR_0420312_P7("REPBR.0420312_р1-7"), BR_0420312_P8("REPBR.0420312_р3-1"), - BR_0420312_P9("REPBR.0420312_р3-2"), BR_0420312_P10("REPBR.0420312_р3-3"); + BR_0420312_P9("REPBR.0420312_р3-2"), BR_0420312_P10("REPBR.0420312_р3-3"), + OPERATIONAL_LIABILITIES_CLAIMS("operational_liabilities_claims"), + OPERATIONAL_MONEY_CHANGE("operational_money_change"), + SUMMARY_LIABILITIES_CLAIMS("summary_liabilities_claims"), + SUMMARY_L_MONEY_CHANGE("summary_lmoney_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"), + + ; private final String key; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReport.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReport.java new file mode 100644 index 000000000..ab4b4faf2 --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReport.java @@ -0,0 +1,40 @@ +package ru.spcex.clearing.reports.reports.bp; + +import ru.spcex.clearing.reports.reports.ReportId; +import ru.spcex.clearing.reports.reports.ReportWithPeriod; + +import java.time.LocalDate; +import java.time.LocalDateTime; + +public class ExecutedDealReport extends ReportWithPeriod { + + private final String[] headers = { + "id", "securityId", "tradeNo", "tradeDate", "tradeTime", "settleDate", "settleCode", "price", "quanity", "value" + }; + + public ExecutedDealReport(LocalDate startDate, LocalDate endDate) { + super(ReportId.EXECUTED_DEAL_REPORT, + "0.0.1", + "BP", + "Реестр сделок, принятых на клиринг", + startDate, + endDate); + } + + @Override + public String getReportName(LocalDateTime reportDateTime) { + return "executed_deal_report.%s-%s.%s".formatted( + DATE_FORMATTER.format(startDate), + DATE_FORMATTER.format(endDate), + DATE_TIME_FORMATTER.format(reportDateTime) + ); + } + + public String[] getHeaders() { + return headers; + } + + public record InfoExecutedDeal(String id, String securityId, String tradeNo, String tradeDate, String tradeTime, + String settleDate, String settleCode, String price, String quanity, String value) { + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalLiabilitiesClaimsReport.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalLiabilitiesClaimsReport.java new file mode 100644 index 000000000..7953a2614 --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalLiabilitiesClaimsReport.java @@ -0,0 +1,53 @@ +package ru.spcex.clearing.reports.reports.bp; + +import ru.spcex.clearing.reports.reports.ReportId; +import ru.spcex.clearing.reports.reports.ReportWithPeriod; + +import java.time.LocalDate; +import java.time.LocalDateTime; + +// todo check typo +public class OperationalLiabilitiesClaimsReport extends ReportWithPeriod { + + private final String[] headers = { + "id", "doc_date", "doc_time", "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" + }; + + public OperationalLiabilitiesClaimsReport(LocalDate startDate, LocalDate endDate) { + super(ReportId.OPERATIONAL_LIABILITIES_CLAIMS, + "0.0.1", + "BP2", + "Операционный отчет. Отчет об обязательствах", + startDate, + endDate); + } + + @Override + public String getReportName(LocalDateTime reportDateTime) { + return "operational_liabilities_claims.%s-%s.%s".formatted( + DATE_FORMATTER.format(startDate), + DATE_FORMATTER.format(endDate), + DATE_TIME_FORMATTER.format(reportDateTime) + ); + } + + public String[] getHeaders() { + return headers; + } + + public record InfoOperationalLiabilitiesClaims(String id, String docDate, String docTime, String docName, + String docType, String clearingHouse, String firmId, String firName, + String sessionId, String clearingDate, String clearingTime, + String trdAccId, String account, String depoAccount, String currency, + String trId, String securityId, String trBuySell, String trDate, + String trExecDate, String execStatus, String repaymDate, String trPrice, + String nominal, String lotValue, String trLot, String trQuantity, + String trValue, String trAccruedInt, String accruedInt, String trClrComm, + String trExhComm, String cashLiability, String depoLiability, + String cashNetto, String depoNetto) { + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalMoneyChangeReport.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalMoneyChangeReport.java new file mode 100644 index 000000000..2f253b5b2 --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalMoneyChangeReport.java @@ -0,0 +1,49 @@ +package ru.spcex.clearing.reports.reports.bp; + +import ru.spcex.clearing.reports.reports.ReportId; +import ru.spcex.clearing.reports.reports.ReportWithPeriod; + +import java.time.LocalDate; +import java.time.LocalDateTime; + +public class OperationalMoneyChangeReport extends ReportWithPeriod { + + private 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" + }; + + + public OperationalMoneyChangeReport(LocalDate startDate, LocalDate endDate) { + super(ReportId.OPERATIONAL_MONEY_CHANGE, + "0.0.1", + "BP3", + "Операционный отчет. Отчет о денежных средствах", + startDate, + endDate); + } + + @Override + public String getReportName(LocalDateTime reportDateTime) { + return "operational_money_change.%s-%s.%s".formatted( + DATE_FORMATTER.format(startDate), + DATE_FORMATTER.format(endDate), + DATE_TIME_FORMATTER.format(reportDateTime) + ); + } + + public String[] getHeaders() { + return headers; + } + + public record InfoOperationalMoneyChangeReport(String id, String docDate, String docTime, String docName, + String docType, String clearingHouse, String firmId, String firName, + String trdAccId, String account, String currency, String registryCode, + String registryName, String openBalance, String changeBalance, + String addWithdraw, String closeBalance, String remarks, String addSum, + String addTime, String withdrawSum, String withdrawTime) { + + } + +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/PeriodLiabilitiesClaims.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/PeriodLiabilitiesClaims.java new file mode 100644 index 000000000..5ed9d1367 --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/PeriodLiabilitiesClaims.java @@ -0,0 +1,51 @@ +package ru.spcex.clearing.reports.reports.bp; + +import ru.spcex.clearing.reports.reports.ReportId; +import ru.spcex.clearing.reports.reports.ReportWithPeriod; + +import java.time.LocalDate; +import java.time.LocalDateTime; + +public class PeriodLiabilitiesClaims extends ReportWithPeriod { + + private 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" + }; + + public PeriodLiabilitiesClaims(LocalDate startDate, LocalDate endDate) { + super(ReportId.PERIOD_LIABILITIES_CLAIMS, + "0.0.1", + "BP", + "Отчет за период. Отчет об обязательствах", + startDate, + endDate); + } + + @Override + public String getReportName(LocalDateTime reportDateTime) { + return "period_liabilities_claims.%s-%s.%s".formatted( + DATE_FORMATTER.format(startDate), + DATE_FORMATTER.format(endDate), + DATE_TIME_FORMATTER.format(reportDateTime) + ); + } + + public String[] getHeaders() { + return headers; + } + + public record InfoPeriodLiabilitiesClaims(String id, String docDate, String docTime, String docName, + String docType, String clearingHouse, String firmId, String firName, + String sessionId, String clearingDate, String clearingTime, String trdAccId, + String account, String depoAccount, String currency, String trId, String securityId, + String trBuySell, String trDate, String trExecDate, String execStatus, + String repaymDate, String trPrice, String nominal, String lotValue, + String trLot, String trQuantity, String trValue, String trAccruedInt, + String accruedInt, String trClrComm, String trExhComm, String cashLiability, + String depoLiability, String cashNetto, String depoNetto) { + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/PeriodMoneyChange.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/PeriodMoneyChange.java new file mode 100644 index 000000000..999b3b903 --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/PeriodMoneyChange.java @@ -0,0 +1,46 @@ +package ru.spcex.clearing.reports.reports.bp; + +import ru.spcex.clearing.reports.reports.ReportId; +import ru.spcex.clearing.reports.reports.ReportWithPeriod; + +import java.time.LocalDate; +import java.time.LocalDateTime; + +public class PeriodMoneyChange extends ReportWithPeriod { + + private 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" + }; + + public PeriodMoneyChange(LocalDate startDate, LocalDate endDate) { + super(ReportId.PERIOD_MONEY_CHANGE, + "0.0.1", + "BP", + "Отчет за период. Отчет о денежных средствах", + startDate, + endDate); + } + + @Override + public String getReportName(LocalDateTime reportDateTime) { + return "period_money_change.%s-%s.%s".formatted( + DATE_FORMATTER.format(startDate), + DATE_FORMATTER.format(endDate), + DATE_TIME_FORMATTER.format(reportDateTime) + ); + } + + public String[] getHeaders() { + return headers; + } + + public record InfoPeriodMoneyChange(String id, String docDate, String docTime, String docName, String docType, + String clearingHouse, String firmId, String firName, String trdAccId, + String account, String currency, String registryCode, String registryName, + String openBalance, String changeBalance, String addWithdraw, + String closeBalance, String remarks, String addSum, String addTime, + String withdrawSum, String withdrawTime) { + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummaryLiabilitiesClaimsReport.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummaryLiabilitiesClaimsReport.java new file mode 100644 index 000000000..bcc9611c8 --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummaryLiabilitiesClaimsReport.java @@ -0,0 +1,52 @@ +package ru.spcex.clearing.reports.reports.bp; + +import ru.spcex.clearing.reports.reports.ReportId; +import ru.spcex.clearing.reports.reports.ReportWithPeriod; + +import java.time.LocalDate; +import java.time.LocalDateTime; + +// todo check typo +public class SummaryLiabilitiesClaimsReport extends ReportWithPeriod { + + private 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" + }; + + public SummaryLiabilitiesClaimsReport(LocalDate startDate, LocalDate endDate) { + super(ReportId.SUMMARY_LIABILITIES_CLAIMS, + "0.0.1", + "BP4", + "Сводный отчет. Отчет об обязательствах", + startDate, + endDate); + } + + @Override + public String getReportName(LocalDateTime reportDateTime) { + return "summary_liabilities_claims.%s-%s.%s".formatted( + DATE_FORMATTER.format(startDate), + DATE_FORMATTER.format(endDate), + DATE_TIME_FORMATTER.format(reportDateTime) + ); + } + + public String[] getHeaders() { + return headers; + } + + public record InfoSummaryLiabilitiesClaims(String id, String docDate, String docTime, String docName, + String docType, String clearingHouse, String firmId, String firName, + String sessionId, String clearingDate, String clearingTime, String trdAccId, + String account, String depoAccount, String currency, String trId, + String securityId, String trBuySell, String trDate, String trExecDate, + String execStatus, String repaymDate, String trPrice, String nominal, + String lotValue, String trLot, String trQuantity, String trValue, + String trAccruedInt, String accruedInt, String trClrComm, String trExhComm, + String cashLiability, String depoLiability, String cashNetto, String depoNetto) { + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummarylMoneyChange.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummarylMoneyChange.java new file mode 100644 index 000000000..d76496894 --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummarylMoneyChange.java @@ -0,0 +1,46 @@ +package ru.spcex.clearing.reports.reports.bp; + +import ru.spcex.clearing.reports.reports.ReportId; +import ru.spcex.clearing.reports.reports.ReportWithPeriod; + +import java.time.LocalDate; +import java.time.LocalDateTime; + +// todo check typo +public class SummarylMoneyChange extends ReportWithPeriod { + + private 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", + }; + + public SummarylMoneyChange(LocalDate startDate, LocalDate endDate) { + super(ReportId.SUMMARY_L_MONEY_CHANGE, + "0.0.1", + "BP5", + "Сводный отчет. Отчет о денежных средствах", + startDate, + endDate); + } + + @Override + public String getReportName(LocalDateTime reportDateTime) { + return "summary_lmoney_change.%s-%s.%s".formatted( + DATE_FORMATTER.format(startDate), + DATE_FORMATTER.format(endDate), + DATE_TIME_FORMATTER.format(reportDateTime) + ); + } + + public String[] getHeaders() { + return headers; + } + + public record InfoSummarylMoneyChange(String id, String docDate, String docTime, String docName, String docType, + String clearingHouse, String firmId, String firName, String trdAccId, String account, + String currency, String registryCode, String registryName, String openBalance, + String changeBalance, String addWithdraw, String closeBalance, String remarks, + String addSum, String addTime, String withdrawSum, String withdrawTime) { + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/UnfulfilledDealReport.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/UnfulfilledDealReport.java new file mode 100644 index 000000000..8de76a447 --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/UnfulfilledDealReport.java @@ -0,0 +1,39 @@ +package ru.spcex.clearing.reports.reports.bp; + +import ru.spcex.clearing.reports.reports.ReportId; +import ru.spcex.clearing.reports.reports.ReportWithPeriod; + +import java.time.LocalDate; +import java.time.LocalDateTime; + +public class UnfulfilledDealReport extends ReportWithPeriod { + + private final String[] headers = { + "id", "securityId", "tradeNo", "tradeDate", "settleCode" + }; + + public UnfulfilledDealReport(LocalDate startDate, LocalDate endDate) { + super(ReportId.UNFULFILLED_DEAL_REPORT, + "0.0.1", + "BP", + "Реестр сделок, принятых на клиринг", + startDate, + endDate); + } + + @Override + public String getReportName(LocalDateTime reportDateTime) { + return "unfulfilled_deal_report.%s-%s.%s".formatted( + DATE_FORMATTER.format(startDate), + DATE_FORMATTER.format(endDate), + DATE_TIME_FORMATTER.format(reportDateTime) + ); + } + + public String[] getHeaders() { + return headers; + } + + public record InfoUnfulfilledDealReport(String id, String securityId, String tradeNo, String tradeDate, String settleCode) { + } +} From 0022cb6b22ae9d5902dcc49eadf6c5b5510b23db Mon Sep 17 00:00:00 2001 From: akulikov Date: Thu, 11 May 2023 13:57:29 +0300 Subject: [PATCH 03/32] cls-283 base service --- clearing-parent/reports-service/pom.xml | 8 ++ .../reports/config/BeanConfiguration.java | 27 +++++ .../config/validation/ValidationConfig.java | 103 ++++++++++++++++++ .../clearing/reports/errors/ReportError.java | 23 ++++ .../reports/services/ReportService.java | 81 ++++++++++++++ .../platform/enumeration/ReportType.java | 30 +++++ .../platform/messaging/domain/Consts.java | 3 + .../domain/cud/reports/ReportRequest.java | 3 +- .../reports/ReportRequestFromExecution.java | 22 ++++ .../reports/ReportRequestFromRegistry.java | 7 ++ 10 files changed, 306 insertions(+), 1 deletion(-) create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/BeanConfiguration.java create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/validation/ValidationConfig.java create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/errors/ReportError.java create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportService.java create mode 100644 platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/ReportType.java create mode 100644 platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestFromExecution.java create mode 100644 platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestFromRegistry.java diff --git a/clearing-parent/reports-service/pom.xml b/clearing-parent/reports-service/pom.xml index 4c4ff1026..cfc872733 100644 --- a/clearing-parent/reports-service/pom.xml +++ b/clearing-parent/reports-service/pom.xml @@ -93,6 +93,14 @@ mockito-core test + + ru.spcex.clearing + security-util + + + ru.spcex.clearing + clearing-validation + diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/BeanConfiguration.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/BeanConfiguration.java new file mode 100644 index 000000000..da06a010e --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/BeanConfiguration.java @@ -0,0 +1,27 @@ +package ru.spcex.clearing.reports.config; + +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Scope; +import ru.spcex.clearing.reports.errors.ReportError; +import ru.spcex.clearing.util.security.UserRoleVerification; +import ru.spcex.clearing.util.services.IMDGMessageResolver; +import ru.spcex.platform.enumeration.UserRole; +import ru.spcex.platform.imdg.api.ImdgProvider; +import ru.spcex.platform.utils.enumeration.IMessageResolver; + +@Configuration +public class BeanConfiguration { + @Bean + public IMessageResolver messageResolver(ImdgProvider imdgProvider) { + return new IMDGMessageResolver(imdgProvider); + } + + @Bean + @Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE) + public UserRoleVerification userRoleVerification(ImdgProvider imdgProvider, IMessageResolver messageResolver) { + return new UserRoleVerification(imdgProvider, messageResolver, UserRole.Admin, ReportError.UserVerifyDenial); + } + +} 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 new file mode 100644 index 000000000..26513b3e3 --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/validation/ValidationConfig.java @@ -0,0 +1,103 @@ +package ru.spcex.clearing.reports.config.validation; + + +import org.springframework.context.annotation.Bean; +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.ReportRequestFromExecution; +import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequestFromRegistry; +import ru.spcex.clearing.reports.errors.ReportError; +import ru.spcex.clearing.validation.common.ValidationHelper; +import ru.spcex.clearing.validation.common.rules.EnumPresentRule; +import ru.spcex.clearing.validation.common.rules.FieldRequiredRule; +import ru.spcex.platform.classes.base.SpcexObjectBase; +import ru.spcex.platform.enumeration.ReportType; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; +import ru.spcex.platform.imdg.validation.ImdgValidationContext; +import ru.spcex.platform.utils.enumeration.IMessageResolver; +import ru.spcex.platform.utils.validation.IValidator; +import ru.spcex.platform.utils.validation.ValidatorImpl; + +import java.util.HashMap; +import java.util.Map; +import java.util.function.BiConsumer; +import java.util.function.Consumer; +import java.util.function.Function; + +@Configuration +public class ValidationConfig { + + @Bean("imdgForValidation") + public Map> imdgForValidation(ImdgProvider imdgProvider) { + final Map> imdg = new HashMap<>(); + BiConsumer> addImdg = (s, aClass) -> imdg.put(s, imdgProvider.getImdg(s, aClass)); + + addImdg.accept(IMDGDistributedNames.Map_Company, Company.class); + + return imdg; + } + + @Bean("validationHelper") + public ValidationHelper validationHelper(IMessageResolver messageResolver) { + return new ValidationHelper(messageResolver); + } + + @Bean("reportRequestFromExecutionValidator") + public Function reportRequestFromExecutionValidator( + Map> imdgForValidation + ) { + return reportRequestFromExecution -> { + ImdgValidationContext context = new ImdgValidationContext<>(); + context.setValidatedObject(reportRequestFromExecution); + + Consumer addImdg = (s) -> context.addImdg(s, imdgForValidation.get(s)); + // todo add dictionary for check reportId + + return new ValidatorImpl<>(context, + EnumPresentRule.instance("reportId", + ReportRequestFromExecution::getReportId, + new ReportType[]{ + ReportType.OPERATIONAL_LIABILITIES_CLAIMS, + ReportType.SUMMARY_LIABILITIES_CLAIMS, + ReportType.PERIOD_LIABILITIES_CLAIMS, + ReportType.EXECUTED_DEAL_REPORT, + ReportType.UNFULFILLED_DEAL_REPORT + }, + ReportError.WrongFieldValue, + ReportError.RequiredFieldEmpty), + FieldRequiredRule.instance("sessionId", + ReportRequestFromExecution::getSessionId, + ReportError.RequiredFieldEmpty) + ); + }; + } + + @Bean("reportRequestFromRegistryValidator") + public Function reportRequestFromRegistryValidator( + Map> imdgForValidation + ) { + return reportRequestFromRegistry -> { + ImdgValidationContext context = new ImdgValidationContext<>(); + context.setValidatedObject(reportRequestFromRegistry); + + Consumer addImdg = (s) -> context.addImdg(s, imdgForValidation.get(s)); + // todo add dictionary for check reportId + + return new ValidatorImpl<>(context, + EnumPresentRule.instance("reportId", + ReportRequestFromRegistry::getReportId, + new ReportType[]{ + ReportType.OPERATIONAL_MONEY_CHANGE, + ReportType.SUMMARY_L_MONEY_CHANGE, + ReportType.PERIOD_MONEY_CHANGE + }, + ReportError.WrongFieldValue, + ReportError.RequiredFieldEmpty) + ); + }; + } + +} + diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/errors/ReportError.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/errors/ReportError.java new file mode 100644 index 000000000..55c3dfdbd --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/errors/ReportError.java @@ -0,0 +1,23 @@ +package ru.spcex.clearing.reports.errors; + +import ru.spcex.platform.utils.enumeration.IErrorEnumId; + +// todo codes +public enum ReportError implements IErrorEnumId { + InternalError(99000L), + UserVerifyDenial(99001L), + RequiredFieldEmpty(99002L), + WrongFieldValue(99004L), + ; + + private final Long id; + + ReportError(Long id) { + this.id = id; + } + + @Override + public Long getId() { + return id; + } +} 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 new file mode 100644 index 000000000..4665d9d52 --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportService.java @@ -0,0 +1,81 @@ +package ru.spcex.clearing.reports.services; + +import org.apache.kafka.clients.consumer.Consumer; +import org.apache.kafka.clients.producer.Producer; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Service; +import ru.spcex.clearing.platform.messaging.domain.BaseRequest; +import ru.spcex.clearing.platform.messaging.domain.Consts; +import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequestFromExecution; +import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequestFromRegistry; +import ru.spcex.clearing.platform.messaging.service.QueueConsumer; +import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate; +import ru.spcex.clearing.util.security.UserRoleVerification; +import ru.spcex.clearing.validation.common.ValidationHelper; +import ru.spcex.platform.imdg.api.ImdgProvider; +import ru.spcex.platform.utils.enumeration.IMessageResolver; +import ru.spcex.platform.utils.validation.IValidator; + +import java.util.function.Function; + +@Service +public class ReportService extends QueueConsumer implements InitializingBean { + private final ImdgProvider imdgProvider; + private final IMessageResolver messageResolver; + private final UserRoleVerification userRoleVerification; + private final ValidationHelper validationHelper; + private final Function reportRequestFromExecutionValidator; + private final Function reportRequestFromRegistryValidator; + + public ReportService(Consumer kafkaQueue, + Producer kafkaResponseQueue, + ImdgProvider imdgProvider, + IMessageResolver messageResolver, + UserRoleVerification userRoleVerification, + ValidationHelper validationHelper, + @Qualifier("reportRequestFromExecutionValidator") + Function reportRequestFromExecutionValidator, + @Qualifier("reportRequestFromRegistryValidator") + Function reportRequestFromRegistryValidator) { + super(kafkaQueue, kafkaResponseQueue); + this.imdgProvider = imdgProvider; + this.messageResolver = messageResolver; + this.userRoleVerification = userRoleVerification; + this.validationHelper = validationHelper; + this.reportRequestFromExecutionValidator = reportRequestFromExecutionValidator; + this.reportRequestFromRegistryValidator = reportRequestFromRegistryValidator; + } + + @Override + public void afterPropertiesSet() throws Exception { + callback(ReportRequestFromRegistry.class) + .setConsumer(this::createReportFromRegistry) + .forDestination(Consts.DESTINATION_CREATE_REPORT_FROM_REGISTRY, callbacks::put); + callback(ReportRequestFromExecution.class) + .setConsumer(this::createReportFromExecution) + .forDestination(Consts.DESTINATION_CREATE_REPORT_FROM_EXECUTION, callbacks::put); + } + + public RequestInfoUpdate createReportFromRegistry(BaseRequest userRequest) { + RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest); + if (requestInfoUpdate != null) return null; + + requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestFromRegistryValidator); + if (requestInfoUpdate != null) return null; + + return null; + } + + public RequestInfoUpdate createReportFromExecution(BaseRequest userRequest) { + RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest); + if (requestInfoUpdate != null) return null; + + requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestFromExecutionValidator); + if (requestInfoUpdate != null) return null; + + return null; + } + + +} diff --git a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/ReportType.java b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/ReportType.java new file mode 100644 index 000000000..d35875401 --- /dev/null +++ b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/ReportType.java @@ -0,0 +1,30 @@ +package ru.spcex.platform.enumeration; + +import ru.spcex.platform.utils.enumeration.IEnumKey; + +/** + * Идентификатор отчета + * todo сделать для них dictionary + */ +public enum ReportType implements IEnumKey { + OPERATIONAL_LIABILITIES_CLAIMS("operational_liabilities_claims"), + OPERATIONAL_MONEY_CHANGE("operational_money_change"), + SUMMARY_LIABILITIES_CLAIMS("summary_liabilities_claims"), + SUMMARY_L_MONEY_CHANGE("summary_lmoney_change"), // todo check typo + PERIOD_LIABILITIES_CLAIMS("period_liabilities_claims"), + PERIOD_MONEY_CHANGE("period_money_change"), + EXECUTED_DEAL_REPORT("executed_deal_report"), + UNFULFILLED_DEAL_REPORT("unfulfilled_deal_report"), + ; + + private final String key; + + ReportType(String key) { + this.key = key; + } + + @Override + public String getKey() { + return 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 c00ea09a8..c6ef5edef 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 @@ -69,6 +69,9 @@ public interface Consts { String DESTINATION_BANK_ACCOUNT_UPDATE = "bank-account-update"; String DESTINATION_BANK_ACCOUNT_NEW = "bank-account-new"; + String DESTINATION_CREATE_REPORT_FROM_REGISTRY = "destination-create-report-from-registry"; + String DESTINATION_CREATE_REPORT_FROM_EXECUTION = "destination-create-report-from-execution"; + @Deprecated String ACCOUNT_NEW_SDF01 = "account-new-sdf01"; diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequest.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequest.java index 17952def1..4b1da114d 100644 --- a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequest.java +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequest.java @@ -1,6 +1,7 @@ package ru.spcex.clearing.platform.messaging.domain.cud.reports; import com.fasterxml.jackson.annotation.JsonProperty; +import ru.spcex.platform.enumeration.ReportType; /** * Запрос отчёта (без параметров) report-service @@ -8,7 +9,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; public class ReportRequest { /** * Идентификатор отчёта - * см. {@link ru.spcex.clearing.reports.reports.ReportsEnum} + * см. {@link ReportType} */ @JsonProperty protected String reportId; diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestFromExecution.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestFromExecution.java new file mode 100644 index 000000000..0ed78564b --- /dev/null +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestFromExecution.java @@ -0,0 +1,22 @@ +package ru.spcex.clearing.platform.messaging.domain.cud.reports; + +import com.fasterxml.jackson.annotation.JsonProperty; + +/** + * Запрос на построение отчета на основе ExecutionDeposit/Fond + */ +public class ReportRequestFromExecution extends ReportRequest { + /** + * Идентификатор сессии + */ + @JsonProperty + protected Long sessionId; + + public Long getSessionId() { + return sessionId; + } + + public void setSessionId(Long sessionId) { + this.sessionId = sessionId; + } +} diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestFromRegistry.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestFromRegistry.java new file mode 100644 index 000000000..f35d0a717 --- /dev/null +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestFromRegistry.java @@ -0,0 +1,7 @@ +package ru.spcex.clearing.platform.messaging.domain.cud.reports; + +/** + * Запрос на построение отчета на основе Registry + */ +public class ReportRequestFromRegistry extends ReportRequest { +} From 6c78081607077fb355c2455f03c54c6ac96e6210 Mon Sep 17 00:00:00 2001 From: akulikov Date: Thu, 11 May 2023 14:51:35 +0300 Subject: [PATCH 04/32] extract abstract class ExecutionCommon --- .../data/execution/ExecutionCommon.java | 191 ++++++++++++++++ .../data/execution/ExecutionDeposit.java | 187 +-------------- .../statics/data/execution/ExecutionFond.java | 213 ++---------------- 3 files changed, 210 insertions(+), 381 deletions(-) create mode 100644 clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/execution/ExecutionCommon.java diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/execution/ExecutionCommon.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/execution/ExecutionCommon.java new file mode 100644 index 000000000..00793129d --- /dev/null +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/execution/ExecutionCommon.java @@ -0,0 +1,191 @@ +package ru.clearing.classes.statics.data.execution; + +import ru.clearing.classes.objects.BusinessObject; + +import java.math.BigDecimal; +import java.time.Instant; +import java.time.LocalDate; + +public abstract class ExecutionCommon extends BusinessObject { + protected Long exchangeExecutionId; + protected Instant exchangeExecutionTime; + protected LocalDate tradingDate; + protected Long tradingClearingRegistryId; + protected String market; + protected BigDecimal price; + protected BigDecimal lots; + protected BigDecimal quantity; + protected BigDecimal interestAmount; + protected String side; + protected String settlementCurrency; + protected Long companyId; + protected Long duration; + protected String securityFullName; + protected String securitySymbol; + protected Long securityId; + protected Long counterPartyId; + protected String coverageStatus; + protected Long sessionId; + protected LocalDate clearingDate; + + public LocalDate getClearingDate() { + return clearingDate; + } + + public void setClearingDate(LocalDate value) { + this.clearingDate = value; + } + + public Long getExchangeExecutionId() { + return exchangeExecutionId; + } + + public void setExchangeExecutionId(Long value) { + this.exchangeExecutionId = value; + } + + public String getSide() { + return side; + } + + public void setSide(String value) { + this.side = value; + } + + public String getMarket() { + return market; + } + + public void setMarket(String value) { + this.market = value; + } + + public LocalDate getTradingDate() { + return tradingDate; + } + + public void setTradingDate(LocalDate value) { + this.tradingDate = value; + } + + public String getSecuritySymbol() { + return securitySymbol; + } + + public void setSecuritySymbol(String value) { + this.securitySymbol = value; + } + + public Long getSecurityId() { + return securityId; + } + + public void setSecurityId(Long value) { + this.securityId = value; + } + + public BigDecimal getInterestAmount() { + return interestAmount; + } + + public void setInterestAmount(BigDecimal value) { + this.interestAmount = value; + } + + public BigDecimal getPrice() { + return price; + } + + public void setPrice(BigDecimal value) { + this.price = value; + } + + public BigDecimal getLots() { + return lots; + } + + public void setLots(BigDecimal value) { + this.lots = value; + } + + public BigDecimal getQuantity() { + return quantity; + } + + public void setQuantity(BigDecimal value) { + this.quantity = value; + } + + public Instant getExchangeExecutionTime() { + return exchangeExecutionTime; + } + + public void setExchangeExecutionTime(Instant value) { + this.exchangeExecutionTime = value; + } + + public Long getDuration() { + return duration; + } + + public void setDuration(Long value) { + this.duration = value; + } + + public Long getTradingClearingRegistryId() { + return tradingClearingRegistryId; + } + + public void setTradingClearingRegistryId(Long value) { + this.tradingClearingRegistryId = value; + } + + public Long getCompanyId() { + return companyId; + } + + public void setCompanyId(Long value) { + this.companyId = value; + } + + public Long getCounterPartyId() { + return counterPartyId; + } + + public void setCounterPartyId(Long value) { + this.counterPartyId = value; + } + + public String getSecurityFullName() { + return securityFullName; + } + + public void setSecurityFullName(String value) { + this.securityFullName = value; + } + + public String getSettlementCurrency() { + return settlementCurrency; + } + + public void setSettlementCurrency(String value) { + this.settlementCurrency = value; + } + + public String getCoverageStatus() { + return coverageStatus; + } + + public void setCoverageStatus(String value) { + this.coverageStatus = value; + } + + public Long getSessionId() { + return sessionId; + } + + public void setSessionId(Long value) { + this.sessionId = value; + } + +} diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/execution/ExecutionDeposit.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/execution/ExecutionDeposit.java index 0d80e74c0..3883d4507 100644 --- a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/execution/ExecutionDeposit.java +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/execution/ExecutionDeposit.java @@ -1,103 +1,20 @@ package ru.clearing.classes.statics.data.execution; -import ru.clearing.classes.objects.BusinessObject; +import ru.clearing.classes.ConstSerializable; import java.math.BigDecimal; -import java.time.Instant; import java.time.LocalDate; -public class ExecutionDeposit extends BusinessObject { - private Long exchangeExecutionId; - private Instant exchangeExecutionTime; - private LocalDate tradingDate; - private Long tradingClearingRegistryId; - private String market; - private BigDecimal price; - private BigDecimal lots; - private BigDecimal quantity; +public class ExecutionDeposit extends ExecutionCommon { + private static final long serialVersionUID = ConstSerializable.serialVersionUID; + private BigDecimal firstLegAmount; private BigDecimal secondLegAmount; - private BigDecimal interestAmount; - private String side; - private String settlementCurrency; - private Long companyId; - private Long duration; private LocalDate firstLegSettlementDate; private LocalDate secondLegSettlementDate; private String firstLegSettlementCode; private String secondLegSettlementCode; - private String securityFullName; - private String securitySymbol; - private Long securityId; private String contract; - private Long counterPartyId; - private String coverageStatus; - private Long sessionId; - private LocalDate clearingDate; - - public Long getExchangeExecutionId() { - return exchangeExecutionId; - } - - public void setExchangeExecutionId(Long exchangeExecutionId) { - this.exchangeExecutionId = exchangeExecutionId; - } - - public Instant getExchangeExecutionTime() { - return exchangeExecutionTime; - } - - public void setExchangeExecutionTime(Instant exchangeExecutionTime) { - this.exchangeExecutionTime = exchangeExecutionTime; - } - - public LocalDate getTradingDate() { - return tradingDate; - } - - public void setTradingDate(LocalDate tradingDate) { - this.tradingDate = tradingDate; - } - - public Long getTradingClearingRegistryId() { - return tradingClearingRegistryId; - } - - public void setTradingClearingRegistryId(Long tradingClearingRegistryId) { - this.tradingClearingRegistryId = tradingClearingRegistryId; - } - - public String getMarket() { - return market; - } - - public void setMarket(String market) { - this.market = market; - } - - public BigDecimal getPrice() { - return price; - } - - public void setPrice(BigDecimal price) { - this.price = price; - } - - public BigDecimal getLots() { - return lots; - } - - public void setLots(BigDecimal lots) { - this.lots = lots; - } - - public BigDecimal getQuantity() { - return quantity; - } - - public void setQuantity(BigDecimal quantity) { - this.quantity = quantity; - } public BigDecimal getFirstLegAmount() { return firstLegAmount; @@ -115,46 +32,6 @@ public class ExecutionDeposit extends BusinessObject { this.secondLegAmount = secondLegAmount; } - public BigDecimal getInterestAmount() { - return interestAmount; - } - - public void setInterestAmount(BigDecimal interestAmount) { - this.interestAmount = interestAmount; - } - - public String getSide() { - return side; - } - - public void setSide(String side) { - this.side = side; - } - - public String getSettlementCurrency() { - return settlementCurrency; - } - - public void setSettlementCurrency(String settlementCurrency) { - this.settlementCurrency = settlementCurrency; - } - - public Long getCompanyId() { - return companyId; - } - - public void setCompanyId(Long companyId) { - this.companyId = companyId; - } - - public Long getDuration() { - return duration; - } - - public void setDuration(Long duration) { - this.duration = duration; - } - public LocalDate getFirstLegSettlementDate() { return firstLegSettlementDate; } @@ -187,30 +64,6 @@ public class ExecutionDeposit extends BusinessObject { this.secondLegSettlementCode = secondLegSettlementCode; } - public String getSecurityFullName() { - return securityFullName; - } - - public void setSecurityFullName(String securityFullName) { - this.securityFullName = securityFullName; - } - - public String getSecuritySymbol() { - return securitySymbol; - } - - public void setSecuritySymbol(String securitySymbol) { - this.securitySymbol = securitySymbol; - } - - public Long getSecurityId() { - return securityId; - } - - public void setSecurityId(Long securityId) { - this.securityId = securityId; - } - public String getContract() { return contract; } @@ -218,36 +71,4 @@ public class ExecutionDeposit extends BusinessObject { public void setContract(String contract) { this.contract = contract; } - - public Long getCounterPartyId() { - return counterPartyId; - } - - public void setCounterPartyId(Long counterPartyId) { - this.counterPartyId = counterPartyId; - } - - public String getCoverageStatus() { - return coverageStatus; - } - - public void setCoverageStatus(String coverageStatus) { - this.coverageStatus = coverageStatus; - } - - public Long getSessionId() { - return sessionId; - } - - public void setSessionId(Long sessionId) { - this.sessionId = sessionId; - } - - public LocalDate getClearingDate() { - return clearingDate; - } - - public void setClearingDate(LocalDate clearingDate) { - this.clearingDate = clearingDate; - } } diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/execution/ExecutionFond.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/execution/ExecutionFond.java index 8cc9e76f9..ef7421f4e 100644 --- a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/execution/ExecutionFond.java +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/execution/ExecutionFond.java @@ -1,7 +1,6 @@ package ru.clearing.classes.statics.data.execution; import ru.clearing.classes.ConstSerializable; -import ru.clearing.classes.objects.BusinessObject; import java.math.BigDecimal; import java.time.Instant; @@ -12,252 +11,70 @@ import java.time.LocalDate; *

* DB table: EXECUTION_FOND **/ -public class ExecutionFond extends BusinessObject { +public class ExecutionFond extends ExecutionCommon { private static final long serialVersionUID = ConstSerializable.serialVersionUID; - private LocalDate clearingDate; - private Long exchangeExecutionId; - private String side; - private String market; - private LocalDate tradingDate; - private String securitySymbol; - private Long securityId; - private BigDecimal interestAmount; private Long exchangeOrderId; - private BigDecimal price; private BigDecimal settlementAmount; - private BigDecimal lots; - private BigDecimal quantity; - private Instant exchangeExecutionTime; - private Long duration; - private Long tradingClearingRegistryId; private String comment; private Long clientCodeId; private String settlementCode; - private Long companyId; - private Long counterPartyId; - private String securityFullName; private LocalDate settlementDate; - private String settlementCurrency; private Instant exchangeExecutionMicroseconds; - private String coverageStatus; - private Long sessionId; - - - public LocalDate getClearingDate() { - return clearingDate; - } - - public void setClearingDate(LocalDate value) { - this.clearingDate = value; - } - - public Long getExchangeExecutionId() { - return exchangeExecutionId; - } - - public void setExchangeExecutionId(Long value) { - this.exchangeExecutionId = value; - } - - public String getSide() { - return side; - } - - public void setSide(String value) { - this.side = value; - } - - public String getMarket() { - return market; - } - - public void setMarket(String value) { - this.market = value; - } - - public LocalDate getTradingDate() { - return tradingDate; - } - - public void setTradingDate(LocalDate value) { - this.tradingDate = value; - } - - public String getSecuritySymbol() { - return securitySymbol; - } - - public void setSecuritySymbol(String value) { - this.securitySymbol = value; - } - - public Long getSecurityId() { - return securityId; - } - - public void setSecurityId(Long value) { - this.securityId = value; - } - - public BigDecimal getInterestAmount() { - return interestAmount; - } - - public void setInterestAmount(BigDecimal value) { - this.interestAmount = value; - } public Long getExchangeOrderId() { return exchangeOrderId; } - public void setExchangeOrderId(Long value) { - this.exchangeOrderId = value; - } - - public BigDecimal getPrice() { - return price; - } - - public void setPrice(BigDecimal value) { - this.price = value; + public void setExchangeOrderId(Long exchangeOrderId) { + this.exchangeOrderId = exchangeOrderId; } public BigDecimal getSettlementAmount() { return settlementAmount; } - public void setSettlementAmount(BigDecimal value) { - this.settlementAmount = value; - } - - public BigDecimal getLots() { - return lots; - } - - public void setLots(BigDecimal value) { - this.lots = value; - } - - public BigDecimal getQuantity() { - return quantity; - } - - public void setQuantity(BigDecimal value) { - this.quantity = value; - } - - public Instant getExchangeExecutionTime() { - return exchangeExecutionTime; - } - - public void setExchangeExecutionTime(Instant value) { - this.exchangeExecutionTime = value; - } - - public Long getDuration() { - return duration; - } - - public void setDuration(Long value) { - this.duration = value; - } - - public Long getTradingClearingRegistryId() { - return tradingClearingRegistryId; - } - - public void setTradingClearingRegistryId(Long value) { - this.tradingClearingRegistryId = value; + public void setSettlementAmount(BigDecimal settlementAmount) { + this.settlementAmount = settlementAmount; } public String getComment() { return comment; } - public void setComment(String value) { - this.comment = value; + public void setComment(String comment) { + this.comment = comment; } public Long getClientCodeId() { return clientCodeId; } - public void setClientCodeId(Long value) { - this.clientCodeId = value; + public void setClientCodeId(Long clientCodeId) { + this.clientCodeId = clientCodeId; } public String getSettlementCode() { return settlementCode; } - public void setSettlementCode(String value) { - this.settlementCode = value; - } - - public Long getCompanyId() { - return companyId; - } - - public void setCompanyId(Long value) { - this.companyId = value; - } - - public Long getCounterPartyId() { - return counterPartyId; - } - - public void setCounterPartyId(Long value) { - this.counterPartyId = value; - } - - public String getSecurityFullName() { - return securityFullName; - } - - public void setSecurityFullName(String value) { - this.securityFullName = value; + public void setSettlementCode(String settlementCode) { + this.settlementCode = settlementCode; } public LocalDate getSettlementDate() { return settlementDate; } - public void setSettlementDate(LocalDate value) { - this.settlementDate = value; - } - - public String getSettlementCurrency() { - return settlementCurrency; - } - - public void setSettlementCurrency(String value) { - this.settlementCurrency = value; + public void setSettlementDate(LocalDate settlementDate) { + this.settlementDate = settlementDate; } public Instant getExchangeExecutionMicroseconds() { return exchangeExecutionMicroseconds; } - public void setExchangeExecutionMicroseconds(Instant value) { - this.exchangeExecutionMicroseconds = value; + public void setExchangeExecutionMicroseconds(Instant exchangeExecutionMicroseconds) { + this.exchangeExecutionMicroseconds = exchangeExecutionMicroseconds; } - - public String getCoverageStatus() { - return coverageStatus; - } - - public void setCoverageStatus(String value) { - this.coverageStatus = value; - } - - public Long getSessionId() { - return sessionId; - } - - public void setSessionId(Long value) { - this.sessionId = value; - } - } \ No newline at end of file From c3a1cc41dee45b786686d04f5b08cb8d0f16f2c1 Mon Sep 17 00:00:00 2001 From: akulikov Date: Fri, 12 May 2023 18:09:54 +0300 Subject: [PATCH 05/32] ExecutedDealReport, OperationalLiabilitiesClaimsReport, OperationalMoneyChangeReport, UnfulfilledDealReport --- .../reports/reports/CSVReportBuilder.java | 115 ++++++++ .../reports/reports/PeriodParams.java | 27 ++ .../reports/reports/SessionIdParam.java | 16 ++ .../reports/bp/ExecutedDealReport.java | 40 --- .../reports/bp/ExecutedDealReportBuilder.java | 108 +++++++ .../OperationalLiabilitiesClaimsReport.java | 53 ---- ...ationalLiabilitiesClaimsReportBuilder.java | 263 ++++++++++++++++++ .../bp/OperationalMoneyChangeReport.java | 153 ++++++++-- .../reports/bp/UnfulfilledDealReport.java | 100 +++++-- .../ru/spcex/platform/enumeration/Market.java | 4 +- 10 files changed, 736 insertions(+), 143 deletions(-) create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/CSVReportBuilder.java create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/PeriodParams.java create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/SessionIdParam.java delete mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReport.java create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder.java delete mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalLiabilitiesClaimsReport.java create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalLiabilitiesClaimsReportBuilder.java 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 new file mode 100644 index 000000000..92f57089d --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/CSVReportBuilder.java @@ -0,0 +1,115 @@ +package ru.spcex.clearing.reports.reports; + +import com.opencsv.CSVWriterBuilder; +import com.opencsv.ICSVWriter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import ru.spcex.platform.enumeration.ReportType; + +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 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"); + + /** + * Метод получения заголовков для CSV отчета + */ + protected abstract String[] getHeaders(); + + /** + * Возвращает списком значения CSV отчета. Каждый элемент списка - строка, элемент массива внутри списка - столбец. + */ + protected abstract List getLines(); + + /** + * Название отчета, используется для формирования имени отчета + * + * @param params Параметры формирования отчета + */ + protected abstract String getReportFilename(P params); + + /** + * Тип отчета по {@link ReportType} + */ + protected abstract ReportType getReportType(); + + /** + * Формирование отчета на основе параметров + * + * @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('\'') + .withEscapeChar('\"'); + return csvWriterBuilder.build(); + } + + public File createReport(P params, File outFolder) { + assert outFolder != null && outFolder.isDirectory(); + + File reportFile = new File(outFolder, normalizeFilenameForOS(getReportFilename(params))); + + collect(params); + String[] headers = getHeaders(); + List lines = getLines(); + + assert headers != null; + assert lines != null; + + try (ICSVWriter csvWriter = createCsvWriter(reportFile)) { + csvWriter.writeNext(headers); + csvWriter.writeAll(lines, true); + } catch (IOException e) { + // todo check it + e.printStackTrace(); + } + + return reportFile; + } + + protected String normalizeFilenameForOS(String filename) { + if (System.getProperty("os.name").toLowerCase().contains("windows")) + return filename.replace(":", "_"); + return filename; + } + + public void setDateFormatter(DateTimeFormatter dateFormatter) { + this.dateFormatter = dateFormatter; + } + + public void setDateTimeFormatter(DateTimeFormatter dateTimeFormatter) { + this.dateTimeFormatter = dateTimeFormatter; + } + + public void setTimeFormatter(DateTimeFormatter timeFormatter) { + this.timeFormatter = timeFormatter; + } +} 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 new file mode 100644 index 000000000..4d30c335a --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/PeriodParams.java @@ -0,0 +1,27 @@ +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/SessionIdParam.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/SessionIdParam.java new file mode 100644 index 000000000..e2a529e6b --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/SessionIdParam.java @@ -0,0 +1,16 @@ +package ru.spcex.clearing.reports.reports; + +/** + * Параметры для формирования отчета по SessionId + */ +public class SessionIdParam { + private Long sessionId; + + public Long getSessionId() { + return sessionId; + } + + public void setSessionId(Long sessionId) { + this.sessionId = sessionId; + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReport.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReport.java deleted file mode 100644 index ab4b4faf2..000000000 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReport.java +++ /dev/null @@ -1,40 +0,0 @@ -package ru.spcex.clearing.reports.reports.bp; - -import ru.spcex.clearing.reports.reports.ReportId; -import ru.spcex.clearing.reports.reports.ReportWithPeriod; - -import java.time.LocalDate; -import java.time.LocalDateTime; - -public class ExecutedDealReport extends ReportWithPeriod { - - private final String[] headers = { - "id", "securityId", "tradeNo", "tradeDate", "tradeTime", "settleDate", "settleCode", "price", "quanity", "value" - }; - - public ExecutedDealReport(LocalDate startDate, LocalDate endDate) { - super(ReportId.EXECUTED_DEAL_REPORT, - "0.0.1", - "BP", - "Реестр сделок, принятых на клиринг", - startDate, - endDate); - } - - @Override - public String getReportName(LocalDateTime reportDateTime) { - return "executed_deal_report.%s-%s.%s".formatted( - DATE_FORMATTER.format(startDate), - DATE_FORMATTER.format(endDate), - DATE_TIME_FORMATTER.format(reportDateTime) - ); - } - - public String[] getHeaders() { - return headers; - } - - public record InfoExecutedDeal(String id, String securityId, String tradeNo, String tradeDate, String tradeTime, - String settleDate, String settleCode, String price, String quanity, String value) { - } -} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder.java new file mode 100644 index 000000000..e44f37993 --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder.java @@ -0,0 +1,108 @@ +package ru.spcex.clearing.reports.reports.bp; + +import ru.clearing.classes.statics.data.company.Company; +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.SessionIdParam; +import ru.spcex.platform.enumeration.Allowed; +import ru.spcex.platform.enumeration.ReportType; +import ru.spcex.platform.enumeration.WorkflowStatus; +import ru.spcex.platform.imdg.api.Imdg; +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.math.RoundingMode; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; + +public class ExecutedDealReportBuilder extends CSVReportBuilder { + private final Imdg executionFondImdg; + private final Imdg companyImdg; + private final Imdg sTradesImdg; + + private final String[] headers = { + "id", "securityId", "tradeNo", "tradeDate", "tradeTime", + "settleDate", "settleCode", "price", "quanity", "value" + }; + private List lines = null; + + public ExecutedDealReportBuilder(ImdgProvider imdgProvider) { + this.executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class); + this.companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); + this.sTradesImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_STrades, STrades.class); + } + + @Override + public String[] getHeaders() { + return headers; + } + + @Override + protected List getLines() { + return lines; + } + + @Override + protected String getReportFilename(SessionIdParam params) { + return "executed_deal_report.%s".formatted(LocalDateTime.now()); + } + + @Override + protected ReportType getReportType() { + return ReportType.EXECUTED_DEAL_REPORT; + } + + @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); + + lines = new ArrayList<>(executionFonds.size()); + for (ExecutionFond executionFond : executionFonds) { + Company company = companyImdg.getSingleObjectByID(executionFond.getCompanyId()); + if (!WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus())) continue; + STrades sTrade = sTradesImdg.getSingleObjectByFieldValues( + Map.of( + "tradeNum", executionFond.getExchangeExecutionId(), + "operation", executionFond.getSide() + ) + ); + + String id = String.valueOf(executionFond.getId()); + String securityId = String.valueOf(executionFond.getSecurityId()); + String tradeNo = String.valueOf(executionFond.getExchangeExecutionId()); + String tradeDate = dateFormatter.format(executionFond.getTradingDate()); + String tradeTime = dateFormatter.format(executionFond.getCreated()); + String settleDate = dateFormatter.format(executionFond.getSettlementDate()); + String settleCode = sTrade != null ? sTrade.getSettleCode() : ""; + String quantity = String.valueOf(executionFond.getQuantity()); + String value = String.valueOf(executionFond.getSettlementAmount()); + String price = String.valueOf(executionFond.getSettlementAmount().divide(executionFond.getQuantity(), RoundingMode.HALF_UP)); + + int valueIdx = 0; + String[] line = new String[getHeaders().length]; + line[valueIdx++] = id; + 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); + } + } + +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalLiabilitiesClaimsReport.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalLiabilitiesClaimsReport.java deleted file mode 100644 index 7953a2614..000000000 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalLiabilitiesClaimsReport.java +++ /dev/null @@ -1,53 +0,0 @@ -package ru.spcex.clearing.reports.reports.bp; - -import ru.spcex.clearing.reports.reports.ReportId; -import ru.spcex.clearing.reports.reports.ReportWithPeriod; - -import java.time.LocalDate; -import java.time.LocalDateTime; - -// todo check typo -public class OperationalLiabilitiesClaimsReport extends ReportWithPeriod { - - private final String[] headers = { - "id", "doc_date", "doc_time", "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" - }; - - public OperationalLiabilitiesClaimsReport(LocalDate startDate, LocalDate endDate) { - super(ReportId.OPERATIONAL_LIABILITIES_CLAIMS, - "0.0.1", - "BP2", - "Операционный отчет. Отчет об обязательствах", - startDate, - endDate); - } - - @Override - public String getReportName(LocalDateTime reportDateTime) { - return "operational_liabilities_claims.%s-%s.%s".formatted( - DATE_FORMATTER.format(startDate), - DATE_FORMATTER.format(endDate), - DATE_TIME_FORMATTER.format(reportDateTime) - ); - } - - public String[] getHeaders() { - return headers; - } - - public record InfoOperationalLiabilitiesClaims(String id, String docDate, String docTime, String docName, - String docType, String clearingHouse, String firmId, String firName, - String sessionId, String clearingDate, String clearingTime, - String trdAccId, String account, String depoAccount, String currency, - String trId, String securityId, String trBuySell, String trDate, - String trExecDate, String execStatus, String repaymDate, String trPrice, - String nominal, String lotValue, String trLot, String trQuantity, - String trValue, String trAccruedInt, String accruedInt, String trClrComm, - String trExhComm, String cashLiability, String depoLiability, - String cashNetto, String depoNetto) { - } -} 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 new file mode 100644 index 000000000..766f436a8 --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalLiabilitiesClaimsReportBuilder.java @@ -0,0 +1,263 @@ +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.clearing.reports.reports.SessionIdParam; +import ru.spcex.platform.enumeration.Market; +import ru.spcex.platform.enumeration.ReportType; +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 ru.spcex.platform.imdg.api.predicate.ImdgPredicate; + +import java.math.RoundingMode; +import java.time.Instant; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; + +// todo check typo +public class OperationalLiabilitiesClaimsReportBuilder extends CSVReportBuilder { + private final Imdg executionFondImdg; + private final Imdg executionDepositImdg; + private final Imdg companyImdg; + private final Imdg registryImdg; + private final Imdg

listingImdg; + private final Imdg fixedIncomeSecurityImdg; + private final Imdg tradingClearingRegistryImdg; + + private final String[] headers = { + "id", "doc_date", "doc_time", "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" + }; + private List lines = null; + + public OperationalLiabilitiesClaimsReportBuilder(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; + } + + @Override + protected String getReportFilename(SessionIdParam params) { + return "operational_liabilities_claims.%s".formatted(LocalDateTime.now()); + } + + @Override + protected ReportType getReportType() { + return ReportType.OPERATIONAL_LIABILITIES_CLAIMS; + } + + @Override + protected void collect(SessionIdParam params) { + ImdgPredicate executionFondPredicate = executionFondImdg + .predicateBuilder() + .equals("sessionId", params.getSessionId()); + Collection executionFonds = executionFondImdg.getCollectionObjectsByPredicate(executionFondPredicate); + + ImdgPredicate executionDepositPredicate = executionDepositImdg + .predicateBuilder() + .equals("sessionId", params.getSessionId()); + Collection executionDeposits = executionDepositImdg.getCollectionObjectsByPredicate(executionDepositPredicate); + + List executions = new ArrayList<>(executionFonds.size() + executionDeposits.size()); + executions.addAll(executionFonds); + executions.addAll(executionDeposits); + + Company clearingHouseCompany = companyImdg.getSingleObjectByID(1L); + String clearingHouse = clearingHouseCompany.getFullName(); + + Instant now = Instant.now(); + lines = new ArrayList<>(executions.size()); + for (ExecutionCommon execution : executions) { + Company company = companyImdg.getSingleObjectByID(execution.getCompanyId()); + if (!WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus())) continue; + + Registry registry = registryImdg.getSingleObjectByFieldValues(Map.of("companyId", execution.getCompanyId())); + Collection registriesForSessionId = registryImdg.getCollectionObjectsByFieldValues( + Map.of("sessionId", execution.getSessionId()) + ); + Listing listing = listingImdg.getSingleObjectByFieldValues(Map.of("securityId", execution.getSecurityId())); + FixedIncomeSecurity fixedIncomeSecurity = fixedIncomeSecurityImdg.getSingleObjectByFieldValues( + Map.of("securityId", execution.getSecurityId()) + ); + TradingClearingRegistry tradingClearingRegistry = tradingClearingRegistryImdg.getSingleObjectByID( + execution.getTradingClearingRegistryId() + ); + + String id = String.valueOf(execution.getId()); + String docDate = dateFormatter.format(now); + String docTime = timeFormatter.format(now); + 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 trdAccId = registry.getTradingClearingRegistry(); + String account = String.valueOf(tradingClearingRegistry.getMoneyAccountId()); + String depoAccount = String.valueOf(tradingClearingRegistry.getDepoAaccountId()); + 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())) { + execStatus = "Y"; + 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())) { + trPrice = String.valueOf( + executionFond.getSettlementAmount().divide(executionFond.getQuantity(), RoundingMode.HALF_UP) + ); + trQuantity = String.valueOf(executionFond.getQuantity()); + nominal = String.valueOf(fixedIncomeSecurity.getNominalValue()); + trValue = String.valueOf(executionFond.getSettlementAmount()); + trAccruedInt = String.valueOf(fixedIncomeSecurity.getCoupon()); + accruedInt = String.valueOf( + fixedIncomeSecurity.getCoupon().divide(executionFond.getQuantity(), RoundingMode.HALF_UP) + ); + cashLiability = String.valueOf(executionFond.getSettlementAmount()); + depoLiability = String.valueOf(executionFond.getQuantity()); + } + } + + String 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; + for (Registry currRegistry : registriesForSessionId) { + String registryCode = currRegistry.getRegistryCode(); + if (registryCode.endsWith("T")) { + if (registryCode.startsWith("TM")) { + if (tm_tRegistry != null && tm_tRegistry.getUpdatedAt().isAfter(currRegistry.getUpdatedAt())) continue; + tm_tRegistry = currRegistry; + } + if (registryCode.startsWith("OM")) { + if (om_tRegistry != null && om_tRegistry.getUpdatedAt().isAfter(currRegistry.getUpdatedAt())) continue; + om_tRegistry = currRegistry; + } + if (registryCode.startsWith("TS")) { + if (ts_tRegistry != null && ts_tRegistry.getUpdatedAt().isAfter(currRegistry.getUpdatedAt())) continue; + ts_tRegistry = currRegistry; + } + if (registryCode.startsWith("OS")) { + if (os_tRegistry != null && os_tRegistry.getUpdatedAt().isAfter(currRegistry.getUpdatedAt())) 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++] = 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); + } + } + +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalMoneyChangeReport.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalMoneyChangeReport.java index 2f253b5b2..cc99998bf 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalMoneyChangeReport.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalMoneyChangeReport.java @@ -1,49 +1,148 @@ package ru.spcex.clearing.reports.reports.bp; -import ru.spcex.clearing.reports.reports.ReportId; -import ru.spcex.clearing.reports.reports.ReportWithPeriod; +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.clearing.reports.reports.PeriodParams; +import ru.spcex.platform.enumeration.InOutDirection; +import ru.spcex.platform.enumeration.ReportType; +import ru.spcex.platform.enumeration.WorkflowStatus; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; +import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; -import java.time.LocalDate; +import java.time.Instant; import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; -public class OperationalMoneyChangeReport extends ReportWithPeriod { - +public class OperationalMoneyChangeReport extends CSVReportBuilder { + private final Imdg registryImdg; + private final Imdg companyImdg; + private final Imdg listingImdg; + private final Imdg statementImdg; + private final Imdg paymentInstructionImdg; private 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" }; + private List lines = null; - - public OperationalMoneyChangeReport(LocalDate startDate, LocalDate endDate) { - super(ReportId.OPERATIONAL_MONEY_CHANGE, - "0.0.1", - "BP3", - "Операционный отчет. Отчет о денежных средствах", - startDate, - endDate); + public OperationalMoneyChangeReport(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 getReportName(LocalDateTime reportDateTime) { - return "operational_money_change.%s-%s.%s".formatted( - DATE_FORMATTER.format(startDate), - DATE_FORMATTER.format(endDate), - DATE_TIME_FORMATTER.format(reportDateTime) - ); - } - public String[] getHeaders() { return headers; } - public record InfoOperationalMoneyChangeReport(String id, String docDate, String docTime, String docName, - String docType, String clearingHouse, String firmId, String firName, - String trdAccId, String account, String currency, String registryCode, - String registryName, String openBalance, String changeBalance, - String addWithdraw, String closeBalance, String remarks, String addSum, - String addTime, String withdrawSum, String withdrawTime) { + @Override + protected List getLines() { + return lines; + } + @Override + protected String getReportFilename(PeriodParams params) { + return "operational_money_change.%s-%s.%s".formatted( + dateFormatter.format(params.getStartDate()), + dateFormatter.format(params.getEndDate()), + dateTimeFormatter.format(LocalDateTime.now()) + ); + } + + @Override + protected ReportType getReportType() { + return ReportType.OPERATIONAL_MONEY_CHANGE; + } + + @Override + protected void collect(PeriodParams params) { + ImdgPredicateBuilder pb = registryImdg.predicateBuilder(); + Collection registries = registryImdg.getCollectionObjectsByPredicate( + pb.and( + pb.greatEqual("clearingDate", params.getStartDate()), + pb.lessEqual("clearingDate", params.getEndDate()) + ) + ); + + Company clearingHouseCompany = companyImdg.getSingleObjectByID(1L); + String clearingHouse = clearingHouseCompany.getFullName(); + + Instant now = Instant.now(); + lines = new ArrayList<>(registries.size()); + for (Registry registry : registries) { + Company company = companyImdg.getSingleObjectByID(registry.getCompanyId()); + if (!WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus())) continue; + + Listing listing = listingImdg.getSingleObjectByFieldValues(Map.of("securityId", registry.getSecurityId())); + Statement statement = statementImdg.getSingleObjectByFieldValues(Map.of("addresseeId", registry.getCompanyId())); + PaymentInstruction paymentInstruction = paymentInstructionImdg.getSingleObjectByFieldValues( + Map.of( + "id", registry.getPaymentId(), + "creditLegDirection", InOutDirection.out.getKey() + ) + ); + + String id = String.valueOf(registry.getId()); + String docDate = dateFormatter.format(now); + String docTime = timeFormatter.format(now); + 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()); // todo * + String currency = listing.getTradingCurrency(); // todo * + String registryCode = String.valueOf(registry.getId()); + String registryName = registry.getFullName(); // todo * + String openBalance = String.valueOf(registry.getOpenBalance()); + String changeBalance = String.valueOf(registry.getCloseBalance().subtract(registry.getOpenBalance())); + String addWithdraw = String.valueOf(registry.getCredit().subtract(registry.getDebit())); + String closeBalance = String.valueOf(registry.getCloseBalance()); + String remarks = ""; + String addSum = String.valueOf(registry.getCredit()); + String addTime = dateTimeFormatter.format(statement.getCreated()); + String withdrawSum = String.valueOf(registry.getDebit()); + String withdrawTime = dateTimeFormatter.format(paymentInstruction.getPaymentDate()); + + int valueIdx = 0; + String[] line = new String[getHeaders().length]; + line[valueIdx++] = id; + line[valueIdx++] = docDate; + line[valueIdx++] = docTime; + line[valueIdx++] = docName; + line[valueIdx++] = docTime; + 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); + } } } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/UnfulfilledDealReport.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/UnfulfilledDealReport.java index 8de76a447..4f5d8d585 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/UnfulfilledDealReport.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/UnfulfilledDealReport.java @@ -1,39 +1,95 @@ package ru.spcex.clearing.reports.reports.bp; -import ru.spcex.clearing.reports.reports.ReportId; -import ru.spcex.clearing.reports.reports.ReportWithPeriod; +import ru.clearing.classes.statics.data.company.Company; +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.SessionIdParam; +import ru.spcex.platform.enumeration.Allowed; +import ru.spcex.platform.enumeration.ReportType; +import ru.spcex.platform.enumeration.WorkflowStatus; +import ru.spcex.platform.imdg.api.Imdg; +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; - -public class UnfulfilledDealReport extends ReportWithPeriod { +import java.time.Instant; +import java.util.Collection; +import java.util.List; +import java.util.Map; +public class UnfulfilledDealReport extends CSVReportBuilder { + private final Imdg executionFondImdg; + private final Imdg companyImdg; + private final Imdg sTradesImdg; private final String[] headers = { "id", "securityId", "tradeNo", "tradeDate", "settleCode" }; + private final List lines = null; - public UnfulfilledDealReport(LocalDate startDate, LocalDate endDate) { - super(ReportId.UNFULFILLED_DEAL_REPORT, - "0.0.1", - "BP", - "Реестр сделок, принятых на клиринг", - startDate, - endDate); + public UnfulfilledDealReport(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); } @Override - public String getReportName(LocalDateTime reportDateTime) { - return "unfulfilled_deal_report.%s-%s.%s".formatted( - DATE_FORMATTER.format(startDate), - DATE_FORMATTER.format(endDate), - DATE_TIME_FORMATTER.format(reportDateTime) - ); - } - public String[] getHeaders() { return headers; } - public record InfoUnfulfilledDealReport(String id, String securityId, String tradeNo, String tradeDate, String settleCode) { + @Override + protected List getLines() { + return lines; } + + @Override + protected String getReportFilename(SessionIdParam params) { + return "unfulfilled_deal_report.%s".formatted( + dateTimeFormatter.format(Instant.now()) + ); + } + + @Override + protected ReportType getReportType() { + return ReportType.UNFULFILLED_DEAL_REPORT; + } + + @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); + + for (ExecutionFond executionFond : executionFonds) { + Company company = companyImdg.getSingleObjectByID(executionFond.getCompanyId()); + if (!WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus())) continue; + STrades sTrade = sTradesImdg.getSingleObjectByFieldValues( + Map.of( + "settleCode", executionFond.getSettlementCode(), + "operation", executionFond.getSide() + ) + ); + + String id = String.valueOf(executionFond.getId()); + String securityId = String.valueOf(executionFond.getSecurityId()); + String tradeNo = String.valueOf(executionFond.getExchangeExecutionId()); + String tradeDate = dateFormatter.format(executionFond.getTradingDate()); + String settleCode = sTrade != null ? sTrade.getClassCode() : null; + + int valueIdx = 0; + String[] line = new String[getHeaders().length]; + line[valueIdx++] = id; + line[valueIdx++] = securityId; + line[valueIdx++] = tradeNo; + line[valueIdx++] = tradeDate; + line[valueIdx++] = settleCode; + lines.add(line); + } + } + } diff --git a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/Market.java b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/Market.java index 8d20c67ef..ff11d32b0 100644 --- a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/Market.java +++ b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/Market.java @@ -3,7 +3,9 @@ package ru.spcex.platform.enumeration; import ru.spcex.platform.utils.enumeration.IEnumKey; public enum Market implements IEnumKey { - mkrs("MKRS"); + mkrs("MKRS"), + fond("FOND"), + ; private final String key; From 75e8a83aad086f3781e6c47dd4b016b9bbfd6380 Mon Sep 17 00:00:00 2001 From: akulikov Date: Mon, 15 May 2023 11:37:27 +0300 Subject: [PATCH 06/32] SummaryLiabilitiesClaimsReportBuilder SummaryMoneyChangeReportBuilder --- .../config/validation/ValidationConfig.java | 2 +- .../bp/LiabilitiesClaimsReportBuilder.java | 253 ++++++++++++++++++ ...ort.java => MoneyChangeReportBuilder.java} | 27 +- ...ationalLiabilitiesClaimsReportBuilder.java | 246 +---------------- .../OperationalMoneyChangeReportBuilder.java | 27 ++ .../bp/SummaryLiabilitiesClaimsReport.java | 52 ---- ...SummaryLiabilitiesClaimsReportBuilder.java | 23 ++ .../bp/SummaryMoneyChangeReportBuilder.java | 27 ++ .../reports/bp/SummarylMoneyChange.java | 46 ---- ...java => UnfulfilledDealReportBuilder.java} | 8 +- .../platform/enumeration/ReportType.java | 2 +- 11 files changed, 344 insertions(+), 369 deletions(-) create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/LiabilitiesClaimsReportBuilder.java rename clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/{OperationalMoneyChangeReport.java => MoneyChangeReportBuilder.java} (88%) create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalMoneyChangeReportBuilder.java delete mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummaryLiabilitiesClaimsReport.java create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummaryLiabilitiesClaimsReportBuilder.java create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummaryMoneyChangeReportBuilder.java delete mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummarylMoneyChange.java rename clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/{UnfulfilledDealReport.java => UnfulfilledDealReportBuilder.java} (93%) 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 26513b3e3..c38638049 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 @@ -90,7 +90,7 @@ public class ValidationConfig { ReportRequestFromRegistry::getReportId, new ReportType[]{ ReportType.OPERATIONAL_MONEY_CHANGE, - ReportType.SUMMARY_L_MONEY_CHANGE, + ReportType.SUMMARY_MONEY_CHANGE, ReportType.PERIOD_MONEY_CHANGE }, ReportError.WrongFieldValue, 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 new file mode 100644 index 000000000..35bc8635e --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/LiabilitiesClaimsReportBuilder.java @@ -0,0 +1,253 @@ +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.clearing.reports.reports.SessionIdParam; +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 ru.spcex.platform.imdg.api.predicate.ImdgPredicate; + +import java.math.RoundingMode; +import java.time.Instant; +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 { + private final Imdg executionFondImdg; + private final Imdg executionDepositImdg; + private final Imdg companyImdg; + private final Imdg registryImdg; + private final Imdg listingImdg; + private final Imdg fixedIncomeSecurityImdg; + private final Imdg tradingClearingRegistryImdg; + + private final String[] headers = { + "id", "doc_date", "doc_time", "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" + }; + private 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; + } + + @Override + protected void collect(SessionIdParam params) { + ImdgPredicate executionFondPredicate = executionFondImdg + .predicateBuilder() + .equals("sessionId", params.getSessionId()); + Collection executionFonds = executionFondImdg.getCollectionObjectsByPredicate(executionFondPredicate); + + ImdgPredicate executionDepositPredicate = executionDepositImdg + .predicateBuilder() + .equals("sessionId", params.getSessionId()); + Collection executionDeposits = executionDepositImdg.getCollectionObjectsByPredicate(executionDepositPredicate); + + List executions = new ArrayList<>(executionFonds.size() + executionDeposits.size()); + executions.addAll(executionFonds); + executions.addAll(executionDeposits); + + Company clearingHouseCompany = companyImdg.getSingleObjectByID(1L); + String clearingHouse = clearingHouseCompany.getFullName(); + + Instant now = Instant.now(); + lines = new ArrayList<>(executions.size()); + for (ExecutionCommon execution : executions) { + Company company = companyImdg.getSingleObjectByID(execution.getCompanyId()); + if (!WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus())) continue; + + Registry registry = registryImdg.getSingleObjectByFieldValues(Map.of("companyId", execution.getCompanyId())); + Collection registriesForSessionId = registryImdg.getCollectionObjectsByFieldValues( + Map.of("sessionId", execution.getSessionId()) + ); + Listing listing = listingImdg.getSingleObjectByFieldValues(Map.of("securityId", execution.getSecurityId())); + FixedIncomeSecurity fixedIncomeSecurity = fixedIncomeSecurityImdg.getSingleObjectByFieldValues( + Map.of("securityId", execution.getSecurityId()) + ); + TradingClearingRegistry tradingClearingRegistry = tradingClearingRegistryImdg.getSingleObjectByID( + execution.getTradingClearingRegistryId() + ); + + String id = String.valueOf(execution.getId()); + String docDate = dateFormatter.format(now); + String docTime = timeFormatter.format(now); + 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()); // todo check it + String trdAccId = registry.getTradingClearingRegistry(); + String account = String.valueOf(tradingClearingRegistry.getMoneyAccountId()); + String depoAccount = String.valueOf(tradingClearingRegistry.getDepoAaccountId()); + 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())) { + execStatus = "Y"; + 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())) { + trPrice = String.valueOf( + executionFond.getSettlementAmount().divide(executionFond.getQuantity(), RoundingMode.HALF_UP) + ); + trQuantity = String.valueOf(executionFond.getQuantity()); + nominal = String.valueOf(fixedIncomeSecurity.getNominalValue()); + trValue = String.valueOf(executionFond.getSettlementAmount()); + trAccruedInt = String.valueOf(fixedIncomeSecurity.getCoupon()); + accruedInt = String.valueOf( + fixedIncomeSecurity.getCoupon().divide(executionFond.getQuantity(), RoundingMode.HALF_UP) + ); + cashLiability = String.valueOf(executionFond.getSettlementAmount()); + depoLiability = String.valueOf(executionFond.getQuantity()); + } + } + + String 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; + for (Registry currRegistry : registriesForSessionId) { + String registryCode = currRegistry.getRegistryCode(); + if (registryCode.endsWith("T")) { + if (registryCode.startsWith("TM")) { + if (tm_tRegistry != null && tm_tRegistry.getUpdatedAt().isAfter(currRegistry.getUpdatedAt())) continue; + tm_tRegistry = currRegistry; + } + if (registryCode.startsWith("OM")) { + if (om_tRegistry != null && om_tRegistry.getUpdatedAt().isAfter(currRegistry.getUpdatedAt())) continue; + om_tRegistry = currRegistry; + } + if (registryCode.startsWith("TS")) { + if (ts_tRegistry != null && ts_tRegistry.getUpdatedAt().isAfter(currRegistry.getUpdatedAt())) continue; + ts_tRegistry = currRegistry; + } + if (registryCode.startsWith("OS")) { + if (os_tRegistry != null && os_tRegistry.getUpdatedAt().isAfter(currRegistry.getUpdatedAt())) 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); + } + } + +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalMoneyChangeReport.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/MoneyChangeReportBuilder.java similarity index 88% rename from clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalMoneyChangeReport.java rename to clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/MoneyChangeReportBuilder.java index cc99998bf..d56acd43f 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalMoneyChangeReport.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/MoneyChangeReportBuilder.java @@ -9,20 +9,18 @@ import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.reports.reports.CSVReportBuilder; import ru.spcex.clearing.reports.reports.PeriodParams; import ru.spcex.platform.enumeration.InOutDirection; -import ru.spcex.platform.enumeration.ReportType; import ru.spcex.platform.enumeration.WorkflowStatus; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; import java.time.Instant; -import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Map; -public class OperationalMoneyChangeReport extends CSVReportBuilder { +public abstract class MoneyChangeReportBuilder extends CSVReportBuilder { private final Imdg registryImdg; private final Imdg companyImdg; private final Imdg listingImdg; @@ -35,7 +33,7 @@ public class OperationalMoneyChangeReport extends CSVReportBuilder }; private List lines = null; - public OperationalMoneyChangeReport(ImdgProvider imdgProvider) { + 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); @@ -53,20 +51,6 @@ public class OperationalMoneyChangeReport extends CSVReportBuilder return lines; } - @Override - protected String getReportFilename(PeriodParams params) { - return "operational_money_change.%s-%s.%s".formatted( - dateFormatter.format(params.getStartDate()), - dateFormatter.format(params.getEndDate()), - dateTimeFormatter.format(LocalDateTime.now()) - ); - } - - @Override - protected ReportType getReportType() { - return ReportType.OPERATIONAL_MONEY_CHANGE; - } - @Override protected void collect(PeriodParams params) { ImdgPredicateBuilder pb = registryImdg.predicateBuilder(); @@ -103,10 +87,10 @@ public class OperationalMoneyChangeReport extends CSVReportBuilder String firmId = String.valueOf(registry.getCompanyId()); String firName = company.getFullName(); String trdAccId = registry.getTradingClearingRegistry(); - String account = String.valueOf(registry.getAccountId()); // todo * - String currency = listing.getTradingCurrency(); // todo * + String account = String.valueOf(registry.getAccountId()); + String currency = listing.getTradingCurrency(); String registryCode = String.valueOf(registry.getId()); - String registryName = registry.getFullName(); // todo * + String registryName = registry.getRegistryCode(); String openBalance = String.valueOf(registry.getOpenBalance()); String changeBalance = String.valueOf(registry.getCloseBalance().subtract(registry.getOpenBalance())); String addWithdraw = String.valueOf(registry.getCredit().subtract(registry.getDebit())); @@ -124,6 +108,7 @@ public class OperationalMoneyChangeReport extends CSVReportBuilder line[valueIdx++] = docTime; line[valueIdx++] = docName; line[valueIdx++] = docTime; + line[valueIdx++] = docType; line[valueIdx++] = clearingHouse; line[valueIdx++] = firmId; line[valueIdx++] = firName; 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 index 766f436a8..ecaaadbf9 100644 --- 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 @@ -1,263 +1,23 @@ 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.clearing.reports.reports.SessionIdParam; -import ru.spcex.platform.enumeration.Market; import ru.spcex.platform.enumeration.ReportType; -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 ru.spcex.platform.imdg.api.predicate.ImdgPredicate; -import java.math.RoundingMode; import java.time.Instant; -import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Map; - -// todo check typo -public class OperationalLiabilitiesClaimsReportBuilder extends CSVReportBuilder { - private final Imdg executionFondImdg; - private final Imdg executionDepositImdg; - private final Imdg companyImdg; - private final Imdg registryImdg; - private final Imdg listingImdg; - private final Imdg fixedIncomeSecurityImdg; - private final Imdg tradingClearingRegistryImdg; - - private final String[] headers = { - "id", "doc_date", "doc_time", "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" - }; - private List lines = null; +public class OperationalLiabilitiesClaimsReportBuilder extends LiabilitiesClaimsReportBuilder { public OperationalLiabilitiesClaimsReportBuilder(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; + super(imdgProvider); } @Override protected String getReportFilename(SessionIdParam params) { - return "operational_liabilities_claims.%s".formatted(LocalDateTime.now()); + return "operational_liabilities_claims.%s".formatted(Instant.now()); } @Override protected ReportType getReportType() { return ReportType.OPERATIONAL_LIABILITIES_CLAIMS; } - - @Override - protected void collect(SessionIdParam params) { - ImdgPredicate executionFondPredicate = executionFondImdg - .predicateBuilder() - .equals("sessionId", params.getSessionId()); - Collection executionFonds = executionFondImdg.getCollectionObjectsByPredicate(executionFondPredicate); - - ImdgPredicate executionDepositPredicate = executionDepositImdg - .predicateBuilder() - .equals("sessionId", params.getSessionId()); - Collection executionDeposits = executionDepositImdg.getCollectionObjectsByPredicate(executionDepositPredicate); - - List executions = new ArrayList<>(executionFonds.size() + executionDeposits.size()); - executions.addAll(executionFonds); - executions.addAll(executionDeposits); - - Company clearingHouseCompany = companyImdg.getSingleObjectByID(1L); - String clearingHouse = clearingHouseCompany.getFullName(); - - Instant now = Instant.now(); - lines = new ArrayList<>(executions.size()); - for (ExecutionCommon execution : executions) { - Company company = companyImdg.getSingleObjectByID(execution.getCompanyId()); - if (!WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus())) continue; - - Registry registry = registryImdg.getSingleObjectByFieldValues(Map.of("companyId", execution.getCompanyId())); - Collection registriesForSessionId = registryImdg.getCollectionObjectsByFieldValues( - Map.of("sessionId", execution.getSessionId()) - ); - Listing listing = listingImdg.getSingleObjectByFieldValues(Map.of("securityId", execution.getSecurityId())); - FixedIncomeSecurity fixedIncomeSecurity = fixedIncomeSecurityImdg.getSingleObjectByFieldValues( - Map.of("securityId", execution.getSecurityId()) - ); - TradingClearingRegistry tradingClearingRegistry = tradingClearingRegistryImdg.getSingleObjectByID( - execution.getTradingClearingRegistryId() - ); - - String id = String.valueOf(execution.getId()); - String docDate = dateFormatter.format(now); - String docTime = timeFormatter.format(now); - 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 trdAccId = registry.getTradingClearingRegistry(); - String account = String.valueOf(tradingClearingRegistry.getMoneyAccountId()); - String depoAccount = String.valueOf(tradingClearingRegistry.getDepoAaccountId()); - 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())) { - execStatus = "Y"; - 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())) { - trPrice = String.valueOf( - executionFond.getSettlementAmount().divide(executionFond.getQuantity(), RoundingMode.HALF_UP) - ); - trQuantity = String.valueOf(executionFond.getQuantity()); - nominal = String.valueOf(fixedIncomeSecurity.getNominalValue()); - trValue = String.valueOf(executionFond.getSettlementAmount()); - trAccruedInt = String.valueOf(fixedIncomeSecurity.getCoupon()); - accruedInt = String.valueOf( - fixedIncomeSecurity.getCoupon().divide(executionFond.getQuantity(), RoundingMode.HALF_UP) - ); - cashLiability = String.valueOf(executionFond.getSettlementAmount()); - depoLiability = String.valueOf(executionFond.getQuantity()); - } - } - - String 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; - for (Registry currRegistry : registriesForSessionId) { - String registryCode = currRegistry.getRegistryCode(); - if (registryCode.endsWith("T")) { - if (registryCode.startsWith("TM")) { - if (tm_tRegistry != null && tm_tRegistry.getUpdatedAt().isAfter(currRegistry.getUpdatedAt())) continue; - tm_tRegistry = currRegistry; - } - if (registryCode.startsWith("OM")) { - if (om_tRegistry != null && om_tRegistry.getUpdatedAt().isAfter(currRegistry.getUpdatedAt())) continue; - om_tRegistry = currRegistry; - } - if (registryCode.startsWith("TS")) { - if (ts_tRegistry != null && ts_tRegistry.getUpdatedAt().isAfter(currRegistry.getUpdatedAt())) continue; - ts_tRegistry = currRegistry; - } - if (registryCode.startsWith("OS")) { - if (os_tRegistry != null && os_tRegistry.getUpdatedAt().isAfter(currRegistry.getUpdatedAt())) 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++] = 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); - } - } - } 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 new file mode 100644 index 000000000..c0c85f5b6 --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalMoneyChangeReportBuilder.java @@ -0,0 +1,27 @@ +package ru.spcex.clearing.reports.reports.bp; + +import ru.spcex.clearing.reports.reports.PeriodParams; +import ru.spcex.platform.enumeration.ReportType; +import ru.spcex.platform.imdg.api.ImdgProvider; + +import java.time.Instant; + +public class OperationalMoneyChangeReportBuilder extends MoneyChangeReportBuilder { + public OperationalMoneyChangeReportBuilder(ImdgProvider imdgProvider) { + super(imdgProvider); + } + + @Override + protected String getReportFilename(PeriodParams params) { + return "operational_money_change.%s-%s.%s".formatted( + dateFormatter.format(params.getStartDate()), + dateFormatter.format(params.getEndDate()), + dateTimeFormatter.format(Instant.now()) + ); + } + + @Override + protected ReportType getReportType() { + return ReportType.OPERATIONAL_MONEY_CHANGE; + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummaryLiabilitiesClaimsReport.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummaryLiabilitiesClaimsReport.java deleted file mode 100644 index bcc9611c8..000000000 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummaryLiabilitiesClaimsReport.java +++ /dev/null @@ -1,52 +0,0 @@ -package ru.spcex.clearing.reports.reports.bp; - -import ru.spcex.clearing.reports.reports.ReportId; -import ru.spcex.clearing.reports.reports.ReportWithPeriod; - -import java.time.LocalDate; -import java.time.LocalDateTime; - -// todo check typo -public class SummaryLiabilitiesClaimsReport extends ReportWithPeriod { - - private 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" - }; - - public SummaryLiabilitiesClaimsReport(LocalDate startDate, LocalDate endDate) { - super(ReportId.SUMMARY_LIABILITIES_CLAIMS, - "0.0.1", - "BP4", - "Сводный отчет. Отчет об обязательствах", - startDate, - endDate); - } - - @Override - public String getReportName(LocalDateTime reportDateTime) { - return "summary_liabilities_claims.%s-%s.%s".formatted( - DATE_FORMATTER.format(startDate), - DATE_FORMATTER.format(endDate), - DATE_TIME_FORMATTER.format(reportDateTime) - ); - } - - public String[] getHeaders() { - return headers; - } - - public record InfoSummaryLiabilitiesClaims(String id, String docDate, String docTime, String docName, - String docType, String clearingHouse, String firmId, String firName, - String sessionId, String clearingDate, String clearingTime, String trdAccId, - String account, String depoAccount, String currency, String trId, - String securityId, String trBuySell, String trDate, String trExecDate, - String execStatus, String repaymDate, String trPrice, String nominal, - String lotValue, String trLot, String trQuantity, String trValue, - String trAccruedInt, String accruedInt, String trClrComm, String trExhComm, - String cashLiability, String depoLiability, String cashNetto, String depoNetto) { - } -} 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 new file mode 100644 index 000000000..17f406a65 --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummaryLiabilitiesClaimsReportBuilder.java @@ -0,0 +1,23 @@ +package ru.spcex.clearing.reports.reports.bp; + +import ru.spcex.clearing.reports.reports.SessionIdParam; +import ru.spcex.platform.enumeration.ReportType; +import ru.spcex.platform.imdg.api.ImdgProvider; + +import java.time.Instant; + +public class SummaryLiabilitiesClaimsReportBuilder extends LiabilitiesClaimsReportBuilder { + public SummaryLiabilitiesClaimsReportBuilder(ImdgProvider imdgProvider) { + super(imdgProvider); + } + + @Override + protected String getReportFilename(SessionIdParam params) { + return "summary_money_change.%s".formatted(dateTimeFormatter.format(Instant.now())); + } + + @Override + protected ReportType getReportType() { + return ReportType.SUMMARY_LIABILITIES_CLAIMS; + } +} 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 new file mode 100644 index 000000000..802ea25e1 --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummaryMoneyChangeReportBuilder.java @@ -0,0 +1,27 @@ +package ru.spcex.clearing.reports.reports.bp; + +import ru.spcex.clearing.reports.reports.PeriodParams; +import ru.spcex.platform.enumeration.ReportType; +import ru.spcex.platform.imdg.api.ImdgProvider; + +import java.time.Instant; + +public class SummaryMoneyChangeReportBuilder extends MoneyChangeReportBuilder { + public SummaryMoneyChangeReportBuilder(ImdgProvider imdgProvider) { + super(imdgProvider); + } + + @Override + protected String getReportFilename(PeriodParams params) { + return "summary_money_change.%s-%s.%s".formatted( + dateFormatter.format(params.getStartDate()), + dateFormatter.format(params.getEndDate()), + dateTimeFormatter.format(Instant.now()) + ); + } + + @Override + protected ReportType getReportType() { + return ReportType.SUMMARY_MONEY_CHANGE; + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummarylMoneyChange.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummarylMoneyChange.java deleted file mode 100644 index d76496894..000000000 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummarylMoneyChange.java +++ /dev/null @@ -1,46 +0,0 @@ -package ru.spcex.clearing.reports.reports.bp; - -import ru.spcex.clearing.reports.reports.ReportId; -import ru.spcex.clearing.reports.reports.ReportWithPeriod; - -import java.time.LocalDate; -import java.time.LocalDateTime; - -// todo check typo -public class SummarylMoneyChange extends ReportWithPeriod { - - private 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", - }; - - public SummarylMoneyChange(LocalDate startDate, LocalDate endDate) { - super(ReportId.SUMMARY_L_MONEY_CHANGE, - "0.0.1", - "BP5", - "Сводный отчет. Отчет о денежных средствах", - startDate, - endDate); - } - - @Override - public String getReportName(LocalDateTime reportDateTime) { - return "summary_lmoney_change.%s-%s.%s".formatted( - DATE_FORMATTER.format(startDate), - DATE_FORMATTER.format(endDate), - DATE_TIME_FORMATTER.format(reportDateTime) - ); - } - - public String[] getHeaders() { - return headers; - } - - public record InfoSummarylMoneyChange(String id, String docDate, String docTime, String docName, String docType, - String clearingHouse, String firmId, String firName, String trdAccId, String account, - String currency, String registryCode, String registryName, String openBalance, - String changeBalance, String addWithdraw, String closeBalance, String remarks, - String addSum, String addTime, String withdrawSum, String withdrawTime) { - } -} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/UnfulfilledDealReport.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/UnfulfilledDealReportBuilder.java similarity index 93% rename from clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/UnfulfilledDealReport.java rename to clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/UnfulfilledDealReportBuilder.java index 4f5d8d585..e99b3fda5 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/UnfulfilledDealReport.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/UnfulfilledDealReportBuilder.java @@ -19,7 +19,7 @@ import java.util.Collection; import java.util.List; import java.util.Map; -public class UnfulfilledDealReport extends CSVReportBuilder { +public class UnfulfilledDealReportBuilder extends CSVReportBuilder { private final Imdg executionFondImdg; private final Imdg companyImdg; private final Imdg sTradesImdg; @@ -28,7 +28,7 @@ public class UnfulfilledDealReport extends CSVReportBuilder { }; private final List lines = null; - public UnfulfilledDealReport(ImdgProvider imdgProvider) { + 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); @@ -46,9 +46,7 @@ public class UnfulfilledDealReport extends CSVReportBuilder { @Override protected String getReportFilename(SessionIdParam params) { - return "unfulfilled_deal_report.%s".formatted( - dateTimeFormatter.format(Instant.now()) - ); + return "unfulfilled_deal_report.%s".formatted(dateTimeFormatter.format(Instant.now())); } @Override 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 d35875401..2b1222a08 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 @@ -10,7 +10,7 @@ public enum ReportType implements IEnumKey { OPERATIONAL_LIABILITIES_CLAIMS("operational_liabilities_claims"), OPERATIONAL_MONEY_CHANGE("operational_money_change"), SUMMARY_LIABILITIES_CLAIMS("summary_liabilities_claims"), - SUMMARY_L_MONEY_CHANGE("summary_lmoney_change"), // todo check typo + SUMMARY_MONEY_CHANGE("summary_money_change"), PERIOD_LIABILITIES_CLAIMS("period_liabilities_claims"), PERIOD_MONEY_CHANGE("period_money_change"), EXECUTED_DEAL_REPORT("executed_deal_report"), From 8d7c725a060e865110d0b5475eaa0e9b7bc5ed8a Mon Sep 17 00:00:00 2001 From: akulikov Date: Mon, 15 May 2023 15:11:34 +0300 Subject: [PATCH 07/32] Period*ReportBuilder --- .../clearing/reports/reports/EmptyParams.java | 7 +++ .../bp/LiabilitiesClaimsReportBuilder.java | 41 +++++++------- .../reports/bp/MoneyChangeReportBuilder.java | 28 +++++----- ...ationalLiabilitiesClaimsReportBuilder.java | 20 ++++++- .../OperationalMoneyChangeReportBuilder.java | 20 ++++--- .../reports/bp/PeriodLiabilitiesClaims.java | 51 ------------------ .../PeriodLiabilitiesClaimsReportBuilder.java | 54 +++++++++++++++++++ .../reports/reports/bp/PeriodMoneyChange.java | 46 ---------------- .../bp/PeriodMoneyChangeReportBuilder.java | 43 +++++++++++++++ ...SummaryLiabilitiesClaimsReportBuilder.java | 19 +++++-- .../bp/SummaryMoneyChangeReportBuilder.java | 20 ++++--- 11 files changed, 194 insertions(+), 155 deletions(-) create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/EmptyParams.java delete mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/PeriodLiabilitiesClaims.java create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/PeriodLiabilitiesClaimsReportBuilder.java delete mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/PeriodMoneyChange.java create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/PeriodMoneyChangeReportBuilder.java diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/EmptyParams.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/EmptyParams.java new file mode 100644 index 000000000..c344fc1d2 --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/EmptyParams.java @@ -0,0 +1,7 @@ +package ru.spcex.clearing.reports.reports; + +/** + * Класс для формирования отчета без параметров + */ +public class EmptyParams { +} 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 index 35bc8635e..516f3f9fe 100644 --- 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 @@ -10,13 +10,11 @@ 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.clearing.reports.reports.SessionIdParam; 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 ru.spcex.platform.imdg.api.predicate.ImdgPredicate; import java.math.RoundingMode; import java.time.Instant; @@ -26,23 +24,23 @@ import java.util.List; import java.util.Map; // todo check typo -public abstract class LiabilitiesClaimsReportBuilder extends CSVReportBuilder { - private final Imdg executionFondImdg; - private final Imdg executionDepositImdg; - private final Imdg companyImdg; - private final Imdg registryImdg; - private final Imdg listingImdg; - private final Imdg fixedIncomeSecurityImdg; - private final Imdg tradingClearingRegistryImdg; +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; - private final String[] headers = { + protected final String[] headers = { "id", "doc_date", "doc_time", "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" }; - private List lines = null; + protected List lines = null; public LiabilitiesClaimsReportBuilder(ImdgProvider imdgProvider) { this.executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class); @@ -68,17 +66,14 @@ public abstract class LiabilitiesClaimsReportBuilder extends CSVReportBuilder executionFonds = executionFondImdg.getCollectionObjectsByPredicate(executionFondPredicate); + protected abstract Collection getExecutionFondsForReport(P params); - ImdgPredicate executionDepositPredicate = executionDepositImdg - .predicateBuilder() - .equals("sessionId", params.getSessionId()); - Collection executionDeposits = executionDepositImdg.getCollectionObjectsByPredicate(executionDepositPredicate); + 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); @@ -114,7 +109,7 @@ public abstract class LiabilitiesClaimsReportBuilder extends CSVReportBuilder { - private final Imdg registryImdg; - private final Imdg companyImdg; - private final Imdg listingImdg; - private final Imdg statementImdg; - private final Imdg paymentInstructionImdg; - private final String[] headers = { +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" }; - private List lines = null; + protected List lines = null; public MoneyChangeReportBuilder(ImdgProvider imdgProvider) { this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); @@ -51,15 +50,12 @@ public abstract class MoneyChangeReportBuilder extends CSVReportBuilder getRegistryForReport(P param); + @Override - protected void collect(PeriodParams params) { + protected void collect(P params) { ImdgPredicateBuilder pb = registryImdg.predicateBuilder(); - Collection registries = registryImdg.getCollectionObjectsByPredicate( - pb.and( - pb.greatEqual("clearingDate", params.getStartDate()), - pb.lessEqual("clearingDate", params.getEndDate()) - ) - ); + Collection registries = getRegistryForReport(params); Company clearingHouseCompany = companyImdg.getSingleObjectByID(1L); String clearingHouse = clearingHouseCompany.getFullName(); 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 index ecaaadbf9..f90e713cc 100644 --- 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 @@ -1,16 +1,34 @@ package ru.spcex.clearing.reports.reports.bp; +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.ReportType; import ru.spcex.platform.imdg.api.ImdgProvider; import java.time.Instant; +import java.util.Collection; +import java.util.Map; -public class OperationalLiabilitiesClaimsReportBuilder extends LiabilitiesClaimsReportBuilder { +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(Instant.now()); 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 index c0c85f5b6..0f014e4a4 100644 --- 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 @@ -1,25 +1,31 @@ package ru.spcex.clearing.reports.reports.bp; -import ru.spcex.clearing.reports.reports.PeriodParams; +import ru.clearing.classes.statics.data.registry.Registry; +import ru.spcex.clearing.reports.reports.SessionIdParam; import ru.spcex.platform.enumeration.ReportType; import ru.spcex.platform.imdg.api.ImdgProvider; import java.time.Instant; +import java.util.Collection; +import java.util.Map; -public class OperationalMoneyChangeReportBuilder extends MoneyChangeReportBuilder { +public class OperationalMoneyChangeReportBuilder extends MoneyChangeReportBuilder { public OperationalMoneyChangeReportBuilder(ImdgProvider imdgProvider) { super(imdgProvider); } @Override - protected String getReportFilename(PeriodParams params) { - return "operational_money_change.%s-%s.%s".formatted( - dateFormatter.format(params.getStartDate()), - dateFormatter.format(params.getEndDate()), - dateTimeFormatter.format(Instant.now()) + 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(Instant.now())); + } + @Override protected ReportType getReportType() { return ReportType.OPERATIONAL_MONEY_CHANGE; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/PeriodLiabilitiesClaims.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/PeriodLiabilitiesClaims.java deleted file mode 100644 index 5ed9d1367..000000000 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/PeriodLiabilitiesClaims.java +++ /dev/null @@ -1,51 +0,0 @@ -package ru.spcex.clearing.reports.reports.bp; - -import ru.spcex.clearing.reports.reports.ReportId; -import ru.spcex.clearing.reports.reports.ReportWithPeriod; - -import java.time.LocalDate; -import java.time.LocalDateTime; - -public class PeriodLiabilitiesClaims extends ReportWithPeriod { - - private 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" - }; - - public PeriodLiabilitiesClaims(LocalDate startDate, LocalDate endDate) { - super(ReportId.PERIOD_LIABILITIES_CLAIMS, - "0.0.1", - "BP", - "Отчет за период. Отчет об обязательствах", - startDate, - endDate); - } - - @Override - public String getReportName(LocalDateTime reportDateTime) { - return "period_liabilities_claims.%s-%s.%s".formatted( - DATE_FORMATTER.format(startDate), - DATE_FORMATTER.format(endDate), - DATE_TIME_FORMATTER.format(reportDateTime) - ); - } - - public String[] getHeaders() { - return headers; - } - - public record InfoPeriodLiabilitiesClaims(String id, String docDate, String docTime, String docName, - String docType, String clearingHouse, String firmId, String firName, - String sessionId, String clearingDate, String clearingTime, String trdAccId, - String account, String depoAccount, String currency, String trId, String securityId, - String trBuySell, String trDate, String trExecDate, String execStatus, - String repaymDate, String trPrice, String nominal, String lotValue, - String trLot, String trQuantity, String trValue, String trAccruedInt, - String accruedInt, String trClrComm, String trExhComm, String cashLiability, - String depoLiability, String cashNetto, String depoNetto) { - } -} 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 new file mode 100644 index 000000000..65eb2b11d --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/PeriodLiabilitiesClaimsReportBuilder.java @@ -0,0 +1,54 @@ +package ru.spcex.clearing.reports.reports.bp; + +import ru.clearing.classes.statics.data.execution.ExecutionDeposit; +import ru.clearing.classes.statics.data.execution.ExecutionFond; +import ru.spcex.clearing.reports.reports.PeriodParams; +import ru.spcex.platform.enumeration.ReportType; +import ru.spcex.platform.imdg.api.ImdgProvider; +import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; + +import java.time.Instant; +import java.util.Collection; + +public class PeriodLiabilitiesClaimsReportBuilder extends LiabilitiesClaimsReportBuilder { + + public PeriodLiabilitiesClaimsReportBuilder(ImdgProvider imdgProvider) { + super(imdgProvider); + } + + @Override + protected String getReportFilename(PeriodParams params) { + return "period_liabilities_claims.%s-%s.%s".formatted( + dateFormatter.format(params.getStartDate()), + dateFormatter.format(params.getEndDate()), + dateTimeFormatter.format(Instant.now()) + ); + } + + @Override + protected ReportType getReportType() { + return ReportType.PERIOD_LIABILITIES_CLAIMS; + } + + @Override + protected Collection getExecutionFondsForReport(PeriodParams params) { + ImdgPredicateBuilder pb = executionFondImdg.predicateBuilder(); + return executionFondImdg.getCollectionObjectsByPredicate( + pb.and( + pb.greatEqual("clearingDate", params.getStartDate()), + pb.lessEqual("clearingDate", params.getEndDate()) + ) + ); + } + + @Override + protected Collection getExecutionDepositsForReport(PeriodParams params) { + ImdgPredicateBuilder pb = executionDepositImdg.predicateBuilder(); + return executionDepositImdg.getCollectionObjectsByPredicate( + pb.and( + pb.greatEqual("clearingDate", params.getStartDate()), + pb.lessEqual("clearingDate", params.getEndDate()) + ) + ); + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/PeriodMoneyChange.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/PeriodMoneyChange.java deleted file mode 100644 index 999b3b903..000000000 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/PeriodMoneyChange.java +++ /dev/null @@ -1,46 +0,0 @@ -package ru.spcex.clearing.reports.reports.bp; - -import ru.spcex.clearing.reports.reports.ReportId; -import ru.spcex.clearing.reports.reports.ReportWithPeriod; - -import java.time.LocalDate; -import java.time.LocalDateTime; - -public class PeriodMoneyChange extends ReportWithPeriod { - - private 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" - }; - - public PeriodMoneyChange(LocalDate startDate, LocalDate endDate) { - super(ReportId.PERIOD_MONEY_CHANGE, - "0.0.1", - "BP", - "Отчет за период. Отчет о денежных средствах", - startDate, - endDate); - } - - @Override - public String getReportName(LocalDateTime reportDateTime) { - return "period_money_change.%s-%s.%s".formatted( - DATE_FORMATTER.format(startDate), - DATE_FORMATTER.format(endDate), - DATE_TIME_FORMATTER.format(reportDateTime) - ); - } - - public String[] getHeaders() { - return headers; - } - - public record InfoPeriodMoneyChange(String id, String docDate, String docTime, String docName, String docType, - String clearingHouse, String firmId, String firName, String trdAccId, - String account, String currency, String registryCode, String registryName, - String openBalance, String changeBalance, String addWithdraw, - String closeBalance, String remarks, String addSum, String addTime, - String withdrawSum, String withdrawTime) { - } -} 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 new file mode 100644 index 000000000..c56dbbcda --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/PeriodMoneyChangeReportBuilder.java @@ -0,0 +1,43 @@ +package ru.spcex.clearing.reports.reports.bp; + +import ru.clearing.classes.statics.data.registry.Registry; +import ru.spcex.clearing.reports.reports.PeriodParams; +import ru.spcex.platform.enumeration.ReportType; +import ru.spcex.platform.imdg.api.ImdgProvider; +import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; + +import java.time.Instant; +import java.util.Collection; + +public class PeriodMoneyChangeReportBuilder extends MoneyChangeReportBuilder { + + public PeriodMoneyChangeReportBuilder(ImdgProvider imdgProvider) { + super(imdgProvider); + } + + @Override + protected Collection getRegistryForReport(PeriodParams params) { + ImdgPredicateBuilder pb = registryImdg.predicateBuilder(); + return registryImdg.getCollectionObjectsByPredicate( + pb.and( + 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(Instant.now()) + ); + } + + @Override + protected ReportType getReportType() { + return ReportType.PERIOD_MONEY_CHANGE; + } + +} 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 index 17f406a65..f63e3bfbf 100644 --- 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 @@ -1,18 +1,31 @@ package ru.spcex.clearing.reports.reports.bp; -import ru.spcex.clearing.reports.reports.SessionIdParam; +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.ReportType; import ru.spcex.platform.imdg.api.ImdgProvider; import java.time.Instant; +import java.util.Collection; -public class SummaryLiabilitiesClaimsReportBuilder extends LiabilitiesClaimsReportBuilder { +public class SummaryLiabilitiesClaimsReportBuilder extends LiabilitiesClaimsReportBuilder { public SummaryLiabilitiesClaimsReportBuilder(ImdgProvider imdgProvider) { super(imdgProvider); } @Override - protected String getReportFilename(SessionIdParam params) { + protected Collection getExecutionFondsForReport(EmptyParams params) { + return executionFondImdg.getAllValues(); + } + + @Override + protected Collection getExecutionDepositsForReport(EmptyParams params) { + return executionDepositImdg.getAllValues(); + } + + @Override + protected String getReportFilename(EmptyParams params) { return "summary_money_change.%s".formatted(dateTimeFormatter.format(Instant.now())); } 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 index 802ea25e1..aa14c1055 100644 --- 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 @@ -1,27 +1,31 @@ package ru.spcex.clearing.reports.reports.bp; -import ru.spcex.clearing.reports.reports.PeriodParams; +import ru.clearing.classes.statics.data.registry.Registry; +import ru.spcex.clearing.reports.reports.EmptyParams; import ru.spcex.platform.enumeration.ReportType; import ru.spcex.platform.imdg.api.ImdgProvider; import java.time.Instant; +import java.util.Collection; -public class SummaryMoneyChangeReportBuilder extends MoneyChangeReportBuilder { +public class SummaryMoneyChangeReportBuilder extends MoneyChangeReportBuilder { public SummaryMoneyChangeReportBuilder(ImdgProvider imdgProvider) { super(imdgProvider); } @Override - protected String getReportFilename(PeriodParams params) { - return "summary_money_change.%s-%s.%s".formatted( - dateFormatter.format(params.getStartDate()), - dateFormatter.format(params.getEndDate()), - dateTimeFormatter.format(Instant.now()) - ); + protected Collection getRegistryForReport(EmptyParams param) { + return registryImdg.getAllValues(); + } + + @Override + protected String getReportFilename(EmptyParams params) { + return "summary_money_change.%s".formatted(dateTimeFormatter.format(Instant.now())); } @Override protected ReportType getReportType() { return ReportType.SUMMARY_MONEY_CHANGE; } + } From 4d9185088a9379d02954e05d768a3db1a5d51da0 Mon Sep 17 00:00:00 2001 From: akulikov Date: Mon, 15 May 2023 15:27:13 +0300 Subject: [PATCH 08/32] Period*ReportBuilder --- .../reports/reports/SessionIdListParams.java | 18 ++++++++ .../PeriodLiabilitiesClaimsReportBuilder.java | 46 +++++++++---------- 2 files changed, 39 insertions(+), 25 deletions(-) create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/SessionIdListParams.java 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 new file mode 100644 index 000000000..2b198bf17 --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/SessionIdListParams.java @@ -0,0 +1,18 @@ +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/bp/PeriodLiabilitiesClaimsReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/PeriodLiabilitiesClaimsReportBuilder.java index 65eb2b11d..b73394678 100644 --- 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 @@ -2,27 +2,23 @@ package ru.spcex.clearing.reports.reports.bp; import ru.clearing.classes.statics.data.execution.ExecutionDeposit; import ru.clearing.classes.statics.data.execution.ExecutionFond; -import ru.spcex.clearing.reports.reports.PeriodParams; +import ru.spcex.clearing.reports.reports.SessionIdListParams; import ru.spcex.platform.enumeration.ReportType; import ru.spcex.platform.imdg.api.ImdgProvider; -import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; import java.time.Instant; import java.util.Collection; +import java.util.Collections; -public class PeriodLiabilitiesClaimsReportBuilder extends LiabilitiesClaimsReportBuilder { +public class PeriodLiabilitiesClaimsReportBuilder extends LiabilitiesClaimsReportBuilder { public PeriodLiabilitiesClaimsReportBuilder(ImdgProvider imdgProvider) { super(imdgProvider); } @Override - protected String getReportFilename(PeriodParams params) { - return "period_liabilities_claims.%s-%s.%s".formatted( - dateFormatter.format(params.getStartDate()), - dateFormatter.format(params.getEndDate()), - dateTimeFormatter.format(Instant.now()) - ); + protected String getReportFilename(SessionIdListParams params) { + return "period_liabilities_claims.%s".formatted(dateTimeFormatter.format(Instant.now())); } @Override @@ -31,24 +27,24 @@ public class PeriodLiabilitiesClaimsReportBuilder extends LiabilitiesClaimsRepor } @Override - protected Collection getExecutionFondsForReport(PeriodParams params) { - ImdgPredicateBuilder pb = executionFondImdg.predicateBuilder(); - return executionFondImdg.getCollectionObjectsByPredicate( - pb.and( - pb.greatEqual("clearingDate", params.getStartDate()), - pb.lessEqual("clearingDate", params.getEndDate()) - ) - ); + protected Collection getExecutionFondsForReport(SessionIdListParams params) { + if (params.getSessionIdList() == null || params.getSessionIdList().isEmpty()) return Collections.emptyList(); + StringBuilder sql = new StringBuilder("sessionId in ("); + for (Long sessionId : params.getSessionIdList()) { + sql.append(sessionId).append(","); + } + sql.append(")"); + return executionFondImdg.getCollectionObjectsBySQL(sql.toString()); } @Override - protected Collection getExecutionDepositsForReport(PeriodParams params) { - ImdgPredicateBuilder pb = executionDepositImdg.predicateBuilder(); - return executionDepositImdg.getCollectionObjectsByPredicate( - pb.and( - pb.greatEqual("clearingDate", params.getStartDate()), - pb.lessEqual("clearingDate", params.getEndDate()) - ) - ); + protected Collection getExecutionDepositsForReport(SessionIdListParams params) { + if (params.getSessionIdList() == null || params.getSessionIdList().isEmpty()) return Collections.emptyList(); + StringBuilder sql = new StringBuilder("sessionId in ("); + for (Long sessionId : params.getSessionIdList()) { + sql.append(sessionId).append(","); + } + sql.append(")"); + return executionDepositImdg.getCollectionObjectsBySQL(sql.toString()); } } From b59597bc7bd2496c9a6916bcf05eb106e6277f06 Mon Sep 17 00:00:00 2001 From: akulikov Date: Mon, 15 May 2023 16:20:22 +0300 Subject: [PATCH 09/32] fixes --- .../bp/LiabilitiesClaimsReportBuilder.java | 18 ++++++++++++------ .../PeriodLiabilitiesClaimsReportBuilder.java | 2 ++ .../spcex/platform/enumeration/ReportType.java | 16 ++++++++-------- 3 files changed, 22 insertions(+), 14 deletions(-) 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 index 516f3f9fe..bc60bfb15 100644 --- 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 @@ -10,6 +10,7 @@ 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; @@ -112,7 +113,7 @@ public abstract class LiabilitiesClaimsReportBuilder

extends CSVReportBuilder String clearingTime = dateFormatter.format(execution.getClearingDate()); String trdAccId = registry.getTradingClearingRegistry(); String account = String.valueOf(tradingClearingRegistry.getMoneyAccountId()); - String depoAccount = String.valueOf(tradingClearingRegistry.getDepoAaccountId()); + String depoAccount = String.valueOf(tradingClearingRegistry.getDepoAccountId()); String currency = execution.getSettlementCurrency(); String trId = String.valueOf(execution.getExchangeExecutionId()); String securityId = String.valueOf(execution.getSecurityId()); @@ -138,7 +139,12 @@ public abstract class LiabilitiesClaimsReportBuilder

extends CSVReportBuilder if (execution instanceof ExecutionDeposit executionDeposit) { trExecDate = dateFormatter.format(executionDeposit.getSecondLegSettlementDate()); if (Market.mkrs.equalsByKey(execution.getMarket())) { - execStatus = "Y"; + + 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()); @@ -175,19 +181,19 @@ public abstract class LiabilitiesClaimsReportBuilder

extends CSVReportBuilder String registryCode = currRegistry.getRegistryCode(); if (registryCode.endsWith("T")) { if (registryCode.startsWith("TM")) { - if (tm_tRegistry != null && tm_tRegistry.getUpdatedAt().isAfter(currRegistry.getUpdatedAt())) continue; + if (tm_tRegistry != null && tm_tRegistry.getUpdated().isAfter(currRegistry.getUpdated())) continue; tm_tRegistry = currRegistry; } if (registryCode.startsWith("OM")) { - if (om_tRegistry != null && om_tRegistry.getUpdatedAt().isAfter(currRegistry.getUpdatedAt())) continue; + if (om_tRegistry != null && om_tRegistry.getUpdated().isAfter(currRegistry.getUpdated())) continue; om_tRegistry = currRegistry; } if (registryCode.startsWith("TS")) { - if (ts_tRegistry != null && ts_tRegistry.getUpdatedAt().isAfter(currRegistry.getUpdatedAt())) continue; + if (ts_tRegistry != null && ts_tRegistry.getUpdated().isAfter(currRegistry.getUpdated())) continue; ts_tRegistry = currRegistry; } if (registryCode.startsWith("OS")) { - if (os_tRegistry != null && os_tRegistry.getUpdatedAt().isAfter(currRegistry.getUpdatedAt())) continue; + if (os_tRegistry != null && os_tRegistry.getUpdated().isAfter(currRegistry.getUpdated())) continue; os_tRegistry = currRegistry; } } 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 index b73394678..bdea9b7f9 100644 --- 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 @@ -33,6 +33,7 @@ public class PeriodLiabilitiesClaimsReportBuilder extends LiabilitiesClaimsRepor for (Long sessionId : params.getSessionIdList()) { sql.append(sessionId).append(","); } + sql.setLength(sql.length() - 1); sql.append(")"); return executionFondImdg.getCollectionObjectsBySQL(sql.toString()); } @@ -44,6 +45,7 @@ public class PeriodLiabilitiesClaimsReportBuilder extends LiabilitiesClaimsRepor for (Long sessionId : params.getSessionIdList()) { sql.append(sessionId).append(","); } + sql.setLength(sql.length() - 1); sql.append(")"); return executionDepositImdg.getCollectionObjectsBySQL(sql.toString()); } 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 2b1222a08..349687408 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 @@ -7,14 +7,14 @@ import ru.spcex.platform.utils.enumeration.IEnumKey; * todo сделать для них dictionary */ public enum ReportType 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"), + 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"), ; private final String key; From 0e58782a4c8c260e76a8eb39d5a7cb1c0b1ad2f4 Mon Sep 17 00:00:00 2001 From: akulikov Date: Mon, 15 May 2023 17:09:08 +0300 Subject: [PATCH 10/32] deprecate old reports --- .../reports/reports/AbstractReport.java | 1 + .../clearing/reports/reports/ReportId.java | 2 +- .../reports/ReportWithClearingStatus.java | 1 + .../reports/reports/ReportWithPeriod.java | 1 + .../reports/bt/bt_12_2/ReportPA_B.java | 1 + .../reports/bt/bt_12_2/ReportPA_IV.java | 1 + .../reports/reports/bt/bt_13/ReportDOCIN.java | 1 + .../reports/bt/bt_13/ReportDOCOUT.java | 1 + .../reports/bt/bt_16_5/ReportINACCNT.java | 1 + .../bt/bt_17_1/ReportBR_0420315_P1.java | 1 + .../bt/bt_17_1/ReportBR_0420315_P2.java | 1 + .../reports/bt/bt_17_2/ReportBR_0420317.java | 1 + .../reports/bt/bt_17_3/ReportBR_0420318.java | 1 + .../bt/bt_17_4/ReportBR_0420314_P1.java | 1 + .../bt/bt_17_4/ReportBR_0420314_P2.java | 1 + .../bt/bt_17_5/ReportBR_0420312_P1.java | 1 + .../bt/bt_17_5/ReportBR_0420312_P10.java | 1 + .../bt/bt_17_5/ReportBR_0420312_P2.java | 1 + .../bt/bt_17_5/ReportBR_0420312_P3.java | 1 + .../bt/bt_17_5/ReportBR_0420312_P4.java | 1 + .../bt/bt_17_5/ReportBR_0420312_P5.java | 1 + .../bt/bt_17_5/ReportBR_0420312_P6.java | 1 + .../bt/bt_17_5/ReportBR_0420312_P7.java | 1 + .../bt/bt_17_5/ReportBR_0420312_P8.java | 1 + .../bt/bt_17_5/ReportBR_0420312_P9.java | 1 + .../services/builders/FileReportBuilder.java | 1 + .../services/builders/XMLReportBuilder.java | 1 + .../bt/bt_12_2/ReportPA_B_Collector.java | 1 + .../bt/bt_12_2/ReportPA_IV_Collector.java | 1 + .../bt/bt_13/ReportDOCIN_Collector.java | 1 + .../bt/bt_13/ReportDOCOUT_Collector.java | 1 + .../bt/bt_16_5/ReportINACCNT_Collector.java | 1 + .../ReportBR_0420315_P1_Collector.java | 1 + .../ReportBR_0420315_P2_collector.java | 1 + .../bt_17_2/ReportBR_0420317_Collector.java | 1 + .../bt_17_3/ReportBR_0420318_Collector.java | 1 + .../ReportBR_0420314_P1_Collector.java | 1 + .../ReportBR_0420314_P2_Collector.java | 1 + .../ReportBR_0420312_P10_Collector.java | 1 + .../ReportBR_0420312_P1_Collector.java | 1 + .../ReportBR_0420312_P2_Collector.java | 1 + .../ReportBR_0420312_P3_Collector.java | 1 + .../ReportBR_0420312_P4_Collector.java | 1 + .../ReportBR_0420312_P5_Collector.java | 1 + .../ReportBR_0420312_P6_Collector.java | 1 + .../ReportBR_0420312_P7_Collector.java | 1 + .../ReportBR_0420312_P8_Collector.java | 1 + .../ReportBR_0420312_P9_Collector.java | 1 + .../xml_test/ChildElementForWrite.java | 80 --------- .../xml_test/ElementWithAttributeOnly.java | 29 ---- .../xml_test/FormattedLocalDateConverter.java | 37 ----- .../xml_test/FormattedLocalTimeConverter.java | 37 ----- .../reports/xml_test/RootElementForWrite.java | 155 ------------------ 53 files changed, 48 insertions(+), 339 deletions(-) delete mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/xml_test/ChildElementForWrite.java delete mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/xml_test/ElementWithAttributeOnly.java delete mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/xml_test/FormattedLocalDateConverter.java delete mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/xml_test/FormattedLocalTimeConverter.java delete mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/xml_test/RootElementForWrite.java diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/AbstractReport.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/AbstractReport.java index 27c7072af..c8b56a13e 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/AbstractReport.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/AbstractReport.java @@ -10,6 +10,7 @@ import java.time.format.DateTimeFormatter; /** * Общая шапка (атрибуты) для всех отчетов */ +@Deprecated public abstract class AbstractReport { protected static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("dd.MM.yyyy"); protected static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("dd.MM.yyyy'T'HH:mm:ss"); diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ReportId.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ReportId.java index 00b21d565..1d66b3ebc 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ReportId.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ReportId.java @@ -5,7 +5,7 @@ import ru.spcex.platform.utils.enumeration.IEnumKey; /** * Идентификаторы отчётов */ -// todo create new ID +@Deprecated public enum ReportId implements IEnumKey { PA_B("REPPA.B"), PA_IV("REPPA.IV"), diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ReportWithClearingStatus.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ReportWithClearingStatus.java index e86e5007c..051362750 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ReportWithClearingStatus.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ReportWithClearingStatus.java @@ -5,6 +5,7 @@ import com.thoughtworks.xstream.annotations.XStreamAsAttribute; import java.time.LocalDate; +@Deprecated public abstract class ReportWithClearingStatus extends ReportWithPeriod { @XStreamAsAttribute @XStreamAlias("clearingStatus") diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ReportWithPeriod.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ReportWithPeriod.java index 2895b8b4b..f84070ab7 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ReportWithPeriod.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ReportWithPeriod.java @@ -10,6 +10,7 @@ import java.time.LocalDate; /** * Шапка для отчётов, содержащих startDate и endDate */ +@Deprecated public abstract class ReportWithPeriod extends AbstractReport { @XStreamAsAttribute diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_12_2/ReportPA_B.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_12_2/ReportPA_B.java index b4e020fee..d638fbf44 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_12_2/ReportPA_B.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_12_2/ReportPA_B.java @@ -12,6 +12,7 @@ import java.util.ArrayList; import java.util.List; @XStreamAlias("netPositionBank") +@Deprecated public class ReportPA_B extends ReportWithPeriod { @XStreamAsAttribute @XStreamAlias("clearingMemberCategory") diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_12_2/ReportPA_IV.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_12_2/ReportPA_IV.java index 781602111..a989f5a03 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_12_2/ReportPA_IV.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_12_2/ReportPA_IV.java @@ -12,6 +12,7 @@ import java.util.ArrayList; import java.util.List; @XStreamAlias("netPositionInitiator") +@Deprecated public class ReportPA_IV extends ReportWithPeriod { @XStreamAsAttribute @XStreamAlias("clearingMemberCategory") diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_13/ReportDOCIN.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_13/ReportDOCIN.java index 5205c1155..21034018e 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_13/ReportDOCIN.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_13/ReportDOCIN.java @@ -15,6 +15,7 @@ import java.util.ArrayList; import java.util.List; @XStreamAlias("incomingDocuments") +@Deprecated public class ReportDOCIN extends AbstractReport { /** * Дата в формате: dd.MM.yyyy diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_13/ReportDOCOUT.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_13/ReportDOCOUT.java index dae9330e3..587f78796 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_13/ReportDOCOUT.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_13/ReportDOCOUT.java @@ -15,6 +15,7 @@ import java.util.ArrayList; import java.util.List; @XStreamAlias("incomingDocuments") +@Deprecated public class ReportDOCOUT extends AbstractReport { /** * Дата в формате: dd.MM.yyyy diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_16_5/ReportINACCNT.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_16_5/ReportINACCNT.java index fe67d73f8..f58b05e20 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_16_5/ReportINACCNT.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_16_5/ReportINACCNT.java @@ -15,6 +15,7 @@ import java.util.ArrayList; import java.util.List; @XStreamAlias("accountBalanceInfo") +@Deprecated public class ReportINACCNT extends AbstractReport { @XStreamAsAttribute @XStreamAlias("clearingMemberCategory") diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_1/ReportBR_0420315_P1.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_1/ReportBR_0420315_P1.java index ec2c5bb72..bd317a145 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_1/ReportBR_0420315_P1.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_1/ReportBR_0420315_P1.java @@ -14,6 +14,7 @@ import java.util.ArrayList; import java.util.List; @XStreamAlias("clearedLiabilities") +@Deprecated public class ReportBR_0420315_P1 extends ReportWithClearingStatus { @XStreamAsAttribute @XStreamAlias("destination") diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_1/ReportBR_0420315_P2.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_1/ReportBR_0420315_P2.java index 33f54524d..dd013a1ff 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_1/ReportBR_0420315_P2.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_1/ReportBR_0420315_P2.java @@ -10,6 +10,7 @@ import java.time.LocalDate; import java.time.LocalDateTime; @XStreamAlias("clearedLiabilitiesTotal") +@Deprecated public class ReportBR_0420315_P2 extends ReportWithPeriod { @XStreamAlias("rows") private Info_0420315_P2 rows; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_2/ReportBR_0420317.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_2/ReportBR_0420317.java index fd6fe1cfb..167b889de 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_2/ReportBR_0420317.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_2/ReportBR_0420317.java @@ -12,6 +12,7 @@ import java.util.ArrayList; import java.util.List; @XStreamAlias("clearingServiceStatus") +@Deprecated public class ReportBR_0420317 extends ReportWithPeriod { @XStreamAsAttribute @XStreamAlias("destination") diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_3/ReportBR_0420318.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_3/ReportBR_0420318.java index 63f5b88e0..0a4d1529c 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_3/ReportBR_0420318.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_3/ReportBR_0420318.java @@ -13,6 +13,7 @@ import java.util.ArrayList; import java.util.List; @XStreamAlias("unfundedLiabilities") +@Deprecated public class ReportBR_0420318 extends ReportWithClearingStatus { @XStreamAsAttribute @XStreamAlias("destination") diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_4/ReportBR_0420314_P1.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_4/ReportBR_0420314_P1.java index e50ceef0d..55fede8b5 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_4/ReportBR_0420314_P1.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_4/ReportBR_0420314_P1.java @@ -12,6 +12,7 @@ import java.util.ArrayList; import java.util.List; @XStreamAlias("accountTransactionLiabilities") +@Deprecated public class ReportBR_0420314_P1 extends ReportWithClearingStatus { @XStreamAsAttribute @XStreamAlias("destination") diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_4/ReportBR_0420314_P2.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_4/ReportBR_0420314_P2.java index 368cd90ed..1feed5112 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_4/ReportBR_0420314_P2.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_4/ReportBR_0420314_P2.java @@ -11,6 +11,7 @@ import java.util.ArrayList; import java.util.List; @XStreamAlias("accountTransactionTurnover") +@Deprecated public class ReportBR_0420314_P2 extends ReportWithPeriod { @XStreamAsAttribute @XStreamAlias("destination") diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P1.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P1.java index b93fd7cce..3e6492797 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P1.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P1.java @@ -11,6 +11,7 @@ import java.util.ArrayList; import java.util.List; @XStreamAlias("clearingCoverage1") +@Deprecated public class ReportBR_0420312_P1 extends ReportWithPeriod { @XStreamAsAttribute @XStreamAlias("destination") diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P10.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P10.java index c2be21c02..32ad2e543 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P10.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P10.java @@ -12,6 +12,7 @@ import java.util.ArrayList; import java.util.List; @XStreamAlias("clearingCoverage10") +@Deprecated public class ReportBR_0420312_P10 extends ReportWithPeriod { @XStreamAsAttribute @XStreamAlias("destination") diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P2.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P2.java index dea3c98f7..6e0043854 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P2.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P2.java @@ -12,6 +12,7 @@ import java.util.ArrayList; import java.util.List; @XStreamAlias("clearingCoverage2") +@Deprecated public class ReportBR_0420312_P2 extends ReportWithPeriod { @XStreamAsAttribute @XStreamAlias("destination") diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P3.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P3.java index 1b856c186..79ec3df44 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P3.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P3.java @@ -12,6 +12,7 @@ import java.util.ArrayList; import java.util.List; @XStreamAlias("clearingCoverage3") +@Deprecated public class ReportBR_0420312_P3 extends ReportWithPeriod { @XStreamAsAttribute @XStreamAlias("destination") diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P4.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P4.java index 45386395e..e8350d3b7 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P4.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P4.java @@ -12,6 +12,7 @@ import java.util.ArrayList; import java.util.List; @XStreamAlias("clearingCoverage4") +@Deprecated public class ReportBR_0420312_P4 extends ReportWithPeriod { @XStreamAsAttribute @XStreamAlias("destination") diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P5.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P5.java index f152b141f..5579eaf22 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P5.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P5.java @@ -12,6 +12,7 @@ import java.util.ArrayList; import java.util.List; @XStreamAlias("clearingCoverage5") +@Deprecated public class ReportBR_0420312_P5 extends ReportWithPeriod { @XStreamAsAttribute diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P6.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P6.java index d473dc3f6..7f8220da6 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P6.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P6.java @@ -12,6 +12,7 @@ import java.util.ArrayList; import java.util.List; @XStreamAlias("clearingCoverage6") +@Deprecated public class ReportBR_0420312_P6 extends ReportWithPeriod { @XStreamAsAttribute @XStreamAlias("destination") diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P7.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P7.java index f6cedeb16..fa809a07e 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P7.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P7.java @@ -12,6 +12,7 @@ import java.util.ArrayList; import java.util.List; @XStreamAlias("clearingCoverage7") +@Deprecated public class ReportBR_0420312_P7 extends ReportWithPeriod { @XStreamAsAttribute @XStreamAlias("destination") diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P8.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P8.java index 97680fce5..51d6c3345 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P8.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P8.java @@ -12,6 +12,7 @@ import java.util.ArrayList; import java.util.List; @XStreamAlias("clearingCoverage8") +@Deprecated public class ReportBR_0420312_P8 extends ReportWithPeriod { @XStreamAsAttribute @XStreamAlias("destination") diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P9.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P9.java index e8358e88c..24e899539 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P9.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_17_5/ReportBR_0420312_P9.java @@ -12,6 +12,7 @@ import java.util.ArrayList; import java.util.List; @XStreamAlias("clearingCoverage9") +@Deprecated public class ReportBR_0420312_P9 extends ReportWithPeriod { @XStreamAsAttribute @XStreamAlias("destination") diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/builders/FileReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/builders/FileReportBuilder.java index dcde34308..04e9c6e79 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/builders/FileReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/builders/FileReportBuilder.java @@ -5,6 +5,7 @@ import ru.spcex.clearing.reports.reports.AbstractReport; import java.io.File; import java.io.IOException; +@Deprecated public abstract class FileReportBuilder { protected final Class reportClass; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/builders/XMLReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/builders/XMLReportBuilder.java index 2dd5e8546..baafed9b4 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/builders/XMLReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/builders/XMLReportBuilder.java @@ -12,6 +12,7 @@ import java.io.FileOutputStream; import java.io.IOException; import java.time.LocalDateTime; +@Deprecated public class XMLReportBuilder extends FileReportBuilder { private final Logger log = LoggerFactory.getLogger(getClass()); protected final XStream xStream; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_12_2/ReportPA_B_Collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_12_2/ReportPA_B_Collector.java index 5694273ad..89d132aaf 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_12_2/ReportPA_B_Collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_12_2/ReportPA_B_Collector.java @@ -20,6 +20,7 @@ import java.util.Set; import java.util.stream.Collectors; @Component +@Deprecated public class ReportPA_B_Collector extends ReportWithPeriodCollector { private final Imdg liabilitiesClaimsAssetsImdg; private final Imdg clearingMemberCategoryImdg; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_12_2/ReportPA_IV_Collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_12_2/ReportPA_IV_Collector.java index 3a09f9491..b14a4978e 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_12_2/ReportPA_IV_Collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_12_2/ReportPA_IV_Collector.java @@ -20,6 +20,7 @@ import java.util.Set; import java.util.stream.Collectors; @Component +@Deprecated public class ReportPA_IV_Collector extends ReportWithPeriodCollector { private final Imdg liabilitiesClaimsAssetsImdg; private final Imdg clearingStatusDictionaryImdg; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_13/ReportDOCIN_Collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_13/ReportDOCIN_Collector.java index 2766dac66..4376a8adf 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_13/ReportDOCIN_Collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_13/ReportDOCIN_Collector.java @@ -17,6 +17,7 @@ import java.time.LocalTime; import java.util.Collection; @Component +@Deprecated public class ReportDOCIN_Collector extends SimpleReportCollector { protected final Logger log = LoggerFactory.getLogger(getClass()); diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_13/ReportDOCOUT_Collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_13/ReportDOCOUT_Collector.java index 539b4931e..3e613a82d 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_13/ReportDOCOUT_Collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_13/ReportDOCOUT_Collector.java @@ -17,6 +17,7 @@ import java.time.LocalTime; import java.util.Collection; @Component +@Deprecated public class ReportDOCOUT_Collector extends SimpleReportCollector { protected final Logger log = LoggerFactory.getLogger(getClass()); diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_16_5/ReportINACCNT_Collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_16_5/ReportINACCNT_Collector.java index 8e7297bf8..ef8f26a24 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_16_5/ReportINACCNT_Collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_16_5/ReportINACCNT_Collector.java @@ -19,6 +19,7 @@ import java.util.Set; import java.util.stream.Collectors; @Component +@Deprecated public class ReportINACCNT_Collector extends ReportForClearingCodeCollector { private final Imdg accountBalanceImdg; private final Imdg companyImdg; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_1/ReportBR_0420315_P1_Collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_1/ReportBR_0420315_P1_Collector.java index 9a2cecf52..6acb0fb0b 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_1/ReportBR_0420315_P1_Collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_1/ReportBR_0420315_P1_Collector.java @@ -23,6 +23,7 @@ import java.time.LocalDate; import java.util.*; @Component +@Deprecated public class ReportBR_0420315_P1_Collector extends ReportWithPeriodCollector { protected static final List ALLOW_CLEARING_MEMBER_CATEGORY = Arrays.asList(ClearingCategory.I.getKey(), ClearingCategory.V.getKey()); diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_1/ReportBR_0420315_P2_collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_1/ReportBR_0420315_P2_collector.java index eb199191b..9085d5c76 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_1/ReportBR_0420315_P2_collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_1/ReportBR_0420315_P2_collector.java @@ -16,6 +16,7 @@ import java.util.Collection; import java.util.HashSet; @Component +@Deprecated public class ReportBR_0420315_P2_collector extends ReportWithPeriodCollector { private Imdg liabilitiesClaimsAssetsImdg; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_2/ReportBR_0420317_Collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_2/ReportBR_0420317_Collector.java index 320a10668..383fe89f4 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_2/ReportBR_0420317_Collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_2/ReportBR_0420317_Collector.java @@ -20,6 +20,7 @@ import java.util.Collection; import java.util.Map; @Component +@Deprecated public class ReportBR_0420317_Collector extends ReportWithPeriodCollector { private Imdg companyImdg; private Imdg relationImdg; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_3/ReportBR_0420318_Collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_3/ReportBR_0420318_Collector.java index b6046bb5b..2ef561446 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_3/ReportBR_0420318_Collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_3/ReportBR_0420318_Collector.java @@ -23,6 +23,7 @@ import java.util.List; import java.util.Map; @Component +@Deprecated public class ReportBR_0420318_Collector extends ReportWithPeriodCollector { private Imdg liabilitiesClaimsAssetsImdg; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_4/ReportBR_0420314_P1_Collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_4/ReportBR_0420314_P1_Collector.java index b7e5c0ab2..bf4022354 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_4/ReportBR_0420314_P1_Collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_4/ReportBR_0420314_P1_Collector.java @@ -24,6 +24,7 @@ import java.util.Map; * accountTransactionLiabilities */ @Component +@Deprecated public class ReportBR_0420314_P1_Collector extends ReportWithPeriodCollector { private Imdg companyImdg; private Imdg companySymbolsImdg; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_4/ReportBR_0420314_P2_Collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_4/ReportBR_0420314_P2_Collector.java index c772ad25d..14ce6e0bf 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_4/ReportBR_0420314_P2_Collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_4/ReportBR_0420314_P2_Collector.java @@ -30,6 +30,7 @@ import java.util.Objects; * accountTransactionLiabilities */ @Component +@Deprecated public class ReportBR_0420314_P2_Collector extends ReportWithPeriodCollector { private Imdg companyImdg; private Imdg paymentInstructionImdg; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P10_Collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P10_Collector.java index 1f65b2cef..c2c39feb3 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P10_Collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P10_Collector.java @@ -15,6 +15,7 @@ import java.util.Collection; import java.util.Objects; @Component +@Deprecated public class ReportBR_0420312_P10_Collector extends ReportWithPeriodCollector { private Imdg liabilitiesClaimsAssetsImdg; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P1_Collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P1_Collector.java index 686abd725..a71ff3df7 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P1_Collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P1_Collector.java @@ -20,6 +20,7 @@ import java.util.List; import java.util.Map; @Component +@Deprecated public class ReportBR_0420312_P1_Collector extends ReportWithPeriodCollector { private final Imdg companyImdg; private final Imdg companySymbolsImdg; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P2_Collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P2_Collector.java index a8495f52b..dbae68ea5 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P2_Collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P2_Collector.java @@ -18,6 +18,7 @@ import java.util.Map; import java.util.Objects; @Component +@Deprecated public class ReportBR_0420312_P2_Collector extends ReportWithPeriodCollector { private Imdg liabilitiesClaimsAssetsImdg; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P3_Collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P3_Collector.java index 0cb625184..64a0256c5 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P3_Collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P3_Collector.java @@ -18,6 +18,7 @@ import java.util.Map; import java.util.Objects; @Component +@Deprecated public class ReportBR_0420312_P3_Collector extends ReportWithPeriodCollector { private Imdg liabilitiesClaimsAssetsImdg; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P4_Collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P4_Collector.java index b3bed29c7..9a16262ef 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P4_Collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P4_Collector.java @@ -15,6 +15,7 @@ import java.util.Collection; import java.util.Objects; @Component +@Deprecated public class ReportBR_0420312_P4_Collector extends ReportWithPeriodCollector { private Imdg liabilitiesClaimsAssetsImdg; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P5_Collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P5_Collector.java index e65107aaf..5d247cdce 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P5_Collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P5_Collector.java @@ -15,6 +15,7 @@ import java.util.Collection; import java.util.Objects; @Component +@Deprecated public class ReportBR_0420312_P5_Collector extends ReportWithPeriodCollector { private Imdg liabilitiesClaimsAssetsImdg; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P6_Collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P6_Collector.java index 23522d0d2..0a38c56d8 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P6_Collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P6_Collector.java @@ -15,6 +15,7 @@ import java.util.Collection; import java.util.Objects; @Component +@Deprecated public class ReportBR_0420312_P6_Collector extends ReportWithPeriodCollector { private Imdg liabilitiesClaimsAssetsImdg; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P7_Collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P7_Collector.java index ce5d112d0..b4bea17d7 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P7_Collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P7_Collector.java @@ -15,6 +15,7 @@ import java.util.Collection; import java.util.Objects; @Component +@Deprecated public class ReportBR_0420312_P7_Collector extends ReportWithPeriodCollector { private Imdg liabilitiesClaimsAssetsImdg; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P8_Collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P8_Collector.java index d04fa1156..82fd2e196 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P8_Collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P8_Collector.java @@ -21,6 +21,7 @@ import java.util.List; import java.util.Map; @Component +@Deprecated public class ReportBR_0420312_P8_Collector extends ReportWithPeriodCollector { private Imdg companyImdg; private Imdg companySymbolsImdg; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P9_Collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P9_Collector.java index 9138693bc..a9dcb279d 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P9_Collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/bt/bt_17_5/ReportBR_0420312_P9_Collector.java @@ -20,6 +20,7 @@ import java.util.Map; import java.util.Objects; @Component +@Deprecated public class ReportBR_0420312_P9_Collector extends ReportWithPeriodCollector { private Imdg companyImdg; private Imdg liabilitiesClaimsAssetsImdg; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/xml_test/ChildElementForWrite.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/xml_test/ChildElementForWrite.java deleted file mode 100644 index 4a6b5c215..000000000 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/xml_test/ChildElementForWrite.java +++ /dev/null @@ -1,80 +0,0 @@ -package ru.spcex.clearing.reports.xml_test; - - -import com.thoughtworks.xstream.annotations.XStreamAlias; -import com.thoughtworks.xstream.annotations.XStreamAsAttribute; -import com.thoughtworks.xstream.annotations.XStreamConverter; -import com.thoughtworks.xstream.annotations.XStreamOmitField; -import com.thoughtworks.xstream.converters.basic.BooleanConverter; -import com.thoughtworks.xstream.converters.basic.DateConverter; - -import java.util.Date; - -// without aliases -public class ChildElementForWrite { - @XStreamAlias("childStr") // alias for field name - private String testChildString = "testChildStr"; - - @XStreamAsAttribute - private Integer testAttributeInt = Integer.MIN_VALUE; - - // при использовании настраевомого встроенного конвертора, ему необходимо передать параметры в конструктор - // делается это посредством параметров strings, booleans, nulls. - // т.е. такая запись эквивалентна: - // new DateConverter("MM-yyyy-dd", null) - @XStreamConverter(value = DateConverter.class, strings = {"MM-yyyy-dd"}, nulls = {String[].class}) - private Date testDate = new Date(); - - @XStreamAsAttribute - @XStreamAlias("isBoolean") - @XStreamConverter(value = BooleanConverter.class, booleans = {true}, strings = {"yes", "no"}) - private Boolean testYesAttributeBool = Boolean.TRUE; - - private Integer testChildInt = Integer.MAX_VALUE; - - @XStreamOmitField - private String testIgnoredString = "testIgnore"; - - - - public String getTestChildString() { - return testChildString; - } - - public void setTestChildString(String testChildString) { - this.testChildString = testChildString; - } - - public Integer getTestAttributeInt() { - return testAttributeInt; - } - - public void setTestAttributeInt(Integer testAttributeInt) { - this.testAttributeInt = testAttributeInt; - } - - public Integer getTestChildInt() { - return testChildInt; - } - - public void setTestChildInt(Integer testChildInt) { - this.testChildInt = testChildInt; - } - - public String getTestIgnoredString() { - return testIgnoredString; - } - - public void setTestIgnoredString(String testIgnoredString) { - this.testIgnoredString = testIgnoredString; - } - - public Boolean getTestYesAttributeBool() { - return testYesAttributeBool; - } - - public void setTestYesAttributeBool(Boolean testYesAttributeBool) { - this.testYesAttributeBool = testYesAttributeBool; - } - -} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/xml_test/ElementWithAttributeOnly.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/xml_test/ElementWithAttributeOnly.java deleted file mode 100644 index aa5d185ed..000000000 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/xml_test/ElementWithAttributeOnly.java +++ /dev/null @@ -1,29 +0,0 @@ -package ru.spcex.clearing.reports.xml_test; - -import com.thoughtworks.xstream.annotations.XStreamAlias; -import com.thoughtworks.xstream.annotations.XStreamAsAttribute; - -@XStreamAlias("withAttrsOnly") -public class ElementWithAttributeOnly { - @XStreamAsAttribute - private String attrStr = "attrStr"; - - @XStreamAsAttribute - private Long attrLong = Long.MIN_VALUE; - - public String getAttrStr() { - return attrStr; - } - - public void setAttrStr(String attrStr) { - this.attrStr = attrStr; - } - - public Long getAttrLong() { - return attrLong; - } - - public void setAttrLong(Long attrLong) { - this.attrLong = attrLong; - } -} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/xml_test/FormattedLocalDateConverter.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/xml_test/FormattedLocalDateConverter.java deleted file mode 100644 index ff4762875..000000000 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/xml_test/FormattedLocalDateConverter.java +++ /dev/null @@ -1,37 +0,0 @@ -package ru.spcex.clearing.reports.xml_test; - -import com.thoughtworks.xstream.converters.basic.AbstractSingleValueConverter; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; -import java.util.Objects; - -public class FormattedLocalDateConverter extends AbstractSingleValueConverter { - private final String DEFAULT_PATTERN = "dd.MM.yyyy"; - private final DateTimeFormatter formatter; - - public FormattedLocalDateConverter() { - formatter = DateTimeFormatter.ofPattern(DEFAULT_PATTERN); - } - - public FormattedLocalDateConverter(String pattern) { - formatter = DateTimeFormatter.ofPattern(Objects.requireNonNullElse(pattern, DEFAULT_PATTERN)); - } - - @Override - public boolean canConvert(Class type) { - return LocalDate.class.isAssignableFrom(type); - } - - @Override - public Object fromString(String str) { - // not implemented (not used) - return null; - } - - @Override - public String toString(Object obj) { - LocalDate date = (LocalDate) obj; - return date != null ? formatter.format(date) : ""; - } -} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/xml_test/FormattedLocalTimeConverter.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/xml_test/FormattedLocalTimeConverter.java deleted file mode 100644 index 0bcb2a347..000000000 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/xml_test/FormattedLocalTimeConverter.java +++ /dev/null @@ -1,37 +0,0 @@ -package ru.spcex.clearing.reports.xml_test; - -import com.thoughtworks.xstream.converters.basic.AbstractSingleValueConverter; - -import java.time.LocalTime; -import java.time.format.DateTimeFormatter; -import java.util.Objects; - -public class FormattedLocalTimeConverter extends AbstractSingleValueConverter { - private final String DEFAULT_PATTERN = "HH:mm:ss"; - private final DateTimeFormatter formatter; - - public FormattedLocalTimeConverter() { - formatter = DateTimeFormatter.ofPattern(DEFAULT_PATTERN); - } - - public FormattedLocalTimeConverter(String pattern) { - formatter = DateTimeFormatter.ofPattern(Objects.requireNonNullElse(pattern, DEFAULT_PATTERN)); - } - - @Override - public boolean canConvert(Class type) { - return LocalTime.class.isAssignableFrom(type); - } - - @Override - public Object fromString(String str) { - // not implemented (not used) - return null; - } - - @Override - public String toString(Object obj) { - LocalTime date = (LocalTime) obj; - return date != null ? formatter.format(date) : ""; - } -} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/xml_test/RootElementForWrite.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/xml_test/RootElementForWrite.java deleted file mode 100644 index e10dd6ddf..000000000 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/xml_test/RootElementForWrite.java +++ /dev/null @@ -1,155 +0,0 @@ -package ru.spcex.clearing.reports.xml_test; - -import com.thoughtworks.xstream.annotations.XStreamAlias; -import com.thoughtworks.xstream.annotations.XStreamConverter; -import com.thoughtworks.xstream.annotations.XStreamImplicit; - -import java.math.BigDecimal; -import java.time.Instant; -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.OffsetDateTime; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -@XStreamAlias("root") // alias for classname -public class RootElementForWrite { - - @XStreamAlias("string") // alias for field - private String testString = "testString"; - - private BigDecimal testBigDecimal = new BigDecimal("666.666"); - - private Double testDouble = Double.MAX_VALUE; - - private Long testLong = Long.MIN_VALUE; - - private Boolean testBoolean = Boolean.FALSE; - - private LocalDate testLocalDateDefault = LocalDate.now(); - - @XStreamConverter(FormattedLocalDateConverter.class) - private LocalDate testLocalDateCustom = LocalDate.now(); - - private LocalDateTime testLocalDateTime = LocalDateTime.now(); - - private OffsetDateTime testOffsetDateTime = OffsetDateTime.now(); - - private Instant testInstant = Instant.now(); - - @XStreamAlias("namedList") - private List testList = new ArrayList<>(); - - @XStreamImplicit - private List testListTwo = Arrays.asList(new ChildElementForWrite(), new ChildElementForWrite()); - - // can marshal without getter/setter - private ElementWithAttributeOnly elementWithAttributeOnly = new ElementWithAttributeOnly(); - - public String getTestString() { - return testString; - } - - public void setTestString(String testString) { - this.testString = testString; - } - - public BigDecimal getTestBigDecimal() { - return testBigDecimal; - } - - public void setTestBigDecimal(BigDecimal testBigDecimal) { - this.testBigDecimal = testBigDecimal; - } - - public Double getTestDouble() { - return testDouble; - } - - public void setTestDouble(Double testDouble) { - this.testDouble = testDouble; - } - - public Long getTestLong() { - return testLong; - } - - public void setTestLong(Long testLong) { - this.testLong = testLong; - } - - public Boolean getTestBoolean() { - return testBoolean; - } - - public void setTestBoolean(Boolean testBoolean) { - this.testBoolean = testBoolean; - } - - public LocalDate getTestLocalDate() { - return testLocalDateCustom; - } - - public void setTestLocalDate(LocalDate testLocalDate) { - this.testLocalDateCustom = testLocalDate; - } - - public LocalDateTime getTestLocalDateTime() { - return testLocalDateTime; - } - - public void setTestLocalDateTime(LocalDateTime testLocalDateTime) { - this.testLocalDateTime = testLocalDateTime; - } - - public OffsetDateTime getTestOffsetDateTime() { - return testOffsetDateTime; - } - - public void setTestOffsetDateTime(OffsetDateTime testOffsetDateTime) { - this.testOffsetDateTime = testOffsetDateTime; - } - - public Instant getTestInstant() { - return testInstant; - } - - public void setTestInstant(Instant testInstant) { - this.testInstant = testInstant; - } - - public List getTestList() { - return testList; - } - - public void setTestList(List testList) { - this.testList = testList; - } - - public List getTestListTwo() { - return testListTwo; - } - - public void setTestListTwo(List testListTwo) { - this.testListTwo = testListTwo; - } - - public LocalDate getTestLocalDateDefault() { - return testLocalDateDefault; - } - - public void setTestLocalDateDefault(LocalDate testLocalDateDefault) { - this.testLocalDateDefault = testLocalDateDefault; - } - - public LocalDate getTestLocalDateCustom() { - return testLocalDateCustom; - } - - public void setTestLocalDateCustom(LocalDate testLocalDateCustom) { - this.testLocalDateCustom = testLocalDateCustom; - } - -} - From a2873620a38bce18b8e8c6a16a92b0e4cd27c589 Mon Sep 17 00:00:00 2001 From: akulikov Date: Mon, 15 May 2023 17:15:02 +0300 Subject: [PATCH 11/32] report requests --- .../config/validation/ValidationConfig.java | 26 +++++------ .../reports/services/ReportService.java | 44 +++++++++++++------ .../platform/messaging/domain/Consts.java | 6 ++- .../reports/ReportRequestFromRegistry.java | 7 --- ...uest.java => ReportRequestWithPeriod.java} | 2 +- ...n.java => ReportRequestWithSessionId.java} | 4 +- .../ReportRequestWithSessionIdList.java | 24 ++++++++++ 7 files changed, 74 insertions(+), 39 deletions(-) delete mode 100644 platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestFromRegistry.java rename platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/{ReportWithPeriodRequest.java => ReportRequestWithPeriod.java} (95%) rename platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/{ReportRequestFromExecution.java => ReportRequestWithSessionId.java} (71%) create mode 100644 platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestWithSessionIdList.java 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 c38638049..99cb5f87b 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 @@ -5,8 +5,8 @@ import org.springframework.context.annotation.Bean; 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.ReportRequestFromExecution; -import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequestFromRegistry; +import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequestWithSessionId; import ru.spcex.clearing.reports.errors.ReportError; import ru.spcex.clearing.validation.common.ValidationHelper; import ru.spcex.clearing.validation.common.rules.EnumPresentRule; @@ -45,19 +45,19 @@ public class ValidationConfig { } @Bean("reportRequestFromExecutionValidator") - public Function reportRequestFromExecutionValidator( + public Function reportRequestFromExecutionValidator( Map> imdgForValidation ) { - return reportRequestFromExecution -> { - ImdgValidationContext context = new ImdgValidationContext<>(); - context.setValidatedObject(reportRequestFromExecution); + return reportRequestWithSessionId -> { + ImdgValidationContext context = new ImdgValidationContext<>(); + context.setValidatedObject(reportRequestWithSessionId); Consumer addImdg = (s) -> context.addImdg(s, imdgForValidation.get(s)); // todo add dictionary for check reportId return new ValidatorImpl<>(context, EnumPresentRule.instance("reportId", - ReportRequestFromExecution::getReportId, + ReportRequestWithSessionId::getReportId, new ReportType[]{ ReportType.OPERATIONAL_LIABILITIES_CLAIMS, ReportType.SUMMARY_LIABILITIES_CLAIMS, @@ -68,26 +68,26 @@ public class ValidationConfig { ReportError.WrongFieldValue, ReportError.RequiredFieldEmpty), FieldRequiredRule.instance("sessionId", - ReportRequestFromExecution::getSessionId, + ReportRequestWithSessionId::getSessionId, ReportError.RequiredFieldEmpty) ); }; } @Bean("reportRequestFromRegistryValidator") - public Function reportRequestFromRegistryValidator( + public Function reportRequestFromRegistryValidator( Map> imdgForValidation ) { - return reportRequestFromRegistry -> { - ImdgValidationContext context = new ImdgValidationContext<>(); - context.setValidatedObject(reportRequestFromRegistry); + return reportRequest -> { + ImdgValidationContext context = new ImdgValidationContext<>(); + context.setValidatedObject(reportRequest); Consumer addImdg = (s) -> context.addImdg(s, imdgForValidation.get(s)); // todo add dictionary for check reportId return new ValidatorImpl<>(context, EnumPresentRule.instance("reportId", - ReportRequestFromRegistry::getReportId, + reportRequest::getReportId, new ReportType[]{ ReportType.OPERATIONAL_MONEY_CHANGE, ReportType.SUMMARY_MONEY_CHANGE, 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 4665d9d52..9e9c041f3 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 @@ -7,8 +7,10 @@ import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; import ru.spcex.clearing.platform.messaging.domain.BaseRequest; import ru.spcex.clearing.platform.messaging.domain.Consts; -import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequestFromExecution; -import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequestFromRegistry; +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.service.QueueConsumer; import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate; import ru.spcex.clearing.util.security.UserRoleVerification; @@ -25,8 +27,8 @@ public class ReportService extends QueueConsumer implements InitializingBean { private final IMessageResolver messageResolver; private final UserRoleVerification userRoleVerification; private final ValidationHelper validationHelper; - private final Function reportRequestFromExecutionValidator; - private final Function reportRequestFromRegistryValidator; + private final Function reportRequestFromExecutionValidator; + private final Function reportRequestFromRegistryValidator; public ReportService(Consumer kafkaQueue, Producer kafkaResponseQueue, @@ -35,9 +37,9 @@ public class ReportService extends QueueConsumer implements InitializingBean { UserRoleVerification userRoleVerification, ValidationHelper validationHelper, @Qualifier("reportRequestFromExecutionValidator") - Function reportRequestFromExecutionValidator, + Function reportRequestFromExecutionValidator, @Qualifier("reportRequestFromRegistryValidator") - Function reportRequestFromRegistryValidator) { + Function reportRequestFromRegistryValidator) { super(kafkaQueue, kafkaResponseQueue); this.imdgProvider = imdgProvider; this.messageResolver = messageResolver; @@ -49,15 +51,21 @@ public class ReportService extends QueueConsumer implements InitializingBean { @Override public void afterPropertiesSet() throws Exception { - callback(ReportRequestFromRegistry.class) - .setConsumer(this::createReportFromRegistry) - .forDestination(Consts.DESTINATION_CREATE_REPORT_FROM_REGISTRY, callbacks::put); - callback(ReportRequestFromExecution.class) - .setConsumer(this::createReportFromExecution) - .forDestination(Consts.DESTINATION_CREATE_REPORT_FROM_EXECUTION, callbacks::put); + callback(ReportRequest.class) + .setFunction(this::createReport) + .forDestination(Consts.DESTINATION_CREATE_REPORT, callbacks::put); + callback(ReportRequestWithSessionId.class) + .setFunction(this::createReportForSessionId) + .forDestination(Consts.DESTINATION_CREATE_REPORT_FOR_SESSION_ID, callbacks::put); + callback(ReportRequestWithSessionIdList.class) + .setFunction(this::createReportForSessionIdList) + .forDestination(Consts.DESTINATION_CREATE_REPORT_FOR_SESSION_ID, callbacks::put); + callback(ReportRequestWithPeriod.class) + .setFunction(this::createReportForPeriod) + .forDestination(Consts.DESTINATION_CREATE_REPORT_FOR_PERIOD, callbacks::put); } - public RequestInfoUpdate createReportFromRegistry(BaseRequest userRequest) { + public RequestInfoUpdate createReport(BaseRequest userRequest) { RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest); if (requestInfoUpdate != null) return null; @@ -67,7 +75,7 @@ public class ReportService extends QueueConsumer implements InitializingBean { return null; } - public RequestInfoUpdate createReportFromExecution(BaseRequest userRequest) { + public RequestInfoUpdate createReportForSessionId(BaseRequest userRequest) { RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest); if (requestInfoUpdate != null) return null; @@ -77,5 +85,13 @@ public class ReportService extends QueueConsumer implements InitializingBean { return null; } + public RequestInfoUpdate createReportForSessionIdList(BaseRequest userRequest) { + return null; + } + + public RequestInfoUpdate createReportForPeriod(BaseRequest userRequest) { + return null; + } + } 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 e9fd627f3..cd605265f 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 @@ -71,8 +71,10 @@ public interface Consts { String DESTINATION_BANK_ACCOUNT_UPDATE = "bank-account-update"; String DESTINATION_BANK_ACCOUNT_NEW = "bank-account-new"; - String DESTINATION_CREATE_REPORT_FROM_REGISTRY = "destination-create-report-from-registry"; - String DESTINATION_CREATE_REPORT_FROM_EXECUTION = "destination-create-report-from-execution"; + String DESTINATION_CREATE_REPORT = "destination-create-report"; + String DESTINATION_CREATE_REPORT_FOR_SESSION_ID = "destination-create-report-for-session-id"; + String DESTINATION_CREATE_REPORT_FOR_SESSION_ID_LIST = "destination-create-report-for-session-id-list"; + String DESTINATION_CREATE_REPORT_FOR_PERIOD = "destination-create-report-for-period"; @Deprecated String ACCOUNT_NEW_SDF01 = "account-new-sdf01"; diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestFromRegistry.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestFromRegistry.java deleted file mode 100644 index f35d0a717..000000000 --- a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestFromRegistry.java +++ /dev/null @@ -1,7 +0,0 @@ -package ru.spcex.clearing.platform.messaging.domain.cud.reports; - -/** - * Запрос на построение отчета на основе Registry - */ -public class ReportRequestFromRegistry extends ReportRequest { -} diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportWithPeriodRequest.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestWithPeriod.java similarity index 95% rename from platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportWithPeriodRequest.java rename to platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestWithPeriod.java index 4f4c80c75..aca91be94 100644 --- a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportWithPeriodRequest.java +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestWithPeriod.java @@ -11,7 +11,7 @@ import java.time.LocalDate; /** * Запрос отчёта с периодом report-service */ -public class ReportWithPeriodRequest extends ReportRequest { +public class ReportRequestWithPeriod extends ReportRequest { @JsonSerialize(using = LocalDateSerializer.class) @JsonDeserialize(using = LocalDateDeserializer.class) @JsonProperty diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestFromExecution.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestWithSessionId.java similarity index 71% rename from platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestFromExecution.java rename to platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestWithSessionId.java index 0ed78564b..c5c2cd857 100644 --- a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestFromExecution.java +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestWithSessionId.java @@ -3,9 +3,9 @@ package ru.spcex.clearing.platform.messaging.domain.cud.reports; import com.fasterxml.jackson.annotation.JsonProperty; /** - * Запрос на построение отчета на основе ExecutionDeposit/Fond + * Запрос на построение отчета по SessionId */ -public class ReportRequestFromExecution extends ReportRequest { +public class ReportRequestWithSessionId extends ReportRequest { /** * Идентификатор сессии */ diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestWithSessionIdList.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestWithSessionIdList.java new file mode 100644 index 000000000..3b85f542e --- /dev/null +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestWithSessionIdList.java @@ -0,0 +1,24 @@ +package ru.spcex.clearing.platform.messaging.domain.cud.reports; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import java.util.List; + +/** + * Запрос на построение отчета по списку SessionId + */ +public class ReportRequestWithSessionIdList extends ReportRequest { + /** + * Идентификатор сессии + */ + @JsonProperty + protected List sessionId; + + public List getSessionId() { + return sessionId; + } + + public void setSessionId(List sessionId) { + this.sessionId = sessionId; + } +} From c76aee2428e7275474592ca484621e0c681aba44 Mon Sep 17 00:00:00 2001 From: akulikov Date: Mon, 15 May 2023 18:06:02 +0300 Subject: [PATCH 12/32] report requests validators --- .../config/validation/ValidationConfig.java | 97 +++++++++++++++---- .../reports/services/ReportService.java | 40 ++++++-- .../ReportRequestWithSessionIdList.java | 4 +- 3 files changed, 112 insertions(+), 29 deletions(-) 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 99cb5f87b..69af977cc 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,9 +6,12 @@ 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.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; @@ -16,6 +19,7 @@ import ru.spcex.platform.enumeration.ReportType; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; import ru.spcex.platform.imdg.validation.ImdgValidationContext; +import ru.spcex.platform.utils.enumeration.IEnumKey; import ru.spcex.platform.utils.enumeration.IMessageResolver; import ru.spcex.platform.utils.validation.IValidator; import ru.spcex.platform.utils.validation.ValidatorImpl; @@ -44,8 +48,32 @@ public class ValidationConfig { return new ValidationHelper(messageResolver); } - @Bean("reportRequestFromExecutionValidator") - public Function reportRequestFromExecutionValidator( + @Bean("reportRequestValidator") + public Function reportRequestValidator( + Map> imdgForValidation + ) { + return reportRequest -> { + ImdgValidationContext context = new ImdgValidationContext<>(); + context.setValidatedObject(reportRequest); + + Consumer addImdg = (s) -> context.addImdg(s, imdgForValidation.get(s)); + // todo add dictionary for check reportId + + return new ValidatorImpl<>(context, + EnumPresentRule.instance("reportId", + ReportRequest::getReportId, + new IEnumKey[]{ + ReportType.SUMMARY_LIABILITIES_CLAIMS, + ReportType.SUMMARY_MONEY_CHANGE + }, + ReportError.WrongFieldValue, + ReportError.RequiredFieldEmpty) + ); + }; + } + + @Bean("reportRequestWithSessionIdValidator") + public Function reportRequestWithSessionIdValidator( Map> imdgForValidation ) { return reportRequestWithSessionId -> { @@ -58,10 +86,9 @@ public class ValidationConfig { return new ValidatorImpl<>(context, EnumPresentRule.instance("reportId", ReportRequestWithSessionId::getReportId, - new ReportType[]{ + new IEnumKey[]{ ReportType.OPERATIONAL_LIABILITIES_CLAIMS, - ReportType.SUMMARY_LIABILITIES_CLAIMS, - ReportType.PERIOD_LIABILITIES_CLAIMS, + ReportType.OPERATIONAL_MONEY_CHANGE, ReportType.EXECUTED_DEAL_REPORT, ReportType.UNFULFILLED_DEAL_REPORT }, @@ -69,35 +96,71 @@ public class ValidationConfig { ReportError.RequiredFieldEmpty), FieldRequiredRule.instance("sessionId", ReportRequestWithSessionId::getSessionId, - ReportError.RequiredFieldEmpty) + ReportError.RequiredFieldEmpty, + sessionId -> sessionId > 0 ? null : ReportError.WrongFieldValue) ); }; } - @Bean("reportRequestFromRegistryValidator") - public Function reportRequestFromRegistryValidator( + @Bean("reportRequestWithSessionIdListValidator") + public Function reportRequestWithSessionIdListValidator( Map> imdgForValidation ) { - return reportRequest -> { - ImdgValidationContext context = new ImdgValidationContext<>(); - context.setValidatedObject(reportRequest); + return reportRequestWithSessionIdList -> { + ImdgValidationContext context = new ImdgValidationContext<>(); + context.setValidatedObject(reportRequestWithSessionIdList); Consumer addImdg = (s) -> context.addImdg(s, imdgForValidation.get(s)); // todo add dictionary for check reportId return new ValidatorImpl<>(context, EnumPresentRule.instance("reportId", - reportRequest::getReportId, - new ReportType[]{ - ReportType.OPERATIONAL_MONEY_CHANGE, - ReportType.SUMMARY_MONEY_CHANGE, - ReportType.PERIOD_MONEY_CHANGE + ReportRequestWithSessionIdList::getReportId, + new IEnumKey[]{ + ReportType.PERIOD_LIABILITIES_CLAIMS }, ReportError.WrongFieldValue, - ReportError.RequiredFieldEmpty) + 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); + + Consumer addImdg = (s) -> context.addImdg(s, imdgForValidation.get(s)); + // todo add dictionary for check reportId + + return new ValidatorImpl<>(context, + EnumPresentRule.instance("reportId", + ReportRequestWithPeriod::getReportId, + new IEnumKey[]{ + ReportType.PERIOD_MONEY_CHANGE, + }, + ReportError.WrongFieldValue, + ReportError.RequiredFieldEmpty), + EndDtAfterStartDtRule.instance("endDate", "startDate", + ReportRequestWithPeriod::getEndDate, + ReportRequestWithPeriod::getStartDate, + ReportError.RequiredFieldEmpty, + ReportError.WrongFieldValue) ); }; } } + 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 9e9c041f3..6e1911e25 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 @@ -27,8 +27,10 @@ public class ReportService extends QueueConsumer implements InitializingBean { private final IMessageResolver messageResolver; private final UserRoleVerification userRoleVerification; private final ValidationHelper validationHelper; - private final Function reportRequestFromExecutionValidator; - private final Function reportRequestFromRegistryValidator; + private final Function reportRequestValidator; + private final Function reportRequestWithSessionIdValidator; + private final Function reportRequestWithSessionIdListValidator; + private final Function reportRequestWithPeriodValidator; public ReportService(Consumer kafkaQueue, Producer kafkaResponseQueue, @@ -36,17 +38,23 @@ public class ReportService extends QueueConsumer implements InitializingBean { IMessageResolver messageResolver, UserRoleVerification userRoleVerification, ValidationHelper validationHelper, - @Qualifier("reportRequestFromExecutionValidator") - Function reportRequestFromExecutionValidator, - @Qualifier("reportRequestFromRegistryValidator") - Function reportRequestFromRegistryValidator) { + @Qualifier("reportRequestValidator") + Function reportRequestValidator, + @Qualifier("reportRequestWithSessionIdValidator") + Function reportRequestWithSessionIdValidator, + @Qualifier("reportRequestWithSessionIdListValidator") + Function reportRequestWithSessionIdListValidator, + @Qualifier("reportRequestWithPeriodValidator") + Function ReportRequestWithPeriodValidator) { super(kafkaQueue, kafkaResponseQueue); this.imdgProvider = imdgProvider; this.messageResolver = messageResolver; this.userRoleVerification = userRoleVerification; this.validationHelper = validationHelper; - this.reportRequestFromExecutionValidator = reportRequestFromExecutionValidator; - this.reportRequestFromRegistryValidator = reportRequestFromRegistryValidator; + this.reportRequestValidator = reportRequestValidator; + this.reportRequestWithSessionIdValidator = reportRequestWithSessionIdValidator; + this.reportRequestWithSessionIdListValidator = reportRequestWithSessionIdListValidator; + reportRequestWithPeriodValidator = ReportRequestWithPeriodValidator; } @Override @@ -69,7 +77,7 @@ public class ReportService extends QueueConsumer implements InitializingBean { RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest); if (requestInfoUpdate != null) return null; - requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestFromRegistryValidator); + requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestValidator); if (requestInfoUpdate != null) return null; return null; @@ -79,17 +87,29 @@ public class ReportService extends QueueConsumer implements InitializingBean { RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest); if (requestInfoUpdate != null) return null; - requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestFromExecutionValidator); + requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestWithSessionIdValidator); if (requestInfoUpdate != null) return null; return null; } public RequestInfoUpdate createReportForSessionIdList(BaseRequest userRequest) { + RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest); + if (requestInfoUpdate != null) return null; + + requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestWithSessionIdListValidator); + if (requestInfoUpdate != null) return null; + return null; } public RequestInfoUpdate createReportForPeriod(BaseRequest userRequest) { + RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest); + if (requestInfoUpdate != null) return null; + + requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestWithPeriodValidator); + if (requestInfoUpdate != null) return null; + return null; } diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestWithSessionIdList.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestWithSessionIdList.java index 3b85f542e..2202f7726 100644 --- a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestWithSessionIdList.java +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestWithSessionIdList.java @@ -14,11 +14,11 @@ public class ReportRequestWithSessionIdList extends ReportRequest { @JsonProperty protected List sessionId; - public List getSessionId() { + public List getSessionIdList() { return sessionId; } - public void setSessionId(List sessionId) { + public void setSessionIdList(List sessionId) { this.sessionId = sessionId; } } From 47fbbabb1b948f5adf32b48714a6f8aa4d2312d2 Mon Sep 17 00:00:00 2001 From: akulikov Date: Mon, 15 May 2023 18:33:18 +0300 Subject: [PATCH 13/32] report create methods --- .../reports/config/ReportBuildersConfig.java | 46 ++++++++++ .../reports/services/ReportService.java | 83 ++++++++++++++++++- .../platform/enumeration/ReportType.java | 1 + 3 files changed, 127 insertions(+), 3 deletions(-) create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/ReportBuildersConfig.java diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/ReportBuildersConfig.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/ReportBuildersConfig.java new file mode 100644 index 000000000..baa895609 --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/ReportBuildersConfig.java @@ -0,0 +1,46 @@ +package ru.spcex.clearing.reports.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import ru.spcex.clearing.reports.reports.*; +import ru.spcex.clearing.reports.reports.bp.*; +import ru.spcex.platform.enumeration.ReportType; +import ru.spcex.platform.imdg.api.ImdgProvider; + +import java.util.HashMap; +import java.util.Map; + +@Configuration +public class ReportBuildersConfig { + @Bean("reportBuildersWithoutParams") + public Map> reportBuildersWithoutParams(ImdgProvider imdgProvider) { + Map> resultMap = new HashMap<>(); + resultMap.put(ReportType.SUMMARY_LIABILITIES_CLAIMS, new SummaryLiabilitiesClaimsReportBuilder(imdgProvider)); + resultMap.put(ReportType.SUMMARY_MONEY_CHANGE, new SummaryMoneyChangeReportBuilder(imdgProvider)); + return resultMap; + } + + @Bean("reportBuildersWithSessionIdParam") + public Map> reportBuildersWithSessionIdParam(ImdgProvider imdgProvider) { + Map> resultMap = new HashMap<>(); + resultMap.put(ReportType.OPERATIONAL_LIABILITIES_CLAIMS, new OperationalLiabilitiesClaimsReportBuilder(imdgProvider)); + resultMap.put(ReportType.OPERATIONAL_MONEY_CHANGE, new OperationalMoneyChangeReportBuilder(imdgProvider)); + resultMap.put(ReportType.EXECUTED_DEAL_REPORT, new ExecutedDealReportBuilder(imdgProvider)); + resultMap.put(ReportType.UNFULFILLED_DEAL_REPORT, new UnfulfilledDealReportBuilder(imdgProvider)); + return resultMap; + } + + @Bean("reportBuildersWithSessionIdListParam") + public Map> reportBuildersWithSessionIdListParams(ImdgProvider imdgProvider) { + Map> resultMap = new HashMap<>(); + resultMap.put(ReportType.PERIOD_LIABILITIES_CLAIMS, new PeriodLiabilitiesClaimsReportBuilder(imdgProvider)); + return resultMap; + } + + @Bean("reportBuildersWithPeriodParams") + public Map> reportBuildersWithPeriodParams(ImdgProvider imdgProvider) { + Map> resultMap = new HashMap<>(); + resultMap.put(ReportType.PERIOD_MONEY_CHANGE, new PeriodMoneyChangeReportBuilder(imdgProvider)); + return resultMap; + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportService.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportService.java index 6e1911e25..4fd644a5d 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportService.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportService.java @@ -2,6 +2,8 @@ package ru.spcex.clearing.reports.services; import org.apache.kafka.clients.consumer.Consumer; import org.apache.kafka.clients.producer.Producer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; @@ -13,16 +15,23 @@ import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequestWith import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequestWithSessionIdList; import ru.spcex.clearing.platform.messaging.service.QueueConsumer; import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate; +import ru.spcex.clearing.reports.config.element.ReportsServiceSettings; +import ru.spcex.clearing.reports.reports.*; import ru.spcex.clearing.util.security.UserRoleVerification; import ru.spcex.clearing.validation.common.ValidationHelper; +import ru.spcex.platform.enumeration.ReportType; import ru.spcex.platform.imdg.api.ImdgProvider; +import ru.spcex.platform.utils.enumeration.IEnumKey; import ru.spcex.platform.utils.enumeration.IMessageResolver; import ru.spcex.platform.utils.validation.IValidator; +import java.io.File; +import java.util.Map; import java.util.function.Function; @Service public class ReportService extends QueueConsumer implements InitializingBean { + private final Logger log = LoggerFactory.getLogger(getClass()); private final ImdgProvider imdgProvider; private final IMessageResolver messageResolver; private final UserRoleVerification userRoleVerification; @@ -31,6 +40,12 @@ public class ReportService extends QueueConsumer implements InitializingBean { private final Function reportRequestWithSessionIdValidator; private final Function reportRequestWithSessionIdListValidator; private final Function reportRequestWithPeriodValidator; + private final Map> reportBuildersWithoutParams; + private final Map> reportBuildersWithSessionIdParam; + private final Map> reportBuildersWithSessionIdListParam; + private final Map> reportBuildersWithPeriodParams; + + private final File outFolder; public ReportService(Consumer kafkaQueue, Producer kafkaResponseQueue, @@ -38,14 +53,23 @@ public class ReportService extends QueueConsumer implements InitializingBean { IMessageResolver messageResolver, UserRoleVerification userRoleVerification, ValidationHelper validationHelper, + ReportsServiceSettings reportsServiceSettings, + @Qualifier("reportBuildersWithoutParams") + Map> reportBuildersWithoutParams, + @Qualifier("reportBuildersWithSessionIdParam") + Map> reportBuildersWithSessionIdParam, + @Qualifier("reportBuildersWithSessionIdListParam") + Map> reportBuildersWithSessionIdListParam, + @Qualifier("reportBuildersWithPeriodParams") + Map> reportBuildersWithPeriodParams, @Qualifier("reportRequestValidator") Function reportRequestValidator, @Qualifier("reportRequestWithSessionIdValidator") Function reportRequestWithSessionIdValidator, - @Qualifier("reportRequestWithSessionIdListValidator") + @Qualifier("reportRequestWithSessionIdListValidator") Function reportRequestWithSessionIdListValidator, @Qualifier("reportRequestWithPeriodValidator") - Function ReportRequestWithPeriodValidator) { + Function reportRequestWithPeriodValidator) { super(kafkaQueue, kafkaResponseQueue); this.imdgProvider = imdgProvider; this.messageResolver = messageResolver; @@ -54,7 +78,13 @@ public class ReportService extends QueueConsumer implements InitializingBean { this.reportRequestValidator = reportRequestValidator; this.reportRequestWithSessionIdValidator = reportRequestWithSessionIdValidator; this.reportRequestWithSessionIdListValidator = reportRequestWithSessionIdListValidator; - reportRequestWithPeriodValidator = ReportRequestWithPeriodValidator; + this.reportRequestWithPeriodValidator = reportRequestWithPeriodValidator; + this.reportBuildersWithoutParams = reportBuildersWithoutParams; + this.reportBuildersWithSessionIdParam = reportBuildersWithSessionIdParam; + this.reportBuildersWithSessionIdListParam = reportBuildersWithSessionIdListParam; + this.reportBuildersWithPeriodParams = reportBuildersWithPeriodParams; + this.outFolder = new File(reportsServiceSettings.getReportModuleOut()); + assert outFolder.isDirectory(); } @Override @@ -74,42 +104,89 @@ public class ReportService extends QueueConsumer implements InitializingBean { } public RequestInfoUpdate createReport(BaseRequest userRequest) { + log.debug("ReportRequest received"); RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest); if (requestInfoUpdate != null) return null; requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestValidator); if (requestInfoUpdate != null) return null; + ReportRequest req = userRequest.getRequestPayload(); + log.debug("Create report type {}...", req.getReportId()); + + CSVReportBuilder builder = reportBuildersWithoutParams.get( + IEnumKey.getEnumByKey(ReportType.class, req.getReportId()) + ); + File outFile = builder.createReport(new EmptyParams(), outFolder); + + log.debug("Report {} successfully created. Output file: {}", req.getReportId(), outFile.getAbsolutePath()); return null; } public RequestInfoUpdate createReportForSessionId(BaseRequest userRequest) { + log.debug("ReportRequestWithSessionId received"); RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest); if (requestInfoUpdate != null) return null; requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestWithSessionIdValidator); if (requestInfoUpdate != null) return null; + ReportRequestWithSessionId req = userRequest.getRequestPayload(); + log.debug("Create report type {}...", req.getReportId()); + + CSVReportBuilder builder = reportBuildersWithSessionIdParam.get( + IEnumKey.getEnumByKey(ReportType.class, req.getReportId()) + ); + SessionIdParam sessionIdParam = new SessionIdParam(); + sessionIdParam.setSessionId(req.getSessionId()); + File outFile = builder.createReport(sessionIdParam, outFolder); + + log.debug("Report {} successfully created. Output file: {}", req.getReportId(), outFile.getAbsolutePath()); return null; } public RequestInfoUpdate createReportForSessionIdList(BaseRequest userRequest) { + log.debug("ReportRequestWithSessionIdList received"); RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest); if (requestInfoUpdate != null) return null; requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestWithSessionIdListValidator); if (requestInfoUpdate != null) return null; + ReportRequestWithSessionIdList req = userRequest.getRequestPayload(); + log.debug("Create report type {}...", req.getReportId()); + + CSVReportBuilder builder = reportBuildersWithSessionIdListParam.get( + IEnumKey.getEnumByKey(ReportType.class, req.getReportId()) + ); + SessionIdListParams sessionIdListParams = new SessionIdListParams(); + sessionIdListParams.setSessionIdList(req.getSessionIdList()); + File outFile = builder.createReport(sessionIdListParams, outFolder); + + log.debug("Report {} successfully created. Output file: {}", req.getReportId(), outFile.getAbsolutePath()); return null; } public RequestInfoUpdate createReportForPeriod(BaseRequest userRequest) { + log.debug("ReportRequestWithPeriod received"); RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest); if (requestInfoUpdate != null) return null; requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestWithPeriodValidator); if (requestInfoUpdate != null) return null; + ReportRequestWithPeriod req = userRequest.getRequestPayload(); + log.debug("Create report type {}...", req.getReportId()); + + CSVReportBuilder builder = reportBuildersWithPeriodParams.get( + IEnumKey.getEnumByKey(ReportType.class, req.getReportId()) + ); + PeriodParams periodParams = new PeriodParams(); + periodParams.setStartDate(req.getStartDate()); + periodParams.setEndDate(req.getEndDate()); + File outFile = builder.createReport(periodParams, outFolder); + + log.debug("Report {} successfully created. Output file: {}", req.getReportId(), outFile.getAbsolutePath()); return null; } diff --git a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/ReportType.java b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/ReportType.java index 349687408..411efd74a 100644 --- a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/ReportType.java +++ b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/ReportType.java @@ -27,4 +27,5 @@ public enum ReportType implements IEnumKey { public String getKey() { return key; } + } From 94ab971af184d8d2110b8d01bfda0b94806e9971 Mon Sep 17 00:00:00 2001 From: akulikov Date: Tue, 16 May 2023 21:26:24 +0300 Subject: [PATCH 14/32] some fixes and tests --- clearing-parent/reports-service/pom.xml | 10 + .../reports/config/BeanConfiguration.java | 6 + .../element/ReportsServiceSettings.java | 16 +- .../reports/reports/CSVReportBuilder.java | 13 +- .../reports/reports/ReportWithPeriod.java | 6 +- .../bp/LiabilitiesClaimsReportBuilder.java | 13 +- ...ationalLiabilitiesClaimsReportBuilder.java | 6 +- .../reports/reports/bt/bt_13/ReportDOCIN.java | 7 +- .../reports/bt/bt_13/ReportDOCOUT.java | 7 +- .../reports/bt/bt_16_5/ReportINACCNT.java | 7 +- .../reports/services/ReportService.java | 17 +- .../src/main/resources/application.properties | 21 +- .../clearing/reports/config/TestConfig.java | 17 + .../reports/services/ReportServiceTest.java | 429 ++++++++++++++++++ ...perational_liabilities_claims_expected.csv | 3 + .../ru/spcex/clearing/test/TestUtils.java | 4 + .../domain/cud/reports/ReportRequest.java | 2 +- .../cud/reports/ReportRequestWithPeriod.java | 4 +- .../reports/ReportRequestWithSessionId.java | 2 +- .../ReportRequestWithSessionIdList.java | 2 +- 20 files changed, 525 insertions(+), 67 deletions(-) create mode 100644 clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/config/TestConfig.java create mode 100644 clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest.java create mode 100644 clearing-parent/reports-service/src/test/resources/operational_liabilities_claims_expected.csv diff --git a/clearing-parent/reports-service/pom.xml b/clearing-parent/reports-service/pom.xml index cfc872733..a5e83d1ba 100644 --- a/clearing-parent/reports-service/pom.xml +++ b/clearing-parent/reports-service/pom.xml @@ -101,6 +101,16 @@ ru.spcex.clearing clearing-validation + + ru.spcex.clearing + test-clearing + test + + + org.springframework.boot + spring-boot-test + test + diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/BeanConfiguration.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/BeanConfiguration.java index da06a010e..c0730ce66 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/BeanConfiguration.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/BeanConfiguration.java @@ -7,6 +7,7 @@ import org.springframework.context.annotation.Scope; import ru.spcex.clearing.reports.errors.ReportError; import ru.spcex.clearing.util.security.UserRoleVerification; import ru.spcex.clearing.util.services.IMDGMessageResolver; +import ru.spcex.clearing.util.services.RequestHelper; import ru.spcex.platform.enumeration.UserRole; import ru.spcex.platform.imdg.api.ImdgProvider; import ru.spcex.platform.utils.enumeration.IMessageResolver; @@ -24,4 +25,9 @@ public class BeanConfiguration { return new UserRoleVerification(imdgProvider, messageResolver, UserRole.Admin, ReportError.UserVerifyDenial); } + @Bean + @Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE) + public RequestHelper requestHelper(IMessageResolver messageResolver) { + return new RequestHelper(messageResolver, ReportError.InternalError); + } } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/element/ReportsServiceSettings.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/element/ReportsServiceSettings.java index 8352482f0..c8d0d3ad3 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/element/ReportsServiceSettings.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/element/ReportsServiceSettings.java @@ -18,7 +18,7 @@ import ru.spcex.platform.imdg.iml.hazelcast.config.HazelcastClientParams; public class ReportsServiceSettings { private HazelcastClientParams hazelcast; private KafkaConsumerSettings kafkaConsumer; -// private KafkaProducerSettings kafkaProducer; + private KafkaProducerSettings kafkaProducer; private String reportModuleOut; public HazelcastClientParams getHazelcast() { @@ -37,13 +37,13 @@ public class ReportsServiceSettings { this.kafkaConsumer = kafkaConsumer; } -// public KafkaProducerSettings getKafkaProducer() { -// return kafkaProducer; -// } -// -// public void setKafkaProducer(KafkaProducerSettings kafkaProducer) { -// this.kafkaProducer = kafkaProducer; -// } + public KafkaProducerSettings getKafkaProducer() { + return kafkaProducer; + } + + public void setKafkaProducer(KafkaProducerSettings kafkaProducer) { + this.kafkaProducer = kafkaProducer; + } public String getReportModuleOut() { return reportModuleOut; 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 92f57089d..3570a0744 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 @@ -36,7 +36,7 @@ public abstract class CSVReportBuilder

{ protected abstract List getLines(); /** - * Название отчета, используется для формирования имени отчета + * Название отчета, используется для формирования имени отчета (без указания формата) * * @param params Параметры формирования отчета */ @@ -67,15 +67,14 @@ public abstract class CSVReportBuilder

{ CSVWriterBuilder csvWriterBuilder = new CSVWriterBuilder(writer) .withLineEnd("\n") .withSeparator(',') - .withQuoteChar('\'') - .withEscapeChar('\"'); + .withQuoteChar('\"'); return csvWriterBuilder.build(); } public File createReport(P params, File outFolder) { assert outFolder != null && outFolder.isDirectory(); - File reportFile = new File(outFolder, normalizeFilenameForOS(getReportFilename(params))); + File reportFile = new File(outFolder, normalizeFilenameForOS(getReportFilename(params) + ".csv")); collect(params); String[] headers = getHeaders(); @@ -85,11 +84,11 @@ public abstract class CSVReportBuilder

{ assert lines != null; try (ICSVWriter csvWriter = createCsvWriter(reportFile)) { - csvWriter.writeNext(headers); + csvWriter.writeNext(headers, false); csvWriter.writeAll(lines, true); } catch (IOException e) { - // todo check it - e.printStackTrace(); + log.error("Can't create report", e); + return null; } return reportFile; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ReportWithPeriod.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ReportWithPeriod.java index f84070ab7..e7e6d7376 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ReportWithPeriod.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ReportWithPeriod.java @@ -2,8 +2,6 @@ package ru.spcex.clearing.reports.reports; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAsAttribute; -import com.thoughtworks.xstream.annotations.XStreamConverter; -import ru.spcex.clearing.reports.xml_test.FormattedLocalDateConverter; import java.time.LocalDate; @@ -15,12 +13,12 @@ public abstract class ReportWithPeriod extends AbstractReport { @XStreamAsAttribute @XStreamAlias("startDate") - @XStreamConverter(value = FormattedLocalDateConverter.class, strings = {"dd.MM.yyyy"}) +// @XStreamConverter(value = FormattedLocalDateConverter.class, strings = {"dd.MM.yyyy"}) protected LocalDate startDate; @XStreamAsAttribute @XStreamAlias("endDate") - @XStreamConverter(value = FormattedLocalDateConverter.class, strings = {"dd.MM.yyyy"}) +// @XStreamConverter(value = FormattedLocalDateConverter.class, strings = {"dd.MM.yyyy"}) protected LocalDate endDate; 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 index bc60bfb15..8c505c261 100644 --- 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 @@ -18,7 +18,8 @@ import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; import java.math.RoundingMode; -import java.time.Instant; +import java.time.LocalDate; +import java.time.LocalTime; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -35,7 +36,7 @@ public abstract class LiabilitiesClaimsReportBuilder

extends CSVReportBuilder protected final Imdg tradingClearingRegistryImdg; protected final String[] headers = { - "id", "doc_date", "doc_time", "doc_type", "clearingHouse", "firmId", "firName", "session_id", + "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", @@ -83,7 +84,9 @@ public abstract class LiabilitiesClaimsReportBuilder

extends CSVReportBuilder Company clearingHouseCompany = companyImdg.getSingleObjectByID(1L); String clearingHouse = clearingHouseCompany.getFullName(); - Instant now = Instant.now(); + LocalDate nowDate = LocalDate.now(); + LocalTime nowTime = LocalTime.now(); + lines = new ArrayList<>(executions.size()); for (ExecutionCommon execution : executions) { Company company = companyImdg.getSingleObjectByID(execution.getCompanyId()); @@ -102,8 +105,8 @@ public abstract class LiabilitiesClaimsReportBuilder

extends CSVReportBuilder ); String id = String.valueOf(execution.getId()); - String docDate = dateFormatter.format(now); - String docTime = timeFormatter.format(now); + String docDate = dateFormatter.format(nowDate); + String docTime = timeFormatter.format(nowTime); String docName = "Отчет об обязательствах/требованиях Участника клиринга"; String docType = "KS_FIRMID_LIABILITIES"; String firmId = String.valueOf(execution.getCompanyId()); 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 index f90e713cc..7f985a9a5 100644 --- 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 @@ -6,7 +6,7 @@ import ru.spcex.clearing.reports.reports.SessionIdParam; import ru.spcex.platform.enumeration.ReportType; import ru.spcex.platform.imdg.api.ImdgProvider; -import java.time.Instant; +import java.time.LocalDateTime; import java.util.Collection; import java.util.Map; @@ -31,7 +31,9 @@ public class OperationalLiabilitiesClaimsReportBuilder extends LiabilitiesClaims @Override protected String getReportFilename(SessionIdParam params) { - return "operational_liabilities_claims.%s".formatted(Instant.now()); + return "operational_liabilities_claims.%s".formatted( + dateTimeFormatter.format(LocalDateTime.now()) + ); } @Override diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_13/ReportDOCIN.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_13/ReportDOCIN.java index 21034018e..c10a38e33 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_13/ReportDOCIN.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_13/ReportDOCIN.java @@ -2,11 +2,8 @@ package ru.spcex.clearing.reports.reports.bt.bt_13; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAsAttribute; -import com.thoughtworks.xstream.annotations.XStreamConverter; import ru.spcex.clearing.reports.reports.AbstractReport; import ru.spcex.clearing.reports.reports.ReportId; -import ru.spcex.clearing.reports.xml_test.FormattedLocalDateConverter; -import ru.spcex.clearing.reports.xml_test.FormattedLocalTimeConverter; import java.time.LocalDate; import java.time.LocalDateTime; @@ -22,7 +19,7 @@ public class ReportDOCIN extends AbstractReport { */ @XStreamAsAttribute @XStreamAlias("date") - @XStreamConverter(value = FormattedLocalDateConverter.class, strings = {"dd.MM.yyyy"}) +// @XStreamConverter(value = FormattedLocalDateConverter.class, strings = {"dd.MM.yyyy"}) private final LocalDate date; /** @@ -30,7 +27,7 @@ public class ReportDOCIN extends AbstractReport { */ @XStreamAsAttribute @XStreamAlias("time") - @XStreamConverter(value = FormattedLocalTimeConverter.class, strings = {"HH:mm:ss"}) +// @XStreamConverter(value = FormattedLocalTimeConverter.class, strings = {"HH:mm:ss"}) private final LocalTime time; @XStreamAlias("rows") diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_13/ReportDOCOUT.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_13/ReportDOCOUT.java index 587f78796..be4037989 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_13/ReportDOCOUT.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_13/ReportDOCOUT.java @@ -2,11 +2,8 @@ package ru.spcex.clearing.reports.reports.bt.bt_13; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAsAttribute; -import com.thoughtworks.xstream.annotations.XStreamConverter; import ru.spcex.clearing.reports.reports.AbstractReport; import ru.spcex.clearing.reports.reports.ReportId; -import ru.spcex.clearing.reports.xml_test.FormattedLocalDateConverter; -import ru.spcex.clearing.reports.xml_test.FormattedLocalTimeConverter; import java.time.LocalDate; import java.time.LocalDateTime; @@ -22,7 +19,7 @@ public class ReportDOCOUT extends AbstractReport { */ @XStreamAsAttribute @XStreamAlias("date") - @XStreamConverter(value = FormattedLocalDateConverter.class, strings = {"dd.MM.yyyy"}) +// @XStreamConverter(value = FormattedLocalDateConverter.class, strings = {"dd.MM.yyyy"}) private final LocalDate date; /** @@ -30,7 +27,7 @@ public class ReportDOCOUT extends AbstractReport { */ @XStreamAsAttribute @XStreamAlias("time") - @XStreamConverter(value = FormattedLocalTimeConverter.class, strings = {"HH:mm:ss"}) +// @XStreamConverter(value = FormattedLocalTimeConverter.class, strings = {"HH:mm:ss"}) private final LocalTime time; @XStreamAlias("rows") diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_16_5/ReportINACCNT.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_16_5/ReportINACCNT.java index f58b05e20..32d9cad93 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_16_5/ReportINACCNT.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt/bt_16_5/ReportINACCNT.java @@ -2,11 +2,8 @@ package ru.spcex.clearing.reports.reports.bt.bt_16_5; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAsAttribute; -import com.thoughtworks.xstream.annotations.XStreamConverter; import ru.spcex.clearing.reports.reports.AbstractReport; import ru.spcex.clearing.reports.reports.ReportId; -import ru.spcex.clearing.reports.xml_test.FormattedLocalDateConverter; -import ru.spcex.clearing.reports.xml_test.FormattedLocalTimeConverter; import java.time.LocalDate; import java.time.LocalDateTime; @@ -26,7 +23,7 @@ public class ReportINACCNT extends AbstractReport { */ @XStreamAsAttribute @XStreamAlias("date") - @XStreamConverter(value = FormattedLocalDateConverter.class, strings = {"dd.MM.yyyy"}) +// @XStreamConverter(value = FormattedLocalDateConverter.class, strings = {"dd.MM.yyyy"}) private final LocalDate date; /** @@ -34,7 +31,7 @@ public class ReportINACCNT extends AbstractReport { */ @XStreamAsAttribute @XStreamAlias("time") - @XStreamConverter(value = FormattedLocalTimeConverter.class, strings = {"HH:mm:ss"}) +// @XStreamConverter(value = FormattedLocalTimeConverter.class, strings = {"HH:mm:ss"}) private final LocalTime time; @XStreamAlias("rows") 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 4fd644a5d..084c20422 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 @@ -18,11 +18,10 @@ import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate; import ru.spcex.clearing.reports.config.element.ReportsServiceSettings; import ru.spcex.clearing.reports.reports.*; import ru.spcex.clearing.util.security.UserRoleVerification; +import ru.spcex.clearing.util.services.RequestHelper; import ru.spcex.clearing.validation.common.ValidationHelper; import ru.spcex.platform.enumeration.ReportType; -import ru.spcex.platform.imdg.api.ImdgProvider; import ru.spcex.platform.utils.enumeration.IEnumKey; -import ru.spcex.platform.utils.enumeration.IMessageResolver; import ru.spcex.platform.utils.validation.IValidator; import java.io.File; @@ -32,10 +31,9 @@ import java.util.function.Function; @Service public class ReportService extends QueueConsumer implements InitializingBean { private final Logger log = LoggerFactory.getLogger(getClass()); - private final ImdgProvider imdgProvider; - private final IMessageResolver messageResolver; private final UserRoleVerification userRoleVerification; private final ValidationHelper validationHelper; + private final RequestHelper requestHelper; private final Function reportRequestValidator; private final Function reportRequestWithSessionIdValidator; private final Function reportRequestWithSessionIdListValidator; @@ -49,10 +47,9 @@ public class ReportService extends QueueConsumer implements InitializingBean { public ReportService(Consumer kafkaQueue, Producer kafkaResponseQueue, - ImdgProvider imdgProvider, - IMessageResolver messageResolver, UserRoleVerification userRoleVerification, ValidationHelper validationHelper, + RequestHelper requestHelper, ReportsServiceSettings reportsServiceSettings, @Qualifier("reportBuildersWithoutParams") Map> reportBuildersWithoutParams, @@ -71,10 +68,9 @@ public class ReportService extends QueueConsumer implements InitializingBean { @Qualifier("reportRequestWithPeriodValidator") Function reportRequestWithPeriodValidator) { super(kafkaQueue, kafkaResponseQueue); - this.imdgProvider = imdgProvider; - this.messageResolver = messageResolver; this.userRoleVerification = userRoleVerification; this.validationHelper = validationHelper; + this.requestHelper = requestHelper; this.reportRequestValidator = reportRequestValidator; this.reportRequestWithSessionIdValidator = reportRequestWithSessionIdValidator; this.reportRequestWithSessionIdListValidator = reportRequestWithSessionIdListValidator; @@ -97,10 +93,11 @@ public class ReportService extends QueueConsumer implements InitializingBean { .forDestination(Consts.DESTINATION_CREATE_REPORT_FOR_SESSION_ID, callbacks::put); callback(ReportRequestWithSessionIdList.class) .setFunction(this::createReportForSessionIdList) - .forDestination(Consts.DESTINATION_CREATE_REPORT_FOR_SESSION_ID, callbacks::put); + .forDestination(Consts.DESTINATION_CREATE_REPORT_FOR_SESSION_ID_LIST, callbacks::put); callback(ReportRequestWithPeriod.class) .setFunction(this::createReportForPeriod) .forDestination(Consts.DESTINATION_CREATE_REPORT_FOR_PERIOD, callbacks::put); + init(); } public RequestInfoUpdate createReport(BaseRequest userRequest) { @@ -118,6 +115,8 @@ public class ReportService extends QueueConsumer implements InitializingBean { IEnumKey.getEnumByKey(ReportType.class, req.getReportId()) ); File outFile = builder.createReport(new EmptyParams(), outFolder); + if (outFile == null) { + } log.debug("Report {} successfully created. Output file: {}", req.getReportId(), outFile.getAbsolutePath()); return null; diff --git a/clearing-parent/reports-service/src/main/resources/application.properties b/clearing-parent/reports-service/src/main/resources/application.properties index ed2aa2053..fdf19a25d 100644 --- a/clearing-parent/reports-service/src/main/resources/application.properties +++ b/clearing-parent/reports-service/src/main/resources/application.properties @@ -1,4 +1,6 @@ - +reports-service.hazelcast.cluster-members=127.0.0.1:5701 +reports-service.hazelcast.login=dev +reports-service.hazelcast.password=dev-pass reports-service.kafka-consumer.bootstrap-servers=localhost:9092 reports-service.kafka-consumer.group-id=dev-group-balance-service @@ -8,16 +10,11 @@ reports-service.kafka-consumer.auto-offset-reset=latest reports-service.kafka-consumer.linger-ms=1 reports-service.kafka-consumer.buffer-memory=33554432 -#reports-service.kafka-producer.bootstrap-servers=localhost:9092 -#reports-service.kafka-producer.acks=all -#reports-service.kafka-producer.retries=0 -#reports-service.kafka-producer.batch-size=16384 -#reports-service.kafka-producer.linger-ms=1 -#reports-service.kafka-producer.buffer-memory=33554432 - -reports-service.hazelcast.cluster-members=127.0.0.1:5701 - #,10.200.200.181:5701 -reports-service.hazelcast.login=dev -reports-service.hazelcast.password=dev-pass +reports-service.kafka-producer.bootstrap-servers=localhost:9092 +reports-service.kafka-producer.acks=all +reports-service.kafka-producer.retries=0 +reports-service.kafka-producer.batch-size=16384 +reports-service.kafka-producer.linger-ms=1 +reports-service.kafka-producer.buffer-memory=33554432 reports-service.ReportModuleOut=./report_out diff --git a/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/config/TestConfig.java b/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/config/TestConfig.java new file mode 100644 index 000000000..4133bd829 --- /dev/null +++ b/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/config/TestConfig.java @@ -0,0 +1,17 @@ +package ru.spcex.clearing.reports.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import ru.spcex.clearing.reports.config.element.ReportsServiceSettings; + +@Configuration +public class TestConfig { + + @Bean + public ReportsServiceSettings reportsServiceSettings() { + ReportsServiceSettings reportsServiceSettings = new ReportsServiceSettings(); + reportsServiceSettings.setReportModuleOut("out"); + return reportsServiceSettings; + } + +} diff --git a/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest.java b/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest.java new file mode 100644 index 000000000..48164120b --- /dev/null +++ b/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest.java @@ -0,0 +1,429 @@ +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.apache.kafka.clients.consumer.MockConsumer; +import org.apache.kafka.clients.producer.MockProducer; +import org.apache.kafka.clients.producer.ProducerRecord; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.ArgumentCaptor; +import org.mockito.Captor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.test.mock.mockito.SpyBean; +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.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.platform.messaging.domain.Consts; +import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequestWithSessionId; +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.test.TestUtils; +import ru.spcex.clearing.test.config.ImdgTestConfig; +import ru.spcex.clearing.test.config.KafkaTestConfig; +import ru.spcex.platform.enumeration.*; +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.math.BigDecimal; +import java.time.Instant; +import java.time.LocalDate; +import java.time.temporal.ChronoUnit; +import java.util.*; + +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 +}) +public class ReportServiceTest { + private Imdg executionFondImdg; + private Imdg executionDepositImdg; + private Imdg companyImdg; + private Imdg registryImdg; + private Imdg

listingImdg; + private Imdg fixedIncomeSecurityImdg; + private Imdg tradingClearingRegistryImdg; + + private final ExecutionFond testExecutionFond = new ExecutionFond(); + private final ExecutionDeposit testExecutionDeposit = new ExecutionDeposit(); + + private final Company testCompany_1 = new Company(); + private final Company testCompany_2 = new Company(); + private final Company testCompanyHouse = new Company(); + + private final Registry testRegistryForCompanyId_1 = new Registry(); + private final Registry testRegistryForCompanyId_2 = new Registry(); + + private final Registry tm_tRegistry_1 = new Registry(); + private final Registry om_tRegistry_1 = new Registry(); + private final Registry ts_tRegistry_1 = new Registry(); + private final Registry os_tRegistry_1 = new Registry(); + private final Registry tm_tRegistry_2 = new Registry(); + private final Registry om_tRegistry_2 = new Registry(); + private final Registry ts_tRegistry_2 = new Registry(); + private final Registry os_tRegistry_2 = new Registry(); + + private final Listing testListing_1 = new Listing(); + private final Listing testListing_2 = new Listing(); + + private final FixedIncomeSecurity testFixedIncomeSecurity_1 = new FixedIncomeSecurity(); + private final FixedIncomeSecurity testFixedIncomeSecurity_2 = new FixedIncomeSecurity(); + + private final TradingClearingRegistry testTradingClearingRegistry_1 = new TradingClearingRegistry(); + private final TradingClearingRegistry testTradingClearingRegistry_2 = new TradingClearingRegistry(); + + private static File outFolder; + + @Autowired + private ReportService reportService; + + @Autowired + @Qualifier("hazelcastServiceTest") + private ImdgProvider imdgProvider; + + @Captor + private ArgumentCaptor producerRecord; + + @SpyBean + private MockProducer producer; + + @BeforeAll + public static void createTestFolder() { + outFolder = new File("out"); + outFolder.mkdir(); + } + + @AfterAll + public static void deleteTestFolder() throws IOException { + FileUtils.deleteDirectory(outFolder); + } + + @Test + public void createReportTest_OPERATIONAL_LIABILITIES_CLAIMS() throws InterruptedException, IOException, CsvValidationException { + final Long oldSessionIdDeposit = testExecutionDeposit.getSessionId(); + final Long oldSessionIdFond = testExecutionFond.getSessionId(); + + ReportRequestWithSessionId reportRequestWithSessionId = new ReportRequestWithSessionId(); + reportRequestWithSessionId.setReportId(ReportType.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.DESTINATION_CREATE_REPORT_FOR_SESSION_ID, + 0, + 0, + jsonString); + + TestUtils.waitingWhenAddedRecordAndCheckIt(0L, producer, producerRecord); + + File outFile = outFolder.listFiles()[0]; + File expectedFile = new File(getClass().getClassLoader().getResource("operational_liabilities_claims_expected.csv").getFile()); + compareCSVFiles(expectedFile, outFile, Arrays.asList("doc_time")); + + System.out.println("hello"); + + testExecutionDeposit.setSessionId(oldSessionIdDeposit); + testExecutionFond.setSessionId(oldSessionIdFond); + executionDepositImdg.update(testExecutionDeposit); + executionFondImdg.update(testExecutionFond); + + outFile.delete(); + } + + public 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); + } + } while (true); + + expectedCSVReader.close(); + actualCSVReader.close(); + } + + + @PostConstruct + private void init() { + ImdgTestConfig.waitAvailableImdgProviderAndAddAdminWithDefaultId(); + + testExecutionFond.setExchangeExecutionId(TEST_EXCHANGE_EXECUTION_ID_1); + testExecutionFond.setExchangeExecutionTime(TEST_EXCHANGE_EXECUTION_TIME_1); + testExecutionFond.setTradingDate(TEST_TRADING_DATE_1); + testExecutionFond.setTradingClearingRegistryId(TEST_TRADING_CLEARING_REGISTRY_ID_1); + testExecutionFond.setMarket(TEST_MARKET_1); + testExecutionFond.setPrice(TEST_PRICE_1); + testExecutionFond.setLots(TEST_LOTS_1); + testExecutionFond.setQuantity(TEST_QUANTITY_1); + testExecutionFond.setInterestAmount(TEST_INTEREST_AMOUNT_1); + testExecutionFond.setSide(TEST_SIDE_1); + testExecutionFond.setSettlementCurrency(TEST_SETTLEMENT_CURRENCY_1); + testExecutionFond.setCompanyId(TEST_COMPANY_ID_1); + testExecutionFond.setDuration(TEST_DURATION_1); + testExecutionFond.setSecurityFullName(TEST_SECURITY_FULL_NAME_1); + testExecutionFond.setSecuritySymbol(TEST_SECURITY_SYMBOL_1); + testExecutionFond.setSecurityId(TEST_SECURITY_ID_1); + testExecutionFond.setCounterPartyId(TEST_COUNTER_PARTY_ID_1); + testExecutionFond.setCoverageStatus(TEST_COVERAGE_STATUS_1); + testExecutionFond.setSessionId(TEST_SESSION_ID_1); + testExecutionFond.setClearingDate(TEST_CLEARING_DATE_1); + testExecutionFond.setExchangeOrderId(TEST_EXCHANGE_ORDER_ID); + testExecutionFond.setSettlementAmount(TEST_SETTLEMENT_AMOUNT); + testExecutionFond.setComment(TEST_COMMENT); + testExecutionFond.setClientCodeId(TEST_CLIENT_CODE_ID); + testExecutionFond.setSettlementCode(TEST_SETTLEMENT_CODE); + testExecutionFond.setSettlementDate(TEST_SETTLEMENT_DATE); + testExecutionFond.setExchangeExecutionMicroseconds(TEST_EXCHANGE_EXECUTION_MICROSECONDS); + + testExecutionDeposit.setExchangeExecutionId(TEST_EXCHANGE_EXECUTION_ID_2); + testExecutionDeposit.setExchangeExecutionTime(TEST_EXCHANGE_EXECUTION_TIME_2); + testExecutionDeposit.setTradingDate(TEST_TRADING_DATE_2); + testExecutionDeposit.setTradingClearingRegistryId(TEST_TRADING_CLEARING_REGISTRY_ID_2); + testExecutionDeposit.setMarket(TEST_MARKET_2); + testExecutionDeposit.setPrice(TEST_PRICE_2); + testExecutionDeposit.setLots(TEST_LOTS_2); + testExecutionDeposit.setQuantity(TEST_QUANTITY_2); + testExecutionDeposit.setInterestAmount(TEST_INTEREST_AMOUNT_2); + testExecutionDeposit.setSide(TEST_SIDE_2); + testExecutionDeposit.setSettlementCurrency(TEST_SETTLEMENT_CURRENCY_2); + testExecutionDeposit.setCompanyId(TEST_COMPANY_ID_2); + testExecutionDeposit.setDuration(TEST_DURATION_2); + testExecutionDeposit.setSecurityFullName(TEST_SECURITY_FULL_NAME_2); + testExecutionDeposit.setSecuritySymbol(TEST_SECURITY_SYMBOL_2); + testExecutionDeposit.setSecurityId(TEST_SECURITY_ID_2); + testExecutionDeposit.setCounterPartyId(TEST_COUNTER_PARTY_ID_2); + testExecutionDeposit.setCoverageStatus(TEST_COVERAGE_STATUS_2); + testExecutionDeposit.setSessionId(TEST_SESSION_ID_2); + testExecutionDeposit.setClearingDate(TEST_CLEARING_DATE_2); + testExecutionDeposit.setFirstLegAmount(TEST_FIRST_LEG_AMOUNT); + testExecutionDeposit.setSecondLegAmount(TEST_SECOND_LEG_AMOUNT); + testExecutionDeposit.setFirstLegSettlementDate(TEST_FIRST_LEG_SETTLEMENT_DATE); + testExecutionDeposit.setSecondLegSettlementDate(TEST_SECOND_LEG_SETTLEMENT_DATE); + testExecutionDeposit.setFirstLegSettlementCode(TEST_FIRST_LEG_SETTLEMENT_CODE); + testExecutionDeposit.setSecondLegSettlementCode(TEST_SECOND_LEG_SETTLEMENT_CODE); + testExecutionDeposit.setContract(TEST_CONTRACT); + + executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class); + executionFondImdg.insert(testExecutionFond); + + executionDepositImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionDeposit, ExecutionDeposit.class); + executionDepositImdg.insert(testExecutionDeposit); + + testCompany_1.setWorkflowStatus(WorkflowStatus.Active.getKey()); + testCompany_1.setId(TEST_COMPANY_ID_1); + testCompany_1.setFullName(TEST_COMPANY_FULLNAME_1); + testCompany_2.setWorkflowStatus(WorkflowStatus.Active.getKey()); + testCompany_2.setId(TEST_COMPANY_ID_2); + testCompany_2.setFullName(TEST_COMPANY_FULLNAME_2); + testCompanyHouse.setId(1L); + testCompanyHouse.setFullName("COMPANY_HOUSE"); + companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); + companyImdg.insert(testCompany_1); + companyImdg.insert(testCompany_2); + companyImdg.insert(testCompanyHouse); + + + registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); + testRegistryForCompanyId_1.setCompanyId(TEST_COMPANY_ID_1); + testRegistryForCompanyId_1.setTradingClearingRegistry(TEST_TRADING_CLEARING_REGISTRY_1); + testRegistryForCompanyId_2.setCompanyId(TEST_COMPANY_ID_2); + testRegistryForCompanyId_2.setTradingClearingRegistry(TEST_TRADING_CLEARING_REGISTRY_2); + registryImdg.insert(testRegistryForCompanyId_1); + registryImdg.insert(testRegistryForCompanyId_2); + tm_tRegistry_1.setRegistryCode("TM_T"); + tm_tRegistry_1.setBalance(BigDecimal.valueOf(779L)); + om_tRegistry_1.setRegistryCode("OM_T"); + om_tRegistry_1.setBalance(BigDecimal.valueOf(2L)); + ts_tRegistry_1.setRegistryCode("TS_T"); + ts_tRegistry_1.setBalance(BigDecimal.valueOf(889L)); + os_tRegistry_1.setRegistryCode("OS_T"); + os_tRegistry_1.setBalance(BigDecimal.valueOf(1L)); + tm_tRegistry_1.setSessionId(TEST_SESSION_ID_1); + om_tRegistry_1.setSessionId(TEST_SESSION_ID_1); + ts_tRegistry_1.setSessionId(TEST_SESSION_ID_1); + os_tRegistry_1.setSessionId(TEST_SESSION_ID_1); + tm_tRegistry_2.setRegistryCode("TM_T"); + tm_tRegistry_2.setBalance(BigDecimal.valueOf(779L)); + om_tRegistry_2.setRegistryCode("OM_T"); + om_tRegistry_2.setBalance(BigDecimal.valueOf(2L)); + ts_tRegistry_2.setRegistryCode("TS_T"); + ts_tRegistry_2.setBalance(BigDecimal.valueOf(889L)); + os_tRegistry_2.setRegistryCode("OS_T"); + os_tRegistry_2.setBalance(BigDecimal.valueOf(1L)); + tm_tRegistry_2.setSessionId(TEST_SESSION_ID_2); + om_tRegistry_2.setSessionId(TEST_SESSION_ID_2); + ts_tRegistry_2.setSessionId(TEST_SESSION_ID_2); + os_tRegistry_2.setSessionId(TEST_SESSION_ID_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); + + listingImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Listing, Listing.class); + testListing_1.setSecurityId(TEST_SECURITY_ID_1); + testListing_1.setLotSize(TEST_LOT_SIZE_1); + testListing_2.setSecurityId(TEST_SECURITY_ID_2); + testListing_2.setLotSize(TEST_LOT_SIZE_2); + listingImdg.insert(testListing_1); + listingImdg.insert(testListing_2); + + testFixedIncomeSecurity_1.setSecurityId(TEST_SECURITY_ID_1); + testFixedIncomeSecurity_1.setNominalValue(TEST_NOMINAL_1); + testFixedIncomeSecurity_1.setCoupon(TEST_COUPON_1); + testFixedIncomeSecurity_2.setSecurityId(TEST_SECURITY_ID_2); + testFixedIncomeSecurity_2.setNominalValue(TEST_NOMINAL_2); + testFixedIncomeSecurity_2.setCoupon(TEST_COUPON_2); + fixedIncomeSecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, FixedIncomeSecurity.class); + fixedIncomeSecurityImdg.insert(testFixedIncomeSecurity_1); + fixedIncomeSecurityImdg.insert(testFixedIncomeSecurity_2); + + tradingClearingRegistryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class); + testTradingClearingRegistry_1.setId(TEST_TRADING_CLEARING_REGISTRY_ID_1); + testTradingClearingRegistry_1.setMoneyAccountId(TEST_MONEY_ACCOUNT_1); + testTradingClearingRegistry_1.setDepoAccountId(TEST_DEPO_ACCOUNT_1); + tradingClearingRegistryImdg.insert(testTradingClearingRegistry_1); + testTradingClearingRegistry_2.setId(TEST_TRADING_CLEARING_REGISTRY_ID_2); + testTradingClearingRegistry_2.setMoneyAccountId(TEST_MONEY_ACCOUNT_2); + testTradingClearingRegistry_2.setDepoAccountId(TEST_DEPO_ACCOUNT_2); + tradingClearingRegistryImdg.insert(testTradingClearingRegistry_2); + } + + private final Long TEST_EXCHANGE_EXECUTION_ID_1 = 777L; + private final Long TEST_EXCHANGE_EXECUTION_ID_2 = 888L; + private final Instant TEST_EXCHANGE_EXECUTION_TIME_1 = Instant.ofEpochMilli(777777777777L); + private final Instant TEST_EXCHANGE_EXECUTION_TIME_2 = Instant.ofEpochMilli(888888888888L); + private final LocalDate TEST_TRADING_DATE_1 = LocalDate.now().minus(10, ChronoUnit.DAYS); + private final LocalDate TEST_TRADING_DATE_2 = LocalDate.now().minus(20, ChronoUnit.DAYS); + private final Long TEST_TRADING_CLEARING_REGISTRY_ID_1 = 777L; + private final Long TEST_TRADING_CLEARING_REGISTRY_ID_2 = 888L; + private final String TEST_MARKET_1 = Market.fond.getKey(); + private final String TEST_MARKET_2 = Market.mkrs.getKey(); + private final BigDecimal TEST_PRICE_1 = BigDecimal.valueOf(77L); + private final BigDecimal TEST_PRICE_2 = BigDecimal.valueOf(88L); + private final BigDecimal TEST_LOTS_1 = BigDecimal.valueOf(777L); + private final BigDecimal TEST_LOTS_2 = BigDecimal.valueOf(888L); + private final BigDecimal TEST_QUANTITY_1 = BigDecimal.valueOf(7777L); + private final BigDecimal TEST_QUANTITY_2 = BigDecimal.valueOf(8888L); + private final BigDecimal TEST_INTEREST_AMOUNT_1 = BigDecimal.valueOf(77777L); + private final BigDecimal TEST_INTEREST_AMOUNT_2 = BigDecimal.valueOf(88888L); + private final String TEST_SIDE_1 = Side.SELL.getKey(); + private final String TEST_SIDE_2 = Side.BUY.getKey(); + private final String TEST_SETTLEMENT_CURRENCY_1 = "test-settlement-currency-1"; + private final String TEST_SETTLEMENT_CURRENCY_2 = "test-settlement-currency-2"; + private final Long TEST_COMPANY_ID_1 = 1007L; + private final Long TEST_COMPANY_ID_2 = 1008L; + private final String TEST_COMPANY_FULLNAME_1 = "test-company-fullname-1"; + private final String TEST_COMPANY_FULLNAME_2 = "test-company-fullname-2"; + private final Long TEST_DURATION_1 = 2007L; + private final Long TEST_DURATION_2 = 2008L; + private final String TEST_SECURITY_FULL_NAME_1 = "test-security-full-name-1"; + private final String TEST_SECURITY_FULL_NAME_2 = "test-security-full-name-2"; + private final String TEST_SECURITY_SYMBOL_1 = "test-security-symbol-1"; + private final String TEST_SECURITY_SYMBOL_2 = "test-security-symbol-2"; + private final Long TEST_SECURITY_ID_1 = 3007L; + private final Long TEST_SECURITY_ID_2 = 3008L; + private final Long TEST_COUNTER_PARTY_ID_1 = 4007L; + private final Long TEST_COUNTER_PARTY_ID_2 = 4008L; + private final String TEST_COVERAGE_STATUS_1 = Allowed.ALLOWED.getKey(); + private final String TEST_COVERAGE_STATUS_2 = Allowed.DENIED.getKey(); + private final Long TEST_SESSION_ID_1 = 10007L; + private final Long TEST_SESSION_ID_2 = 10008L; + private final LocalDate TEST_CLEARING_DATE_1 = LocalDate.now().minus(30, ChronoUnit.DAYS); + private final LocalDate TEST_CLEARING_DATE_2 = LocalDate.now().minus(40, ChronoUnit.DAYS); + private final Long TEST_EXCHANGE_ORDER_ID = 20007L; + private final BigDecimal TEST_SETTLEMENT_AMOUNT = BigDecimal.valueOf(7777777L); + private final String TEST_COMMENT = "test-comment"; + private final Long TEST_CLIENT_CODE_ID = 222222L; + private final String TEST_SETTLEMENT_CODE = "test-settlement-code"; + private final LocalDate TEST_SETTLEMENT_DATE = LocalDate.now().minus(22, ChronoUnit.DAYS); + private final Instant TEST_EXCHANGE_EXECUTION_MICROSECONDS = Instant.now().minus(777L, ChronoUnit.SECONDS); + private final BigDecimal TEST_FIRST_LEG_AMOUNT = BigDecimal.valueOf(1L); + private final BigDecimal TEST_SECOND_LEG_AMOUNT = BigDecimal.valueOf(2L); + private final LocalDate TEST_FIRST_LEG_SETTLEMENT_DATE = LocalDate.now().minus(1, ChronoUnit.DAYS); + private final LocalDate TEST_SECOND_LEG_SETTLEMENT_DATE = LocalDate.now().minus(2, ChronoUnit.DAYS); + private final String TEST_FIRST_LEG_SETTLEMENT_CODE = "test-first-leg-settlement-code"; + private final String TEST_SECOND_LEG_SETTLEMENT_CODE = "test-second-leg-settlement-code"; + private final String TEST_CONTRACT = "test_contract"; + private final String TEST_TRADING_CLEARING_REGISTRY_1 = "test-trading-clearing-registry-1"; + private final String TEST_TRADING_CLEARING_REGISTRY_2 = "test-trading-clearing-registry-2"; + private final BigDecimal TEST_LOT_SIZE_1 = BigDecimal.valueOf(12L); + private final BigDecimal TEST_LOT_SIZE_2 = BigDecimal.valueOf(34L); + private final BigDecimal TEST_NOMINAL_1 = BigDecimal.valueOf(333L); + private final BigDecimal TEST_NOMINAL_2 = BigDecimal.valueOf(444L); + private final BigDecimal TEST_COUPON_1 = BigDecimal.valueOf(3333L); + private final BigDecimal TEST_COUPON_2 = BigDecimal.valueOf(4444L); + private final Long TEST_MONEY_ACCOUNT_1 = 11L; + private final Long TEST_MONEY_ACCOUNT_2 = 12L; + private final Long TEST_DEPO_ACCOUNT_1 = 13L; + private final Long TEST_DEPO_ACCOUNT_2 = 14L; + +} diff --git a/clearing-parent/reports-service/src/test/resources/operational_liabilities_claims_expected.csv b/clearing-parent/reports-service/src/test/resources/operational_liabilities_claims_expected.csv new file mode 100644 index 000000000..d830c5b3b --- /dev/null +++ b/clearing-parent/reports-service/src/test/resources/operational_liabilities_claims_expected.csv @@ -0,0 +1,3 @@ +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 +"1","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" +"2","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","N","14.05.2023","88","","34","888","","1","","","","","1","","777","888" diff --git a/clearing-parent/test-clearing/src/main/java/ru/spcex/clearing/test/TestUtils.java b/clearing-parent/test-clearing/src/main/java/ru/spcex/clearing/test/TestUtils.java index 11b6871de..24d4f07d2 100644 --- a/clearing-parent/test-clearing/src/main/java/ru/spcex/clearing/test/TestUtils.java +++ b/clearing-parent/test-clearing/src/main/java/ru/spcex/clearing/test/TestUtils.java @@ -102,6 +102,10 @@ public class TestUtils { return getJsonBaseRequest(accountRequest, id, ActionType.DELETE); } + public static String getJsonStringForSystem(T request, long id) { + return getJsonBaseRequest(request, id, ActionType.SYSTEM); + } + private static String getJsonBaseRequest(T accountRequest, long id, ActionType actionType) { BaseRequest baseRequest = new BaseRequest<>(); baseRequest.setRequestPayload(accountRequest); diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequest.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequest.java index 4b1da114d..3cd4c9aca 100644 --- a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequest.java +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequest.java @@ -12,7 +12,7 @@ public class ReportRequest { * см. {@link ReportType} */ @JsonProperty - protected String reportId; + public String reportId; public String getReportId() { return reportId; diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestWithPeriod.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestWithPeriod.java index aca91be94..983d92d8e 100644 --- a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestWithPeriod.java +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestWithPeriod.java @@ -15,12 +15,12 @@ public class ReportRequestWithPeriod extends ReportRequest { @JsonSerialize(using = LocalDateSerializer.class) @JsonDeserialize(using = LocalDateDeserializer.class) @JsonProperty - protected LocalDate startDate; + public LocalDate startDate; @JsonSerialize(using = LocalDateSerializer.class) @JsonDeserialize(using = LocalDateDeserializer.class) @JsonProperty - protected LocalDate endDate; + public LocalDate endDate; public LocalDate getStartDate() { return startDate; diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestWithSessionId.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestWithSessionId.java index c5c2cd857..c065ad6b4 100644 --- a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestWithSessionId.java +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestWithSessionId.java @@ -10,7 +10,7 @@ public class ReportRequestWithSessionId extends ReportRequest { * Идентификатор сессии */ @JsonProperty - protected Long sessionId; + public Long sessionId; public Long getSessionId() { return sessionId; diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestWithSessionIdList.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestWithSessionIdList.java index 2202f7726..d5f9bce77 100644 --- a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestWithSessionIdList.java +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/reports/ReportRequestWithSessionIdList.java @@ -12,7 +12,7 @@ public class ReportRequestWithSessionIdList extends ReportRequest { * Идентификатор сессии */ @JsonProperty - protected List sessionId; + public List sessionId; public List getSessionIdList() { return sessionId; From 6fdfcb041fb441e45db6556f0a82e3153e7e2163 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Wed, 17 May 2023 12:05:26 +0300 Subject: [PATCH 15/32] http://jira.mfd.msk:8088/browse/CLS-290 stage 4 --- .../clearing/session/stage/TaskType.java | 4 + .../stage/impl/InclusionObligations.java | 80 +++++++++++++++++++ .../stage/task/InclusionToPoolPayload.java | 22 +++++ 3 files changed, 106 insertions(+) create mode 100644 clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InclusionObligations.java create mode 100644 clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/task/InclusionToPoolPayload.java diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/TaskType.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/TaskType.java index 86b6b740d..c1fb4a584 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/TaskType.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/TaskType.java @@ -11,5 +11,9 @@ public enum TaskType { * step 1 */ DealsPrepare, + /** + * step 4 + */ + InclusionToPool, } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InclusionObligations.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InclusionObligations.java new file mode 100644 index 000000000..4a61cf6c9 --- /dev/null +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InclusionObligations.java @@ -0,0 +1,80 @@ +package ru.spcex.clearing.session.stage.impl; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import ru.clearing.classes.statics.data.registry.Registry; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender; +import ru.spcex.clearing.session.stage.ISessionStage; +import ru.spcex.clearing.session.stage.StageResult; +import ru.spcex.clearing.session.stage.Task; +import ru.spcex.clearing.session.stage.task.InclusionToPoolPayload; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgId; +import ru.spcex.platform.imdg.api.ImdgProvider; + +import java.time.LocalDate; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + + +@Service +public class InclusionObligations implements ISessionStage { + private final Logger log = LoggerFactory.getLogger(getClass()); + //todo remove (set all in single method setImdg(provider -> setImdg1();setIdGenerator();...) + private ImdgProvider imdgProvider; + private ImdgId idGenerator; + private Imdg registryImdg; + private KafkaSender kafkaSender; + + @Autowired + public InclusionObligations(ImdgProvider imdgProvider) { + this.imdgProvider = imdgProvider; + this.idGenerator = imdgProvider.getImdgIdGenerator(); + this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); + } + + @Override + public StageResult submit(Task task) { + InclusionToPoolPayload payload = (InclusionToPoolPayload) task.getData(); + switch (task.getTaskType()) { + case InclusionToPool -> { + return inclusionToPool(payload.getSessionType(), payload.getCounterPartyId()); + } + default -> { + throw new IllegalStateException("Unknown task type: " + task.getTaskType()); + } + } + } + + + private StageResult inclusionToPool(String sessionType, Long counterPartyId) { + String sqlCondition = String.format("registryCode like '%s' and " + + "registryStatus = '%s' and " + + "settlementDate = '%s' and " + + "sessionType = '%s'", + "[O/T][S/M][*][T]", + "PROC", + LocalDate.now(), + sessionType); + + Collection obligations = registryImdg.getCollectionObjectsBySQL(sqlCondition); + Map> registryByGroupId = obligations.stream(). + filter(registry -> registry.getCompanyId().equals(counterPartyId)). + collect(Collectors.groupingBy(Registry::getGroupId)); + + for (Map.Entry> entrySet : registryByGroupId.entrySet()) { + log.debug("Processing set of registry with groupId: {}", entrySet.getKey()); + for (Registry registry : entrySet.getValue()){ + registry.setRegistryStatus("POOL"); + registryImdg.update(registry); + } + } + + return new StageResult(null, true); + } +} diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/task/InclusionToPoolPayload.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/task/InclusionToPoolPayload.java new file mode 100644 index 000000000..41bba14c6 --- /dev/null +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/task/InclusionToPoolPayload.java @@ -0,0 +1,22 @@ +package ru.spcex.clearing.session.stage.task; + +public class InclusionToPoolPayload { + private String sessionType; + private Long counterPartyId; + + public String getSessionType() { + return sessionType; + } + + public void setSessionType(String sessionType) { + this.sessionType = sessionType; + } + + public Long getCounterPartyId() { + return counterPartyId; + } + + public void setCounterPartyId(Long counterPartyId) { + this.counterPartyId = counterPartyId; + } +} From 4e37cf7757680c11aa5a6d63ac5556c5a6efc335 Mon Sep 17 00:00:00 2001 From: AKurakin Date: Wed, 17 May 2023 14:45:34 +0300 Subject: [PATCH 16/32] http://jira.mfd.msk:8088/browse/CLS-293 DDL meta 4.2 --- .../MoneyMarketSecurityController.java | 2 +- .../src/main/resources/meta/meta.json | 130 ++++++++++++++++-- .../src/main/resources/meta/meta.xml | 38 ++++- .../MoneyMarketSecurityControllerTest.java | 2 +- .../backend-api/src/test/resources/meta.json | 130 ++++++++++++++++-- .../MoneyMarketSecurity.java | 15 +- .../MoneyMarketSecurityHistory.java | 2 +- .../security/TradedMoneyMarketSecurity.java | 42 ++++++ .../db-scripts/src/main/resources/db/DDL.sql | 21 ++- .../AccountBalanceHistoryMapStore.java | 75 ---------- .../MoneyMarketSecurityHistoryMapStore.java | 14 +- .../MoneyMarketSecurityMapStore.java | 12 +- .../TradedMoneyMarketSecurityMapStore.java | 57 ++++++++ .../imdg/services/UpdateMapService.java | 9 +- .../structure/RunnableMapNamesForTesting.java | 2 + .../securities/component/ListingBuilder.java | 2 +- .../cud/MoneyMarketSecurityService.java | 2 +- .../rule/MmsDeleteValidationRule.java | 2 +- .../rule/MmsUpdateValidationRule.java | 2 +- .../service/AbstractServiceTest.java | 2 +- .../service/MoneyMarketSecurityFactory.java | 2 +- .../MoneyMarketSecurityServiceTest.java | 2 +- .../clearing/imdg/IMDGDistributedNames.java | 3 +- 23 files changed, 433 insertions(+), 135 deletions(-) rename clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/{misc => security}/MoneyMarketSecurity.java (85%) rename clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/{misc => security}/MoneyMarketSecurityHistory.java (88%) create mode 100644 clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/security/TradedMoneyMarketSecurity.java delete mode 100644 clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessevent/AccountBalanceHistoryMapStore.java create mode 100644 clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/TradedMoneyMarketSecurityMapStore.java diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/securities/MoneyMarketSecurityController.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/securities/MoneyMarketSecurityController.java index 98c321858..64a26b49a 100644 --- a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/securities/MoneyMarketSecurityController.java +++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/securities/MoneyMarketSecurityController.java @@ -8,7 +8,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; -import ru.clearing.classes.statics.data.misc.MoneyMarketSecurity; +import ru.clearing.classes.statics.data.security.MoneyMarketSecurity; import ru.spcex.clearing.backendapi.controller.queue.AbstractQueueController; import ru.spcex.clearing.backendapi.controller.request.cud.common.CommonDeleteAction; import ru.spcex.clearing.backendapi.controller.request.cud.securities.MoneyMarketSecurityNewAction; diff --git a/clearing-parent/backend-api/src/main/resources/meta/meta.json b/clearing-parent/backend-api/src/main/resources/meta/meta.json index b3bf979e0..a4d163256 100644 --- a/clearing-parent/backend-api/src/main/resources/meta/meta.json +++ b/clearing-parent/backend-api/src/main/resources/meta/meta.json @@ -1,6 +1,6 @@ { - "version": "3.5.0.21", + "version": "3.5.0.22", "enums": { @@ -2411,7 +2411,7 @@ "destination": "securities/money-securities", - "class": "ru.clearing.classes.statics.data.misc.MoneyMarketSecurity", + "class": "ru.clearing.classes.statics.data.security.MoneyMarketSecurity", "logUpdates": "true", @@ -2453,6 +2453,10 @@ {"code": "fullName", "type": 2,"length": 255,"name": "Полное наименование инструмента","shortname": "Наименование","searchable": true,"sortable": true,"visible": true,"extends": "security" } + , + {"code": "convention", + "type": 2,"length": 255,"name": "Нотация наименования инструмента","shortname": "Маска","visible": true + } , {"code": "securitySymbol", "type": 2,"length": 255,"name": "Код инструмента","shortname": "Код","searchable": true,"sortable": true,"visible": true,"extends": "security" @@ -2509,6 +2513,10 @@ {"code": "fullName", "type": 2,"length": 255,"name": "Полное наименование инструмента","shortname": "Наименование" } + , + {"code": "convention", + "type": 2,"length": 255,"name": "Нотация наименования инструмента","shortname": "Маска" + } , {"code": "lotSize", "type": 11,"name": "Размер лота","shortname": "Лот","required": true @@ -2586,6 +2594,10 @@ {"code": "fullName", "type": 2,"length": 255,"name": "Полное наименование инструмента","shortname": "Наименование" } + , + {"code": "convention", + "type": 2,"length": 255,"name": "Нотация наименования инструмента","shortname": "Маска" + } , {"code": "lotSize", "type": 11,"name": "Размер лота","shortname": "Лот" @@ -2654,6 +2666,36 @@ ] } ] + } + , + "tradedMoneyMarketSecurity": { + + "name": "Инструменты денежного рынка, учавствующие в сделках", + + "destination": "securities/traded-money-securities", + + "class": "ru.clearing.classes.statics.data.misc.TradedMoneyMarketSecurity", + + "table": "traded_money_market_security", + + "fields": [ + {"code": "securityId", + "type": 1,"dbname": "Идентификатор инструмента","name": "Наименование инструмента","shortname": "Инструмент","searchable": true,"sortable": true,"link": "security","linkCode": "shortName" + } + , + {"code": "shortName", + "type": 2,"length": 255,"name": "Краткое наименование инструмента","shortname": "Краткое наименование","searchable": true,"sortable": true,"visible": true,"extends": "security" + } + , + {"code": "securityCode", + "type": 2,"length": 255,"name": "Полный код инструмента со сроком","shortname": "Код инструмента","searchable": true,"sortable": true,"visible": true + } + , + {"code": "id", + "type": 1,"name": "Идентификатор записи","shortname": "ID","searchable": true,"sortable": true + } + ] + } , "equitySecurity": { @@ -3783,7 +3825,38 @@ "field": "updated","type": 4,"name": "Дата и время изменения записи","shortname": "Изменено","searchable": true,"sortable": true,"ignore": true } ] - + ,"actions":[ + {"method":"post", + + "name": "Досрочное изъятие части денежных средств по депозиту МКР", + + "destination": "registries/splitDeposit", + + "confirmation": "contract,outboundAmount,refundDate", + + "fields": [ + {"code": "contract", + "type": 2,"length": 255,"name": "Договор","shortname": "Договор","required": true + } + , + {"code": "outboundAmount", + "type": 10,"name": "Сумма изъятия","shortname": "Сумма","required": true + } + , + {"code": "refundDate", + "type": 6,"name": "Дата возврата","shortname": "Дата","required": true + } + , + {"code": "comment", + "type": 2,"length": 255,"name": "Основание для вывода","shortname": "Основание" + } + , + {"code": "direction", + "type": 1,"name": "Направление","shortname": "Направление","link": "inOutDirection" + } + ] + } + ] } , "account": { @@ -4046,6 +4119,10 @@ {"code": "companyId", "type": 1,"dbname": "Идентификатор компании","name": "Наименование компании","shortname": "Компания","searchable": true,"sortable": true,"visible": true,"link": "company","linkCode": "shortName" } + , + {"code": "status", + "type": 12,"dbname": "Код статуса","name": "Наименование статуса","shortname": "Статус","searchable": true,"sortable": true,"visible": true,"link": "serviceStatus","extends": "account" + } , {"code": "id", "type": 1,"name": "Идентификатор записи","shortname": "ID","searchable": true,"sortable": true @@ -4966,7 +5043,11 @@ "name": "Формирование отчетности", - "fields": [] + "fields": [ + {"code": "sessionId", + "type": 1,"name": "Клиринговая сессия","shortname": "Сессия","link": "session" + } + ] } , {"method":"post", @@ -4975,18 +5056,18 @@ "group": "Обмен с Торговой системой", - "name": "Выгрузка в торговую систему остатков секции МКР", + "name": "Выгрузка в торговую систему остатков по деньгам", "fields": [] } , {"method":"post", - "destination": "LIMF", + "destination": "LIMS", "group": "Обмен с Торговой системой", - "name": "Выгрузка в торговую систему остатков Фондовой секции", + "name": "Выгрузка в торговую систему остатков по бумагам", "fields": [] } @@ -6465,7 +6546,40 @@ "type": 1,"dbname": "Идентификатор клиринговой сессии","name": "Клиринговая сессия","shortname": "Сессия","visible": true,"searchable": true,"sortable": true,"link": "session" } ] - + ,"actions":[ + {"method":"post", + + "name": "Вывод денежных средств c регистра инициатора", + + "destination": "payment-instructions/clearing-outbound", + + "fields": [ + {"code": "senderId", + "type": 1,"name": "Участник отправитель","shortname": "Отправитель","link": "company","required": true + } + , + {"code": "addresseeId", + "type": 1,"name": "Участник получатель","shortname": "Получатель","link": "company","required": true + } + , + {"code": "paymentPurpose", + "type": 2,"length": 255,"name": "Назначение платежа","shortname": "Назначение","searchable": true,"sortable": true,"visible": true + } + , + {"code": "creditLeg_amount", + "type": 10,"name": "Сумма отправителя","shortname": "Сумма отправителя","searchable": true,"sortable": true,"visible": true + } + , + {"code": "creditLeg_accountId", + "type": 1,"name": "Наименование счета отправителя","shortname": "Счет отправителя","searchable": true,"sortable": true,"link": "account","ignore": true + } + , + {"code": "debitLeg_accountId", + "type": 1,"name": "Наименование счета получателя","shortname": "Счет получателя","searchable": true,"sortable": true,"link": "account","ignore": true + } + ] + } + ] } , "notification": { diff --git a/clearing-parent/backend-api/src/main/resources/meta/meta.xml b/clearing-parent/backend-api/src/main/resources/meta/meta.xml index a3cf956b4..6273184e6 100644 --- a/clearing-parent/backend-api/src/main/resources/meta/meta.xml +++ b/clearing-parent/backend-api/src/main/resources/meta/meta.xml @@ -1,6 +1,6 @@ - + @@ -557,7 +557,7 @@ - + @@ -567,6 +567,7 @@ + @@ -581,6 +582,7 @@ + @@ -600,6 +602,7 @@ + @@ -619,6 +622,12 @@ + + + + + + @@ -887,6 +896,15 @@ + + + + + + + + + @@ -950,6 +968,7 @@ + @@ -1160,10 +1179,11 @@ + - + - + @@ -1505,6 +1525,16 @@ + + + + + + + + + + diff --git a/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/securities/MoneyMarketSecurityControllerTest.java b/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/securities/MoneyMarketSecurityControllerTest.java index c06d659e1..f79f0469e 100644 --- a/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/securities/MoneyMarketSecurityControllerTest.java +++ b/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/securities/MoneyMarketSecurityControllerTest.java @@ -1,7 +1,7 @@ package ru.spcex.clearing.backendapi.controller.queue.securities; import org.junit.jupiter.api.Test; -import ru.clearing.classes.statics.data.misc.MoneyMarketSecurity; +import ru.clearing.classes.statics.data.security.MoneyMarketSecurity; import ru.spcex.clearing.backendapi.controller.queue.AbstractControllerTest; import ru.spcex.clearing.backendapi.controller.request.cud.common.CommonDeleteAction; import ru.spcex.clearing.backendapi.controller.request.cud.securities.MoneyMarketSecurityNewAction; diff --git a/clearing-parent/backend-api/src/test/resources/meta.json b/clearing-parent/backend-api/src/test/resources/meta.json index b3bf979e0..a4d163256 100644 --- a/clearing-parent/backend-api/src/test/resources/meta.json +++ b/clearing-parent/backend-api/src/test/resources/meta.json @@ -1,6 +1,6 @@ { - "version": "3.5.0.21", + "version": "3.5.0.22", "enums": { @@ -2411,7 +2411,7 @@ "destination": "securities/money-securities", - "class": "ru.clearing.classes.statics.data.misc.MoneyMarketSecurity", + "class": "ru.clearing.classes.statics.data.security.MoneyMarketSecurity", "logUpdates": "true", @@ -2453,6 +2453,10 @@ {"code": "fullName", "type": 2,"length": 255,"name": "Полное наименование инструмента","shortname": "Наименование","searchable": true,"sortable": true,"visible": true,"extends": "security" } + , + {"code": "convention", + "type": 2,"length": 255,"name": "Нотация наименования инструмента","shortname": "Маска","visible": true + } , {"code": "securitySymbol", "type": 2,"length": 255,"name": "Код инструмента","shortname": "Код","searchable": true,"sortable": true,"visible": true,"extends": "security" @@ -2509,6 +2513,10 @@ {"code": "fullName", "type": 2,"length": 255,"name": "Полное наименование инструмента","shortname": "Наименование" } + , + {"code": "convention", + "type": 2,"length": 255,"name": "Нотация наименования инструмента","shortname": "Маска" + } , {"code": "lotSize", "type": 11,"name": "Размер лота","shortname": "Лот","required": true @@ -2586,6 +2594,10 @@ {"code": "fullName", "type": 2,"length": 255,"name": "Полное наименование инструмента","shortname": "Наименование" } + , + {"code": "convention", + "type": 2,"length": 255,"name": "Нотация наименования инструмента","shortname": "Маска" + } , {"code": "lotSize", "type": 11,"name": "Размер лота","shortname": "Лот" @@ -2654,6 +2666,36 @@ ] } ] + } + , + "tradedMoneyMarketSecurity": { + + "name": "Инструменты денежного рынка, учавствующие в сделках", + + "destination": "securities/traded-money-securities", + + "class": "ru.clearing.classes.statics.data.misc.TradedMoneyMarketSecurity", + + "table": "traded_money_market_security", + + "fields": [ + {"code": "securityId", + "type": 1,"dbname": "Идентификатор инструмента","name": "Наименование инструмента","shortname": "Инструмент","searchable": true,"sortable": true,"link": "security","linkCode": "shortName" + } + , + {"code": "shortName", + "type": 2,"length": 255,"name": "Краткое наименование инструмента","shortname": "Краткое наименование","searchable": true,"sortable": true,"visible": true,"extends": "security" + } + , + {"code": "securityCode", + "type": 2,"length": 255,"name": "Полный код инструмента со сроком","shortname": "Код инструмента","searchable": true,"sortable": true,"visible": true + } + , + {"code": "id", + "type": 1,"name": "Идентификатор записи","shortname": "ID","searchable": true,"sortable": true + } + ] + } , "equitySecurity": { @@ -3783,7 +3825,38 @@ "field": "updated","type": 4,"name": "Дата и время изменения записи","shortname": "Изменено","searchable": true,"sortable": true,"ignore": true } ] - + ,"actions":[ + {"method":"post", + + "name": "Досрочное изъятие части денежных средств по депозиту МКР", + + "destination": "registries/splitDeposit", + + "confirmation": "contract,outboundAmount,refundDate", + + "fields": [ + {"code": "contract", + "type": 2,"length": 255,"name": "Договор","shortname": "Договор","required": true + } + , + {"code": "outboundAmount", + "type": 10,"name": "Сумма изъятия","shortname": "Сумма","required": true + } + , + {"code": "refundDate", + "type": 6,"name": "Дата возврата","shortname": "Дата","required": true + } + , + {"code": "comment", + "type": 2,"length": 255,"name": "Основание для вывода","shortname": "Основание" + } + , + {"code": "direction", + "type": 1,"name": "Направление","shortname": "Направление","link": "inOutDirection" + } + ] + } + ] } , "account": { @@ -4046,6 +4119,10 @@ {"code": "companyId", "type": 1,"dbname": "Идентификатор компании","name": "Наименование компании","shortname": "Компания","searchable": true,"sortable": true,"visible": true,"link": "company","linkCode": "shortName" } + , + {"code": "status", + "type": 12,"dbname": "Код статуса","name": "Наименование статуса","shortname": "Статус","searchable": true,"sortable": true,"visible": true,"link": "serviceStatus","extends": "account" + } , {"code": "id", "type": 1,"name": "Идентификатор записи","shortname": "ID","searchable": true,"sortable": true @@ -4966,7 +5043,11 @@ "name": "Формирование отчетности", - "fields": [] + "fields": [ + {"code": "sessionId", + "type": 1,"name": "Клиринговая сессия","shortname": "Сессия","link": "session" + } + ] } , {"method":"post", @@ -4975,18 +5056,18 @@ "group": "Обмен с Торговой системой", - "name": "Выгрузка в торговую систему остатков секции МКР", + "name": "Выгрузка в торговую систему остатков по деньгам", "fields": [] } , {"method":"post", - "destination": "LIMF", + "destination": "LIMS", "group": "Обмен с Торговой системой", - "name": "Выгрузка в торговую систему остатков Фондовой секции", + "name": "Выгрузка в торговую систему остатков по бумагам", "fields": [] } @@ -6465,7 +6546,40 @@ "type": 1,"dbname": "Идентификатор клиринговой сессии","name": "Клиринговая сессия","shortname": "Сессия","visible": true,"searchable": true,"sortable": true,"link": "session" } ] - + ,"actions":[ + {"method":"post", + + "name": "Вывод денежных средств c регистра инициатора", + + "destination": "payment-instructions/clearing-outbound", + + "fields": [ + {"code": "senderId", + "type": 1,"name": "Участник отправитель","shortname": "Отправитель","link": "company","required": true + } + , + {"code": "addresseeId", + "type": 1,"name": "Участник получатель","shortname": "Получатель","link": "company","required": true + } + , + {"code": "paymentPurpose", + "type": 2,"length": 255,"name": "Назначение платежа","shortname": "Назначение","searchable": true,"sortable": true,"visible": true + } + , + {"code": "creditLeg_amount", + "type": 10,"name": "Сумма отправителя","shortname": "Сумма отправителя","searchable": true,"sortable": true,"visible": true + } + , + {"code": "creditLeg_accountId", + "type": 1,"name": "Наименование счета отправителя","shortname": "Счет отправителя","searchable": true,"sortable": true,"link": "account","ignore": true + } + , + {"code": "debitLeg_accountId", + "type": 1,"name": "Наименование счета получателя","shortname": "Счет получателя","searchable": true,"sortable": true,"link": "account","ignore": true + } + ] + } + ] } , "notification": { diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/misc/MoneyMarketSecurity.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/security/MoneyMarketSecurity.java similarity index 85% rename from clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/misc/MoneyMarketSecurity.java rename to clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/security/MoneyMarketSecurity.java index d4e5741ef..7e91af78f 100644 --- a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/misc/MoneyMarketSecurity.java +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/security/MoneyMarketSecurity.java @@ -1,4 +1,4 @@ -package ru.clearing.classes.statics.data.misc; +package ru.clearing.classes.statics.data.security; import ru.clearing.classes.statics.data.security.Security; @@ -11,12 +11,13 @@ import java.time.LocalDate; * DB table: MONEY_MARKET_SECURITY **/ public class MoneyMarketSecurity extends Security { - private Long securityId;// (linked to security) + private Long securityId; private String description; private LocalDate startDate; private LocalDate endDate; private BigDecimal nominalValue; - private String nominalCurrency; // (linked to currencyCode) + private String nominalCurrency; + private String convention; private String termType; private BigDecimal lotSize; @@ -68,6 +69,14 @@ public class MoneyMarketSecurity extends Security { this.nominalCurrency = nominalCurrency; } + public String getConvention() { + return convention; + } + + public void setConvention(String convention) { + this.convention = convention; + } + public String getTermType() { return termType; } diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/misc/MoneyMarketSecurityHistory.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/security/MoneyMarketSecurityHistory.java similarity index 88% rename from clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/misc/MoneyMarketSecurityHistory.java rename to clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/security/MoneyMarketSecurityHistory.java index f24b02f70..98474ad7c 100644 --- a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/misc/MoneyMarketSecurityHistory.java +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/security/MoneyMarketSecurityHistory.java @@ -1,4 +1,4 @@ -package ru.clearing.classes.statics.data.misc; +package ru.clearing.classes.statics.data.security; import ru.clearing.classes.ConstSerializable; import ru.clearing.classes.objects.BusinessEvent; diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/security/TradedMoneyMarketSecurity.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/security/TradedMoneyMarketSecurity.java new file mode 100644 index 000000000..e412e01c8 --- /dev/null +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/security/TradedMoneyMarketSecurity.java @@ -0,0 +1,42 @@ +package ru.clearing.classes.statics.data.security; + +import ru.clearing.classes.ConstSerializable; +import ru.spcex.platform.classes.base.SpcexObjectBase; + +/** + * Инструменты денежного рынка, учавствующие в сделках + *

+ * DB table: TRADED_MONEY_MARKET_SECURITY + **/ +public class TradedMoneyMarketSecurity extends SpcexObjectBase { + private static final long serialVersionUID = ConstSerializable.serialVersionUID; + + private Long securityId; + private String shortName; + private String securityCode; + + public Long getSecurityId() { + return securityId; + } + + public void setSecurityId(Long value) { + this.securityId = value; + } + + public String getShortName() { + return shortName; + } + + public void setShortName(String value) { + this.shortName = value; + } + + public String getSecurityCode() { + return securityCode; + } + + public void setSecurityCode(String value) { + this.securityCode = value; + } + +} \ No newline at end of file diff --git a/clearing-parent/db-scripts/src/main/resources/db/DDL.sql b/clearing-parent/db-scripts/src/main/resources/db/DDL.sql index fc80f1e1c..cb3537967 100644 --- a/clearing-parent/db-scripts/src/main/resources/db/DDL.sql +++ b/clearing-parent/db-scripts/src/main/resources/db/DDL.sql @@ -1,4 +1,4 @@ --- DB version: 3.5.0.21 +-- DB version: 3.5.0.22 /* Dictionaries */ -- allowed - Справочник признаков допустимости использования объектов @@ -1164,7 +1164,7 @@ COMMENT ON COLUMN CURRENCY_HISTORY.ID IS 'Идентификатор запис -- moneyMarketSecurity - Инструменты Денежного рынка DROP TABLE IF EXISTS MONEY_MARKET_SECURITY; -CREATE TABLE MONEY_MARKET_SECURITY(SECURITY_ID bigint, DESCRIPTION varchar(255), START_DATE date, END_DATE date, NOMINAL_VALUE numeric(72,18), NOMINAL_CURRENCY varchar(4), TERM_TYPE varchar(4), ID bigint PRIMARY KEY); +CREATE TABLE MONEY_MARKET_SECURITY(SECURITY_ID bigint, DESCRIPTION varchar(255), START_DATE date, END_DATE date, NOMINAL_VALUE numeric(72,18), NOMINAL_CURRENCY varchar(4), CONVENTION varchar(255), TERM_TYPE varchar(4), ID bigint PRIMARY KEY); COMMENT ON TABLE MONEY_MARKET_SECURITY IS 'Инструменты Денежного рынка'; COMMENT ON COLUMN MONEY_MARKET_SECURITY.SECURITY_ID IS 'Идентификатор инструмента (linked to security)'; @@ -1179,6 +1179,8 @@ COMMENT ON COLUMN MONEY_MARKET_SECURITY.NOMINAL_VALUE IS 'Номинал'; COMMENT ON COLUMN MONEY_MARKET_SECURITY.NOMINAL_CURRENCY IS 'Код валюты номинала (linked to currencyCode)'; +COMMENT ON COLUMN MONEY_MARKET_SECURITY.CONVENTION IS 'Нотация наименования инструмента'; + COMMENT ON COLUMN MONEY_MARKET_SECURITY.TERM_TYPE IS 'Код вида инструмента (linked to termType)'; COMMENT ON COLUMN MONEY_MARKET_SECURITY.ID IS 'Идентификатор записи'; @@ -1186,7 +1188,7 @@ COMMENT ON COLUMN MONEY_MARKET_SECURITY.ID IS 'Идентификатор зап -- History log of moneyMarketSecurity - Инструменты Денежного рынка DROP TABLE IF EXISTS MONEY_MARKET_SECURITY_HISTORY; -CREATE TABLE MONEY_MARKET_SECURITY_HISTORY(MONEY_MARKET_SECURITY_ID BIGINT NOT NULL, EVENT_TIME timestamp, EVENT_USER_ID BIGINT, EVENT_TYPE VARCHAR(4), SECURITY_ID bigint, DESCRIPTION varchar(255), START_DATE date, END_DATE date, NOMINAL_VALUE numeric(72,18), NOMINAL_CURRENCY varchar(4), TERM_TYPE varchar(4), ID bigint PRIMARY KEY); +CREATE TABLE MONEY_MARKET_SECURITY_HISTORY(MONEY_MARKET_SECURITY_ID BIGINT NOT NULL, EVENT_TIME timestamp, EVENT_USER_ID BIGINT, EVENT_TYPE VARCHAR(4), SECURITY_ID bigint, DESCRIPTION varchar(255), START_DATE date, END_DATE date, NOMINAL_VALUE numeric(72,18), NOMINAL_CURRENCY varchar(4), CONVENTION varchar(255), TERM_TYPE varchar(4), ID bigint PRIMARY KEY); COMMENT ON TABLE MONEY_MARKET_SECURITY_HISTORY IS 'История изменений таблицы moneyMarketSecurity'; COMMENT ON COLUMN MONEY_MARKET_SECURITY_HISTORY.MONEY_MARKET_SECURITY_ID IS 'Идентификатор записи в таблице MONEY_MARKET_SECURITY'; COMMENT ON COLUMN MONEY_MARKET_SECURITY_HISTORY.EVENT_TIME IS 'Дата и время изменения'; @@ -1205,10 +1207,23 @@ COMMENT ON COLUMN MONEY_MARKET_SECURITY_HISTORY.NOMINAL_VALUE IS 'Номинал COMMENT ON COLUMN MONEY_MARKET_SECURITY_HISTORY.NOMINAL_CURRENCY IS 'Код валюты номинала (linked to currencyCode)'; +COMMENT ON COLUMN MONEY_MARKET_SECURITY_HISTORY.CONVENTION IS 'Нотация наименования инструмента'; + COMMENT ON COLUMN MONEY_MARKET_SECURITY_HISTORY.TERM_TYPE IS 'Код вида инструмента (linked to termType)'; COMMENT ON COLUMN MONEY_MARKET_SECURITY_HISTORY.ID IS 'Идентификатор записи'; +-- tradedMoneyMarketSecurity - Инструменты денежного рынка, учавствующие в сделках +DROP TABLE IF EXISTS TRADED_MONEY_MARKET_SECURITY; +CREATE TABLE TRADED_MONEY_MARKET_SECURITY(SECURITY_ID bigint, SECURITY_CODE varchar(255), ID bigint PRIMARY KEY); +COMMENT ON TABLE TRADED_MONEY_MARKET_SECURITY IS 'Инструменты денежного рынка, учавствующие в сделках'; + +COMMENT ON COLUMN TRADED_MONEY_MARKET_SECURITY.SECURITY_ID IS 'Идентификатор инструмента (linked to security)'; + +COMMENT ON COLUMN TRADED_MONEY_MARKET_SECURITY.SECURITY_CODE IS 'Полный код инструмента со сроком'; + +COMMENT ON COLUMN TRADED_MONEY_MARKET_SECURITY.ID IS 'Идентификатор записи'; + -- equitySecurity - Акции DROP TABLE IF EXISTS EQUITY_SECURITY; CREATE TABLE EQUITY_SECURITY(SECURITY_ID bigint, SHARE_TYPE varchar(4), ID bigint PRIMARY KEY); diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessevent/AccountBalanceHistoryMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessevent/AccountBalanceHistoryMapStore.java deleted file mode 100644 index f120be004..000000000 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessevent/AccountBalanceHistoryMapStore.java +++ /dev/null @@ -1,75 +0,0 @@ -package ru.spcex.clearing.imdg.businessevent; - -import org.springframework.jdbc.core.JdbcTemplate; -import org.springframework.stereotype.Component; -import ru.clearing.classes.statics.data.account.AccountBalance; -import ru.clearing.classes.statics.data.account.AccountBalanceHistory; -import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.imdg.base.TemplateEventMapStore; -import ru.spcex.platform.utils.time.TimeUtil; - -@Deprecated -//@Component -public class AccountBalanceHistoryMapStore extends TemplateEventMapStore { - - public AccountBalanceHistoryMapStore(JdbcTemplate jdbcTemplate) { - super(jdbcTemplate); - } - - @Override - public String getMapName() { - return IMDGDistributedNames.Map_AccountBalanceHistory; - } - - @Override - public String getTableName() { - return "ACCOUNT_BALANCE_HISTORY"; - } - - @Override - public String[] getFields() { - return new String[]{"ID", "EVENT_TIME", "EVENT_TYPE", "EVENT_USER_ID", - "ACCOUNT_BALANCE_ID", "COMPANY_ID", "CREATED_AT", "UPDATED_AT", "ACCOUNT_ID", "ACCOUNT_TYPE", - "ACCOUNT", "OPEN_BALANCE_AMOUNT", "START_BALANCE_AMOUNT", "CLOSE_BALANCE_AMOUNT", - "TRADE_BALANCE_AMOUNT", "FREE_BALANCE_AMOUNT", "CHANGE_BALANCE_AMOUNT", - "CREDIT_AMOUNT", "DEBIT_AMOUNT", "BALANCE_AMOUNT", "BALANCE_ACCOUNT_TYPE", - "CLEARING_DATE", "CURRENCY_CODE", "TRADING_CODE", "SHORT_NAME", "FULL_NAME" - }; - } - - @Override - public Object[] objectToField(AccountBalanceHistory updateLog) { - AccountBalance object = updateLog.getObject(); - Object[] args = new Object[]{ - updateLog.getId(), - TimeUtil.toDateFromInstant(updateLog.getEventTime()), - updateLog.getEventType(), - updateLog.getUserId(), - - object.getId(), - object.getCompanyId(), - TimeUtil.toDateFromInstant(object.getCreated()), - TimeUtil.toDateFromInstant(object.getUpdated()), - object.getAccountId(), - object.getAccountType(), - object.getAccount(), - object.getOpenBalanceAmount(), - object.getStartBalanceAmount(), - object.getCloseBalanceAmount(), - object.getTradeBalanceAmount(), - object.getFreeBalanceAmount(), - object.getChangeBalanceAmount(), - object.getCreditAmount(), - object.getDebitAmount(), - object.getBalanceAmount(), - object.getBalanceAccountType(), - TimeUtil.toDateFromLocalDate(object.getClearingDate()), - object.getCurrencyCode(), - object.getTradingCode(), - object.getShortName(), - object.getFullName() - }; - return args; - } - -} diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessevent/MoneyMarketSecurityHistoryMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessevent/MoneyMarketSecurityHistoryMapStore.java index 9d2cae9ad..bcba1991d 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessevent/MoneyMarketSecurityHistoryMapStore.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessevent/MoneyMarketSecurityHistoryMapStore.java @@ -3,15 +3,10 @@ package ru.spcex.clearing.imdg.businessevent; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Component; import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.clearing.classes.statics.data.misc.MoneyMarketSecurity; -import ru.clearing.classes.statics.data.misc.MoneyMarketSecurityHistory; -import ru.spcex.clearing.imdg.base.TemplateEventMapStore; +import ru.clearing.classes.statics.data.security.MoneyMarketSecurity; +import ru.clearing.classes.statics.data.security.MoneyMarketSecurityHistory; import ru.spcex.platform.utils.time.TimeUtil; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - @Component public class MoneyMarketSecurityHistoryMapStore extends ASecurityHistoryMapStore { @@ -34,7 +29,7 @@ public class MoneyMarketSecurityHistoryMapStore extends ASecurityHistoryMapStore public String[] getFields() { return new String[]{ "ID", "EVENT_TIME", "EVENT_USER_ID", "EVENT_TYPE", - "MONEY_MARKET_SECURITY_ID", "SECURITY_ID", "DESCRIPTION", "START_DATE", "END_DATE", "NOMINAL_VALUE", "NOMINAL_CURRENCY", "TERM_TYPE"}; + "MONEY_MARKET_SECURITY_ID", "SECURITY_ID", "DESCRIPTION", "START_DATE", "END_DATE", "NOMINAL_VALUE", "NOMINAL_CURRENCY", "TERM_TYPE", "CONVENTION"}; } @@ -54,7 +49,8 @@ public class MoneyMarketSecurityHistoryMapStore extends ASecurityHistoryMapStore TimeUtil.toDateFromLocalDate(moneyMarketSecurity.getEndDate()), moneyMarketSecurity.getNominalValue(), moneyMarketSecurity.getNominalCurrency(), - moneyMarketSecurity.getTermType() + moneyMarketSecurity.getTermType(), + moneyMarketSecurity.getConvention() }; return args; } diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/MoneyMarketSecurityMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/MoneyMarketSecurityMapStore.java index 75651a2c5..d642126f6 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/MoneyMarketSecurityMapStore.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/MoneyMarketSecurityMapStore.java @@ -2,17 +2,13 @@ package ru.spcex.clearing.imdg.businessobject; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Component; -import ru.clearing.classes.statics.data.misc.MoneyMarketSecurity; +import ru.clearing.classes.statics.data.security.MoneyMarketSecurity; import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.imdg.base.TemplateMapStore; import ru.spcex.platform.utils.time.TimeUtil; import java.math.BigDecimal; import java.sql.ResultSet; import java.sql.SQLException; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; @Component public class MoneyMarketSecurityMapStore extends ASecurityMapStore { @@ -41,7 +37,7 @@ public class MoneyMarketSecurityMapStore extends ASecurityMapStore { + + public TradedMoneyMarketSecurityMapStore(JdbcTemplate jdbcTemplate) { + super(jdbcTemplate); + } + + @Override + public String getMapName() { + return IMDGDistributedNames.Map_TradedMoneyMarketSecurity; + } + + @Override + public String getTableName() { + return "TRADED_MONEY_MARKET_SECURITY"; + } + + @Override + public String[] getFields() { + return new String[]{ + "SECURITY_ID", "SHORT_NAME", "SECURITY_CODE", "ID" + }; + } + + @Override + public TradedMoneyMarketSecurity objectReader(ResultSet resultSet) throws SQLException { + TradedMoneyMarketSecurity object = new TradedMoneyMarketSecurity(); + object.setSecurityId(resultSet.getObject("SECURITY_ID", Long.class)); + object.setShortName(resultSet.getObject("SHORT_NAME", String.class)); + object.setSecurityCode(resultSet.getObject("SECURITY_CODE", String.class)); + object.setId(resultSet.getObject("ID", Long.class)); + return object; + } + + @Override + public Object[] objectToField(TradedMoneyMarketSecurity object) { + Object[] args = new Object[]{ + object.getSecurityId(), + object.getShortName(), + object.getSecurityCode(), + object.getId() + }; + return args; + } + +} \ No newline at end of file diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/services/UpdateMapService.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/services/UpdateMapService.java index 6b3590754..19d300c15 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/services/UpdateMapService.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/services/UpdateMapService.java @@ -15,6 +15,8 @@ import ru.clearing.classes.statics.data.instrument.issue.*; import ru.clearing.classes.statics.data.misc.*; import ru.clearing.classes.statics.data.profile.ProfileDocument; import ru.clearing.classes.statics.data.profile.ProfileDocumentHistory; +import ru.clearing.classes.statics.data.security.MoneyMarketSecurity; +import ru.clearing.classes.statics.data.security.MoneyMarketSecurityHistory; import ru.clearing.classes.statics.data.security.Security; import ru.clearing.classes.statics.data.security.SecurityHistory; import ru.clearing.classes.statics.data.user.User; @@ -61,12 +63,7 @@ public class UpdateMapService extends AbstractUpdateMapService { protected void entryModified(EntryEvent event, String eventType) { log.debug("{} {}", event, eventType); Object value = (EVENT_DELETE.equals(eventType) ? event.getOldValue() : event.getValue()); - if (value instanceof AccountBalance) { - AccountBalanceHistory accountBalanceHistory = new AccountBalanceHistory(); - createBusinessEvent(accountBalanceHistory, eventType); - accountBalanceHistory.setObject((AccountBalance) value); - hazelcastServerInstance.getMap(IMDGDistributedNames.Map_AccountBalanceHistory).put(accountBalanceHistory.getId(), accountBalanceHistory); - } else if (value instanceof Account) { + if (value instanceof Account) { AccountHistory accountHistory = new AccountHistory(); createBusinessEvent(accountHistory, eventType); accountHistory.setObject((Account) value); diff --git a/clearing-parent/imdg/src/test/java/ru/spcex/clearing/imdg/structure/RunnableMapNamesForTesting.java b/clearing-parent/imdg/src/test/java/ru/spcex/clearing/imdg/structure/RunnableMapNamesForTesting.java index 55572a080..5f02f1d24 100644 --- a/clearing-parent/imdg/src/test/java/ru/spcex/clearing/imdg/structure/RunnableMapNamesForTesting.java +++ b/clearing-parent/imdg/src/test/java/ru/spcex/clearing/imdg/structure/RunnableMapNamesForTesting.java @@ -23,6 +23,8 @@ import ru.clearing.classes.statics.data.profile.ProfileDocumentHistory; import ru.clearing.classes.statics.data.register.*; import ru.clearing.classes.statics.data.scheduler.*; import ru.clearing.classes.statics.data.sdf.*; +import ru.clearing.classes.statics.data.security.MoneyMarketSecurity; +import ru.clearing.classes.statics.data.security.MoneyMarketSecurityHistory; import ru.clearing.classes.statics.data.statement.Statement; import ru.clearing.classes.statics.data.user.*; import ru.clearing.platform.dictionary.*; diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/component/ListingBuilder.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/component/ListingBuilder.java index dba5c2768..cffaa31e3 100644 --- a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/component/ListingBuilder.java +++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/component/ListingBuilder.java @@ -3,7 +3,7 @@ package ru.spcex.clearing.securities.component; import ru.clearing.classes.statics.data.instrument.issue.EquitySecurity; import ru.clearing.classes.statics.data.instrument.issue.FixedIncomeSecurity; import ru.clearing.classes.statics.data.misc.Listing; -import ru.clearing.classes.statics.data.misc.MoneyMarketSecurity; +import ru.clearing.classes.statics.data.security.MoneyMarketSecurity; import ru.spcex.clearing.platform.messaging.domain.cud.securitites.EquitySecurityNewRequest; import ru.spcex.clearing.platform.messaging.domain.cud.securitites.FixedIncomeSecurityNewRequest; import ru.spcex.clearing.platform.messaging.domain.cud.securitites.MoneyMarketSecurityNewRequest; diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/MoneyMarketSecurityService.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/MoneyMarketSecurityService.java index 285e0d3d4..3b37d72a7 100644 --- a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/MoneyMarketSecurityService.java +++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/MoneyMarketSecurityService.java @@ -8,7 +8,7 @@ import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import ru.clearing.classes.statics.data.misc.Listing; -import ru.clearing.classes.statics.data.misc.MoneyMarketSecurity; +import ru.clearing.classes.statics.data.security.MoneyMarketSecurity; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.platform.messaging.domain.BaseRequest; import ru.spcex.clearing.platform.messaging.domain.Consts; diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/rule/MmsDeleteValidationRule.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/rule/MmsDeleteValidationRule.java index bbf126857..71ca83735 100644 --- a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/rule/MmsDeleteValidationRule.java +++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/rule/MmsDeleteValidationRule.java @@ -1,6 +1,6 @@ package ru.spcex.clearing.securities.validation.rule; -import ru.clearing.classes.statics.data.misc.MoneyMarketSecurity; +import ru.clearing.classes.statics.data.security.MoneyMarketSecurity; import ru.spcex.clearing.platform.messaging.domain.cud.securitites.MoneyMarketSecurityUpdateRequest; import ru.spcex.clearing.securities.errors.SecuritiesError; import ru.spcex.platform.enumeration.Status; diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/rule/MmsUpdateValidationRule.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/rule/MmsUpdateValidationRule.java index c2b681924..be9a064d0 100644 --- a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/rule/MmsUpdateValidationRule.java +++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/validation/rule/MmsUpdateValidationRule.java @@ -1,6 +1,6 @@ package ru.spcex.clearing.securities.validation.rule; -import ru.clearing.classes.statics.data.misc.MoneyMarketSecurity; +import ru.clearing.classes.statics.data.security.MoneyMarketSecurity; import ru.spcex.clearing.platform.messaging.domain.cud.securitites.MoneyMarketSecurityUpdateRequest; import ru.spcex.clearing.securities.errors.SecuritiesError; import ru.spcex.platform.enumeration.Status; diff --git a/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/AbstractServiceTest.java b/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/AbstractServiceTest.java index 7de280a46..b7f895ea1 100644 --- a/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/AbstractServiceTest.java +++ b/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/AbstractServiceTest.java @@ -12,7 +12,7 @@ import ru.clearing.classes.statics.data.instrument.issue.EquitySecurity; import ru.clearing.classes.statics.data.instrument.issue.FixedIncomeSecurity; import ru.clearing.classes.statics.data.misc.Currency; import ru.clearing.classes.statics.data.misc.Listing; -import ru.clearing.classes.statics.data.misc.MoneyMarketSecurity; +import ru.clearing.classes.statics.data.security.MoneyMarketSecurity; import ru.clearing.platform.dictionary.*; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.securities.config.ErrorResolverConfig; diff --git a/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/MoneyMarketSecurityFactory.java b/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/MoneyMarketSecurityFactory.java index d90f48819..780630784 100644 --- a/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/MoneyMarketSecurityFactory.java +++ b/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/MoneyMarketSecurityFactory.java @@ -1,6 +1,6 @@ package ru.spcex.clearing.securities.service; -import ru.clearing.classes.statics.data.misc.MoneyMarketSecurity; +import ru.clearing.classes.statics.data.security.MoneyMarketSecurity; import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; import ru.spcex.clearing.platform.messaging.domain.cud.securitites.MoneyMarketSecurityNewRequest; import ru.spcex.clearing.platform.messaging.domain.cud.securitites.MoneyMarketSecurityUpdateRequest; diff --git a/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/MoneyMarketSecurityServiceTest.java b/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/MoneyMarketSecurityServiceTest.java index c9709e640..80f5141d0 100644 --- a/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/MoneyMarketSecurityServiceTest.java +++ b/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/MoneyMarketSecurityServiceTest.java @@ -4,7 +4,7 @@ import org.apache.kafka.clients.consumer.MockConsumer; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import ru.clearing.classes.statics.data.misc.Listing; -import ru.clearing.classes.statics.data.misc.MoneyMarketSecurity; +import ru.clearing.classes.statics.data.security.MoneyMarketSecurity; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.platform.messaging.domain.BaseRequest; import ru.spcex.clearing.platform.messaging.domain.Consts; diff --git a/platform-parent/platform-imdg-api/src/main/java/ru/spcex/clearing/imdg/IMDGDistributedNames.java b/platform-parent/platform-imdg-api/src/main/java/ru/spcex/clearing/imdg/IMDGDistributedNames.java index 176213160..4e656358b 100644 --- a/platform-parent/platform-imdg-api/src/main/java/ru/spcex/clearing/imdg/IMDGDistributedNames.java +++ b/platform-parent/platform-imdg-api/src/main/java/ru/spcex/clearing/imdg/IMDGDistributedNames.java @@ -14,7 +14,6 @@ public final class IMDGDistributedNames { @Deprecated public static final String Map_AccountBalance = "Map_AccountBalance"; public static final String Map_AccountHistory = "Map_AccountHistory"; - public static final String Map_AccountBalanceHistory = "Map_AccountBalanceHistory"; public static final String Map_Relation = "Map_Relation"; public static final String Map_ClearingAccount = "Map_ClearingAccount"; public static final String Map_ClearingAccountHistory = "Map_ClearingAccountHistory"; @@ -32,7 +31,6 @@ public final class IMDGDistributedNames { public static final String Map_RelationHistory = "Map_RelationHistory"; public static final String Map_ErrorText = "Map_ErrorText"; public static final String Map_Statement = "Map_Statement"; - public static final String Map_MarketAccess = "Map_MarketAccess"; // todo unused? public static final String Map_MarketTypeDictionary = "Map_MarketTypeDictionary"; public static final String Map_MarketDataLiquidation = "Map_MarketDataLiquidation"; public static final String Map_UserConnect = "Map_UserConnect"; @@ -109,6 +107,7 @@ public final class IMDGDistributedNames { public static final String Map_StatementTypeDictionary = "Map_StatementTypeDictionary"; public static final String Map_TermTypeDictionary = "Map_TermTypeDictionary"; public static final String Map_TransactionStatusDictionary = "Map_TransactionStatusDictionary"; + public static final String Map_TradedMoneyMarketSecurity = "Map_TradedMoneyMarketSecurity"; public static final String Map_CourierTypeDictionary = "Map_CourierTypeDictionary"; public static final String Map_TaskDictionary = "Map_TaskDictionary"; public static final String Map_TaskStatusDictionary = "Map_TaskStatusDictionary"; From 15abb8cbfaf229aa5b71d4828e7542075c44ebc8 Mon Sep 17 00:00:00 2001 From: akulikov Date: Wed, 17 May 2023 11:00:15 +0300 Subject: [PATCH 17/32] tests done --- .../reports/config/ReportBuildersConfig.java | 40 +- .../reports/reports/CSVReportBuilder.java | 2 +- ...a => ExecutedDealReportBuilderCommon.java} | 35 +- .../ExecutedDealReportBuilder_INFTYPE_1.java | 34 + .../ExecutedDealReportBuilder_INFTYPE_2.java | 34 + .../ExecutedDealReportBuilder_INFTYPE_3.java | 28 + .../ExecutedDealReportBuilder_INFTYPE_4.java | 34 + .../reports/bp/MoneyChangeReportBuilder.java | 22 +- ...ationalLiabilitiesClaimsReportBuilder.java | 2 +- .../OperationalMoneyChangeReportBuilder.java | 6 +- .../PeriodLiabilitiesClaimsReportBuilder.java | 6 +- .../bp/PeriodMoneyChangeReportBuilder.java | 6 +- ...SummaryLiabilitiesClaimsReportBuilder.java | 6 +- .../bp/SummaryMoneyChangeReportBuilder.java | 6 +- .../bp/UnfulfilledDealReportBuilder.java | 10 +- .../reports/services/ReportService.java | 104 ++- .../reports/services/ReportServiceTest.java | 707 +++++++++++++++--- .../KS_BR_PFX64_INFTYPE_1_expected.csv | 2 + .../KS_BR_PFX64_INFTYPE_2_expected.csv | 2 + .../KS_BR_PFX64_INFTYPE_3_expected.csv | 2 + .../KS_BR_PFX64_INFTYPE_4_expected.csv | 2 + .../KS_BR_PFX64_empty_expected.csv | 1 + ...perational_liabilities_claims_expected.csv | 3 + .../operational_money_change_expected.csv | 3 + .../period_liabilities_claims_expected.csv | 3 + .../period_money_change_expected.csv | 3 + .../summary_liabilities_claims_expected.csv} | 4 +- .../summary_money_change_expected.csv | 3 + .../unfulfilled_deal_report_expected.csv | 2 + 29 files changed, 909 insertions(+), 203 deletions(-) rename clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/{ExecutedDealReportBuilder.java => ExecutedDealReportBuilderCommon.java} (74%) create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_1.java create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_2.java create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_3.java create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_4.java create mode 100644 clearing-parent/reports-service/src/test/resources/expected_reports_csv/KS_BR_PFX64_INFTYPE_1_expected.csv create mode 100644 clearing-parent/reports-service/src/test/resources/expected_reports_csv/KS_BR_PFX64_INFTYPE_2_expected.csv create mode 100644 clearing-parent/reports-service/src/test/resources/expected_reports_csv/KS_BR_PFX64_INFTYPE_3_expected.csv create mode 100644 clearing-parent/reports-service/src/test/resources/expected_reports_csv/KS_BR_PFX64_INFTYPE_4_expected.csv create mode 100644 clearing-parent/reports-service/src/test/resources/expected_reports_csv/KS_BR_PFX64_empty_expected.csv create mode 100644 clearing-parent/reports-service/src/test/resources/expected_reports_csv/operational_liabilities_claims_expected.csv create mode 100644 clearing-parent/reports-service/src/test/resources/expected_reports_csv/operational_money_change_expected.csv create mode 100644 clearing-parent/reports-service/src/test/resources/expected_reports_csv/period_liabilities_claims_expected.csv create mode 100644 clearing-parent/reports-service/src/test/resources/expected_reports_csv/period_money_change_expected.csv rename clearing-parent/reports-service/src/test/resources/{operational_liabilities_claims_expected.csv => expected_reports_csv/summary_liabilities_claims_expected.csv} (65%) create mode 100644 clearing-parent/reports-service/src/test/resources/expected_reports_csv/summary_money_change_expected.csv create mode 100644 clearing-parent/reports-service/src/test/resources/expected_reports_csv/unfulfilled_deal_report_expected.csv 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 baa895609..b88e8fd6f 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 @@ -8,39 +8,47 @@ import ru.spcex.platform.enumeration.ReportType; import ru.spcex.platform.imdg.api.ImdgProvider; import java.util.HashMap; +import java.util.List; import java.util.Map; @Configuration public class ReportBuildersConfig { @Bean("reportBuildersWithoutParams") - public Map> reportBuildersWithoutParams(ImdgProvider imdgProvider) { - Map> resultMap = new HashMap<>(); - resultMap.put(ReportType.SUMMARY_LIABILITIES_CLAIMS, new SummaryLiabilitiesClaimsReportBuilder(imdgProvider)); - resultMap.put(ReportType.SUMMARY_MONEY_CHANGE, new SummaryMoneyChangeReportBuilder(imdgProvider)); + public Map>> reportBuildersWithoutParams(ImdgProvider imdgProvider) { + Map>> resultMap = new HashMap<>(); + resultMap.put(ReportType.SUMMARY_LIABILITIES_CLAIMS, List.of(new SummaryLiabilitiesClaimsReportBuilder(imdgProvider))); + resultMap.put(ReportType.SUMMARY_MONEY_CHANGE, List.of(new SummaryMoneyChangeReportBuilder(imdgProvider))); return resultMap; } @Bean("reportBuildersWithSessionIdParam") - public Map> reportBuildersWithSessionIdParam(ImdgProvider imdgProvider) { - Map> resultMap = new HashMap<>(); - resultMap.put(ReportType.OPERATIONAL_LIABILITIES_CLAIMS, new OperationalLiabilitiesClaimsReportBuilder(imdgProvider)); - resultMap.put(ReportType.OPERATIONAL_MONEY_CHANGE, new OperationalMoneyChangeReportBuilder(imdgProvider)); - resultMap.put(ReportType.EXECUTED_DEAL_REPORT, new ExecutedDealReportBuilder(imdgProvider)); - resultMap.put(ReportType.UNFULFILLED_DEAL_REPORT, new UnfulfilledDealReportBuilder(imdgProvider)); + public Map>> reportBuildersWithSessionIdParam(ImdgProvider imdgProvider) { + Map>> resultMap = new HashMap<>(); + resultMap.put(ReportType.OPERATIONAL_LIABILITIES_CLAIMS, List.of(new OperationalLiabilitiesClaimsReportBuilder(imdgProvider))); + resultMap.put(ReportType.OPERATIONAL_MONEY_CHANGE, List.of(new OperationalMoneyChangeReportBuilder(imdgProvider))); + resultMap.put(ReportType.EXECUTED_DEAL_REPORT, + List.of( + new ExecutedDealReportBuilder_INFTYPE_1(imdgProvider), + new ExecutedDealReportBuilder_INFTYPE_2(imdgProvider), + new ExecutedDealReportBuilder_INFTYPE_3(imdgProvider), + new ExecutedDealReportBuilder_INFTYPE_4(imdgProvider) + ) + ); + resultMap.put(ReportType.UNFULFILLED_DEAL_REPORT, List.of(new UnfulfilledDealReportBuilder(imdgProvider))); return resultMap; } @Bean("reportBuildersWithSessionIdListParam") - public Map> reportBuildersWithSessionIdListParams(ImdgProvider imdgProvider) { - Map> resultMap = new HashMap<>(); - resultMap.put(ReportType.PERIOD_LIABILITIES_CLAIMS, new PeriodLiabilitiesClaimsReportBuilder(imdgProvider)); + public Map>> reportBuildersWithSessionIdListParams(ImdgProvider imdgProvider) { + Map>> resultMap = new HashMap<>(); + resultMap.put(ReportType.PERIOD_LIABILITIES_CLAIMS, List.of(new PeriodLiabilitiesClaimsReportBuilder(imdgProvider))); return resultMap; } @Bean("reportBuildersWithPeriodParams") - public Map> reportBuildersWithPeriodParams(ImdgProvider imdgProvider) { - Map> resultMap = new HashMap<>(); - resultMap.put(ReportType.PERIOD_MONEY_CHANGE, new PeriodMoneyChangeReportBuilder(imdgProvider)); + public Map>> reportBuildersWithPeriodParams(ImdgProvider imdgProvider) { + Map>> resultMap = new HashMap<>(); + resultMap.put(ReportType.PERIOD_MONEY_CHANGE, List.of(new PeriodMoneyChangeReportBuilder(imdgProvider))); return resultMap; } } 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 3570a0744..aa1c830fb 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 @@ -45,7 +45,7 @@ public abstract class CSVReportBuilder

{ /** * Тип отчета по {@link ReportType} */ - protected abstract ReportType getReportType(); + public abstract ReportType getReportType(); /** * Формирование отчета на основе параметров diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilderCommon.java similarity index 74% rename from clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder.java rename to clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilderCommon.java index e44f37993..3affaeedb 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilderCommon.java @@ -5,24 +5,23 @@ 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.SessionIdParam; -import ru.spcex.platform.enumeration.Allowed; import ru.spcex.platform.enumeration.ReportType; import ru.spcex.platform.enumeration.WorkflowStatus; import ru.spcex.platform.imdg.api.Imdg; 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.math.RoundingMode; -import java.time.LocalDateTime; +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 class ExecutedDealReportBuilder extends CSVReportBuilder { - private final Imdg executionFondImdg; +public abstract class ExecutedDealReportBuilderCommon extends CSVReportBuilder { + protected final DateTimeFormatter fileNameDateTimeFormatter = DateTimeFormatter.ofPattern("yyMMddHHmmssSSS"); + protected final Imdg executionFondImdg; private final Imdg companyImdg; private final Imdg sTradesImdg; @@ -32,7 +31,7 @@ public class ExecutedDealReportBuilder extends CSVReportBuilder }; private List lines = null; - public ExecutedDealReportBuilder(ImdgProvider imdgProvider) { + public ExecutedDealReportBuilderCommon(ImdgProvider imdgProvider) { this.executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class); this.companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); this.sTradesImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_STrades, STrades.class); @@ -49,23 +48,15 @@ public class ExecutedDealReportBuilder extends CSVReportBuilder } @Override - protected String getReportFilename(SessionIdParam params) { - return "executed_deal_report.%s".formatted(LocalDateTime.now()); - } - - @Override - protected ReportType getReportType() { + public ReportType getReportType() { return ReportType.EXECUTED_DEAL_REPORT; } + protected abstract Collection getExecutionFondsForReport(T params); + @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); + protected void collect(T params) { + Collection executionFonds = getExecutionFondsForReport(params); lines = new ArrayList<>(executionFonds.size()); for (ExecutionFond executionFond : executionFonds) { @@ -82,7 +73,7 @@ public class ExecutedDealReportBuilder extends CSVReportBuilder String securityId = String.valueOf(executionFond.getSecurityId()); String tradeNo = String.valueOf(executionFond.getExchangeExecutionId()); String tradeDate = dateFormatter.format(executionFond.getTradingDate()); - String tradeTime = dateFormatter.format(executionFond.getCreated()); + String tradeTime = dateFormatter.format(LocalDate.ofInstant(executionFond.getCreated(), ZoneId.systemDefault())); String settleDate = dateFormatter.format(executionFond.getSettlementDate()); String settleCode = sTrade != null ? sTrade.getSettleCode() : ""; String quantity = String.valueOf(executionFond.getQuantity()); 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 new file mode 100644 index 000000000..065ff9f5e --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_1.java @@ -0,0 +1,34 @@ +package ru.spcex.clearing.reports.reports.bp; + +import ru.clearing.classes.statics.data.execution.ExecutionFond; +import ru.spcex.clearing.reports.reports.SessionIdParam; +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; + +public class ExecutedDealReportBuilder_INFTYPE_1 extends ExecutedDealReportBuilderCommon { + + public ExecutedDealReportBuilder_INFTYPE_1(ImdgProvider imdgProvider) { + super(imdgProvider); + } + + @Override + protected String getReportFilename(SessionIdParam params) { + return "KS_BR_PFX64_INFTYPE_1_%s".formatted(fileNameDateTimeFormatter.format(LocalDateTime.now())); + } + + @Override + protected Collection getExecutionFondsForReport(SessionIdParam params) { + ImdgPredicateBuilder pb = executionFondImdg.predicateBuilder(); + return executionFondImdg.getCollectionObjectsByPredicate( + pb.and( + pb.equals("sessionId", params.getSessionId()), + pb.less("tradingDate", LocalDate.now()), + pb.equals("settlementDate", LocalDate.now()) + ) + ); + } +} 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 new file mode 100644 index 000000000..72fadba5e --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_2.java @@ -0,0 +1,34 @@ +package ru.spcex.clearing.reports.reports.bp; + +import ru.clearing.classes.statics.data.execution.ExecutionFond; +import ru.spcex.clearing.reports.reports.SessionIdParam; +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; + +public class ExecutedDealReportBuilder_INFTYPE_2 extends ExecutedDealReportBuilderCommon { + + public ExecutedDealReportBuilder_INFTYPE_2(ImdgProvider imdgProvider) { + super(imdgProvider); + } + + @Override + protected String getReportFilename(SessionIdParam params) { + return "KS_BR_PFX64_INFTYPE_2_%s".formatted(fileNameDateTimeFormatter.format(LocalDateTime.now())); + } + + @Override + protected Collection getExecutionFondsForReport(SessionIdParam params) { + ImdgPredicateBuilder pb = executionFondImdg.predicateBuilder(); + return executionFondImdg.getCollectionObjectsByPredicate( + pb.and( + pb.equals("sessionId", params.getSessionId()), + pb.equals("tradingDate", LocalDate.now()), + pb.equals("settlementDate", LocalDate.now()) + ) + ); + } +} 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 new file mode 100644 index 000000000..0e3c8e934 --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_3.java @@ -0,0 +1,28 @@ +package ru.spcex.clearing.reports.reports.bp; + +import ru.clearing.classes.statics.data.execution.ExecutionFond; +import ru.spcex.clearing.reports.reports.SessionIdParam; +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; + +public class ExecutedDealReportBuilder_INFTYPE_3 extends ExecutedDealReportBuilderCommon { + + public ExecutedDealReportBuilder_INFTYPE_3(ImdgProvider imdgProvider) { + super(imdgProvider); + } + + @Override + protected String getReportFilename(SessionIdParam params) { + return "KS_BR_PFX64_INFTYPE_3_%s".formatted(fileNameDateTimeFormatter.format(LocalDateTime.now())); + } + + @Override + protected Collection getExecutionFondsForReport(SessionIdParam params) { + ImdgPredicateBuilder pb = executionFondImdg.predicateBuilder(); + return executionFondImdg.getCollectionObjectsByPredicate(pb.greater("settlementDate", LocalDate.now())); + } +} 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 new file mode 100644 index 000000000..1135aab9f --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/ExecutedDealReportBuilder_INFTYPE_4.java @@ -0,0 +1,34 @@ +package ru.spcex.clearing.reports.reports.bp; + +import ru.clearing.classes.statics.data.execution.ExecutionFond; +import ru.spcex.clearing.reports.reports.SessionIdParam; +import ru.spcex.platform.enumeration.Allowed; +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; + +public class ExecutedDealReportBuilder_INFTYPE_4 extends ExecutedDealReportBuilderCommon { + + public ExecutedDealReportBuilder_INFTYPE_4(ImdgProvider imdgProvider) { + super(imdgProvider); + } + + @Override + protected String getReportFilename(SessionIdParam params) { + return "KS_BR_PFX64_INFTYPE_4_%s".formatted(fileNameDateTimeFormatter.format(LocalDateTime.now())); + } + + @Override + protected Collection getExecutionFondsForReport(SessionIdParam params) { + ImdgPredicateBuilder pb = executionFondImdg.predicateBuilder(); + return executionFondImdg.getCollectionObjectsByPredicate( + pb.and( + pb.equals("coverageStatus", Allowed.DENIED.getKey()), + pb.equals("settlementDate", LocalDate.now()) + ) + ); + } +} 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 index 827b0eae0..b72a2a004 100644 --- 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 @@ -11,9 +11,11 @@ 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 ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; -import java.time.Instant; +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; @@ -30,6 +32,7 @@ public abstract class MoneyChangeReportBuilder

extends CSVReportBuilder

{ "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) { @@ -54,13 +57,13 @@ public abstract class MoneyChangeReportBuilder

extends CSVReportBuilder

{ @Override protected void collect(P params) { - ImdgPredicateBuilder pb = registryImdg.predicateBuilder(); Collection registries = getRegistryForReport(params); Company clearingHouseCompany = companyImdg.getSingleObjectByID(1L); String clearingHouse = clearingHouseCompany.getFullName(); - Instant now = Instant.now(); + LocalDate nowDate = LocalDate.now(); + LocalTime nowTime = LocalTime.now(); lines = new ArrayList<>(registries.size()); for (Registry registry : registries) { Company company = companyImdg.getSingleObjectByID(registry.getCompanyId()); @@ -71,13 +74,13 @@ public abstract class MoneyChangeReportBuilder

extends CSVReportBuilder

{ PaymentInstruction paymentInstruction = paymentInstructionImdg.getSingleObjectByFieldValues( Map.of( "id", registry.getPaymentId(), - "creditLegDirection", InOutDirection.out.getKey() + "creditLeg_direction", InOutDirection.out.getKey() ) ); String id = String.valueOf(registry.getId()); - String docDate = dateFormatter.format(now); - String docTime = timeFormatter.format(now); + String docDate = dateFormatter.format(nowDate); + String docTime = timeFormatter.format(nowTime); String docName = "Отчет об изменении суммы денежных средств и (или) количества иного имущества Участника клиринга"; String docType = "KS_FIRMID_ASSETS"; String firmId = String.valueOf(registry.getCompanyId()); @@ -93,9 +96,9 @@ public abstract class MoneyChangeReportBuilder

extends CSVReportBuilder

{ String closeBalance = String.valueOf(registry.getCloseBalance()); String remarks = ""; String addSum = String.valueOf(registry.getCredit()); - String addTime = dateTimeFormatter.format(statement.getCreated()); + String addTime = dateTimeFormatter.format(LocalDateTime.ofInstant(statement.getCreated(), ZoneId.systemDefault())); String withdrawSum = String.valueOf(registry.getDebit()); - String withdrawTime = dateTimeFormatter.format(paymentInstruction.getPaymentDate()); + String withdrawTime = dateTimeFormatter.format(LocalDateTime.ofInstant(paymentInstruction.getPaymentDate(), ZoneId.systemDefault())); int valueIdx = 0; String[] line = new String[getHeaders().length]; @@ -103,7 +106,6 @@ public abstract class MoneyChangeReportBuilder

extends CSVReportBuilder

{ line[valueIdx++] = docDate; line[valueIdx++] = docTime; line[valueIdx++] = docName; - line[valueIdx++] = docTime; line[valueIdx++] = docType; line[valueIdx++] = clearingHouse; line[valueIdx++] = firmId; 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 index 7f985a9a5..dd7e6f9d5 100644 --- 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 @@ -37,7 +37,7 @@ public class OperationalLiabilitiesClaimsReportBuilder extends LiabilitiesClaims } @Override - protected ReportType getReportType() { + public ReportType getReportType() { return ReportType.OPERATIONAL_LIABILITIES_CLAIMS; } } 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 index 0f014e4a4..24a1283d6 100644 --- 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 @@ -5,7 +5,7 @@ import ru.spcex.clearing.reports.reports.SessionIdParam; import ru.spcex.platform.enumeration.ReportType; import ru.spcex.platform.imdg.api.ImdgProvider; -import java.time.Instant; +import java.time.LocalDateTime; import java.util.Collection; import java.util.Map; @@ -23,11 +23,11 @@ public class OperationalMoneyChangeReportBuilder extends MoneyChangeReportBuilde @Override protected String getReportFilename(SessionIdParam params) { - return "operational_money_change.%s".formatted(dateTimeFormatter.format(Instant.now())); + return "operational_money_change.%s".formatted(dateTimeFormatter.format(LocalDateTime.now())); } @Override - protected ReportType getReportType() { + public ReportType getReportType() { return ReportType.OPERATIONAL_MONEY_CHANGE; } } 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 index bdea9b7f9..3b5e48a3c 100644 --- 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 @@ -6,7 +6,7 @@ import ru.spcex.clearing.reports.reports.SessionIdListParams; import ru.spcex.platform.enumeration.ReportType; import ru.spcex.platform.imdg.api.ImdgProvider; -import java.time.Instant; +import java.time.LocalDateTime; import java.util.Collection; import java.util.Collections; @@ -18,11 +18,11 @@ public class PeriodLiabilitiesClaimsReportBuilder extends LiabilitiesClaimsRepor @Override protected String getReportFilename(SessionIdListParams params) { - return "period_liabilities_claims.%s".formatted(dateTimeFormatter.format(Instant.now())); + return "period_liabilities_claims.%s".formatted(dateTimeFormatter.format(LocalDateTime.now())); } @Override - protected ReportType getReportType() { + public ReportType getReportType() { return ReportType.PERIOD_LIABILITIES_CLAIMS; } 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 index c56dbbcda..6e35c0cab 100644 --- 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 @@ -6,7 +6,7 @@ import ru.spcex.platform.enumeration.ReportType; import ru.spcex.platform.imdg.api.ImdgProvider; import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; -import java.time.Instant; +import java.time.LocalDateTime; import java.util.Collection; public class PeriodMoneyChangeReportBuilder extends MoneyChangeReportBuilder { @@ -31,12 +31,12 @@ public class PeriodMoneyChangeReportBuilder extends MoneyChangeReportBuilder { @@ -26,11 +26,11 @@ public class SummaryLiabilitiesClaimsReportBuilder extends LiabilitiesClaimsRepo @Override protected String getReportFilename(EmptyParams params) { - return "summary_money_change.%s".formatted(dateTimeFormatter.format(Instant.now())); + return "summary_money_change.%s".formatted(dateTimeFormatter.format(LocalDateTime.now())); } @Override - protected ReportType getReportType() { + public ReportType getReportType() { return ReportType.SUMMARY_LIABILITIES_CLAIMS; } } 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 index aa14c1055..a636c5911 100644 --- 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 @@ -5,7 +5,7 @@ import ru.spcex.clearing.reports.reports.EmptyParams; import ru.spcex.platform.enumeration.ReportType; import ru.spcex.platform.imdg.api.ImdgProvider; -import java.time.Instant; +import java.time.LocalDateTime; import java.util.Collection; public class SummaryMoneyChangeReportBuilder extends MoneyChangeReportBuilder { @@ -20,11 +20,11 @@ public class SummaryMoneyChangeReportBuilder extends MoneyChangeReportBuilder lines = null; + private List lines = null; public UnfulfilledDealReportBuilder(ImdgProvider imdgProvider) { executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class); @@ -46,11 +47,11 @@ public class UnfulfilledDealReportBuilder extends CSVReportBuilder(executionFonds.size()); String[] line = new String[getHeaders().length]; line[valueIdx++] = id; line[valueIdx++] = securityId; 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 084c20422..c442c425e 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 @@ -25,6 +25,8 @@ import ru.spcex.platform.utils.enumeration.IEnumKey; import ru.spcex.platform.utils.validation.IValidator; import java.io.File; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.function.Function; @@ -38,10 +40,10 @@ public class ReportService extends QueueConsumer implements InitializingBean { private final Function reportRequestWithSessionIdValidator; private final Function reportRequestWithSessionIdListValidator; private final Function reportRequestWithPeriodValidator; - private final Map> reportBuildersWithoutParams; - private final Map> reportBuildersWithSessionIdParam; - private final Map> reportBuildersWithSessionIdListParam; - private final Map> reportBuildersWithPeriodParams; + private final Map>> reportBuildersWithoutParams; + private final Map>> reportBuildersWithSessionIdParam; + private final Map>> reportBuildersWithSessionIdListParam; + private final Map>> reportBuildersWithPeriodParams; private final File outFolder; @@ -52,13 +54,13 @@ public class ReportService extends QueueConsumer implements InitializingBean { RequestHelper requestHelper, ReportsServiceSettings reportsServiceSettings, @Qualifier("reportBuildersWithoutParams") - Map> reportBuildersWithoutParams, + Map>> reportBuildersWithoutParams, @Qualifier("reportBuildersWithSessionIdParam") - Map> reportBuildersWithSessionIdParam, + Map>> reportBuildersWithSessionIdParam, @Qualifier("reportBuildersWithSessionIdListParam") - Map> reportBuildersWithSessionIdListParam, + Map>> reportBuildersWithSessionIdListParam, @Qualifier("reportBuildersWithPeriodParams") - Map> reportBuildersWithPeriodParams, + Map>> reportBuildersWithPeriodParams, @Qualifier("reportRequestValidator") Function reportRequestValidator, @Qualifier("reportRequestWithSessionIdValidator") @@ -111,14 +113,24 @@ public class ReportService extends QueueConsumer implements InitializingBean { ReportRequest req = userRequest.getRequestPayload(); log.debug("Create report type {}...", req.getReportId()); - CSVReportBuilder builder = reportBuildersWithoutParams.get( + List> builders = reportBuildersWithoutParams.get( IEnumKey.getEnumByKey(ReportType.class, req.getReportId()) ); - File outFile = builder.createReport(new EmptyParams(), outFolder); - if (outFile == null) { + List outFilenames = new ArrayList<>(); + for (CSVReportBuilder builder : builders) { + File outFile = builder.createReport(new EmptyParams(), outFolder); + if (outFile == null) continue; + outFilenames.add(outFile.getAbsolutePath()); } - log.debug("Report {} successfully created. Output file: {}", req.getReportId(), 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; } @@ -133,14 +145,26 @@ public class ReportService extends QueueConsumer implements InitializingBean { ReportRequestWithSessionId req = userRequest.getRequestPayload(); log.debug("Create report type {}...", req.getReportId()); - CSVReportBuilder builder = reportBuildersWithSessionIdParam.get( + List> builders = reportBuildersWithSessionIdParam.get( IEnumKey.getEnumByKey(ReportType.class, req.getReportId()) ); - SessionIdParam sessionIdParam = new SessionIdParam(); - sessionIdParam.setSessionId(req.getSessionId()); - File outFile = builder.createReport(sessionIdParam, outFolder); + List outFilenames = new ArrayList<>(); + for (CSVReportBuilder builder : builders) { + SessionIdParam sessionIdParam = new SessionIdParam(); + sessionIdParam.setSessionId(req.getSessionId()); + File outFile = builder.createReport(sessionIdParam, outFolder); + if (outFile == null) continue; + outFilenames.add(outFile.getAbsolutePath()); + } - log.debug("Report {} successfully created. Output file: {}", req.getReportId(), 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; } @@ -155,14 +179,26 @@ public class ReportService extends QueueConsumer implements InitializingBean { ReportRequestWithSessionIdList req = userRequest.getRequestPayload(); log.debug("Create report type {}...", req.getReportId()); - CSVReportBuilder builder = reportBuildersWithSessionIdListParam.get( + List> builders = reportBuildersWithSessionIdListParam.get( IEnumKey.getEnumByKey(ReportType.class, req.getReportId()) ); - SessionIdListParams sessionIdListParams = new SessionIdListParams(); - sessionIdListParams.setSessionIdList(req.getSessionIdList()); - File outFile = builder.createReport(sessionIdListParams, outFolder); + 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()); + } - log.debug("Report {} successfully created. Output file: {}", req.getReportId(), 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; } @@ -177,15 +213,27 @@ public class ReportService extends QueueConsumer implements InitializingBean { ReportRequestWithPeriod req = userRequest.getRequestPayload(); log.debug("Create report type {}...", req.getReportId()); - CSVReportBuilder builder = reportBuildersWithPeriodParams.get( + List> builders = reportBuildersWithPeriodParams.get( IEnumKey.getEnumByKey(ReportType.class, req.getReportId()) ); - PeriodParams periodParams = new PeriodParams(); - periodParams.setStartDate(req.getStartDate()); - periodParams.setEndDate(req.getEndDate()); - File outFile = builder.createReport(periodParams, outFolder); + 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()); + } - log.debug("Report {} successfully created. Output file: {}", req.getReportId(), 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; } diff --git a/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest.java b/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest.java index 48164120b..03a1ea5ac 100644 --- a/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest.java +++ b/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest.java @@ -9,10 +9,7 @@ import org.apache.commons.io.FileUtils; import org.apache.kafka.clients.consumer.MockConsumer; import org.apache.kafka.clients.producer.MockProducer; import org.apache.kafka.clients.producer.ProducerRecord; -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.*; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.ArgumentCaptor; import org.mockito.Captor; @@ -26,11 +23,17 @@ 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.payment.PaymentInstruction; 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.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; @@ -64,25 +67,18 @@ import static org.junit.jupiter.api.Assertions.assertEquals; ReportBuildersConfig.class, TestConfig.class }) +@TestMethodOrder(MethodOrderer.OrderAnnotation.class) public class ReportServiceTest { - private Imdg executionFondImdg; - private Imdg executionDepositImdg; - private Imdg companyImdg; - private Imdg registryImdg; - private Imdg

listingImdg; - private Imdg fixedIncomeSecurityImdg; - private Imdg tradingClearingRegistryImdg; - + private static File outFolder; private final ExecutionFond testExecutionFond = new ExecutionFond(); private final ExecutionDeposit testExecutionDeposit = new ExecutionDeposit(); - + private final Registry testRegistry_1 = new Registry(); + private final Registry testRegistry_2 = new Registry(); private final Company testCompany_1 = new Company(); private final Company testCompany_2 = new Company(); private final Company testCompanyHouse = new Company(); - private final Registry testRegistryForCompanyId_1 = new Registry(); private final Registry testRegistryForCompanyId_2 = new Registry(); - private final Registry tm_tRegistry_1 = new Registry(); private final Registry om_tRegistry_1 = new Registry(); private final Registry ts_tRegistry_1 = new Registry(); @@ -91,31 +87,88 @@ public class ReportServiceTest { private final Registry om_tRegistry_2 = new Registry(); private final Registry ts_tRegistry_2 = new Registry(); private final Registry os_tRegistry_2 = new Registry(); - private final Listing testListing_1 = new Listing(); private final Listing testListing_2 = new Listing(); - private final FixedIncomeSecurity testFixedIncomeSecurity_1 = new FixedIncomeSecurity(); private final FixedIncomeSecurity testFixedIncomeSecurity_2 = new FixedIncomeSecurity(); - private final TradingClearingRegistry testTradingClearingRegistry_1 = new TradingClearingRegistry(); private final TradingClearingRegistry testTradingClearingRegistry_2 = new TradingClearingRegistry(); - - private static File outFolder; - + private final PaymentInstruction testPaymentInstruction_1 = new PaymentInstruction(); + private final PaymentInstruction testPaymentInstruction_2 = new PaymentInstruction(); + private final Statement testStatement_1 = new Statement(); + private final Statement testStatement_2 = new Statement(); + private final STrades testSTrade = new STrades(); + private final Instant TEST_EXCHANGE_EXECUTION_TIME_1 = Instant.ofEpochMilli(777777777777L); + private final Instant TEST_EXCHANGE_EXECUTION_TIME_2 = Instant.ofEpochMilli(888888888888L); + private final LocalDate TEST_TRADING_DATE_1 = LocalDate.now().minus(10, ChronoUnit.DAYS); + private final LocalDate TEST_TRADING_DATE_2 = LocalDate.now().minus(20, ChronoUnit.DAYS); + private final String TEST_MARKET_1 = Market.fond.getKey(); + private final String TEST_MARKET_2 = Market.mkrs.getKey(); + private final BigDecimal TEST_PRICE_1 = BigDecimal.valueOf(77L); + private final BigDecimal TEST_PRICE_2 = BigDecimal.valueOf(88L); + private final BigDecimal TEST_LOTS_1 = BigDecimal.valueOf(777L); + private final BigDecimal TEST_LOTS_2 = BigDecimal.valueOf(888L); + private final BigDecimal TEST_QUANTITY_1 = BigDecimal.valueOf(7777L); + private final BigDecimal TEST_QUANTITY_2 = BigDecimal.valueOf(8888L); + private final BigDecimal TEST_INTEREST_AMOUNT_1 = BigDecimal.valueOf(77777L); + private final BigDecimal TEST_INTEREST_AMOUNT_2 = BigDecimal.valueOf(88888L); + private final String TEST_SIDE_1 = Side.SELL.getKey(); + private final String TEST_SIDE_2 = Side.BUY.getKey(); + private final String TEST_COVERAGE_STATUS_1 = Allowed.DENIED.getKey(); + private final String TEST_COVERAGE_STATUS_2 = Allowed.ALLOWED.getKey(); + private final Long TEST_SESSION_ID_1 = 10007L; + private final Long TEST_SESSION_ID_2 = 10008L; + private final Long TEST_SESSION_ID_3 = 10009L; + private final LocalDate TEST_CLEARING_DATE_1 = LocalDate.now().minus(30, ChronoUnit.DAYS); + private final LocalDate TEST_CLEARING_DATE_2 = LocalDate.now().minus(40, ChronoUnit.DAYS); + private final BigDecimal TEST_SETTLEMENT_AMOUNT = BigDecimal.valueOf(7777777L); + private final LocalDate TEST_SETTLEMENT_DATE = LocalDate.now().minus(22, ChronoUnit.DAYS); + private final Instant TEST_EXCHANGE_EXECUTION_MICROSECONDS = Instant.now().minus(777L, ChronoUnit.SECONDS); + private final BigDecimal TEST_FIRST_LEG_AMOUNT = BigDecimal.valueOf(1L); + private final BigDecimal TEST_SECOND_LEG_AMOUNT = BigDecimal.valueOf(2L); + private final LocalDate TEST_FIRST_LEG_SETTLEMENT_DATE = LocalDate.now().minus(1, ChronoUnit.DAYS); + private final LocalDate TEST_SECOND_LEG_SETTLEMENT_DATE = LocalDate.now().minus(2, ChronoUnit.DAYS); + private final BigDecimal TEST_LOT_SIZE_1 = BigDecimal.valueOf(12L); + private final BigDecimal TEST_LOT_SIZE_2 = BigDecimal.valueOf(34L); + private final BigDecimal TEST_NOMINAL_1 = BigDecimal.valueOf(333L); + private final BigDecimal TEST_NOMINAL_2 = BigDecimal.valueOf(444L); + private final BigDecimal TEST_COUPON_1 = BigDecimal.valueOf(3333L); + private final BigDecimal TEST_COUPON_2 = BigDecimal.valueOf(4444L); + private final BigDecimal TEST_OPEN_BALANCE_1 = BigDecimal.valueOf(3L); + private final BigDecimal TEST_CLOSE_BALANCE_1 = BigDecimal.valueOf(780L); + private final BigDecimal TEST_OPEN_BALANCE_2 = BigDecimal.valueOf(2L); + private final BigDecimal TEST_CLOSE_BALANCE_2 = BigDecimal.valueOf(890L); + private final BigDecimal TEST_CREDIT_1 = BigDecimal.valueOf(777777L); + private final BigDecimal TEST_CREDIT_2 = BigDecimal.valueOf(999999L); + private final BigDecimal TEST_DEBIT_1 = BigDecimal.valueOf(77777L); + private final BigDecimal TEST_DEBIT_2 = BigDecimal.valueOf(99999L); + private final LocalDate TEST_START_CLEARING_DATE = LocalDate.now(); + private final LocalDate TEST_END_CLEARING_DATE = LocalDate.now(); + private Imdg executionFondImdg; + private Imdg executionDepositImdg; + private Imdg companyImdg; + private Imdg registryImdg; + private Imdg listingImdg; + private Imdg fixedIncomeSecurityImdg; + private Imdg tradingClearingRegistryImdg; + private Imdg paymentInstructionImdg; + private Imdg statementImdg; + private Imdg sTradeImdg; @Autowired private ReportService reportService; - @Autowired @Qualifier("hazelcastServiceTest") private ImdgProvider imdgProvider; - @Captor private ArgumentCaptor producerRecord; - @SpyBean private MockProducer producer; + private static int reportRequestCnt = 0; + private static int reportRequestWithSessionIdCnt = 0; + private static int reportRequestWithSessionIdListCnt = 0; + private static int reportRequestWithPeriodCnt = 0; + @BeforeAll public static void createTestFolder() { outFolder = new File("out"); @@ -128,7 +181,9 @@ public class ReportServiceTest { } @Test - public void createReportTest_OPERATIONAL_LIABILITIES_CLAIMS() throws InterruptedException, IOException, CsvValidationException { + @Order(1) + public void createReportTest_OPERATIONAL_LIABILITIES_CLAIMS() throws IOException, CsvValidationException { + clearTestDir(); final Long oldSessionIdDeposit = testExecutionDeposit.getSessionId(); final Long oldSessionIdFond = testExecutionFond.getSessionId(); @@ -145,17 +200,15 @@ public class ReportServiceTest { TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(), Consts.DESTINATION_CREATE_REPORT_FOR_SESSION_ID, - 0, + reportRequestWithSessionIdCnt++, 0, jsonString); TestUtils.waitingWhenAddedRecordAndCheckIt(0L, producer, producerRecord); File outFile = outFolder.listFiles()[0]; - File expectedFile = new File(getClass().getClassLoader().getResource("operational_liabilities_claims_expected.csv").getFile()); - compareCSVFiles(expectedFile, outFile, Arrays.asList("doc_time")); - - System.out.println("hello"); + File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/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); @@ -165,7 +218,405 @@ public class ReportServiceTest { outFile.delete(); } - public void compareCSVFiles(File expectedFile, File actualFile, List columnsForSkip) throws IOException, CsvValidationException { + @Test + @Order(2) + public void createReportTest_PERIOD_LIABILITIES_CLAIMS() throws CsvValidationException, IOException { + clearTestDir(); + ReportRequestWithSessionIdList reportRequestWithPeriod = new ReportRequestWithSessionIdList(); + reportRequestWithPeriod.setReportId(ReportType.PERIOD_LIABILITIES_CLAIMS.getKey()); + reportRequestWithPeriod.setSessionIdList(Arrays.asList(testExecutionDeposit.getSessionId(), testExecutionFond.getSessionId())); + + String jsonString = TestUtils.getJsonStringForSystem(reportRequestWithPeriod, 0L); + + TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(), + Consts.DESTINATION_CREATE_REPORT_FOR_SESSION_ID_LIST, + reportRequestWithSessionIdListCnt++, + 0, + jsonString); + + TestUtils.waitingWhenAddedRecordAndCheckIt(0L, producer, producerRecord); + + File outFile = outFolder.listFiles()[0]; + File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/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(ReportType.SUMMARY_LIABILITIES_CLAIMS.getKey()); + String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L); + + TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(), + Consts.DESTINATION_CREATE_REPORT, + reportRequestCnt++, + 0, + jsonString); + + TestUtils.waitingWhenAddedRecordAndCheckIt(0L, producer, producerRecord); + + File outFile = outFolder.listFiles()[0]; + File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/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(ReportType.OPERATIONAL_MONEY_CHANGE.getKey()); + reportRequest.setSessionId(TEST_SESSION_ID_3); + + String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L); + + TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(), + Consts.DESTINATION_CREATE_REPORT_FOR_SESSION_ID, + reportRequestWithSessionIdCnt++, + 0, + jsonString); + + TestUtils.waitingWhenAddedRecordAndCheckIt(0L, producer, producerRecord); + + File outFile = outFolder.listFiles()[0]; + File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/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(ReportType.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.DESTINATION_CREATE_REPORT_FOR_PERIOD, + reportRequestWithPeriodCnt++, + 0, + jsonString); + + TestUtils.waitingWhenAddedRecordAndCheckIt(0L, producer, producerRecord); + + File outFile = outFolder.listFiles()[0]; + File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/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(ReportType.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.DESTINATION_CREATE_REPORT, + reportRequestCnt++, + 0, + jsonString); + + TestUtils.waitingWhenAddedRecordAndCheckIt(0L, producer, producerRecord); + + File outFile = outFolder.listFiles()[0]; + File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/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/KS_BR_PFX64_empty_expected.csv").getFile()); + + ReportRequestWithSessionId reportRequest = new ReportRequestWithSessionId(); + reportRequest.setReportId(ReportType.EXECUTED_DEAL_REPORT.getKey()); + reportRequest.setSessionId(TEST_SESSION_ID_3); + + final Long oldExecutionFondSessionId = testExecutionFond.getSessionId(); + final LocalDate oldExecutionFondTradingDate = testExecutionFond.getTradingDate(); + final LocalDate oldExecutionFondSettlementDate = testExecutionFond.getSettlementDate(); + final String oldExecutionFondCoverageStatus = testExecutionFond.getCoverageStatus(); + + testExecutionFond.setSessionId(TEST_SESSION_ID_3); + executionFondImdg.update(testExecutionFond); + + // TEST INFTYPE_1 + testExecutionFond.setTradingDate(LocalDate.now().minus(10, ChronoUnit.DAYS)); + testExecutionFond.setSettlementDate(LocalDate.now()); + testExecutionFond.setCoverageStatus(Allowed.ALLOWED.getKey()); + executionFondImdg.update(testExecutionFond); + + String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L); + + TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(), + Consts.DESTINATION_CREATE_REPORT_FOR_SESSION_ID, + reportRequestWithSessionIdCnt++, + 0, + jsonString); + + TestUtils.waitingWhenAddedRecordAndCheckIt(0L, producer, producerRecord); + + File outFile = outFolder.listFiles((dir, name) -> name.contains("INFTYPE_1"))[0]; + File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/KS_BR_PFX64_INFTYPE_1_expected.csv").getFile()); + compareCSVFiles(expectedFile, outFile, Arrays.asList("tradeDate", "tradeTime", "settleDate")); + + for (File file : outFolder.listFiles()) { + if (!outFile.getName().equalsIgnoreCase(file.getName())) { + compareCSVFiles(expectedEmptyFile, file, null); + } + FileUtils.delete(file); + } + + testExecutionFond.setSessionId(oldExecutionFondSessionId); + testExecutionFond.setTradingDate(oldExecutionFondTradingDate); + testExecutionFond.setSettlementDate(oldExecutionFondSettlementDate); + testExecutionFond.setCoverageStatus(oldExecutionFondCoverageStatus); + executionFondImdg.update(testExecutionFond); + } + + @Test + @Order(8) + public void createReportTest_EXECUTED_DEAL_REPORT_INFTYPE_2() throws CsvValidationException, IOException { + clearTestDir(); + File expectedEmptyFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/KS_BR_PFX64_empty_expected.csv").getFile()); + + ReportRequestWithSessionId reportRequest = new ReportRequestWithSessionId(); + reportRequest.setReportId(ReportType.EXECUTED_DEAL_REPORT.getKey()); + reportRequest.setSessionId(TEST_SESSION_ID_3); + + final Long oldExecutionFondSessionId = testExecutionFond.getSessionId(); + final LocalDate oldExecutionFondTradingDate = testExecutionFond.getTradingDate(); + final LocalDate oldExecutionFondSettlementDate = testExecutionFond.getSettlementDate(); + final String oldExecutionFondCoverageStatus = testExecutionFond.getCoverageStatus(); + + testExecutionFond.setSessionId(TEST_SESSION_ID_3); + executionFondImdg.update(testExecutionFond); + + // TEST INFTYPE_2 + testExecutionFond.setTradingDate(LocalDate.now()); + testExecutionFond.setSettlementDate(LocalDate.now()); + testExecutionFond.setCoverageStatus(Allowed.ALLOWED.getKey()); + executionFondImdg.update(testExecutionFond); + + String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L); + + TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(), + Consts.DESTINATION_CREATE_REPORT_FOR_SESSION_ID, + reportRequestWithSessionIdCnt++, + 0, + jsonString); + + TestUtils.waitingWhenAddedRecordAndCheckIt(0L, producer, producerRecord); + + File outFile = outFolder.listFiles((dir, name) -> name.contains("INFTYPE_2"))[0]; + File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/KS_BR_PFX64_INFTYPE_2_expected.csv").getFile()); + compareCSVFiles(expectedFile, outFile, Arrays.asList("tradeDate", "tradeTime", "settleDate")); + + for (File file : outFolder.listFiles()) { + if (!outFile.getName().equalsIgnoreCase(file.getName())) { + compareCSVFiles(expectedEmptyFile, file, null); + } + FileUtils.delete(file); + } + + testExecutionFond.setSessionId(oldExecutionFondSessionId); + testExecutionFond.setTradingDate(oldExecutionFondTradingDate); + testExecutionFond.setSettlementDate(oldExecutionFondSettlementDate); + testExecutionFond.setCoverageStatus(oldExecutionFondCoverageStatus); + executionFondImdg.update(testExecutionFond); + } + + @Test + @Order(9) + public void createReportTest_EXECUTED_DEAL_REPORT_INFTYPE_3() throws CsvValidationException, IOException { + clearTestDir(); + File expectedEmptyFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/KS_BR_PFX64_empty_expected.csv").getFile()); + + ReportRequestWithSessionId reportRequest = new ReportRequestWithSessionId(); + reportRequest.setReportId(ReportType.EXECUTED_DEAL_REPORT.getKey()); + reportRequest.setSessionId(TEST_SESSION_ID_3); + + final Long oldExecutionFondSessionId = testExecutionFond.getSessionId(); + final LocalDate oldExecutionFondTradingDate = testExecutionFond.getTradingDate(); + final LocalDate oldExecutionFondSettlementDate = testExecutionFond.getSettlementDate(); + final String oldExecutionFondCoverageStatus = testExecutionFond.getCoverageStatus(); + + // TEST INFTYPE_3 + testExecutionFond.setSettlementDate(LocalDate.now().plus(10, ChronoUnit.DAYS)); + testExecutionFond.setTradingDate(LocalDate.now().plus(10, ChronoUnit.DAYS)); + testExecutionFond.setCoverageStatus(Allowed.ALLOWED.getKey()); + executionFondImdg.update(testExecutionFond); + + String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L); + + TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(), + Consts.DESTINATION_CREATE_REPORT_FOR_SESSION_ID, + reportRequestWithSessionIdCnt++, + 0, + jsonString); + + TestUtils.waitingWhenAddedRecordAndCheckIt(0L, producer, producerRecord); + + File outFile = outFolder.listFiles((dir, name) -> name.contains("INFTYPE_3"))[0]; + File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/KS_BR_PFX64_INFTYPE_3_expected.csv").getFile()); + compareCSVFiles(expectedFile, outFile, Arrays.asList("tradeDate", "tradeTime", "settleDate")); + + for (File file : outFolder.listFiles()) { + if (!outFile.getName().equalsIgnoreCase(file.getName())) { + compareCSVFiles(expectedEmptyFile, file, null); + } + FileUtils.delete(file); + } + + testExecutionFond.setSessionId(oldExecutionFondSessionId); + testExecutionFond.setTradingDate(oldExecutionFondTradingDate); + testExecutionFond.setSettlementDate(oldExecutionFondSettlementDate); + testExecutionFond.setCoverageStatus(oldExecutionFondCoverageStatus); + executionFondImdg.update(testExecutionFond); + } + + @Test + @Order(10) + public void createReportTest_EXECUTED_DEAL_REPORT_INFTYPE_4() throws CsvValidationException, IOException { + clearTestDir(); + File expectedEmptyFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/KS_BR_PFX64_empty_expected.csv").getFile()); + + ReportRequestWithSessionId reportRequest = new ReportRequestWithSessionId(); + reportRequest.setReportId(ReportType.EXECUTED_DEAL_REPORT.getKey()); + reportRequest.setSessionId(TEST_SESSION_ID_3); + + final Long oldExecutionFondSessionId = testExecutionFond.getSessionId(); + final LocalDate oldExecutionFondTradingDate = testExecutionFond.getTradingDate(); + final LocalDate oldExecutionFondSettlementDate = testExecutionFond.getSettlementDate(); + final String oldExecutionFondCoverageStatus = testExecutionFond.getCoverageStatus(); + + // TEST INFTYPE_4 + testExecutionFond.setSessionId(TEST_SESSION_ID_1); + testExecutionFond.setSettlementDate(LocalDate.now()); + testExecutionFond.setTradingDate(LocalDate.now().plus(10, ChronoUnit.DAYS)); + testExecutionFond.setCoverageStatus(Allowed.DENIED.getKey()); + executionFondImdg.update(testExecutionFond); + + String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L); + + TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(), + Consts.DESTINATION_CREATE_REPORT_FOR_SESSION_ID, + reportRequestWithSessionIdCnt++, + 0, + jsonString); + + TestUtils.waitingWhenAddedRecordAndCheckIt(0L, producer, producerRecord); + + File outFile = outFolder.listFiles((dir, name) -> name.contains("INFTYPE_4"))[0]; + File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/KS_BR_PFX64_INFTYPE_4_expected.csv").getFile()); + compareCSVFiles(expectedFile, outFile, Arrays.asList("tradeDate", "tradeTime", "settleDate")); + + for (File file : outFolder.listFiles()) { + if (!outFile.getName().equalsIgnoreCase(file.getName())) { + compareCSVFiles(expectedEmptyFile, file, null); + } + FileUtils.delete(file); + } + + testExecutionFond.setSessionId(oldExecutionFondSessionId); + testExecutionFond.setTradingDate(oldExecutionFondTradingDate); + testExecutionFond.setSettlementDate(oldExecutionFondSettlementDate); + testExecutionFond.setCoverageStatus(oldExecutionFondCoverageStatus); + executionFondImdg.update(testExecutionFond); + } + + @Test + @Order(11) + public void createReportTest_UNFULFILLED_DEAL_REPORT() throws IOException, CsvValidationException { + clearTestDir(); + + ReportRequestWithSessionId reportRequest = new ReportRequestWithSessionId(); + reportRequest.setReportId(ReportType.UNFULFILLED_DEAL_REPORT.getKey()); + reportRequest.setSessionId(TEST_SESSION_ID_3); + + final Long oldExecutionFondSessionId = testExecutionFond.getSessionId(); + final String oldExecutionFondCoverageStatus = testExecutionFond.getCoverageStatus(); + + testExecutionFond.setSessionId(TEST_SESSION_ID_3); + testExecutionFond.setCoverageStatus(Allowed.DENIED.getKey()); + executionFondImdg.update(testExecutionFond); + + final String oldSTradeSettleCode = testSTrade.getSettleCode(); + final String oldSTradeOperation = testSTrade.getOperation(); + testSTrade.setSettleCode(testExecutionFond.getSettlementCode()); + testSTrade.setOperation(testExecutionFond.getSide()); + sTradeImdg.update(testSTrade); + + String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L); + + TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(), + Consts.DESTINATION_CREATE_REPORT_FOR_SESSION_ID, + reportRequestWithSessionIdCnt++, + 0, + jsonString); + + TestUtils.waitingWhenAddedRecordAndCheckIt(0L, producer, producerRecord); + + File outFile = outFolder.listFiles()[0]; + File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/unfulfilled_deal_report_expected.csv").getFile()); + compareCSVFiles(expectedFile, outFile, Arrays.asList("tradeDate")); + + testExecutionFond.setSessionId(oldExecutionFondSessionId); + testExecutionFond.setCoverageStatus(oldExecutionFondCoverageStatus); + executionFondImdg.update(testExecutionFond); + + testSTrade.setSettleCode(oldSTradeSettleCode); + testSTrade.setOperation(oldSTradeOperation); + sTradeImdg.update(testSTrade); + } + + + 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(); @@ -199,7 +650,7 @@ public class ReportServiceTest { int actualIdx = actualValueForColumn.get(expectedHeader); String expected = expectedLines[expectedIdx]; String actual = actualLines[actualIdx]; - assertEquals(expected, actual); + assertEquals(expected, actual, expectedHeader); } } while (true); @@ -207,14 +658,17 @@ public class ReportServiceTest { actualCSVReader.close(); } - @PostConstruct private void init() { ImdgTestConfig.waitAvailableImdgProviderAndAddAdminWithDefaultId(); + Long TEST_EXECUTION_FOND_ID = 888L; + testExecutionFond.setId(TEST_EXECUTION_FOND_ID); + Long TEST_EXCHANGE_EXECUTION_ID_1 = 777L; testExecutionFond.setExchangeExecutionId(TEST_EXCHANGE_EXECUTION_ID_1); testExecutionFond.setExchangeExecutionTime(TEST_EXCHANGE_EXECUTION_TIME_1); testExecutionFond.setTradingDate(TEST_TRADING_DATE_1); + Long TEST_TRADING_CLEARING_REGISTRY_ID_1 = 777L; testExecutionFond.setTradingClearingRegistryId(TEST_TRADING_CLEARING_REGISTRY_ID_1); testExecutionFond.setMarket(TEST_MARKET_1); testExecutionFond.setPrice(TEST_PRICE_1); @@ -222,27 +676,43 @@ public class ReportServiceTest { testExecutionFond.setQuantity(TEST_QUANTITY_1); testExecutionFond.setInterestAmount(TEST_INTEREST_AMOUNT_1); testExecutionFond.setSide(TEST_SIDE_1); + String TEST_SETTLEMENT_CURRENCY_1 = "test-settlement-currency-1"; testExecutionFond.setSettlementCurrency(TEST_SETTLEMENT_CURRENCY_1); + Long TEST_COMPANY_ID_1 = 1007L; testExecutionFond.setCompanyId(TEST_COMPANY_ID_1); + Long TEST_DURATION_1 = 2007L; testExecutionFond.setDuration(TEST_DURATION_1); + String TEST_SECURITY_FULL_NAME_1 = "test-security-full-name-1"; testExecutionFond.setSecurityFullName(TEST_SECURITY_FULL_NAME_1); + String TEST_SECURITY_SYMBOL_1 = "test-security-symbol-1"; testExecutionFond.setSecuritySymbol(TEST_SECURITY_SYMBOL_1); + Long TEST_SECURITY_ID_1 = 3007L; testExecutionFond.setSecurityId(TEST_SECURITY_ID_1); + Long TEST_COUNTER_PARTY_ID_1 = 4007L; testExecutionFond.setCounterPartyId(TEST_COUNTER_PARTY_ID_1); testExecutionFond.setCoverageStatus(TEST_COVERAGE_STATUS_1); testExecutionFond.setSessionId(TEST_SESSION_ID_1); testExecutionFond.setClearingDate(TEST_CLEARING_DATE_1); + Long TEST_EXCHANGE_ORDER_ID = 20007L; testExecutionFond.setExchangeOrderId(TEST_EXCHANGE_ORDER_ID); testExecutionFond.setSettlementAmount(TEST_SETTLEMENT_AMOUNT); + String TEST_COMMENT = "test-comment"; testExecutionFond.setComment(TEST_COMMENT); + Long TEST_CLIENT_CODE_ID = 222222L; testExecutionFond.setClientCodeId(TEST_CLIENT_CODE_ID); + String TEST_SETTLEMENT_CODE = "test-settlement-code"; testExecutionFond.setSettlementCode(TEST_SETTLEMENT_CODE); testExecutionFond.setSettlementDate(TEST_SETTLEMENT_DATE); testExecutionFond.setExchangeExecutionMicroseconds(TEST_EXCHANGE_EXECUTION_MICROSECONDS); + testExecutionFond.setCreated(Instant.now()); + Long TEST_EXECUTION_DEPOSIT_ID = 777L; + testExecutionDeposit.setId(TEST_EXECUTION_DEPOSIT_ID); + Long TEST_EXCHANGE_EXECUTION_ID_2 = 888L; testExecutionDeposit.setExchangeExecutionId(TEST_EXCHANGE_EXECUTION_ID_2); testExecutionDeposit.setExchangeExecutionTime(TEST_EXCHANGE_EXECUTION_TIME_2); testExecutionDeposit.setTradingDate(TEST_TRADING_DATE_2); + Long TEST_TRADING_CLEARING_REGISTRY_ID_2 = 888L; testExecutionDeposit.setTradingClearingRegistryId(TEST_TRADING_CLEARING_REGISTRY_ID_2); testExecutionDeposit.setMarket(TEST_MARKET_2); testExecutionDeposit.setPrice(TEST_PRICE_2); @@ -250,12 +720,19 @@ public class ReportServiceTest { testExecutionDeposit.setQuantity(TEST_QUANTITY_2); testExecutionDeposit.setInterestAmount(TEST_INTEREST_AMOUNT_2); testExecutionDeposit.setSide(TEST_SIDE_2); + String TEST_SETTLEMENT_CURRENCY_2 = "test-settlement-currency-2"; testExecutionDeposit.setSettlementCurrency(TEST_SETTLEMENT_CURRENCY_2); + Long TEST_COMPANY_ID_2 = 1008L; testExecutionDeposit.setCompanyId(TEST_COMPANY_ID_2); + Long TEST_DURATION_2 = 2008L; testExecutionDeposit.setDuration(TEST_DURATION_2); + String TEST_SECURITY_FULL_NAME_2 = "test-security-full-name-2"; testExecutionDeposit.setSecurityFullName(TEST_SECURITY_FULL_NAME_2); + String TEST_SECURITY_SYMBOL_2 = "test-security-symbol-2"; testExecutionDeposit.setSecuritySymbol(TEST_SECURITY_SYMBOL_2); + Long TEST_SECURITY_ID_2 = 3008L; testExecutionDeposit.setSecurityId(TEST_SECURITY_ID_2); + Long TEST_COUNTER_PARTY_ID_2 = 4008L; testExecutionDeposit.setCounterPartyId(TEST_COUNTER_PARTY_ID_2); testExecutionDeposit.setCoverageStatus(TEST_COVERAGE_STATUS_2); testExecutionDeposit.setSessionId(TEST_SESSION_ID_2); @@ -264,8 +741,11 @@ public class ReportServiceTest { testExecutionDeposit.setSecondLegAmount(TEST_SECOND_LEG_AMOUNT); testExecutionDeposit.setFirstLegSettlementDate(TEST_FIRST_LEG_SETTLEMENT_DATE); testExecutionDeposit.setSecondLegSettlementDate(TEST_SECOND_LEG_SETTLEMENT_DATE); + String TEST_FIRST_LEG_SETTLEMENT_CODE = "test-first-leg-settlement-code"; testExecutionDeposit.setFirstLegSettlementCode(TEST_FIRST_LEG_SETTLEMENT_CODE); + String TEST_SECOND_LEG_SETTLEMENT_CODE = "test-second-leg-settlement-code"; testExecutionDeposit.setSecondLegSettlementCode(TEST_SECOND_LEG_SETTLEMENT_CODE); + String TEST_CONTRACT = "test_contract"; testExecutionDeposit.setContract(TEST_CONTRACT); executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class); @@ -276,9 +756,11 @@ public class ReportServiceTest { testCompany_1.setWorkflowStatus(WorkflowStatus.Active.getKey()); testCompany_1.setId(TEST_COMPANY_ID_1); + String TEST_COMPANY_FULLNAME_1 = "test-company-fullname-1"; testCompany_1.setFullName(TEST_COMPANY_FULLNAME_1); testCompany_2.setWorkflowStatus(WorkflowStatus.Active.getKey()); testCompany_2.setId(TEST_COMPANY_ID_2); + String TEST_COMPANY_FULLNAME_2 = "test-company-fullname-2"; testCompany_2.setFullName(TEST_COMPANY_FULLNAME_2); testCompanyHouse.setId(1L); testCompanyHouse.setFullName("COMPANY_HOUSE"); @@ -289,36 +771,83 @@ public class ReportServiceTest { registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); + + Long TEST_REGISTRY_ID_1 = 999L; + testRegistry_1.setId(TEST_REGISTRY_ID_1); + testRegistry_1.setCompanyId(TEST_COMPANY_ID_1); + testRegistry_1.setSecurityId(TEST_SECURITY_ID_1); + Long TEST_PAYMT_ID_1 = 222L; + testRegistry_1.setPaymentId(TEST_PAYMT_ID_1); + String TEST_TRADING_CLEARING_REGISTRY_1 = "test-trading-clearing-registry-1"; + testRegistry_1.setTradingClearingRegistry(TEST_TRADING_CLEARING_REGISTRY_1); + Long TEST_MONEY_ACCOUNT_1 = 11L; + testRegistry_1.setAccountId(TEST_MONEY_ACCOUNT_1); + String TEST_REGISTRY_CODE_1 = "test-registry-code-1"; + testRegistry_1.setRegistryCode(TEST_REGISTRY_CODE_1); + testRegistry_1.setOpenBalance(TEST_OPEN_BALANCE_1); + testRegistry_1.setCloseBalance(TEST_CLOSE_BALANCE_1); + testRegistry_1.setCredit(TEST_CREDIT_1); + testRegistry_1.setDebit(TEST_DEBIT_1); + testRegistry_1.setClearingDate(TEST_START_CLEARING_DATE); + testRegistry_1.setUpdated(Instant.now()); + Long TEST_REGISTRY_ID_2 = 666L; + testRegistry_2.setId(TEST_REGISTRY_ID_2); + testRegistry_2.setCompanyId(TEST_COMPANY_ID_2); + testRegistry_2.setSecurityId(TEST_SECURITY_ID_2); + Long TEST_PAYMT_ID_2 = 333L; + testRegistry_2.setPaymentId(TEST_PAYMT_ID_2); + String TEST_TRADING_CLEARING_REGISTRY_2 = "test-trading-clearing-registry-2"; + testRegistry_2.setTradingClearingRegistry(TEST_TRADING_CLEARING_REGISTRY_2); + Long TEST_MONEY_ACCOUNT_2 = 12L; + testRegistry_2.setAccountId(TEST_MONEY_ACCOUNT_2); + String TEST_REGISTRY_CODE_2 = "test-registry-code-2"; + testRegistry_2.setRegistryCode(TEST_REGISTRY_CODE_2); + testRegistry_2.setOpenBalance(TEST_OPEN_BALANCE_2); + testRegistry_2.setCloseBalance(TEST_CLOSE_BALANCE_2); + testRegistry_2.setCredit(TEST_CREDIT_2); + testRegistry_2.setDebit(TEST_DEBIT_2); + testRegistry_2.setClearingDate(TEST_END_CLEARING_DATE); + testRegistry_2.setUpdated(Instant.now()); testRegistryForCompanyId_1.setCompanyId(TEST_COMPANY_ID_1); testRegistryForCompanyId_1.setTradingClearingRegistry(TEST_TRADING_CLEARING_REGISTRY_1); + testRegistryForCompanyId_1.setUpdated(Instant.now()); testRegistryForCompanyId_2.setCompanyId(TEST_COMPANY_ID_2); testRegistryForCompanyId_2.setTradingClearingRegistry(TEST_TRADING_CLEARING_REGISTRY_2); - registryImdg.insert(testRegistryForCompanyId_1); - registryImdg.insert(testRegistryForCompanyId_2); + testRegistryForCompanyId_2.setUpdated(Instant.now()); tm_tRegistry_1.setRegistryCode("TM_T"); tm_tRegistry_1.setBalance(BigDecimal.valueOf(779L)); + tm_tRegistry_1.setUpdated(Instant.now()); om_tRegistry_1.setRegistryCode("OM_T"); om_tRegistry_1.setBalance(BigDecimal.valueOf(2L)); + om_tRegistry_1.setUpdated(Instant.now()); ts_tRegistry_1.setRegistryCode("TS_T"); ts_tRegistry_1.setBalance(BigDecimal.valueOf(889L)); + ts_tRegistry_1.setUpdated(Instant.now()); os_tRegistry_1.setRegistryCode("OS_T"); os_tRegistry_1.setBalance(BigDecimal.valueOf(1L)); + os_tRegistry_1.setUpdated(Instant.now()); tm_tRegistry_1.setSessionId(TEST_SESSION_ID_1); om_tRegistry_1.setSessionId(TEST_SESSION_ID_1); ts_tRegistry_1.setSessionId(TEST_SESSION_ID_1); os_tRegistry_1.setSessionId(TEST_SESSION_ID_1); tm_tRegistry_2.setRegistryCode("TM_T"); tm_tRegistry_2.setBalance(BigDecimal.valueOf(779L)); + tm_tRegistry_2.setUpdated(Instant.now()); om_tRegistry_2.setRegistryCode("OM_T"); om_tRegistry_2.setBalance(BigDecimal.valueOf(2L)); + om_tRegistry_2.setUpdated(Instant.now()); ts_tRegistry_2.setRegistryCode("TS_T"); ts_tRegistry_2.setBalance(BigDecimal.valueOf(889L)); + ts_tRegistry_2.setUpdated(Instant.now()); os_tRegistry_2.setRegistryCode("OS_T"); os_tRegistry_2.setBalance(BigDecimal.valueOf(1L)); + os_tRegistry_2.setUpdated(Instant.now()); tm_tRegistry_2.setSessionId(TEST_SESSION_ID_2); om_tRegistry_2.setSessionId(TEST_SESSION_ID_2); ts_tRegistry_2.setSessionId(TEST_SESSION_ID_2); os_tRegistry_2.setSessionId(TEST_SESSION_ID_2); + registryImdg.insert(testRegistryForCompanyId_1); + registryImdg.insert(testRegistryForCompanyId_2); registryImdg.insert(tm_tRegistry_1); registryImdg.insert(om_tRegistry_1); registryImdg.insert(ts_tRegistry_1); @@ -327,12 +856,18 @@ public class ReportServiceTest { registryImdg.insert(om_tRegistry_2); registryImdg.insert(ts_tRegistry_2); registryImdg.insert(os_tRegistry_2); + registryImdg.insert(testRegistry_1); + registryImdg.insert(testRegistry_2); listingImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Listing, Listing.class); testListing_1.setSecurityId(TEST_SECURITY_ID_1); testListing_1.setLotSize(TEST_LOT_SIZE_1); + String TEST_TRADING_CURRENCY_1 = "test-trading-currency-1"; + testListing_1.setTradingCurrency(TEST_TRADING_CURRENCY_1); testListing_2.setSecurityId(TEST_SECURITY_ID_2); testListing_2.setLotSize(TEST_LOT_SIZE_2); + String TEST_TRADING_CURRENCY_2 = "test-trading-currency-2"; + testListing_2.setTradingCurrency(TEST_TRADING_CURRENCY_2); listingImdg.insert(testListing_1); listingImdg.insert(testListing_2); @@ -349,81 +884,45 @@ public class ReportServiceTest { tradingClearingRegistryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class); testTradingClearingRegistry_1.setId(TEST_TRADING_CLEARING_REGISTRY_ID_1); testTradingClearingRegistry_1.setMoneyAccountId(TEST_MONEY_ACCOUNT_1); + Long TEST_DEPO_ACCOUNT_1 = 13L; testTradingClearingRegistry_1.setDepoAccountId(TEST_DEPO_ACCOUNT_1); tradingClearingRegistryImdg.insert(testTradingClearingRegistry_1); testTradingClearingRegistry_2.setId(TEST_TRADING_CLEARING_REGISTRY_ID_2); testTradingClearingRegistry_2.setMoneyAccountId(TEST_MONEY_ACCOUNT_2); + Long TEST_DEPO_ACCOUNT_2 = 14L; testTradingClearingRegistry_2.setDepoAccountId(TEST_DEPO_ACCOUNT_2); tradingClearingRegistryImdg.insert(testTradingClearingRegistry_2); + + statementImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Statement, Statement.class); + testStatement_1.setAddresseeId(TEST_COMPANY_ID_1); + testStatement_1.setCreated(Instant.now()); + testStatement_2.setAddresseeId(TEST_COMPANY_ID_2); + testStatement_2.setCreated(Instant.now()); + statementImdg.insert(testStatement_1); + statementImdg.insert(testStatement_2); + + paymentInstructionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_PaymentInstruction, PaymentInstruction.class); + testPaymentInstruction_1.setId(TEST_PAYMT_ID_1); + testPaymentInstruction_1.setCreditLeg_direction(InOutDirection.out.getKey()); + testPaymentInstruction_1.setPaymentDate(Instant.now()); + testPaymentInstruction_2.setId(TEST_PAYMT_ID_2); + testPaymentInstruction_2.setCreditLeg_direction(InOutDirection.out.getKey()); + testPaymentInstruction_2.setPaymentDate(Instant.now()); + paymentInstructionImdg.insert(testPaymentInstruction_1); + paymentInstructionImdg.insert(testPaymentInstruction_2); + + sTradeImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_STrades, STrades.class); + testSTrade.setTradeNum(testExecutionFond.getExchangeExecutionId()); + testSTrade.setOperation(testExecutionFond.getSide()); + String TEST_SETTLE_CODE = "test-settle-code"; + testSTrade.setSettleCode(TEST_SETTLE_CODE); + String TEST_CLASS_CODE = "test-class-code"; + testSTrade.setClassCode(TEST_CLASS_CODE); + sTradeImdg.insert(testSTrade); } - private final Long TEST_EXCHANGE_EXECUTION_ID_1 = 777L; - private final Long TEST_EXCHANGE_EXECUTION_ID_2 = 888L; - private final Instant TEST_EXCHANGE_EXECUTION_TIME_1 = Instant.ofEpochMilli(777777777777L); - private final Instant TEST_EXCHANGE_EXECUTION_TIME_2 = Instant.ofEpochMilli(888888888888L); - private final LocalDate TEST_TRADING_DATE_1 = LocalDate.now().minus(10, ChronoUnit.DAYS); - private final LocalDate TEST_TRADING_DATE_2 = LocalDate.now().minus(20, ChronoUnit.DAYS); - private final Long TEST_TRADING_CLEARING_REGISTRY_ID_1 = 777L; - private final Long TEST_TRADING_CLEARING_REGISTRY_ID_2 = 888L; - private final String TEST_MARKET_1 = Market.fond.getKey(); - private final String TEST_MARKET_2 = Market.mkrs.getKey(); - private final BigDecimal TEST_PRICE_1 = BigDecimal.valueOf(77L); - private final BigDecimal TEST_PRICE_2 = BigDecimal.valueOf(88L); - private final BigDecimal TEST_LOTS_1 = BigDecimal.valueOf(777L); - private final BigDecimal TEST_LOTS_2 = BigDecimal.valueOf(888L); - private final BigDecimal TEST_QUANTITY_1 = BigDecimal.valueOf(7777L); - private final BigDecimal TEST_QUANTITY_2 = BigDecimal.valueOf(8888L); - private final BigDecimal TEST_INTEREST_AMOUNT_1 = BigDecimal.valueOf(77777L); - private final BigDecimal TEST_INTEREST_AMOUNT_2 = BigDecimal.valueOf(88888L); - private final String TEST_SIDE_1 = Side.SELL.getKey(); - private final String TEST_SIDE_2 = Side.BUY.getKey(); - private final String TEST_SETTLEMENT_CURRENCY_1 = "test-settlement-currency-1"; - private final String TEST_SETTLEMENT_CURRENCY_2 = "test-settlement-currency-2"; - private final Long TEST_COMPANY_ID_1 = 1007L; - private final Long TEST_COMPANY_ID_2 = 1008L; - private final String TEST_COMPANY_FULLNAME_1 = "test-company-fullname-1"; - private final String TEST_COMPANY_FULLNAME_2 = "test-company-fullname-2"; - private final Long TEST_DURATION_1 = 2007L; - private final Long TEST_DURATION_2 = 2008L; - private final String TEST_SECURITY_FULL_NAME_1 = "test-security-full-name-1"; - private final String TEST_SECURITY_FULL_NAME_2 = "test-security-full-name-2"; - private final String TEST_SECURITY_SYMBOL_1 = "test-security-symbol-1"; - private final String TEST_SECURITY_SYMBOL_2 = "test-security-symbol-2"; - private final Long TEST_SECURITY_ID_1 = 3007L; - private final Long TEST_SECURITY_ID_2 = 3008L; - private final Long TEST_COUNTER_PARTY_ID_1 = 4007L; - private final Long TEST_COUNTER_PARTY_ID_2 = 4008L; - private final String TEST_COVERAGE_STATUS_1 = Allowed.ALLOWED.getKey(); - private final String TEST_COVERAGE_STATUS_2 = Allowed.DENIED.getKey(); - private final Long TEST_SESSION_ID_1 = 10007L; - private final Long TEST_SESSION_ID_2 = 10008L; - private final LocalDate TEST_CLEARING_DATE_1 = LocalDate.now().minus(30, ChronoUnit.DAYS); - private final LocalDate TEST_CLEARING_DATE_2 = LocalDate.now().minus(40, ChronoUnit.DAYS); - private final Long TEST_EXCHANGE_ORDER_ID = 20007L; - private final BigDecimal TEST_SETTLEMENT_AMOUNT = BigDecimal.valueOf(7777777L); - private final String TEST_COMMENT = "test-comment"; - private final Long TEST_CLIENT_CODE_ID = 222222L; - private final String TEST_SETTLEMENT_CODE = "test-settlement-code"; - private final LocalDate TEST_SETTLEMENT_DATE = LocalDate.now().minus(22, ChronoUnit.DAYS); - private final Instant TEST_EXCHANGE_EXECUTION_MICROSECONDS = Instant.now().minus(777L, ChronoUnit.SECONDS); - private final BigDecimal TEST_FIRST_LEG_AMOUNT = BigDecimal.valueOf(1L); - private final BigDecimal TEST_SECOND_LEG_AMOUNT = BigDecimal.valueOf(2L); - private final LocalDate TEST_FIRST_LEG_SETTLEMENT_DATE = LocalDate.now().minus(1, ChronoUnit.DAYS); - private final LocalDate TEST_SECOND_LEG_SETTLEMENT_DATE = LocalDate.now().minus(2, ChronoUnit.DAYS); - private final String TEST_FIRST_LEG_SETTLEMENT_CODE = "test-first-leg-settlement-code"; - private final String TEST_SECOND_LEG_SETTLEMENT_CODE = "test-second-leg-settlement-code"; - private final String TEST_CONTRACT = "test_contract"; - private final String TEST_TRADING_CLEARING_REGISTRY_1 = "test-trading-clearing-registry-1"; - private final String TEST_TRADING_CLEARING_REGISTRY_2 = "test-trading-clearing-registry-2"; - private final BigDecimal TEST_LOT_SIZE_1 = BigDecimal.valueOf(12L); - private final BigDecimal TEST_LOT_SIZE_2 = BigDecimal.valueOf(34L); - private final BigDecimal TEST_NOMINAL_1 = BigDecimal.valueOf(333L); - private final BigDecimal TEST_NOMINAL_2 = BigDecimal.valueOf(444L); - private final BigDecimal TEST_COUPON_1 = BigDecimal.valueOf(3333L); - private final BigDecimal TEST_COUPON_2 = BigDecimal.valueOf(4444L); - private final Long TEST_MONEY_ACCOUNT_1 = 11L; - private final Long TEST_MONEY_ACCOUNT_2 = 12L; - private final Long TEST_DEPO_ACCOUNT_1 = 13L; - private final Long TEST_DEPO_ACCOUNT_2 = 14L; - + private void clearTestDir() throws IOException { + FileUtils.deleteDirectory(outFolder); + outFolder.mkdir(); + } } diff --git a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/KS_BR_PFX64_INFTYPE_1_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/KS_BR_PFX64_INFTYPE_1_expected.csv new file mode 100644 index 000000000..e56f1778b --- /dev/null +++ b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/KS_BR_PFX64_INFTYPE_1_expected.csv @@ -0,0 +1,2 @@ +id,securityId,tradeNo,tradeDate,tradeTime,settleDate,settleCode,price,quanity,value +"888","3007","777","07.05.2023","17.05.2023","17.05.2023","test-settle-code","1000","7777","7777777" diff --git a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/KS_BR_PFX64_INFTYPE_2_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/KS_BR_PFX64_INFTYPE_2_expected.csv new file mode 100644 index 000000000..0e82e2d79 --- /dev/null +++ b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/KS_BR_PFX64_INFTYPE_2_expected.csv @@ -0,0 +1,2 @@ +id,securityId,tradeNo,tradeDate,tradeTime,settleDate,settleCode,price,quanity,value +"888","3007","777","17.05.2023","17.05.2023","17.05.2023","test-settle-code","1000","7777","7777777" diff --git a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/KS_BR_PFX64_INFTYPE_3_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/KS_BR_PFX64_INFTYPE_3_expected.csv new file mode 100644 index 000000000..473063b11 --- /dev/null +++ b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/KS_BR_PFX64_INFTYPE_3_expected.csv @@ -0,0 +1,2 @@ +id,securityId,tradeNo,tradeDate,tradeTime,settleDate,settleCode,price,quanity,value +"888","3007","777","27.05.2023","17.05.2023","27.05.2023","test-settle-code","1000","7777","7777777" diff --git a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/KS_BR_PFX64_INFTYPE_4_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/KS_BR_PFX64_INFTYPE_4_expected.csv new file mode 100644 index 000000000..fae8b0a3f --- /dev/null +++ b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/KS_BR_PFX64_INFTYPE_4_expected.csv @@ -0,0 +1,2 @@ +id,securityId,tradeNo,tradeDate,tradeTime,settleDate,settleCode,price,quanity,value +"888","3007","777","27.05.2023","17.05.2023","17.05.2023","test-settle-code","1000","7777","7777777" diff --git a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/KS_BR_PFX64_empty_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/KS_BR_PFX64_empty_expected.csv new file mode 100644 index 000000000..a5e3347ef --- /dev/null +++ b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/KS_BR_PFX64_empty_expected.csv @@ -0,0 +1 @@ +id,securityId,tradeNo,tradeDate,tradeTime,settleDate,settleCode,price,quanity,value diff --git a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/operational_liabilities_claims_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/operational_liabilities_claims_expected.csv new file mode 100644 index 000000000..262bcead4 --- /dev/null +++ b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/operational_liabilities_claims_expected.csv @@ -0,0 +1,3 @@ +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 +"888","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" +"777","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/operational_money_change_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/operational_money_change_expected.csv new file mode 100644 index 000000000..0e4a9fb03 --- /dev/null +++ b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/operational_money_change_expected.csv @@ -0,0 +1,3 @@ +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 +"999","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","test-registry-code-1","3","777","700000","780","","777777","17.05.2023T12:10:50","77777","17.05.2023T12:10:50" +"666","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","test-registry-code-2","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/period_liabilities_claims_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/period_liabilities_claims_expected.csv new file mode 100644 index 000000000..56594dd85 --- /dev/null +++ b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/period_liabilities_claims_expected.csv @@ -0,0 +1,3 @@ +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 +"888","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" +"777","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/period_money_change_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/period_money_change_expected.csv new file mode 100644 index 000000000..655fa902b --- /dev/null +++ b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/period_money_change_expected.csv @@ -0,0 +1,3 @@ +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 +"999","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","test-registry-code-1","3","777","700000","780","","777777","17.05.2023T12:18:01","77777","17.05.2023T12:18:01" +"666","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","test-registry-code-2","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/operational_liabilities_claims_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/summary_liabilities_claims_expected.csv similarity index 65% rename from clearing-parent/reports-service/src/test/resources/operational_liabilities_claims_expected.csv rename to clearing-parent/reports-service/src/test/resources/expected_reports_csv/summary_liabilities_claims_expected.csv index d830c5b3b..7f5048002 100644 --- a/clearing-parent/reports-service/src/test/resources/operational_liabilities_claims_expected.csv +++ b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/summary_liabilities_claims_expected.csv @@ -1,3 +1,3 @@ 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 -"1","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" -"2","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","N","14.05.2023","88","","34","888","","1","","","","","1","","777","888" +888,"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" +777,"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/summary_money_change_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/summary_money_change_expected.csv new file mode 100644 index 000000000..a9085ae59 --- /dev/null +++ b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/summary_money_change_expected.csv @@ -0,0 +1,3 @@ +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 +"999","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","test-registry-code-1","3","777","700000","780","","777777","17.05.2023T12:25:42","77777","17.05.2023T12:25:42" +"666","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","test-registry-code-2","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/unfulfilled_deal_report_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/unfulfilled_deal_report_expected.csv new file mode 100644 index 000000000..866e1ccdb --- /dev/null +++ b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/unfulfilled_deal_report_expected.csv @@ -0,0 +1,2 @@ +id,securityId,tradeNo,tradeDate,settleCode +"888","3007","777","07.05.2023","test-class-code" From 35a7a41091f5afaa79bc65da04729244bd68a072 Mon Sep 17 00:00:00 2001 From: AKurakin Date: Wed, 17 May 2023 17:51:05 +0300 Subject: [PATCH 18/32] =?UTF-8?q?clearing-service=20http://jira.mfd.msk:80?= =?UTF-8?q?88/browse/CLS-290=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D1=87=D0=B8=D0=BA=20=D0=B4=D0=BB=D1=8F=20=D1=88=D0=B0=D0=B3?= =?UTF-8?q?=D0=B0=206?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../statics/data/registry/Registry.java | 11 +- .../clearing/session/stage/TaskType.java | 5 + ...nObligationsAndSettlementRequirements.java | 118 ++++++++++++++++++ ...tionsAndSettlementRequirementsPayload.java | 31 +++++ .../session/stage/util/RegistryUtil.java | 43 +++++++ .../session/stage/util/RegistryUtilTest.java | 25 ++++ .../enumeration/RegistryDesignation.java | 6 +- .../platform/enumeration/RegistryStatus.java | 19 +++ 8 files changed, 256 insertions(+), 2 deletions(-) create mode 100644 clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/CreateRegistryOnObligationsAndSettlementRequirements.java create mode 100644 clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/task/RegistryOnObligationsAndSettlementRequirementsPayload.java create mode 100644 clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/util/RegistryUtil.java create mode 100644 clearing-parent/clearing-service/src/test/java/ru/spcex/clearing/session/stage/util/RegistryUtilTest.java create mode 100644 platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/RegistryStatus.java diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/registry/Registry.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/registry/Registry.java index 7aed98446..93836225e 100644 --- a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/registry/Registry.java +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/registry/Registry.java @@ -13,7 +13,7 @@ import java.time.LocalDate; *

* DB table: REGISTRY **/ -public class Registry extends BusinessObject { +public class Registry extends BusinessObject implements Cloneable { private static final long serialVersionUID = ConstSerializable.serialVersionUID; private Long companyId; @@ -412,4 +412,13 @@ public class Registry extends BusinessObject { public void setPaymentId(Long paymentId) { this.paymentId = paymentId; } + + @Override + public Object clone() { + try { + return super.clone(); + } catch (CloneNotSupportedException e) { + throw new RuntimeException("never", e); // it is Cloneable + } + } } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/TaskType.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/TaskType.java index c1fb4a584..6e60b79c5 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/TaskType.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/TaskType.java @@ -16,4 +16,9 @@ public enum TaskType { */ InclusionToPool, + /** + * Step 6 + */ + CreateRegistryOnObligationsAndSettlementRequirements, + } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/CreateRegistryOnObligationsAndSettlementRequirements.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/CreateRegistryOnObligationsAndSettlementRequirements.java new file mode 100644 index 000000000..061c367cd --- /dev/null +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/CreateRegistryOnObligationsAndSettlementRequirements.java @@ -0,0 +1,118 @@ +package ru.spcex.clearing.session.stage.impl; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import ru.clearing.classes.statics.data.execution.ExecutionDeposit; +import ru.clearing.classes.statics.data.execution.ExecutionFond; +import ru.clearing.classes.statics.data.registry.Registry; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.session.stage.ISessionStage; +import ru.spcex.clearing.session.stage.StageResult; +import ru.spcex.clearing.session.stage.Task; +import ru.spcex.clearing.session.stage.task.DealsPreparePayload; +import ru.spcex.clearing.session.stage.task.RegistryOnObligationsAndSettlementRequirementsPayload; +import ru.spcex.clearing.session.stage.util.RegistryUtil; +import ru.spcex.platform.classes.base.interfaces.IExecution; +import ru.spcex.platform.classes.base.interfaces.WithExchangeExecutionId; +import ru.spcex.platform.enumeration.RegistryDesignation; +import ru.spcex.platform.enumeration.RegistryInstrumentType; +import ru.spcex.platform.enumeration.RegistryStatus; +import ru.spcex.platform.enumeration.RegistryUnit; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgId; +import ru.spcex.platform.imdg.api.ImdgProvider; + +import java.time.Instant; +import java.util.ArrayList; +import java.util.Collection; + +@Service +public class CreateRegistryOnObligationsAndSettlementRequirements implements ISessionStage { + private final Logger log = LoggerFactory.getLogger(getClass()); + + private final ImdgId idSequence; + private final Imdg registryImdg; + + @Autowired + public CreateRegistryOnObligationsAndSettlementRequirements(ImdgProvider imdgProvider) { + this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); + this.idSequence = imdgProvider.getImdgIdGenerator(); + + } + + @Override + public StageResult submit(Task task) { + RegistryOnObligationsAndSettlementRequirementsPayload payload = (RegistryOnObligationsAndSettlementRequirementsPayload) task.getData(); + switch (task.getTaskType()) { + case CreateRegistryOnObligationsAndSettlementRequirements -> { + return createRegistryOnObligationsAndSettlementRequirements(payload.getSessionId()); + } + default -> { + throw new IllegalStateException("Unknown task type: " + task.getTaskType()); + } + } + } + + private Collection selectRegistry(Long sessionId) { + String registrySQL = "sessionId = " + sessionId; + registrySQL += " and (registryDesignation=" + RegistryDesignation.O.getKey() + " or registryDesignation=" + RegistryDesignation.T.getKey() + ")"; + registrySQL += " and (registryInstrumentType=" + RegistryInstrumentType.S.getKey() + " or registryInstrumentType=" + RegistryInstrumentType.M.getKey() + ")"; + registrySQL += " and (registryUnit=" + RegistryUnit.T.getKey() + ")"; + registrySQL += " and registryStatus=" + RegistryStatus.OK.getKey() + ")"; + // registryCode = [O/T][S/M][*][T] & registryStatus=OK + Collection result = registryImdg.getCollectionObjectsBySQL(registrySQL); + log.trace("Selected {} registry's by sql: {}", result.size(), registrySQL); + return result; + } + + private StageResult createRegistryOnObligationsAndSettlementRequirements(Long sessionId) { + Collection forRegistries = selectRegistry(sessionId); + ArrayList newRegistries = new ArrayList<>(); + + //todo oreder by обрабатываться группами по полю registry.groupId + + for (Registry registry : forRegistries) { + Registry newRegistry = createRegistryFor(registry); + newRegistries.add(newRegistry); + registryImdg.insert(newRegistry); + log.trace("For registry {} (registryCode={}) make new registry {} (registryCode={})", + registry.getId(), registry.getRegistryCode(), newRegistry.getId(), newRegistry.getRegistryCode()); + } + + StageResult> res = new StageResult<>(null, true); + res.setStageResult(newRegistries); + return res; + } + + Registry createRegistryFor(Registry forRegistry) { + Registry newRegistry = (Registry) forRegistry.clone();// cloneable + newRegistry.setId(idSequence.nextId()); + newRegistry.setCreated(Instant.now()); + newRegistry.setUpdated(newRegistry.getCreated()); + + String newRegDestination; + if (RegistryDesignation.O.equalsByKey(forRegistry.getRegistryDesignation())) { + newRegDestination = RegistryDesignation.L.getKey(); + } else if (RegistryDesignation.T.equalsByKey(forRegistry.getRegistryDesignation())) { + newRegDestination = RegistryDesignation.C.getKey(); + } else { + throw new IllegalArgumentException("RegistryDesignation=" + forRegistry.getRegistryDesignation()); + } + newRegistry.setRegistryDesignation(newRegDestination); + + String newRegistryInstrumentType; // по ТЗ не меняется + if (RegistryInstrumentType.S.equalsByKey(forRegistry.getRegistryInstrumentType())) { + newRegistryInstrumentType = RegistryInstrumentType.S.getKey(); + } else if (RegistryInstrumentType.M.equalsByKey(forRegistry.getRegistryInstrumentType())) { + newRegistryInstrumentType = RegistryInstrumentType.M.getKey(); + } else { + throw new IllegalArgumentException("RegistryInstrumentType=" + forRegistry.getRegistryInstrumentType()); + } + newRegistry.setRegistryInstrumentType(newRegistryInstrumentType); + + newRegistry.setRegistryCode(RegistryUtil.clearingCode(newRegistry)); + return newRegistry; + } +} diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/task/RegistryOnObligationsAndSettlementRequirementsPayload.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/task/RegistryOnObligationsAndSettlementRequirementsPayload.java new file mode 100644 index 000000000..e0ddc15da --- /dev/null +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/task/RegistryOnObligationsAndSettlementRequirementsPayload.java @@ -0,0 +1,31 @@ +package ru.spcex.clearing.session.stage.task; + +public class RegistryOnObligationsAndSettlementRequirementsPayload { + private Long sessionId; +// private Long companyId; +// private Long securityId; + + public Long getSessionId() { + return sessionId; + } + + public void setSessionId(Long sessionId) { + this.sessionId = sessionId; + } + +// public Long getCompanyId() { +// return companyId; +// } +// +// public void setCompanyId(Long companyId) { +// this.companyId = companyId; +// } +// +// public Long getSecurityId() { +// return securityId; +// } +// +// public void setSecurityId(Long securityId) { +// this.securityId = securityId; +// } +} diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/util/RegistryUtil.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/util/RegistryUtil.java new file mode 100644 index 000000000..4361b6d4b --- /dev/null +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/util/RegistryUtil.java @@ -0,0 +1,43 @@ +package ru.spcex.clearing.session.stage.util; + +import org.apache.commons.lang3.StringUtils; +import ru.clearing.classes.statics.data.registry.Registry; +import ru.spcex.platform.enumeration.RegistryCapacity; +import ru.spcex.platform.enumeration.RegistryDesignation; +import ru.spcex.platform.enumeration.RegistryInstrumentType; +import ru.spcex.platform.enumeration.RegistryUnit; + +import java.util.*; + +public class RegistryUtil { + + + public static String clearingCode(Registry ofRegistry) { + return clearingCode(ofRegistry.getRegistryDesignation(), ofRegistry.getRegistryInstrumentType(), ofRegistry.getRegistryCapacity(), ofRegistry.getRegistryUnit()); + } + + public static String clearingCode(String registryDesignation, String registryInstrumentType, String registryCapacity, String registryUnit) { + if (StringUtils.isEmpty(registryDesignation)) registryDesignation = "-"; + if (StringUtils.isEmpty(registryInstrumentType)) registryInstrumentType = "-"; + if (StringUtils.isEmpty(registryCapacity)) registryCapacity = "-"; + if (StringUtils.isEmpty(registryUnit)) registryUnit = "-"; + return registryDesignation + registryInstrumentType + registryCapacity + registryUnit; + } + + public static String clearingCode(RegistryDesignation registryDesignation, RegistryInstrumentType registryInstrumentType, RegistryCapacity registryCapacity, RegistryUnit registryUnit) { + return registryDesignation.getKey() + registryInstrumentType.getKey() + registryCapacity.getKey() + registryUnit.getKey(); + } + + public static Map> groupByGroupId(Collection registries) { + HashMap> groups = new HashMap<>(); + for (Registry reg : registries) { + List lst = groups.get(reg.getGroupId()); + if (lst == null) { + lst = new ArrayList<>(); + groups.put(reg.getGroupId(), lst); + } + lst.add(reg); + } + return groups; + } +} diff --git a/clearing-parent/clearing-service/src/test/java/ru/spcex/clearing/session/stage/util/RegistryUtilTest.java b/clearing-parent/clearing-service/src/test/java/ru/spcex/clearing/session/stage/util/RegistryUtilTest.java new file mode 100644 index 000000000..d423313bd --- /dev/null +++ b/clearing-parent/clearing-service/src/test/java/ru/spcex/clearing/session/stage/util/RegistryUtilTest.java @@ -0,0 +1,25 @@ +package ru.spcex.clearing.session.stage.util; + +import org.junit.jupiter.api.Test; +import ru.clearing.classes.statics.data.registry.Registry; + +import static org.junit.jupiter.api.Assertions.*; + +class RegistryUtilTest { + + @Test + void clearingCode1() { + assertEquals("OMAT", RegistryUtil.clearingCode("O", "M", "A", "T")); + assertEquals("O-A-", RegistryUtil.clearingCode("O", "", "A", null)); + } + + @Test + void clearingCode2() { + Registry reg = new Registry(); + reg.setRegistryDesignation("O"); + reg.setRegistryInstrumentType("M"); + reg.setRegistryCapacity("A"); + reg.setRegistryUnit("T"); + assertEquals("OMAT", RegistryUtil.clearingCode(reg)); + } +} \ No newline at end of file diff --git a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/RegistryDesignation.java b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/RegistryDesignation.java index 0d9420516..896e326af 100644 --- a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/RegistryDesignation.java +++ b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/RegistryDesignation.java @@ -3,7 +3,11 @@ package ru.spcex.platform.enumeration; import ru.spcex.platform.utils.enumeration.IEnumKey; public enum RegistryDesignation implements IEnumKey { - A("A") + A("A"), + O("O"), + T("T"), + L("L"), + C("C") ; private final String key; diff --git a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/RegistryStatus.java b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/RegistryStatus.java new file mode 100644 index 000000000..dd948e3b9 --- /dev/null +++ b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/RegistryStatus.java @@ -0,0 +1,19 @@ +package ru.spcex.platform.enumeration; + +import ru.spcex.platform.utils.enumeration.IEnumKey; + +public enum RegistryStatus implements IEnumKey { + OK("OK"), + ; + + private final String key; + + RegistryStatus(String key) { + this.key = key; + } + + @Override + public String getKey() { + return key; + } +} From 967877537d2efaec05e5073d61d232ca7bd15c55 Mon Sep 17 00:00:00 2001 From: ialbert Date: Wed, 17 May 2023 18:19:57 +0300 Subject: [PATCH 19/32] http://jira.mfd.msk:8088/browse/CLS-290 --- .../session/stage/impl/DealsPrepare.java | 33 +++++++++++++++++-- .../ImdgPredicateBuilderHazelcast.java | 21 ++++++++++++ .../api/predicate/ImdgPredicateBuilder.java | 4 +++ 3 files changed, 56 insertions(+), 2 deletions(-) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/DealsPrepare.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/DealsPrepare.java index 7189e13c2..4f7d0382e 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/DealsPrepare.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/DealsPrepare.java @@ -15,10 +15,14 @@ import ru.spcex.platform.classes.base.interfaces.IExecution; import ru.spcex.platform.classes.base.interfaces.WithExchangeExecutionId; import ru.spcex.platform.imdg.api.Imdg; 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.util.ArrayList; import java.util.Collection; import java.util.Comparator; import java.util.List; +import java.util.function.BiFunction; import java.util.function.Function; import java.util.stream.Stream; @@ -27,6 +31,8 @@ public class DealsPrepare implements ISessionStage { private final Logger log = LoggerFactory.getLogger(getClass()); private final Imdg executionDepositImdg; private final Imdg executionFondImdg; + private final List execDepositPredicates = new ArrayList<>(); + private final List execFondPredicates = new ArrayList<>(); @Autowired public DealsPrepare(ImdgProvider imdgProvider) { @@ -55,8 +61,19 @@ public class DealsPrepare implements ISessionStage { if (securityId != null) { executionDepositSQL.append(" and securityId = ").append(securityId); } - Collection excDpsts = executionDepositImdg.getCollectionObjectsBySQL(executionDepositSQL.toString()); - Collection excFonds = executionFondImdg.getCollectionObjectsBySQL(executionDepositSQL.toString()); + ImdgPredicate sqlPredicate = executionFondImdg.predicateBuilder().sql(executionDepositSQL.toString()); + BiFunction, Imdg, ImdgPredicate> prdComposer = (imdgPredicates, imdg) -> { + ImdgPredicateBuilder pb = imdg.predicateBuilder(); + if (imdgPredicates.isEmpty()) { + return sqlPredicate; + } else { + return pb.and(sqlPredicate, pb.and(execDepositPredicates.toArray(new ImdgPredicate[0]))); + } + }; + ImdgPredicate excDepPrct = prdComposer.apply(execDepositPredicates, executionDepositImdg); + ImdgPredicate excFondPrct = prdComposer.apply(execFondPredicates, executionFondImdg); + Collection excDpsts = executionDepositImdg.getCollectionObjectsByPredicate(excDepPrct); + Collection excFonds = executionFondImdg.getCollectionObjectsByPredicate(excFondPrct); List excs = Stream.concat(excDpsts.stream().map(execToInterface()), excFonds.stream().map(execToInterface())) .sorted(Comparator.comparing(WithExchangeExecutionId::getExchangeExecutionId)) @@ -74,6 +91,18 @@ public class DealsPrepare implements ISessionStage { return res; } + public DealsPrepare addExecutionDepositCondition(ImdgPredicate imdgPredicate) { + this.execDepositPredicates.add(imdgPredicate); + return this; + } + + public DealsPrepare addExecutionFondCondition(ImdgPredicate imdgPredicate) { + this.execFondPredicates.add(imdgPredicate); + return this; + } + + + private static Function execToInterface() { return (e) -> e; } diff --git a/platform-parent/platform-imdg-api-hazelcast-impl/src/main/java/ru/spcex/platform/imdg/iml/hazelcast/adapter/predicate/ImdgPredicateBuilderHazelcast.java b/platform-parent/platform-imdg-api-hazelcast-impl/src/main/java/ru/spcex/platform/imdg/iml/hazelcast/adapter/predicate/ImdgPredicateBuilderHazelcast.java index 944dba3ae..60f97795e 100644 --- a/platform-parent/platform-imdg-api-hazelcast-impl/src/main/java/ru/spcex/platform/imdg/iml/hazelcast/adapter/predicate/ImdgPredicateBuilderHazelcast.java +++ b/platform-parent/platform-imdg-api-hazelcast-impl/src/main/java/ru/spcex/platform/imdg/iml/hazelcast/adapter/predicate/ImdgPredicateBuilderHazelcast.java @@ -1,6 +1,8 @@ package ru.spcex.platform.imdg.iml.hazelcast.adapter.predicate; +import com.hazelcast.query.Predicate; import com.hazelcast.query.Predicates; +import com.hazelcast.query.SqlPredicate; import ru.spcex.platform.imdg.api.predicate.ImdgPredicate; import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; @@ -64,6 +66,15 @@ public class ImdgPredicateBuilderHazelcast implements ImdgPredicateBuilder { return new ImdgPredicateHazelcast(Predicates.and(paramAMy.hazelcastPredicate, paramBMy.hazelcastPredicate, paramCMy.hazelcastPredicate)); } + @Override + public ImdgPredicate and(ImdgPredicate... param) { + Predicate[] paramMy = new Predicate[param.length]; + for (int i = 0; i < param.length; i++) { + paramMy[i] = ((ImdgPredicateHazelcast) param[i]).getRawPredicate(); + } + return new ImdgPredicateHazelcast(Predicates.and(paramMy)); + } + @Override public ImdgPredicate or(ImdgPredicate paramA, ImdgPredicate paramB) { ImdgPredicateHazelcast paramAMy = (ImdgPredicateHazelcast) paramA; @@ -78,4 +89,14 @@ public class ImdgPredicateBuilderHazelcast implements ImdgPredicateBuilder { ImdgPredicateHazelcast paramCMy = (ImdgPredicateHazelcast) paramC; return new ImdgPredicateHazelcast(Predicates.or(paramAMy.hazelcastPredicate, paramBMy.hazelcastPredicate, paramCMy.hazelcastPredicate)); } + + @Override + public ImdgPredicate sql(String sql) { + return new ImdgPredicateHazelcast(new SqlPredicate(sql)); + } + + @Override + public ImdgPredicate regex(String key, String regex) { + return new ImdgPredicateHazelcast(Predicates.regex(key, regex)); + } } diff --git a/platform-parent/platform-imdg-api/src/main/java/ru/spcex/platform/imdg/api/predicate/ImdgPredicateBuilder.java b/platform-parent/platform-imdg-api/src/main/java/ru/spcex/platform/imdg/api/predicate/ImdgPredicateBuilder.java index 3a9e87d8a..e0c4196d2 100644 --- a/platform-parent/platform-imdg-api/src/main/java/ru/spcex/platform/imdg/api/predicate/ImdgPredicateBuilder.java +++ b/platform-parent/platform-imdg-api/src/main/java/ru/spcex/platform/imdg/api/predicate/ImdgPredicateBuilder.java @@ -12,6 +12,10 @@ public interface ImdgPredicateBuilder { ImdgPredicate not(ImdgPredicate param); ImdgPredicate and(ImdgPredicate paramA, ImdgPredicate paramB); ImdgPredicate and(ImdgPredicate paramA, ImdgPredicate paramB, ImdgPredicate paramC); + ImdgPredicate and(ImdgPredicate... param); ImdgPredicate or(ImdgPredicate paramA, ImdgPredicate paramB); ImdgPredicate or(ImdgPredicate paramA, ImdgPredicate paramB, ImdgPredicate paramC); + + ImdgPredicate sql(String sql); + ImdgPredicate regex(String key, String regex); } From d0a74989a46cdd22c31602594504ea61b60b18da Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Wed, 17 May 2023 18:36:00 +0300 Subject: [PATCH 20/32] http://jira.mfd.msk:8088/browse/CLS-290 stage 5 --- .../spcex/clearing/error/ClearingError.java | 1 + .../spcex/clearing/models/RegistryInfo.java | 4 + .../stage/impl/InclusionObligations.java | 11 +- .../stage/impl/InspectionObligations.java | 125 ++++++++++++++++++ .../stage/task/InspectionPoolPayload.java | 13 ++ 5 files changed, 150 insertions(+), 4 deletions(-) create mode 100644 clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InspectionObligations.java create mode 100644 clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/task/InspectionPoolPayload.java diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/error/ClearingError.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/error/ClearingError.java index 91ec6aa4d..7b8cb5e01 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/error/ClearingError.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/error/ClearingError.java @@ -11,6 +11,7 @@ public enum ClearingError implements IErrorEnumId { SecurityNotFound(5416L), TradingClearingRegistryNotFound(5418L), TradingClearingRegistryNotActive(5419L), + InsecurityObligation(5422L), NewDealsNotFound(5423L), ; private final Long id; diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/models/RegistryInfo.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/models/RegistryInfo.java index ea1e205f5..1c618492f 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/models/RegistryInfo.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/models/RegistryInfo.java @@ -9,4 +9,8 @@ public record RegistryInfo(RegistryDesignation registryDesignation, RegistryInstrumentType registryInstrumentType, RegistryCapacity registryCapacity, RegistryUnit registryUnit) { + + public String buildSqlCondition(){ + return ""; + } } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InclusionObligations.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InclusionObligations.java index 4a61cf6c9..eea004140 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InclusionObligations.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InclusionObligations.java @@ -53,15 +53,18 @@ public class InclusionObligations implements ISessionStage { private StageResult inclusionToPool(String sessionType, Long counterPartyId) { - String sqlCondition = String.format("registryCode like '%s' and " + + String sqlCondition = String.format("registryDesignation in ('%s', '%s') and " + + "registryInstrumentType in ('%s', '%s') and " + + "registryUnit = '%s' and " + "registryStatus = '%s' and " + "settlementDate = '%s' and " + "sessionType = '%s'", - "[O/T][S/M][*][T]", + "O", "T", + "S", "M", + "T", "PROC", LocalDate.now(), sessionType); - Collection obligations = registryImdg.getCollectionObjectsBySQL(sqlCondition); Map> registryByGroupId = obligations.stream(). filter(registry -> registry.getCompanyId().equals(counterPartyId)). @@ -69,7 +72,7 @@ public class InclusionObligations implements ISessionStage { for (Map.Entry> entrySet : registryByGroupId.entrySet()) { log.debug("Processing set of registry with groupId: {}", entrySet.getKey()); - for (Registry registry : entrySet.getValue()){ + for (Registry registry : entrySet.getValue()) { registry.setRegistryStatus("POOL"); registryImdg.update(registry); } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InspectionObligations.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InspectionObligations.java new file mode 100644 index 000000000..47b770347 --- /dev/null +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InspectionObligations.java @@ -0,0 +1,125 @@ +package ru.spcex.clearing.session.stage.impl; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import ru.clearing.classes.statics.data.registry.Registry; +import ru.spcex.clearing.error.ClearingError; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender; +import ru.spcex.clearing.session.stage.ISessionStage; +import ru.spcex.clearing.session.stage.StageResult; +import ru.spcex.clearing.session.stage.Task; +import ru.spcex.clearing.session.stage.task.InspectionPoolPayload; +import ru.spcex.platform.enumeration.RegistryDesignation; +import ru.spcex.platform.enumeration.RegistryInstrumentType; +import ru.spcex.platform.enumeration.RegistryUnit; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgId; +import ru.spcex.platform.imdg.api.ImdgProvider; +import ru.spcex.platform.utils.enumeration.EnumMessage; +import ru.spcex.platform.utils.enumeration.IEnumKey; +import ru.spcex.platform.utils.enumeration.IMessageResolver; +import ru.spcex.platform.utils.enumeration.SimpleMessageResolver; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + + +@Service +public class InspectionObligations implements ISessionStage { + private final Logger log = LoggerFactory.getLogger(getClass()); + //todo remove (set all in single method setImdg(provider -> setImdg1();setIdGenerator();...) + private ImdgProvider imdgProvider; + private ImdgId idGenerator; + private Imdg registryImdg; + private KafkaSender kafkaSender; + private final IMessageResolver msgResolver = new SimpleMessageResolver(); + + @Autowired + public InspectionObligations(ImdgProvider imdgProvider) { + this.imdgProvider = imdgProvider; + this.idGenerator = imdgProvider.getImdgIdGenerator(); + this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); + } + + @Override + public StageResult submit(Task task) { + InspectionPoolPayload payload = (InspectionPoolPayload) task.getData(); + switch (task.getTaskType()) { + case InclusionToPool -> { + return inspectionPool(payload.getProcessedCompanyId()); + } + default -> { + throw new IllegalStateException("Unknown task type: " + task.getTaskType()); + } + } + } + + + private StageResult inspectionPool(Long processedCompanyId) { + String sqlCondition = String.format("registryDesignation in ('%s', '%s') and " + + "registryInstrumentType in ('%s', '%s') and " + + "registryUnit = '%s' and " + + "registryStatus = '%s' and " + + "settlementDate = '%s'", + RegistryDesignation.O.getKey(), RegistryDesignation.T.getKey(), + RegistryInstrumentType.S.getKey(), RegistryInstrumentType.M.getKey(), + RegistryUnit.T.getKey(), + "POOL"); + + Collection obligations = registryImdg.getCollectionObjectsBySQL(sqlCondition); + Map>> registryByGroupIdAndCompanyId = obligations.stream(). + collect(Collectors.groupingBy(Registry::getGroupId, Collectors.groupingBy(Registry::getCompanyId))); + + List insecurityGroups = new ArrayList<>(); + for (Registry currentRegistry : obligations) { + if (insecurityGroups.contains(currentRegistry.getGroupId())) { + log.debug("Skip insecurity groupId: {}", currentRegistry.getGroupId()); + continue; + } + if (IEnumKey.getEnumByKey(RegistryDesignation.class, currentRegistry.getRegistryDesignation()) == RegistryDesignation.A) { + String sqlCounterRegistryCondition = String.format("registryDesignation = '%s' and " + + "registryInstrumentType in ('%s', '%s') and " + + "registryUnit = '%s' and " + + "tradingClearingRegistryId = '%s' and " + + "companyId = '%s' and ", + RegistryDesignation.A, + RegistryInstrumentType.S.getKey(), RegistryInstrumentType.M.getKey(), + RegistryUnit.F.getKey(), + currentRegistry.getTradingClearingRegistryId(), + currentRegistry.getCompanyId()); + Registry counterRegistry = registryImdg.getSingleObjectBySQL(sqlCounterRegistryCondition); + if (currentRegistry.getBalance().compareTo(counterRegistry.getBalance()) > 0) { + log.warn("{}", msgResolver.resolve(new EnumMessage(ClearingError.InsecurityObligation, currentRegistry.getCompanyId()))); + insecurityGroups.add(currentRegistry.getGroupId()); + break; + } + currentRegistry.setRegistryStatus("OK"); + registryImdg.update(counterRegistry); + } + } + + for (Long insecuritiesGroupId : insecurityGroups) { + for (Map.Entry> entrySet : registryByGroupIdAndCompanyId.get(insecuritiesGroupId).entrySet()) { + if (entrySet.getKey().equals(processedCompanyId)) { + for (Registry registry : entrySet.getValue()) { + registry.setRegistryStatus("UNCV"); + registryImdg.update(registry); + } + } else { + for (Registry registry : entrySet.getValue()) { + registry.setRegistryStatus("FAIL"); + registryImdg.update(registry); + } + } + } + } + + return new StageResult(null, true); + } +} diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/task/InspectionPoolPayload.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/task/InspectionPoolPayload.java new file mode 100644 index 000000000..66736d104 --- /dev/null +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/task/InspectionPoolPayload.java @@ -0,0 +1,13 @@ +package ru.spcex.clearing.session.stage.task; + +public class InspectionPoolPayload { + private Long processedCompanyId; + + public Long getProcessedCompanyId() { + return processedCompanyId; + } + + public void setProcessedCompanyId(Long processedCompanyId) { + this.processedCompanyId = processedCompanyId; + } +} From e45b07329002639ef43ea871e0c64c642625cb88 Mon Sep 17 00:00:00 2001 From: AKurakin Date: Wed, 17 May 2023 19:47:24 +0300 Subject: [PATCH 21/32] =?UTF-8?q?clearing-service=20http://jira.mfd.msk:80?= =?UTF-8?q?88/browse/CLS-290=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D1=87=D0=B8=D0=BA=20=D0=B4=D0=BB=D1=8F=20=D1=88=D0=B0=D0=B3?= =?UTF-8?q?=D0=B0=206=20refactoring?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../clearing/session/stage/TaskType.java | 4 ++-- ...rements.java => FormingRegistersOnOS.java} | 23 ++++++++++--------- 2 files changed, 14 insertions(+), 13 deletions(-) rename clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/{CreateRegistryOnObligationsAndSettlementRequirements.java => FormingRegistersOnOS.java} (86%) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/TaskType.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/TaskType.java index 6e60b79c5..60484583a 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/TaskType.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/TaskType.java @@ -17,8 +17,8 @@ public enum TaskType { InclusionToPool, /** - * Step 6 + * Step 6: forming Registry on Obligations and Settlement requirements */ - CreateRegistryOnObligationsAndSettlementRequirements, + FormingRegistersOnOS, } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/CreateRegistryOnObligationsAndSettlementRequirements.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingRegistersOnOS.java similarity index 86% rename from clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/CreateRegistryOnObligationsAndSettlementRequirements.java rename to clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingRegistersOnOS.java index 061c367cd..5204abe62 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/CreateRegistryOnObligationsAndSettlementRequirements.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingRegistersOnOS.java @@ -4,18 +4,13 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import ru.clearing.classes.statics.data.execution.ExecutionDeposit; -import ru.clearing.classes.statics.data.execution.ExecutionFond; import ru.clearing.classes.statics.data.registry.Registry; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.session.stage.ISessionStage; import ru.spcex.clearing.session.stage.StageResult; import ru.spcex.clearing.session.stage.Task; -import ru.spcex.clearing.session.stage.task.DealsPreparePayload; import ru.spcex.clearing.session.stage.task.RegistryOnObligationsAndSettlementRequirementsPayload; import ru.spcex.clearing.session.stage.util.RegistryUtil; -import ru.spcex.platform.classes.base.interfaces.IExecution; -import ru.spcex.platform.classes.base.interfaces.WithExchangeExecutionId; import ru.spcex.platform.enumeration.RegistryDesignation; import ru.spcex.platform.enumeration.RegistryInstrumentType; import ru.spcex.platform.enumeration.RegistryStatus; @@ -29,14 +24,14 @@ import java.util.ArrayList; import java.util.Collection; @Service -public class CreateRegistryOnObligationsAndSettlementRequirements implements ISessionStage { +public class FormingRegistersOnOS implements ISessionStage { private final Logger log = LoggerFactory.getLogger(getClass()); private final ImdgId idSequence; private final Imdg registryImdg; @Autowired - public CreateRegistryOnObligationsAndSettlementRequirements(ImdgProvider imdgProvider) { + public FormingRegistersOnOS(ImdgProvider imdgProvider) { this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); this.idSequence = imdgProvider.getImdgIdGenerator(); @@ -46,7 +41,7 @@ public class CreateRegistryOnObligationsAndSettlementRequirements implements ISe public StageResult submit(Task task) { RegistryOnObligationsAndSettlementRequirementsPayload payload = (RegistryOnObligationsAndSettlementRequirementsPayload) task.getData(); switch (task.getTaskType()) { - case CreateRegistryOnObligationsAndSettlementRequirements -> { + case FormingRegistersOnOS -> { return createRegistryOnObligationsAndSettlementRequirements(payload.getSessionId()); } default -> { @@ -55,23 +50,29 @@ public class CreateRegistryOnObligationsAndSettlementRequirements implements ISe } } - private Collection selectRegistry(Long sessionId) { + /** + * Select Registry by: registryCode = [O/T][S/M][*][T] & registryStatus=OK + * + * @param sessionId + * @return + */ + protected Collection selectRegistry(Long sessionId) { String registrySQL = "sessionId = " + sessionId; registrySQL += " and (registryDesignation=" + RegistryDesignation.O.getKey() + " or registryDesignation=" + RegistryDesignation.T.getKey() + ")"; registrySQL += " and (registryInstrumentType=" + RegistryInstrumentType.S.getKey() + " or registryInstrumentType=" + RegistryInstrumentType.M.getKey() + ")"; registrySQL += " and (registryUnit=" + RegistryUnit.T.getKey() + ")"; registrySQL += " and registryStatus=" + RegistryStatus.OK.getKey() + ")"; - // registryCode = [O/T][S/M][*][T] & registryStatus=OK Collection result = registryImdg.getCollectionObjectsBySQL(registrySQL); log.trace("Selected {} registry's by sql: {}", result.size(), registrySQL); return result; } - private StageResult createRegistryOnObligationsAndSettlementRequirements(Long sessionId) { + protected StageResult createRegistryOnObligationsAndSettlementRequirements(Long sessionId) { Collection forRegistries = selectRegistry(sessionId); ArrayList newRegistries = new ArrayList<>(); //todo oreder by обрабатываться группами по полю registry.groupId + //todo при перезапуске после незапланированного завершения стадии: надо ли проверять уже созданные регистры и не создавать дубликаты? for (Registry registry : forRegistries) { Registry newRegistry = createRegistryFor(registry); From 90b8d80ce8ec4cd083ec7390ee967ff4d6bdf0ff Mon Sep 17 00:00:00 2001 From: akulikov Date: Wed, 17 May 2023 19:50:20 +0300 Subject: [PATCH 22/32] fix after review --- .../config/validation/ValidationConfig.java | 17 -------------- .../clearing/reports/errors/ReportError.java | 9 ++++---- .../PeriodLiabilitiesClaimsReportBuilder.java | 20 +++++------------ .../bp/UnfulfilledDealReportBuilder.java | 2 +- .../reports/services/ReportService.java | 8 +++---- .../reports/services/ReportServiceTest.java | 22 +++++++++---------- .../platform/messaging/domain/Consts.java | 8 +++---- 7 files changed, 30 insertions(+), 56 deletions(-) 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 69af977cc..f01155eaf 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 @@ -27,7 +27,6 @@ import ru.spcex.platform.utils.validation.ValidatorImpl; import java.util.HashMap; import java.util.Map; import java.util.function.BiConsumer; -import java.util.function.Consumer; import java.util.function.Function; @Configuration @@ -55,10 +54,6 @@ public class ValidationConfig { return reportRequest -> { ImdgValidationContext context = new ImdgValidationContext<>(); context.setValidatedObject(reportRequest); - - Consumer addImdg = (s) -> context.addImdg(s, imdgForValidation.get(s)); - // todo add dictionary for check reportId - return new ValidatorImpl<>(context, EnumPresentRule.instance("reportId", ReportRequest::getReportId, @@ -79,10 +74,6 @@ public class ValidationConfig { return reportRequestWithSessionId -> { ImdgValidationContext context = new ImdgValidationContext<>(); context.setValidatedObject(reportRequestWithSessionId); - - Consumer addImdg = (s) -> context.addImdg(s, imdgForValidation.get(s)); - // todo add dictionary for check reportId - return new ValidatorImpl<>(context, EnumPresentRule.instance("reportId", ReportRequestWithSessionId::getReportId, @@ -109,10 +100,6 @@ public class ValidationConfig { return reportRequestWithSessionIdList -> { ImdgValidationContext context = new ImdgValidationContext<>(); context.setValidatedObject(reportRequestWithSessionIdList); - - Consumer addImdg = (s) -> context.addImdg(s, imdgForValidation.get(s)); - // todo add dictionary for check reportId - return new ValidatorImpl<>(context, EnumPresentRule.instance("reportId", ReportRequestWithSessionIdList::getReportId, @@ -140,10 +127,6 @@ public class ValidationConfig { return reportRequestWithPeriod -> { ImdgValidationContext context = new ImdgValidationContext<>(); context.setValidatedObject(reportRequestWithPeriod); - - Consumer addImdg = (s) -> context.addImdg(s, imdgForValidation.get(s)); - // todo add dictionary for check reportId - return new ValidatorImpl<>(context, EnumPresentRule.instance("reportId", ReportRequestWithPeriod::getReportId, diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/errors/ReportError.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/errors/ReportError.java index 55c3dfdbd..de9ba1fb1 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/errors/ReportError.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/errors/ReportError.java @@ -2,12 +2,11 @@ package ru.spcex.clearing.reports.errors; import ru.spcex.platform.utils.enumeration.IErrorEnumId; -// todo codes public enum ReportError implements IErrorEnumId { - InternalError(99000L), - UserVerifyDenial(99001L), - RequiredFieldEmpty(99002L), - WrongFieldValue(99004L), + InternalError(4000L), + UserVerifyDenial(4001L), + RequiredFieldEmpty(4002L), + WrongFieldValue(4004L), ; private final Long id; 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 index 3b5e48a3c..4d5532b07 100644 --- 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 @@ -29,24 +29,16 @@ public class PeriodLiabilitiesClaimsReportBuilder extends LiabilitiesClaimsRepor @Override protected Collection getExecutionFondsForReport(SessionIdListParams params) { if (params.getSessionIdList() == null || params.getSessionIdList().isEmpty()) return Collections.emptyList(); - StringBuilder sql = new StringBuilder("sessionId in ("); - for (Long sessionId : params.getSessionIdList()) { - sql.append(sessionId).append(","); - } - sql.setLength(sql.length() - 1); - sql.append(")"); - return executionFondImdg.getCollectionObjectsBySQL(sql.toString()); + return executionFondImdg.getCollectionObjectsByPredicate( + executionFondImdg.predicateBuilder().in("sessionId", params.getSessionIdList().toArray(new Long[0])) + ); } @Override protected Collection getExecutionDepositsForReport(SessionIdListParams params) { if (params.getSessionIdList() == null || params.getSessionIdList().isEmpty()) return Collections.emptyList(); - StringBuilder sql = new StringBuilder("sessionId in ("); - for (Long sessionId : params.getSessionIdList()) { - sql.append(sessionId).append(","); - } - sql.setLength(sql.length() - 1); - sql.append(")"); - return executionDepositImdg.getCollectionObjectsBySQL(sql.toString()); + 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/UnfulfilledDealReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/UnfulfilledDealReportBuilder.java index 30d2f83c6..249b53211 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 @@ -64,6 +64,7 @@ public class UnfulfilledDealReportBuilder extends CSVReportBuilder executionFonds = executionFondImdg.getCollectionObjectsByPredicate(predicate); + lines = new ArrayList<>(executionFonds.size()); for (ExecutionFond executionFond : executionFonds) { Company company = companyImdg.getSingleObjectByID(executionFond.getCompanyId()); if (!WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus())) continue; @@ -81,7 +82,6 @@ public class UnfulfilledDealReportBuilder extends CSVReportBuilder(executionFonds.size()); String[] line = new String[getHeaders().length]; line[valueIdx++] = id; line[valueIdx++] = securityId; 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 c442c425e..4627a0194 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 @@ -89,16 +89,16 @@ public class ReportService extends QueueConsumer implements InitializingBean { public void afterPropertiesSet() throws Exception { callback(ReportRequest.class) .setFunction(this::createReport) - .forDestination(Consts.DESTINATION_CREATE_REPORT, callbacks::put); + .forDestination(Consts.CREATE_REPORT, callbacks::put); callback(ReportRequestWithSessionId.class) .setFunction(this::createReportForSessionId) - .forDestination(Consts.DESTINATION_CREATE_REPORT_FOR_SESSION_ID, callbacks::put); + .forDestination(Consts.CREATE_REPORT_FOR_SESSION_ID, callbacks::put); callback(ReportRequestWithSessionIdList.class) .setFunction(this::createReportForSessionIdList) - .forDestination(Consts.DESTINATION_CREATE_REPORT_FOR_SESSION_ID_LIST, callbacks::put); + .forDestination(Consts.CREATE_REPORT_FOR_SESSION_ID_LIST, callbacks::put); callback(ReportRequestWithPeriod.class) .setFunction(this::createReportForPeriod) - .forDestination(Consts.DESTINATION_CREATE_REPORT_FOR_PERIOD, callbacks::put); + .forDestination(Consts.CREATE_REPORT_FOR_PERIOD, callbacks::put); init(); } diff --git a/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest.java b/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest.java index 03a1ea5ac..8e14c40d3 100644 --- a/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest.java +++ b/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest.java @@ -199,7 +199,7 @@ public class ReportServiceTest { String jsonString = TestUtils.getJsonStringForSystem(reportRequestWithSessionId, 0L); TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(), - Consts.DESTINATION_CREATE_REPORT_FOR_SESSION_ID, + Consts.CREATE_REPORT_FOR_SESSION_ID, reportRequestWithSessionIdCnt++, 0, jsonString); @@ -229,7 +229,7 @@ public class ReportServiceTest { String jsonString = TestUtils.getJsonStringForSystem(reportRequestWithPeriod, 0L); TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(), - Consts.DESTINATION_CREATE_REPORT_FOR_SESSION_ID_LIST, + Consts.CREATE_REPORT_FOR_SESSION_ID_LIST, reportRequestWithSessionIdListCnt++, 0, jsonString); @@ -252,7 +252,7 @@ public class ReportServiceTest { String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L); TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(), - Consts.DESTINATION_CREATE_REPORT, + Consts.CREATE_REPORT, reportRequestCnt++, 0, jsonString); @@ -284,7 +284,7 @@ public class ReportServiceTest { String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L); TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(), - Consts.DESTINATION_CREATE_REPORT_FOR_SESSION_ID, + Consts.CREATE_REPORT_FOR_SESSION_ID, reportRequestWithSessionIdCnt++, 0, jsonString); @@ -314,7 +314,7 @@ public class ReportServiceTest { String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L); TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(), - Consts.DESTINATION_CREATE_REPORT_FOR_PERIOD, + Consts.CREATE_REPORT_FOR_PERIOD, reportRequestWithPeriodCnt++, 0, jsonString); @@ -341,7 +341,7 @@ public class ReportServiceTest { String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L); TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(), - Consts.DESTINATION_CREATE_REPORT, + Consts.CREATE_REPORT, reportRequestCnt++, 0, jsonString); @@ -394,7 +394,7 @@ public class ReportServiceTest { String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L); TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(), - Consts.DESTINATION_CREATE_REPORT_FOR_SESSION_ID, + Consts.CREATE_REPORT_FOR_SESSION_ID, reportRequestWithSessionIdCnt++, 0, jsonString); @@ -446,7 +446,7 @@ public class ReportServiceTest { String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L); TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(), - Consts.DESTINATION_CREATE_REPORT_FOR_SESSION_ID, + Consts.CREATE_REPORT_FOR_SESSION_ID, reportRequestWithSessionIdCnt++, 0, jsonString); @@ -495,7 +495,7 @@ public class ReportServiceTest { String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L); TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(), - Consts.DESTINATION_CREATE_REPORT_FOR_SESSION_ID, + Consts.CREATE_REPORT_FOR_SESSION_ID, reportRequestWithSessionIdCnt++, 0, jsonString); @@ -545,7 +545,7 @@ public class ReportServiceTest { String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L); TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(), - Consts.DESTINATION_CREATE_REPORT_FOR_SESSION_ID, + Consts.CREATE_REPORT_FOR_SESSION_ID, reportRequestWithSessionIdCnt++, 0, jsonString); @@ -595,7 +595,7 @@ public class ReportServiceTest { String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L); TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(), - Consts.DESTINATION_CREATE_REPORT_FOR_SESSION_ID, + Consts.CREATE_REPORT_FOR_SESSION_ID, reportRequestWithSessionIdCnt++, 0, jsonString); 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 cd605265f..4645b51f2 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 @@ -71,10 +71,10 @@ public interface Consts { String DESTINATION_BANK_ACCOUNT_UPDATE = "bank-account-update"; String DESTINATION_BANK_ACCOUNT_NEW = "bank-account-new"; - String DESTINATION_CREATE_REPORT = "destination-create-report"; - String DESTINATION_CREATE_REPORT_FOR_SESSION_ID = "destination-create-report-for-session-id"; - String DESTINATION_CREATE_REPORT_FOR_SESSION_ID_LIST = "destination-create-report-for-session-id-list"; - String DESTINATION_CREATE_REPORT_FOR_PERIOD = "destination-create-report-for-period"; + String CREATE_REPORT = "create-report"; + 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"; @Deprecated String ACCOUNT_NEW_SDF01 = "account-new-sdf01"; From bf5785d0d3df1720aea636832449ad1ad07762c0 Mon Sep 17 00:00:00 2001 From: akulikov Date: Thu, 18 May 2023 11:46:37 +0300 Subject: [PATCH 23/32] fix report tests --- .../reports/services/ReportService.java | 4 --- .../reports/services/ReportServiceTest.java | 36 +++++++++---------- 2 files changed, 16 insertions(+), 24 deletions(-) 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 4627a0194..2718a3053 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 @@ -18,7 +18,6 @@ import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate; import ru.spcex.clearing.reports.config.element.ReportsServiceSettings; import ru.spcex.clearing.reports.reports.*; import ru.spcex.clearing.util.security.UserRoleVerification; -import ru.spcex.clearing.util.services.RequestHelper; import ru.spcex.clearing.validation.common.ValidationHelper; import ru.spcex.platform.enumeration.ReportType; import ru.spcex.platform.utils.enumeration.IEnumKey; @@ -35,7 +34,6 @@ public class ReportService extends QueueConsumer implements InitializingBean { private final Logger log = LoggerFactory.getLogger(getClass()); private final UserRoleVerification userRoleVerification; private final ValidationHelper validationHelper; - private final RequestHelper requestHelper; private final Function reportRequestValidator; private final Function reportRequestWithSessionIdValidator; private final Function reportRequestWithSessionIdListValidator; @@ -51,7 +49,6 @@ public class ReportService extends QueueConsumer implements InitializingBean { Producer kafkaResponseQueue, UserRoleVerification userRoleVerification, ValidationHelper validationHelper, - RequestHelper requestHelper, ReportsServiceSettings reportsServiceSettings, @Qualifier("reportBuildersWithoutParams") Map>> reportBuildersWithoutParams, @@ -72,7 +69,6 @@ public class ReportService extends QueueConsumer implements InitializingBean { super(kafkaQueue, kafkaResponseQueue); this.userRoleVerification = userRoleVerification; this.validationHelper = validationHelper; - this.requestHelper = requestHelper; this.reportRequestValidator = reportRequestValidator; this.reportRequestWithSessionIdValidator = reportRequestWithSessionIdValidator; this.reportRequestWithSessionIdListValidator = reportRequestWithSessionIdListValidator; diff --git a/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest.java b/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest.java index 8e14c40d3..a0e09f150 100644 --- a/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest.java +++ b/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest.java @@ -7,15 +7,11 @@ import com.opencsv.CSVReaderBuilder; import com.opencsv.exceptions.CsvValidationException; import org.apache.commons.io.FileUtils; import org.apache.kafka.clients.consumer.MockConsumer; -import org.apache.kafka.clients.producer.MockProducer; -import org.apache.kafka.clients.producer.ProducerRecord; +import org.apache.kafka.clients.producer.Producer; import org.junit.jupiter.api.*; import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.boot.test.mock.mockito.SpyBean; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; import ru.clearing.classes.statics.data.company.Company; @@ -159,10 +155,10 @@ public class ReportServiceTest { @Autowired @Qualifier("hazelcastServiceTest") private ImdgProvider imdgProvider; - @Captor - private ArgumentCaptor producerRecord; - @SpyBean - private MockProducer producer; + + @Autowired + @Qualifier("mockProducer") + private Producer producer; private static int reportRequestCnt = 0; private static int reportRequestWithSessionIdCnt = 0; @@ -204,7 +200,7 @@ public class ReportServiceTest { 0, jsonString); - TestUtils.waitingWhenAddedRecordAndCheckIt(0L, producer, producerRecord); + TestUtils.waitingSendAndCheckRecord(0L, producer); File outFile = outFolder.listFiles()[0]; File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/operational_liabilities_claims_expected.csv").getFile()); @@ -234,7 +230,7 @@ public class ReportServiceTest { 0, jsonString); - TestUtils.waitingWhenAddedRecordAndCheckIt(0L, producer, producerRecord); + TestUtils.waitingSendAndCheckRecord(0L, producer); File outFile = outFolder.listFiles()[0]; File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/period_liabilities_claims_expected.csv").getFile()); @@ -257,7 +253,7 @@ public class ReportServiceTest { 0, jsonString); - TestUtils.waitingWhenAddedRecordAndCheckIt(0L, producer, producerRecord); + TestUtils.waitingSendAndCheckRecord(0L, producer); File outFile = outFolder.listFiles()[0]; File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/summary_liabilities_claims_expected.csv").getFile()); @@ -289,7 +285,7 @@ public class ReportServiceTest { 0, jsonString); - TestUtils.waitingWhenAddedRecordAndCheckIt(0L, producer, producerRecord); + TestUtils.waitingSendAndCheckRecord(0L, producer); File outFile = outFolder.listFiles()[0]; File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/operational_money_change_expected.csv").getFile()); @@ -319,7 +315,7 @@ public class ReportServiceTest { 0, jsonString); - TestUtils.waitingWhenAddedRecordAndCheckIt(0L, producer, producerRecord); + TestUtils.waitingSendAndCheckRecord(0L, producer); File outFile = outFolder.listFiles()[0]; File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/period_money_change_expected.csv").getFile()); @@ -346,7 +342,7 @@ public class ReportServiceTest { 0, jsonString); - TestUtils.waitingWhenAddedRecordAndCheckIt(0L, producer, producerRecord); + TestUtils.waitingSendAndCheckRecord(0L, producer); File outFile = outFolder.listFiles()[0]; File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/summary_money_change_expected.csv").getFile()); @@ -399,7 +395,7 @@ public class ReportServiceTest { 0, jsonString); - TestUtils.waitingWhenAddedRecordAndCheckIt(0L, producer, producerRecord); + TestUtils.waitingSendAndCheckRecord(0L, producer); File outFile = outFolder.listFiles((dir, name) -> name.contains("INFTYPE_1"))[0]; File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/KS_BR_PFX64_INFTYPE_1_expected.csv").getFile()); @@ -451,7 +447,7 @@ public class ReportServiceTest { 0, jsonString); - TestUtils.waitingWhenAddedRecordAndCheckIt(0L, producer, producerRecord); + TestUtils.waitingSendAndCheckRecord(0L, producer); File outFile = outFolder.listFiles((dir, name) -> name.contains("INFTYPE_2"))[0]; File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/KS_BR_PFX64_INFTYPE_2_expected.csv").getFile()); @@ -500,7 +496,7 @@ public class ReportServiceTest { 0, jsonString); - TestUtils.waitingWhenAddedRecordAndCheckIt(0L, producer, producerRecord); + TestUtils.waitingSendAndCheckRecord(0L, producer); File outFile = outFolder.listFiles((dir, name) -> name.contains("INFTYPE_3"))[0]; File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/KS_BR_PFX64_INFTYPE_3_expected.csv").getFile()); @@ -550,7 +546,7 @@ public class ReportServiceTest { 0, jsonString); - TestUtils.waitingWhenAddedRecordAndCheckIt(0L, producer, producerRecord); + TestUtils.waitingSendAndCheckRecord(0L, producer); File outFile = outFolder.listFiles((dir, name) -> name.contains("INFTYPE_4"))[0]; File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/KS_BR_PFX64_INFTYPE_4_expected.csv").getFile()); @@ -600,7 +596,7 @@ public class ReportServiceTest { 0, jsonString); - TestUtils.waitingWhenAddedRecordAndCheckIt(0L, producer, producerRecord); + TestUtils.waitingSendAndCheckRecord(0L, producer); File outFile = outFolder.listFiles()[0]; File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/unfulfilled_deal_report_expected.csv").getFile()); From c7fefd481c56b295b285fdfed8cd787525f84ec4 Mon Sep 17 00:00:00 2001 From: ialbert Date: Thu, 18 May 2023 13:47:13 +0300 Subject: [PATCH 24/32] http://jira.mfd.msk:8088/browse/CLS-290 --- .../ru/spcex/platform/classes/base/interfaces/IExecution.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform-parent/platform-classes-base/src/main/java/ru/spcex/platform/classes/base/interfaces/IExecution.java b/platform-parent/platform-classes-base/src/main/java/ru/spcex/platform/classes/base/interfaces/IExecution.java index 62c4060b7..441f6c949 100644 --- a/platform-parent/platform-classes-base/src/main/java/ru/spcex/platform/classes/base/interfaces/IExecution.java +++ b/platform-parent/platform-classes-base/src/main/java/ru/spcex/platform/classes/base/interfaces/IExecution.java @@ -1,4 +1,4 @@ package ru.spcex.platform.classes.base.interfaces; -public interface IExecution extends WithSessionId, WithExchangeExecutionId { +public interface IExecution extends WithId, WithSessionId, WithExchangeExecutionId { } From 312c7c6294e46de28534af0a328f011fff1a2f4e Mon Sep 17 00:00:00 2001 From: AKurakin Date: Thu, 18 May 2023 14:53:56 +0300 Subject: [PATCH 25/32] =?UTF-8?q?clearing-service=20http://jira.mfd.msk:80?= =?UTF-8?q?88/browse/CLS-290=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D1=87=D0=B8=D0=BA=20=D0=B4=D0=BB=D1=8F=20stage=208?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../clearing/session/stage/TaskType.java | 5 + .../session/stage/impl/UnlockResources.java | 147 ++++++++++++++++++ .../stage/task/UnlockResourcesPayload.java | 88 +++++++++++ 3 files changed, 240 insertions(+) create mode 100644 clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/UnlockResources.java create mode 100644 clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/task/UnlockResourcesPayload.java diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/TaskType.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/TaskType.java index 60484583a..82cbcf02e 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/TaskType.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/TaskType.java @@ -21,4 +21,9 @@ public enum TaskType { */ FormingRegistersOnOS, + + /** + * step 8 + */ + UnlockResources, } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/UnlockResources.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/UnlockResources.java new file mode 100644 index 000000000..c563c84b5 --- /dev/null +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/UnlockResources.java @@ -0,0 +1,147 @@ +package ru.spcex.clearing.session.stage.impl; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import ru.clearing.classes.statics.data.registry.Registry; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.session.stage.ISessionStage; +import ru.spcex.clearing.session.stage.StageResult; +import ru.spcex.clearing.session.stage.Task; +import ru.spcex.clearing.session.stage.task.UnlockResourcesPayload; +import ru.spcex.platform.enumeration.RegistryDesignation; +import ru.spcex.platform.enumeration.RegistryInstrumentType; +import ru.spcex.platform.enumeration.RegistryUnit; +import ru.spcex.platform.imdg.api.Imdg; +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.math.BigDecimal; +import java.time.Instant; +import java.util.Collection; + +@Service +public class UnlockResources implements ISessionStage { + private final Logger log = LoggerFactory.getLogger(getClass()); + + private final Imdg registryImdg; + + @Autowired + public UnlockResources(ImdgProvider imdgProvider) { + this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); + + } + + @Override + public StageResult submit(Task task) { + switch (task.getTaskType()) { + case UnlockResources -> { + UnlockResourcesPayload payload = (UnlockResourcesPayload) task.getData(); + return unlockResources(payload.getSdfMode(), payload.getSessionId(), + payload.getAccount(), + payload.getSecurityId(), + payload.getFullNames(), + payload.getValue() + ); + } + default -> { + throw new IllegalStateException("Unknown task type: " + task.getTaskType()); + } + } + } + + /** + * Select Registry by: account; fullName* / securityId + */ + protected Collection selectRegistry(Long sessionId, String account, Long securityId, Collection fullNames) { + ImdgPredicateBuilder pb = registryImdg.predicateBuilder(); + ImdgPredicate queryPart; + if (securityId != null) { + queryPart = pb.in("securityId", securityId); + } else if (fullNames != null && !fullNames.isEmpty()) { + queryPart = pb.in("fullName", fullNames.toArray(new String[fullNames.size()])); + } else { + throw new IllegalArgumentException("Required securityId or fullNames"); + } + ImdgPredicate query = pb.and( + pb.and( + pb.equals("sessionId", sessionId), + pb.equals("registryDesignation", RegistryDesignation.A.getKey()) // не все нужны, только с этим кодом отфильтруем. + ), + pb.equals("account", account), + queryPart + ); + + Collection result = registryImdg.getCollectionObjectsByPredicate(query); + log.trace("Selected {} registry's by sql: {}", result.size(), query); + return result; + } + + /** + * @param sdfMode UnlockResourcesPayload.sdfMode + * @param sessionId + * @param account + * @param securityId + * @param fullNames + * @return + */ + protected StageResult unlockResources(String sdfMode, Long sessionId, String account, Long securityId, Collection fullNames, BigDecimal value) { + Collection forRegistries = selectRegistry(sessionId, account, securityId, fullNames); + + //todo при перезапуске после незапланированного завершения стадии: надо ли проверять уже созданные регистры и не создавать дубликаты? + if (UnlockResourcesPayload.MODE_SDF04.equals(sdfMode)) { + forRegistries = forRegistries.stream().filter( + (Registry r) -> + RegistryDesignation.A.equalsByKey(r.getRegistryDesignation()) + && + RegistryInstrumentType.M.equalsByKey(r.getRegistryInstrumentType()) + && + (RegistryUnit.F.equalsByKey(r.getRegistryUnit()) || RegistryUnit.B.equalsByKey(r.getRegistryUnit())) + ).toList(); + } else if (UnlockResourcesPayload.MODE_SDF12.equals(sdfMode)) { + forRegistries = forRegistries.stream().filter( + (Registry r) -> + RegistryDesignation.A.equalsByKey(r.getRegistryDesignation()) + && + RegistryInstrumentType.S.equalsByKey(r.getRegistryInstrumentType()) + && + (RegistryUnit.F.equalsByKey(r.getRegistryUnit()) || RegistryUnit.B.equalsByKey(r.getRegistryUnit())) + ).toList(); + } else { + throw new IllegalArgumentException("Mode not support: " + sdfMode); + } + + for (Registry registry : forRegistries) { + boolean modified = unlockRegistry(registry, value); + if (modified) { + registry.setUpdated(Instant.now()); + registryImdg.update(registry); + log.trace("Registry {} changed; value +- registry", + registry.getId(), registry.getRegistryCode(), value); + } + } + //todo рекомендуется делать транзакцией. + + StageResult> res = new StageResult<>(null, true); + res.setStageResult(forRegistries); + return res; + } + + boolean unlockRegistry(Registry registry, BigDecimal value) { + if (RegistryUnit.F.equalsByKey(registry.getRegistryUnit())) { + if (registry.getBalance() == null) registry.setBalance(BigDecimal.ZERO); + registry.setBalance(registry.getBalance().add(value)); + return true; + } else if (RegistryUnit.B.equalsByKey(registry.getRegistryUnit())) { + if (registry.getBalance() == null) registry.setBalance(BigDecimal.ZERO); + registry.setBalance(registry.getBalance().subtract(value)); + return true; + } else { + log.warn("For registry {} registryUnit={} unlock operation not implemented.", + registry.getId(), registry.getRegistryUnit()); + return false; + } + } +} diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/task/UnlockResourcesPayload.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/task/UnlockResourcesPayload.java new file mode 100644 index 000000000..1b9525f23 --- /dev/null +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/task/UnlockResourcesPayload.java @@ -0,0 +1,88 @@ +package ru.spcex.clearing.session.stage.task; + +import java.math.BigDecimal; +import java.util.List; + +public class UnlockResourcesPayload { + public static final String MODE_SDF04 = "sDf04"; + public static final String MODE_SDF12 = "sDf12"; + + /** + * MODE_SDF04/MODE_SDF12 + */ + private String sdfMode; + + private Long sessionId; + + /** + * sDf04.c_acc_cred + * sDf12.depoCodeSender + */ + private String account; + /** + * sDf04.(sbanknam1, sbanknam2 и т.д.) + */ + private List fullNames; + + /** + * sDf12.securityCode + */ + private Long securityId; + + /** + * sDf04.pay_val + * sDf12.quantity + */ + private BigDecimal value; + + + + public String getSdfMode() { + return sdfMode; + } + + public void setSdfMode(String sdfMode) { + this.sdfMode = sdfMode; + } + + + public Long getSessionId() { + return sessionId; + } + + public void setSessionId(Long sessionId) { + this.sessionId = sessionId; + } + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public List getFullNames() { + return fullNames; + } + + public void setFullNames(List fullNames) { + this.fullNames = fullNames; + } + + public Long getSecurityId() { + return securityId; + } + + public void setSecurityId(Long securityId) { + this.securityId = securityId; + } + + public BigDecimal getValue() { + return value; + } + + public void setValue(BigDecimal value) { + this.value = value; + } +} From 02e927ab1bd145bf7c87707292ab5891070ee1e4 Mon Sep 17 00:00:00 2001 From: ialbert Date: Thu, 18 May 2023 14:58:11 +0300 Subject: [PATCH 26/32] http://jira.mfd.msk:8088/browse/CLS-290 --- .../classes/statics/data/execution/ExecutionCommon.java | 6 +++++- .../classes/statics/data/execution/ExecutionDeposit.java | 6 ++++++ .../classes/statics/data/execution/ExecutionFond.java | 7 ++++++- .../java/ru/spcex/clearing/session/stage/TaskType.java | 4 ++++ .../ru/spcex/clearing/session/stage/impl/DealsPrepare.java | 4 ++-- .../platform/classes/base/interfaces/ExecutionType.java | 6 ++++++ .../spcex/platform/classes/base/interfaces/IExecution.java | 1 + 7 files changed, 30 insertions(+), 4 deletions(-) create mode 100644 platform-parent/platform-classes-base/src/main/java/ru/spcex/platform/classes/base/interfaces/ExecutionType.java diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/execution/ExecutionCommon.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/execution/ExecutionCommon.java index 00793129d..10d252baa 100644 --- a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/execution/ExecutionCommon.java +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/execution/ExecutionCommon.java @@ -1,12 +1,14 @@ package ru.clearing.classes.statics.data.execution; import ru.clearing.classes.objects.BusinessObject; +import ru.spcex.platform.classes.base.interfaces.ExecutionType; +import ru.spcex.platform.classes.base.interfaces.IExecution; import java.math.BigDecimal; import java.time.Instant; import java.time.LocalDate; -public abstract class ExecutionCommon extends BusinessObject { +public abstract class ExecutionCommon extends BusinessObject implements IExecution { protected Long exchangeExecutionId; protected Instant exchangeExecutionTime; protected LocalDate tradingDate; @@ -28,6 +30,8 @@ public abstract class ExecutionCommon extends BusinessObject { protected Long sessionId; protected LocalDate clearingDate; + public abstract ExecutionType type(); + public LocalDate getClearingDate() { return clearingDate; } diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/execution/ExecutionDeposit.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/execution/ExecutionDeposit.java index 3883d4507..eba4989d0 100644 --- a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/execution/ExecutionDeposit.java +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/execution/ExecutionDeposit.java @@ -1,6 +1,7 @@ package ru.clearing.classes.statics.data.execution; import ru.clearing.classes.ConstSerializable; +import ru.spcex.platform.classes.base.interfaces.ExecutionType; import java.math.BigDecimal; import java.time.LocalDate; @@ -16,6 +17,11 @@ public class ExecutionDeposit extends ExecutionCommon { private String secondLegSettlementCode; private String contract; + @Override + public ExecutionType type() { + return ExecutionType.ExecutionDeposit; + } + public BigDecimal getFirstLegAmount() { return firstLegAmount; } diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/execution/ExecutionFond.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/execution/ExecutionFond.java index 26057ad8c..7306327de 100644 --- a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/execution/ExecutionFond.java +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/execution/ExecutionFond.java @@ -1,7 +1,7 @@ package ru.clearing.classes.statics.data.execution; import ru.clearing.classes.ConstSerializable; -import ru.clearing.classes.objects.BusinessObject; +import ru.spcex.platform.classes.base.interfaces.ExecutionType; import java.math.BigDecimal; import java.time.Instant; @@ -23,6 +23,11 @@ public class ExecutionFond extends ExecutionCommon { private LocalDate settlementDate; private Instant exchangeExecutionMicroseconds; + @Override + public ExecutionType type() { + return ExecutionType.ExecutionFond; + } + public Long getExchangeOrderId() { return exchangeOrderId; } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/TaskType.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/TaskType.java index 60484583a..5517afc3b 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/TaskType.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/TaskType.java @@ -11,6 +11,10 @@ public enum TaskType { * step 1 */ DealsPrepare, + /** + * step 2 + */ + RequirementsAndObligationsCreate, /** * step 4 */ diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/DealsPrepare.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/DealsPrepare.java index 4f7d0382e..ab25bb192 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/DealsPrepare.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/DealsPrepare.java @@ -56,7 +56,7 @@ public class DealsPrepare implements ISessionStage { private StageResult prepareDeals(Long sessionId, Long companyId, Long securityId) { StringBuilder executionDepositSQL = new StringBuilder("sessionId = null"); if (companyId != null) { - executionDepositSQL.append(" and companyId = ").append(companyId); + executionDepositSQL.append(" and companyId = ").append(companyId); //fixme вероятно в ТЗ недостаточно условий для выборки - counterPartyId } if (securityId != null) { executionDepositSQL.append(" and securityId = ").append(securityId); @@ -86,7 +86,7 @@ public class DealsPrepare implements ISessionStage { executionFondImdg.update((ExecutionFond) exc); } } - StageResult> res = new StageResult<>(null, true); + StageResult> res = new StageResult<>(null, true); res.setStageResult(excs); return res; } diff --git a/platform-parent/platform-classes-base/src/main/java/ru/spcex/platform/classes/base/interfaces/ExecutionType.java b/platform-parent/platform-classes-base/src/main/java/ru/spcex/platform/classes/base/interfaces/ExecutionType.java new file mode 100644 index 000000000..6e6f3083f --- /dev/null +++ b/platform-parent/platform-classes-base/src/main/java/ru/spcex/platform/classes/base/interfaces/ExecutionType.java @@ -0,0 +1,6 @@ +package ru.spcex.platform.classes.base.interfaces; + + +public enum ExecutionType { + ExecutionDeposit, ExecutionFond; +} diff --git a/platform-parent/platform-classes-base/src/main/java/ru/spcex/platform/classes/base/interfaces/IExecution.java b/platform-parent/platform-classes-base/src/main/java/ru/spcex/platform/classes/base/interfaces/IExecution.java index 441f6c949..acb281841 100644 --- a/platform-parent/platform-classes-base/src/main/java/ru/spcex/platform/classes/base/interfaces/IExecution.java +++ b/platform-parent/platform-classes-base/src/main/java/ru/spcex/platform/classes/base/interfaces/IExecution.java @@ -1,4 +1,5 @@ package ru.spcex.platform.classes.base.interfaces; public interface IExecution extends WithId, WithSessionId, WithExchangeExecutionId { + ExecutionType type(); } From 0d296dac740f44fbfe19017700a3ac43f1c1ae6c Mon Sep 17 00:00:00 2001 From: etreshenkov Date: Thu, 18 May 2023 15:17:08 +0300 Subject: [PATCH 27/32] add RegistryCodeSqlBuilder --- .../queue/AbstractControllerTest.java | 3 +- .../spcex/clearing/models/RegistryInfo.java | 16 --- .../models/RegistryTradingParams.java | 14 ++ .../clearing/service/RegistryService.java | 26 ++-- .../builder/sql/RegistryCodeSqlBuilder.java | 58 ++++++++ .../stage/impl/FormingPaymentInstruction.java | 127 ++++++++++++++++++ .../sql/RegistryCodeSqlBuilderTest.java | 54 ++++++++ 7 files changed, 267 insertions(+), 31 deletions(-) delete mode 100644 clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/models/RegistryInfo.java create mode 100644 clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/models/RegistryTradingParams.java create mode 100644 clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/builder/sql/RegistryCodeSqlBuilder.java create mode 100644 clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstruction.java create mode 100644 clearing-parent/clearing-service/src/test/java/ru/spcex/clearing/service/builder/sql/RegistryCodeSqlBuilderTest.java diff --git a/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/AbstractControllerTest.java b/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/AbstractControllerTest.java index 367f97bff..e28e28add 100644 --- a/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/AbstractControllerTest.java +++ b/clearing-parent/backend-api/src/test/java/ru/spcex/clearing/backendapi/controller/queue/AbstractControllerTest.java @@ -26,7 +26,6 @@ import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.filter.CharacterEncodingFilter; -import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.user.User; import ru.spcex.clearing.backendapi.controller.config.*; import ru.spcex.clearing.backendapi.controller.queue.account.*; @@ -60,7 +59,6 @@ import ru.spcex.clearing.test.TestUtils; import ru.spcex.clearing.test.json.MatcherFactoryWithJson; import ru.spcex.platform.classes.base.SpcexObjectBase; import ru.spcex.platform.imdg.api.Imdg; -import ru.spcex.platform.imdg.iml.hazelcast.adapter.ImdgHazelcast; import ru.spcex.platform.imdg.iml.hazelcast.service.HazelcastService; import ru.spcex.platform.utils.enumeration.IMessageResolver; @@ -158,6 +156,7 @@ import static ru.spcex.clearing.test.json.MatcherFactoryWithJson.usingIgnoringFi WebSecurityTestConfigurer.class, MessagesTestConfig.class, Jackson2HttpConverterTestConfig.class}) +//todo может быть указать пакедж а не список контроллеров @ExtendWith(SpringExtension.class) @WebMvcTest //@TestPropertySource(properties = "spring.config.location=D:/repo/mfd/clearing/clearing-parent/backend-api/src/main/resources/") diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/models/RegistryInfo.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/models/RegistryInfo.java deleted file mode 100644 index 1c618492f..000000000 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/models/RegistryInfo.java +++ /dev/null @@ -1,16 +0,0 @@ -package ru.spcex.clearing.models; - -import ru.spcex.platform.enumeration.RegistryCapacity; -import ru.spcex.platform.enumeration.RegistryDesignation; -import ru.spcex.platform.enumeration.RegistryInstrumentType; -import ru.spcex.platform.enumeration.RegistryUnit; - -public record RegistryInfo(RegistryDesignation registryDesignation, - RegistryInstrumentType registryInstrumentType, - RegistryCapacity registryCapacity, - RegistryUnit registryUnit) { - - public String buildSqlCondition(){ - return ""; - } -} diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/models/RegistryTradingParams.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/models/RegistryTradingParams.java new file mode 100644 index 000000000..240ae96da --- /dev/null +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/models/RegistryTradingParams.java @@ -0,0 +1,14 @@ +package ru.spcex.clearing.models; + +import ru.spcex.platform.enumeration.RegistryCapacity; +import ru.spcex.platform.enumeration.RegistryDesignation; +import ru.spcex.platform.enumeration.RegistryInstrumentType; +import ru.spcex.platform.enumeration.RegistryUnit; + +public record RegistryTradingParams(RegistryDesignation registryDesignation, + RegistryInstrumentType registryInstrumentType, + RegistryCapacity registryCapacity, + RegistryUnit registryUnit) { + + +} diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/RegistryService.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/RegistryService.java index f6ab3915f..c9b5e79cc 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/RegistryService.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/RegistryService.java @@ -6,7 +6,7 @@ import org.springframework.stereotype.Service; 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.models.RegistryInfo; +import ru.spcex.clearing.models.RegistryTradingParams; import ru.spcex.clearing.platform.messaging.domain.cud.clearing.CreateRegistryRequest; import ru.spcex.platform.enumeration.*; import ru.spcex.platform.imdg.api.Imdg; @@ -42,7 +42,7 @@ public class RegistryService { log.trace("Found tradingClearingRegistry with id: {}", tcrByCompanyId.getId()); Registry registry = new Registry(); tcrByCompanyId.getTradingClearingRegistryType(); - RegistryInfo registryInfo = createRegistryInfoByType(tcrByCompanyId.getTradingClearingRegistryType()); + RegistryTradingParams registryInfo = createRegistryInfoByType(tcrByCompanyId.getTradingClearingRegistryType()); registry.setRegistryDesignation(registryInfo.registryDesignation().getKey()); registry.setRegistryInstrumentType(registryInfo.registryInstrumentType().getKey()); registry.setRegistryCapacity(registryInfo.registryCapacity().getKey()); @@ -55,20 +55,20 @@ public class RegistryService { } - private RegistryInfo createRegistryInfoByType(String type){ + private RegistryTradingParams createRegistryInfoByType(String type){ TradingClearingRegistryType registryType = IEnumKey.getEnumByKey(TradingClearingRegistryType.class, type); - RegistryInfo registryInfo = null; + RegistryTradingParams registryInfo = null; //todo спросить про дубль C и T switch (registryType){ - case Owner_A -> registryInfo = new RegistryInfo(RegistryDesignation.A, RegistryInstrumentType.M, RegistryCapacity.A, RegistryUnit.T); - case Client_B -> registryInfo = new RegistryInfo(RegistryDesignation.A, RegistryInstrumentType.M, RegistryCapacity.B, RegistryUnit.T); - case Trustee_C, DepoOfShares_T -> registryInfo = new RegistryInfo(RegistryDesignation.A, RegistryInstrumentType.S, RegistryCapacity.A, RegistryUnit.T); - case TrusteeManager_D -> registryInfo = new RegistryInfo(RegistryDesignation.A, RegistryInstrumentType.S, RegistryCapacity.A, RegistryUnit.A); - case Issuer_E -> registryInfo = new RegistryInfo(RegistryDesignation.A, RegistryInstrumentType.S, RegistryCapacity.E, RegistryUnit.R); - case ToThePlacementOrRedeem_Z -> registryInfo = new RegistryInfo(RegistryDesignation.A, RegistryInstrumentType.S, RegistryCapacity.Z, RegistryUnit.R); - case DepoBond_H -> registryInfo = new RegistryInfo(RegistryDesignation.A, RegistryInstrumentType.S, RegistryCapacity.A, RegistryUnit.R); - case DepoOfTrustedBond_N -> registryInfo = new RegistryInfo(RegistryDesignation.A, RegistryInstrumentType.S, RegistryCapacity.C, RegistryUnit.R); - case DepoOfTrustedShares_S -> registryInfo = new RegistryInfo(RegistryDesignation.A, RegistryInstrumentType.S, RegistryCapacity.C, RegistryUnit.T); + case Owner_A -> registryInfo = new RegistryTradingParams(RegistryDesignation.A, RegistryInstrumentType.M, RegistryCapacity.A, RegistryUnit.T); + case Client_B -> registryInfo = new RegistryTradingParams(RegistryDesignation.A, RegistryInstrumentType.M, RegistryCapacity.B, RegistryUnit.T); + case Trustee_C, DepoOfShares_T -> registryInfo = new RegistryTradingParams(RegistryDesignation.A, RegistryInstrumentType.S, RegistryCapacity.A, RegistryUnit.T); + case TrusteeManager_D -> registryInfo = new RegistryTradingParams(RegistryDesignation.A, RegistryInstrumentType.S, RegistryCapacity.A, RegistryUnit.A); + case Issuer_E -> registryInfo = new RegistryTradingParams(RegistryDesignation.A, RegistryInstrumentType.S, RegistryCapacity.E, RegistryUnit.R); + case ToThePlacementOrRedeem_Z -> registryInfo = new RegistryTradingParams(RegistryDesignation.A, RegistryInstrumentType.S, RegistryCapacity.Z, RegistryUnit.R); + case DepoBond_H -> registryInfo = new RegistryTradingParams(RegistryDesignation.A, RegistryInstrumentType.S, RegistryCapacity.A, RegistryUnit.R); + case DepoOfTrustedBond_N -> registryInfo = new RegistryTradingParams(RegistryDesignation.A, RegistryInstrumentType.S, RegistryCapacity.C, RegistryUnit.R); + case DepoOfTrustedShares_S -> registryInfo = new RegistryTradingParams(RegistryDesignation.A, RegistryInstrumentType.S, RegistryCapacity.C, RegistryUnit.T); } return registryInfo; } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/builder/sql/RegistryCodeSqlBuilder.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/builder/sql/RegistryCodeSqlBuilder.java new file mode 100644 index 000000000..bf7fd8567 --- /dev/null +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/builder/sql/RegistryCodeSqlBuilder.java @@ -0,0 +1,58 @@ +package ru.spcex.clearing.service.builder.sql; + +import ru.spcex.clearing.models.RegistryTradingParams; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +public class RegistryCodeSqlBuilder { + + private List registryTradingParams = new ArrayList<>(); + + public static RegistryCodeSqlBuilder getInstance(RegistryTradingParams... tradingParams) { + return new RegistryCodeSqlBuilder(Arrays.asList(tradingParams)); + } + + private RegistryCodeSqlBuilder(List tradingParams) { + this.registryTradingParams = tradingParams; + } + + public String build() { + List conditions = new ArrayList<>(); + for (RegistryTradingParams tradingParams : this.registryTradingParams) { + StringBuilder condition = new StringBuilder(); + boolean wasAddedCondition = false; + if (tradingParams.registryDesignation() != null) { + condition.append(String.format("registryDesignation = '%s'", tradingParams.registryDesignation().getKey())); + wasAddedCondition = true; + } + if (wasAddedCondition) { + condition.append(" and "); + wasAddedCondition = false; + } + if (tradingParams.registryInstrumentType() != null) { + condition.append(String.format("registryInstrumentType = '%s'", tradingParams.registryInstrumentType().getKey())); + wasAddedCondition = true; + } + if (wasAddedCondition) { + condition.append(" and "); + wasAddedCondition = false; + } + if (tradingParams.registryCapacity() != null) { + condition.append(String.format("registryCapacity = '%s'", tradingParams.registryCapacity().getKey())); + wasAddedCondition = true; + } + if (wasAddedCondition) { + condition.append(" and "); + wasAddedCondition = false; + } + if (tradingParams.registryUnit() != null) { + condition.append(String.format("registryUnit = '%s'", tradingParams.registryUnit().getKey())); + } + conditions.add(condition); + } + return conditions.stream().collect(Collectors.joining(") or (", "(", ")")); + } +} diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstruction.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstruction.java new file mode 100644 index 000000000..70b47b67f --- /dev/null +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstruction.java @@ -0,0 +1,127 @@ +package ru.spcex.clearing.session.stage.impl; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import ru.clearing.classes.statics.data.payment.PaymentInstruction; +import ru.clearing.classes.statics.data.registry.Registry; +import ru.spcex.clearing.error.ClearingError; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender; +import ru.spcex.clearing.session.stage.ISessionStage; +import ru.spcex.clearing.session.stage.StageResult; +import ru.spcex.clearing.session.stage.Task; +import ru.spcex.clearing.session.stage.task.InspectionPoolPayload; +import ru.spcex.platform.enumeration.RegistryDesignation; +import ru.spcex.platform.enumeration.RegistryInstrumentType; +import ru.spcex.platform.enumeration.RegistryUnit; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgId; +import ru.spcex.platform.imdg.api.ImdgProvider; +import ru.spcex.platform.utils.enumeration.EnumMessage; +import ru.spcex.platform.utils.enumeration.IEnumKey; +import ru.spcex.platform.utils.enumeration.IMessageResolver; +import ru.spcex.platform.utils.enumeration.SimpleMessageResolver; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +public class FormingPaymentInstruction implements ISessionStage { + private final Logger log = LoggerFactory.getLogger(getClass()); + //todo remove (set all in single method setImdg(provider -> setImdg1();setIdGenerator();...) + private ImdgProvider imdgProvider; + private ImdgId idGenerator; + private Imdg registryImdg; + private Imdg paymentInstructionImdg; + private KafkaSender kafkaSender; + private final IMessageResolver msgResolver = new SimpleMessageResolver(); + + @Autowired + public FormingPaymentInstruction(ImdgProvider imdgProvider) { + this.imdgProvider = imdgProvider; + this.idGenerator = imdgProvider.getImdgIdGenerator(); + this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); + this.paymentInstructionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_PaymentInstruction, PaymentInstruction.class); + } + + @Override + public StageResult submit(Task task) { + InspectionPoolPayload payload = (InspectionPoolPayload) task.getData(); + switch (task.getTaskType()) { + case InclusionToPool -> { + return inspectionPool(payload.getProcessedCompanyId()); + } + default -> { + throw new IllegalStateException("Unknown task type: " + task.getTaskType()); + } + } + } + + + private StageResult inspectionPool(Long processedCompanyId) { + String sqlCondition = String.format("registryDesignation in ('%s', '%s') and " + + "registryInstrumentType in ('%s', '%s') and " + + "registryUnit = '%s' and " + + "registryStatus = '%s' and " + + "settlementDate = '%s'", + RegistryDesignation.O.getKey(), RegistryDesignation.T.getKey(), + RegistryInstrumentType.S.getKey(), RegistryInstrumentType.M.getKey(), + RegistryUnit.T.getKey(), + "POOL"); + + Collection obligations = registryImdg.getCollectionObjectsBySQL(sqlCondition); + Map>> registryByGroupIdAndCompanyId = obligations.stream(). + collect(Collectors.groupingBy(Registry::getGroupId, Collectors.groupingBy(Registry::getCompanyId))); + + List insecurityGroups = new ArrayList<>(); + for (Registry currentRegistry : obligations) { + if (insecurityGroups.contains(currentRegistry.getGroupId())) { + log.debug("Skip insecurity groupId: {}", currentRegistry.getGroupId()); + continue; + } + if (IEnumKey.getEnumByKey(RegistryDesignation.class, currentRegistry.getRegistryDesignation()) == RegistryDesignation.A) { + String sqlCounterRegistryCondition = String.format("registryDesignation = '%s' and " + + "registryInstrumentType in ('%s', '%s') and " + + "registryUnit = '%s' and " + + "tradingClearingRegistryId = '%s' and " + + "companyId = '%s' and ", + RegistryDesignation.A, + RegistryInstrumentType.S.getKey(), RegistryInstrumentType.M.getKey(), + RegistryUnit.F.getKey(), + currentRegistry.getTradingClearingRegistryId(), + currentRegistry.getCompanyId()); + Registry counterRegistry = registryImdg.getSingleObjectBySQL(sqlCounterRegistryCondition); + if (currentRegistry.getBalance().compareTo(counterRegistry.getBalance()) > 0) { + log.warn("{}", msgResolver.resolve(new EnumMessage(ClearingError.InsecurityObligation, currentRegistry.getCompanyId()))); + insecurityGroups.add(currentRegistry.getGroupId()); + break; + } + currentRegistry.setRegistryStatus("OK"); + registryImdg.update(counterRegistry); + } + } + + for (Long insecuritiesGroupId : insecurityGroups) { + for (Map.Entry> entrySet : registryByGroupIdAndCompanyId.get(insecuritiesGroupId).entrySet()) { + if (entrySet.getKey().equals(processedCompanyId)) { + for (Registry registry : entrySet.getValue()) { + registry.setRegistryStatus("UNCV"); + registryImdg.update(registry); + } + } else { + for (Registry registry : entrySet.getValue()) { + registry.setRegistryStatus("FAIL"); + registryImdg.update(registry); + } + } + } + } + + return new StageResult(null, true); + } +} diff --git a/clearing-parent/clearing-service/src/test/java/ru/spcex/clearing/service/builder/sql/RegistryCodeSqlBuilderTest.java b/clearing-parent/clearing-service/src/test/java/ru/spcex/clearing/service/builder/sql/RegistryCodeSqlBuilderTest.java new file mode 100644 index 000000000..ca1c7b68c --- /dev/null +++ b/clearing-parent/clearing-service/src/test/java/ru/spcex/clearing/service/builder/sql/RegistryCodeSqlBuilderTest.java @@ -0,0 +1,54 @@ +package ru.spcex.clearing.service.builder.sql; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import ru.spcex.clearing.models.RegistryTradingParams; +import ru.spcex.platform.enumeration.RegistryCapacity; +import ru.spcex.platform.enumeration.RegistryDesignation; +import ru.spcex.platform.enumeration.RegistryInstrumentType; +import ru.spcex.platform.enumeration.RegistryUnit; + +public class RegistryCodeSqlBuilderTest { + + @Test + public void testBuildByOneObject() { + RegistryTradingParams registryTradingParams = new RegistryTradingParams(RegistryDesignation.C, RegistryInstrumentType.M, RegistryCapacity.B, RegistryUnit.R); + RegistryCodeSqlBuilder registryCodeSqlBuilder = RegistryCodeSqlBuilder.getInstance(registryTradingParams); + String sql = registryCodeSqlBuilder.build(); + Assertions.assertEquals("(registryDesignation = 'C' and registryInstrumentType = 'M' and registryCapacity = 'B' and registryUnit = 'R')", sql); + + registryTradingParams = new RegistryTradingParams(null, RegistryInstrumentType.M, RegistryCapacity.B, RegistryUnit.R); + registryCodeSqlBuilder = RegistryCodeSqlBuilder.getInstance(registryTradingParams); + sql = registryCodeSqlBuilder.build(); + Assertions.assertEquals("(registryInstrumentType = 'M' and registryCapacity = 'B' and registryUnit = 'R')", sql); + + registryTradingParams = new RegistryTradingParams(RegistryDesignation.C, null, null, RegistryUnit.R); + registryCodeSqlBuilder = RegistryCodeSqlBuilder.getInstance(registryTradingParams); + sql = registryCodeSqlBuilder.build(); + Assertions.assertEquals("(registryDesignation = 'C' and registryUnit = 'R')", sql); + } + + @Test + public void testBuildByFewObjects() { + RegistryTradingParams registryTradingParams_first = new RegistryTradingParams(RegistryDesignation.C, RegistryInstrumentType.M, RegistryCapacity.B, RegistryUnit.R); + RegistryTradingParams registryTradingParams_second = new RegistryTradingParams(RegistryDesignation.O, RegistryInstrumentType.S, RegistryCapacity.A, RegistryUnit.F); + RegistryCodeSqlBuilder registryCodeSqlBuilder = RegistryCodeSqlBuilder.getInstance(registryTradingParams_first, registryTradingParams_second); + String sql = registryCodeSqlBuilder.build(); + Assertions.assertEquals("(registryDesignation = 'C' and registryInstrumentType = 'M' and registryCapacity = 'B' and registryUnit = 'R')" + + " or (registryDesignation = 'O' and registryInstrumentType = 'S' and registryCapacity = 'A' and registryUnit = 'F')", sql); + + registryTradingParams_first = new RegistryTradingParams(null, RegistryInstrumentType.M, RegistryCapacity.B, RegistryUnit.R); + registryTradingParams_second = new RegistryTradingParams(null, RegistryInstrumentType.S, RegistryCapacity.A, RegistryUnit.F); + registryCodeSqlBuilder = RegistryCodeSqlBuilder.getInstance(registryTradingParams_first, registryTradingParams_second); + sql = registryCodeSqlBuilder.build(); + Assertions.assertEquals("(registryInstrumentType = 'M' and registryCapacity = 'B' and registryUnit = 'R') or " + + "(registryInstrumentType = 'S' and registryCapacity = 'A' and registryUnit = 'F')", sql); + + registryTradingParams_first = new RegistryTradingParams(RegistryDesignation.C, null, null, RegistryUnit.R); + registryTradingParams_second = new RegistryTradingParams(null, RegistryInstrumentType.S, RegistryCapacity.A, RegistryUnit.F); + registryCodeSqlBuilder = RegistryCodeSqlBuilder.getInstance(registryTradingParams_first, registryTradingParams_second); + sql = registryCodeSqlBuilder.build(); + Assertions.assertEquals("(registryDesignation = 'C' and registryUnit = 'R') or " + + "(registryInstrumentType = 'S' and registryCapacity = 'A' and registryUnit = 'F')", sql); + } +} From 715328e4c9b65ea35db31228e96d65f18767600c Mon Sep 17 00:00:00 2001 From: etreshenkov Date: Thu, 18 May 2023 17:46:28 +0300 Subject: [PATCH 28/32] http://jira.mfd.msk:8088/browse/CLS-290 stage 7 --- .../models/RegistryTradingParams.java | 9 + .../builder/sql/RegistryCodeSqlBuilder.java | 2 +- .../stage/impl/FormingPaymentInstruction.java | 178 ++++++++++++------ .../stage/impl/InclusionObligations.java | 1 - 4 files changed, 134 insertions(+), 56 deletions(-) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/models/RegistryTradingParams.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/models/RegistryTradingParams.java index 240ae96da..ce5760087 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/models/RegistryTradingParams.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/models/RegistryTradingParams.java @@ -1,14 +1,23 @@ package ru.spcex.clearing.models; +import ru.clearing.classes.statics.data.registry.Registry; import ru.spcex.platform.enumeration.RegistryCapacity; import ru.spcex.platform.enumeration.RegistryDesignation; import ru.spcex.platform.enumeration.RegistryInstrumentType; import ru.spcex.platform.enumeration.RegistryUnit; +import ru.spcex.platform.utils.enumeration.IEnumKey; public record RegistryTradingParams(RegistryDesignation registryDesignation, RegistryInstrumentType registryInstrumentType, RegistryCapacity registryCapacity, RegistryUnit registryUnit) { + public boolean equalByRegistry(Registry registry) { + boolean isEqualDesignation = this.registryDesignation == null || IEnumKey.getEnumByKey(RegistryDesignation.class, registry.getRegistryDesignation()) == this.registryDesignation; + boolean isEqualInstrumentType = this.registryInstrumentType == null || IEnumKey.getEnumByKey(RegistryInstrumentType.class, registry.getRegistryInstrumentType()) == this.registryInstrumentType; + boolean isEqualCapacity = this.registryCapacity == null || IEnumKey.getEnumByKey(RegistryCapacity.class, registry.getRegistryCapacity()) == this.registryCapacity; + boolean isEqualUnit = this.registryUnit == null || IEnumKey.getEnumByKey(RegistryUnit.class, registry.getRegistryUnit()) == this.registryUnit; + return isEqualDesignation && isEqualInstrumentType && isEqualCapacity && isEqualUnit; + } } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/builder/sql/RegistryCodeSqlBuilder.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/builder/sql/RegistryCodeSqlBuilder.java index bf7fd8567..4dd315001 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/builder/sql/RegistryCodeSqlBuilder.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/builder/sql/RegistryCodeSqlBuilder.java @@ -9,7 +9,7 @@ import java.util.stream.Collectors; public class RegistryCodeSqlBuilder { - private List registryTradingParams = new ArrayList<>(); + private List registryTradingParams; public static RegistryCodeSqlBuilder getInstance(RegistryTradingParams... tradingParams) { return new RegistryCodeSqlBuilder(Arrays.asList(tradingParams)); diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstruction.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstruction.java index 70b47b67f..92bac77ab 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstruction.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstruction.java @@ -6,9 +6,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import ru.clearing.classes.statics.data.payment.PaymentInstruction; import ru.clearing.classes.statics.data.registry.Registry; -import ru.spcex.clearing.error.ClearingError; import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.models.RegistryTradingParams; import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender; +import ru.spcex.clearing.service.builder.sql.RegistryCodeSqlBuilder; import ru.spcex.clearing.session.stage.ISessionStage; import ru.spcex.clearing.session.stage.StageResult; import ru.spcex.clearing.session.stage.Task; @@ -19,16 +20,12 @@ import ru.spcex.platform.enumeration.RegistryUnit; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgId; import ru.spcex.platform.imdg.api.ImdgProvider; -import ru.spcex.platform.utils.enumeration.EnumMessage; -import ru.spcex.platform.utils.enumeration.IEnumKey; import ru.spcex.platform.utils.enumeration.IMessageResolver; import ru.spcex.platform.utils.enumeration.SimpleMessageResolver; -import java.util.ArrayList; +import java.math.BigDecimal; import java.util.Collection; import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; @Service public class FormingPaymentInstruction implements ISessionStage { @@ -64,64 +61,137 @@ public class FormingPaymentInstruction implements ISessionStage { private StageResult inspectionPool(Long processedCompanyId) { - String sqlCondition = String.format("registryDesignation in ('%s', '%s') and " + - "registryInstrumentType in ('%s', '%s') and " + - "registryUnit = '%s' and " + - "registryStatus = '%s' and " + - "settlementDate = '%s'", - RegistryDesignation.O.getKey(), RegistryDesignation.T.getKey(), - RegistryInstrumentType.S.getKey(), RegistryInstrumentType.M.getKey(), - RegistryUnit.T.getKey(), - "POOL"); + RegistryTradingParams registryTradingParamsL = new RegistryTradingParams(RegistryDesignation.L, + RegistryInstrumentType.S, null, RegistryUnit.T); + RegistryTradingParams registryTradingParamsC = new RegistryTradingParams(RegistryDesignation.C, + RegistryInstrumentType.M, null, null); + RegistryCodeSqlBuilder registryCodeSqlBuilder = RegistryCodeSqlBuilder.getInstance(registryTradingParamsL, registryTradingParamsC); + String registryCodeCondition = registryCodeSqlBuilder.build(); - Collection obligations = registryImdg.getCollectionObjectsBySQL(sqlCondition); - Map>> registryByGroupIdAndCompanyId = obligations.stream(). - collect(Collectors.groupingBy(Registry::getGroupId, Collectors.groupingBy(Registry::getCompanyId))); + Collection obligations = registryImdg.getCollectionObjectsBySQL(registryCodeCondition); - List insecurityGroups = new ArrayList<>(); - for (Registry currentRegistry : obligations) { - if (insecurityGroups.contains(currentRegistry.getGroupId())) { - log.debug("Skip insecurity groupId: {}", currentRegistry.getGroupId()); - continue; - } - if (IEnumKey.getEnumByKey(RegistryDesignation.class, currentRegistry.getRegistryDesignation()) == RegistryDesignation.A) { - String sqlCounterRegistryCondition = String.format("registryDesignation = '%s' and " + - "registryInstrumentType in ('%s', '%s') and " + - "registryUnit = '%s' and " + - "tradingClearingRegistryId = '%s' and " + - "companyId = '%s' and ", - RegistryDesignation.A, - RegistryInstrumentType.S.getKey(), RegistryInstrumentType.M.getKey(), - RegistryUnit.F.getKey(), - currentRegistry.getTradingClearingRegistryId(), - currentRegistry.getCompanyId()); - Registry counterRegistry = registryImdg.getSingleObjectBySQL(sqlCounterRegistryCondition); - if (currentRegistry.getBalance().compareTo(counterRegistry.getBalance()) > 0) { - log.warn("{}", msgResolver.resolve(new EnumMessage(ClearingError.InsecurityObligation, currentRegistry.getCompanyId()))); - insecurityGroups.add(currentRegistry.getGroupId()); - break; + List obligationsByMoney = obligations.stream().filter(registry -> + new RegistryTradingParams(RegistryDesignation.L, RegistryInstrumentType.M, null, RegistryUnit.T).equalByRegistry(registry)) + .toList(); + + for (Registry obligationByMoney : obligationsByMoney) { + String sql = String.format("tradingClearingRegistryId = %s and companyId = %s", + obligationByMoney.getTradingClearingRegistryId(), obligationByMoney.getCompanyId()); + Collection relatedRegistries = registryImdg.getCollectionObjectsBySQL(sql); + + RegistryTradingParams registryTradingParamsF = new RegistryTradingParams(RegistryDesignation.A, + RegistryInstrumentType.M, null, RegistryUnit.F); + RegistryTradingParams registryTradingParamsT = new RegistryTradingParams(RegistryDesignation.A, + RegistryInstrumentType.M, null, RegistryUnit.T); + RegistryTradingParams registryTradingParamsB = new RegistryTradingParams(RegistryDesignation.A, + RegistryInstrumentType.M, null, RegistryUnit.B); + + for (Registry relatedRegistry : relatedRegistries) { + if (registryTradingParamsF.equalByRegistry(relatedRegistry)) { + relatedRegistry.setBalance(relatedRegistry.getBalance().subtract(obligationByMoney.getBalance())); + } else if (registryTradingParamsT.equalByRegistry(relatedRegistry)) { + relatedRegistry.setSettledDebit(relatedRegistry.getSettledDebit().add(obligationByMoney.getBalance())); + } else if (registryTradingParamsB.equalByRegistry(relatedRegistry)) { + relatedRegistry.setBalance(relatedRegistry.getBalance().add(obligationByMoney.getBalance())); } - currentRegistry.setRegistryStatus("OK"); - registryImdg.update(counterRegistry); + registryImdg.update(relatedRegistry); } } - for (Long insecuritiesGroupId : insecurityGroups) { - for (Map.Entry> entrySet : registryByGroupIdAndCompanyId.get(insecuritiesGroupId).entrySet()) { - if (entrySet.getKey().equals(processedCompanyId)) { - for (Registry registry : entrySet.getValue()) { - registry.setRegistryStatus("UNCV"); - registryImdg.update(registry); - } - } else { - for (Registry registry : entrySet.getValue()) { - registry.setRegistryStatus("FAIL"); - registryImdg.update(registry); - } + List requirementsByIssue = obligations.stream().filter(registry -> + new RegistryTradingParams(RegistryDesignation.C, RegistryInstrumentType.S, null, RegistryUnit.T).equalByRegistry(registry)) + .toList(); + + for (Registry requirementByIssue : requirementsByIssue) { + String sql = String.format("tradingClearingRegistryId = %s and companyId = %s", + requirementByIssue.getTradingClearingRegistryId(), requirementByIssue.getCompanyId()); + Collection relatedRegistries = registryImdg.getCollectionObjectsBySQL(sql); + + RegistryTradingParams registryTradingParamsA = new RegistryTradingParams(RegistryDesignation.A, + RegistryInstrumentType.S, null, RegistryUnit.T); + + for (Registry relatedRegistry : relatedRegistries) { + if (registryTradingParamsA.equalByRegistry(relatedRegistry)) { + relatedRegistry.setSettledDebit(relatedRegistry.getSettledDebit().add(requirementByIssue.getBalance())); } + registryImdg.update(relatedRegistry); } } + List requirementsByMoney = obligations.stream().filter(registry -> + new RegistryTradingParams(RegistryDesignation.C, RegistryInstrumentType.M, null, RegistryUnit.T).equalByRegistry(registry)) + .toList(); + + for (Registry requirementByMoney : requirementsByMoney) { + String sql = String.format("tradingClearingRegistryId = %s and companyId = %s", + requirementByMoney.getTradingClearingRegistryId(), requirementByMoney.getCompanyId()); + Collection relatedRegistries = registryImdg.getCollectionObjectsBySQL(sql); + + RegistryTradingParams registryTradingParamsA = new RegistryTradingParams(RegistryDesignation.A, + RegistryInstrumentType.M, null, RegistryUnit.T); + + for (Registry relatedRegistry : relatedRegistries) { + if (registryTradingParamsA.equalByRegistry(relatedRegistry)) { + relatedRegistry.setSettledDebit(relatedRegistry.getSettledDebit().add(requirementByMoney.getBalance())); + } + registryImdg.update(relatedRegistry); + } + } + + List obligationsByIssue = obligations.stream().filter(registry -> + new RegistryTradingParams(RegistryDesignation.L, RegistryInstrumentType.S, null, RegistryUnit.T).equalByRegistry(registry)) + .toList(); + + for (Registry obligationByIssue : obligationsByIssue) { + String sql = String.format("tradingClearingRegistryId = %s and companyId = %s", + obligationByIssue.getTradingClearingRegistryId(), obligationByIssue.getCompanyId()); + Collection relatedRegistries = registryImdg.getCollectionObjectsBySQL(sql); + + RegistryTradingParams registryTradingParamsF = new RegistryTradingParams(RegistryDesignation.A, + RegistryInstrumentType.S, null, RegistryUnit.F); + RegistryTradingParams registryTradingParamsT = new RegistryTradingParams(RegistryDesignation.A, + RegistryInstrumentType.S, null, RegistryUnit.T); + RegistryTradingParams registryTradingParamsB = new RegistryTradingParams(RegistryDesignation.A, + RegistryInstrumentType.S, null, RegistryUnit.B); + + for (Registry relatedRegistry : relatedRegistries) { + if (registryTradingParamsF.equalByRegistry(relatedRegistry)) { + relatedRegistry.setBalance(relatedRegistry.getBalance().subtract(obligationByIssue.getBalance())); + } else if (registryTradingParamsT.equalByRegistry(relatedRegistry)) { + relatedRegistry.setSettledDebit(relatedRegistry.getSettledDebit().add(obligationByIssue.getBalance())); + } else if (registryTradingParamsB.equalByRegistry(relatedRegistry)) { + relatedRegistry.setBalance(relatedRegistry.getBalance().add(obligationByIssue.getBalance())); + } + registryImdg.update(relatedRegistry); + } + } + + for (Registry obligation : obligations) { + RegistryTradingParams registryTradingParamsLT = new RegistryTradingParams(RegistryDesignation.L, + null, null, RegistryUnit.T); + registryCodeCondition = RegistryCodeSqlBuilder.getInstance(registryTradingParamsLT).build(); + String sqlCondition = String.format("(%s) and securityId = %s and tradingClearingRegistryId = %s and companyId = %s and counterPartyId = %s", + registryCodeCondition, obligation.getSecurityId(), obligation.getTradingClearingRegistryId(), obligation.getCompanyId(), obligation.getCounterPartyId()); + Collection registries = registryImdg.getCollectionObjectsBySQL(registryCodeCondition); + + BigDecimal sumBalance = registries.stream().map(Registry::getBalance).reduce(BigDecimal.ZERO, BigDecimal::add); + PaymentInstruction paymentInstruction = createPaymentInstruction(obligation, sumBalance); + paymentInstructionImdg.insert(paymentInstruction); + obligation.setPaymentId(paymentInstruction.getId()); + registryImdg.update(obligation); + } + + + //todo send message to queue for forming sDf03 and sDf12? + return new StageResult(null, true); } + + private PaymentInstruction createPaymentInstruction(Registry registry, BigDecimal balance){ + PaymentInstruction paymentInstruction = new PaymentInstruction(); + paymentInstruction.setSenderId(registry.getCompanyId()); + paymentInstruction.setAddresseeId(registry.getCounterPartyId()); + //todo add builder for paymentInstruction + return paymentInstruction; + } } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InclusionObligations.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InclusionObligations.java index eea004140..b3aae427f 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InclusionObligations.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InclusionObligations.java @@ -67,7 +67,6 @@ public class InclusionObligations implements ISessionStage { sessionType); Collection obligations = registryImdg.getCollectionObjectsBySQL(sqlCondition); Map> registryByGroupId = obligations.stream(). - filter(registry -> registry.getCompanyId().equals(counterPartyId)). collect(Collectors.groupingBy(Registry::getGroupId)); for (Map.Entry> entrySet : registryByGroupId.entrySet()) { From df63b37e3c34500dbc61287c1ffa43e6064089a0 Mon Sep 17 00:00:00 2001 From: etreshenkov Date: Thu, 18 May 2023 17:49:14 +0300 Subject: [PATCH 29/32] http://jira.mfd.msk:8088/browse/CLS-290 stage 7 --- .../java/ru/spcex/clearing/session/stage/TaskType.java | 4 ++++ .../session/stage/impl/FormingPaymentInstruction.java | 8 ++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/TaskType.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/TaskType.java index e25a6d371..72a2f42e8 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/TaskType.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/TaskType.java @@ -24,6 +24,10 @@ public enum TaskType { * Step 6: forming Registry on Obligations and Settlement requirements */ FormingRegistersOnOS, + /** + * step 7 + */ + FormingPaymentInstruction, /** diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstruction.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstruction.java index 92bac77ab..0867d22af 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstruction.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstruction.java @@ -50,8 +50,8 @@ public class FormingPaymentInstruction implements ISessionStage { public StageResult submit(Task task) { InspectionPoolPayload payload = (InspectionPoolPayload) task.getData(); switch (task.getTaskType()) { - case InclusionToPool -> { - return inspectionPool(payload.getProcessedCompanyId()); + case FormingPaymentInstruction -> { + return formingPaymentInstruction(payload.getProcessedCompanyId()); } default -> { throw new IllegalStateException("Unknown task type: " + task.getTaskType()); @@ -60,7 +60,7 @@ public class FormingPaymentInstruction implements ISessionStage { } - private StageResult inspectionPool(Long processedCompanyId) { + private StageResult formingPaymentInstruction(Long processedCompanyId) { RegistryTradingParams registryTradingParamsL = new RegistryTradingParams(RegistryDesignation.L, RegistryInstrumentType.S, null, RegistryUnit.T); RegistryTradingParams registryTradingParamsC = new RegistryTradingParams(RegistryDesignation.C, @@ -172,7 +172,7 @@ public class FormingPaymentInstruction implements ISessionStage { registryCodeCondition = RegistryCodeSqlBuilder.getInstance(registryTradingParamsLT).build(); String sqlCondition = String.format("(%s) and securityId = %s and tradingClearingRegistryId = %s and companyId = %s and counterPartyId = %s", registryCodeCondition, obligation.getSecurityId(), obligation.getTradingClearingRegistryId(), obligation.getCompanyId(), obligation.getCounterPartyId()); - Collection registries = registryImdg.getCollectionObjectsBySQL(registryCodeCondition); + Collection registries = registryImdg.getCollectionObjectsBySQL(sqlCondition); BigDecimal sumBalance = registries.stream().map(Registry::getBalance).reduce(BigDecimal.ZERO, BigDecimal::add); PaymentInstruction paymentInstruction = createPaymentInstruction(obligation, sumBalance); From e220d147bb89f92502b8cc8589f13fe237afec32 Mon Sep 17 00:00:00 2001 From: akulikov Date: Thu, 18 May 2023 18:12:11 +0300 Subject: [PATCH 30/32] fix report tests --- .../ru/spcex/clearing/reports/config/KafkaConfig.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/KafkaConfig.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/KafkaConfig.java index cd3b73821..3a7f95b94 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/KafkaConfig.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/KafkaConfig.java @@ -20,9 +20,9 @@ public class KafkaConfig { return KafkaConsumerFactory.consumer(settings.getKafkaConsumer()); } -// @Autowired -// @Bean -// public Producer createProducer(ReportsServiceSettings settings) { -// return KafkaProducerFactory.producer(settings.getKafkaProducer()); -// } + @Autowired + @Bean + public Producer createProducer(ReportsServiceSettings settings) { + return KafkaProducerFactory.producer(settings.getKafkaProducer()); + } } From 8e5421900ed2b94e8590efcbb1ee5acc94f5b869 Mon Sep 17 00:00:00 2001 From: AKurakin Date: Thu, 18 May 2023 18:52:12 +0300 Subject: [PATCH 31/32] =?UTF-8?q?backend-api=20meta=20java=20generator=20-?= =?UTF-8?q?=20=D0=B3=D0=B5=D0=BD=D0=B5=D1=80=D0=B0=D1=86=D0=B8=D1=8F=20?= =?UTF-8?q?=D1=81=D1=8B=D1=80=D0=BE=D0=B3=D0=BE=20=D0=BA=D0=BE=D0=B4=D0=B0?= =?UTF-8?q?=20java=20=D0=B4=D0=BB=D1=8F=20=D1=83=D0=BF=D1=80=D0=BE=D1=89?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BF=D1=80=D0=BE=D0=B3=D1=80=D0=B0?= =?UTF-8?q?=D0=BC=D0=BC=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- clearing-parent/backend-api/pom.xml | 25 + .../src/main/resources/meta/xsl/java.xsl | 467 ++++++++++++++++++ 2 files changed, 492 insertions(+) create mode 100644 clearing-parent/backend-api/src/main/resources/meta/xsl/java.xsl diff --git a/clearing-parent/backend-api/pom.xml b/clearing-parent/backend-api/pom.xml index ba7ad975c..f3b247036 100644 --- a/clearing-parent/backend-api/pom.xml +++ b/clearing-parent/backend-api/pom.xml @@ -323,6 +323,31 @@ + + + java + + transform + + + + +

src/main/resources/meta + + meta.xml + + src/main/resources/meta/xsl/java.xsl + + + java_classes.java + + + + + + diff --git a/clearing-parent/backend-api/src/main/resources/meta/xsl/java.xsl b/clearing-parent/backend-api/src/main/resources/meta/xsl/java.xsl new file mode 100644 index 000000000..0b4c78501 --- /dev/null +++ b/clearing-parent/backend-api/src/main/resources/meta/xsl/java.xsl @@ -0,0 +1,467 @@ + + + + +abcdefghijklmnopqrstuvwxyz +ABCDEFGHIJKLMNOPQRSTUVWXYZ +_0123456789 + + + +// JAVA classes for DB version: + + + +/* Dictionaries */ + + + + +/* Business objects */ + + + + + // Data types + + + + + // . : - + , + + + +// ----------------- - + + + +package ru.clearing.platform.dictionary; + + +/** + * + * + * Dictionary DB table: + **/ +public class Dictionary extends AbstractDictionary { + private static final long serialVersionUID = ConstDictionarySerializable.serialVersionUID; + + + + +} + + +// -- mapstore -- +package ru.spcex.clearing.imdg.dictionary; + +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Component; +import ru.clearing.platform.dictionary.Dictionary; +import ru.spcex.clearing.imdg.base.DictionaryTMapStore; +import ru.spcex.clearing.imdg.IMDGDistributedNames; + +@Component +public class DictionaryMapStore extends DictionaryTMapStore<Dictionary> { + + public DictionaryMapStore(JdbcTemplate jdbcTemplate) { + super(jdbcTemplate); + } + + @Override + public String getMapName() { + return IMDGDistributedNames.Map_Dictionary; + } + + @Override + public String getTableName() { + return ""; + } + + @Override + public Dictionary getDictionaryObject() { + return new Dictionary(); + } + +} + + + + + + + + + + + !! Нестандартное поле !! // FIXME Нестандартный словарь! Требуется писать код вручную. + + + + + +// ------------------ - + + +package ; + +import ru.clearing.classes.ConstSerializable; +import ru.spcex.platform.classes.base.SpcexObjectBase; +/** + * + * + * DB table: + **/ +public class extends SpcexObjectBase { + private static final long serialVersionUID = ConstSerializable.serialVersionUID; + + + +} + + +//mapstore + +// -- mapstore -- +package ru.spcex.clearing.imdg.object; + +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Component; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ; +import ru.spcex.clearing.imdg.base.TemplateMapStore; +import ru.spcex.platform.utils.time.TimeUtil; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.*; + +@Component +public class MapStore extends TemplateMapStore<> { + + public MapStore(JdbcTemplate jdbcTemplate) { + super(jdbcTemplate); + } + + @Override + public String getMapName() { + return IMDGDistributedNames.Map_; + } + + @Override + public String getTableName() { + return ""; + } + + @Override + public String[] getFields() { + return new String[]{ + + }; + } + + @Override + public objectReader(ResultSet resultSet) throws SQLException { + object = new (); + return object; + } + + @Override + public Object[] objectToField( object) { + Object[] args = new Object[]{ + }; + return args; + } + +} + +// todo добавить класс History +package ; + +import ru.clearing.classes.ConstSerializable; +import ru.clearing.classes.objects.BusinessEvent; +import java.io.Serial; +/** + * Изменение состояния объекта + * + * DB table: _HISTORY + **/ +public class History extends BusinessEvent<> { + @Serial + private static final long serialVersionUID = ConstSerializable.serialVersionUID; + + private object; + + @Override + public getObject() { + return object; + } + + @Override + public void setObject( object) { + this.object = object; + } +} + +// -- History mapstore для журналирования -- +package ru.spcex.clearing.imdg.businessevent; + +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Component; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ; +import History; +import ru.spcex.clearing.imdg.base.TemplateEventMapStore; +import ru.spcex.platform.utils.time.TimeUtil; + +@Component +public class HistoryMapStore extends TemplateEventMapStore<History> { + + public HistoryMapStore(JdbcTemplate jdbcTemplate) { + super(jdbcTemplate); + } + + @Override + public String getMapName() { + return IMDGDistributedNames.Map_History; + } + + @Override + public String getTableName() { + return "_HISTORY"; + } + + @Override + public String[] getFields() { + return new String[]{"ID","EVENT_TIME", "EVENT_USER_ID", "EVENT_TYPE", + _ + }; + } + + @Override + public Object[] objectToField(History historyLog) { + object=historyLog.getObject(); + Object[] args = new Object[]{ + historyLog.getId(), + TimeUtil.toDateFromInstant(historyLog.getEventTime()), + historyLog.getUserId(), + historyLog.getEventType(), + + }; + return args; + } + +} + + +, " + + +" + + + + +object.set(getInstantFromTimestamp(resultSet, " + + +")) + +object.set(getLocalDateFromSqlDate(resultSet, " + + +")) + +object.set(getLocalTimeFromSqlTime(resultSet, " + + +")) + +object.set(resultSet.getObject(" + + +", .class)) +; + +, + + + + +TimeUtil.toDateFromInstant(object.get()) + +TimeUtil.toDateFromLocalDate(object.get()) + +TimeUtil.toDateFromLocalTime(object.get()) + +object.get() + + + + + + + + + + // (in parent) private ; + + // DB field: + + + + + + + + + + + + + + + + + + + private ; + + // DB field: + + + // (linked to ) + + + + + + + + + + + + + + public get() { + return ; + } + public void set( value) { + this.=value; + } + + + + + + + + + + + public get() { + return ; + } + public void set( value) { + this.=value; + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + upper + + + + + + + + + + + + + + + + + + + + + + + _ + + + + + + + + + + + + + + + + + + + + + From de42098a8e17a1c9e7f6690e72ad68c30e3b7e36 Mon Sep 17 00:00:00 2001 From: akulikov Date: Fri, 19 May 2023 13:02:23 +0300 Subject: [PATCH 32/32] todo for FieldRequiredRule --- .../clearing/validation/common/rules/FieldRequiredRule.java | 1 + 1 file changed, 1 insertion(+) diff --git a/clearing-parent/clearing-validation/src/main/java/ru/spcex/clearing/validation/common/rules/FieldRequiredRule.java b/clearing-parent/clearing-validation/src/main/java/ru/spcex/clearing/validation/common/rules/FieldRequiredRule.java index 43c6e0e0a..f73172da4 100644 --- a/clearing-parent/clearing-validation/src/main/java/ru/spcex/clearing/validation/common/rules/FieldRequiredRule.java +++ b/clearing-parent/clearing-validation/src/main/java/ru/spcex/clearing/validation/common/rules/FieldRequiredRule.java @@ -65,6 +65,7 @@ public record FieldRequiredRule( } @Override + // todo replace for error fieldName to fieldValue public Optional validate(ImdgValidationContext context) { R validatedObject = context.getValidatedObject(); V value = getter.apply(validatedObject);