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