akulikov 2023-12-29 13:15:18 +03:00
parent 9b81ee6b35
commit 256f88a5c5
13 changed files with 644 additions and 31 deletions

View file

@ -3,6 +3,7 @@ package ru.spcex.clearing.registry.reports.bean;
import com.opencsv.bean.CsvBindByName;
import com.opencsv.bean.CsvBindByPosition;
import com.opencsv.bean.CsvDate;
import com.opencsv.bean.CsvNumber;
import java.math.BigDecimal;
import java.time.LocalDate;
@ -41,6 +42,7 @@ public class DepoBalanceRegisterReport implements CSVReport {
@CsvBindByName(column = "Количество ЦБ")
@CsvBindByPosition(position = 7)
@CsvNumber(value = "#0.00", writeFormat = "#0.00")
private BigDecimal sum;
public String getHouseName() {

View file

@ -0,0 +1,148 @@
package ru.spcex.clearing.registry.reports.bean;
import com.opencsv.bean.CsvBindByName;
import com.opencsv.bean.CsvBindByPosition;
import com.opencsv.bean.CsvDate;
import com.opencsv.bean.CsvNumber;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalTime;
public class DepoPaymentInstructionRegisterReport implements CSVReport {
@CsvBindByName(column = "Номер распоряжения")
@CsvBindByPosition(position = 0)
private Long number;
@CsvBindByName(column = "Дата распоряжения")
@CsvBindByPosition(position = 1)
@CsvDate(value = "dd.MM.yyyy")
private LocalDate date;
@CsvBindByName(column = "Время формирования")
@CsvBindByPosition(position = 2)
@CsvDate(value = "HH:mm:ss")
private LocalTime time;
@CsvBindByName(column = "Номер торгового банковского/клирингового счета списания")
@CsvBindByPosition(position = 3)
private String accountSender;
@CsvBindByName(column = "Наименование владельца счета списания")
@CsvBindByPosition(position = 4)
private String sender;
@CsvBindByName(column = "Код владельца счета списания")
@CsvBindByPosition(position = 5)
private String codeSender;
@CsvBindByName(column = "Номер торгового банковского/клирингового счета зачисления")
@CsvBindByPosition(position = 6)
private String accountAddressee;
@CsvBindByName(column = "Наименование владельца счета зачисления")
@CsvBindByPosition(position = 7)
private String addressee;
@CsvBindByName(column = "Код владельца счета зачисления")
@CsvBindByPosition(position = 8)
private String codeAddressee;
@CsvBindByName(column = "Код ЦБ")
@CsvBindByPosition(position = 9)
private String security;
@CsvBindByName(column = "Количество ЦБ")
@CsvBindByPosition(position = 10)
@CsvNumber(value = "#0.00", writeFormat = "#0.00")
private BigDecimal amount;
public Long getNumber() {
return number;
}
public void setNumber(Long number) {
this.number = number;
}
public LocalDate getDate() {
return date;
}
public void setDate(LocalDate date) {
this.date = date;
}
public LocalTime getTime() {
return time;
}
public void setTime(LocalTime time) {
this.time = time;
}
public String getAccountSender() {
return accountSender;
}
public void setAccountSender(String accountSender) {
this.accountSender = accountSender;
}
public String getSender() {
return sender;
}
public void setSender(String sender) {
this.sender = sender;
}
public String getCodeSender() {
return codeSender;
}
public void setCodeSender(String codeSender) {
this.codeSender = codeSender;
}
public String getAccountAddressee() {
return accountAddressee;
}
public void setAccountAddressee(String accountAddressee) {
this.accountAddressee = accountAddressee;
}
public String getAddressee() {
return addressee;
}
public void setAddressee(String addressee) {
this.addressee = addressee;
}
public String getCodeAddressee() {
return codeAddressee;
}
public void setCodeAddressee(String codeAddressee) {
this.codeAddressee = codeAddressee;
}
public String getSecurity() {
return security;
}
public void setSecurity(String security) {
this.security = security;
}
public BigDecimal getAmount() {
return amount;
}
public void setAmount(BigDecimal amount) {
this.amount = amount;
}
}

View file

@ -3,6 +3,7 @@ package ru.spcex.clearing.registry.reports.bean;
import com.opencsv.bean.CsvBindByName;
import com.opencsv.bean.CsvBindByPosition;
import com.opencsv.bean.CsvDate;
import com.opencsv.bean.CsvNumber;
import java.math.BigDecimal;
import java.time.LocalDate;
@ -41,6 +42,7 @@ public class MoneyBalanceRegisterReport implements CSVReport {
@CsvBindByName(column = "Остаток денежных средств")
@CsvBindByPosition(position = 7)
@CsvNumber(value = "#0.00", writeFormat = "#0.00")
private BigDecimal sum;

View file

@ -0,0 +1,148 @@
package ru.spcex.clearing.registry.reports.bean;
import com.opencsv.bean.CsvBindByName;
import com.opencsv.bean.CsvBindByPosition;
import com.opencsv.bean.CsvDate;
import com.opencsv.bean.CsvNumber;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalTime;
public class MoneyPaymentInstructionRegisterReport implements CSVReport {
@CsvBindByName(column = "Номер распоряжения")
@CsvBindByPosition(position = 0)
private Long number;
@CsvBindByName(column = "Дата распоряжения")
@CsvBindByPosition(position = 1)
@CsvDate(value = "dd.MM.yyyy")
private LocalDate date;
@CsvBindByName(column = "Время формирования")
@CsvBindByPosition(position = 2)
@CsvDate(value = "HH:mm:ss")
private LocalTime time;
@CsvBindByName(column = "Номер торгового банковского/клирингового счета списания")
@CsvBindByPosition(position = 3)
private String accountSender;
@CsvBindByName(column = "Наименование владельца счета списания")
@CsvBindByPosition(position = 4)
private String sender;
@CsvBindByName(column = "Код владельца счета списания")
@CsvBindByPosition(position = 5)
private String codeSender;
@CsvBindByName(column = "Номер торгового банковского/клирингового счета зачисления")
@CsvBindByPosition(position = 6)
private String accountAddressee;
@CsvBindByName(column = "Наименование владельца счета зачисления")
@CsvBindByPosition(position = 7)
private String addressee;
@CsvBindByName(column = "Код владельца счета зачисления")
@CsvBindByPosition(position = 8)
private String codeAddressee;
@CsvBindByName(column = "Код валюты")
@CsvBindByPosition(position = 9)
private String currencyCode;
@CsvBindByName(column = "Сумма денежных средств")
@CsvBindByPosition(position = 10)
@CsvNumber(value = "#0.00", writeFormat = "#0.00")
private BigDecimal sum;
public Long getNumber() {
return number;
}
public void setNumber(Long number) {
this.number = number;
}
public LocalDate getDate() {
return date;
}
public void setDate(LocalDate date) {
this.date = date;
}
public LocalTime getTime() {
return time;
}
public void setTime(LocalTime time) {
this.time = time;
}
public String getAccountSender() {
return accountSender;
}
public void setAccountSender(String accountSender) {
this.accountSender = accountSender;
}
public String getSender() {
return sender;
}
public void setSender(String sender) {
this.sender = sender;
}
public String getCodeSender() {
return codeSender;
}
public void setCodeSender(String codeSender) {
this.codeSender = codeSender;
}
public String getAccountAddressee() {
return accountAddressee;
}
public void setAccountAddressee(String accountAddressee) {
this.accountAddressee = accountAddressee;
}
public String getAddressee() {
return addressee;
}
public void setAddressee(String addressee) {
this.addressee = addressee;
}
public String getCodeAddressee() {
return codeAddressee;
}
public void setCodeAddressee(String codeAddressee) {
this.codeAddressee = codeAddressee;
}
public String getCurrencyCode() {
return currencyCode;
}
public void setCurrencyCode(String currencyCode) {
this.currencyCode = currencyCode;
}
public BigDecimal getSum() {
return sum;
}
public void setSum(BigDecimal sum) {
this.sum = sum;
}
}

View file

@ -0,0 +1,82 @@
package ru.spcex.clearing.registry.reports.builders;
import ru.clearing.classes.statics.data.account.Account;
import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.payment.PaymentInstruction;
import ru.clearing.classes.statics.data.security.Security;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.registry.reports.bean.DepoPaymentInstructionRegisterReport;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import java.time.LocalTime;
import java.time.ZoneId;
public class DepoPaymentInstructionRegisterReportBuilder extends CSVReportBuilder<DepoPaymentInstructionRegisterReport, PaymentInstruction> {
private final Imdg<Account> accountImdg;
private final Imdg<Company> companyImdg;
private final Imdg<Security> securityImdg;
public DepoPaymentInstructionRegisterReportBuilder(ImdgProvider imdgProvider) {
companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
accountImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Account, Account.class);
securityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Security, Security.class);
}
@Override
protected String reportName() {
return "depo_payment_instruction_register";
}
@Override
protected Class<DepoPaymentInstructionRegisterReport> getReportClass() {
return DepoPaymentInstructionRegisterReport.class;
}
@Override
protected DepoPaymentInstructionRegisterReport toRow(PaymentInstruction input) {
DepoPaymentInstructionRegisterReport entity = new DepoPaymentInstructionRegisterReport();
entity.setNumber(input.getId());
entity.setDate(input.getClearingDate());
if (input.getCreated() != null) entity.setTime(LocalTime.from(input.getCreated().atZone(ZoneId.systemDefault())));
if (input.getCreditLeg_accountId() != null) {
Account account = accountImdg.getSingleObjectByID(input.getCreditLeg_accountId());
if (account != null) entity.setAccountSender(account.getAccount());
}
if (input.getSenderId() != null) {
Company company = companyImdg.getSingleObjectByID(input.getSenderId());
if (company != null) {
entity.setSender(company.getShortName());
entity.setCodeSender(company.getClearingCode());
}
}
if (input.getDebitLeg_accountId() != null) {
Account account = accountImdg.getSingleObjectByID(input.getDebitLeg_accountId());
if (account != null) entity.setAccountAddressee(account.getAccount());
}
if (input.getAddresseeId() != null) {
Company company = companyImdg.getSingleObjectByID(input.getAddresseeId());
if (company != null) {
entity.setAddressee(company.getShortName());
entity.setCodeAddressee(company.getClearingCode());
}
}
if (input.getCreditLeg_securityId() != null) {
Security security = securityImdg.getSingleObjectByID(input.getCreditLeg_securityId());
if (security != null) entity.setSecurity(security.getSecuritySymbol());
}
entity.setAmount(input.getCreditLeg_amount());
return entity;
}
}

View file

@ -0,0 +1,75 @@
package ru.spcex.clearing.registry.reports.builders;
import ru.clearing.classes.statics.data.account.Account;
import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.payment.PaymentInstruction;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.registry.reports.bean.MoneyPaymentInstructionRegisterReport;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import java.time.LocalTime;
import java.time.ZoneId;
public class MoneyPaymentInstructionRegisterReportBuilder extends CSVReportBuilder<MoneyPaymentInstructionRegisterReport, PaymentInstruction> {
private final Imdg<Account> accountImdg;
private final Imdg<Company> companyImdg;
public MoneyPaymentInstructionRegisterReportBuilder(ImdgProvider imdgProvider) {
companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
accountImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Account, Account.class);
}
@Override
protected String reportName() {
return "money_payment_instruction_register";
}
@Override
protected Class<MoneyPaymentInstructionRegisterReport> getReportClass() {
return MoneyPaymentInstructionRegisterReport.class;
}
@Override
protected MoneyPaymentInstructionRegisterReport toRow(PaymentInstruction input) {
MoneyPaymentInstructionRegisterReport entity = new MoneyPaymentInstructionRegisterReport();
entity.setNumber(input.getId());
entity.setDate(input.getClearingDate());
if (input.getCreated() != null) entity.setTime(LocalTime.from(input.getCreated().atZone(ZoneId.systemDefault())));
if (input.getCreditLeg_accountId() != null) {
Account account = accountImdg.getSingleObjectByID(input.getCreditLeg_accountId());
if (account != null) entity.setAccountSender(account.getAccount());
}
if (input.getSenderId() != null) {
Company company = companyImdg.getSingleObjectByID(input.getSenderId());
if (company != null) {
entity.setSender(company.getShortName());
entity.setCodeSender(company.getClearingCode());
}
}
if (input.getDebitLeg_accountId() != null) {
Account account = accountImdg.getSingleObjectByID(input.getDebitLeg_accountId());
if (account != null) entity.setAccountAddressee(account.getAccount());
}
if (input.getAddresseeId() != null) {
Company company = companyImdg.getSingleObjectByID(input.getAddresseeId());
if (company != null) {
entity.setAddressee(company.getShortName());
entity.setCodeAddressee(company.getClearingCode());
}
}
entity.setCurrencyCode(input.getCreditLeg_currencyCode());
entity.setSum(input.getCreditLeg_amount());
return entity;
}
}

View file

@ -6,6 +6,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import ru.clearing.classes.statics.data.account.Account;
import ru.clearing.classes.statics.data.misc.Session;
@ -17,6 +18,10 @@ import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.schedule.LauncherCommandRequest;
import ru.spcex.clearing.platform.messaging.service.QueueConsumer;
import ru.spcex.clearing.registry.config.SFTPReportsConfig;
import ru.spcex.clearing.registry.config.settings.RegistryServiceSettings;
import ru.spcex.clearing.registry.reports.ReportUtils;
import ru.spcex.clearing.registry.reports.builders.DepoPaymentInstructionRegisterReportBuilder;
import ru.spcex.clearing.registry.util.PreClearMap;
import ru.spcex.platform.enumeration.AccountType;
import ru.spcex.platform.enumeration.TransactionStatus;
@ -24,11 +29,9 @@ import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.utils.validation.IValidator;
import java.io.File;
import java.time.Instant;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Map;
import java.util.Optional;
import java.util.*;
import java.util.function.Function;
import static ru.spcex.platform.enumeration.Task.createRegistry_GORD;
@ -47,11 +50,22 @@ public class DepoPaymentInstructionRegisterService extends QueueConsumer impleme
private final Function<Map<String, ?>, IValidator> fieldValuesValidator;
private final PreClearMap<DepoPaymentInstructionRegister> preClearMap;
private final DepoPaymentInstructionRegisterReportBuilder reportBuilder;
private final File outFolder;
private final RegistryServiceSettings settings;
private final SFTPReportsConfig.ReportsGateway reportsSftpGateway;
private final boolean deleteAfterSend;
@Autowired
public DepoPaymentInstructionRegisterService(Consumer<String, Object> kafkaQueue,
Producer<String, Object> kafkaProducer,
ImdgProvider imdgProvider,
Function<Map<String, ?>, IValidator> fieldValuesValidator) {
Function<Map<String, ?>, IValidator> fieldValuesValidator,
@Qualifier("reportOutDir") File outFolder,
RegistryServiceSettings settings,
SFTPReportsConfig.ReportsGateway reportsSftpGateway) {
super(kafkaQueue, kafkaProducer);
this.depoPaymentInstructionRegisterMap = imdgProvider.getImdg(IMDGDistributedNames.Map_DepoPaymentInstructionRegister, DepoPaymentInstructionRegister.class);
this.paymentInstructionMap = imdgProvider.getImdg(IMDGDistributedNames.Map_PaymentInstruction, PaymentInstruction.class);
@ -61,6 +75,11 @@ public class DepoPaymentInstructionRegisterService extends QueueConsumer impleme
this.accountMap = imdgProvider.getImdg(IMDGDistributedNames.Map_Account, Account.class);
this.fieldValuesValidator = fieldValuesValidator;
preClearMap = PreClearMap.instanceForInstantField(depoPaymentInstructionRegisterMap, "created");
reportBuilder = new DepoPaymentInstructionRegisterReportBuilder(imdgProvider);
this.outFolder = outFolder;
this.settings = settings;
this.reportsSftpGateway = reportsSftpGateway;
this.deleteAfterSend = settings.getReportsStore().isDeleteAfterSend();
}
@Override
@ -73,6 +92,7 @@ public class DepoPaymentInstructionRegisterService extends QueueConsumer impleme
public void depoPaymentInstructionRegisterNew(BaseRequest<LauncherCommandRequest> userRequest) {
boolean csvMode = settings.isCsvMode();
log.debug("LauncherCommandRequest received from {}", createRegistry_GORR.topic());
String piQuery = "transactionStatus='" + TransactionStatus.sent.getKey() + "' OR transactionStatus = '" +
@ -97,12 +117,18 @@ public class DepoPaymentInstructionRegisterService extends QueueConsumer impleme
}
paymentInstructions = null;
log.debug("Filtered {} PaymentInstruction, with depo account's", depoPaymentInstructions.size());
preClearMap.preClearMap();
if (!csvMode) preClearMap.preClearMap();
List<PaymentInstruction> paymentInstructionsForReport = new ArrayList<>();
for (PaymentInstruction paymentInstruction : depoPaymentInstructions) {
if (isDuplicateInMap(paymentInstruction).isEmpty()) {
insertDepoPaymentInstructionRegister(paymentInstruction);
if (!csvMode) insertDepoPaymentInstructionRegister(paymentInstruction);
else paymentInstructionsForReport.add(paymentInstruction);
}
}
if (csvMode) {
File reportFile = reportBuilder.buildReport(paymentInstructionsForReport, outFolder);
ReportUtils.sendFilesToSftp(List.of(reportFile), reportsSftpGateway, deleteAfterSend);
}
log.debug("successfully processed");
}

View file

@ -6,6 +6,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import ru.clearing.classes.statics.data.account.Account;
import ru.clearing.classes.statics.data.company.Company;
@ -16,6 +17,10 @@ import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.schedule.LauncherCommandRequest;
import ru.spcex.clearing.platform.messaging.service.QueueConsumer;
import ru.spcex.clearing.registry.config.SFTPReportsConfig;
import ru.spcex.clearing.registry.config.settings.RegistryServiceSettings;
import ru.spcex.clearing.registry.reports.ReportUtils;
import ru.spcex.clearing.registry.reports.builders.MoneyPaymentInstructionRegisterReportBuilder;
import ru.spcex.clearing.registry.util.PreClearMap;
import ru.spcex.platform.enumeration.AccountType;
import ru.spcex.platform.enumeration.TransactionStatus;
@ -24,11 +29,9 @@ import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.utils.enumeration.IEnumKey;
import ru.spcex.platform.utils.validation.IValidator;
import java.io.File;
import java.time.Instant;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Map;
import java.util.Optional;
import java.util.*;
import java.util.function.Function;
import static ru.spcex.platform.enumeration.Task.createRegistry_GORR;
@ -45,11 +48,22 @@ public class MoneyPaymentInstructionRegisterService extends QueueConsumer implem
private final Imdg<Account> accountMap;
private final PreClearMap<MoneyPaymentInstructionRegister> preClearMap;
private final MoneyPaymentInstructionRegisterReportBuilder reportBuilder;
private final File outFolder;
private final RegistryServiceSettings settings;
private final SFTPReportsConfig.ReportsGateway reportsSftpGateway;
private final boolean deleteAfterSend;
@Autowired
public MoneyPaymentInstructionRegisterService(Consumer<String, Object> kafkaQueue,
Producer<String, Object> kafkaProducer,
ImdgProvider imdgProvider,
Function<Map<String, ?>, IValidator> fieldValuesValidator) {
Function<Map<String, ?>, IValidator> fieldValuesValidator,
@Qualifier("reportOutDir") File outFolder,
RegistryServiceSettings settings,
SFTPReportsConfig.ReportsGateway reportsSftpGateway) {
super(kafkaQueue, kafkaProducer);
this.moneyPaymentInstructionRegisterMap = imdgProvider.getImdg(IMDGDistributedNames.Map_MoneyPaymentInstructionRegister, MoneyPaymentInstructionRegister.class);
this.paymentInstructionMap = imdgProvider.getImdg(IMDGDistributedNames.Map_PaymentInstruction, PaymentInstruction.class);
@ -58,6 +72,11 @@ public class MoneyPaymentInstructionRegisterService extends QueueConsumer implem
this.accountMap = imdgProvider.getImdg(IMDGDistributedNames.Map_Account, Account.class);
this.fieldValuesValidator = fieldValuesValidator;
preClearMap = PreClearMap.instanceForInstantField(moneyPaymentInstructionRegisterMap, "created");
reportBuilder = new MoneyPaymentInstructionRegisterReportBuilder(imdgProvider);
this.outFolder = outFolder;
this.settings = settings;
this.reportsSftpGateway = reportsSftpGateway;
this.deleteAfterSend = settings.getReportsStore().isDeleteAfterSend();
}
@Override
@ -69,6 +88,7 @@ public class MoneyPaymentInstructionRegisterService extends QueueConsumer implem
}
public void moneyPaymentInstructionRegisterNew(BaseRequest<LauncherCommandRequest> userRequest) {
boolean csvMode = settings.isCsvMode();
log.debug("LauncherCommandRequest received from {}", TOPIC_NAME);
String piQuery = "transactionStatus='" + TransactionStatus.sent.getKey() + "' OR transactionStatus = '" +
@ -94,12 +114,18 @@ public class MoneyPaymentInstructionRegisterService extends QueueConsumer implem
paymentInstructions = null;
log.debug("Filtered {} PaymentInstruction, with money account's", moneyPaymentInstructions.size());
preClearMap.preClearMap();
if (!csvMode) preClearMap.preClearMap();
List<PaymentInstruction> paymentInstructionsForReport = new ArrayList<>();
for (PaymentInstruction paymentInstruction : moneyPaymentInstructions) {
if (isDuplicateInMap(paymentInstruction).isEmpty()) {
insertMoneyPaymentInstructionRegister(paymentInstruction);
if (!csvMode) insertMoneyPaymentInstructionRegister(paymentInstruction);
else paymentInstructionsForReport.add(paymentInstruction);
}
}
if (csvMode) {
File reportFile = reportBuilder.buildReport(paymentInstructionsForReport, outFolder);
ReportUtils.sendFilesToSftp(List.of(reportFile), reportsSftpGateway, deleteAfterSend);
}
log.debug("successfully processed");
}

View file

@ -1,10 +1,12 @@
package ru.spcex.clearing.registry.service;
import com.opencsv.exceptions.CsvValidationException;
import org.apache.kafka.clients.consumer.MockConsumer;
import org.apache.kafka.clients.producer.Producer;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.test.context.ContextConfiguration;
@ -17,7 +19,10 @@ import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
import ru.clearing.platform.dictionary.InOutDirectionDictionary;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.platform.messaging.domain.cud.schedule.LauncherCommandRequest;
import ru.spcex.clearing.registry.config.SFTPTestConfig;
import ru.spcex.clearing.registry.config.TestConfig;
import ru.spcex.clearing.registry.config.ValidationConfig;
import ru.spcex.clearing.registry.config.settings.RegistryServiceSettings;
import ru.spcex.clearing.test.TestUtils;
import ru.spcex.clearing.test.config.ImdgTestConfig;
import ru.spcex.clearing.test.config.KafkaTestConfig;
@ -27,8 +32,10 @@ import ru.spcex.platform.enumeration.TransactionStatus;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import javax.annotation.PostConstruct;
import java.io.File;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.Collection;
import static org.junit.jupiter.api.Assertions.assertEquals;
@ -39,8 +46,10 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
DepoPaymentInstructionRegisterService.class,
ImdgTestConfig.class,
KafkaTestConfig.class,
TestConfig.class,
SFTPTestConfig.class,
})
class DepoPaymentInstructionRegisterServiceTest {
class DepoPaymentInstructionRegisterServiceTest implements InitializingBean {
private Imdg<DepoPaymentInstructionRegister> depoPaymentInstructionRegisterMap;
private Imdg<PaymentInstruction> paymentInstructionMap;
private Imdg<Session> sessionMap;
@ -61,6 +70,9 @@ class DepoPaymentInstructionRegisterServiceTest {
@Autowired
private DepoPaymentInstructionRegisterService depoPaymentInstructionRegisterService;
@Autowired
private RegistryServiceSettings settings;
@Autowired
@Qualifier("hazelcastServiceTest")
private ImdgProvider imdgProvider;
@ -69,9 +81,12 @@ class DepoPaymentInstructionRegisterServiceTest {
@Qualifier("mockProducer")
private Producer<String, Object> producer;
@Autowired
@Qualifier("reportOutDir")
private File outFolder;
@PostConstruct
private void init() {
@Override
public void afterPropertiesSet() throws Exception {
ImdgTestConfig.waitAvailableImdgProviderAndAddAdminWithDefaultId();
//initializing of imdg
@ -83,11 +98,6 @@ class DepoPaymentInstructionRegisterServiceTest {
accountMap = imdgProvider.getImdg(IMDGDistributedNames.Map_Account, Account.class);
// initialing objects for imdg repos
}
@Test
@Order(1)
void executionRegisterNewForClearingDate() {
Session session = new Session();
session.setSection(SESSION_SECTION);
session.setId(SESSION_ID);
@ -119,7 +129,13 @@ class DepoPaymentInstructionRegisterServiceTest {
account.setId(TRADING_CLEARING_REGISTRY_DEPO_ACCOUNT_ID);
account.setAccountType(AccountType.Depo.getKey());
accountMap.update(account);
}
@Test
@Order(1)
void executionRegisterNewForClearingDate() {
boolean oldCsvMode = settings.isCsvMode();
settings.setCsvMode(false);
//making launcherCommand
LauncherCommandRequest launcherCommandRequest = new LauncherCommandRequest();
@ -142,5 +158,36 @@ class DepoPaymentInstructionRegisterServiceTest {
assertEquals(TRADING_CLEARING_REGISTRY_CODE, depoPaymentInstructionRegister.getTradingClearingRegistry());
assertEquals(IN_OUT_DIRECTION_DICTIONARY_ID, depoPaymentInstructionRegister.getDirection());
assertEquals(SET_CREDIT_LEG_AMOUNT, depoPaymentInstructionRegister.getQuantity());
settings.setCsvMode(oldCsvMode);
}
@Test
@Order(2)
void executionRegisterNewForClearingDate_CSV() throws CsvValidationException, IOException {
ReportTestUtils.resetDir(outFolder);
boolean oldCsvMode = settings.isCsvMode();
settings.setCsvMode(true);
//making launcherCommand
LauncherCommandRequest launcherCommandRequest = new LauncherCommandRequest();
String jsonString = TestUtils.getJsonStringForSystem(launcherCommandRequest, 0L);
TestUtils.addRecordToKafka((MockConsumer) depoPaymentInstructionRegisterService.getConsumer(),
Task.createRegistry_GORD.topic(),
requestCount++,
0,
jsonString);
TestUtils.waitingSendAndCheckRecord(0L, producer);
File outFile = outFolder.listFiles()[0];
File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports/depo_payment_instruction_register_expected.csv").getFile());
ReportTestUtils.compareCSVFiles(expectedFile, outFile, Arrays.asList("Время формирования", "Дата распоряжения"));
settings.setCsvMode(oldCsvMode);
ReportTestUtils.deleteDir(outFolder);
}
}

View file

@ -163,6 +163,7 @@ class MoneyBalanceRegisterServiceTest implements InitializingBean {
@Test
@Order(2)
void executionRegisterNewForClearingDate_CSV() throws CsvValidationException, IOException {
ReportTestUtils.resetDir(outFolder);
RegistryHistory source = init();
boolean oldCsvMode = settings.isCsvMode();
settings.setCsvMode(true);

View file

@ -1,10 +1,12 @@
package ru.spcex.clearing.registry.service;
import com.opencsv.exceptions.CsvValidationException;
import org.apache.kafka.clients.consumer.MockConsumer;
import org.apache.kafka.clients.producer.Producer;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.test.context.ContextConfiguration;
@ -16,7 +18,10 @@ import ru.clearing.classes.statics.data.payment.PaymentInstruction;
import ru.clearing.classes.statics.data.register.MoneyPaymentInstructionRegister;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.platform.messaging.domain.cud.schedule.LauncherCommandRequest;
import ru.spcex.clearing.registry.config.SFTPTestConfig;
import ru.spcex.clearing.registry.config.TestConfig;
import ru.spcex.clearing.registry.config.ValidationConfig;
import ru.spcex.clearing.registry.config.settings.RegistryServiceSettings;
import ru.spcex.clearing.test.TestUtils;
import ru.spcex.clearing.test.config.ImdgTestConfig;
import ru.spcex.clearing.test.config.KafkaTestConfig;
@ -26,8 +31,11 @@ import ru.spcex.platform.enumeration.TransactionStatus;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import javax.annotation.PostConstruct;
import java.io.File;
import java.io.IOException;
import java.math.BigDecimal;
import java.time.Instant;
import java.util.Arrays;
import java.util.Collection;
import static org.junit.jupiter.api.Assertions.assertEquals;
@ -38,8 +46,10 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
MoneyPaymentInstructionRegisterService.class,
ImdgTestConfig.class,
KafkaTestConfig.class,
TestConfig.class,
SFTPTestConfig.class,
})
class MoneyPaymentInstructionRegisterServiceTest {
class MoneyPaymentInstructionRegisterServiceTest implements InitializingBean {
private static int requestCount = 0;
private Imdg<MoneyPaymentInstructionRegister> moneyPaymentInstructionRegisterMap;
private Imdg<PaymentInstruction> paymentInstructionMap;
@ -65,19 +75,22 @@ class MoneyPaymentInstructionRegisterServiceTest {
@Autowired
private MoneyPaymentInstructionRegisterService moneyPaymentInstructionRegisterService;
@PostConstruct
private void init() {
@Autowired
@Qualifier("reportOutDir")
private File outFolder;
@Autowired
private RegistryServiceSettings settings;
@Override
public void afterPropertiesSet() throws Exception {
ImdgTestConfig.waitAvailableImdgProviderAndAddAdminWithDefaultId();
companyMap = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
moneyPaymentInstructionRegisterMap = imdgProvider.getImdg(IMDGDistributedNames.Map_MoneyPaymentInstructionRegister, MoneyPaymentInstructionRegister.class);
paymentInstructionMap = imdgProvider.getImdg(IMDGDistributedNames.Map_PaymentInstruction, PaymentInstruction.class);
sessionMap = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class);
accountMap = imdgProvider.getImdg(IMDGDistributedNames.Map_Account, Account.class);
}
@Test
@Order(1)
void executionRegisterNewForClearingDate() {
Long sessionId = 1L;
Long companySenderId = 1L;
Long companyAddresseeId = 2L;
@ -95,6 +108,7 @@ class MoneyPaymentInstructionRegisterServiceTest {
paymentInstruction.setSenderId(companySenderId);
paymentInstruction.setAddresseeId(companyAddresseeId);
paymentInstruction.setTransactionStatus(TransactionStatus.sent.getKey());
paymentInstruction.setCreated(Instant.now());
paymentInstructionMap.insert(paymentInstruction);
Company companySender = new Company();
companySender.setId(companySenderId);
@ -109,6 +123,15 @@ class MoneyPaymentInstructionRegisterServiceTest {
account.setId(CREDITLEG_ACCOUNT_ID_CONST);
account.setAccountType(AccountType.Clrn.getKey());
accountMap.update(account);
}
@Test
@Order(1)
void executionRegisterNewForClearingDate() throws CsvValidationException, IOException {
boolean oldCsvMode = settings.isCsvMode();
settings.setCsvMode(false);
//making launcherCommand
LauncherCommandRequest launcherCommandRequest = new LauncherCommandRequest();
@ -131,5 +154,34 @@ class MoneyPaymentInstructionRegisterServiceTest {
assertEquals(DEBITLEG_ACCOUNT_CONST, moneyPaymentInstructionRegister.getDebitLegAccount());
assertEquals(COMPANY_SHORT_NAME_SENDER_CONST, moneyPaymentInstructionRegister.getSender());
assertEquals(COMPANY_SHORT_NAME_ADDRESSEE_CONST, moneyPaymentInstructionRegister.getAddressee());
settings.setCsvMode(oldCsvMode);
}
@Test
@Order(2)
void executionRegisterNewForClearingDate_CSV() throws CsvValidationException, IOException {
ReportTestUtils.resetDir(outFolder);
boolean oldCsvMode = settings.isCsvMode();
settings.setCsvMode(true);
//making launcherCommand
LauncherCommandRequest launcherCommandRequest = new LauncherCommandRequest();
String jsonString = TestUtils.getJsonStringForSystem(launcherCommandRequest, 0L);
TestUtils.addRecordToKafka((MockConsumer) moneyPaymentInstructionRegisterService.getConsumer(),
Task.createRegistry_GORR.topic(),
requestCount++,
0,
jsonString);
TestUtils.waitingSendAndCheckRecord(0L, producer);
File outFile = outFolder.listFiles()[0];
File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports/money_payment_instruction_register_expected.csv").getFile());
ReportTestUtils.compareCSVFiles(expectedFile, outFile, Arrays.asList("Время формирования", "Дата распоряжения"));
settings.setCsvMode(oldCsvMode);
ReportTestUtils.deleteDir(outFolder);
}
}

View file

@ -0,0 +1,2 @@
"Номер распоряжения","Дата распоряжения","Время формирования","Номер торгового банковского/клирингового счета списания","Наименование владельца счета списания","Код владельца счета списания","Номер торгового банковского/клирингового счета зачисления","Наименование владельца счета зачисления","Код владельца счета зачисления","Код ЦБ","Количество ЦБ"
"1",,,,,,,,,,"1.00"
1 Номер распоряжения Дата распоряжения Время формирования Номер торгового банковского/клирингового счета списания Наименование владельца счета списания Код владельца счета списания Номер торгового банковского/клирингового счета зачисления Наименование владельца счета зачисления Код владельца счета зачисления Код ЦБ Количество ЦБ
2 1 1.00

View file

@ -0,0 +1,2 @@
"Номер распоряжения","Дата распоряжения","Время формирования","Номер торгового банковского/клирингового счета списания","Наименование владельца счета списания","Код владельца счета списания","Номер торгового банковского/клирингового счета зачисления","Наименование владельца счета зачисления","Код владельца счета зачисления","Код валюты","Сумма денежных средств"
"1",,"12:48:14",,"COMPANY_SHORT_NAME_SENDER_CONST",,,"COMPANY_SHORT_NAME_ADDRESSEE_CONST",,"CREDITLEG_CURRENCYCODE_CONST","1.00"
1 Номер распоряжения Дата распоряжения Время формирования Номер торгового банковского/клирингового счета списания Наименование владельца счета списания Код владельца счета списания Номер торгового банковского/клирингового счета зачисления Наименование владельца счета зачисления Код владельца счета зачисления Код валюты Сумма денежных средств
2 1 12:48:14 COMPANY_SHORT_NAME_SENDER_CONST COMPANY_SHORT_NAME_ADDRESSEE_CONST CREDITLEG_CURRENCYCODE_CONST 1.00