From 15974ff93998f8668784942ba0b550128b9a3836 Mon Sep 17 00:00:00 2001 From: ialbert Date: Thu, 16 Apr 2026 16:07:14 +0300 Subject: [PATCH] http://jira.mfd.msk:8088/browse/CLS-963 --- .../service/ClearingAccountService.java | 34 +++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/ClearingAccountService.java b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/ClearingAccountService.java index 6c1198478..f5c2277b3 100644 --- a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/ClearingAccountService.java +++ b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/ClearingAccountService.java @@ -1,5 +1,6 @@ package ru.spcex.clearing.account.service; +import java.math.BigDecimal; import java.time.Instant; import java.util.ArrayList; import java.util.Collection; @@ -26,6 +27,7 @@ import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.company.relation.Relation; import ru.clearing.classes.statics.data.misc.Currency; import ru.clearing.classes.statics.data.misc.Notification; +import ru.clearing.classes.statics.data.registry.Registry; import ru.clearing.classes.statics.data.registry.TradingClearingRegistry; import ru.clearing.classes.statics.data.sdf.SDf52; import ru.clearing.platform.dictionary.ClearingAccountTypeDictionary; @@ -90,6 +92,7 @@ public class ClearingAccountService extends QueueConsumer implements Initializin private final Imdg currImdg; private final Imdg clearingAccountImdg; private final Imdg companyImdg; + private final Imdg rgsImdg; private final Imdg relationImdg; private final Imdg clearingMemberCategoryImdg; private final Imdg clearingCategoryImdg; @@ -110,7 +113,7 @@ public class ClearingAccountService extends QueueConsumer implements Initializin @Qualifier("clearingAccountNewRequestValidator") Function clearingAccountNewRequestValidator, @Qualifier("clearingAccountUpdateRequestValidator") - Function clearingAccountUpdateRequestValidator) { + Function clearingAccountUpdateRequestValidator, Imdg rgsImdg) { super(kafkaQueue, kafkaResponseQueue); this.kafkaSender = kafkaSender; this.accountService = accountService; @@ -132,6 +135,7 @@ public class ClearingAccountService extends QueueConsumer implements Initializin this.tradingClearingRegistryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class); this.notificationImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Notification, Notification.class); this.clearingAccountTypeDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingAccountTypeDictionary, ClearingAccountTypeDictionary.class); + this.rgsImdg = rgsImdg; } @Override @@ -563,7 +567,16 @@ public class ClearingAccountService extends QueueConsumer implements Initializin log.trace("In sDF_52[{}] for account [{}] status {} not changed.", sdf.getId(), account.getId(), newStatus); continue; } - if (AccountStatus.BLOCKED == newStatus || AccountStatus.CLOSE == newStatus) { // статус 0/2 + Registry rgs = rgsImdg.getSingleObjectByPredicate( + rgsImdg.predicateBuilder().equals("account", account.getAccount()) + ); + boolean rgsBalanceNotZero = rgs == null || rgs.getBalance().compareTo(BigDecimal.ZERO) != 0; + boolean wasBlocked = AccountStatus.BLOCKED == newStatus || AccountStatus.CLOSE == newStatus; + if (rgsBalanceNotZero && wasBlocked) { + sendNotificationNonZeroBalanceClosed(ObjectType.account_block, account, newStatus); + notificationAccountIds.add(account.getId()); + putNotificationWaiting(systemRequest, item.getFirst(), item.getSecond()); + } else if (wasBlocked) { // статус 0/2 sendNotificationRequest(ObjectType.account_block, account, newStatus); notificationAccountIds.add(account.getId()); putNotificationWaiting(systemRequest, item.getFirst(), item.getSecond()); @@ -700,6 +713,23 @@ public class ClearingAccountService extends QueueConsumer implements Initializin return rKey; } + public Long sendNotificationNonZeroBalanceClosed(ObjectType objectType, Account account, AccountStatus status) { + String statusText = AccountStatus.BLOCKED == status ? "заблокировать" + : AccountStatus.CLOSE == status ? "закрыть" : + status.getKey(); + String message = String.format("Попытка %s ненулевой счет %s", statusText, account.getAccount()); + final String destination = Consts.NOTIFICATION_NEW; + NotificationNewRequest request = new NotificationNewRequest(); + request.setObjectType(objectType.getKey()); + request.setObjectId(account.getId()); + request.setPriority(Priority.HIGH.getKey()); + request.setComment(message); + log.debug("Send message to kafka \"{}\": {}", destination, LogFormatter.toStringWrapper(request)); + Long rKey = kafkaSender.sendRequestToQueue(destination, request); + log.trace("About account.id={} send notification request id={}", account.getId(), rKey); + return rKey; + } + /** * Формирование уведомления о добавлении счёта