From 10b1921487af60c2ab1845df62b861146e44ba52 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Wed, 18 Jun 2025 12:01:15 +0300 Subject: [PATCH 01/24] http://jira.mfd.msk:8088/browse/CLS-861 --- .../scheduler/config/validation/LauncherValidationConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/config/validation/LauncherValidationConfig.java b/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/config/validation/LauncherValidationConfig.java index 42987237f..fc62ce337 100644 --- a/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/config/validation/LauncherValidationConfig.java +++ b/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/config/validation/LauncherValidationConfig.java @@ -26,7 +26,7 @@ public class LauncherValidationConfig { Consumer addImdg = (s) -> context.addImdg(s, imdgForValidation.get(s)); addImdg.accept(IMDGDistributedNames.Map_ValidationSymbols); return new ValidatorImpl<>(context, - ValidateSymbolsRule.notRequired("PaymentPurpose", + ValidateSymbolsRule.notRequired("Основание", LauncherCommandRequest::getPaymentPurpose, ValidationError.IncorrectPaymentPurpose) ); From 2f6e8fe99b75c55899fcd49ca014e06af2902b9c Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Fri, 20 Jun 2025 10:27:39 +0300 Subject: [PATCH 02/24] http://jira.mfd.msk:8088/browse/CLS-870 --- .../classes/statics/data/registry/Registry.java | 9 +++++++++ .../db-scripts/src/main/resources/db/DDL.sql | 4 +++- .../src/main/resources/db/updateDDL_3.19.sql | 6 ++++++ .../imdg/businessobject/RegistryMapStore.java | 13 +++++++++++-- .../imdg/services/HazelcastLifecycleSupport.java | 2 +- 5 files changed, 30 insertions(+), 4 deletions(-) create mode 100644 clearing-parent/db-scripts/src/main/resources/db/updateDDL_3.19.sql 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 d8313394d..daa138109 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 @@ -61,6 +61,7 @@ public class Registry extends BusinessObject implements Cloneable { private String sessionType; private Long paymentId; private String section; + private String market; public Long getCompanyId() { return companyId; @@ -444,6 +445,14 @@ public class Registry extends BusinessObject implements Cloneable { this.section = section; } + public String getMarket() { + return market; + } + + public void setMarket(String market) { + this.market = market; + } + @Override public Registry clone() { try { 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 3c3b82f06..553a9b4f4 100644 --- a/clearing-parent/db-scripts/src/main/resources/db/DDL.sql +++ b/clearing-parent/db-scripts/src/main/resources/db/DDL.sql @@ -2082,7 +2082,7 @@ GRANT ALL PRIVILEGES ON TABLE TRADING_CLEARING_REGISTRY_LIST_HISTORY TO clearing -- registry - Регистр активов, обязательств и требований УК DROP TABLE IF EXISTS REGISTRY; -CREATE TABLE REGISTRY(COMPANY_ID bigint, TRADING_CODE varchar(255), CLEARING_CODE varchar(255), SHORT_NAME varchar(255), FULL_NAME varchar(255), ACCOUNT_ID bigint, ACCOUNT_TYPE varchar(4), ACCOUNT varchar(50), REGISTRY_DESIGNATION varchar(4), REGISTRY_INSTRUMENT_TYPE varchar(4), REGISTRY_CAPACITY varchar(4), REGISTRY_UNIT varchar(4), REGISTRY_CODE varchar(4), TRADING_CLEARING_REGISTRY_ID bigint, TRADING_CLEARING_REGISTRY varchar(50), REGISTRY_STATUS varchar(4), SECURITY_SYMBOL varchar(255), BALANCE numeric(72,18), BALANCE_RUB numeric(72,18), OPEN_BALANCE numeric(72,18), CLOSE_BALANCE numeric(72,18), CREDIT numeric(72,18), DEBIT numeric(72,18), SETTLED_CREDIT numeric(72,18), SETTLED_DEBIT numeric(72,18), CHECK_BALANCE numeric(72,18), DIFF_BALANCE numeric(72,18), PLAN_BALANCE numeric(72,18), BALANCE_DIMENSION varchar(4), SETTLEMENT_DATE date, SETTLEMENT_CODE varchar(12), TRADING_DATE date, CLEARING_DATE date, REFUND_DATE date, VALUE_DATE date, PRICE numeric(72,18), CONTRACT varchar(255), COUNTER_PARTY_ID bigint, COMMENT varchar(255), REASON varchar(255), PARENT_ID bigint, GROUP_ID bigint, SESSION_ID bigint, SESSION_TYPE varchar(4), PAYMENT_ID bigint, ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp, SECURITY_ID bigint, SECTION varchar(4)); +CREATE TABLE REGISTRY(COMPANY_ID bigint, TRADING_CODE varchar(255), CLEARING_CODE varchar(255), SHORT_NAME varchar(255), FULL_NAME varchar(255), ACCOUNT_ID bigint, ACCOUNT_TYPE varchar(4), ACCOUNT varchar(50), REGISTRY_DESIGNATION varchar(4), REGISTRY_INSTRUMENT_TYPE varchar(4), REGISTRY_CAPACITY varchar(4), REGISTRY_UNIT varchar(4), REGISTRY_CODE varchar(4), TRADING_CLEARING_REGISTRY_ID bigint, TRADING_CLEARING_REGISTRY varchar(50), REGISTRY_STATUS varchar(4), SECURITY_SYMBOL varchar(255), BALANCE numeric(72,18), BALANCE_RUB numeric(72,18), OPEN_BALANCE numeric(72,18), CLOSE_BALANCE numeric(72,18), CREDIT numeric(72,18), DEBIT numeric(72,18), SETTLED_CREDIT numeric(72,18), SETTLED_DEBIT numeric(72,18), CHECK_BALANCE numeric(72,18), DIFF_BALANCE numeric(72,18), PLAN_BALANCE numeric(72,18), BALANCE_DIMENSION varchar(4), SETTLEMENT_DATE date, SETTLEMENT_CODE varchar(12), TRADING_DATE date, CLEARING_DATE date, REFUND_DATE date, VALUE_DATE date, PRICE numeric(72,18), CONTRACT varchar(255), COUNTER_PARTY_ID bigint, COMMENT varchar(255), REASON varchar(255), PARENT_ID bigint, GROUP_ID bigint, SESSION_ID bigint, SESSION_TYPE varchar(4), PAYMENT_ID bigint, ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp, SECURITY_ID bigint, SECTION varchar(4), MARKET varchar(8)); COMMENT ON TABLE REGISTRY IS 'Регистр активов, обязательств и требований УК'; COMMENT ON COLUMN REGISTRY.COMPANY_ID IS 'Идентификатор участника (linked to company)'; @@ -2185,6 +2185,8 @@ COMMENT ON COLUMN REGISTRY.SECURITY_ID IS 'Идентификатор инстр COMMENT ON COLUMN REGISTRY.SECTION IS 'Код секции (linked to section)'; +COMMENT ON COLUMN REGISTRY.MARKET IS 'Код класса инструмента'; + GRANT ALL PRIVILEGES ON TABLE REGISTRY TO clearing; diff --git a/clearing-parent/db-scripts/src/main/resources/db/updateDDL_3.19.sql b/clearing-parent/db-scripts/src/main/resources/db/updateDDL_3.19.sql new file mode 100644 index 000000000..cdd8604a3 --- /dev/null +++ b/clearing-parent/db-scripts/src/main/resources/db/updateDDL_3.19.sql @@ -0,0 +1,6 @@ +-- DB version: 3.18 -> 3.19 + +ALTER TABLE REGISTRY ADD COLUMN IF NOT EXISTS MARKET VARCHAR(8); +COMMENT ON COLUMN REGISTRY.MARKET IS 'Код класса инструмента'; + +INSERT INTO DB_VERSION(ID, VERSION) values (1, '3.19') ON CONFLICT (ID) DO UPDATE SET VERSION = EXCLUDED.VERSION diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/RegistryMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/RegistryMapStore.java index c26094816..f16801014 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/RegistryMapStore.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/RegistryMapStore.java @@ -68,7 +68,14 @@ public class RegistryMapStore extends TemplateMapStore { @Override public String[] getFields() { return new String[]{ - "COMPANY_ID", "TRADING_CODE", "CLEARING_CODE", "SHORT_NAME", "FULL_NAME", "ACCOUNT_ID", "ACCOUNT_TYPE", "ACCOUNT", "REGISTRY_DESIGNATION", "REGISTRY_INSTRUMENT_TYPE", "REGISTRY_CAPACITY", "REGISTRY_UNIT", "REGISTRY_CODE", "TRADING_CLEARING_REGISTRY_ID", "TRADING_CLEARING_REGISTRY", "REGISTRY_STATUS", "SECURITY_SYMBOL", "BALANCE", "BALANCE_RUB", "OPEN_BALANCE", "CLOSE_BALANCE", "CREDIT", "DEBIT", "SETTLED_CREDIT", "SETTLED_DEBIT", "CHECK_BALANCE", "DIFF_BALANCE", "PLAN_BALANCE", "BALANCE_DIMENSION", "SETTLEMENT_DATE", "SETTLEMENT_CODE", "TRADING_DATE", "CLEARING_DATE", "REFUND_DATE", "VALUE_DATE", "PRICE", "CONTRACT", "COUNTER_PARTY_ID", "COMMENT", "REASON", "PARENT_ID", "GROUP_ID", "SESSION_ID", "SESSION_TYPE", "PAYMENT_ID", "ID", "CREATED_AT", "UPDATED_AT", "SECURITY_ID", "SECTION" + "COMPANY_ID", "TRADING_CODE", "CLEARING_CODE", "SHORT_NAME", "FULL_NAME", "ACCOUNT_ID", "ACCOUNT_TYPE", + "ACCOUNT", "REGISTRY_DESIGNATION", "REGISTRY_INSTRUMENT_TYPE", "REGISTRY_CAPACITY", "REGISTRY_UNIT", + "REGISTRY_CODE", "TRADING_CLEARING_REGISTRY_ID", "TRADING_CLEARING_REGISTRY", "REGISTRY_STATUS", + "SECURITY_SYMBOL", "BALANCE", "BALANCE_RUB", "OPEN_BALANCE", "CLOSE_BALANCE", "CREDIT", "DEBIT", + "SETTLED_CREDIT", "SETTLED_DEBIT", "CHECK_BALANCE", "DIFF_BALANCE", "PLAN_BALANCE", "BALANCE_DIMENSION", + "SETTLEMENT_DATE", "SETTLEMENT_CODE", "TRADING_DATE", "CLEARING_DATE", "REFUND_DATE", "VALUE_DATE", "PRICE", + "CONTRACT", "COUNTER_PARTY_ID", "COMMENT", "REASON", "PARENT_ID", "GROUP_ID", "SESSION_ID", "SESSION_TYPE", + "PAYMENT_ID", "ID", "CREATED_AT", "UPDATED_AT", "SECURITY_ID", "SECTION", "MARKET" }; } @@ -125,6 +132,7 @@ public class RegistryMapStore extends TemplateMapStore { object.setUpdated(getInstantFromTimestamp(resultSet, "UPDATED_AT")); object.setSecurityId(resultSet.getObject("SECURITY_ID", Long.class)); object.setSection(resultSet.getObject("SECTION", String.class)); + object.setMarket(resultSet.getObject("MARKET", String.class)); return object; } @@ -180,7 +188,8 @@ public class RegistryMapStore extends TemplateMapStore { TimeUtil.toDateFromInstant(object.getCreated()), TimeUtil.toDateFromInstant(object.getUpdated()), object.getSecurityId(), - object.getSection() + object.getSection(), + object.getMarket() }; return args; } diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/services/HazelcastLifecycleSupport.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/services/HazelcastLifecycleSupport.java index d38b6ffdd..9900626d9 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/services/HazelcastLifecycleSupport.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/services/HazelcastLifecycleSupport.java @@ -14,7 +14,7 @@ public class HazelcastLifecycleSupport extends AbstractHazelcastLifecycleSupport /** * Рабочая версия БД. Требуется вручную сверять с DDL.sql и накручивать эту переменную. */ - public static final String CHECK_DB_VERSION = "3.18"; + public static final String CHECK_DB_VERSION = "3.19"; private final Logger log = LoggerFactory.getLogger(this.getClass()); From 15ed82e788851f079d8e23ebbfa114215b51474e Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Fri, 20 Jun 2025 10:51:12 +0300 Subject: [PATCH 03/24] http://jira.mfd.msk:8088/browse/CLS-870 --- clearing-parent/db-scripts/src/main/resources/db/DDL.sql | 3 ++- .../db-scripts/src/main/resources/db/updateDDL_3.19.sql | 5 ++++- .../imdg/businessevent/RegistryHistoryMapStore.java | 6 ++++-- 3 files changed, 10 insertions(+), 4 deletions(-) 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 553a9b4f4..2244bd92c 100644 --- a/clearing-parent/db-scripts/src/main/resources/db/DDL.sql +++ b/clearing-parent/db-scripts/src/main/resources/db/DDL.sql @@ -2192,7 +2192,7 @@ GRANT ALL PRIVILEGES ON TABLE REGISTRY TO clearing; -- History log of registry - Регистр активов, обязательств и требований УК DROP TABLE IF EXISTS REGISTRY_HISTORY; -CREATE TABLE REGISTRY_HISTORY(REGISTRY_ID BIGINT NOT NULL, EVENT_TIME timestamp, EVENT_USER_ID BIGINT, EVENT_TYPE VARCHAR(4), COMPANY_ID bigint, TRADING_CODE varchar(255), CLEARING_CODE varchar(255), SHORT_NAME varchar(255), FULL_NAME varchar(255), ACCOUNT_ID bigint, ACCOUNT_TYPE varchar(4), ACCOUNT varchar(50), REGISTRY_DESIGNATION varchar(4), REGISTRY_INSTRUMENT_TYPE varchar(4), REGISTRY_CAPACITY varchar(4), REGISTRY_UNIT varchar(4), REGISTRY_CODE varchar(4), TRADING_CLEARING_REGISTRY_ID bigint, TRADING_CLEARING_REGISTRY varchar(50), REGISTRY_STATUS varchar(4), SECURITY_SYMBOL varchar(255), BALANCE numeric(72,18), BALANCE_RUB numeric(72,18), OPEN_BALANCE numeric(72,18), CLOSE_BALANCE numeric(72,18), CREDIT numeric(72,18), DEBIT numeric(72,18), SETTLED_CREDIT numeric(72,18), SETTLED_DEBIT numeric(72,18), CHECK_BALANCE numeric(72,18), DIFF_BALANCE numeric(72,18), PLAN_BALANCE numeric(72,18), BALANCE_DIMENSION varchar(4), SETTLEMENT_DATE date, SETTLEMENT_CODE varchar(12), TRADING_DATE date, CLEARING_DATE date, REFUND_DATE date, VALUE_DATE date, PRICE numeric(72,18), CONTRACT varchar(255), COUNTER_PARTY_ID bigint, COMMENT varchar(255), REASON varchar(255), PARENT_ID bigint, GROUP_ID bigint, SESSION_ID bigint, SESSION_TYPE varchar(4), PAYMENT_ID bigint, ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp, SECURITY_ID bigint, SECTION varchar(4)); +CREATE TABLE REGISTRY_HISTORY(REGISTRY_ID BIGINT NOT NULL, EVENT_TIME timestamp, EVENT_USER_ID BIGINT, EVENT_TYPE VARCHAR(4), COMPANY_ID bigint, TRADING_CODE varchar(255), CLEARING_CODE varchar(255), SHORT_NAME varchar(255), FULL_NAME varchar(255), ACCOUNT_ID bigint, ACCOUNT_TYPE varchar(4), ACCOUNT varchar(50), REGISTRY_DESIGNATION varchar(4), REGISTRY_INSTRUMENT_TYPE varchar(4), REGISTRY_CAPACITY varchar(4), REGISTRY_UNIT varchar(4), REGISTRY_CODE varchar(4), TRADING_CLEARING_REGISTRY_ID bigint, TRADING_CLEARING_REGISTRY varchar(50), REGISTRY_STATUS varchar(4), SECURITY_SYMBOL varchar(255), BALANCE numeric(72,18), BALANCE_RUB numeric(72,18), OPEN_BALANCE numeric(72,18), CLOSE_BALANCE numeric(72,18), CREDIT numeric(72,18), DEBIT numeric(72,18), SETTLED_CREDIT numeric(72,18), SETTLED_DEBIT numeric(72,18), CHECK_BALANCE numeric(72,18), DIFF_BALANCE numeric(72,18), PLAN_BALANCE numeric(72,18), BALANCE_DIMENSION varchar(4), SETTLEMENT_DATE date, SETTLEMENT_CODE varchar(12), TRADING_DATE date, CLEARING_DATE date, REFUND_DATE date, VALUE_DATE date, PRICE numeric(72,18), CONTRACT varchar(255), COUNTER_PARTY_ID bigint, COMMENT varchar(255), REASON varchar(255), PARENT_ID bigint, GROUP_ID bigint, SESSION_ID bigint, SESSION_TYPE varchar(4), PAYMENT_ID bigint, ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp, SECURITY_ID bigint, SECTION varchar(4), MARKET varchar(8)); COMMENT ON TABLE REGISTRY_HISTORY IS 'История изменений таблицы registry'; COMMENT ON COLUMN REGISTRY_HISTORY.REGISTRY_ID IS 'Идентификатор записи в таблице REGISTRY'; COMMENT ON COLUMN REGISTRY_HISTORY.EVENT_TIME IS 'Дата и время изменения'; @@ -2298,6 +2298,7 @@ COMMENT ON COLUMN REGISTRY_HISTORY.UPDATED_AT IS 'Дата и время изм COMMENT ON COLUMN REGISTRY_HISTORY.SECURITY_ID IS 'Идентификатор инструмента (linked to security)'; COMMENT ON COLUMN REGISTRY_HISTORY.SECTION IS 'Код секции (linked to section)'; +COMMENT ON COLUMN REGISTRY_HISTORY.MARKET IS 'Код класса инструмента'; GRANT ALL PRIVILEGES ON TABLE REGISTRY_HISTORY TO clearing; diff --git a/clearing-parent/db-scripts/src/main/resources/db/updateDDL_3.19.sql b/clearing-parent/db-scripts/src/main/resources/db/updateDDL_3.19.sql index cdd8604a3..85d3b351d 100644 --- a/clearing-parent/db-scripts/src/main/resources/db/updateDDL_3.19.sql +++ b/clearing-parent/db-scripts/src/main/resources/db/updateDDL_3.19.sql @@ -3,4 +3,7 @@ ALTER TABLE REGISTRY ADD COLUMN IF NOT EXISTS MARKET VARCHAR(8); COMMENT ON COLUMN REGISTRY.MARKET IS 'Код класса инструмента'; -INSERT INTO DB_VERSION(ID, VERSION) values (1, '3.19') ON CONFLICT (ID) DO UPDATE SET VERSION = EXCLUDED.VERSION +ALTER TABLE REGISTRY_HISTORY ADD COLUMN IF NOT EXISTS MARKET VARCHAR(8); +COMMENT ON COLUMN REGISTRY_HISTORY.MARKET IS 'Код класса инструмента'; + +INSERT INTO DB_VERSION(ID, VERSION) values (1, '3.19') ON CONFLICT (ID) DO UPDATE SET VERSION = EXCLUDED.VERSION \ No newline at end of file diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessevent/RegistryHistoryMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessevent/RegistryHistoryMapStore.java index 710051630..680b74ba5 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessevent/RegistryHistoryMapStore.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessevent/RegistryHistoryMapStore.java @@ -61,7 +61,7 @@ public class RegistryHistoryMapStore extends TemplateEventMapStore Date: Mon, 23 Jun 2025 11:51:42 +0300 Subject: [PATCH 04/24] .gitlab-ci.yml changed, master branch added to auto test execution --- .gitlab-ci.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index d6901939f..78311f2f4 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -24,6 +24,7 @@ preflight: paths: - clearing_test only: + - master - dev - /^dev_.*$/ - new @@ -40,6 +41,7 @@ build: paths: - /builds/mfd/clearing/z-distr/target/clearing only: + - master - dev - /^dev_.*$/ - new @@ -66,6 +68,7 @@ test: paths: - artifacts/logs only: + - master - dev - /^dev_.*$/ - new From d5366ab2a1b10b6f8ff364fc489f60e9bd0b82ac Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Mon, 23 Jun 2025 15:24:49 +0300 Subject: [PATCH 05/24] =?UTF-8?q?=D1=83=D1=81=D1=82=D0=B0=D0=BD=D0=BE?= =?UTF-8?q?=D0=B2=D0=BA=D0=B0=20market=20=D0=BF=D1=80=D0=B8=20=D1=81=D0=BE?= =?UTF-8?q?=D0=B7=D0=B4=D0=B0=D0=BD=D0=B8=D0=B8=20=D1=80=D0=B5=D0=B3=D0=B8?= =?UTF-8?q?=D1=81=D1=82=D1=80=D0=BE=D0=B2=20=D0=B4=D0=BB=D1=8F=20=D0=B0?= =?UTF-8?q?=D0=BA=D1=82=D0=B8=D0=B2=D0=BD=D0=BE=D0=B9=20=D1=81=D0=B5=D1=81?= =?UTF-8?q?=D1=81=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ru/spcex/clearing/session/stage/impl/RegistryCkBuilder.java | 1 + .../spcex/clearing/session/stage/impl/RegistryCurrBuilder.java | 1 + .../spcex/clearing/session/stage/impl/RegistryDepoBuilder.java | 1 + .../spcex/clearing/session/stage/impl/RegistryFondBuilder.java | 1 + 4 files changed, 4 insertions(+) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryCkBuilder.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryCkBuilder.java index 294bded7f..d7baaa574 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryCkBuilder.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryCkBuilder.java @@ -210,6 +210,7 @@ public class RegistryCkBuilder implements IRegistryBuilder { reg.setSessionId(exec.getSessionId()); reg.setSessionType(sessionType()); reg.setSection(Section.CURR.getKey()); + reg.setMarket(exec.getMarket()); return reg; } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryCurrBuilder.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryCurrBuilder.java index b9b8757f9..c0ed90125 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryCurrBuilder.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryCurrBuilder.java @@ -213,6 +213,7 @@ public class RegistryCurrBuilder implements IRegistryBuilder { reg.setSessionId(exec.getSessionId()); reg.setSessionType(sessionType()); reg.setSection(Section.CURR.getKey()); + reg.setMarket(exec.getMarket()); return reg; } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryDepoBuilder.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryDepoBuilder.java index ee02d74da..de6d247de 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryDepoBuilder.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryDepoBuilder.java @@ -158,6 +158,7 @@ public class RegistryDepoBuilder implements IRegistryBuilder { reg.setSessionId(exec.getSessionId()); reg.setSessionType(sessionType()); reg.setSection(Section.MKR.getKey()); + reg.setMarket(exec.getMarket()); return reg; } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryFondBuilder.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryFondBuilder.java index 67e50fea8..42f783a40 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryFondBuilder.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryFondBuilder.java @@ -239,6 +239,7 @@ public class RegistryFondBuilder implements IRegistryBuilder { reg.setSessionId(exec.getSessionId()); reg.setSessionType(sessionType()); reg.setSection(Section.FOND.getKey()); + reg.setMarket(exec.getMarket()); return reg; } From f21bafb2d7d1b51bd0db1be286a6468ded18d303 Mon Sep 17 00:00:00 2001 From: ialbert Date: Mon, 23 Jun 2025 15:28:06 +0300 Subject: [PATCH 06/24] =?UTF-8?q?Execution=20=D1=83=D1=81=D0=BB=D0=BE?= =?UTF-8?q?=D0=B2=D0=B8=D0=B5=20=D0=BD=D0=B0=20=D0=BC=D0=B0=D1=80=D0=BA?= =?UTF-8?q?=D0=B5=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../clearing/service/execution/ExecUploadKey.java | 13 +++++++++---- .../execution/ExecutionCurrencyComponent.java | 1 + .../execution/ExecutionDepositComponent.java | 1 + .../service/execution/ExecutionFondComponent.java | 1 + .../ks/KSCommissionTradesReportBuilder.java | 3 +++ .../builders/ks/KSRepTradesReportBuilder.java | 7 ++++--- 6 files changed, 19 insertions(+), 7 deletions(-) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/execution/ExecUploadKey.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/execution/ExecUploadKey.java index 678dbb3ea..de3290f73 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/execution/ExecUploadKey.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/execution/ExecUploadKey.java @@ -4,14 +4,19 @@ import java.time.LocalDate; import java.util.Objects; import ru.clearing.classes.statics.data.execution.ExecutionCommon; -public record ExecUploadKey(LocalDate tradeDate, Long exchangeExecutionId, String side) { +public record ExecUploadKey(LocalDate tradeDate, Long exchangeExecutionId, String market, String side) { - public static ExecUploadKey cash(LocalDate tradingDate, Long exchangeExecutionId, String side) { - return new ExecUploadKey(tradingDate, exchangeExecutionId, side); + public static ExecUploadKey cash(LocalDate tradingDate, Long exchangeExecutionId, String market, String side) { + return new ExecUploadKey(tradingDate, exchangeExecutionId, market, side); } public static ExecUploadKey cash(ExecutionCommon exec) { - return new ExecUploadKey(exec.getTradingDate(), exec.getExchangeExecutionId(), exec.getSide()); + return new ExecUploadKey( + exec.getTradingDate(), + exec.getExchangeExecutionId(), + exec.getMarket(), + exec.getSide() + ); } @Override diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/execution/ExecutionCurrencyComponent.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/execution/ExecutionCurrencyComponent.java index 9d647d224..869c9ac8d 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/execution/ExecutionCurrencyComponent.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/execution/ExecutionCurrencyComponent.java @@ -176,6 +176,7 @@ public class ExecutionCurrencyComponent implements IExecutionUploadComponent { // MoneyFlowSide excDepSide = sTrdSide == Side.BUY ? MoneyFlowSide.BUY : MoneyFlowSide.SELL; ExecUploadKey excKey = ExecUploadKey.cash(sTrd.getTradeDate(), sTrd.getTradeNum(), + sTrd.getClassCode(), sTrdSide.getKey()); return cash.containsKey(excKey); }); diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/execution/ExecutionDepositComponent.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/execution/ExecutionDepositComponent.java index 943348330..999a5b21c 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/execution/ExecutionDepositComponent.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/execution/ExecutionDepositComponent.java @@ -160,6 +160,7 @@ public class ExecutionDepositComponent implements IExecutionUploadComponent { MoneyFlowSide excDepSide = sTrdSide.equals(Side.BUY) ? MoneyFlowSide.BUY : MoneyFlowSide.SELL; ExecUploadKey excKey = ExecUploadKey.cash(sTrd.getTradeDate(), sTrd.getTradeNum(), + sTrd.getClassCode(), excDepSide.getKey()); return cash.containsKey(excKey); }); diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/execution/ExecutionFondComponent.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/execution/ExecutionFondComponent.java index a499a2032..57d6d2de5 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/execution/ExecutionFondComponent.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/execution/ExecutionFondComponent.java @@ -189,6 +189,7 @@ public class ExecutionFondComponent implements IExecutionUploadComponent { Side excDepSide = sTrdSide.equals(Side.BUY) ? Side.BUY : Side.SELL; ExecUploadKey excKey = ExecUploadKey.cash(sTrd.getTradeDate(), sTrd.getTradeNum(), + sTrd.getClassCode(), excDepSide.getKey()); return cash.containsKey(excKey); }); diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/ks/KSCommissionTradesReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/ks/KSCommissionTradesReportBuilder.java index 59fd03832..c4bea14ca 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/ks/KSCommissionTradesReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/ks/KSCommissionTradesReportBuilder.java @@ -32,6 +32,7 @@ import ru.spcex.platform.imdg.api.predicate.ImdgPredicate; import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder; import ru.spcex.platform.utils.enumeration.IEnumKey; +import ru.spcex.platform.utils.text.TextUtil; @Component public class KSCommissionTradesReportBuilder extends CSVReportBuilder { @@ -168,6 +169,8 @@ public class KSCommissionTradesReportBuilder extends CSVReportBuilder executionDeposits = executionDepositImdg.getCollectionObjectsByPredicate( pb.and( pb.equals("exchangeExecutionId", registry.getGroupId()), + TextUtil.isEmpty(registry.getMarket()) ? + pb.alwaysTrue() : pb.equals("market", registry.getMarket()), pb.notNull("market") ) ); diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/ks/KSRepTradesReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/ks/KSRepTradesReportBuilder.java index 3bde5b548..acceeabce 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/ks/KSRepTradesReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/ks/KSRepTradesReportBuilder.java @@ -149,6 +149,7 @@ public class KSRepTradesReportBuilder extends CSVReportBuilder registryCollection = registryImdg.getCollectionObjectsByPredicate( pbRegistry.and( pbRegistry.equals("groupId", groupId), + pbRegistry.equals("market", execution.getMarket()), //fixme может быть "старый" registry без market pbRegistry.equals("companyId", execution.getCompanyId()), pbRegistry.in("registryStatus", RegistryStatus.NACC.getKey(), @@ -170,7 +171,7 @@ public class KSRepTradesReportBuilder extends CSVReportBuilder Date: Mon, 23 Jun 2025 15:33:04 +0300 Subject: [PATCH 07/24] =?UTF-8?q?Execution=20=D1=83=D1=81=D0=BB=D0=BE?= =?UTF-8?q?=D0=B2=D0=B8=D0=B5=20=D0=BD=D0=B0=20=D0=BC=D0=B0=D1=80=D0=BA?= =?UTF-8?q?=D0=B5=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../builders/ks/KSRepTradesReportBuilder.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/ks/KSRepTradesReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/ks/KSRepTradesReportBuilder.java index acceeabce..1fb62f185 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/ks/KSRepTradesReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/ks/KSRepTradesReportBuilder.java @@ -144,14 +144,14 @@ public class KSRepTradesReportBuilder extends CSVReportBuilder registryCollection = registryImdg.getCollectionObjectsByPredicate( - pbRegistry.and( - pbRegistry.equals("groupId", groupId), - pbRegistry.equals("market", execution.getMarket()), //fixme может быть "старый" registry без market - pbRegistry.equals("companyId", execution.getCompanyId()), - pbRegistry.in("registryStatus", + pb.and( + pb.equals("groupId", groupId), + pb.or(pb.equals("market", execution.getMarket()), pb.isNull("market")), + pb.equals("companyId", execution.getCompanyId()), + pb.in("registryStatus", RegistryStatus.NACC.getKey(), RegistryStatus.NACK.getKey(), RegistryStatus.FAIL.getKey(), From d27b7d003d49e06e971292ce3e99816a17175a3d Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Mon, 23 Jun 2025 16:44:22 +0300 Subject: [PATCH 08/24] =?UTF-8?q?=D0=B3=D1=80=D1=83=D0=BF=D0=BF=D0=B8?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=BA=D0=B0=20registry=20=D1=81=20=D1=83?= =?UTF-8?q?=D1=87=D0=B5=D1=82=D0=BE=D0=BC=20market=20=D0=B8=20groupId=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D1=88=D0=B0=D0=B3=D0=B0=207=20=D0=B0?= =?UTF-8?q?=D0=BA=D1=82=D0=B8=D0=B2=D0=BD=D0=BE=D0=B9=20=D1=81=D0=B5=D1=81?= =?UTF-8?q?=D1=81=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../component/GroupingRegistryKey.java | 18 ++++++++++++++++++ .../FormingPaymentInstructionSecurities.java | 14 ++++++++------ .../group/RegistryLiabilitiesGroup.java | 8 +++++--- 3 files changed, 31 insertions(+), 9 deletions(-) create mode 100644 clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/component/GroupingRegistryKey.java diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/component/GroupingRegistryKey.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/component/GroupingRegistryKey.java new file mode 100644 index 000000000..5c1f38463 --- /dev/null +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/component/GroupingRegistryKey.java @@ -0,0 +1,18 @@ +package ru.spcex.clearing.component; + +import java.util.Objects; + +public record GroupingRegistryKey(Long groupId, String market) { + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + GroupingRegistryKey that = (GroupingRegistryKey) o; + return Objects.equals(groupId, that.groupId) && Objects.equals(market, that.market); + } + + @Override + public int hashCode() { + return Objects.hash(groupId, market); + } +} diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstructionSecurities.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstructionSecurities.java index 4bcd7c6c7..766c04ce7 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstructionSecurities.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstructionSecurities.java @@ -24,6 +24,7 @@ import ru.clearing.classes.statics.data.registry.Registry; import ru.clearing.classes.statics.data.sdf.SDf03; import ru.clearing.classes.statics.data.sdf.SDf12; import ru.clearing.classes.statics.data.security.Security; +import ru.spcex.clearing.component.GroupingRegistryKey; import ru.spcex.clearing.error.ClearingError; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.platform.messaging.domain.Consts; @@ -159,14 +160,15 @@ public class FormingPaymentInstructionSecurities implements ISessionStage { { Collection registries = selectSecurityRegistries(sessionId); log.debug("found registries.size() = {}", registries.size()); - //группируем регистры по groupId - Map> groups = registries - .stream() - .collect(Collectors.groupingBy(Registry::getGroupId)); + //группируем регистры по groupId и market + Map> groups = registries + .stream() + .collect(Collectors.groupingBy(r -> new GroupingRegistryKey(r.getGroupId(), r.getMarket()))); + log.debug("groups.size = {}", groups.size()); Map lstGroups = RegistryLiabilitiesGroup.group(groups); - for (Map.Entry> group : groups.entrySet()) { - Long groupId = group.getKey(); + for (Map.Entry> group : groups.entrySet()) { + Long groupId = group.getKey().groupId(); Function findByCode = rgsCode -> group.getValue() .stream() .filter(rgs -> RegistryManager.equalsByCode(rgsCode, rgs)) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/payment/group/RegistryLiabilitiesGroup.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/payment/group/RegistryLiabilitiesGroup.java index 2db0608b7..9d8ddfeff 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/payment/group/RegistryLiabilitiesGroup.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/payment/group/RegistryLiabilitiesGroup.java @@ -11,6 +11,7 @@ import java.util.stream.Collectors; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ru.clearing.classes.statics.data.registry.Registry; +import ru.spcex.clearing.component.GroupingRegistryKey; import ru.spcex.clearing.service.registry.RegistryManager; import ru.spcex.platform.enumeration.RegistryTradingParams; import static ru.spcex.platform.enumeration.RegistryTradingParams.OS_T; @@ -21,17 +22,18 @@ import ru.spcex.platform.utils.text.TextUtil; public class RegistryLiabilitiesGroup { private static final Logger log = LoggerFactory.getLogger(RegistryLiabilitiesGroup.class); - public static Map group(Map> registriesCollection) { + public static Map group(Map> registriesCollection) { Map result = new HashMap<>(); List> lstCstGroup = registriesCollection.entrySet() .stream() .map(entry -> { - Long groupId = entry.getKey(); + Long groupId = entry.getKey().groupId(); + String market = entry.getKey().market(); List value = entry.getValue(); Registry ls_t = obtain(value, OS_T); Registry cs_t = obtain(value, TS_T); if (ls_t == null || cs_t == null) { - log.error("groupId {} registries {} failed to find LS_T/CS_T", groupId, value.stream() + log.error("groupId/market {}/{} registries {} failed to find LS_T/CS_T", groupId, market, value.stream() .map(Registry::getId) .map(Object::toString) .collect(TextUtil.join)); From bd2d8fcc580b1a081a12d1943e88400ac2fccc6a Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Mon, 23 Jun 2025 17:06:15 +0300 Subject: [PATCH 09/24] =?UTF-8?q?=D0=B3=D1=80=D1=83=D0=BF=D0=BF=D0=B8?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=BA=D0=B0=20registry=20=D1=81=20=D1=83?= =?UTF-8?q?=D1=87=D0=B5=D1=82=D0=BE=D0=BC=20market=20=D0=B8=20groupId=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D1=88=D0=B0=D0=B3=D0=B0=207=20=D0=B0?= =?UTF-8?q?=D0=BA=D1=82=D0=B8=D0=B2=D0=BD=D0=BE=D0=B9=20=D1=81=D0=B5=D1=81?= =?UTF-8?q?=D1=81=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...upingRegistryKey.java => GroupRgsKey.java} | 4 ++-- .../FormingPaymentInstructionSecurities.java | 19 ++++++++++--------- .../group/RegistryLiabilitiesGroup.java | 4 ++-- .../session/stage/util/RegistryUtil.java | 13 ------------- 4 files changed, 14 insertions(+), 26 deletions(-) rename clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/component/{GroupingRegistryKey.java => GroupRgsKey.java} (76%) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/component/GroupingRegistryKey.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/component/GroupRgsKey.java similarity index 76% rename from clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/component/GroupingRegistryKey.java rename to clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/component/GroupRgsKey.java index 5c1f38463..6e526f3f7 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/component/GroupingRegistryKey.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/component/GroupRgsKey.java @@ -2,12 +2,12 @@ package ru.spcex.clearing.component; import java.util.Objects; -public record GroupingRegistryKey(Long groupId, String market) { +public record GroupRgsKey(Long groupId, String market) { @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; - GroupingRegistryKey that = (GroupingRegistryKey) o; + GroupRgsKey that = (GroupRgsKey) o; return Objects.equals(groupId, that.groupId) && Objects.equals(market, that.market); } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstructionSecurities.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstructionSecurities.java index 766c04ce7..d18189ae6 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstructionSecurities.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstructionSecurities.java @@ -24,7 +24,7 @@ import ru.clearing.classes.statics.data.registry.Registry; import ru.clearing.classes.statics.data.sdf.SDf03; import ru.clearing.classes.statics.data.sdf.SDf12; import ru.clearing.classes.statics.data.security.Security; -import ru.spcex.clearing.component.GroupingRegistryKey; +import ru.spcex.clearing.component.GroupRgsKey; import ru.spcex.clearing.error.ClearingError; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.platform.messaging.domain.Consts; @@ -161,14 +161,15 @@ public class FormingPaymentInstructionSecurities implements ISessionStage { Collection registries = selectSecurityRegistries(sessionId); log.debug("found registries.size() = {}", registries.size()); //группируем регистры по groupId и market - Map> groups = registries + Map> groups = registries .stream() - .collect(Collectors.groupingBy(r -> new GroupingRegistryKey(r.getGroupId(), r.getMarket()))); + .collect(Collectors.groupingBy(r -> new GroupRgsKey(r.getGroupId(), r.getMarket()))); log.debug("groups.size = {}", groups.size()); Map lstGroups = RegistryLiabilitiesGroup.group(groups); - for (Map.Entry> group : groups.entrySet()) { + for (Map.Entry> group : groups.entrySet()) { Long groupId = group.getKey().groupId(); + String market = group.getKey().market(); Function findByCode = rgsCode -> group.getValue() .stream() .filter(rgs -> RegistryManager.equalsByCode(rgsCode, rgs)) @@ -178,12 +179,12 @@ public class FormingPaymentInstructionSecurities implements ISessionStage { Registry cs_t = findByCode.apply(RegistryTradingParams.TS_T); Registry ls_t = findByCode.apply(RegistryTradingParams.OS_T); if (cs_t == null || ls_t == null) { - log.error("groupId {} cmt_t {} ls_t {} - both must be present", groupId, cs_t, ls_t); + log.error("groupId/market {}/{} cmt_t {} ls_t {} - both must be present", groupId, market, cs_t, ls_t); continue; } PaymentGroup ls_t_group = lstGroups.get(ls_t.getId()); if (ls_t_group == null) { - log.debug("groupId {} cmt_t {} ls_t {} were included in a group, skipping", groupId, cs_t, ls_t); + log.debug("groupId/market {}/{} cmt_t {} ls_t {} were included in a group, skipping", groupId, market, cs_t, ls_t); continue; } @@ -194,7 +195,7 @@ public class FormingPaymentInstructionSecurities implements ISessionStage { AS_T ); payerAstO.ifPresent(as_t -> { - log.debug("groupId {} cmt_t {} ls_t {} changing AS*T.id={} sender", groupId, cs_t, ls_t, as_t.getId()); + log.debug("groupId/market {}/{} cmt_t {} ls_t {} changing AS*T.id={} sender", groupId, market, cs_t, ls_t, as_t.getId()); as_t.setSettledDebit(safeBD(as_t.getSettledDebit()).add(safeBD(ls_t_group.getSum()))); setUpdatedStoreInImdg(as_t, now); }); @@ -205,7 +206,7 @@ public class FormingPaymentInstructionSecurities implements ISessionStage { AS_T ); receiverAstO.ifPresent(as_t -> { - log.debug("groupId {} cmt_t {} ls_t {} changing AS*T.id={} receiver", groupId, cs_t, ls_t, as_t.getId()); + log.debug("groupId/market {}/{} cmt_t {} ls_t {} changing AS*T.id={} receiver", groupId, market, cs_t, ls_t, as_t.getId()); as_t.setSettledCredit(safeBD(as_t.getSettledCredit()).add(safeBD(ls_t_group.getSum()))); setUpdatedStoreInImdg(as_t, now); }); @@ -238,7 +239,7 @@ public class FormingPaymentInstructionSecurities implements ISessionStage { paymentInstructionImdg.insert(pmt); paymentInstructionAll.add(pmt); - log.trace("generated PaymentInstructions for groupId {}: pmtInstr.id={}", groupId, pmt.getId()); + log.trace("generated PaymentInstructions for groupId/market {}/{}: pmtInstr.id={}", groupId, market, pmt.getId()); } } { diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/payment/group/RegistryLiabilitiesGroup.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/payment/group/RegistryLiabilitiesGroup.java index 9d8ddfeff..5be7a7127 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/payment/group/RegistryLiabilitiesGroup.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/payment/group/RegistryLiabilitiesGroup.java @@ -11,7 +11,7 @@ import java.util.stream.Collectors; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ru.clearing.classes.statics.data.registry.Registry; -import ru.spcex.clearing.component.GroupingRegistryKey; +import ru.spcex.clearing.component.GroupRgsKey; import ru.spcex.clearing.service.registry.RegistryManager; import ru.spcex.platform.enumeration.RegistryTradingParams; import static ru.spcex.platform.enumeration.RegistryTradingParams.OS_T; @@ -22,7 +22,7 @@ import ru.spcex.platform.utils.text.TextUtil; public class RegistryLiabilitiesGroup { private static final Logger log = LoggerFactory.getLogger(RegistryLiabilitiesGroup.class); - public static Map group(Map> registriesCollection) { + public static Map group(Map> registriesCollection) { Map result = new HashMap<>(); List> lstCstGroup = registriesCollection.entrySet() .stream() 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 index 8e752c590..fd79c7c5b 100644 --- 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 @@ -57,17 +57,4 @@ public class RegistryUtil { newRgsCde.setCharAt(2, '-'); return newRgsCde.toString(); } - - 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; - } } From 86917e91fda39c7e6492a22c021ec2f362b9a450 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Mon, 23 Jun 2025 17:44:08 +0300 Subject: [PATCH 10/24] =?UTF-8?q?=D0=B3=D1=80=D1=83=D0=BF=D0=BF=D0=B8?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=BA=D0=B0=20registry=20=D1=81=20=D1=83?= =?UTF-8?q?=D1=87=D0=B5=D1=82=D0=BE=D0=BC=20market=20=D0=B8=20groupId=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D1=88=D0=B0=D0=B3=D0=B0=205=20=D0=B0?= =?UTF-8?q?=D0=BA=D1=82=D0=B8=D0=B2=D0=BD=D0=BE=D0=B9=20=D1=81=D0=B5=D1=81?= =?UTF-8?q?=D1=81=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../stage/impl/InspectionObligationsV2.java | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InspectionObligationsV2.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InspectionObligationsV2.java index a7913fda8..34fc51e3b 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InspectionObligationsV2.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InspectionObligationsV2.java @@ -19,6 +19,7 @@ import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Service; import ru.clearing.classes.statics.data.registry.Registry; +import ru.spcex.clearing.component.GroupRgsKey; import ru.spcex.clearing.component.predicate.cash.registry.AssetByTcrCompanyAccountCashedPredicate; import ru.spcex.clearing.error.ClearingError; import ru.spcex.clearing.error.RgsError; @@ -128,8 +129,8 @@ public class InspectionObligationsV2 implements ISessionStage { Collection registriesToProcess = registryImdg.getCollectionObjectsBySQL(sqlCondition); Map rgssToStore = new HashMap<>(registriesToProcess.size()); //вторые ноги у сделок - нужна ли оптимизация? - List>> registriesByGroupSorted = registriesToProcess.stream() - .collect(Collectors.groupingBy(Registry::getGroupId)) + List>> registriesByGroupSorted = registriesToProcess.stream() + .collect(Collectors.groupingBy(registry -> new GroupRgsKey(registry.getGroupId(), registry.getMarket()))) .entrySet() .stream() .sorted((entry1, entry2) -> { @@ -150,15 +151,15 @@ public class InspectionObligationsV2 implements ISessionStage { log.info("found {} ({} groups) registries by sql: {}", registriesToProcess.size(), registriesByGroupSorted.size(), sqlCondition); ImdgPredicateBuilder rgsPb = registryImdg.predicateBuilder(); GROUP: - for (Map.Entry> entry : registriesByGroupSorted) { + for (Map.Entry> entry : registriesByGroupSorted) { List group = entry.getValue(); List obligationsInGroup = group.stream().filter(registry -> IEnumKey.getEnumByKey(RegistryDesignation.class, registry.getRegistryDesignation()) == RegistryDesignation.O).toList(); - log.debug("Find {} obligation with ids: {} in group: {}", obligationsInGroup.size(), + log.debug("Find {} obligation with ids: {} in group/market: {}/{}", obligationsInGroup.size(), obligationsInGroup.stream() .map(Registry::getId).collect(Collectors.toList()), - entry.getKey()); + entry.getKey().groupId(), entry.getKey().market()); boolean isUncovered = false; List checkResults = new ArrayList<>(); for (Registry obligation : obligationsInGroup) { @@ -191,7 +192,7 @@ public class InspectionObligationsV2 implements ISessionStage { }); RegistryInstrumentType mOrS = IEnumKey.getEnumByKey(RegistryInstrumentType.class, rgs.getRegistryInstrumentType()); if (mOrS == null) { - log.error("RegistryInstrumentType is null for groupId {} {}.id={}", entry.getKey(), + log.error("RegistryInstrumentType is null for groupId/market {}/{} {}.id={}", entry.getKey().groupId(), entry.getKey().market(), rgs.getRegistryCode(), rgs.getId()); failGroup.run(); continue; @@ -345,6 +346,7 @@ public class InspectionObligationsV2 implements ISessionStage { private Collection getRefundDateRgsIfPresent(List registries) { if (registries.stream().anyMatch(rgs -> rgs.getRefundDate() != null) && !SessionType.MEDM.equals(sessionType)) { + //доп группировка по market не нужна, лист registries уже сгруппирован Optional> groupIdAndSettleDate = registries.stream() .map(rgs -> new Pair<>(rgs.getGroupId(), rgs.getSettlementDate())) .filter(pair -> pair.getFirst() != null) From f78d4394c3dde8173b259c33fda36f438644676d Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Mon, 23 Jun 2025 18:17:17 +0300 Subject: [PATCH 11/24] =?UTF-8?q?=D0=B3=D1=80=D1=83=D0=BF=D0=BF=D0=B8?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=BA=D0=B0=20registry=20=D1=81=20=D1=83?= =?UTF-8?q?=D1=87=D0=B5=D1=82=D0=BE=D0=BC=20market=20=D0=B8=20groupId=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D1=88=D0=B0=D0=B3=D0=B0=204=20=D0=B0?= =?UTF-8?q?=D0=BA=D1=82=D0=B8=D0=B2=D0=BD=D0=BE=D0=B9=20=D1=81=D0=B5=D1=81?= =?UTF-8?q?=D1=81=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../stage/impl/InclusionObligations.java | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) 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 2f7665714..3202e89d4 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 @@ -18,12 +18,14 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; import ru.clearing.classes.statics.data.execution.ExecutionCommon; import ru.clearing.classes.statics.data.execution.ExecutionCurrency; import ru.clearing.classes.statics.data.execution.ExecutionDeposit; import ru.clearing.classes.statics.data.execution.ExecutionFond; import ru.clearing.classes.statics.data.misc.Session; import ru.clearing.classes.statics.data.registry.Registry; +import ru.spcex.clearing.component.GroupRgsKey; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender; import ru.spcex.clearing.session.stage.ISessionStage; @@ -129,17 +131,17 @@ public class InclusionObligations implements ISessionStage { } log.info("Inclusion to pool with predicate: {}", registryPredicate.toString()); Collection obligations = registryImdg.getCollectionObjectsByPredicate(registryPredicate); - Map> registryByGroupId = obligations.stream() + Map> registryByGroupId = obligations.stream() .filter(registry -> registry.getSettlementDate().isEqual(LocalDate.now())) - .collect(Collectors.groupingBy(Registry::getGroupId)); + .collect(Collectors.groupingBy(registry -> new GroupRgsKey(registry.getGroupId(), registry.getMarket()))); Optional ssnType = obtainSessionType(sessionId); Map rgsToUpdate = new HashMap<>(); List execsToUpdate = new ArrayList<>(); boolean loadExecs = !IEnumKey.contains(sessionType, SessionType.TRDT, SessionType.CURR, SessionType.UNIT, SessionType.IPOT); - for (Map.Entry> entrySet : registryByGroupId.entrySet()) { - log.debug("Processing set of registry with groupId: {}", entrySet.getKey()); + for (Map.Entry> entrySet : registryByGroupId.entrySet()) { + log.debug("Processing set of registry with groupId/market: {}/{}", entrySet.getKey().groupId(), entrySet.getKey().market()); String rgsSection = null; for (Registry registry : entrySet.getValue()) { registry.setRegistryStatus(RegistryStatus.POOL.getKey()); @@ -164,7 +166,7 @@ public class InclusionObligations implements ISessionStage { } @SuppressWarnings("unchecked") - private Collection updateExecutions(Long sessionId, Long rgsGroupId, String rgsSection) { + private Collection updateExecutions(Long sessionId, GroupRgsKey groupRgsKey, String rgsSection) { Instant now = Instant.now(); SessionType ssnTpe = obtainSessionType(sessionId).orElse(null); if (ssnTpe == null || sessionId == null) { @@ -193,7 +195,10 @@ public class InclusionObligations implements ISessionStage { return Collections.emptyList(); } ImdgPredicateBuilder pb = execImdg.predicateBuilder(); - ImdgPredicate prdct = pb.equals("exchangeExecutionId", rgsGroupId); + ImdgPredicate prdct = pb.and( + pb.equals("exchangeExecutionId", groupRgsKey.groupId()), + StringUtils.hasText(groupRgsKey.market()) ? pb.equals("market", groupRgsKey.market()) : pb.alwaysTrue() + ); Collection execs = execImdg.getCollectionObjectsByPredicate(prdct); //Imdg finalExecImdg = execImdg; execs.forEach(e -> { From 485b269dcfcb5dfbe8bc42d7f616c4afb5b63de9 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Mon, 23 Jun 2025 18:21:10 +0300 Subject: [PATCH 12/24] =?UTF-8?q?=D0=B3=D1=80=D1=83=D0=BF=D0=BF=D0=B8?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=BA=D0=B0=20registry=20=D1=81=20=D1=83?= =?UTF-8?q?=D1=87=D0=B5=D1=82=D0=BE=D0=BC=20market=20=D0=B8=20groupId=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D1=88=D0=B0=D0=B3=D0=B0=203=20=D0=B0?= =?UTF-8?q?=D0=BA=D1=82=D0=B8=D0=B2=D0=BD=D0=BE=D0=B9=20=D1=81=D0=B5=D1=81?= =?UTF-8?q?=D1=81=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../clearing/session/stage/impl/ObligationAdmission.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/ObligationAdmission.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/ObligationAdmission.java index a422134d6..9d403bd3c 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/ObligationAdmission.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/ObligationAdmission.java @@ -18,6 +18,7 @@ import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.company.relation.Relation; import ru.clearing.classes.statics.data.registry.Registry; import ru.clearing.classes.statics.data.registry.TradingClearingRegistry; +import ru.spcex.clearing.component.GroupRgsKey; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.service.validation.admission.AccountActiveValidationRule; import ru.spcex.clearing.service.validation.admission.ClearingAvailableValidationRule; @@ -76,10 +77,11 @@ public class ObligationAdmission implements ISessionStage { private StageResult obligationAdmission(Long sessionId) { Collection registries = registryImdg.getCollectionObjectsBySQL("sessionId = " + sessionId); - Map> byGroups = registries.stream().collect(Collectors.groupingBy(Registry::getGroupId)); + Map> byGroups = registries.stream() + .collect(Collectors.groupingBy(registry -> new GroupRgsKey(registry.getGroupId(), registry.getMarket()))); log.info("found {} ({} groups) registries with sessionId {}", registries.size(), byGroups.size(), sessionId); Map rgsToUpdate = new HashMap<>(); - for (Map.Entry> grpEntry : byGroups.entrySet()) { + for (Map.Entry> grpEntry : byGroups.entrySet()) { EnumMessage groupError = null; List rgsGroup = grpEntry.getValue(); for (Registry rgs : rgsGroup) { @@ -91,7 +93,8 @@ public class ObligationAdmission implements ISessionStage { } } if (groupError != null) { - log.warn("error {} for registries groupId = {}", messageResolver.resolve(groupError), grpEntry.getKey()); + log.warn("error {} for registries groupId/market = {}/{}", messageResolver.resolve(groupError), + grpEntry.getKey().groupId(), grpEntry.getKey().market()); for (Registry rgs : rgsGroup) { rgs.setRegistryStatus(RegistryStatus.NACK.getKey()); rgsToUpdate.put(rgs.getId(), rgs); From 8b21e7aec2bc4909efae82be74cd322a8b126b44 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Mon, 23 Jun 2025 18:38:46 +0300 Subject: [PATCH 13/24] =?UTF-8?q?=D0=B3=D1=80=D1=83=D0=BF=D0=BF=D0=B8?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=BA=D0=B0=20registry=20=D1=81=20=D1=83?= =?UTF-8?q?=D1=87=D0=B5=D1=82=D0=BE=D0=BC=20market=20=D0=B8=20groupId=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D1=88=D0=B0=D0=B3=D0=B0=205=20=D0=B0?= =?UTF-8?q?=D0=BA=D1=82=D0=B8=D0=B2=D0=BD=D0=BE=D0=B9=20=D1=81=D0=B5=D1=81?= =?UTF-8?q?=D1=81=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../component/GroupRgsKeyComparator.java | 13 +++++++++++ .../InspectionObligationsDepositReturn.java | 23 +++++++++++-------- 2 files changed, 27 insertions(+), 9 deletions(-) create mode 100644 clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/component/GroupRgsKeyComparator.java diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/component/GroupRgsKeyComparator.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/component/GroupRgsKeyComparator.java new file mode 100644 index 000000000..8ead41a8a --- /dev/null +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/component/GroupRgsKeyComparator.java @@ -0,0 +1,13 @@ +package ru.spcex.clearing.component; + +import java.util.Comparator; +import java.util.List; +import java.util.Map; +import ru.clearing.classes.statics.data.registry.Registry; + +public class GroupRgsKeyComparator implements Comparator>> { + @Override + public int compare(Map.Entry> o1, Map.Entry> o2) { + return o1.getKey().groupId().compareTo(o2.getKey().groupId()); + } +} diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InspectionObligationsDepositReturn.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InspectionObligationsDepositReturn.java index 511a7400c..5a3987adc 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InspectionObligationsDepositReturn.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InspectionObligationsDepositReturn.java @@ -15,6 +15,8 @@ import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Service; import ru.clearing.classes.statics.data.company.ClearingMemberCategory; import ru.clearing.classes.statics.data.registry.Registry; +import ru.spcex.clearing.component.GroupRgsKey; +import ru.spcex.clearing.component.GroupRgsKeyComparator; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.service.AssetTrio; import ru.spcex.clearing.service.integration.GatewayRequestCreator; @@ -53,6 +55,7 @@ public class InspectionObligationsDepositReturn implements ISessionStage { private final TradingTimeService tradingTimeService; private final GatewayRequester gateway; private final PlanBalanceCalc planBalanceCalc; + private static final GroupRgsKeyComparator groupRgsKeyComparator = new GroupRgsKeyComparator(); @Autowired public InspectionObligationsDepositReturn(ImdgProvider imdgProvider, RegistryManager rgsMng, AssetTBFProcessing assets, TradingTimeService tradingTimeService, GatewayRequester gateway, PlanBalanceCalc planBalanceCalc) { @@ -97,27 +100,27 @@ public class InspectionObligationsDepositReturn implements ISessionStage { RegistryCodeSqlBuilder.getInstance(OS_T, OM_T, TS_T, TM_T).build(), RegistryStatus.POOL.getKey()); - List>> registriesByGroupSorted = registryImdg.getCollectionObjectsBySQL(sqlCondition) + List>> registriesByGroupSorted = registryImdg.getCollectionObjectsBySQL(sqlCondition) .stream() - .collect(Collectors.groupingBy(Registry::getGroupId)) + .collect(Collectors.groupingBy(registry -> new GroupRgsKey(registry.getGroupId(), registry.getMarket()))) .entrySet() .stream() - .sorted(Map.Entry.comparingByKey()) + .sorted(groupRgsKeyComparator) .toList(); log.info("registry groups found {}", registriesByGroupSorted.size()); - for (Map.Entry> entry : registriesByGroupSorted) { + for (Map.Entry> entry : registriesByGroupSorted) { List group = entry.getValue(); Optional omtInGroupO = group.stream().filter(registry -> equalByRgs(OM_T, registry)).findFirst(); Optional tmtInGroupO = group.stream().filter(registry -> equalByRgs(TM_T, registry)).findFirst(); if (omtInGroupO.isEmpty() || tmtInGroupO.isEmpty()) { - log.error("groupId {} failed to find OM*T/TM*T registry", entry.getKey()); + log.error("groupId/market {}/{} failed to find OM*T/TM*T registry", entry.getKey().groupId(), entry.getKey().market()); group.forEach(rgs -> updateStatus(rgs, registryStatusFailed())); // FAIL or MNG continue; } Registry omtRgs = omtInGroupO.get(); Registry tmtRgs = tmtInGroupO.get(); - log.debug("groupId={}, OM*T.id={}", entry.getKey(), omtRgs.getId()); + log.debug("groupId={}, market={}, OM*T.id={}", entry.getKey().groupId(), entry.getKey().market(), omtRgs.getId()); BigDecimal omtBalance = safeBD(omtRgs.getBalance()); //первая часть сделки депозита @@ -150,18 +153,20 @@ public class InspectionObligationsDepositReturn implements ISessionStage { Optional amfAssetO = searchAssetByOMT(omtRgs); Optional amfAssetReceiverO = searchAssetByOMT(tmtRgs); if (amfAssetO.isEmpty()) { - log.error("OM*T register.id={} groupId={} failed to find AM*F asset", omtRgs.getId(), entry.getKey()); + log.error("OM*T register.id={} groupId={}, market={} failed to find AM*F asset", omtRgs.getId(), + entry.getKey().groupId(), entry.getKey().market()); group.forEach(rgs -> updateStatus(rgs, registryStatusFailed())); // FAIL or MNG continue; } if (amfAssetReceiverO.isEmpty()) { - log.error("TM*T register.id={} groupId={} failed to find AM*F asset", tmtRgs.getId(), entry.getKey()); + log.error("TM*T register.id={} groupId={}, market={} failed to find AM*F asset", tmtRgs.getId(), + entry.getKey().groupId(), entry.getKey().market()); group.forEach(rgs -> updateStatus(rgs, registryStatusFailed())); // FAIL or MNG continue; } Registry amfAsset = amfAssetO.get(); - log.debug("groupId={}, AM*F.id={}", entry.getKey(), amfAsset.getId()); + log.debug("groupId={}, market={}, AM*F.id={}", entry.getKey().groupId(), entry.getKey().market(), amfAsset.getId()); BigDecimal amfBalance = safeBD(amfAsset.getBalance()); BiConsumer processAssetsAndSetSessionId = (amf, amount) -> { Optional asts = assets.processByAm_f(amf, amount); From aa38fa986a3dc87c21ed45847351bfb355bbf202 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Tue, 24 Jun 2025 09:58:32 +0300 Subject: [PATCH 14/24] =?UTF-8?q?=D0=B3=D1=80=D1=83=D0=BF=D0=BF=D0=B8?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=BA=D0=B0=20registry=20=D1=81=20=D1=83?= =?UTF-8?q?=D1=87=D0=B5=D1=82=D0=BE=D0=BC=20market=20=D0=B8=20groupId=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D1=88=D0=B0=D0=B3=D0=B0=207=20=D0=B0?= =?UTF-8?q?=D0=BA=D1=82=D0=B8=D0=B2=D0=BD=D0=BE=D0=B9=20=D1=81=D0=B5=D1=81?= =?UTF-8?q?=D1=81=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/FormingPaymentInstructionDepositReturn.java | 9 +++++---- .../stage/impl/FormingPaymentInstructionReturnMkr.java | 9 +++++---- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstructionDepositReturn.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstructionDepositReturn.java index 2ac818e3f..d5f1efbcb 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstructionDepositReturn.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstructionDepositReturn.java @@ -23,6 +23,7 @@ import ru.clearing.classes.statics.data.registry.Registry; import ru.clearing.classes.statics.data.sdf.SDf03; import ru.clearing.classes.statics.data.sdf.SDf12; import ru.clearing.classes.statics.data.security.Security; +import ru.spcex.clearing.component.GroupRgsKey; import ru.spcex.clearing.error.ClearingError; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.platform.messaging.domain.Consts; @@ -126,18 +127,18 @@ public class FormingPaymentInstructionDepositReturn implements ISessionStage { .filter(rgs -> rgs.getSettlementDate().isAfter(rgs.getValueDate())) .toList(); - Map> registriesByGroup = obligations + Map> registriesByGroup = obligations .stream(). - collect(Collectors.groupingBy(Registry::getGroupId)); + collect(Collectors.groupingBy(registry -> new GroupRgsKey(registry.getGroupId(), registry.getMarket()))); log.info("registry groups found {}", registriesByGroup.size()); ArrayList pmtCreated = new ArrayList<>(); - for (Map.Entry> entry : registriesByGroup.entrySet()) { + for (Map.Entry> entry : registriesByGroup.entrySet()) { List groupRgs = entry.getValue(); Optional lmtO = groupRgs.stream().filter(rgs -> RegistryManager.equalsByCode(RegistryTradingParams.OM_T, rgs)).findFirst(); Optional cmtO = groupRgs.stream().filter(rgs -> RegistryManager.equalsByCode(RegistryTradingParams.TM_T, rgs)).findFirst(); if (lmtO.isEmpty() || cmtO.isEmpty()) { - log.error("groupId {} LM*T or CM*T not found", entry.getKey()); + log.error("groupId/market {}/{} LM*T or CM*T not found", entry.getKey().groupId(), entry.getKey().market()); continue; } Registry lm_t = lmtO.get(); //obligation by money diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstructionReturnMkr.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstructionReturnMkr.java index 30d788d3c..66bf7c968 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstructionReturnMkr.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FormingPaymentInstructionReturnMkr.java @@ -23,6 +23,7 @@ import ru.clearing.classes.statics.data.registry.Registry; import ru.clearing.classes.statics.data.sdf.SDf03; import ru.clearing.classes.statics.data.sdf.SDf12; import ru.clearing.classes.statics.data.security.Security; +import ru.spcex.clearing.component.GroupRgsKey; import ru.spcex.clearing.error.ClearingError; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.platform.messaging.domain.Consts; @@ -151,16 +152,16 @@ public class FormingPaymentInstructionReturnMkr implements ISessionStage { List pmtCreated = new ArrayList<>(); - Map> registriesByGroup = rgsAll + Map> registriesByGroup = rgsAll .stream(). - collect(Collectors.groupingBy(Registry::getGroupId)); + collect(Collectors.groupingBy(registry -> new GroupRgsKey(registry.getGroupId(), registry.getMarket()))); log.info("registry groups found {}", registriesByGroup.size()); - for (Map.Entry> entry : registriesByGroup.entrySet()) { + for (Map.Entry> entry : registriesByGroup.entrySet()) { List groupRgs = entry.getValue(); Optional lmtO = groupRgs.stream().filter(rgs -> equalByRgs(RegistryTradingParams.OM_T, rgs)).findFirst(); Optional cmtO = groupRgs.stream().filter(rgs -> equalByRgs(RegistryTradingParams.TM_T, rgs)).findFirst(); if (lmtO.isEmpty() || cmtO.isEmpty()) { - log.error("LM*T or CM*T not found for group {}", entry.getKey()); + log.error("LM*T or CM*T not found for group/market {}/{}", entry.getKey().groupId(), entry.getKey().market()); continue; } Registry lm_t = lmtO.get(); //obligation by money From 1bb489e3cba8246cfc4d3ee34b3b6c4d96f02558 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Tue, 24 Jun 2025 10:25:25 +0300 Subject: [PATCH 15/24] =?UTF-8?q?=D0=B3=D1=80=D1=83=D0=BF=D0=BF=D0=B8?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=BA=D0=B0=20registry=20=D1=81=20=D1=83?= =?UTF-8?q?=D1=87=D0=B5=D1=82=D0=BE=D0=BC=20market=20=D0=B8=20groupId=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D1=88=D0=B0=D0=B3=D0=B0=2010=20=D0=B0?= =?UTF-8?q?=D0=BA=D1=82=D0=B8=D0=B2=D0=BD=D0=BE=D0=B9=20=D1=81=D0=B5=D1=81?= =?UTF-8?q?=D1=81=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../session/stage/impl/FinishingSession.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FinishingSession.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FinishingSession.java index b5a04a1d2..7a44aa357 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FinishingSession.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FinishingSession.java @@ -24,6 +24,7 @@ import ru.clearing.classes.statics.data.execution.ExecutionFond; import ru.clearing.classes.statics.data.misc.Session; import ru.clearing.classes.statics.data.registry.Registry; import ru.clearing.classes.statics.data.sdf.SDf05; +import ru.spcex.clearing.component.GroupRgsKey; import static ru.spcex.clearing.error.ClearingErrorInternal.SessionGeneralError; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.platform.messaging.domain.Consts; @@ -135,12 +136,13 @@ public class FinishingSession implements ISessionStage { log.error("Session id={} not found. Can not update Execution's.", sessionId); } else { Collection oRegs = findORegistryBySessionId(allLiabilitiesAndOKClaims); - Map obligationStatusByGroupId; + Map obligationStatusByGroupId; obligationStatusByGroupId = oRegs.stream() - .map(rgs -> new Pair<>(rgs.getGroupId(), getEnumByKey(RegistryStatus.class, rgs.getRegistryStatus()))) + .map(rgs -> new Pair<>(new GroupRgsKey(rgs.getGroupId(), rgs.getMarket()), + getEnumByKey(RegistryStatus.class, rgs.getRegistryStatus()))) .filter(pair -> pair.getSecond() != null) .collect(Collectors.toMap(Pair::getFirst, Pair::getSecond, (o1, o2) -> o1)); - Function statusByExchangeId = id-> { + Function statusByExchangeId = id-> { RegistryStatus obligationStatus = obligationStatusByGroupId.get(id); if (obligationStatus == null) return null; return switch (obligationStatus) { @@ -164,7 +166,8 @@ public class FinishingSession implements ISessionStage { Collection executions = findExecutionDepositBySessionId(sessionId); log.trace("loaded {} ExecutionDeposits for sessionId {}", executions.size(), sessionId); for (ExecutionDeposit execution : executions) { - CoverageStatus toStatus = statusByExchangeId.apply(execution.getExchangeExecutionId()); + CoverageStatus toStatus = statusByExchangeId.apply( + new GroupRgsKey(execution.getExchangeExecutionId(), execution.getMarket())); if (toStatus == null) { log.trace("CoverageStatus not defined for execution.id={}", execution.getId()); continue; @@ -194,7 +197,8 @@ public class FinishingSession implements ISessionStage { Map execFond = new HashMap<>(); log.trace("loaded {} Executions for sessionId {}", executions.size(), sessionId); for (ExecutionCommon execution : executions) { - CoverageStatus toStatus = statusByExchangeId.apply(execution.getExchangeExecutionId()); + CoverageStatus toStatus = statusByExchangeId.apply( + new GroupRgsKey(execution.getExchangeExecutionId(), execution.getMarket())); if (toStatus == null) { log.trace("CoverageStatus not defined for execution.id={}", execution.getId()); continue; From 1110278d6a9a922bedcf53602749d7c9993139c4 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Tue, 24 Jun 2025 10:43:55 +0300 Subject: [PATCH 16/24] =?UTF-8?q?=D0=B3=D1=80=D1=83=D0=BF=D0=BF=D0=B8?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=BA=D0=B0=20registry=20=D1=81=20=D1=83?= =?UTF-8?q?=D1=87=D0=B5=D1=82=D0=BE=D0=BC=20market=20=D0=B8=20groupId=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D1=88=D0=B0=D0=B3=D0=B0=207=20=D0=B0?= =?UTF-8?q?=D0=BA=D1=82=D0=B8=D0=B2=D0=BD=D0=BE=D0=B9=20=D1=81=D0=B5=D1=81?= =?UTF-8?q?=D1=81=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../registry/PaymentStateMarkService.java | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/registry/PaymentStateMarkService.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/registry/PaymentStateMarkService.java index 9aaf4694f..375738de0 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/registry/PaymentStateMarkService.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/registry/PaymentStateMarkService.java @@ -14,6 +14,7 @@ import org.springframework.stereotype.Component; import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.company.CompanyRoleSet; import ru.clearing.classes.statics.data.registry.Registry; +import ru.spcex.clearing.component.GroupRgsKey; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.service.AssetTrio; import ru.spcex.clearing.session.stage.util.RegistryUtil; @@ -56,15 +57,16 @@ public class PaymentStateMarkService { pb.equals("registryStatus", RegistryStatus.OK.getKey()) ); Collection claimsAndLiabilities = rgsImdg.getCollectionObjectsByPredicate(prdct); - Map> groups = claimsAndLiabilities + Map> groups = claimsAndLiabilities .stream() .filter(rgs -> rgs.getValueDate() != null) .filter(rgs -> rgs.getSettlementDate() != null) .filter(rgs -> rgs.getSettlementDate().equals(rgs.getValueDate())) - .collect(Collectors.groupingBy(Registry::getGroupId)); + .collect(Collectors.groupingBy(registry -> new GroupRgsKey(registry.getGroupId(), registry.getMarket()))); log.debug("found {} ({} groups) CM*T/LM*T by {}", claimsAndLiabilities.size(), groups.size(), prdct.toString()); - for (Map.Entry> group : groups.entrySet()) { - Long groupId = group.getKey(); + for (Map.Entry> group : groups.entrySet()) { + Long groupId = group.getKey().groupId(); + String market = group.getKey().market(); Function findRgs = (rd) -> group.getValue() .stream() .filter(rgs -> rd.equalsByKey(rgs.getRegistryDesignation())) @@ -73,7 +75,7 @@ public class PaymentStateMarkService { Registry cm_t = findRgs.apply(RegistryDesignation.T); Registry lm_t = findRgs.apply(RegistryDesignation.O); if (cm_t == null || lm_t == null) { - log.warn("groupId {}, coudn't find CM*T or LM*T", groupId); + log.warn("groupId/market {}/{}, coudn't find CM*T or LM*T", groupId, market); continue; } CompanyRoleSet initRole = cmpRoleImdg.getFirstObjectBySQL( @@ -84,7 +86,8 @@ public class PaymentStateMarkService { ) ); if (initRole == null) { - log.debug("groupId {}, initiator (lm*t.id={}) does not have ODEP role", groupId, lm_t.getId()); + log.debug("groupId/market {}/{}, initiator (lm*t.id={}) does not have ODEP role", groupId, + market, lm_t.getId()); continue; } Registry dm_v = cm_t.clone(); @@ -95,8 +98,8 @@ public class PaymentStateMarkService { dm_v.setBalance(cm_t.getBalance()); dm_v.setRegistryStatus(RegistryStatus.PROC.getKey()); rgsImdg.insert(dm_v); - log.debug("groupId {}, lm*t.id={}, cm*t.id={} created dm*v.id={}", - groupId, lm_t.getId(), cm_t.getId(), dm_v.getId()); + log.debug("groupId/market {}/{}, lm*t.id={}, cm*t.id={} created dm*v.id={}", + groupId, market, lm_t.getId(), cm_t.getId(), dm_v.getId()); Optional assetsFound = assets.searchMoneyByAccAndCompany(cm_t.getCompanyId(), cm_t.getAccountId()); assetsFound.ifPresent(assetTrio -> assets.process(assetTrio.a__b(), assetTrio.a__t(), assetTrio.a__f(), BigDecimal.ZERO)); From 4efb263362dd92cfc7b8be28b280eeede7e38b78 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Tue, 24 Jun 2025 10:55:08 +0300 Subject: [PATCH 17/24] =?UTF-8?q?=D0=B3=D1=80=D1=83=D0=BF=D0=BF=D0=B8?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=BA=D0=B0=20registry=20=D1=81=20=D1=83?= =?UTF-8?q?=D1=87=D0=B5=D1=82=D0=BE=D0=BC=20market=20=D0=B8=20groupId=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D1=88=D0=B0=D0=B3=D0=B0=2011=20=D0=B0?= =?UTF-8?q?=D0=BA=D1=82=D0=B8=D0=B2=D0=BD=D0=BE=D0=B9=20=D1=81=D0=B5=D1=81?= =?UTF-8?q?=D1=81=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../stage/impl/EndStageNotification.java | 29 +++++++++---------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/EndStageNotification.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/EndStageNotification.java index 8a27ff254..9766e1b64 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/EndStageNotification.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/EndStageNotification.java @@ -1,5 +1,8 @@ package ru.spcex.clearing.session.stage.impl; +import java.time.Instant; +import java.util.Collection; +import java.util.stream.Collectors; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -8,6 +11,8 @@ import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Service; import ru.clearing.classes.statics.data.misc.Session; import ru.clearing.classes.statics.data.registry.Registry; +import ru.spcex.clearing.component.GroupRgsKey; +import static ru.spcex.clearing.error.ClearingErrorInternal.SessionGeneralError; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.platform.messaging.domain.Consts; import ru.spcex.clearing.platform.messaging.domain.cud.clearing.SdfClearingRequest; @@ -24,13 +29,6 @@ import ru.spcex.platform.imdg.api.ImdgProvider; import ru.spcex.platform.utils.enumeration.EnumMessage; import ru.spcex.platform.utils.enumeration.IMessageResolver; -import java.time.Instant; -import java.util.Collection; -import java.util.Objects; -import java.util.stream.Collectors; - -import static ru.spcex.clearing.error.ClearingErrorInternal.SessionGeneralError; - @Service @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) public class EndStageNotification implements ISessionStage { @@ -83,25 +81,24 @@ public class EndStageNotification implements ISessionStage { } Collection forRegistries = selectRegistry(); - Collection groups = forRegistries.stream() - .map(Registry::getGroupId) - .filter(Objects::nonNull) + Collection groups = forRegistries.stream() + .map(registry -> new GroupRgsKey(registry.getGroupId(), registry.getMarket())) .distinct().collect(Collectors.toList()); log.debug("Sending notifications for {} groups ({} registers) on section {}", groups, forRegistries.size(), section); - for (Long groupId : groups) { - log.trace("For registry group {} send notification", - groupId); + for (GroupRgsKey groupKey : groups) { + log.trace("For registry group/market {}/{} send notification", + groupKey.groupId(), groupKey.market()); StageResult sResult; if (Section.FOND.equalsByKey(section)) { - sResult = notificationDF14(groupId); + sResult = notificationDF14(groupKey.groupId()); } else if (Section.MKR.equalsByKey(section)) { - sResult = notificationDF05(groupId); + sResult = notificationDF05(groupKey.groupId()); } else { throw new IllegalArgumentException("Unsupported section " + section); } if (sResult.getError() != null) { - log.warn("When sending groupId={} has error: {}", groupId, msgResolver.resolve(sResult.getError())); + log.warn("When sending groupId={} has error: {}", groupKey, msgResolver.resolve(sResult.getError())); } } StageResult> res = new StageResult<>(null, true); From c6b644d1180579217ff8c924f95162fc1d823250 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Tue, 24 Jun 2025 11:13:07 +0300 Subject: [PATCH 18/24] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D1=83=D1=81=D0=BB=D0=BE=D0=B2=D0=B8=D0=B5=20=D0=BD?= =?UTF-8?q?=D0=B0=20market=20=D0=BD=D0=B0=20=D0=B2=D1=8B=D0=B1=D0=BE=D1=80?= =?UTF-8?q?=D0=BA=D1=83=20=D1=80=D0=B5=D0=B3=D0=B8=D1=81=D1=82=D1=80=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../session/stage/impl/InspectionObligations.java | 14 ++++++++++---- .../stage/impl/InspectionObligationsV2.java | 15 ++++++++++----- .../impl/RequirementsAndObligationCreation.java | 12 ++++++++---- 3 files changed, 28 insertions(+), 13 deletions(-) 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 index f4b1d26a2..88b5953fc 100644 --- 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 @@ -17,7 +17,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; import ru.clearing.classes.statics.data.registry.Registry; +import ru.spcex.clearing.component.GroupRgsKey; import ru.spcex.clearing.error.ClearingError; import ru.spcex.clearing.error.RgsError; import ru.spcex.clearing.imdg.IMDGDistributedNames; @@ -348,8 +350,8 @@ public class InspectionObligations implements ISessionStage { private Collection getRefundDateRgsIfPresent(List registries) { if (registries.stream().anyMatch(rgs -> rgs.getRefundDate() != null) && !SessionType.MEDM.equals(sessionType)) { - Optional> groupIdAndSettleDate = registries.stream() - .map(rgs -> new Pair<>(rgs.getGroupId(), rgs.getSettlementDate())) + Optional> groupIdAndSettleDate = registries.stream() + .map(rgs -> new Pair<>(new GroupRgsKey(rgs.getGroupId(),rgs.getMarket()), rgs.getSettlementDate())) .filter(pair -> pair.getFirst() != null) .filter(pair -> pair.getSecond() != null) .findFirst(); @@ -359,8 +361,12 @@ public class InspectionObligations implements ISessionStage { ImdgPredicateBuilder pb = registryImdg.predicateBuilder(); return registryImdg.getCollectionObjectsByPredicate( pb.and( - pb.equals("groupId", groupIdAndSettleDate.get().getFirst()), - pb.not(pb.equals("settlementDate", groupIdAndSettleDate.get().getSecond())) + pb.and( + pb.equals("groupId", groupIdAndSettleDate.get().getFirst().groupId()), + StringUtils.hasText(groupIdAndSettleDate.get().getFirst().market()) ? + pb.equals("market", groupIdAndSettleDate.get().getFirst().market()) : pb.alwaysTrue() + ), + pb.not(pb.equals("settlementDate", groupIdAndSettleDate.get().getSecond())) ) ); } else return Collections.emptyList(); diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InspectionObligationsV2.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InspectionObligationsV2.java index 34fc51e3b..73ba32bb0 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InspectionObligationsV2.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InspectionObligationsV2.java @@ -18,6 +18,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; import ru.clearing.classes.statics.data.registry.Registry; import ru.spcex.clearing.component.GroupRgsKey; import ru.spcex.clearing.component.predicate.cash.registry.AssetByTcrCompanyAccountCashedPredicate; @@ -347,8 +348,8 @@ public class InspectionObligationsV2 implements ISessionStage { private Collection getRefundDateRgsIfPresent(List registries) { if (registries.stream().anyMatch(rgs -> rgs.getRefundDate() != null) && !SessionType.MEDM.equals(sessionType)) { //доп группировка по market не нужна, лист registries уже сгруппирован - Optional> groupIdAndSettleDate = registries.stream() - .map(rgs -> new Pair<>(rgs.getGroupId(), rgs.getSettlementDate())) + Optional> groupIdAndSettleDate = registries.stream() + .map(rgs -> new Pair<>(new GroupRgsKey(rgs.getGroupId(),rgs.getMarket()), rgs.getSettlementDate())) .filter(pair -> pair.getFirst() != null) .filter(pair -> pair.getSecond() != null) .findFirst(); @@ -357,10 +358,14 @@ public class InspectionObligationsV2 implements ISessionStage { } ImdgPredicateBuilder pb = registryImdg.predicateBuilder(); return registryImdg.getCollectionObjectsByPredicate( + pb.and( pb.and( - pb.equals("groupId", groupIdAndSettleDate.get().getFirst()), - pb.not(pb.equals("settlementDate", groupIdAndSettleDate.get().getSecond())) - ) + pb.equals("groupId", groupIdAndSettleDate.get().getFirst().groupId()), + StringUtils.hasText(groupIdAndSettleDate.get().getFirst().market()) ? + pb.equals("market", groupIdAndSettleDate.get().getFirst().market()) : pb.alwaysTrue() + ), + pb.not(pb.equals("settlementDate", groupIdAndSettleDate.get().getSecond())) + ) ); } else return Collections.emptyList(); } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RequirementsAndObligationCreation.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RequirementsAndObligationCreation.java index 2aa2cd40f..48bd186c6 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RequirementsAndObligationCreation.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RequirementsAndObligationCreation.java @@ -15,6 +15,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; import ru.clearing.classes.statics.data.account.Account; import ru.clearing.classes.statics.data.account.ClearingAccount; import ru.clearing.classes.statics.data.account.DepoAccount; @@ -363,7 +364,8 @@ public class RequirementsAndObligationCreation implements ISessionStage { exec.getCompanyId(), settlementDt(exec), exec.getSessionId(), - exec.getExchangeExecutionId() + exec.getExchangeExecutionId(), + exec.getMarket() ); } @@ -396,11 +398,12 @@ public class RequirementsAndObligationCreation implements ISessionStage { exec.getCompanyId(), ((ExecutionDeposit) exec).getSecondLegSettlementDate(), exec.getSessionId(), - exec.getExchangeExecutionId()); + exec.getExchangeExecutionId(), + exec.getMarket()); } public Optional imdgRegSearch(RegistryTradingParams p, Long tcrId, Long companyId, LocalDate settlementDt, - Long sessionId, Long exchangeExecutionId) { + Long sessionId, Long exchangeExecutionId, String market) { String sql = RegistryCodeSqlBuilder.getInstance(p).build(); ImdgPredicateBuilder pb = registryImdg.predicateBuilder(); ImdgPredicate rgstrPredicate = pb.and(pb.sql(sql), @@ -408,7 +411,8 @@ public class RequirementsAndObligationCreation implements ISessionStage { pb.equals("companyId", companyId), pb.equals("settlementDate", settlementDt), pb.equals("sessionId", sessionId), - pb.equals("groupId", exchangeExecutionId) + pb.equals("groupId", exchangeExecutionId), + StringUtils.hasText(market) ? pb.equals("market", market) : pb.alwaysTrue() ); Registry rgs = registryImdg.getSingleObjectByPredicate(rgstrPredicate); log.trace("rgs.id={} found by: {}", rgs == null ? "'not found'" : rgs.getId(), rgstrPredicate.toString()); From 7ba559ad407623757f1e28f529637d9e840faa80 Mon Sep 17 00:00:00 2001 From: ialbert Date: Tue, 24 Jun 2025 14:07:56 +0300 Subject: [PATCH 19/24] http://jira.mfd.msk:8088/browse/CLS-872 --- .../session/stage/impl/InspectionObligationsV2.java | 6 ++++-- .../stage/impl/RequirementsAndObligationCreation.java | 3 +-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InspectionObligationsV2.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InspectionObligationsV2.java index 73ba32bb0..8b8cd6446 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InspectionObligationsV2.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InspectionObligationsV2.java @@ -357,12 +357,14 @@ public class InspectionObligationsV2 implements ISessionStage { return Collections.emptyList(); } ImdgPredicateBuilder pb = registryImdg.predicateBuilder(); + String groupMarket = groupIdAndSettleDate.get().getFirst().market(); + ImdgPredicate marketCondition = StringUtils.hasText(groupMarket) ? + pb.or(pb.equals("market", groupMarket), pb.isNull("market")) : pb.alwaysTrue(); return registryImdg.getCollectionObjectsByPredicate( pb.and( pb.and( pb.equals("groupId", groupIdAndSettleDate.get().getFirst().groupId()), - StringUtils.hasText(groupIdAndSettleDate.get().getFirst().market()) ? - pb.equals("market", groupIdAndSettleDate.get().getFirst().market()) : pb.alwaysTrue() + marketCondition ), pb.not(pb.equals("settlementDate", groupIdAndSettleDate.get().getSecond())) ) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RequirementsAndObligationCreation.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RequirementsAndObligationCreation.java index 48bd186c6..47e72b956 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RequirementsAndObligationCreation.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RequirementsAndObligationCreation.java @@ -15,7 +15,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Service; -import org.springframework.util.StringUtils; import ru.clearing.classes.statics.data.account.Account; import ru.clearing.classes.statics.data.account.ClearingAccount; import ru.clearing.classes.statics.data.account.DepoAccount; @@ -412,7 +411,7 @@ public class RequirementsAndObligationCreation implements ISessionStage { pb.equals("settlementDate", settlementDt), pb.equals("sessionId", sessionId), pb.equals("groupId", exchangeExecutionId), - StringUtils.hasText(market) ? pb.equals("market", market) : pb.alwaysTrue() + pb.or(pb.equals("market", market), pb.isNull("market")) ); Registry rgs = registryImdg.getSingleObjectByPredicate(rgstrPredicate); log.trace("rgs.id={} found by: {}", rgs == null ? "'not found'" : rgs.getId(), rgstrPredicate.toString()); From 25290484851a656d9eb4d2ea546a96ec6f4cb3cb Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Tue, 24 Jun 2025 15:03:27 +0300 Subject: [PATCH 20/24] http://jira.mfd.msk:8088/browse/CLS-871 --- .../cud/registry/ChangeRefundDateActionNew.java | 11 +++++++++++ .../request/cud/registry/ReturnDepositActionNew.java | 11 +++++++++++ .../cud/registry/RegistryChangeRefundDateRequest.java | 10 ++++++++++ .../cud/registry/RegistryReturnDepositRequest.java | 10 ++++++++++ 4 files changed, 42 insertions(+) diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/registry/ChangeRefundDateActionNew.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/registry/ChangeRefundDateActionNew.java index 76856dd5f..cd8447aaa 100644 --- a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/registry/ChangeRefundDateActionNew.java +++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/registry/ChangeRefundDateActionNew.java @@ -26,12 +26,15 @@ public class ChangeRefundDateActionNew implements IAction Date: Tue, 24 Jun 2025 15:09:55 +0300 Subject: [PATCH 21/24] http://jira.mfd.msk:8088/browse/CLS-871 --- .../cud/registry/RSplitDepositActionNew.java | 23 +++++++++++-------- .../RegistrySplitDepositActionRequest.java | 10 ++++++++ 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/registry/RSplitDepositActionNew.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/registry/RSplitDepositActionNew.java index 62ec95e7b..85b42e29e 100644 --- a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/registry/RSplitDepositActionNew.java +++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/registry/RSplitDepositActionNew.java @@ -4,21 +4,13 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import io.swagger.annotations.ApiModelProperty; -import org.apache.commons.lang3.StringUtils; +import java.math.BigDecimal; +import java.time.LocalDate; import ru.spcex.clearing.backendapi.domain.actions.IAction; -import ru.spcex.clearing.backendapi.errors.BackEndError; import ru.spcex.clearing.platform.messaging.domain.ActionType; import ru.spcex.clearing.platform.messaging.domain.cud.registry.RegistrySplitDepositActionRequest; import ru.spcex.clearing.platform.messaging.domain.json.deserialize.LocalDateDeserializer; import ru.spcex.clearing.platform.messaging.domain.json.serialize.LocalDateSerializer; -import ru.spcex.platform.utils.enumeration.EnumMessage; - -import java.math.BigDecimal; -import java.time.LocalDate; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.List; public class RSplitDepositActionNew implements IAction { @@ -39,6 +31,8 @@ public class RSplitDepositActionNew implements IAction Date: Tue, 24 Jun 2025 15:21:56 +0300 Subject: [PATCH 22/24] http://jira.mfd.msk:8088/browse/CLS-871 --- .../src/main/resources/meta/meta.json | 18 +++++++++++++++--- .../src/main/resources/meta/meta.xml | 9 ++++++--- 2 files changed, 21 insertions(+), 6 deletions(-) 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 30ef4eadd..a0e25f8de 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.18.242.132", + "version": "3.18.244.133", "enums": { @@ -4597,6 +4597,10 @@ {"code": "section", "type": 12,"dbname": "Код секции","name": "Наименование секции","shortname": "Секция","searchable": true,"sortable": true,"visible": true,"link": "section" } + , + {"code": "market", + "type": 2,"length": 8,"dbname": "Код класса инструмента","name": "Код класса","shortname": "Код","visible": false,"searchable": true,"sortable": true + } ] ,"actions":[ {"method":"post", @@ -4652,6 +4656,10 @@ {"code": "balance", "type": 10,"name": "Сумма","shortname": "Сумма","required": true } + , + {"code": "market", + "type": 2,"length": 8,"name": "Код класса","shortname": "Код","visible": false + } ] } , @@ -4710,6 +4718,10 @@ {"code": "refundDate", "type": 6,"name": "Дата возврата депозита","shortname": "Возврат депозита","visible": true,"enabled": true } + , + {"code": "market", + "type": 2,"length": 8,"name": "Код класса","shortname": "Код","visible": false + } ] } , @@ -6714,7 +6726,7 @@ } , {"code": "exchangeExecutionMicroseconds", - "type": 4,"name": "Микросекунды заключения сделки в Торговой системе","shortname": "Микросекунды заключения сделки","visible": true,"searchable": true,"sortable": true + "type": 4,"name": "Микросекунды заключения сделки в Торговой системе","shortname": "Микросекунды заключения сделки","visible": true,"searchable": true,"sortable": true,"ignore": true } , {"code": "coverageStatus", @@ -6750,7 +6762,7 @@ } , {"code": "exchangeExecutionMicroseconds", - "type": 4,"name": "Микросекунды заключения сделки в Торговой системе","shortname": "Микросекунды заключения сделки","visible": true,"searchable": true,"sortable": true + "type": 4,"name": "Микросекунды заключения сделки в Торговой системе","shortname": "Микросекунды заключения сделки","visible": true,"searchable": true,"sortable": true,"ignore": true } , {"code": "tradingDate", 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 777ab0383..12c086842 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 @@ - + @@ -1070,6 +1070,7 @@
+ @@ -1082,6 +1083,7 @@ + @@ -1094,6 +1096,7 @@ + @@ -1557,14 +1560,14 @@ - + - + From cea1fc2d39704d332b0f802cc94033d1d4448d65 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Tue, 24 Jun 2025 15:23:07 +0300 Subject: [PATCH 23/24] increase version --- clearing-parent/account-service/pom.xml | 2 +- clearing-parent/backend-api/pom.xml | 2 +- clearing-parent/balance-service/pom.xml | 2 +- clearing-parent/classes/pom.xml | 2 +- clearing-parent/cleaning-builders/pom.xml | 6 +++--- clearing-parent/clearing-service/pom.xml | 2 +- clearing-parent/clearing-validation/pom.xml | 8 ++++---- clearing-parent/company-service/pom.xml | 2 +- clearing-parent/db-scripts/pom.xml | 4 ++-- clearing-parent/dbf-exporter/pom.xml | 4 ++-- clearing-parent/dbf-importer/pom.xml | 4 ++-- clearing-parent/dictionary/pom.xml | 4 ++-- clearing-parent/extdb-importer/pom.xml | 4 ++-- clearing-parent/gateway-api/pom.xml | 2 +- clearing-parent/imdg-hist/pom.xml | 10 +++++----- clearing-parent/imdg/pom.xml | 10 +++++----- clearing-parent/lim-exporter/pom.xml | 6 +++--- clearing-parent/pom.xml | 4 ++-- clearing-parent/registry-service/pom.xml | 2 +- clearing-parent/reports-service/pom.xml | 4 ++-- clearing-parent/scheduler-service/pom.xml | 4 ++-- clearing-parent/securities-service/pom.xml | 2 +- clearing-parent/security-util/pom.xml | 8 ++++---- clearing-parent/swt-exporter/pom.xml | 6 +++--- clearing-parent/swt-importer/pom.xml | 2 +- clearing-parent/test-clearing/pom.xml | 4 ++-- clearing-parent/trade-importer/pom.xml | 6 +++--- clearing-parent/utility-service/pom.xml | 2 +- clearing-parent/xml-exporter/pom.xml | 4 ++-- clearing-parent/xml-importer/pom.xml | 4 ++-- platform-parent/pom.xml | 2 +- pom.xml | 4 ++-- z-distr/pom.xml | 2 +- 33 files changed, 67 insertions(+), 67 deletions(-) diff --git a/clearing-parent/account-service/pom.xml b/clearing-parent/account-service/pom.xml index 0f6b30ad6..503158a8f 100644 --- a/clearing-parent/account-service/pom.xml +++ b/clearing-parent/account-service/pom.xml @@ -5,7 +5,7 @@ clearing-parent ru.spcex.clearing - SPCEX-3.18.243 + SPCEX-3.18.244 4.0.0 diff --git a/clearing-parent/backend-api/pom.xml b/clearing-parent/backend-api/pom.xml index 341661ab1..763665abb 100644 --- a/clearing-parent/backend-api/pom.xml +++ b/clearing-parent/backend-api/pom.xml @@ -11,7 +11,7 @@ clearing-parent ru.spcex.clearing - SPCEX-3.18.243 + SPCEX-3.18.244 diff --git a/clearing-parent/balance-service/pom.xml b/clearing-parent/balance-service/pom.xml index cf9a22d88..962bfee54 100644 --- a/clearing-parent/balance-service/pom.xml +++ b/clearing-parent/balance-service/pom.xml @@ -5,7 +5,7 @@ clearing-parent ru.spcex.clearing - SPCEX-3.18.243 + SPCEX-3.18.244 4.0.0 diff --git a/clearing-parent/classes/pom.xml b/clearing-parent/classes/pom.xml index c62bf71ba..19456cc47 100644 --- a/clearing-parent/classes/pom.xml +++ b/clearing-parent/classes/pom.xml @@ -12,7 +12,7 @@ clearing-parent ru.spcex.clearing - SPCEX-3.18.243 + SPCEX-3.18.244 diff --git a/clearing-parent/cleaning-builders/pom.xml b/clearing-parent/cleaning-builders/pom.xml index 5d7cbeed9..48759e5be 100644 --- a/clearing-parent/cleaning-builders/pom.xml +++ b/clearing-parent/cleaning-builders/pom.xml @@ -6,13 +6,13 @@ ru.spcex.clearing clearing-parent - SPCEX-3.18.243 + SPCEX-3.18.244 cleaning-builders cleaning-builders Cleaning builders module - SPCEX-3.18.243 + SPCEX-3.18.244 jar @@ -26,7 +26,7 @@ ru.spcex.clearing classes - SPCEX-3.18.243 + SPCEX-3.18.244 compile diff --git a/clearing-parent/clearing-service/pom.xml b/clearing-parent/clearing-service/pom.xml index a679f7dc5..2a19fe24a 100644 --- a/clearing-parent/clearing-service/pom.xml +++ b/clearing-parent/clearing-service/pom.xml @@ -5,7 +5,7 @@ clearing-parent ru.spcex.clearing - SPCEX-3.18.243 + SPCEX-3.18.244 4.0.0 diff --git a/clearing-parent/clearing-validation/pom.xml b/clearing-parent/clearing-validation/pom.xml index 84fcb33af..187987eb4 100644 --- a/clearing-parent/clearing-validation/pom.xml +++ b/clearing-parent/clearing-validation/pom.xml @@ -8,12 +8,12 @@ clearing-validation Clearing-module, dependency version of platform-utils jar - SPCEX-3.18.243 + SPCEX-3.18.244 clearing-parent ru.spcex.clearing - SPCEX-3.18.243 + SPCEX-3.18.244 @@ -35,13 +35,13 @@ ru.spcex.clearing classes - SPCEX-3.18.243 + SPCEX-3.18.244 compile ru.spcex.clearing dictionary - SPCEX-3.18.243 + SPCEX-3.18.244 compile diff --git a/clearing-parent/company-service/pom.xml b/clearing-parent/company-service/pom.xml index 032d87580..9e416d818 100644 --- a/clearing-parent/company-service/pom.xml +++ b/clearing-parent/company-service/pom.xml @@ -5,7 +5,7 @@ clearing-parent ru.spcex.clearing - SPCEX-3.18.243 + SPCEX-3.18.244 4.0.0 diff --git a/clearing-parent/db-scripts/pom.xml b/clearing-parent/db-scripts/pom.xml index 0feddd9d5..67eead1ca 100644 --- a/clearing-parent/db-scripts/pom.xml +++ b/clearing-parent/db-scripts/pom.xml @@ -7,12 +7,12 @@ db-scripts db-scripts db-scripts for PostgreSQL - SPCEX-3.18.243 + SPCEX-3.18.244 clearing-parent ru.spcex.clearing - SPCEX-3.18.243 + SPCEX-3.18.244 diff --git a/clearing-parent/dbf-exporter/pom.xml b/clearing-parent/dbf-exporter/pom.xml index 5bbdbcee2..e334169cb 100644 --- a/clearing-parent/dbf-exporter/pom.xml +++ b/clearing-parent/dbf-exporter/pom.xml @@ -7,12 +7,12 @@ dbf-exporter dbf-exporter DBF exporter for DBF files - SPCEX-3.18.243 + SPCEX-3.18.244 clearing-parent ru.spcex.clearing - SPCEX-3.18.243 + SPCEX-3.18.244 diff --git a/clearing-parent/dbf-importer/pom.xml b/clearing-parent/dbf-importer/pom.xml index 56b431c7e..0f3c8a1ca 100644 --- a/clearing-parent/dbf-importer/pom.xml +++ b/clearing-parent/dbf-importer/pom.xml @@ -8,12 +8,12 @@ dbf-importer dbf-importer DBF loader for DBF files - SPCEX-3.18.243 + SPCEX-3.18.244 clearing-parent ru.spcex.clearing - SPCEX-3.18.243 + SPCEX-3.18.244 diff --git a/clearing-parent/dictionary/pom.xml b/clearing-parent/dictionary/pom.xml index 58593fe54..e8d78fbed 100644 --- a/clearing-parent/dictionary/pom.xml +++ b/clearing-parent/dictionary/pom.xml @@ -8,12 +8,12 @@ Clearing dictionary Clearing dictionary jar - SPCEX-3.18.243 + SPCEX-3.18.244 clearing-parent ru.spcex.clearing - SPCEX-3.18.243 + SPCEX-3.18.244 diff --git a/clearing-parent/extdb-importer/pom.xml b/clearing-parent/extdb-importer/pom.xml index a209217f0..38229ee6e 100644 --- a/clearing-parent/extdb-importer/pom.xml +++ b/clearing-parent/extdb-importer/pom.xml @@ -4,12 +4,12 @@ ru.spcex.clearing clearing-parent - SPCEX-3.18.243 + SPCEX-3.18.244 extdb-importer extdb-importer Extdb importer module. Аналог trade-importer. - SPCEX-3.18.243 + SPCEX-3.18.244 jar diff --git a/clearing-parent/gateway-api/pom.xml b/clearing-parent/gateway-api/pom.xml index 4449e7aca..a51138a19 100644 --- a/clearing-parent/gateway-api/pom.xml +++ b/clearing-parent/gateway-api/pom.xml @@ -5,7 +5,7 @@ clearing-parent ru.spcex.clearing - SPCEX-3.18.243 + SPCEX-3.18.244 4.0.0 diff --git a/clearing-parent/imdg-hist/pom.xml b/clearing-parent/imdg-hist/pom.xml index 9acf40257..df113b3ea 100644 --- a/clearing-parent/imdg-hist/pom.xml +++ b/clearing-parent/imdg-hist/pom.xml @@ -5,12 +5,12 @@ 4.0.0 imdg-hist jar - SPCEX-3.18.243 + SPCEX-3.18.244 clearing-parent ru.spcex.clearing - SPCEX-3.18.243 + SPCEX-3.18.244 @@ -36,13 +36,13 @@ ru.spcex.clearing classes - SPCEX-3.18.243 + SPCEX-3.18.244 compile ru.spcex.clearing dictionary - SPCEX-3.18.243 + SPCEX-3.18.244 compile @@ -82,7 +82,7 @@ ru.spcex.clearing cleaning-builders - SPCEX-3.18.243 + SPCEX-3.18.244 compile diff --git a/clearing-parent/imdg/pom.xml b/clearing-parent/imdg/pom.xml index 7263e7f8b..779b54413 100644 --- a/clearing-parent/imdg/pom.xml +++ b/clearing-parent/imdg/pom.xml @@ -7,12 +7,12 @@ imdg Clearing in memory data grid jar - SPCEX-3.18.243 + SPCEX-3.18.244 clearing-parent ru.spcex.clearing - SPCEX-3.18.243 + SPCEX-3.18.244 @@ -32,13 +32,13 @@ ru.spcex.clearing classes - SPCEX-3.18.243 + SPCEX-3.18.244 compile ru.spcex.clearing dictionary - SPCEX-3.18.243 + SPCEX-3.18.244 compile @@ -89,7 +89,7 @@ ru.spcex.clearing cleaning-builders - SPCEX-3.18.243 + SPCEX-3.18.244 compile diff --git a/clearing-parent/lim-exporter/pom.xml b/clearing-parent/lim-exporter/pom.xml index f3551cf6d..fd7cb0cbb 100644 --- a/clearing-parent/lim-exporter/pom.xml +++ b/clearing-parent/lim-exporter/pom.xml @@ -3,13 +3,13 @@ 4.0.0 lim-exporter Lim exporter - SPCEX-3.18.243 + SPCEX-3.18.244 jar ru.spcex.clearing clearing-parent - SPCEX-3.18.243 + SPCEX-3.18.244 @@ -35,7 +35,7 @@ ru.spcex.clearing classes - SPCEX-3.18.243 + SPCEX-3.18.244 compile diff --git a/clearing-parent/pom.xml b/clearing-parent/pom.xml index 58738ec3c..265026084 100644 --- a/clearing-parent/pom.xml +++ b/clearing-parent/pom.xml @@ -7,12 +7,12 @@ _parent_clearing Clearing parent module pom - SPCEX-3.18.243 + SPCEX-3.18.244 clearing ru.spcex.clearing - SPCEX-3.18.243 + SPCEX-3.18.244 diff --git a/clearing-parent/registry-service/pom.xml b/clearing-parent/registry-service/pom.xml index dd65d3184..90641f23c 100644 --- a/clearing-parent/registry-service/pom.xml +++ b/clearing-parent/registry-service/pom.xml @@ -5,7 +5,7 @@ clearing-parent ru.spcex.clearing - SPCEX-3.18.243 + SPCEX-3.18.244 4.0.0 diff --git a/clearing-parent/reports-service/pom.xml b/clearing-parent/reports-service/pom.xml index 277ee1e41..d70cc66a0 100644 --- a/clearing-parent/reports-service/pom.xml +++ b/clearing-parent/reports-service/pom.xml @@ -8,12 +8,12 @@ reports-service reports-service Service for creating reports - SPCEX-3.18.243 + SPCEX-3.18.244 clearing-parent ru.spcex.clearing - SPCEX-3.18.243 + SPCEX-3.18.244 diff --git a/clearing-parent/scheduler-service/pom.xml b/clearing-parent/scheduler-service/pom.xml index 97b508803..65f440fb6 100644 --- a/clearing-parent/scheduler-service/pom.xml +++ b/clearing-parent/scheduler-service/pom.xml @@ -5,7 +5,7 @@ clearing-parent ru.spcex.clearing - SPCEX-3.18.243 + SPCEX-3.18.244 4.0.0 @@ -51,7 +51,7 @@ ru.spcex.clearing cleaning-builders - SPCEX-3.18.243 + SPCEX-3.18.244 compile diff --git a/clearing-parent/securities-service/pom.xml b/clearing-parent/securities-service/pom.xml index c570c950d..580347f7d 100644 --- a/clearing-parent/securities-service/pom.xml +++ b/clearing-parent/securities-service/pom.xml @@ -5,7 +5,7 @@ clearing-parent ru.spcex.clearing - SPCEX-3.18.243 + SPCEX-3.18.244 4.0.0 diff --git a/clearing-parent/security-util/pom.xml b/clearing-parent/security-util/pom.xml index d8a9bad1d..656f7cc63 100644 --- a/clearing-parent/security-util/pom.xml +++ b/clearing-parent/security-util/pom.xml @@ -8,12 +8,12 @@ security-util clearing Clearing misc util for verify user roles jar - SPCEX-3.18.243 + SPCEX-3.18.244 clearing-parent ru.spcex.clearing - SPCEX-3.18.243 + SPCEX-3.18.244 @@ -35,13 +35,13 @@ ru.spcex.clearing classes - SPCEX-3.18.243 + SPCEX-3.18.244 compile ru.spcex.clearing dictionary - SPCEX-3.18.243 + SPCEX-3.18.244 compile diff --git a/clearing-parent/swt-exporter/pom.xml b/clearing-parent/swt-exporter/pom.xml index 636fa6c63..34cb6d7f3 100644 --- a/clearing-parent/swt-exporter/pom.xml +++ b/clearing-parent/swt-exporter/pom.xml @@ -3,13 +3,13 @@ 4.0.0 swt-exporter Swt exporter - SPCEX-3.18.243 + SPCEX-3.18.244 jar ru.spcex.clearing clearing-parent - SPCEX-3.18.243 + SPCEX-3.18.244 @@ -35,7 +35,7 @@ ru.spcex.clearing classes - SPCEX-3.18.243 + SPCEX-3.18.244 compile diff --git a/clearing-parent/swt-importer/pom.xml b/clearing-parent/swt-importer/pom.xml index d09e42e92..d94ed8f5a 100644 --- a/clearing-parent/swt-importer/pom.xml +++ b/clearing-parent/swt-importer/pom.xml @@ -5,7 +5,7 @@ clearing-parent ru.spcex.clearing - SPCEX-3.18.243 + SPCEX-3.18.244 4.0.0 diff --git a/clearing-parent/test-clearing/pom.xml b/clearing-parent/test-clearing/pom.xml index 1b0a5a53d..649183bb4 100644 --- a/clearing-parent/test-clearing/pom.xml +++ b/clearing-parent/test-clearing/pom.xml @@ -4,11 +4,11 @@ ru.spcex.clearing clearing-parent - SPCEX-3.18.243 + SPCEX-3.18.244 test-clearing Test-clearing - SPCEX-3.18.243 + SPCEX-3.18.244 ru.spcex.platform diff --git a/clearing-parent/trade-importer/pom.xml b/clearing-parent/trade-importer/pom.xml index 40c8f65aa..722c0a9e9 100644 --- a/clearing-parent/trade-importer/pom.xml +++ b/clearing-parent/trade-importer/pom.xml @@ -4,12 +4,12 @@ ru.spcex.clearing clearing-parent - SPCEX-3.18.243 + SPCEX-3.18.244 trade-importer trade-importer Trade importer module - SPCEX-3.18.243 + SPCEX-3.18.244 jar @@ -55,7 +55,7 @@ ru.spcex.clearing classes - SPCEX-3.18.243 + SPCEX-3.18.244 compile diff --git a/clearing-parent/utility-service/pom.xml b/clearing-parent/utility-service/pom.xml index 69ab6d33f..49b58abcd 100644 --- a/clearing-parent/utility-service/pom.xml +++ b/clearing-parent/utility-service/pom.xml @@ -5,7 +5,7 @@ clearing-parent ru.spcex.clearing - SPCEX-3.18.243 + SPCEX-3.18.244 4.0.0 diff --git a/clearing-parent/xml-exporter/pom.xml b/clearing-parent/xml-exporter/pom.xml index e2fb00bc2..ae3cbe6ce 100644 --- a/clearing-parent/xml-exporter/pom.xml +++ b/clearing-parent/xml-exporter/pom.xml @@ -7,12 +7,12 @@ xml-exporter xml-exporter XML exporter for XML files - SPCEX-3.18.243 + SPCEX-3.18.244 clearing-parent ru.spcex.clearing - SPCEX-3.18.243 + SPCEX-3.18.244 diff --git a/clearing-parent/xml-importer/pom.xml b/clearing-parent/xml-importer/pom.xml index 9239ad8c0..588a9b020 100644 --- a/clearing-parent/xml-importer/pom.xml +++ b/clearing-parent/xml-importer/pom.xml @@ -8,12 +8,12 @@ xml-importer xml-importer XML loader for XML files - SPCEX-3.18.243 + SPCEX-3.18.244 clearing-parent ru.spcex.clearing - SPCEX-3.18.243 + SPCEX-3.18.244 diff --git a/platform-parent/pom.xml b/platform-parent/pom.xml index c88f6988f..dba723d42 100644 --- a/platform-parent/pom.xml +++ b/platform-parent/pom.xml @@ -14,7 +14,7 @@ ru.spcex.clearing clearing - SPCEX-3.18.243 + SPCEX-3.18.244 diff --git a/pom.xml b/pom.xml index 1114cd123..c80223a22 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ __parent_ROOT Clearing main parent pom - SPCEX-3.18.243 + SPCEX-3.18.244 clearing-parent @@ -24,7 +24,7 @@ 17 Maven - SPCEX-3.18.243 + SPCEX-3.18.244 2.6.3 diff --git a/z-distr/pom.xml b/z-distr/pom.xml index 558bf1246..f7de15b47 100644 --- a/z-distr/pom.xml +++ b/z-distr/pom.xml @@ -5,7 +5,7 @@ clearing ru.spcex.clearing - SPCEX-3.18.243 + SPCEX-3.18.244 4.0.0 From 404cd991fd699871aee2e8a8c4889ab935ee5254 Mon Sep 17 00:00:00 2001 From: ialbert Date: Tue, 24 Jun 2025 15:23:46 +0300 Subject: [PATCH 24/24] http://jira.mfd.msk:8088/browse/CLS-872 --- .../validation/RefundDateValidationRule.java | 14 +++++++------- .../validation/ReturnDepositValidationRule.java | 14 ++++++++------ 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/RefundDateValidationRule.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/RefundDateValidationRule.java index 0e52d3834..6b2de4d0f 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/RefundDateValidationRule.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/RefundDateValidationRule.java @@ -1,5 +1,9 @@ package ru.spcex.clearing.service.validation; +import java.util.Collection; +import java.util.Objects; +import java.util.Optional; +import java.util.stream.Collectors; import ru.clearing.classes.statics.data.registry.Registry; import ru.spcex.clearing.error.ClearingError; import ru.spcex.clearing.imdg.IMDGDistributedNames; @@ -12,11 +16,6 @@ import ru.spcex.platform.imdg.validation.ImdgValidationContext; import ru.spcex.platform.utils.enumeration.EnumMessage; import ru.spcex.platform.utils.validation.IValidationRule; -import java.util.Collection; -import java.util.Objects; -import java.util.Optional; -import java.util.stream.Collectors; - public enum RefundDateValidationRule implements IValidationRule> { Fields() { @Override @@ -39,6 +38,7 @@ public enum RefundDateValidationRule implements IValidationRule rgs.getRefundDate().equals(rgs.getSettlementDate())) .collect(Collectors.toList()); - if (rgss.size() < 1) { - return of(ClearingError.RecordNotFound, "groupId=" + validatedObject.getGroupId()); + if (rgss.isEmpty()) { + return of(ClearingError.RecordNotFound, "groupId=%d; market=%s".formatted(validatedObject.getGroupId(), validatedObject.getMarket())); } for (Registry rgs : rgss) { if (!validatedObject.getRefundDate().isAfter(rgs.getValueDate())) { // если request.RefundDate <= ValueDate - то ошибка diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/ReturnDepositValidationRule.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/ReturnDepositValidationRule.java index 1117dcc1d..941049a13 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/ReturnDepositValidationRule.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/ReturnDepositValidationRule.java @@ -1,10 +1,14 @@ package ru.spcex.clearing.service.validation; +import java.math.BigDecimal; +import java.util.Collection; +import java.util.Optional; import ru.clearing.classes.statics.data.company.ClearingMemberCategory; 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.domain.cud.registry.RegistryReturnDepositRequest; +import static ru.spcex.clearing.service.registry.RegistryManager.equalsByCode; import ru.spcex.platform.enumeration.ClearingCategory; import ru.spcex.platform.enumeration.RegistryStatus; import ru.spcex.platform.enumeration.RegistryTradingParams; @@ -19,12 +23,6 @@ import ru.spcex.platform.utils.enumeration.IEnumKey; import ru.spcex.platform.utils.text.TextUtil; import ru.spcex.platform.utils.validation.IValidationRule; -import java.math.BigDecimal; -import java.util.Collection; -import java.util.Optional; - -import static ru.spcex.clearing.service.registry.RegistryManager.equalsByCode; - //1. Проверки //1.1 Проверить, в запросе у регистра код: // 1.1.1 Если регистр TM-T: @@ -67,7 +65,11 @@ public enum ReturnDepositValidationRule implements IValidationRule rgsImdg = context.obtainMap(IMDGDistributedNames.Map_Registry, Registry.class); ImdgPredicateBuilder pb = rgsImdg.predicateBuilder(); + String mrkt = rgs.getMarket(); + ImdgPredicate mrktCondition = TextUtil.isEmpty(mrkt) ? + pb.alwaysTrue() : pb.or(pb.equals("market", mrkt), pb.isNull("market")); ImdgPredicate prdct = pb.and( + mrktCondition, pb.equals("groupId", rgs.getGroupId()), pb.equals("contract", rgs.getContract()) );