1. paymentPurpose += " по итогу клиринга"
2. ТКР/TKR sdf57/sdf06 search 3. локализация рус/англ purpose для PaymentInstructionOutboundService 4. ошибка в допуске к CURR сессии 5. swt-exporter bugfix
This commit is contained in:
parent
ed010ad64e
commit
1037b27165
16 changed files with 231 additions and 109 deletions
|
|
@ -1,19 +1,18 @@
|
||||||
package ru.spcex.clearing.config;
|
package ru.spcex.clearing.config;
|
||||||
|
|
||||||
|
import java.util.Locale;
|
||||||
import org.springframework.beans.factory.annotation.Qualifier;
|
import org.springframework.beans.factory.annotation.Qualifier;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.context.support.ResourceBundleMessageSource;
|
import org.springframework.context.support.ResourceBundleMessageSource;
|
||||||
import ru.spcex.platform.utils.enumeration.IMessageResolver;
|
import ru.spcex.platform.utils.localization.SpringPropertiesLocalizer;
|
||||||
import ru.spcex.platform.utils.enumeration.SpringPropertiesMessageResolver;
|
|
||||||
|
|
||||||
import java.util.Locale;
|
@Configuration
|
||||||
|
|
||||||
//@Configuration
|
|
||||||
public class MessagesConfig {
|
public class MessagesConfig {
|
||||||
@Bean("validation-error-messages")
|
@Bean("clearing-messages")
|
||||||
public ResourceBundleMessageSource messages() {
|
public ResourceBundleMessageSource messages() {
|
||||||
ResourceBundleMessageSource source = new ResourceBundleMessageSource();
|
ResourceBundleMessageSource source = new ResourceBundleMessageSource();
|
||||||
source.setBasenames("messages/error");
|
source.setBasenames("messages/clearing");
|
||||||
source.setUseCodeAsDefaultMessage(true);
|
source.setUseCodeAsDefaultMessage(true);
|
||||||
source.setDefaultEncoding("utf8");
|
source.setDefaultEncoding("utf8");
|
||||||
source.setDefaultLocale(Locale.ROOT);
|
source.setDefaultLocale(Locale.ROOT);
|
||||||
|
|
@ -21,9 +20,12 @@ public class MessagesConfig {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public IMessageResolver errorResolver(@Qualifier("validation-error-messages") ResourceBundleMessageSource messageBundle) {
|
public SpringPropertiesLocalizer localizer(
|
||||||
SpringPropertiesMessageResolver resolver = new SpringPropertiesMessageResolver(messageBundle);
|
@Qualifier("clearing-messages")
|
||||||
resolver.setLocale("ru");
|
ResourceBundleMessageSource messageBundle
|
||||||
|
) {
|
||||||
|
SpringPropertiesLocalizer resolver = new SpringPropertiesLocalizer(messageBundle);
|
||||||
|
resolver.setDefaultLocale("ru");
|
||||||
return resolver;
|
return resolver;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
package ru.spcex.clearing.messages;
|
||||||
|
|
||||||
|
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
||||||
|
|
||||||
|
public enum ClearingMessage implements IEnumKey {
|
||||||
|
WithdrawalFreeFromTkr("payment-instruction.purpose.withdrawal.tcr"),
|
||||||
|
WithdrawalOfFunds("payment-instruction.purpose.withdrawal"),
|
||||||
|
urgent("sdf54.urgent"),
|
||||||
|
;
|
||||||
|
private final String key;
|
||||||
|
|
||||||
|
ClearingMessage(String key) {
|
||||||
|
this.key = key;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getKey() {
|
||||||
|
return key;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -116,7 +116,7 @@ public class AnltSearcher {
|
||||||
return new AnltSearch(infoAcc, company, tcr, tcrList, currencyCode);
|
return new AnltSearch(infoAcc, company, tcr, tcrList, currencyCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final Pattern tcrPattern = Pattern.compile("ТКР.*?([0-9A-Z-]{12})");
|
private static final Pattern tcrPattern = Pattern.compile("ТКР|TKR.*?([0-9A-Z-]{12})");
|
||||||
|
|
||||||
private static String getTkrCodeFromComment(String comment) {
|
private static String getTkrCodeFromComment(String comment) {
|
||||||
if (TextUtil.isEmpty(comment)) {
|
if (TextUtil.isEmpty(comment)) {
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ package ru.spcex.clearing.service;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
@ -15,6 +16,8 @@ import ru.clearing.classes.statics.data.payment.PaymentInstruction;
|
||||||
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
|
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
|
||||||
import ru.clearing.classes.statics.data.sdf.SDf54;
|
import ru.clearing.classes.statics.data.sdf.SDf54;
|
||||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
|
import ru.spcex.clearing.messages.ClearingMessage;
|
||||||
|
import ru.spcex.clearing.util.LocaleUtil;
|
||||||
import ru.spcex.platform.enumeration.AccountStatus;
|
import ru.spcex.platform.enumeration.AccountStatus;
|
||||||
import ru.spcex.platform.enumeration.AccountType;
|
import ru.spcex.platform.enumeration.AccountType;
|
||||||
import ru.spcex.platform.enumeration.CompanySymbol;
|
import ru.spcex.platform.enumeration.CompanySymbol;
|
||||||
|
|
@ -25,6 +28,7 @@ import ru.spcex.platform.imdg.api.ImdgId;
|
||||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
||||||
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
||||||
|
import ru.spcex.platform.utils.localization.SpringPropertiesLocalizer;
|
||||||
import ru.spcex.platform.utils.number.BigDecimalUtil;
|
import ru.spcex.platform.utils.number.BigDecimalUtil;
|
||||||
import ru.spcex.platform.utils.time.TimeUtil;
|
import ru.spcex.platform.utils.time.TimeUtil;
|
||||||
|
|
||||||
|
|
@ -38,9 +42,10 @@ public class Sdf54Creator {
|
||||||
private final Imdg<SDf54> sdf54Imdg;
|
private final Imdg<SDf54> sdf54Imdg;
|
||||||
private final Imdg<BankAccount> bankAccountImdg;
|
private final Imdg<BankAccount> bankAccountImdg;
|
||||||
private final ImdgId idGenerator;
|
private final ImdgId idGenerator;
|
||||||
|
private final SpringPropertiesLocalizer resolver;
|
||||||
private static DateTimeFormatter payDateFormatter = DateTimeFormatter.ofPattern("dd.MM.yy");
|
private static DateTimeFormatter payDateFormatter = DateTimeFormatter.ofPattern("dd.MM.yy");
|
||||||
|
|
||||||
public Sdf54Creator(ImdgProvider imdgProvider) {
|
public Sdf54Creator(ImdgProvider imdgProvider, SpringPropertiesLocalizer resolver) {
|
||||||
this.tradingClearingRegistryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class);
|
this.tradingClearingRegistryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class);
|
||||||
this.companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
|
this.companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
|
||||||
this.accountImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Account, Account.class);
|
this.accountImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Account, Account.class);
|
||||||
|
|
@ -48,23 +53,25 @@ public class Sdf54Creator {
|
||||||
this.bankAccountImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_BankAccount, BankAccount.class);
|
this.bankAccountImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_BankAccount, BankAccount.class);
|
||||||
this.sdf54Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf54, SDf54.class);
|
this.sdf54Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf54, SDf54.class);
|
||||||
this.idGenerator = imdgProvider.getImdgIdGenerator();
|
this.idGenerator = imdgProvider.getImdgIdGenerator();
|
||||||
|
this.resolver = resolver;
|
||||||
}
|
}
|
||||||
|
|
||||||
private final static DateTimeFormatter docnmRefFormatter = DateTimeFormatter.ofPattern("yyMMddHHmmssSSS");
|
private final static DateTimeFormatter docnmRefFormatter = DateTimeFormatter.ofPattern("yyMMddHHmmssSSS");
|
||||||
|
|
||||||
public SDf54 create(PaymentInstruction paymentInstruction) {
|
public SDf54 create(PaymentInstruction pmt) {
|
||||||
Instant now = Instant.now();
|
Instant now = Instant.now();
|
||||||
String c_acc_cred = null;
|
String c_acc_cred = null;
|
||||||
Account anltAcc = accountImdg.getFirstObjectBySQL("accountType = '%s' and status = '%s' and currency = '%s'"
|
Account anltAcc = accountImdg.getFirstObjectBySQL("accountType = '%s' and status = '%s' and currency = '%s'"
|
||||||
.formatted(
|
.formatted(
|
||||||
AccountType.Anlt.getKey(),
|
AccountType.Anlt.getKey(),
|
||||||
Status.Active.getKey(),
|
Status.Active.getKey(),
|
||||||
paymentInstruction.getCreditLeg_currencyCode()
|
pmt.getCreditLeg_currencyCode()
|
||||||
));
|
));
|
||||||
// c_acc_deb = c_acc_deb == null ? paymentInstruction.getCreditLeg_account() : c_acc_deb;
|
// c_acc_deb = c_acc_deb == null ? paymentInstruction.getCreditLeg_account() : c_acc_deb;
|
||||||
c_acc_cred = c_acc_cred == null ? paymentInstruction.getDebitLeg_account() : c_acc_cred;
|
c_acc_cred = c_acc_cred == null ? pmt.getDebitLeg_account() : c_acc_cred;
|
||||||
|
|
||||||
|
|
||||||
|
Locale locale = LocaleUtil.locale(pmt.getCreditLeg_currencyCode(), pmt.getDebitLeg_currencyCode());
|
||||||
SDf54 sDf54 = new SDf54();
|
SDf54 sDf54 = new SDf54();
|
||||||
sDf54.setId(idGenerator.nextId());
|
sDf54.setId(idGenerator.nextId());
|
||||||
sDf54.setSeg_type("V");
|
sDf54.setSeg_type("V");
|
||||||
|
|
@ -80,6 +87,9 @@ public class Sdf54Creator {
|
||||||
String senderSbankName = "";
|
String senderSbankName = "";
|
||||||
if (prcCmp != null) {
|
if (prcCmp != null) {
|
||||||
senderSbankName = prcCmp.getShortName();
|
senderSbankName = prcCmp.getShortName();
|
||||||
|
if (!LocaleUtil.isRus(locale) && prcCmp.getProfile() != null) {
|
||||||
|
senderSbankName = prcCmp.getProfile().getShortNameEng();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
SpecifUtil.fillSegmentsBy35Symbols(senderSbankName,
|
SpecifUtil.fillSegmentsBy35Symbols(senderSbankName,
|
||||||
sDf54::setSbanknam1,
|
sDf54::setSbanknam1,
|
||||||
|
|
@ -105,29 +115,27 @@ public class Sdf54Creator {
|
||||||
if (anltAcc != null) {
|
if (anltAcc != null) {
|
||||||
sDf54.setAcc_deb(anltAcc.getAccount());
|
sDf54.setAcc_deb(anltAcc.getAccount());
|
||||||
}
|
}
|
||||||
Account accDebAcc = accountImdg.getSingleObjectByID(paymentInstruction.getDebitLeg_accountId());
|
Account accDebAcc = accountImdg.getSingleObjectByID(pmt.getDebitLeg_accountId());
|
||||||
if (accDebAcc == null || !AccountStatus.ACTIVE.equalsByKey(accDebAcc.getStatus())) {
|
if (accDebAcc == null || !AccountStatus.ACTIVE.equalsByKey(accDebAcc.getStatus())) {
|
||||||
log.warn("paymentInstruction[{}].DebitLeg_accountId={} account not exist or not active.", paymentInstruction.getId(), paymentInstruction.getDebitLeg_accountId());
|
log.warn("paymentInstruction[{}].DebitLeg_accountId={} account not exist or not active.", pmt.getId(), pmt.getDebitLeg_accountId());
|
||||||
}
|
}
|
||||||
BankAccount bnkAcc = bankAccountImdg.getFirstObjectBySQL("accountId = %d".formatted(paymentInstruction.getDebitLeg_accountId()));
|
BankAccount bnkAcc = bankAccountImdg.getFirstObjectBySQL("accountId = %d".formatted(pmt.getDebitLeg_accountId()));
|
||||||
if (bnkAcc != null) {
|
if (bnkAcc != null) {
|
||||||
sDf54.setInn_cred(bnkAcc.getTaxpayerIdentificationNumber());
|
sDf54.setInn_cred(bnkAcc.getTaxpayerIdentificationNumber());
|
||||||
sDf54.setKpp_cred(bnkAcc.getTaxRegistrationReasonCode());
|
sDf54.setKpp_cred(bnkAcc.getTaxRegistrationReasonCode());
|
||||||
c_acc_cred = bnkAcc.getCorrespondentAccount();
|
c_acc_cred = bnkAcc.getCorrespondentAccount();
|
||||||
sDf54.setSwift_ben(bnkAcc.getSwiftCode());
|
if (!LocaleUtil.isRus(locale)) {
|
||||||
|
sDf54.setSwift_ben(bnkAcc.getSwiftCode());
|
||||||
|
sDf54.setSwift_int(bnkAcc.getIntermediarySwiftCode());
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
log.warn("Bank account not found for DebitLeg_accountId={}", paymentInstruction.getDebitLeg_accountId());
|
log.warn("Bank account not found for DebitLeg_accountId={}", pmt.getDebitLeg_accountId());
|
||||||
}
|
}
|
||||||
sDf54.setDoc_num(String.valueOf(nextDocNum()));
|
sDf54.setDoc_num(String.valueOf(nextDocNum()));
|
||||||
BankAccount prcBankAcc = bankAccountImdg.getFirstObjectBySQL("companyId = %d and currency = '%s'"
|
|
||||||
.formatted(Sender.Prc.getId(), paymentInstruction.getCreditLeg_currencyCode()));
|
|
||||||
if (prcBankAcc != null) {
|
|
||||||
sDf54.setSwift_int(prcBankAcc.getSwiftCode());
|
|
||||||
}
|
|
||||||
String today = payDateFormatter.format(LocalDate.now());
|
String today = payDateFormatter.format(LocalDate.now());
|
||||||
sDf54.setDoc_date(today);
|
sDf54.setDoc_date(today);
|
||||||
sDf54.setValue_date(today);
|
sDf54.setValue_date(today);
|
||||||
sDf54.setAcc_kr_1(paymentInstruction.getDebitLeg_account());
|
sDf54.setAcc_kr_1(pmt.getDebitLeg_account());
|
||||||
|
|
||||||
{
|
{
|
||||||
Account prcCorrAcc = accountImdg.getFirstObjectBySQL("companyId=%d and accountType = '%s' and status = '%s' and currency = '%s'"
|
Account prcCorrAcc = accountImdg.getFirstObjectBySQL("companyId=%d and accountType = '%s' and status = '%s' and currency = '%s'"
|
||||||
|
|
@ -135,7 +143,7 @@ public class Sdf54Creator {
|
||||||
Sender.Prc.getId(),
|
Sender.Prc.getId(),
|
||||||
AccountType.Bank.getKey(),
|
AccountType.Bank.getKey(),
|
||||||
Status.Active.getKey(),
|
Status.Active.getKey(),
|
||||||
paymentInstruction.getCreditLeg_currencyCode()
|
pmt.getCreditLeg_currencyCode()
|
||||||
));
|
));
|
||||||
if (prcCorrAcc == null) {
|
if (prcCorrAcc == null) {
|
||||||
log.warn("Account for PRC CORR not found");
|
log.warn("Account for PRC CORR not found");
|
||||||
|
|
@ -145,7 +153,7 @@ public class Sdf54Creator {
|
||||||
}
|
}
|
||||||
//**********************
|
//**********************
|
||||||
|
|
||||||
sDf54.setSend_type("срочно");
|
sDf54.setSend_type(resolver.resolve(ClearingMessage.urgent, locale));
|
||||||
sDf54.setDoc_type("002");
|
sDf54.setDoc_type("002");
|
||||||
sDf54.setDocnm_ref(docnmRefFormatter.format(TimeUtil.toDateTime(now)));
|
sDf54.setDocnm_ref(docnmRefFormatter.format(TimeUtil.toDateTime(now)));
|
||||||
|
|
||||||
|
|
@ -186,13 +194,13 @@ public class Sdf54Creator {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sDf54.setPay_date(payDateFormatter.format(TimeUtil.toLocalDate(paymentInstruction.getPaymentDate())));
|
sDf54.setPay_date(payDateFormatter.format(TimeUtil.toLocalDate(pmt.getPaymentDate())));
|
||||||
sDf54.setPay_val(paymentInstruction.getCreditLeg_currencyCode());
|
sDf54.setPay_val(pmt.getCreditLeg_currencyCode());
|
||||||
String sumDeb = paymentInstruction.getDebitLeg_amount() != null ? paymentInstruction.getDebitLeg_amount().toString() : "";
|
String sumDeb = pmt.getDebitLeg_amount() != null ? pmt.getDebitLeg_amount().toString() : "";
|
||||||
sDf54.setSum_deb(BigDecimalUtil.limitDecimalPlaces(sumDeb, 2));
|
sDf54.setSum_deb(BigDecimalUtil.limitDecimalPlaces(sumDeb, 2));
|
||||||
sDf54.setSpecif_1(paymentInstruction.getPaymentPurpose());
|
sDf54.setSpecif_1(pmt.getPaymentPurpose());
|
||||||
sDf54.setGenerationTime(now);
|
sDf54.setGenerationTime(now);
|
||||||
log.debug("paymentInstruction.id={}, sdf54.id {}", paymentInstruction.getId(), sDf54.getId());
|
log.debug("paymentInstruction.id={}, sdf54.id {}", pmt.getId(), sDf54.getId());
|
||||||
return sDf54;
|
return sDf54;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,10 @@
|
||||||
package ru.spcex.clearing.service.builder;
|
package ru.spcex.clearing.service.builder;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.Instant;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Map;
|
||||||
import ru.clearing.classes.statics.data.account.Account;
|
import ru.clearing.classes.statics.data.account.Account;
|
||||||
import ru.clearing.classes.statics.data.account.ClearingAccount;
|
import ru.clearing.classes.statics.data.account.ClearingAccount;
|
||||||
import ru.clearing.classes.statics.data.company.Company;
|
import ru.clearing.classes.statics.data.company.Company;
|
||||||
|
|
@ -8,28 +13,31 @@ import ru.clearing.classes.statics.data.instrument.issue.FixedIncomeSecurity;
|
||||||
import ru.clearing.classes.statics.data.misc.Currency;
|
import ru.clearing.classes.statics.data.misc.Currency;
|
||||||
import ru.clearing.classes.statics.data.registry.Registry;
|
import ru.clearing.classes.statics.data.registry.Registry;
|
||||||
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
|
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
|
||||||
|
import ru.clearing.classes.statics.data.sdf.SDf21;
|
||||||
import ru.clearing.classes.statics.data.security.CurrencyPairSecurity;
|
import ru.clearing.classes.statics.data.security.CurrencyPairSecurity;
|
||||||
import ru.clearing.classes.statics.data.security.MoneyMarketSecurity;
|
import ru.clearing.classes.statics.data.security.MoneyMarketSecurity;
|
||||||
import ru.clearing.classes.statics.data.security.Security;
|
import ru.clearing.classes.statics.data.security.Security;
|
||||||
import ru.clearing.classes.statics.data.statement.Statement;
|
import ru.clearing.classes.statics.data.statement.Statement;
|
||||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
import ru.spcex.clearing.session.stage.util.RegistryUtil;
|
import ru.spcex.clearing.session.stage.util.RegistryUtil;
|
||||||
import ru.spcex.platform.enumeration.*;
|
import ru.spcex.platform.enumeration.AccountType;
|
||||||
|
import ru.spcex.platform.enumeration.RegistryDesignation;
|
||||||
|
import ru.spcex.platform.enumeration.RegistryInstrumentType;
|
||||||
|
import ru.spcex.platform.enumeration.RegistryStatus;
|
||||||
|
import ru.spcex.platform.enumeration.RegistryUnit;
|
||||||
|
import ru.spcex.platform.enumeration.ServiceStatus;
|
||||||
import ru.spcex.platform.imdg.api.Imdg;
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||||
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
||||||
|
import ru.spcex.platform.utils.number.BigDecimalUtil;
|
||||||
import java.math.BigDecimal;
|
|
||||||
import java.time.Instant;
|
|
||||||
import java.time.LocalDate;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class RegistrySecurityBuilder {
|
public class RegistrySecurityBuilder {
|
||||||
private Statement statement;
|
private Statement statement;
|
||||||
private Company company;
|
private Company company;
|
||||||
private Account account;
|
private Account account;
|
||||||
private RegistryDesignation designation;
|
private RegistryDesignation designation;
|
||||||
|
private SDf21 sdf21;
|
||||||
|
|
||||||
private final ImdgProvider imdgProvider;
|
private final ImdgProvider imdgProvider;
|
||||||
|
|
||||||
private final Imdg<ClearingAccount> clearingAccountImdg;
|
private final Imdg<ClearingAccount> clearingAccountImdg;
|
||||||
|
|
@ -92,19 +100,18 @@ public class RegistrySecurityBuilder {
|
||||||
rgs.setRegistryInstrumentType(RegistryInstrumentType.S.getKey());
|
rgs.setRegistryInstrumentType(RegistryInstrumentType.S.getKey());
|
||||||
|
|
||||||
AccountType accType = IEnumKey.getEnumByKey(AccountType.class, account.getAccountType());
|
AccountType accType = IEnumKey.getEnumByKey(AccountType.class, account.getAccountType());
|
||||||
if (AccountType.Clrn.equals(accType)) {
|
//if (AccountType.Clrn.equals(accType)) {
|
||||||
ClearingAccount accountForStatement = clearingAccountImdg.getFirstObjectByFieldValues(Map.of("accountId", statement.getAccountId()));
|
// ClearingAccount accountForStatement = clearingAccountImdg.getFirstObjectByFieldValues(Map.of("accountId", statement.getAccountId()));
|
||||||
if (accountForStatement != null) {
|
// if (accountForStatement != null) {
|
||||||
rgs.setRegistryCapacity(accountForStatement.getClearingAccountType());
|
// rgs.setRegistryCapacity(accountForStatement.getClearingAccountType());
|
||||||
}
|
// }
|
||||||
} else if (AccountType.Info.equals(accType) || AccountType.Anlt.equals(accType)) {
|
//} else if (AccountType.Info.equals(accType) || AccountType.Anlt.equals(accType)) {
|
||||||
rgs.setRegistryCapacity(RegistryCapacity.A.getKey());
|
// rgs.setRegistryCapacity(RegistryCapacity.A.getKey());
|
||||||
}
|
//}
|
||||||
rgs.setRegistryUnit(RegistryUnit.T.getKey());
|
rgs.setRegistryUnit(RegistryUnit.T.getKey());
|
||||||
rgs.setRegistryCode(RegistryUtil.clearingCode(rgs));
|
|
||||||
|
|
||||||
Collection<TradingClearingRegistry> tcrsByAccount = tradingClearingRegistryImdg.getCollectionObjectsByFieldValues(Map.of(
|
Collection<TradingClearingRegistry> tcrsByAccount = tradingClearingRegistryImdg.getCollectionObjectsByFieldValues(Map.of(
|
||||||
"moneyAccountId", account.getId(),
|
"depoAccountId", account.getId(),
|
||||||
"companyId", company.getId(),
|
"companyId", company.getId(),
|
||||||
"status", ServiceStatus.Active.getKey()
|
"status", ServiceStatus.Active.getKey()
|
||||||
));
|
));
|
||||||
|
|
@ -112,7 +119,9 @@ public class RegistrySecurityBuilder {
|
||||||
TradingClearingRegistry tcr = tcrsByAccount.iterator().next();
|
TradingClearingRegistry tcr = tcrsByAccount.iterator().next();
|
||||||
rgs.setTradingClearingRegistryId(tcr.getId());
|
rgs.setTradingClearingRegistryId(tcr.getId());
|
||||||
rgs.setTradingClearingRegistry(tcr.getCode());
|
rgs.setTradingClearingRegistry(tcr.getCode());
|
||||||
|
rgs.setRegistryCapacity(tcr.getTradingClearingRegistryType());
|
||||||
}
|
}
|
||||||
|
rgs.setRegistryCode(RegistryUtil.clearingCode(rgs));
|
||||||
|
|
||||||
rgs.setRegistryStatus(RegistryStatus.PROC.getKey());
|
rgs.setRegistryStatus(RegistryStatus.PROC.getKey());
|
||||||
rgs.setSecurityId(statement.getSecurityId());
|
rgs.setSecurityId(statement.getSecurityId());
|
||||||
|
|
@ -131,6 +140,7 @@ public class RegistrySecurityBuilder {
|
||||||
rgs.setCreated(Instant.now());
|
rgs.setCreated(Instant.now());
|
||||||
|
|
||||||
//по дефолту создаем с балансом 0, а потом пересчитываем по необходимости
|
//по дефолту создаем с балансом 0, а потом пересчитываем по необходимости
|
||||||
|
rgs.setPlanBalance(BigDecimalUtil.parse(sdf21.getCloseBalance()));
|
||||||
rgs.setBalance(BigDecimal.ZERO);
|
rgs.setBalance(BigDecimal.ZERO);
|
||||||
rgs.setDebit(BigDecimal.ZERO);
|
rgs.setDebit(BigDecimal.ZERO);
|
||||||
rgs.setCredit(BigDecimal.ZERO);
|
rgs.setCredit(BigDecimal.ZERO);
|
||||||
|
|
@ -154,4 +164,9 @@ public class RegistrySecurityBuilder {
|
||||||
if (currency != null) return currency.getCurrencyCode();
|
if (currency != null) return currency.getCurrencyCode();
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public RegistrySecurityBuilder sdf21(SDf21 sdf21) {
|
||||||
|
this.sdf21 = sdf21;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,13 @@
|
||||||
package ru.spcex.clearing.service.executors;
|
package ru.spcex.clearing.service.executors;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.Instant;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.function.Function;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Qualifier;
|
import org.springframework.beans.factory.annotation.Qualifier;
|
||||||
|
|
@ -26,7 +34,21 @@ import ru.spcex.clearing.service.model.Result;
|
||||||
import ru.spcex.clearing.service.registry.AssetTBFProcessing;
|
import ru.spcex.clearing.service.registry.AssetTBFProcessing;
|
||||||
import ru.spcex.clearing.service.validation.ValidationStored;
|
import ru.spcex.clearing.service.validation.ValidationStored;
|
||||||
import ru.spcex.clearing.session.stage.util.RegistryUtil;
|
import ru.spcex.clearing.session.stage.util.RegistryUtil;
|
||||||
import ru.spcex.platform.enumeration.*;
|
import ru.spcex.platform.enumeration.AccountType;
|
||||||
|
import ru.spcex.platform.enumeration.BalanceDimension;
|
||||||
|
import ru.spcex.platform.enumeration.InOutDirection;
|
||||||
|
import ru.spcex.platform.enumeration.InOutSDfType;
|
||||||
|
import ru.spcex.platform.enumeration.OperationCode;
|
||||||
|
import ru.spcex.platform.enumeration.OperationStatus;
|
||||||
|
import ru.spcex.platform.enumeration.RegistryCapacity;
|
||||||
|
import ru.spcex.platform.enumeration.RegistryDesignation;
|
||||||
|
import ru.spcex.platform.enumeration.RegistryInstrumentType;
|
||||||
|
import ru.spcex.platform.enumeration.RegistryStatus;
|
||||||
|
import ru.spcex.platform.enumeration.RegistryTradingParams;
|
||||||
|
import ru.spcex.platform.enumeration.RegistryUnit;
|
||||||
|
import ru.spcex.platform.enumeration.Sender;
|
||||||
|
import ru.spcex.platform.enumeration.StatementType;
|
||||||
|
import ru.spcex.platform.enumeration.WorkflowStatus;
|
||||||
import ru.spcex.platform.imdg.api.Imdg;
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
|
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
|
||||||
|
|
@ -36,20 +58,10 @@ import ru.spcex.platform.imdg.api.predicate.specific.SecuritySelector;
|
||||||
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
||||||
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
||||||
import ru.spcex.platform.utils.enumeration.IMessageResolver;
|
import ru.spcex.platform.utils.enumeration.IMessageResolver;
|
||||||
|
import static ru.spcex.platform.utils.number.BigDecimalUtil.safeBD;
|
||||||
import ru.spcex.platform.utils.text.TextUtil;
|
import ru.spcex.platform.utils.text.TextUtil;
|
||||||
import ru.spcex.platform.utils.validation.IValidator;
|
import ru.spcex.platform.utils.validation.IValidator;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
|
||||||
import java.time.Instant;
|
|
||||||
import java.time.LocalDate;
|
|
||||||
import java.time.format.DateTimeFormatter;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.function.Function;
|
|
||||||
import java.util.regex.Pattern;
|
|
||||||
|
|
||||||
import static ru.spcex.platform.utils.number.BigDecimalUtil.safeBD;
|
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class Sdf21Executor extends AbstractExecutor<SDf21> {
|
public class Sdf21Executor extends AbstractExecutor<SDf21> {
|
||||||
private final Logger log = LoggerFactory.getLogger(getClass());
|
private final Logger log = LoggerFactory.getLogger(getClass());
|
||||||
|
|
@ -193,6 +205,7 @@ public class Sdf21Executor extends AbstractExecutor<SDf21> {
|
||||||
rgs.getCredit());
|
rgs.getCredit());
|
||||||
}, () -> {
|
}, () -> {
|
||||||
Registry registry = RegistrySecurityBuilder.builder(imdgProvider)
|
Registry registry = RegistrySecurityBuilder.builder(imdgProvider)
|
||||||
|
.sdf21(sdf21)
|
||||||
.statement(stmt)
|
.statement(stmt)
|
||||||
.company(company)
|
.company(company)
|
||||||
.account(account)
|
.account(account)
|
||||||
|
|
@ -428,19 +441,6 @@ public class Sdf21Executor extends AbstractExecutor<SDf21> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String getTkrCodeFromComment(String comment) {
|
|
||||||
if (comment == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
comment = comment.toUpperCase();
|
|
||||||
int tcrIndex = comment.indexOf("ТКР");
|
|
||||||
if (tcrIndex == -1) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
comment = comment.substring(tcrIndex + 3);
|
|
||||||
return comment.replaceAll("\\s+", "");
|
|
||||||
}
|
|
||||||
|
|
||||||
private static String getContractFromSpecif(String specif) {
|
private static String getContractFromSpecif(String specif) {
|
||||||
if (specif == null) {
|
if (specif == null) {
|
||||||
return null;
|
return null;
|
||||||
|
|
|
||||||
|
|
@ -790,19 +790,6 @@ public class Sdf57Executor extends AbstractExecutor<SDf57> {
|
||||||
return LocalDate.parse(payDate, payDateFormatter);
|
return LocalDate.parse(payDate, payDateFormatter);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String getTkrCodeFromComment(String comment) {
|
|
||||||
if (comment == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
comment = comment.toUpperCase();
|
|
||||||
int tcrIndex = comment.indexOf("ТКР");
|
|
||||||
if (tcrIndex == -1) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
comment = comment.substring(tcrIndex + 3);
|
|
||||||
return comment.replaceAll("\\s+", "");
|
|
||||||
}
|
|
||||||
|
|
||||||
private String getContractFromSpecif(String specif) {
|
private String getContractFromSpecif(String specif) {
|
||||||
if (TextUtil.isEmpty(specif)) {
|
if (TextUtil.isEmpty(specif)) {
|
||||||
return null;
|
return null;
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ package ru.spcex.clearing.service.payment;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
@ -19,6 +20,7 @@ import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
|
||||||
import ru.clearing.classes.statics.data.sdf.SDf54;
|
import ru.clearing.classes.statics.data.sdf.SDf54;
|
||||||
import ru.spcex.clearing.error.ClearingError;
|
import ru.spcex.clearing.error.ClearingError;
|
||||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
|
import ru.spcex.clearing.messages.ClearingMessage;
|
||||||
import ru.spcex.clearing.notification.NotificationSender;
|
import ru.spcex.clearing.notification.NotificationSender;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
|
import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.Consts;
|
import ru.spcex.clearing.platform.messaging.domain.Consts;
|
||||||
|
|
@ -39,6 +41,7 @@ import ru.spcex.clearing.service.schedule.TradingTimeService;
|
||||||
import ru.spcex.clearing.service.validation.ValidationStored;
|
import ru.spcex.clearing.service.validation.ValidationStored;
|
||||||
import ru.spcex.clearing.session.stage.impl.GatewayRequester;
|
import ru.spcex.clearing.session.stage.impl.GatewayRequester;
|
||||||
import static ru.spcex.clearing.session.stage.impl.GatewayRequester.mapError;
|
import static ru.spcex.clearing.session.stage.impl.GatewayRequester.mapError;
|
||||||
|
import ru.spcex.clearing.util.LocaleUtil;
|
||||||
import ru.spcex.clearing.util.security.UserRoleVerification;
|
import ru.spcex.clearing.util.security.UserRoleVerification;
|
||||||
import ru.spcex.platform.enumeration.CurrencyCode;
|
import ru.spcex.platform.enumeration.CurrencyCode;
|
||||||
import ru.spcex.platform.enumeration.ObjectType;
|
import ru.spcex.platform.enumeration.ObjectType;
|
||||||
|
|
@ -51,6 +54,7 @@ import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||||
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
||||||
import ru.spcex.platform.utils.enumeration.IEnumId;
|
import ru.spcex.platform.utils.enumeration.IEnumId;
|
||||||
import ru.spcex.platform.utils.enumeration.IMessageResolver;
|
import ru.spcex.platform.utils.enumeration.IMessageResolver;
|
||||||
|
import ru.spcex.platform.utils.localization.SpringPropertiesLocalizer;
|
||||||
import static ru.spcex.platform.utils.number.BigDecimalUtil.safeBD;
|
import static ru.spcex.platform.utils.number.BigDecimalUtil.safeBD;
|
||||||
import ru.spcex.platform.utils.text.TextUtil;
|
import ru.spcex.platform.utils.text.TextUtil;
|
||||||
import ru.spcex.platform.utils.validation.IValidator;
|
import ru.spcex.platform.utils.validation.IValidator;
|
||||||
|
|
@ -78,12 +82,14 @@ public class PaymentInstructionOutboundService {
|
||||||
private final TradingTimeService time;
|
private final TradingTimeService time;
|
||||||
private final GatewayRequester gateway;
|
private final GatewayRequester gateway;
|
||||||
private final NotificationSender notification;
|
private final NotificationSender notification;
|
||||||
|
private final SpringPropertiesLocalizer resolver;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public PaymentInstructionOutboundService(UserRoleVerification rights,
|
public PaymentInstructionOutboundService(UserRoleVerification rights,
|
||||||
IMessageResolver msgs,
|
IMessageResolver msgs,
|
||||||
ImdgProvider imdgProvider,
|
ImdgProvider imdgProvider,
|
||||||
Function<PIClearingOutbondActionNewRequest, IValidator> validation, RegistryManager rgsMng, KafkaSender kafkaSender, AssetTBFProcessing assetsMng, DmiService dmiService, TradingTimeService time, GatewayRequester gateway, NotificationSender notification) {
|
Function<PIClearingOutbondActionNewRequest, IValidator> validation, RegistryManager rgsMng, KafkaSender kafkaSender, AssetTBFProcessing assetsMng, DmiService dmiService, TradingTimeService time, GatewayRequester gateway, NotificationSender notification,
|
||||||
|
SpringPropertiesLocalizer resolver) {
|
||||||
this.imdgProvider = imdgProvider;
|
this.imdgProvider = imdgProvider;
|
||||||
this.rights = rights;
|
this.rights = rights;
|
||||||
this.msgs = msgs;
|
this.msgs = msgs;
|
||||||
|
|
@ -95,7 +101,7 @@ public class PaymentInstructionOutboundService {
|
||||||
this.rgsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
|
this.rgsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
|
||||||
this.currImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Currency, Currency.class);
|
this.currImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Currency, Currency.class);
|
||||||
this.sdf54Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf54, SDf54.class);
|
this.sdf54Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf54, SDf54.class);
|
||||||
this.sdf54Creator = new Sdf54Creator(imdgProvider);
|
this.sdf54Creator = new Sdf54Creator(imdgProvider, resolver);
|
||||||
this.idGenerator = imdgProvider.getImdgIdGenerator();
|
this.idGenerator = imdgProvider.getImdgIdGenerator();
|
||||||
this.rgsMng = rgsMng;
|
this.rgsMng = rgsMng;
|
||||||
this.kafkaSender = kafkaSender;
|
this.kafkaSender = kafkaSender;
|
||||||
|
|
@ -103,6 +109,7 @@ public class PaymentInstructionOutboundService {
|
||||||
this.dmiService = dmiService;
|
this.dmiService = dmiService;
|
||||||
this.time = time;
|
this.time = time;
|
||||||
this.gateway = gateway;
|
this.gateway = gateway;
|
||||||
|
this.resolver = resolver;
|
||||||
this.gateway.setName("PaymentInstructionOutboundService|PI");
|
this.gateway.setName("PaymentInstructionOutboundService|PI");
|
||||||
this.notification = notification;
|
this.notification = notification;
|
||||||
}
|
}
|
||||||
|
|
@ -128,7 +135,10 @@ public class PaymentInstructionOutboundService {
|
||||||
log.debug("all checks passed, accCred.id={}, accDeb.id={}, addressee.id={}, sender.id={}, amount: {}",
|
log.debug("all checks passed, accCred.id={}, accDeb.id={}, addressee.id={}, sender.id={}, amount: {}",
|
||||||
accCred.getId(), accDeb.getId(), addressee.getId(), sender.getId(), amount);
|
accCred.getId(), accDeb.getId(), addressee.getId(), sender.getId(), amount);
|
||||||
|
|
||||||
String purpose = tcr != null ? "Возврат денежных средств, свободных от обязательств с ТКР " + tcr.getCode() + " ." : "Вывод средств.";
|
Locale locale = LocaleUtil.locale(accDeb);
|
||||||
|
String purpose = tcr != null ?
|
||||||
|
resolver.resolve(ClearingMessage.WithdrawalFreeFromTkr, locale, tcr.getCode()) :
|
||||||
|
resolver.resolve(ClearingMessage.WithdrawalOfFunds, locale);
|
||||||
if (payload.getPaymentPurpose() != null) {
|
if (payload.getPaymentPurpose() != null) {
|
||||||
String reqPmtPrpse = payload.getPaymentPurpose();
|
String reqPmtPrpse = payload.getPaymentPurpose();
|
||||||
if (!(reqPmtPrpse.endsWith(".") || reqPmtPrpse.endsWith("!") || reqPmtPrpse.endsWith("?") || reqPmtPrpse.endsWith(";"))) {
|
if (!(reqPmtPrpse.endsWith(".") || reqPmtPrpse.endsWith("!") || reqPmtPrpse.endsWith("?") || reqPmtPrpse.endsWith(";"))) {
|
||||||
|
|
|
||||||
|
|
@ -5,11 +5,11 @@ import java.util.Optional;
|
||||||
import ru.clearing.classes.statics.data.account.Account;
|
import ru.clearing.classes.statics.data.account.Account;
|
||||||
import ru.clearing.classes.statics.data.company.Company;
|
import ru.clearing.classes.statics.data.company.Company;
|
||||||
import ru.clearing.classes.statics.data.company.relation.Relation;
|
import ru.clearing.classes.statics.data.company.relation.Relation;
|
||||||
import ru.clearing.classes.statics.data.misc.Session;
|
|
||||||
import ru.clearing.classes.statics.data.registry.Registry;
|
import ru.clearing.classes.statics.data.registry.Registry;
|
||||||
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
|
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
|
||||||
import ru.spcex.clearing.error.ClearingError;
|
import ru.spcex.clearing.error.ClearingError;
|
||||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
|
import ru.spcex.platform.enumeration.Section;
|
||||||
import ru.spcex.platform.enumeration.ServiceStatus;
|
import ru.spcex.platform.enumeration.ServiceStatus;
|
||||||
import ru.spcex.platform.enumeration.WorkflowStatus;
|
import ru.spcex.platform.enumeration.WorkflowStatus;
|
||||||
import ru.spcex.platform.imdg.api.Imdg;
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
|
|
@ -42,11 +42,14 @@ public enum RegistryStep3ValidationRule implements IValidationRule<ImdgValidatio
|
||||||
return of(ClearingError.ClearingUnavailableForCompany, validatedObject.getSection());
|
return of(ClearingError.ClearingUnavailableForCompany, validatedObject.getSection());
|
||||||
}
|
}
|
||||||
Imdg<Relation> relationImdg = context.obtainMap(IMDGDistributedNames.Map_Relation, Relation.class);
|
Imdg<Relation> relationImdg = context.obtainMap(IMDGDistributedNames.Map_Relation, Relation.class);
|
||||||
Imdg<Session> sessionImdg = context.obtainMap(IMDGDistributedNames.Map_Session, Session.class);
|
String section = validatedObject.getSection();
|
||||||
//Session activeSession = sessionImdg.getSingleObjectByID(validatedObject.getSessionId());
|
Section sctn = IEnumKey.getEnumByKey(Section.class, validatedObject.getSection());
|
||||||
|
if (Section.CURR.equals(sctn)) {
|
||||||
|
section = Section.MKR.getKey();
|
||||||
|
}
|
||||||
Relation relation = relationImdg.getFirstObjectByFieldValues(Map.of(
|
Relation relation = relationImdg.getFirstObjectByFieldValues(Map.of(
|
||||||
"consumerId", validatedObject.getCompanyId(),
|
"consumerId", validatedObject.getCompanyId(),
|
||||||
"service", validatedObject.getSection()));
|
"service", section));
|
||||||
if (relation == null || (!ServiceStatus.Active.equalsByKey(relation.getServiceStatus()) && !ServiceStatus.Reopened.equalsByKey(relation.getServiceStatus()))) {
|
if (relation == null || (!ServiceStatus.Active.equalsByKey(relation.getServiceStatus()) && !ServiceStatus.Reopened.equalsByKey(relation.getServiceStatus()))) {
|
||||||
return of(ClearingError.ClearingUnavailableForCompany, validatedObject.getSection(), validatedObject.getCompanyId());
|
return of(ClearingError.ClearingUnavailableForCompany, validatedObject.getSection(), validatedObject.getCompanyId());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -171,8 +171,8 @@ public class FormingPaymentInstructionDepositReturn implements ISessionStage {
|
||||||
.cm_t(cm_t)
|
.cm_t(cm_t)
|
||||||
.tranAcc(tranAcc)
|
.tranAcc(tranAcc)
|
||||||
.sessionId(sessionId)
|
.sessionId(sessionId)
|
||||||
.paymentPurposeLmt("Возврат депозита " + lm_t.getContract() + " по ТКР " + lm_t.getTradingClearingRegistry())
|
.paymentPurposeLmt("Возврат депозита " + lm_t.getContract() + " по ТКР " + lm_t.getTradingClearingRegistry() + " по итогу клиринга")
|
||||||
.paymentPurpose("Возврат депозита " + cm_t.getContract() + " по ТКР " + cm_t.getTradingClearingRegistry())
|
.paymentPurpose("Возврат депозита " + cm_t.getContract() + " по ТКР " + cm_t.getTradingClearingRegistry() + " по итогу клиринга")
|
||||||
.currency(lm_t.getSecuritySymbol())
|
.currency(lm_t.getSecuritySymbol())
|
||||||
.build();
|
.build();
|
||||||
Pair.forEach(pmts, paymentInstructionImdg::insert);
|
Pair.forEach(pmts, paymentInstructionImdg::insert);
|
||||||
|
|
@ -231,8 +231,8 @@ public class FormingPaymentInstructionDepositReturn implements ISessionStage {
|
||||||
.cm_t(cm_t)
|
.cm_t(cm_t)
|
||||||
.tranAcc(tranAcc)
|
.tranAcc(tranAcc)
|
||||||
.sessionId(sessionId)
|
.sessionId(sessionId)
|
||||||
.paymentPurpose("Возврат депозита " + cm_t.getContract() + " по ТКР " + cm_t.getTradingClearingRegistry())
|
.paymentPurpose("Возврат депозита " + cm_t.getContract() + " по ТКР " + cm_t.getTradingClearingRegistry() + " по итогу клиринга")
|
||||||
.paymentPurposeLmt("Возврат депозита " + lm_t.getContract() + " по ТКР " + lm_t.getTradingClearingRegistry())
|
.paymentPurposeLmt("Возврат депозита " + lm_t.getContract() + " по ТКР " + lm_t.getTradingClearingRegistry() + " по итогу клиринга")
|
||||||
.currency(lm_t.getSecuritySymbol())
|
.currency(lm_t.getSecuritySymbol())
|
||||||
.build();
|
.build();
|
||||||
Pair.forEach(pmts, paymentInstructionImdg::insert);
|
Pair.forEach(pmts, paymentInstructionImdg::insert);
|
||||||
|
|
|
||||||
|
|
@ -204,8 +204,8 @@ public class FormingPaymentInstructionReturnMkr implements ISessionStage {
|
||||||
.cm_t(cm_t)
|
.cm_t(cm_t)
|
||||||
.tranAcc(tranAcc)
|
.tranAcc(tranAcc)
|
||||||
.sessionId(sessionId)
|
.sessionId(sessionId)
|
||||||
.paymentPurpose("Возврат депозита " + cm_t.getContract() + " по ТКР " + cm_t.getTradingClearingRegistry())
|
.paymentPurpose("Возврат депозита " + cm_t.getContract() + " по ТКР " + cm_t.getTradingClearingRegistry() + " по итогу клиринга")
|
||||||
.paymentPurposeLmt("Возврат депозита " + lm_t.getContract() + " по ТКР " + lm_t.getTradingClearingRegistry())
|
.paymentPurposeLmt("Возврат депозита " + lm_t.getContract() + " по ТКР " + lm_t.getTradingClearingRegistry() + " по итогу клиринга")
|
||||||
.currency(lm_t.getSecuritySymbol())
|
.currency(lm_t.getSecuritySymbol())
|
||||||
.build();
|
.build();
|
||||||
Pair.forEach(pmts, paymentInstructionImdg::insert);
|
Pair.forEach(pmts, paymentInstructionImdg::insert);
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,31 @@
|
||||||
|
package ru.spcex.clearing.util;
|
||||||
|
|
||||||
|
import java.util.Locale;
|
||||||
|
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 boolean isRus(Locale locale) {
|
||||||
|
return ru.equals(locale);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Locale locale(Account acc) {
|
||||||
|
if (CurrencyCode.isRub(acc.getCurrency())) {
|
||||||
|
return ru;
|
||||||
|
} else {
|
||||||
|
return eng;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Locale locale(String... currencyCode) {
|
||||||
|
for (String s : currencyCode) {
|
||||||
|
if (CurrencyCode.isRub(s)) {
|
||||||
|
return ru;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return eng;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
payment-instruction.purpose.withdrawal.tcr=Debt free cash withdrawal from TKR {0}.
|
||||||
|
payment-instruction.purpose.withdrawal=Debt free cash withdrawal.
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
payment-instruction.purpose.withdrawal.tcr=Возврат средств, свободных от обязательств с ТКР {0}.
|
||||||
|
payment-instruction.purpose.withdrawal=Вывод средств.
|
||||||
|
|
@ -1,5 +1,9 @@
|
||||||
package ru.spcex.clearing.swt.exporter.services.exportimpl;
|
package ru.spcex.clearing.swt.exporter.services.exportimpl;
|
||||||
|
|
||||||
|
import java.io.PrintWriter;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Objects;
|
||||||
import com.hazelcast.aws.utility.StringUtil;
|
import com.hazelcast.aws.utility.StringUtil;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import ru.clearing.classes.statics.data.misc.Session;
|
import ru.clearing.classes.statics.data.misc.Session;
|
||||||
|
|
@ -15,11 +19,7 @@ import ru.spcex.platform.enumeration.Section;
|
||||||
import ru.spcex.platform.enumeration.SessionType;
|
import ru.spcex.platform.enumeration.SessionType;
|
||||||
import ru.spcex.platform.enumeration.SwtTable;
|
import ru.spcex.platform.enumeration.SwtTable;
|
||||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||||
|
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
||||||
import java.io.PrintWriter;
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
|
|
@ -41,10 +41,10 @@ public class DF12Exporter extends AbstractExporterService<SDf12> {
|
||||||
@Override
|
@Override
|
||||||
protected String sectionForFileName(SwtExporterRequest req) {
|
protected String sectionForFileName(SwtExporterRequest req) {
|
||||||
Session session = session(req);
|
Session session = session(req);
|
||||||
if (!Section.FOND.equalsByKey(session.getSection())) {
|
if (!IEnumKey.contains(session.getSection(), Section.FOND, Section.MULT)) {
|
||||||
throw new IllegalStateException("%s is only processed for FOND section".formatted(typeForFileName()));
|
throw new IllegalStateException("%s is only processed for FOND/MULT section".formatted(typeForFileName()));
|
||||||
}
|
}
|
||||||
if (SessionType.TRDT.equalsByKey(session.getSessionType())) {
|
if (SessionType.TRDT.equalsByKey(session.getSessionType()) || SessionType.UNIT.equalsByKey(session.getSessionType())) {
|
||||||
return "fund";
|
return "fund";
|
||||||
}
|
}
|
||||||
return "bond";
|
return "bond";
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,41 @@
|
||||||
|
package ru.spcex.platform.utils.localization;
|
||||||
|
|
||||||
|
import java.util.Locale;
|
||||||
|
import org.springframework.context.support.ResourceBundleMessageSource;
|
||||||
|
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Если в зависимостях не будет spring-context, кинет NoClassDefFound
|
||||||
|
*/
|
||||||
|
public class SpringPropertiesLocalizer {
|
||||||
|
private final ResourceBundleMessageSource errorMessages;
|
||||||
|
private Locale defaultLocale;
|
||||||
|
|
||||||
|
public SpringPropertiesLocalizer(ResourceBundleMessageSource errorMessages) {
|
||||||
|
this.errorMessages = errorMessages;
|
||||||
|
this.defaultLocale = Locale.ENGLISH;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDefaultLocale(String defaultLocale) {
|
||||||
|
this.defaultLocale = new Locale(defaultLocale);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String resolve(IEnumKey msg, Locale locale, Object... args) {
|
||||||
|
return errorMessages.getMessage(msg.getKey(), args, locale);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String resolve(IEnumKey msg, Object... args) {
|
||||||
|
return errorMessages.getMessage(msg.getKey(), args, defaultLocale);
|
||||||
|
}
|
||||||
|
|
||||||
|
// public String resolve(EnumMessage errorMessage, Locale locale) {
|
||||||
|
// Long id = errorMessage.getSubject().getId();
|
||||||
|
// return errorMessages.getMessage(id.toString(), errorMessage.getArgs(), locale);
|
||||||
|
//String messageTemplate =
|
||||||
|
// if (errorMessage.getArgs().length > 0)
|
||||||
|
// return String.format(messageTemplate, errorMessage.getArgs());
|
||||||
|
// else {
|
||||||
|
// return messageTemplate;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
}
|
||||||
Loading…
Add table
Reference in a new issue