diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf01Executor.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf01Executor.java index ab0b39388..9beff7997 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf01Executor.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf01Executor.java @@ -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 { private final Logger log = LoggerFactory.getLogger(getClass()); + private static final String reviseFailedMessage = "Сверка остатков денежных средств по результатам клиринговой сессии завершена с ошибками."; + private static final String reviseSuccessMessage = "Сверка остатков денежных средств по результатам клиринговой сессии завершена успешно."; private final Imdg statementImdg; private final Imdg registryImdg; @@ -60,11 +63,12 @@ public class Sdf01Executor extends AbstractExecutor { private final Imdg currencyImdg; private final Imdg sdf02Imdg; private final IMessageResolver messageResolver; + private final KafkaSender kafkaSender; public Sdf01Executor(@Qualifier("sdf01ValidatorNew") Function 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 { 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 { 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 error = validator.tillFirstError(); @@ -148,6 +154,9 @@ public class Sdf01Executor extends AbstractExecutor { 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 { 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 { } } 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 ? diff --git a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/ObjectType.java b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/ObjectType.java index b90e5e1e8..55db093f3 100644 --- a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/ObjectType.java +++ b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/ObjectType.java @@ -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;