From ab98240a00b3994e8040c19e2f4e5cd3f2cca0e0 Mon Sep 17 00:00:00 2001 From: akulikov Date: Wed, 9 Oct 2024 17:40:47 +0300 Subject: [PATCH] http://jira.mfd.msk:8088/browse/CLS-765 --- .../ks/KSRepLccNettoReportBuilder.java | 136 ++++++++++++++---- 1 file changed, 112 insertions(+), 24 deletions(-) diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/ks/KSRepLccNettoReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/ks/KSRepLccNettoReportBuilder.java index 78f3e0e28..0a732343b 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/ks/KSRepLccNettoReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/ks/KSRepLccNettoReportBuilder.java @@ -4,7 +4,10 @@ import java.math.BigDecimal; import java.time.LocalDate; import java.util.ArrayList; import java.util.Collection; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; import org.springframework.stereotype.Component; import ru.clearing.classes.statics.data.registry.Registry; import ru.spcex.clearing.imdg.IMDGDistributedNames; @@ -72,35 +75,73 @@ public class KSRepLccNettoReportBuilder extends CSVReportBuilder> groupedRegistries = registries.stream() + .collect( + Collectors.groupingBy( + registry -> new SecuritySymbolSettlementDateTKR( + registry.getSecuritySymbol(), + registry.getSettlementDate(), + registry.getTradingClearingRegistry() + ), + HashMap::new, + Collectors.toList() + ) + ); + + + for (Map.Entry> entry : groupedRegistries.entrySet()) { + List registriesForTKR = entry.getValue(); + Registry sampleRegistry = registriesForTKR.iterator().next(); + for (Registry registry : registriesForTKR) { + if (!sampleRegistry.getTradingCode().equalsIgnoreCase(registry.getTradingCode())) { + log.warn( + "For group registries (security_symbol: {}, settlement_date: {}, tkr: {}) " + + "found registry with another trading_code (expected: {}, actual: {}). Use {} for report", + sampleRegistry.getSecuritySymbol(), + sampleRegistry.getSettlementDate(), + sampleRegistry.getTradingClearingRegistry(), + sampleRegistry.getTradingCode(), + registry.getTradingCode(), + sampleRegistry.getTradingCode() + ); + } + } for (DataTypes dataType : DataTypes.values()) { KSRepLccNettoReport ksRepLccNettoReport = new KSRepLccNettoReport(); - ksRepLccNettoReport.setFirmId(registry.getTradingCode()); - ksRepLccNettoReport.setTkr(registry.getTradingClearingRegistry()); - ksRepLccNettoReport.setCurrencyId(registry.getSecuritySymbol()); + ksRepLccNettoReport.setFirmId(sampleRegistry.getTradingCode()); + ksRepLccNettoReport.setTkr(sampleRegistry.getTradingClearingRegistry()); + ksRepLccNettoReport.setCurrencyId(sampleRegistry.getSecuritySymbol()); ksRepLccNettoReport.setDate(now); - RegistryStatus status = IEnumKey.getEnumByKey(RegistryStatus.class, registry.getRegistryStatus()); - RegistryDesignation designation = IEnumKey.getEnumByKey(RegistryDesignation.class, registry.getRegistryDesignation()); + BigDecimal debit = BigDecimal.ZERO; BigDecimal credit = BigDecimal.ZERO; - if (dataType == DataTypes.FX_OBLIG) { - if (status == RegistryStatus.PROC || status == RegistryStatus.MNG) { - if (designation == RegistryDesignation.O) - debit = registry.getBalance() != null ? registry.getBalance() : BigDecimal.ZERO; - if (designation == RegistryDesignation.T) - credit = registry.getBalance() != null ? registry.getBalance() : BigDecimal.ZERO; - } - } else if (dataType == DataTypes.PR_NETTOSUM) { - if (status == RegistryStatus.CLRD) { - if (designation == RegistryDesignation.O) - debit = registry.getBalance() != null ? registry.getBalance() : BigDecimal.ZERO; - if (designation == RegistryDesignation.T) - credit = registry.getBalance() != null ? registry.getBalance() : BigDecimal.ZERO; - } - } else if (dataType == DataTypes.FX_DEBT) { - if (designation == RegistryDesignation.A) { - if (registry.getBalance() != null && registry.getBalance().compareTo(BigDecimal.ZERO) < 0) - debit = registry.getBalance(); + for (Registry registry : registriesForTKR) { + RegistryStatus status = IEnumKey.getEnumByKey(RegistryStatus.class, registry.getRegistryStatus()); + RegistryDesignation designation = IEnumKey.getEnumByKey(RegistryDesignation.class, registry.getRegistryDesignation()); + if (dataType == DataTypes.FX_OBLIG) { + if (status == RegistryStatus.PROC || status == RegistryStatus.MNG) { + if (designation == RegistryDesignation.O) { + debit = debit.add(registry.getBalance() != null ? registry.getBalance() : BigDecimal.ZERO); + } + if (designation == RegistryDesignation.T) { + credit = credit.add(registry.getBalance() != null ? registry.getBalance() : BigDecimal.ZERO); + } + } + } else if (dataType == DataTypes.PR_NETTOSUM) { + if (status == RegistryStatus.CLRD) { + if (designation == RegistryDesignation.O) { + debit = debit.add(registry.getBalance() != null ? registry.getBalance() : BigDecimal.ZERO); + } + if (designation == RegistryDesignation.T) { + credit = credit.add(registry.getBalance() != null ? registry.getBalance() : BigDecimal.ZERO); + } + } + } else if (dataType == DataTypes.FX_DEBT) { + if (designation == RegistryDesignation.A) { + if (registry.getBalance() != null && registry.getBalance().compareTo(BigDecimal.ZERO) < 0) { + debit = debit.add(registry.getBalance()); + } + } } } ksRepLccNettoReport.setDataType(dataType.value); @@ -123,4 +164,51 @@ public class KSRepLccNettoReportBuilder extends CSVReportBuilder