From 18542d067228acd9eac28dac2c323e29890fe29f Mon Sep 17 00:00:00 2001 From: ialbert Date: Wed, 29 Apr 2026 18:19:40 +0300 Subject: [PATCH] http://jira.mfd.msk:8088/browse/CLS-981 --- .../clearing/config/ValidationConfig.java | 3 +- .../clearing/messages/ClearingMessage.java | 1 + .../payment/WithdrawalFundsService.java | 28 +++++++------- .../WithdrawalFundsValidationRule.java | 37 +------------------ .../WithdrawalFundsValidationStore.java | 1 - .../ru/spcex/clearing/util/LocaleUtil.java | 4 +- .../messages/clearing_eng.properties | 3 +- .../resources/messages/clearing_ru.properties | 3 +- 8 files changed, 24 insertions(+), 56 deletions(-) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/ValidationConfig.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/ValidationConfig.java index 1a1fde574..bdce7f0da 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/ValidationConfig.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/ValidationConfig.java @@ -483,8 +483,7 @@ public class ValidationConfig { cmpSymbCheck, cmpCheck, accCheck, - assetPresent, - WithdrawalFundsValidationRule.TcrPresent + assetPresent ); }; } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/messages/ClearingMessage.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/messages/ClearingMessage.java index cf150d1ff..d349eb641 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/messages/ClearingMessage.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/messages/ClearingMessage.java @@ -6,6 +6,7 @@ public enum ClearingMessage implements IEnumKey { WithdrawalFreeFromTkr("payment-instruction.purpose.withdrawal.tcr"), WithdrawalOfFunds("payment-instruction.purpose.withdrawal"), urgent("sdf54.urgent"), + withdrawalOfFundsDmau("withdrawal.funds.dmau"), ; private final String key; diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/payment/WithdrawalFundsService.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/payment/WithdrawalFundsService.java index 5a6da932a..72b75624a 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/payment/WithdrawalFundsService.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/payment/WithdrawalFundsService.java @@ -12,10 +12,11 @@ import ru.clearing.classes.statics.data.account.Account; import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.company.CompanySymbols; import ru.clearing.classes.statics.data.payment.PaymentInstruction; -import ru.clearing.classes.statics.data.registry.TradingClearingRegistry; +import ru.clearing.classes.statics.data.registry.Registry; import ru.clearing.classes.statics.data.sdf.SDf54; import ru.spcex.clearing.error.ClearingError; import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.messages.ClearingMessage; import ru.spcex.clearing.platform.messaging.domain.BaseRequest; import ru.spcex.clearing.platform.messaging.domain.Consts; import ru.spcex.clearing.platform.messaging.domain.cud.clearing.SdfClearingRequest; @@ -28,6 +29,7 @@ import ru.spcex.clearing.service.SpecifUtil; import ru.spcex.clearing.service.registry.AssetTBFProcessing; import ru.spcex.clearing.service.registry.DmiService; import ru.spcex.clearing.service.validation.WithdrawalFundsValidationStore; +import ru.spcex.clearing.util.LocaleUtil; import ru.spcex.clearing.util.security.UserRoleVerification; import ru.spcex.clearing.util.services.RequestHelper; import ru.spcex.platform.enumeration.CurrencyCode; @@ -39,8 +41,8 @@ import ru.spcex.platform.imdg.api.ImdgId; import ru.spcex.platform.imdg.api.ImdgProvider; import ru.spcex.platform.utils.enumeration.EnumMessage; import ru.spcex.platform.utils.enumeration.IMessageResolver; +import ru.spcex.platform.utils.localization.SpringPropertiesLocalizer; import ru.spcex.platform.utils.log.ExceptionUtils; -import static ru.spcex.platform.utils.number.BigDecimalUtil.safeBD; import ru.spcex.platform.utils.text.TextUtil; import ru.spcex.platform.utils.time.TimeUtil; import ru.spcex.platform.utils.validation.IValidator; @@ -52,24 +54,28 @@ public class WithdrawalFundsService { private final Sdf54Creator sdf54Creator; private final Imdg sdf54Imdg; private final Imdg pmtImdg; + private final Imdg rgsImdg; private final KafkaSender kafkaSender; private final ImdgId idGen; private final RequestHelper reqHelp; private final UserRoleVerification rights; private final IMessageResolver msgResolver; + private final SpringPropertiesLocalizer localizer; private final AssetTBFProcessing assetsMng; private final DmiService dmiService; - public WithdrawalFundsService(Function withdrawalFundsVal, Sdf54Creator sdf54Creator, ImdgProvider imdgProvider, KafkaSender kafkaSender, RequestHelper reqHelp, UserRoleVerification rights, IMessageResolver msgResolver, AssetTBFProcessing assetsMng, DmiService dmiService) { + public WithdrawalFundsService(Function withdrawalFundsVal, Sdf54Creator sdf54Creator, ImdgProvider imdgProvider, KafkaSender kafkaSender, RequestHelper reqHelp, UserRoleVerification rights, IMessageResolver msgResolver, SpringPropertiesLocalizer localizer, AssetTBFProcessing assetsMng, DmiService dmiService) { this.withdrawalFundsVal = withdrawalFundsVal; this.sdf54Creator = sdf54Creator; this.kafkaSender = kafkaSender; this.sdf54Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf54, SDf54.class); this.pmtImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_PaymentInstruction, PaymentInstruction.class); + this.rgsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); this.idGen = imdgProvider.getImdgIdGenerator(); this.reqHelp = reqHelp; this.rights = rights; this.msgResolver = msgResolver; + this.localizer = localizer; this.assetsMng = assetsMng; this.dmiService = dmiService; } @@ -93,7 +99,6 @@ public class WithdrawalFundsService { Company cmp = validator.getStored(WithdrawalFundsValidationStore.Company); Account acc = validator.getStored(WithdrawalFundsValidationStore.Account); AssetTrio assets = validator.getStored(WithdrawalFundsValidationStore.AssetTrio); - TradingClearingRegistry tcr = validator.getStored(WithdrawalFundsValidationStore.TCR); String curr = TextUtil.isEmpty(payload.getSecuritySymbol()) ? CurrencyCode.RUB.getKey() : payload.getSecuritySymbol(); Instant now = Instant.now(); @@ -152,11 +157,10 @@ public class WithdrawalFundsService { sdf54Imdg.insert(sDf54); log.info("created sdf54.id={}", sDf54.getId()); - dmiService.setProcComment(tcr.getId(), - curr, - safeBD(payload.getAmount()).negate(), - sDf54.getDocnm_ref()); - log.debug("recalculating assests..."); + Registry d__i = dmiService.createDmi(payload.getAmount(), assets.a__t()); + d__i.setComment(sDf54.getDocnm_ref()); + rgsImdg.insert(d__i); + log.debug("created {}.id={}; recalculating assests...", d__i.getRegistryCode(), d__i.getId()); assetsMng.process(assets.a__b(), assets.a__t(), assets.a__f(), BigDecimal.ZERO); SdfClearingRequest exp = new SdfClearingRequest(); @@ -180,11 +184,9 @@ public class WithdrawalFundsService { return payload.getPaymentPurpose(); } if (CurrencyCode.RUB.equalsByKey(payload.getSecuritySymbol())) { - return "Вывод средств с регистра невыясненных денежных средств по %s" - .formatted(payload.getSecuritySymbol()); + return localizer.resolve(ClearingMessage.withdrawalOfFundsDmau, LocaleUtil.ru, payload.getSecuritySymbol()); } else { - return "Withdrawal of funds from the register %s of unidentified funds" - .formatted(payload.getSecuritySymbol()); + return localizer.resolve(ClearingMessage.withdrawalOfFundsDmau, LocaleUtil.eng, payload.getSecuritySymbol()); } } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/WithdrawalFundsValidationRule.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/WithdrawalFundsValidationRule.java index 9d27ac50a..652a1030f 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/WithdrawalFundsValidationRule.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/WithdrawalFundsValidationRule.java @@ -1,20 +1,11 @@ package ru.spcex.clearing.service.validation; import java.math.BigDecimal; -import java.util.Objects; import java.util.Optional; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import ru.clearing.classes.statics.data.account.Account; -import ru.clearing.classes.statics.data.company.Company; -import ru.clearing.classes.statics.data.registry.TradingClearingRegistry; -import ru.clearing.classes.statics.data.registry.TradingClearingRegistryList; import ru.spcex.clearing.error.ClearingError; -import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.platform.messaging.domain.cud.registry.DmauRegistryRequest; -import ru.spcex.clearing.service.AnltSearcher; -import ru.spcex.clearing.service.TcrSearcher; -import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.validation.ImdgValidationContext; import ru.spcex.platform.utils.enumeration.EnumMessage; import ru.spcex.platform.utils.validation.IValidationRule; @@ -33,33 +24,7 @@ public enum WithdrawalFundsValidationRule implements IValidationRule validate(ImdgValidationContext context) { - Account accCred = context.getStoredObject(WithdrawalFundsValidationStore.Account); - Company addressee = context.getStoredObject(WithdrawalFundsValidationStore.Company); - Imdg tcrImdg = context.obtainMap(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class); - Imdg tcrListImdg = context.obtainMap(IMDGDistributedNames.Map_TradingClearingRegistryList, TradingClearingRegistryList.class); - Imdg companyImdg = context.obtainMap(IMDGDistributedNames.Map_Company, Company.class); - Imdg accountImdg = context.obtainMap(IMDGDistributedNames.Map_Account, Account.class); - TcrSearcher tcrSearcher = new TcrSearcher(tcrImdg, tcrListImdg, companyImdg, accountImdg); - AnltSearcher.AnltSearch srchRes = tcrSearcher.searchByAccountId(accCred.getId(), accCred.getCurrency()); - if (!srchRes.isFound()) { - return Optional.of(srchRes.getError()); - } - if (srchRes.getCompany() != null) { - if (!Objects.equals(srchRes.getCompany().getId(), addressee.getId())) { - return of(ClearingError.AccountIsNotMatchedWithCompany, accCred.getId(), addressee.getId()); - } - } - TradingClearingRegistry tcr = srchRes.getTcr(); - if (tcr == null) { - return of(ClearingError.RecordNotFound, "TCR"); - } - context.storeObject(WithdrawalFundsValidationStore.TCR, tcr); - return Optional.empty(); - } - }; + ; private final static Logger log = LoggerFactory.getLogger(WithdrawalFundsValidationRule.class); @Override diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/WithdrawalFundsValidationStore.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/WithdrawalFundsValidationStore.java index 55882c5e1..40298589b 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/WithdrawalFundsValidationStore.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/WithdrawalFundsValidationStore.java @@ -5,6 +5,5 @@ public enum WithdrawalFundsValidationStore { Company, Account, AssetTrio, - TCR, ; } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/util/LocaleUtil.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/util/LocaleUtil.java index 864b5a36d..344cf512c 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/util/LocaleUtil.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/util/LocaleUtil.java @@ -5,8 +5,8 @@ import ru.clearing.classes.statics.data.account.Account; import ru.spcex.platform.enumeration.CurrencyCode; public class LocaleUtil { - private static final Locale ru = new Locale("ru"); - private static final Locale eng = new Locale("eng"); + public static final Locale ru = new Locale("ru"); + public static final Locale eng = new Locale("eng"); public static boolean isRus(Locale locale) { return ru.equals(locale); diff --git a/clearing-parent/clearing-service/src/main/resources/messages/clearing_eng.properties b/clearing-parent/clearing-service/src/main/resources/messages/clearing_eng.properties index 7ddb3cb64..69a334b22 100644 --- a/clearing-parent/clearing-service/src/main/resources/messages/clearing_eng.properties +++ b/clearing-parent/clearing-service/src/main/resources/messages/clearing_eng.properties @@ -1,3 +1,4 @@ payment-instruction.purpose.withdrawal.tcr=Debt free cash withdrawal from TKR {0}. payment-instruction.purpose.withdrawal=Debt free cash withdrawal. -sdf54.urgent=urgent \ No newline at end of file +sdf54.urgent=urgent +withdrawal.funds.dmau=Withdrawal of funds from the register {0} of unidentified funds \ No newline at end of file diff --git a/clearing-parent/clearing-service/src/main/resources/messages/clearing_ru.properties b/clearing-parent/clearing-service/src/main/resources/messages/clearing_ru.properties index a411e49bb..b975e1cba 100644 --- a/clearing-parent/clearing-service/src/main/resources/messages/clearing_ru.properties +++ b/clearing-parent/clearing-service/src/main/resources/messages/clearing_ru.properties @@ -1,3 +1,4 @@ payment-instruction.purpose.withdrawal.tcr=Возврат средств, свободных от обязательств с ТКР {0}. payment-instruction.purpose.withdrawal=Вывод средств. -sdf54.urgent=срочно \ No newline at end of file +sdf54.urgent=срочно +withdrawal.funds.dmau=Вывод средств с регистра невыясненных денежных средств по {0} \ No newline at end of file