обработка SDF01 отправка Notification по результатам сверки

This commit is contained in:
ialbert 2023-06-27 14:50:58 +03:00
parent 9ace5c276d
commit 91f1c9a5df
2 changed files with 17 additions and 3 deletions

View file

@ -21,6 +21,7 @@ import ru.spcex.clearing.platform.messaging.domain.Consts;
import ru.spcex.clearing.platform.messaging.domain.cud.account.sdf01.AccountSdfRequestPart;
import ru.spcex.clearing.platform.messaging.domain.cud.balance.ExportToFileRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.balance.StatementRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.utilities.NotificationNewRequest;
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
import ru.spcex.clearing.service.LoggingService;
import ru.spcex.clearing.service.model.Result;
@ -49,6 +50,8 @@ import java.util.function.Function;
@Service
public class Sdf01Executor extends AbstractExecutor<SDf01> {
private final Logger log = LoggerFactory.getLogger(getClass());
private static final String reviseFailedMessage = "Сверка остатков денежных средств по результатам клиринговой сессии завершена с ошибками.";
private static final String reviseSuccessMessage = "Сверка остатков денежных средств по результатам клиринговой сессии завершена успешно.";
private final Imdg<Statement> statementImdg;
private final Imdg<Registry> registryImdg;
@ -60,11 +63,12 @@ public class Sdf01Executor extends AbstractExecutor<SDf01> {
private final Imdg<Currency> currencyImdg;
private final Imdg<SDf02> sdf02Imdg;
private final IMessageResolver messageResolver;
private final KafkaSender kafkaSender;
public Sdf01Executor(@Qualifier("sdf01ValidatorNew") Function<SDf01, IValidator> sDf01Validator,
LoggingService errorLogger,
ImdgProvider imdgProvider,
IMessageResolver errorResolver, IMessageResolver messageResolver) {
IMessageResolver errorResolver, IMessageResolver messageResolver, KafkaSender kafkaSender) {
this.statementImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Statement, Statement.class);
this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
this.clearingAccountImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingAccount, ClearingAccount.class);
@ -75,6 +79,7 @@ public class Sdf01Executor extends AbstractExecutor<SDf01> {
this.messageResolver = messageResolver;
this.securityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Security, Security.class);
this.sdf02Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf02, SDf02.class);
this.kafkaSender = kafkaSender;
}
//todo доделать контроль sdf01 и sdf57
@ -101,6 +106,7 @@ public class Sdf01Executor extends AbstractExecutor<SDf01> {
Result result = new Result();
Long generationIdForGroup = imdgProvider.getImdgIdGenerator().nextId();
result.setGenerationId(generationIdForGroup);
boolean reviseFailed = false;
for (SDf01 sdf01 : sdf) {
IValidator validator = sDf01Validator.apply(sdf01);
Optional<EnumMessage> error = validator.tillFirstError();
@ -148,6 +154,9 @@ public class Sdf01Executor extends AbstractExecutor<SDf01> {
registryImdg.insert(rgs);
}
//todo
if (!BigDecimal.ZERO.equals(rgs.getDiffBalance())) {
reviseFailed = true;
}
//2. отправить notification на backend
stmt.setOperationStatus(OperationStatus.Executed.getKey());
statementImdg.update(stmt);
@ -157,6 +166,11 @@ public class Sdf01Executor extends AbstractExecutor<SDf01> {
statementImdg.update(stmt);
}
}
NotificationNewRequest reviseNotification = new NotificationNewRequest();
reviseNotification.setObjectType(ObjectType.rgst.getKey());
reviseNotification.setComment(reviseFailed ? reviseFailedMessage : reviseSuccessMessage);
reviseNotification.setPriority(Priority.HIGH.getKey());
kafkaSender.sendRequestToQueue(Consts.NOTIFICATION_NEW, reviseNotification);
return result;
}
@ -286,7 +300,7 @@ public class Sdf01Executor extends AbstractExecutor<SDf01> {
}
}
rgs.setCheckBalance(BigDecimalUtil.safeBD(statement.getAmount()));
rgs.setDiffBalance(rgs.getCheckBalance().negate());
rgs.setDiffBalance(BigDecimalUtil.safeBD(rgs.getCheckBalance()).negate());
rgs.setBalanceDimension(BalanceDimension.MONY.getKey()); //fixme ! смотри описание и ссылка на начало html'ки
//fixme !rgs.setSettlementCode();
rgs.setTradingDate(statement.getSettlementDate()); //fixme ! today ?

View file

@ -3,7 +3,7 @@ package ru.spcex.platform.enumeration;
import ru.spcex.platform.utils.enumeration.IEnumKey;
public enum ObjectType implements IEnumKey {
statement("STMT");
statement("STMT"), rgst("RGST");
private final String key;