From d27b7d003d49e06e971292ce3e99816a17175a3d Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Mon, 23 Jun 2025 16:44:22 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B3=D1=80=D1=83=D0=BF=D0=BF=D0=B8=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=D0=BA=D0=B0=20registry=20=D1=81=20=D1=83=D1=87?= =?UTF-8?q?=D0=B5=D1=82=D0=BE=D0=BC=20market=20=D0=B8=20groupId=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20=D1=88=D0=B0=D0=B3=D0=B0=207=20=D0=B0=D0=BA?= =?UTF-8?q?=D1=82=D0=B8=D0=B2=D0=BD=D0=BE=D0=B9=20=D1=81=D0=B5=D1=81=D1=81?= =?UTF-8?q?=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));