группировка registry с учетом market и groupId для шага 7 активной сессии

This commit is contained in:
etreschenkov 2025-06-23 16:44:22 +03:00
parent bacea62e45
commit d27b7d003d
3 changed files with 31 additions and 9 deletions

View file

@ -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);
}
}

View file

@ -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.SDf03;
import ru.clearing.classes.statics.data.sdf.SDf12; import ru.clearing.classes.statics.data.sdf.SDf12;
import ru.clearing.classes.statics.data.security.Security; import ru.clearing.classes.statics.data.security.Security;
import ru.spcex.clearing.component.GroupingRegistryKey;
import ru.spcex.clearing.error.ClearingError; import ru.spcex.clearing.error.ClearingError;
import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.platform.messaging.domain.Consts; import ru.spcex.clearing.platform.messaging.domain.Consts;
@ -159,14 +160,15 @@ public class FormingPaymentInstructionSecurities implements ISessionStage {
{ {
Collection<Registry> registries = selectSecurityRegistries(sessionId); Collection<Registry> registries = selectSecurityRegistries(sessionId);
log.debug("found registries.size() = {}", registries.size()); log.debug("found registries.size() = {}", registries.size());
//группируем регистры по groupId //группируем регистры по groupId и market
Map<Long, List<Registry>> groups = registries Map<GroupingRegistryKey, List<Registry>> groups = registries
.stream() .stream()
.collect(Collectors.groupingBy(Registry::getGroupId)); .collect(Collectors.groupingBy(r -> new GroupingRegistryKey(r.getGroupId(), r.getMarket())));
log.debug("groups.size = {}", groups.size()); log.debug("groups.size = {}", groups.size());
Map<Long, PaymentGroup> lstGroups = RegistryLiabilitiesGroup.group(groups); Map<Long, PaymentGroup> lstGroups = RegistryLiabilitiesGroup.group(groups);
for (Map.Entry<Long, List<Registry>> group : groups.entrySet()) { for (Map.Entry<GroupingRegistryKey, List<Registry>> group : groups.entrySet()) {
Long groupId = group.getKey(); Long groupId = group.getKey().groupId();
Function<RegistryTradingParams, Registry> findByCode = rgsCode -> group.getValue() Function<RegistryTradingParams, Registry> findByCode = rgsCode -> group.getValue()
.stream() .stream()
.filter(rgs -> RegistryManager.equalsByCode(rgsCode, rgs)) .filter(rgs -> RegistryManager.equalsByCode(rgsCode, rgs))

View file

@ -11,6 +11,7 @@ import java.util.stream.Collectors;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import ru.clearing.classes.statics.data.registry.Registry; import ru.clearing.classes.statics.data.registry.Registry;
import ru.spcex.clearing.component.GroupingRegistryKey;
import ru.spcex.clearing.service.registry.RegistryManager; import ru.spcex.clearing.service.registry.RegistryManager;
import ru.spcex.platform.enumeration.RegistryTradingParams; import ru.spcex.platform.enumeration.RegistryTradingParams;
import static ru.spcex.platform.enumeration.RegistryTradingParams.OS_T; import static ru.spcex.platform.enumeration.RegistryTradingParams.OS_T;
@ -21,17 +22,18 @@ import ru.spcex.platform.utils.text.TextUtil;
public class RegistryLiabilitiesGroup { public class RegistryLiabilitiesGroup {
private static final Logger log = LoggerFactory.getLogger(RegistryLiabilitiesGroup.class); private static final Logger log = LoggerFactory.getLogger(RegistryLiabilitiesGroup.class);
public static Map<Long, PaymentGroup> group(Map<Long, List<Registry>> registriesCollection) { public static Map<Long, PaymentGroup> group(Map<GroupingRegistryKey, List<Registry>> registriesCollection) {
Map<Long, PaymentGroup> result = new HashMap<>(); Map<Long, PaymentGroup> result = new HashMap<>();
List<Pair<Registry, Registry>> lstCstGroup = registriesCollection.entrySet() List<Pair<Registry, Registry>> lstCstGroup = registriesCollection.entrySet()
.stream() .stream()
.map(entry -> { .map(entry -> {
Long groupId = entry.getKey(); Long groupId = entry.getKey().groupId();
String market = entry.getKey().market();
List<Registry> value = entry.getValue(); List<Registry> value = entry.getValue();
Registry ls_t = obtain(value, OS_T); Registry ls_t = obtain(value, OS_T);
Registry cs_t = obtain(value, TS_T); Registry cs_t = obtain(value, TS_T);
if (ls_t == null || cs_t == null) { 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(Registry::getId)
.map(Object::toString) .map(Object::toString)
.collect(TextUtil.join)); .collect(TextUtil.join));