This commit is contained in:
parent
9d89f94dba
commit
18542d0672
8 changed files with 24 additions and 56 deletions
|
|
@ -483,8 +483,7 @@ public class ValidationConfig {
|
|||
cmpSymbCheck,
|
||||
cmpCheck,
|
||||
accCheck,
|
||||
assetPresent,
|
||||
WithdrawalFundsValidationRule.TcrPresent
|
||||
assetPresent
|
||||
);
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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<SDf54> sdf54Imdg;
|
||||
private final Imdg<PaymentInstruction> pmtImdg;
|
||||
private final Imdg<Registry> 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<DmauRegistryRequest, IValidator> withdrawalFundsVal, Sdf54Creator sdf54Creator, ImdgProvider imdgProvider, KafkaSender kafkaSender, RequestHelper reqHelp, UserRoleVerification rights, IMessageResolver msgResolver, AssetTBFProcessing assetsMng, DmiService dmiService) {
|
||||
public WithdrawalFundsService(Function<DmauRegistryRequest, IValidator> 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());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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<ImdgValidat
|
|||
return empty();
|
||||
}
|
||||
},
|
||||
TcrPresent() {
|
||||
@Override
|
||||
public Optional<EnumMessage> validate(ImdgValidationContext<DmauRegistryRequest> context) {
|
||||
Account accCred = context.getStoredObject(WithdrawalFundsValidationStore.Account);
|
||||
Company addressee = context.getStoredObject(WithdrawalFundsValidationStore.Company);
|
||||
Imdg<TradingClearingRegistry> tcrImdg = context.obtainMap(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class);
|
||||
Imdg<TradingClearingRegistryList> tcrListImdg = context.obtainMap(IMDGDistributedNames.Map_TradingClearingRegistryList, TradingClearingRegistryList.class);
|
||||
Imdg<Company> companyImdg = context.obtainMap(IMDGDistributedNames.Map_Company, Company.class);
|
||||
Imdg<Account> 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
|
||||
|
|
|
|||
|
|
@ -5,6 +5,5 @@ public enum WithdrawalFundsValidationStore {
|
|||
Company,
|
||||
Account,
|
||||
AssetTrio,
|
||||
TCR,
|
||||
;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
sdf54.urgent=urgent
|
||||
withdrawal.funds.dmau=Withdrawal of funds from the register {0} of unidentified funds
|
||||
|
|
@ -1,3 +1,4 @@
|
|||
payment-instruction.purpose.withdrawal.tcr=Возврат средств, свободных от обязательств с ТКР {0}.
|
||||
payment-instruction.purpose.withdrawal=Вывод средств.
|
||||
sdf54.urgent=срочно
|
||||
sdf54.urgent=срочно
|
||||
withdrawal.funds.dmau=Вывод средств с регистра невыясненных денежных средств по {0}
|
||||
Loading…
Add table
Reference in a new issue