ialbert 2026-04-16 16:07:14 +03:00
parent 5b6eb04345
commit 15974ff939

View file

@ -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<Currency> currImdg;
private final Imdg<ClearingAccount> clearingAccountImdg;
private final Imdg<Company> companyImdg;
private final Imdg<Registry> rgsImdg;
private final Imdg<Relation> relationImdg;
private final Imdg<ClearingMemberCategory> clearingMemberCategoryImdg;
private final Imdg<ClearingCategoryDictionary> clearingCategoryImdg;
@ -110,7 +113,7 @@ public class ClearingAccountService extends QueueConsumer implements Initializin
@Qualifier("clearingAccountNewRequestValidator")
Function<ClearingAccountNewRequest, IValidator> clearingAccountNewRequestValidator,
@Qualifier("clearingAccountUpdateRequestValidator")
Function<ClearingAccountUpdateRequest, IValidator> clearingAccountUpdateRequestValidator) {
Function<ClearingAccountUpdateRequest, IValidator> clearingAccountUpdateRequestValidator, Imdg<Registry> 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;
}
/**
* Формирование уведомления о добавлении счёта