diff --git a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/InformationAccountService.java b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/InformationAccountService.java index 7ea1a5215..518ddb1cf 100644 --- a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/InformationAccountService.java +++ b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/InformationAccountService.java @@ -342,7 +342,7 @@ public class InformationAccountService extends QueueConsumer implements Initiali infoCounter = new AtomicLong(1); log.debug("No account information on map. n={}", infoCounter.get()); } else { - Pattern accPattern = Pattern.compile("39911%s([0-9]{8})7000".formatted(idWithTrailingZero)); + Pattern accPattern = Pattern.compile("39911%s([0-9]{8})\\d{4}".formatted(idWithTrailingZero)); int maxN = 1; int parsedCount = 0; String lastAccount = null; // for debug diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/misc/JsConfigController.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/misc/JsConfigController.java index ba6845b14..5dbb6cb11 100644 --- a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/misc/JsConfigController.java +++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/misc/JsConfigController.java @@ -25,7 +25,7 @@ public class JsConfigController { @ApiOperation(value = "get js config.") @ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = CommonGetAllResponse.class)}) - @RequestMapping(path = "/spcex.config.js", method = RequestMethod.GET) + @RequestMapping(path = "/spcexConfig.js", method = RequestMethod.GET) @ResponseBody public Map getJsConfig() { Map result = new HashMap<>(); diff --git a/clearing-parent/clearing-service/src/main/resources/application.properties b/clearing-parent/clearing-service/src/main/resources/application.properties index 79b890a40..1fc9e0f50 100644 --- a/clearing-parent/clearing-service/src/main/resources/application.properties +++ b/clearing-parent/clearing-service/src/main/resources/application.properties @@ -22,3 +22,5 @@ clearing-service.kafka-producer.buffer-memory=33554432 clearing-service.session-stage.inspection-gateway-timeout=60 clearing-service.scheduler.check-payment-instruction=*/5 * * * * * + +clearing-service.balance-check-omt=false 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..ac965db8d 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; @@ -69,40 +72,85 @@ public class KSRepLccNettoReportBuilder extends CSVReportBuilder registries = registryImdg.getCollectionObjectsByPredicate( pb.and( registryPredicate, - pb.equals("settlementDate", now) + pb.or( + pb.equals("settlementDate", now), + pb.equals("settlementDate", now.plusDays(1)) + ) ) ); - for (Registry registry : registries) { + Map> 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()) { + SecuritySymbolSettlementDateTKR securitySymbolSettlementDateTKR = entry.getKey(); + 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.setDate(now); - RegistryStatus status = IEnumKey.getEnumByKey(RegistryStatus.class, registry.getRegistryStatus()); - RegistryDesignation designation = IEnumKey.getEnumByKey(RegistryDesignation.class, registry.getRegistryDesignation()); + ksRepLccNettoReport.setFirmId(sampleRegistry.getTradingCode()); + ksRepLccNettoReport.setTkr(sampleRegistry.getTradingClearingRegistry()); + ksRepLccNettoReport.setCurrencyId(sampleRegistry.getSecuritySymbol()); + ksRepLccNettoReport.setDate(securitySymbolSettlementDateTKR.settlementDate); + 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 (!registry.getSettlementDate().equals(now)) continue; + 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 (!registry.getSettlementDate().equals(now)) continue; + if (designation == RegistryDesignation.A) { + if (registry.getBalance() != null && registry.getBalance().compareTo(BigDecimal.ZERO) < 0) { + debit = debit.add(registry.getBalance()); + } + } } } + if (!ksRepLccNettoReport.getDate().equals(now) && dataType != DataTypes.FX_OBLIG) continue; ksRepLccNettoReport.setDataType(dataType.value); ksRepLccNettoReport.setDebit(debit); ksRepLccNettoReport.setCredit(credit); @@ -123,4 +171,51 @@ public class KSRepLccNettoReportBuilder extends CSVReportBuilder