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

This commit is contained in:
etreschenkov 2025-06-24 10:43:55 +03:00
parent 1bb489e3cb
commit 1110278d6a

View file

@ -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<Registry> claimsAndLiabilities = rgsImdg.getCollectionObjectsByPredicate(prdct);
Map<Long, List<Registry>> groups = claimsAndLiabilities
Map<GroupRgsKey, List<Registry>> 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<Long, List<Registry>> group : groups.entrySet()) {
Long groupId = group.getKey();
for (Map.Entry<GroupRgsKey, List<Registry>> group : groups.entrySet()) {
Long groupId = group.getKey().groupId();
String market = group.getKey().market();
Function<RegistryDesignation, Registry> 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<AssetTrio> 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));