Поправил ошибки, добавил отправку по sFTP.
This commit is contained in:
parent
2b038a3b04
commit
181291c42e
30 changed files with 1027 additions and 208 deletions
|
|
@ -25,6 +25,14 @@
|
||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
<artifactId>spring-boot-autoconfigure</artifactId>
|
<artifactId>spring-boot-autoconfigure</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.integration</groupId>
|
||||||
|
<artifactId>spring-integration-sftp</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
|
<artifactId>jackson-databind</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<!-- DBF files -->
|
<!-- DBF files -->
|
||||||
<dependency>
|
<dependency>
|
||||||
|
|
@ -45,6 +53,21 @@
|
||||||
<groupId>ru.spcex.clearing</groupId>
|
<groupId>ru.spcex.clearing</groupId>
|
||||||
<artifactId>classes</artifactId>
|
<artifactId>classes</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>ru.spcex.clearing</groupId>
|
||||||
|
<artifactId>classes</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<!-- TEST -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-test</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>ru.spcex.clearing</groupId>
|
||||||
|
<artifactId>test-clearing</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,82 +1,11 @@
|
||||||
package ru.spcex.clearing.dbf.exporter.config;
|
package ru.spcex.clearing.dbf.exporter.config;
|
||||||
|
|
||||||
import org.springframework.beans.factory.annotation.Qualifier;
|
|
||||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||||
import org.springframework.context.ApplicationContext;
|
|
||||||
import org.springframework.context.annotation.Bean;
|
|
||||||
import org.springframework.context.annotation.ComponentScan;
|
import org.springframework.context.annotation.ComponentScan;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
|
||||||
import ru.spcex.clearing.dbf.exporter.config.settings.ExportDBFServiceSettings;
|
|
||||||
import ru.spcex.clearing.dbf.exporter.logic.stages.ExportFromHazelcast;
|
|
||||||
import ru.spcex.clearing.dbf.exporter.logic.stages.Journal;
|
|
||||||
import ru.spcex.clearing.dbf.exporter.logic.stages.PrepareDBFFile;
|
|
||||||
import ru.spcex.clearing.dbf.exporter.logic.stages.Stage;
|
|
||||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
|
||||||
import ru.spcex.platform.imdg.iml.hazelcast.config.HazelcastClientParams;
|
|
||||||
import ru.spcex.platform.imdg.iml.hazelcast.service.HazelcastService;
|
|
||||||
|
|
||||||
import java.util.LinkedList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
@Configuration
|
@Configuration
|
||||||
@EnableConfigurationProperties
|
@EnableConfigurationProperties
|
||||||
@ComponentScan(basePackages = {"ru.spcex.clearing.dbf.exporter"})
|
@ComponentScan(basePackages = {"ru.spcex.clearing.dbf.exporter"})
|
||||||
public class DBFExporterConfig {
|
public class DBFExporterConfig {
|
||||||
|
|
||||||
@Bean("taskExecutorHazelcastClientInitializer")
|
|
||||||
public ThreadPoolTaskExecutor taskExecutorHazelcastClientInitializer() {
|
|
||||||
return createThreadPoolTaskExecutor(1, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Bean("taskExecutorIdGeneratorAwaiter")
|
|
||||||
public ThreadPoolTaskExecutor taskExecutorIdGeneratorAwaiter() {
|
|
||||||
return createThreadPoolTaskExecutor(1, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Bean("imdgProvider")
|
|
||||||
public ImdgProvider imdgProvider(@Qualifier("taskExecutorHazelcastClientInitializer") ThreadPoolTaskExecutor taskExecutorHazelcastClientInitializer,
|
|
||||||
@Qualifier("taskExecutorIdGeneratorAwaiter") ThreadPoolTaskExecutor taskExecutorIdGeneratorAwaiter,
|
|
||||||
ExportDBFServiceSettings settings) {
|
|
||||||
HazelcastClientParams params = new HazelcastClientParams();
|
|
||||||
params.setClusterMembers(settings.getHazelcast().getClusterMembers());
|
|
||||||
params.setLogin(settings.getHazelcast().getLogin());
|
|
||||||
params.setPassword(settings.getHazelcast().getPassword());
|
|
||||||
return new HazelcastService(taskExecutorHazelcastClientInitializer, taskExecutorIdGeneratorAwaiter, params);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Bean("pipeline")
|
|
||||||
public List<Stage> pipeline(ApplicationContext context) {
|
|
||||||
List<Stage> pipeline = new LinkedList<>();
|
|
||||||
|
|
||||||
pipeline.add(context.getBean(PrepareDBFFile.class));
|
|
||||||
pipeline.add(context.getBean(ExportFromHazelcast.class));
|
|
||||||
pipeline.add(context.getBean(Journal.class));
|
|
||||||
|
|
||||||
return pipeline;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Bean("executor")
|
|
||||||
public ThreadPoolTaskExecutor executor(ExportDBFServiceSettings settings) {
|
|
||||||
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
|
|
||||||
executor.setMaxPoolSize(settings.getCommon().getThreadsCount());
|
|
||||||
executor.setCorePoolSize(settings.getCommon().getThreadsCount());
|
|
||||||
executor.setThreadNamePrefix("dbf-exporter");
|
|
||||||
executor.setWaitForTasksToCompleteOnShutdown(true);
|
|
||||||
executor.setAwaitTerminationSeconds(300);
|
|
||||||
executor.initialize();
|
|
||||||
return executor;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static ThreadPoolTaskExecutor createThreadPoolTaskExecutor(int maxPoolSz, boolean waitForCompletion) {
|
|
||||||
ThreadPoolTaskExecutor pool = new ThreadPoolTaskExecutor();
|
|
||||||
if (maxPoolSz > 2) {
|
|
||||||
pool.setKeepAliveSeconds(60);
|
|
||||||
pool.setAllowCoreThreadTimeOut(true);
|
|
||||||
}
|
|
||||||
pool.setCorePoolSize(maxPoolSz);
|
|
||||||
pool.setWaitForTasksToCompleteOnShutdown(waitForCompletion);
|
|
||||||
return pool;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,63 @@
|
||||||
|
package ru.spcex.clearing.dbf.exporter.config;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Qualifier;
|
||||||
|
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.ComponentScan;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
||||||
|
import ru.spcex.clearing.dbf.exporter.config.settings.ExportDBFServiceSettings;
|
||||||
|
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||||
|
import ru.spcex.platform.imdg.iml.hazelcast.config.HazelcastClientParams;
|
||||||
|
import ru.spcex.platform.imdg.iml.hazelcast.service.HazelcastService;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
@EnableConfigurationProperties
|
||||||
|
@ComponentScan(basePackages = {"ru.spcex.clearing.dbf.exporter"})
|
||||||
|
public class ImdgConfig {
|
||||||
|
|
||||||
|
@Bean("taskExecutorHazelcastClientInitializer")
|
||||||
|
public ThreadPoolTaskExecutor taskExecutorHazelcastClientInitializer() {
|
||||||
|
return createThreadPoolTaskExecutor(1, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean("taskExecutorIdGeneratorAwaiter")
|
||||||
|
public ThreadPoolTaskExecutor taskExecutorIdGeneratorAwaiter() {
|
||||||
|
return createThreadPoolTaskExecutor(1, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean("imdgProvider")
|
||||||
|
public ImdgProvider imdgProvider(@Qualifier("taskExecutorHazelcastClientInitializer") ThreadPoolTaskExecutor taskExecutorHazelcastClientInitializer,
|
||||||
|
@Qualifier("taskExecutorIdGeneratorAwaiter") ThreadPoolTaskExecutor taskExecutorIdGeneratorAwaiter,
|
||||||
|
ExportDBFServiceSettings settings) {
|
||||||
|
HazelcastClientParams params = new HazelcastClientParams();
|
||||||
|
params.setClusterMembers(settings.getHazelcast().getClusterMembers());
|
||||||
|
params.setLogin(settings.getHazelcast().getLogin());
|
||||||
|
params.setPassword(settings.getHazelcast().getPassword());
|
||||||
|
return new HazelcastService(taskExecutorHazelcastClientInitializer, taskExecutorIdGeneratorAwaiter, params);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean("executor")
|
||||||
|
public ThreadPoolTaskExecutor executor(ExportDBFServiceSettings settings) {
|
||||||
|
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
|
||||||
|
executor.setMaxPoolSize(settings.getCommon().getThreadsCount());
|
||||||
|
executor.setCorePoolSize(settings.getCommon().getThreadsCount());
|
||||||
|
executor.setThreadNamePrefix("dbf-exporter");
|
||||||
|
executor.setWaitForTasksToCompleteOnShutdown(true);
|
||||||
|
executor.setAwaitTerminationSeconds(300);
|
||||||
|
executor.initialize();
|
||||||
|
return executor;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static ThreadPoolTaskExecutor createThreadPoolTaskExecutor(int maxPoolSz, boolean waitForCompletion) {
|
||||||
|
ThreadPoolTaskExecutor pool = new ThreadPoolTaskExecutor();
|
||||||
|
if (maxPoolSz > 2) {
|
||||||
|
pool.setKeepAliveSeconds(60);
|
||||||
|
pool.setAllowCoreThreadTimeOut(true);
|
||||||
|
}
|
||||||
|
pool.setCorePoolSize(maxPoolSz);
|
||||||
|
pool.setWaitForTasksToCompleteOnShutdown(waitForCompletion);
|
||||||
|
return pool;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -17,6 +17,8 @@ import ru.spcex.platform.imdg.api.Imdg;
|
||||||
import ru.spcex.platform.imdg.api.ImdgId;
|
import ru.spcex.platform.imdg.api.ImdgId;
|
||||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||||
|
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
//отдельный конфиг для sender чтобы сделать required false
|
//отдельный конфиг для sender чтобы сделать required false
|
||||||
@Configuration
|
@Configuration
|
||||||
public class KafkaSenderConfig {
|
public class KafkaSenderConfig {
|
||||||
|
|
@ -49,14 +51,10 @@ public class KafkaSenderConfig {
|
||||||
|
|
||||||
// @Autowired(required = false)
|
// @Autowired(required = false)
|
||||||
@Bean
|
@Bean
|
||||||
public KafkaSender kafkaSender(KafkaTemplate<String, Object> kafkaTemplate,
|
public Supplier<KafkaSender> kafkaSenderSupplier(KafkaTemplate<String, Object> kafkaTemplate,
|
||||||
ImdgProvider imdgProvider) {
|
ImdgProvider imdgProvider) {
|
||||||
if (kafkaTemplate == null) {
|
|
||||||
log.info("Can not create KafkaSender: no kafka-producer settings");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
ImdgId imdgIdGenerator = imdgProvider.getImdgIdGenerator();
|
ImdgId imdgIdGenerator = imdgProvider.getImdgIdGenerator();
|
||||||
return KafkaSender
|
return () -> KafkaSender
|
||||||
.setup()
|
.setup()
|
||||||
.setKafkaTemplate(kafkaTemplate)
|
.setKafkaTemplate(kafkaTemplate)
|
||||||
.idGenerator(imdgIdGenerator::nextId)
|
.idGenerator(imdgIdGenerator::nextId)
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,26 @@
|
||||||
|
package ru.spcex.clearing.dbf.exporter.config;
|
||||||
|
|
||||||
|
import org.springframework.context.ApplicationContext;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import ru.spcex.clearing.dbf.exporter.logic.stages.ExportFromHazelcast;
|
||||||
|
import ru.spcex.clearing.dbf.exporter.logic.stages.Journal;
|
||||||
|
import ru.spcex.clearing.dbf.exporter.logic.stages.PrepareDBFFile;
|
||||||
|
import ru.spcex.clearing.dbf.exporter.logic.stages.Stage;
|
||||||
|
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
public class PipelineConfig {
|
||||||
|
@Bean("pipeline")
|
||||||
|
public List<Stage> pipeline(ApplicationContext context) {
|
||||||
|
List<Stage> pipeline = new LinkedList<>();
|
||||||
|
|
||||||
|
pipeline.add(context.getBean(PrepareDBFFile.class));
|
||||||
|
pipeline.add(context.getBean(ExportFromHazelcast.class));
|
||||||
|
pipeline.add(context.getBean(Journal.class));
|
||||||
|
|
||||||
|
return pipeline;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,95 @@
|
||||||
|
package ru.spcex.clearing.dbf.exporter.config;
|
||||||
|
|
||||||
|
import com.jcraft.jsch.ChannelSftp;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.expression.common.LiteralExpression;
|
||||||
|
import org.springframework.integration.annotation.Gateway;
|
||||||
|
import org.springframework.integration.annotation.MessagingGateway;
|
||||||
|
import org.springframework.integration.annotation.ServiceActivator;
|
||||||
|
import org.springframework.integration.channel.DirectChannel;
|
||||||
|
import org.springframework.integration.dsl.IntegrationFlow;
|
||||||
|
import org.springframework.integration.dsl.IntegrationFlows;
|
||||||
|
import org.springframework.integration.file.remote.session.CachingSessionFactory;
|
||||||
|
import org.springframework.integration.file.remote.session.SessionFactory;
|
||||||
|
import org.springframework.integration.sftp.gateway.SftpOutboundGateway;
|
||||||
|
import org.springframework.integration.sftp.outbound.SftpMessageHandler;
|
||||||
|
import org.springframework.integration.sftp.session.DefaultSftpSessionFactory;
|
||||||
|
import org.springframework.integration.sftp.session.SftpFileInfo;
|
||||||
|
import org.springframework.messaging.MessageChannel;
|
||||||
|
import org.springframework.messaging.MessageHandler;
|
||||||
|
import ru.spcex.clearing.dbf.exporter.config.settings.ExportDBFServiceSettings;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static org.springframework.integration.file.remote.gateway.AbstractRemoteFileOutboundGateway.Command.LS;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
public class SFTPConfig {
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public SessionFactory<ChannelSftp.LsEntry> sftpSessionFactory(ExportDBFServiceSettings settings) {
|
||||||
|
DefaultSftpSessionFactory factory = new DefaultSftpSessionFactory(true);
|
||||||
|
factory.setHost(settings.getStore().getServerIp());
|
||||||
|
factory.setPort(settings.getStore().getServerPort());
|
||||||
|
factory.setUser(settings.getStore().getUser());
|
||||||
|
factory.setPassword(settings.getStore().getPassword());
|
||||||
|
factory.setAllowUnknownKeys(true);
|
||||||
|
return new CachingSessionFactory<>(factory);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
@ServiceActivator(inputChannel = "toSftpChannel")
|
||||||
|
public MessageHandler handler(SessionFactory<ChannelSftp.LsEntry> sessionFactory, ExportDBFServiceSettings settings) {
|
||||||
|
SftpMessageHandler handler = new SftpMessageHandler(sessionFactory);
|
||||||
|
handler.setRemoteDirectoryExpression(new LiteralExpression(settings.getStore().getOutDir()));
|
||||||
|
handler.setAutoCreateDirectory(true);
|
||||||
|
handler.setFileNameGenerator(message -> {
|
||||||
|
if (message.getPayload() instanceof File) {
|
||||||
|
return ((File) message.getPayload()).getName();
|
||||||
|
}else {
|
||||||
|
throw new IllegalArgumentException("File must expected as payload.");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
@MessagingGateway
|
||||||
|
public interface DbfGateway {
|
||||||
|
@Gateway(requestChannel = "toSftpChannel")
|
||||||
|
void sendToSftp(File file);
|
||||||
|
|
||||||
|
@Gateway(requestChannel = "listSftpChannel")
|
||||||
|
List<SftpFileInfo> listFiles(String dir);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public MessageChannel listSftpChannel(SessionFactory<ChannelSftp.LsEntry> sessionFactory, ExportDBFServiceSettings settings) {
|
||||||
|
DirectChannel dc = new DirectChannel();
|
||||||
|
dc.subscribe(handlerList(sessionFactory, settings));
|
||||||
|
return dc;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public MessageChannel toSftpChannel(SessionFactory<ChannelSftp.LsEntry> sessionFactory, ExportDBFServiceSettings settings) {
|
||||||
|
DirectChannel dc = new DirectChannel();
|
||||||
|
dc.subscribe(handler(sessionFactory, settings));
|
||||||
|
return dc;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
@ServiceActivator(inputChannel = "listSftpChannel")
|
||||||
|
public MessageHandler handlerList(SessionFactory<ChannelSftp.LsEntry> sessionFactory, ExportDBFServiceSettings settings) {
|
||||||
|
String expression = "'/%s'".formatted(settings.getStore().getOutDir());
|
||||||
|
SftpOutboundGateway sftpOutboundGateway = new SftpOutboundGateway(sessionFactory, LS.getCommand(), expression);
|
||||||
|
return sftpOutboundGateway;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public IntegrationFlow sftpOutboundListFlow(SessionFactory<ChannelSftp.LsEntry> sessionFactory, ExportDBFServiceSettings settings) {
|
||||||
|
return IntegrationFlows.from("listSftpChannel")
|
||||||
|
.handle(new SftpOutboundGateway(sessionFactory, "ls", "payload")
|
||||||
|
).get();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -3,6 +3,43 @@ package ru.spcex.clearing.dbf.exporter.config.settings;
|
||||||
public class Store {
|
public class Store {
|
||||||
|
|
||||||
private String outDir;
|
private String outDir;
|
||||||
|
private String localTempDir;
|
||||||
|
private String user;
|
||||||
|
private String password;
|
||||||
|
private String serverIp;
|
||||||
|
private int serverPort;
|
||||||
|
|
||||||
|
public String getUser() {
|
||||||
|
return user;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUser(String user) {
|
||||||
|
this.user = user;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPassword() {
|
||||||
|
return password;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPassword(String password) {
|
||||||
|
this.password = password;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getServerIp() {
|
||||||
|
return serverIp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setServerIp(String serverIp) {
|
||||||
|
this.serverIp = serverIp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getServerPort() {
|
||||||
|
return serverPort;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setServerPort(int serverPort) {
|
||||||
|
this.serverPort = serverPort;
|
||||||
|
}
|
||||||
|
|
||||||
public String getOutDir() {
|
public String getOutDir() {
|
||||||
return outDir;
|
return outDir;
|
||||||
|
|
@ -11,4 +48,12 @@ public class Store {
|
||||||
public void setOutDir(String outDir) {
|
public void setOutDir(String outDir) {
|
||||||
this.outDir = outDir;
|
this.outDir = outDir;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getLocalTempDir() {
|
||||||
|
return localTempDir;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLocalTempDir(String localTempDir) {
|
||||||
|
this.localTempDir = localTempDir;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,13 @@
|
||||||
package ru.spcex.clearing.dbf.exporter.logic.data.enums;
|
package ru.spcex.clearing.dbf.exporter.logic.data.enums;
|
||||||
|
|
||||||
|
import org.springframework.integration.sftp.session.SftpFileInfo;
|
||||||
import ru.spcex.clearing.dbf.exporter.logic.data.ResultContainer;
|
import ru.spcex.clearing.dbf.exporter.logic.data.ResultContainer;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
import static ru.spcex.clearing.dbf.exporter.logic.stages.PrepareDBFFile.SECTION;
|
import static ru.spcex.clearing.dbf.exporter.logic.stages.PrepareDBFFile.SECTION;
|
||||||
import static ru.spcex.clearing.dbf.exporter.logic.stages.PrepareDBFFile.outDir;
|
import static ru.spcex.clearing.dbf.exporter.logic.stages.PrepareDBFFile.outDir;
|
||||||
|
|
@ -14,7 +15,7 @@ import static ru.spcex.clearing.dbf.exporter.logic.stages.PrepareDBFFile.outDir;
|
||||||
public enum FilenameTemplate {
|
public enum FilenameTemplate {
|
||||||
df_section_dateTime {
|
df_section_dateTime {
|
||||||
@Override
|
@Override
|
||||||
public String getFileName(ResultContainer resultContainer) {
|
public String getFileName(ResultContainer resultContainer, List<SftpFileInfo> files) {
|
||||||
return appendSection(resultContainer)
|
return appendSection(resultContainer)
|
||||||
.append(dateTime(resultContainer))
|
.append(dateTime(resultContainer))
|
||||||
.append(".DBF").toString();
|
.append(".DBF").toString();
|
||||||
|
|
@ -22,19 +23,19 @@ public enum FilenameTemplate {
|
||||||
},
|
},
|
||||||
df_section_dateTime_counter {
|
df_section_dateTime_counter {
|
||||||
@Override
|
@Override
|
||||||
public String getFileName(ResultContainer resultContainer) {
|
public String getFileName(ResultContainer resultContainer, List<SftpFileInfo> files) {
|
||||||
return appendSection(resultContainer)
|
return appendSection(resultContainer)
|
||||||
.append(dateTime(resultContainer))
|
.append(dateTime(resultContainer))
|
||||||
.append(counter(resultContainer))
|
.append(counter(resultContainer, files))
|
||||||
.append(".DBF").toString();
|
.append(".DBF").toString();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
df_section_dateTime_counter_mamberCode {
|
df_section_dateTime_counter_mamberCode {
|
||||||
@Override
|
@Override
|
||||||
public String getFileName(ResultContainer resultContainer) {
|
public String getFileName(ResultContainer resultContainer, List<SftpFileInfo> files) {
|
||||||
return appendSection(resultContainer)
|
return appendSection(resultContainer)
|
||||||
.append(dateTime(resultContainer))
|
.append(dateTime(resultContainer))
|
||||||
.append(counter(resultContainer))
|
.append(counter(resultContainer, files))
|
||||||
.append(mamberCode(resultContainer))
|
.append(mamberCode(resultContainer))
|
||||||
.append(".DBF").toString();
|
.append(".DBF").toString();
|
||||||
}
|
}
|
||||||
|
|
@ -58,10 +59,10 @@ public enum FilenameTemplate {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected StringBuilder counter(ResultContainer resultContainer) {
|
protected StringBuilder counter(ResultContainer resultContainer, List<SftpFileInfo> files) {
|
||||||
StringBuilder result = new StringBuilder();
|
StringBuilder result = new StringBuilder();
|
||||||
result.append('_');
|
result.append('_');
|
||||||
result.append(countSameFilesInDir(resultContainer.getTableForExport().getFilePrefix(), outDir) + 1);
|
result.append(countSameFilesInDir(resultContainer.getTableForExport().getFilePrefix(), files) + 1);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -72,13 +73,11 @@ public enum FilenameTemplate {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Integer countSameFilesInDir(String prefixOfTable, String outDir) {
|
protected Integer countSameFilesInDir(String prefixOfTable, List<SftpFileInfo> files) {
|
||||||
int res = 0;
|
int res = 0;
|
||||||
File directory = new File(outDir);
|
|
||||||
String timestampNow = utilFormatter.format(LocalDateTime.now());
|
String timestampNow = utilFormatter.format(LocalDateTime.now());
|
||||||
if (directory.exists()) {
|
for (SftpFileInfo file : files) {
|
||||||
for (File file : Objects.requireNonNull(directory.listFiles())) {
|
String name = file.getFilename();
|
||||||
String name = file.getName();
|
|
||||||
String[] splitName = name.split("_");
|
String[] splitName = name.split("_");
|
||||||
String prefix = splitName[0];
|
String prefix = splitName[0];
|
||||||
String timestamp = splitName[2];
|
String timestamp = splitName[2];
|
||||||
|
|
@ -92,14 +91,13 @@ public enum FilenameTemplate {
|
||||||
res = Integer.max(res, Integer.parseInt(counter));
|
res = Integer.max(res, Integer.parseInt(counter));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final DateTimeFormatter tsFormatter = DateTimeFormatter.ofPattern("yyMMddHHmm");
|
private static final DateTimeFormatter tsFormatter = DateTimeFormatter.ofPattern("yyMMddHHmm");
|
||||||
private static final DateTimeFormatter utilFormatter = DateTimeFormatter.ofPattern("yyMMdd");
|
private static final DateTimeFormatter utilFormatter = DateTimeFormatter.ofPattern("yyMMdd");
|
||||||
|
|
||||||
public String getFileName(ResultContainer resultContainer) {
|
public String getFileName(ResultContainer resultContainer, List<SftpFileInfo> files) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -3,9 +3,9 @@ package ru.spcex.clearing.dbf.exporter.logic.stages;
|
||||||
import com.linuxense.javadbf.DBFField;
|
import com.linuxense.javadbf.DBFField;
|
||||||
import com.linuxense.javadbf.DBFWriter;
|
import com.linuxense.javadbf.DBFWriter;
|
||||||
import org.springframework.beans.factory.InitializingBean;
|
import org.springframework.beans.factory.InitializingBean;
|
||||||
import org.springframework.beans.factory.annotation.Qualifier;
|
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import ru.clearing.classes.statics.data.sdf.*;
|
import ru.clearing.classes.statics.data.sdf.*;
|
||||||
|
import ru.spcex.clearing.dbf.exporter.config.SFTPConfig;
|
||||||
import ru.spcex.clearing.dbf.exporter.config.settings.ExportDBFServiceSettings;
|
import ru.spcex.clearing.dbf.exporter.config.settings.ExportDBFServiceSettings;
|
||||||
import ru.spcex.clearing.dbf.exporter.exceptions.ConfigException;
|
import ru.spcex.clearing.dbf.exporter.exceptions.ConfigException;
|
||||||
import ru.spcex.clearing.dbf.exporter.logic.data.ResultContainer;
|
import ru.spcex.clearing.dbf.exporter.logic.data.ResultContainer;
|
||||||
|
|
@ -30,6 +30,7 @@ import java.util.Objects;
|
||||||
public class ExportFromHazelcast extends Stage implements InitializingBean {
|
public class ExportFromHazelcast extends Stage implements InitializingBean {
|
||||||
private final ExportDBFServiceSettings settings;
|
private final ExportDBFServiceSettings settings;
|
||||||
private final ImdgProvider imdgProvider;
|
private final ImdgProvider imdgProvider;
|
||||||
|
private final SFTPConfig.DbfGateway gateway;
|
||||||
|
|
||||||
private final S_DF02_Converter s_df02_converter;
|
private final S_DF02_Converter s_df02_converter;
|
||||||
private final S_DF03_Converter s_df03_converter;
|
private final S_DF03_Converter s_df03_converter;
|
||||||
|
|
@ -44,7 +45,8 @@ public class ExportFromHazelcast extends Stage implements InitializingBean {
|
||||||
private Charset dbfCharset;
|
private Charset dbfCharset;
|
||||||
|
|
||||||
public ExportFromHazelcast(ExportDBFServiceSettings settings,
|
public ExportFromHazelcast(ExportDBFServiceSettings settings,
|
||||||
@Qualifier("imdgProvider") ImdgProvider imdgProvider,
|
ImdgProvider imdgProvider,
|
||||||
|
SFTPConfig.DbfGateway gateway,
|
||||||
S_DF02_Converter s_df02_converter,
|
S_DF02_Converter s_df02_converter,
|
||||||
S_DF03_Converter s_df03_converter,
|
S_DF03_Converter s_df03_converter,
|
||||||
S_DF07_Converter s_df07_converter,
|
S_DF07_Converter s_df07_converter,
|
||||||
|
|
@ -55,6 +57,7 @@ public class ExportFromHazelcast extends Stage implements InitializingBean {
|
||||||
S_DF56_Converter s_df56_converter) {
|
S_DF56_Converter s_df56_converter) {
|
||||||
this.settings = settings;
|
this.settings = settings;
|
||||||
this.imdgProvider = imdgProvider;
|
this.imdgProvider = imdgProvider;
|
||||||
|
this.gateway = gateway;
|
||||||
this.s_df02_converter = s_df02_converter;
|
this.s_df02_converter = s_df02_converter;
|
||||||
this.s_df03_converter = s_df03_converter;
|
this.s_df03_converter = s_df03_converter;
|
||||||
this.s_df07_converter = s_df07_converter;
|
this.s_df07_converter = s_df07_converter;
|
||||||
|
|
@ -100,6 +103,7 @@ public class ExportFromHazelcast extends Stage implements InitializingBean {
|
||||||
else if (value instanceof SDf56 sDf56Value) values = s_df56_converter.toObjectArray(sDf56Value);
|
else if (value instanceof SDf56 sDf56Value) values = s_df56_converter.toObjectArray(sDf56Value);
|
||||||
else throw new Exception("Get unknown object from imdg. Class: " + value.getClass().getSimpleName());
|
else throw new Exception("Get unknown object from imdg. Class: " + value.getClass().getSimpleName());
|
||||||
dbfWriter.addRecord(values);
|
dbfWriter.addRecord(values);
|
||||||
|
gateway.sendToSftp(dbfFile);
|
||||||
}
|
}
|
||||||
writeOk = true;
|
writeOk = true;
|
||||||
emptyMap = tableRows.isEmpty();
|
emptyMap = tableRows.isEmpty();
|
||||||
|
|
|
||||||
|
|
@ -11,18 +11,22 @@ import ru.spcex.clearing.dbf.exporter.logic.data.enums.Table;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.system.JournalSdf;
|
import ru.spcex.clearing.platform.messaging.domain.cud.system.JournalSdf;
|
||||||
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
|
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.nio.file.Files;
|
||||||
import java.util.EnumMap;
|
import java.util.EnumMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
import static ru.spcex.clearing.platform.messaging.domain.Consts.EXPORT_COMPLETED;
|
import static ru.spcex.clearing.platform.messaging.domain.Consts.EXPORT_COMPLETED;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
public class Journal extends Stage implements InitializingBean {
|
public class Journal extends Stage implements InitializingBean {
|
||||||
private final Logger log = LoggerFactory.getLogger(getClass());
|
private final Logger log = LoggerFactory.getLogger(getClass());
|
||||||
private final KafkaSender kafkaSender;
|
private final Supplier<KafkaSender> kafkaSender;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public Journal(KafkaSender kafkaSender) {
|
public Journal(Supplier<KafkaSender> kafkaSender) {
|
||||||
this.kafkaSender = kafkaSender;
|
this.kafkaSender = kafkaSender;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -45,7 +49,15 @@ public class Journal extends Stage implements InitializingBean {
|
||||||
journalSdf.setDocumentName(documentNames.get(resultContainer.getTableForExport()));
|
journalSdf.setDocumentName(documentNames.get(resultContainer.getTableForExport()));
|
||||||
journalSdf.setDossierNumber(dossierNumber.get(resultContainer.getTableForExport()));
|
journalSdf.setDossierNumber(dossierNumber.get(resultContainer.getTableForExport()));
|
||||||
journalSdf.setResultStatus(StageResult.ERROR.equals(resultContainer.getLastStageResult()) ? "NACK" : "ACK");
|
journalSdf.setResultStatus(StageResult.ERROR.equals(resultContainer.getLastStageResult()) ? "NACK" : "ACK");
|
||||||
kafkaSender.sendRequestToQueue(EXPORT_COMPLETED, journalSdf);
|
kafkaSender.get().sendRequestToQueue(EXPORT_COMPLETED, journalSdf);
|
||||||
|
|
||||||
|
//удалим временный файл
|
||||||
|
File dbfFile = resultContainer.getFileForExport();
|
||||||
|
try {
|
||||||
|
Files.deleteIfExists(dbfFile.toPath());
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
return StageResult.COMPLETE;
|
return StageResult.COMPLETE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,9 @@
|
||||||
package ru.spcex.clearing.dbf.exporter.logic.stages;
|
package ru.spcex.clearing.dbf.exporter.logic.stages;
|
||||||
|
|
||||||
import org.springframework.beans.factory.InitializingBean;
|
import org.springframework.beans.factory.InitializingBean;
|
||||||
|
import org.springframework.integration.sftp.session.SftpFileInfo;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
import ru.spcex.clearing.dbf.exporter.config.SFTPConfig;
|
||||||
import ru.spcex.clearing.dbf.exporter.config.settings.ExportDBFServiceSettings;
|
import ru.spcex.clearing.dbf.exporter.config.settings.ExportDBFServiceSettings;
|
||||||
import ru.spcex.clearing.dbf.exporter.logic.data.ResultContainer;
|
import ru.spcex.clearing.dbf.exporter.logic.data.ResultContainer;
|
||||||
import ru.spcex.clearing.dbf.exporter.logic.data.enums.FilenameTemplate;
|
import ru.spcex.clearing.dbf.exporter.logic.data.enums.FilenameTemplate;
|
||||||
|
|
@ -14,6 +16,7 @@ import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.EnumMap;
|
import java.util.EnumMap;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
|
|
@ -22,23 +25,24 @@ import java.util.Objects;
|
||||||
*/
|
*/
|
||||||
@Component
|
@Component
|
||||||
public class PrepareDBFFile extends Stage implements InitializingBean {
|
public class PrepareDBFFile extends Stage implements InitializingBean {
|
||||||
public static final String SECTION = "U";
|
public static final String SECTION = "S";
|
||||||
public static final String CODE_OF_MEMBER = null;
|
|
||||||
private final ExportDBFServiceSettings settings;
|
private final ExportDBFServiceSettings settings;
|
||||||
public static String outDir;
|
public static String outDir;
|
||||||
|
private final SFTPConfig.DbfGateway gateway;
|
||||||
|
|
||||||
public PrepareDBFFile(ExportDBFServiceSettings settings) {
|
public PrepareDBFFile(ExportDBFServiceSettings settings, SFTPConfig.DbfGateway gateway) {
|
||||||
this.settings = settings;
|
this.settings = settings;
|
||||||
|
this.gateway = gateway;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public StageResult process(ResultContainer resultContainer) {
|
public StageResult process(ResultContainer resultContainer) {
|
||||||
Objects.requireNonNull(resultContainer.getTableForExport());
|
Objects.requireNonNull(resultContainer.getTableForExport());
|
||||||
|
List<SftpFileInfo> files = gateway.listFiles(settings.getStore().getOutDir());
|
||||||
Table table = resultContainer.getTableForExport();
|
Table table = resultContainer.getTableForExport();
|
||||||
LocalDateTime currentDateTime = LocalDateTime.now();
|
LocalDateTime currentDateTime = LocalDateTime.now();
|
||||||
resultContainer.setRegistrationDateTime(currentDateTime);
|
resultContainer.setRegistrationDateTime(currentDateTime);
|
||||||
File dbfFile = new File(nameTemplates.get(table).getFileName(resultContainer));
|
File dbfFile = new File(nameTemplates.get(table).getFileName(resultContainer, files));
|
||||||
try {
|
try {
|
||||||
Path dbfFilePath = dbfFile.toPath();
|
Path dbfFilePath = dbfFile.toPath();
|
||||||
Files.deleteIfExists(dbfFilePath);
|
Files.deleteIfExists(dbfFilePath);
|
||||||
|
|
@ -54,7 +58,7 @@ public class PrepareDBFFile extends Stage implements InitializingBean {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void afterPropertiesSet() throws Exception {
|
public void afterPropertiesSet() throws Exception {
|
||||||
String outDirPath = settings.getStore().getOutDir();
|
String outDirPath = settings.getStore().getLocalTempDir();
|
||||||
File outDirFile = new File(outDirPath);
|
File outDirFile = new File(outDirPath);
|
||||||
if (outDirFile.exists() && !outDirFile.isDirectory())
|
if (outDirFile.exists() && !outDirFile.isDirectory())
|
||||||
throw new IOException("Output directory " + outDirPath + " is file.");
|
throw new IOException("Output directory " + outDirPath + " is file.");
|
||||||
|
|
@ -65,8 +69,8 @@ public class PrepareDBFFile extends Stage implements InitializingBean {
|
||||||
private static final Map<Table, FilenameTemplate> nameTemplates = new EnumMap<>(Table.class);
|
private static final Map<Table, FilenameTemplate> nameTemplates = new EnumMap<>(Table.class);
|
||||||
|
|
||||||
static {
|
static {
|
||||||
nameTemplates.put(Table.S_DF02, FilenameTemplate.df_section_dateTime);
|
nameTemplates.put(Table.S_DF02, FilenameTemplate.df_section_dateTime_counter);
|
||||||
nameTemplates.put(Table.S_DF03, FilenameTemplate.df_section_dateTime_counter_mamberCode);
|
nameTemplates.put(Table.S_DF03, FilenameTemplate.df_section_dateTime_counter);
|
||||||
nameTemplates.put(Table.S_DF05, FilenameTemplate.df_section_dateTime);
|
nameTemplates.put(Table.S_DF05, FilenameTemplate.df_section_dateTime);
|
||||||
nameTemplates.put(Table.S_DF07, FilenameTemplate.df_section_dateTime_counter);
|
nameTemplates.put(Table.S_DF07, FilenameTemplate.df_section_dateTime_counter);
|
||||||
nameTemplates.put(Table.S_DF51, FilenameTemplate.df_section_dateTime_counter);
|
nameTemplates.put(Table.S_DF51, FilenameTemplate.df_section_dateTime_counter);
|
||||||
|
|
|
||||||
|
|
@ -17,15 +17,12 @@ public class S_DF03_Converter extends DFConverter<SDf03> {
|
||||||
values.add(typeMatch(entity.getDoc_type()));
|
values.add(typeMatch(entity.getDoc_type()));
|
||||||
values.add(typeMatch(entity.getDocnm_ref()));
|
values.add(typeMatch(entity.getDocnm_ref()));
|
||||||
values.add(typeMatch(entity.getDocnmprev()));
|
values.add(typeMatch(entity.getDocnmprev()));
|
||||||
// values.add(typeMatch(entity.getPriority()));
|
|
||||||
// values.add(typeMatch(entity.getSbankcode()));
|
|
||||||
values.add(typeMatch(entity.getC_acc_deb()));
|
values.add(typeMatch(entity.getC_acc_deb()));
|
||||||
values.add(typeMatch(entity.getSbanknam1()));
|
values.add(typeMatch(entity.getSbanknam1()));
|
||||||
values.add(typeMatch(entity.getSbanknam2()));
|
values.add(typeMatch(entity.getSbanknam2()));
|
||||||
values.add(typeMatch(entity.getSbanknam3()));
|
values.add(typeMatch(entity.getSbanknam3()));
|
||||||
values.add(typeMatch(entity.getSbanknam4()));
|
values.add(typeMatch(entity.getSbanknam4()));
|
||||||
values.add(typeMatch(entity.getSbanknam5()));
|
values.add(typeMatch(entity.getSbanknam5()));
|
||||||
// values.add(typeMatch(entity.getRbankcode()));
|
|
||||||
values.add(typeMatch(entity.getC_acc_cred()));
|
values.add(typeMatch(entity.getC_acc_cred()));
|
||||||
values.add(typeMatch(entity.getRbanknam1()));
|
values.add(typeMatch(entity.getRbanknam1()));
|
||||||
values.add(typeMatch(entity.getRbanknam2()));
|
values.add(typeMatch(entity.getRbanknam2()));
|
||||||
|
|
@ -33,31 +30,9 @@ public class S_DF03_Converter extends DFConverter<SDf03> {
|
||||||
values.add(typeMatch(entity.getRbanknam4()));
|
values.add(typeMatch(entity.getRbanknam4()));
|
||||||
values.add(typeMatch(entity.getRbanknam5()));
|
values.add(typeMatch(entity.getRbanknam5()));
|
||||||
values.add(typeMatch(entity.getPay_date()));
|
values.add(typeMatch(entity.getPay_date()));
|
||||||
// values.add(typeMatch(entity.getExt_date()));
|
|
||||||
values.add(typeMatch(entity.getPay_val()));
|
values.add(typeMatch(entity.getPay_val()));
|
||||||
values.add(typeMatch(entity.getSum_deb()));
|
values.add(typeMatch(entity.getSum_deb()));
|
||||||
// values.add(typeMatch(entity.getSclientn1()));
|
|
||||||
// values.add(typeMatch(entity.getSclientn2()));
|
|
||||||
// values.add(typeMatch(entity.getSclientn3()));
|
|
||||||
// values.add(typeMatch(entity.getSclientn4()));
|
|
||||||
// values.add(typeMatch(entity.getSc_code()));
|
|
||||||
// values.add(typeMatch(entity.getAcc_deb()));
|
|
||||||
// values.add(typeMatch(entity.getRclientn1()));
|
|
||||||
// values.add(typeMatch(entity.getRclientn2()));
|
|
||||||
// values.add(typeMatch(entity.getRclientn3()));
|
|
||||||
// values.add(typeMatch(entity.getRclientn4()));
|
|
||||||
// values.add(typeMatch(entity.getAcc_kr_1()));
|
|
||||||
// values.add(typeMatch(entity.getAcc_kr_2()));
|
|
||||||
// values.add(typeMatch(entity.getSp_code()));
|
|
||||||
values.add(typeMatch(entity.getSpecif_1()));
|
values.add(typeMatch(entity.getSpecif_1()));
|
||||||
// values.add(typeMatch(entity.getSpecif_2()));
|
|
||||||
// values.add(typeMatch(entity.getSpecif_3()));
|
|
||||||
// values.add(typeMatch(entity.getSpecif_4()));
|
|
||||||
// values.add(typeMatch(entity.getSpecif_5()));
|
|
||||||
// values.add(typeMatch(entity.getSpecif_6()));
|
|
||||||
// values.add(typeMatch(entity.getSend_type()));
|
|
||||||
// values.add(typeMatch(entity.getServdate()));
|
|
||||||
// values.add(typeMatch(entity.getDoc_result()));
|
|
||||||
values.add(typeMatch(entity.getImp_result()));
|
values.add(typeMatch(entity.getImp_result()));
|
||||||
return values.toArray(Object[]::new);
|
return values.toArray(Object[]::new);
|
||||||
}
|
}
|
||||||
|
|
@ -69,15 +44,12 @@ public class S_DF03_Converter extends DFConverter<SDf03> {
|
||||||
dbfFields.add(new DBFField("DOC_TYPE", DBFDataType.CHARACTER, 4));
|
dbfFields.add(new DBFField("DOC_TYPE", DBFDataType.CHARACTER, 4));
|
||||||
dbfFields.add(new DBFField("DOCNM_REF", DBFDataType.CHARACTER, 16));
|
dbfFields.add(new DBFField("DOCNM_REF", DBFDataType.CHARACTER, 16));
|
||||||
dbfFields.add(new DBFField("DOCNMPREV", DBFDataType.CHARACTER, 16));
|
dbfFields.add(new DBFField("DOCNMPREV", DBFDataType.CHARACTER, 16));
|
||||||
// dbfFields.add(new DBFField("PRIORITY", DBFDataType.CHARACTER, 1));
|
|
||||||
// dbfFields.add(new DBFField("SBANKCODE", DBFDataType.CHARACTER, 12));
|
|
||||||
dbfFields.add(new DBFField("C_ACC_DEB", DBFDataType.CHARACTER, 35));
|
dbfFields.add(new DBFField("C_ACC_DEB", DBFDataType.CHARACTER, 35));
|
||||||
dbfFields.add(new DBFField("SBANKNAM1", DBFDataType.CHARACTER, 35));
|
dbfFields.add(new DBFField("SBANKNAM1", DBFDataType.CHARACTER, 35));
|
||||||
dbfFields.add(new DBFField("SBANKNAM2", DBFDataType.CHARACTER, 35));
|
dbfFields.add(new DBFField("SBANKNAM2", DBFDataType.CHARACTER, 35));
|
||||||
dbfFields.add(new DBFField("SBANKNAM3", DBFDataType.CHARACTER, 35));
|
dbfFields.add(new DBFField("SBANKNAM3", DBFDataType.CHARACTER, 35));
|
||||||
dbfFields.add(new DBFField("SBANKNAM4", DBFDataType.CHARACTER, 35));
|
dbfFields.add(new DBFField("SBANKNAM4", DBFDataType.CHARACTER, 35));
|
||||||
dbfFields.add(new DBFField("SBANKNAM5", DBFDataType.CHARACTER, 35));
|
dbfFields.add(new DBFField("SBANKNAM5", DBFDataType.CHARACTER, 35));
|
||||||
// dbfFields.add(new DBFField("RBANKCODE", DBFDataType.CHARACTER, 12));
|
|
||||||
dbfFields.add(new DBFField("C_ACC_CRED", DBFDataType.CHARACTER, 35));
|
dbfFields.add(new DBFField("C_ACC_CRED", DBFDataType.CHARACTER, 35));
|
||||||
dbfFields.add(new DBFField("RBANKNAM1", DBFDataType.CHARACTER, 35));
|
dbfFields.add(new DBFField("RBANKNAM1", DBFDataType.CHARACTER, 35));
|
||||||
dbfFields.add(new DBFField("RBANKNAM2", DBFDataType.CHARACTER, 35));
|
dbfFields.add(new DBFField("RBANKNAM2", DBFDataType.CHARACTER, 35));
|
||||||
|
|
@ -85,31 +57,9 @@ public class S_DF03_Converter extends DFConverter<SDf03> {
|
||||||
dbfFields.add(new DBFField("RBANKNAM4", DBFDataType.CHARACTER, 35));
|
dbfFields.add(new DBFField("RBANKNAM4", DBFDataType.CHARACTER, 35));
|
||||||
dbfFields.add(new DBFField("RBANKNAM5", DBFDataType.CHARACTER, 35));
|
dbfFields.add(new DBFField("RBANKNAM5", DBFDataType.CHARACTER, 35));
|
||||||
dbfFields.add(new DBFField("PAY_DATE", DBFDataType.CHARACTER, 8));
|
dbfFields.add(new DBFField("PAY_DATE", DBFDataType.CHARACTER, 8));
|
||||||
// dbfFields.add(new DBFField("EXT_DATE", DBFDataType.CHARACTER, 8));
|
dbfFields.add(new DBFField("PAY_VAL", DBFDataType.CHARACTER, 12));
|
||||||
// dbfFields.add(new DBFField("PAY_VAL", DBFDataType.CHARACTER, 12));
|
|
||||||
dbfFields.add(new DBFField("SUM_DEB", DBFDataType.CHARACTER, 22));
|
dbfFields.add(new DBFField("SUM_DEB", DBFDataType.CHARACTER, 22));
|
||||||
// dbfFields.add(new DBFField("SCLIENTN1", DBFDataType.CHARACTER, 35));
|
dbfFields.add(new DBFField("SPECIF_1", DBFDataType.CHARACTER, 254));
|
||||||
// dbfFields.add(new DBFField("SCLIENTN2", DBFDataType.CHARACTER, 35));
|
|
||||||
// dbfFields.add(new DBFField("SCLIENTN3", DBFDataType.CHARACTER, 35));
|
|
||||||
// dbfFields.add(new DBFField("SCLIENTN4", DBFDataType.CHARACTER, 35));
|
|
||||||
// dbfFields.add(new DBFField("SC_CODE", DBFDataType.CHARACTER, 12));
|
|
||||||
// dbfFields.add(new DBFField("ACC_DEB", DBFDataType.CHARACTER, 35));
|
|
||||||
// dbfFields.add(new DBFField("RCLIENTN1", DBFDataType.CHARACTER, 35));
|
|
||||||
// dbfFields.add(new DBFField("RCLIENTN2", DBFDataType.CHARACTER, 35));
|
|
||||||
// dbfFields.add(new DBFField("RCLIENTN3", DBFDataType.CHARACTER, 35));
|
|
||||||
// dbfFields.add(new DBFField("RCLIENTN4", DBFDataType.CHARACTER, 35));
|
|
||||||
// dbfFields.add(new DBFField("ACC_KR_1", DBFDataType.CHARACTER, 35));
|
|
||||||
// dbfFields.add(new DBFField("ACC_KR_2", DBFDataType.CHARACTER, 35));
|
|
||||||
// dbfFields.add(new DBFField("SP_CODE", DBFDataType.CHARACTER, 2));
|
|
||||||
dbfFields.add(new DBFField("SPECIF_1", DBFDataType.CHARACTER, 255));
|
|
||||||
// dbfFields.add(new DBFField("SPECIF_2", DBFDataType.CHARACTER, 35));
|
|
||||||
// dbfFields.add(new DBFField("SPECIF_3", DBFDataType.CHARACTER, 35));
|
|
||||||
// dbfFields.add(new DBFField("SPECIF_4", DBFDataType.CHARACTER, 35));
|
|
||||||
// dbfFields.add(new DBFField("SPECIF_5", DBFDataType.CHARACTER, 35));
|
|
||||||
// dbfFields.add(new DBFField("SPECIF_6", DBFDataType.CHARACTER, 35));
|
|
||||||
// dbfFields.add(new DBFField("SEND_TYPE", DBFDataType.CHARACTER, 10));
|
|
||||||
// dbfFields.add(new DBFField("SERVDATE", DBFDataType.CHARACTER, 8));
|
|
||||||
// dbfFields.add(new DBFField("DOC_RESULT", DBFDataType.CHARACTER, 2));
|
|
||||||
dbfFields.add(new DBFField("IMP_RESULT", DBFDataType.CHARACTER, 3));
|
dbfFields.add(new DBFField("IMP_RESULT", DBFDataType.CHARACTER, 3));
|
||||||
return dbfFields.toArray(DBFField[]::new);
|
return dbfFields.toArray(DBFField[]::new);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ public class S_DF05_Converter extends DFConverter<SDf05> {
|
||||||
public DBFField[] getDBFHeaders() {
|
public DBFField[] getDBFHeaders() {
|
||||||
List<DBFField> dbfFields = new LinkedList<>();
|
List<DBFField> dbfFields = new LinkedList<>();
|
||||||
Date date = new Date();
|
Date date = new Date();
|
||||||
dbfFields.add(new DBFField("TP", DBFDataType.NUMERIC, 72, 18));
|
dbfFields.add(new DBFField("TP", DBFDataType.NUMERIC, 32, 18));
|
||||||
dbfFields.add(new DBFField("DT", DBFDataType.DATE));
|
dbfFields.add(new DBFField("DT", DBFDataType.DATE));
|
||||||
dbfFields.add(new DBFField("TM", DBFDataType.DATE));
|
dbfFields.add(new DBFField("TM", DBFDataType.DATE));
|
||||||
dbfFields.add(new DBFField("PR", DBFDataType.CHARACTER, 1));
|
dbfFields.add(new DBFField("PR", DBFDataType.CHARACTER, 1));
|
||||||
|
|
|
||||||
|
|
@ -31,16 +31,16 @@ public class S_DF07_Converter extends DFConverter<SDf07> {
|
||||||
public DBFField[] getDBFHeaders() {
|
public DBFField[] getDBFHeaders() {
|
||||||
List<DBFField> dbfFields = new LinkedList<>();
|
List<DBFField> dbfFields = new LinkedList<>();
|
||||||
dbfFields.add(new DBFField("ACCOUNT", DBFDataType.CHARACTER, 20));
|
dbfFields.add(new DBFField("ACCOUNT", DBFDataType.CHARACTER, 20));
|
||||||
dbfFields.add(new DBFField("SUM", DBFDataType.NUMERIC, 72, 18));
|
dbfFields.add(new DBFField("SUM", DBFDataType.NUMERIC, 32, 18));
|
||||||
dbfFields.add(new DBFField("MARKET", DBFDataType.CHARACTER, 1));
|
dbfFields.add(new DBFField("MARKET", DBFDataType.CHARACTER, 1));
|
||||||
dbfFields.add(new DBFField("TYPE", DBFDataType.CHARACTER, 1));
|
dbfFields.add(new DBFField("TYPE", DBFDataType.CHARACTER, 1));
|
||||||
dbfFields.add(new DBFField("DEAL", DBFDataType.CHARACTER, 10));
|
dbfFields.add(new DBFField("DEAL", DBFDataType.CHARACTER, 10));
|
||||||
dbfFields.add(new DBFField("CLIENT_N", DBFDataType.CHARACTER, 35));
|
dbfFields.add(new DBFField("CLIENT_N", DBFDataType.CHARACTER, 35));
|
||||||
dbfFields.add(new DBFField("_I_N_N", DBFDataType.NUMERIC, 72, 18));
|
dbfFields.add(new DBFField("_I_N_N", DBFDataType.NUMERIC, 32, 18));
|
||||||
dbfFields.add(new DBFField("_B_I_C", DBFDataType.NUMERIC, 72, 18));
|
dbfFields.add(new DBFField("_B_I_C", DBFDataType.NUMERIC, 32, 18));
|
||||||
dbfFields.add(new DBFField("_S_P_E_C", DBFDataType.CHARACTER, 255));
|
dbfFields.add(new DBFField("_S_P_E_C", DBFDataType.CHARACTER, 254));
|
||||||
dbfFields.add(new DBFField("NUMBER", DBFDataType.NUMERIC, 72, 18));
|
dbfFields.add(new DBFField("NUMBER", DBFDataType.NUMERIC, 32, 18));
|
||||||
dbfFields.add(new DBFField("RESULT", DBFDataType.NUMERIC, 72, 18));
|
dbfFields.add(new DBFField("RESULT", DBFDataType.NUMERIC, 32, 18));
|
||||||
return dbfFields.toArray(DBFField[]::new);
|
return dbfFields.toArray(DBFField[]::new);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -17,8 +17,6 @@ public class S_DF53_Converter extends DFConverter<SDf53> {
|
||||||
values.add(typeMatch(entity.getDeal()));
|
values.add(typeMatch(entity.getDeal()));
|
||||||
values.add(typeMatch(entity.getStatus()));
|
values.add(typeMatch(entity.getStatus()));
|
||||||
values.add(typeMatch(entity.getResult()));
|
values.add(typeMatch(entity.getResult()));
|
||||||
values.add(typeMatch(entity.getGenerationTime()));
|
|
||||||
values.add(typeMatch(entity.getGenerationId()));
|
|
||||||
return values.toArray(Object[]::new);
|
return values.toArray(Object[]::new);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -29,8 +27,6 @@ public class S_DF53_Converter extends DFConverter<SDf53> {
|
||||||
dbfFields.add(new DBFField("DEAL", DBFDataType.CHARACTER, 4));
|
dbfFields.add(new DBFField("DEAL", DBFDataType.CHARACTER, 4));
|
||||||
dbfFields.add(new DBFField("STATUS", DBFDataType.NUMERIC, 32, 18));
|
dbfFields.add(new DBFField("STATUS", DBFDataType.NUMERIC, 32, 18));
|
||||||
dbfFields.add(new DBFField("RESULT", DBFDataType.NUMERIC, 32, 18));
|
dbfFields.add(new DBFField("RESULT", DBFDataType.NUMERIC, 32, 18));
|
||||||
dbfFields.add(new DBFField("GEN_TIME", DBFDataType.DATE));
|
|
||||||
dbfFields.add(new DBFField("GEN_ID", DBFDataType.NUMERIC));
|
|
||||||
return dbfFields.toArray(DBFField[]::new);
|
return dbfFields.toArray(DBFField[]::new);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -96,7 +96,7 @@ public class S_DF54_Converter extends DFConverter<SDf54> {
|
||||||
dbfFields.add(new DBFField("INN_CRED", DBFDataType.CHARACTER, 12));
|
dbfFields.add(new DBFField("INN_CRED", DBFDataType.CHARACTER, 12));
|
||||||
dbfFields.add(new DBFField("KPP_CRED", DBFDataType.CHARACTER, 9));
|
dbfFields.add(new DBFField("KPP_CRED", DBFDataType.CHARACTER, 9));
|
||||||
dbfFields.add(new DBFField("ACC_KR1", DBFDataType.CHARACTER, 35));
|
dbfFields.add(new DBFField("ACC_KR1", DBFDataType.CHARACTER, 35));
|
||||||
dbfFields.add(new DBFField("SPECIF1", DBFDataType.CHARACTER, 255));
|
dbfFields.add(new DBFField("SPECIF1", DBFDataType.CHARACTER, 254));
|
||||||
dbfFields.add(new DBFField("SEND_TYPE", DBFDataType.CHARACTER, 10));
|
dbfFields.add(new DBFField("SEND_TYPE", DBFDataType.CHARACTER, 10));
|
||||||
dbfFields.add(new DBFField("DOC_RESULT", DBFDataType.CHARACTER, 2));
|
dbfFields.add(new DBFField("DOC_RESULT", DBFDataType.CHARACTER, 2));
|
||||||
return dbfFields.toArray(DBFField[]::new);
|
return dbfFields.toArray(DBFField[]::new);
|
||||||
|
|
|
||||||
|
|
@ -25,8 +25,8 @@ public class S_DF56_Converter extends DFConverter<SDf56> {
|
||||||
public DBFField[] getDBFHeaders() {
|
public DBFField[] getDBFHeaders() {
|
||||||
List<DBFField> dbfFields = new LinkedList<>();
|
List<DBFField> dbfFields = new LinkedList<>();
|
||||||
dbfFields.add(new DBFField("NUMBER", DBFDataType.CHARACTER, 10));
|
dbfFields.add(new DBFField("NUMBER", DBFDataType.CHARACTER, 10));
|
||||||
dbfFields.add(new DBFField("START_DATETIME", DBFDataType.NUMERIC, 10));
|
dbfFields.add(new DBFField("SDATETIME", DBFDataType.NUMERIC, 10));
|
||||||
dbfFields.add(new DBFField("END_DATETIME", DBFDataType.NUMERIC, 10));
|
dbfFields.add(new DBFField("EDATETIME", DBFDataType.NUMERIC, 10));
|
||||||
dbfFields.add(new DBFField("ACCOUNT", DBFDataType.CHARACTER, 25));
|
dbfFields.add(new DBFField("ACCOUNT", DBFDataType.CHARACTER, 25));
|
||||||
dbfFields.add(new DBFField("DEAL", DBFDataType.CHARACTER, 4));
|
dbfFields.add(new DBFField("DEAL", DBFDataType.CHARACTER, 4));
|
||||||
return dbfFields.toArray(DBFField[]::new);
|
return dbfFields.toArray(DBFField[]::new);
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,12 @@ export-dbf-service.hazelcast.password=dev-pass
|
||||||
export-dbf-service.common.encoding=cp866
|
export-dbf-service.common.encoding=cp866
|
||||||
export-dbf-service.common.threads-count=10
|
export-dbf-service.common.threads-count=10
|
||||||
|
|
||||||
export-dbf-service.store.out-dir=d:\\trash\\clearing\\exporter\\out\\
|
export-dbf-service.store.local-temp-dir=D:\\docs and T3\\clearing\\dbf\\
|
||||||
|
export-dbf-service.store.out-dir=DocOut
|
||||||
|
export-dbf-service.store.user:tester
|
||||||
|
export-dbf-service.store.password=password
|
||||||
|
export-dbf-service.store.server-ip=10.230.238.53
|
||||||
|
export-dbf-service.store.server-port=2222
|
||||||
|
|
||||||
export-dbf-service.kafka-consumer.bootstrap-servers=localhost:9092
|
export-dbf-service.kafka-consumer.bootstrap-servers=localhost:9092
|
||||||
export-dbf-service.kafka-consumer.group-id=dev-group-balance-service
|
export-dbf-service.kafka-consumer.group-id=dev-group-balance-service
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,73 @@
|
||||||
|
package ru.spcex.clearing.dbf.exporter;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.BeforeAll;
|
||||||
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.beans.factory.annotation.Qualifier;
|
||||||
|
import org.springframework.kafka.core.KafkaTemplate;
|
||||||
|
import org.springframework.test.context.ContextConfiguration;
|
||||||
|
import org.springframework.test.context.junit.jupiter.SpringExtension;
|
||||||
|
import ru.spcex.clearing.dbf.exporter.config.ExportDBFServiceSettingsTest;
|
||||||
|
import ru.spcex.clearing.dbf.exporter.config.PipelineConfig;
|
||||||
|
import ru.spcex.clearing.dbf.exporter.config.SFTPTestConfig;
|
||||||
|
import ru.spcex.clearing.dbf.exporter.logic.Processor;
|
||||||
|
import ru.spcex.clearing.dbf.exporter.logic.stages.ExportFromHazelcast;
|
||||||
|
import ru.spcex.clearing.dbf.exporter.logic.stages.Journal;
|
||||||
|
import ru.spcex.clearing.dbf.exporter.logic.stages.PrepareDBFFile;
|
||||||
|
import ru.spcex.clearing.dbf.exporter.services.CommandService;
|
||||||
|
import ru.spcex.clearing.dbf.exporter.services.converters.*;
|
||||||
|
import ru.spcex.clearing.test.config.ImdgTestConfig;
|
||||||
|
import ru.spcex.clearing.test.config.KafkaTestConfig;
|
||||||
|
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||||
|
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
|
||||||
|
import static ru.spcex.clearing.test.config.ImdgTestConfig.waitAvailableImdgProviderAndAddAdminWithDefaultId;
|
||||||
|
|
||||||
|
@ExtendWith(SpringExtension.class)
|
||||||
|
@ContextConfiguration(classes = {
|
||||||
|
ExportDBFServiceSettingsTest.class,
|
||||||
|
SFTPTestConfig.class,
|
||||||
|
PipelineConfig.class,
|
||||||
|
ExportFromHazelcast.class,
|
||||||
|
Journal.class,
|
||||||
|
PrepareDBFFile.class,
|
||||||
|
Processor.class,
|
||||||
|
CommandService.class,
|
||||||
|
S_DF02_Converter.class,
|
||||||
|
S_DF03_Converter.class,
|
||||||
|
S_DF05_Converter.class,
|
||||||
|
S_DF07_Converter.class,
|
||||||
|
S_DF51_Converter.class,
|
||||||
|
S_DF53_Converter.class,
|
||||||
|
S_DF54_Converter.class,
|
||||||
|
S_DF56_Converter.class,
|
||||||
|
ImdgTestConfig.class,
|
||||||
|
KafkaTestConfig.class})
|
||||||
|
public abstract class AbstractServiceTest {
|
||||||
|
protected static final long generationId = 21L;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
@Qualifier("kafkaTestTemplate")
|
||||||
|
protected KafkaTemplate<String, Object> kafkaTemplate;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
@Qualifier("hazelcastServiceTest")
|
||||||
|
protected ImdgProvider imdgProvider;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
protected CommandService commandService;
|
||||||
|
|
||||||
|
@BeforeAll
|
||||||
|
static void setProperty() {
|
||||||
|
Path path = Paths.get("src", "main", "resources");
|
||||||
|
String currentPath = path.toAbsolutePath().toString();
|
||||||
|
System.setProperty("spring.config.location", currentPath);
|
||||||
|
// Hazelcast.shutdownAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void init() {
|
||||||
|
waitAvailableImdgProviderAndAddAdminWithDefaultId();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
package ru.spcex.clearing.dbf.exporter.config;
|
||||||
|
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import ru.spcex.clearing.dbf.exporter.config.settings.Common;
|
||||||
|
import ru.spcex.clearing.dbf.exporter.config.settings.ExportDBFServiceSettings;
|
||||||
|
import ru.spcex.clearing.dbf.exporter.config.settings.Store;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
public class ExportDBFServiceSettingsTest {
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public ExportDBFServiceSettings settings(){
|
||||||
|
ExportDBFServiceSettings settings = new ExportDBFServiceSettings();
|
||||||
|
Common common = new Common();
|
||||||
|
common.setEncoding("cp866");
|
||||||
|
settings.setCommon(common);
|
||||||
|
Store store = new Store();
|
||||||
|
store.setOutDir("DocOut");
|
||||||
|
store.setLocalTempDir("D:\\docs and T3\\clearing\\dbf");
|
||||||
|
settings.setStore(store);
|
||||||
|
return settings;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,31 @@
|
||||||
|
package ru.spcex.clearing.dbf.exporter.config;
|
||||||
|
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.integration.sftp.session.SftpFileInfo;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
public class SFTPTestConfig {
|
||||||
|
@Bean
|
||||||
|
public SFTPConfig.DbfGateway dbfGateway(){
|
||||||
|
return new DGateway();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class DGateway implements SFTPConfig.DbfGateway{
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendToSftp(File file) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<SftpFileInfo> listFiles(String dir) {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,69 @@
|
||||||
|
package ru.spcex.clearing.dbf.exporter.services;
|
||||||
|
|
||||||
|
import org.apache.kafka.clients.consumer.MockConsumer;
|
||||||
|
import org.apache.kafka.clients.producer.ProducerRecord;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.mockito.ArgumentCaptor;
|
||||||
|
import ru.clearing.classes.statics.data.sdf.SDf02;
|
||||||
|
import ru.spcex.clearing.dbf.exporter.AbstractServiceTest;
|
||||||
|
import ru.spcex.clearing.dbf.exporter.logic.data.enums.Table;
|
||||||
|
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;
|
||||||
|
import ru.spcex.clearing.platform.messaging.domain.cud.system.JournalSdf;
|
||||||
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
|
|
||||||
|
import javax.annotation.PostConstruct;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.mockito.Mockito.timeout;
|
||||||
|
import static org.mockito.Mockito.verify;
|
||||||
|
import static ru.spcex.clearing.test.TestUtils.addRecordToKafka;
|
||||||
|
import static ru.spcex.clearing.test.TestUtils.getJsonStringForNew;
|
||||||
|
import static ru.spcex.clearing.test.config.KafkaTestConfig.getCaptor;
|
||||||
|
|
||||||
|
class S_DF02_Test extends AbstractServiceTest {
|
||||||
|
|
||||||
|
@PostConstruct
|
||||||
|
public void init() {
|
||||||
|
super.init();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Тест проверяет создание строк документа DBF .<br>
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
void cdeateSdf() {
|
||||||
|
Table table = Table.S_DF02;
|
||||||
|
Imdg<SDf02> map = imdgProvider.getImdg(table.getHazelcastMapName(), SDf02.class);
|
||||||
|
SDf02 sDf02 = new SDf02();
|
||||||
|
sDf02.setGenerationId(generationId);
|
||||||
|
sDf02.setCurr_code("curr_code");
|
||||||
|
sDf02.setAccount("account");
|
||||||
|
sDf02.setRemainder("remainder");
|
||||||
|
sDf02.setDeal("deal");
|
||||||
|
sDf02.setAcc_code("acc_code");
|
||||||
|
sDf02.setDat("dat");
|
||||||
|
sDf02.setMarket("market");
|
||||||
|
sDf02.setAcc_name("acc_name");
|
||||||
|
sDf02.setAcc_type("acc_type");
|
||||||
|
sDf02.setSumengage("sumengage");
|
||||||
|
sDf02.setSumunblock("sumunblock");
|
||||||
|
sDf02.setFile_type("file_type");
|
||||||
|
sDf02.setResult("result");
|
||||||
|
map.insert(sDf02);
|
||||||
|
SdfClearingRequest sdfClearingRequest = new SdfClearingRequest();
|
||||||
|
sdfClearingRequest.setGroupId(generationId);
|
||||||
|
String request = getJsonStringForNew(sdfClearingRequest, generationId);
|
||||||
|
addRecordToKafka((MockConsumer) commandService.getConsumer(), Consts.SDF02_PROCESS, 0, 0, request);
|
||||||
|
|
||||||
|
//waiting for kafka send message (finale event)
|
||||||
|
ArgumentCaptor<ProducerRecord> captor = getCaptor(kafkaTemplate);
|
||||||
|
verify(kafkaTemplate, timeout(30_000L).times(1))
|
||||||
|
.send(captor.capture());
|
||||||
|
|
||||||
|
BaseRequest<Object> baseRequestResult = (BaseRequest<Object>) captor.getValue().value();
|
||||||
|
JournalSdf journalSdf = (JournalSdf) baseRequestResult.getRequestPayload();
|
||||||
|
assertEquals(generationId, journalSdf.getRegistrationNumber());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,77 @@
|
||||||
|
package ru.spcex.clearing.dbf.exporter.services;
|
||||||
|
|
||||||
|
import org.apache.kafka.clients.consumer.MockConsumer;
|
||||||
|
import org.apache.kafka.clients.producer.ProducerRecord;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.mockito.ArgumentCaptor;
|
||||||
|
import ru.clearing.classes.statics.data.sdf.SDf03;
|
||||||
|
import ru.spcex.clearing.dbf.exporter.AbstractServiceTest;
|
||||||
|
import ru.spcex.clearing.dbf.exporter.logic.data.enums.Table;
|
||||||
|
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;
|
||||||
|
import ru.spcex.clearing.platform.messaging.domain.cud.system.JournalSdf;
|
||||||
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
|
|
||||||
|
import javax.annotation.PostConstruct;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.mockito.Mockito.timeout;
|
||||||
|
import static org.mockito.Mockito.verify;
|
||||||
|
import static ru.spcex.clearing.test.TestUtils.addRecordToKafka;
|
||||||
|
import static ru.spcex.clearing.test.TestUtils.getJsonStringForNew;
|
||||||
|
import static ru.spcex.clearing.test.config.KafkaTestConfig.getCaptor;
|
||||||
|
|
||||||
|
class S_DF03_Test extends AbstractServiceTest {
|
||||||
|
|
||||||
|
@PostConstruct
|
||||||
|
public void init() {
|
||||||
|
super.init();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Тест проверяет создание строк документа DBF .<br>
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
void cdeateSdf() {
|
||||||
|
Table table = Table.S_DF03;
|
||||||
|
Imdg<SDf03> map = imdgProvider.getImdg(table.getHazelcastMapName(), SDf03.class);
|
||||||
|
SDf03 sDf03 = new SDf03();
|
||||||
|
sDf03.setGenerationId(generationId);
|
||||||
|
sDf03.setSeg_type("seg_type");
|
||||||
|
sDf03.setDoc_type("doc_type");
|
||||||
|
sDf03.setDocnm_ref("docnm_ref");
|
||||||
|
sDf03.setDocnmprev("docnmprev");
|
||||||
|
sDf03.setC_acc_deb("c_acc_deb");
|
||||||
|
sDf03.setSbanknam1("sbanknam1");
|
||||||
|
sDf03.setSbanknam2("sbanknam2");
|
||||||
|
sDf03.setSbanknam3("sbanknam3");
|
||||||
|
sDf03.setSbanknam4("sbanknam4");
|
||||||
|
sDf03.setSbanknam5("sbanknam5");
|
||||||
|
sDf03.setC_acc_cred("c_acc_cred");
|
||||||
|
sDf03.setRbanknam1("rbanknam1");
|
||||||
|
sDf03.setRbanknam2("rbanknam2");
|
||||||
|
sDf03.setRbanknam3("rbanknam3");
|
||||||
|
sDf03.setRbanknam4("rbanknam4");
|
||||||
|
sDf03.setRbanknam5("rbanknam5");
|
||||||
|
sDf03.setPay_date("pay_date");
|
||||||
|
sDf03.setPay_val("pay_val");
|
||||||
|
sDf03.setSum_deb("sum_deb");
|
||||||
|
sDf03.setSpecif_1("specif_1");
|
||||||
|
sDf03.setImp_result("imp_result");
|
||||||
|
map.insert(sDf03);
|
||||||
|
SdfClearingRequest sdfClearingRequest = new SdfClearingRequest();
|
||||||
|
sdfClearingRequest.setGroupId(generationId);
|
||||||
|
String request = getJsonStringForNew(sdfClearingRequest, generationId);
|
||||||
|
addRecordToKafka((MockConsumer) commandService.getConsumer(), Consts.SDF03_PROCESS, 0, 0, request);
|
||||||
|
|
||||||
|
//waiting for kafka send message (finale event)
|
||||||
|
ArgumentCaptor<ProducerRecord> captor = getCaptor(kafkaTemplate);
|
||||||
|
verify(kafkaTemplate, timeout(30_000L).times(1))
|
||||||
|
.send(captor.capture());
|
||||||
|
|
||||||
|
BaseRequest<Object> baseRequestResult = (BaseRequest<Object>) captor.getValue().value();
|
||||||
|
JournalSdf journalSdf = (JournalSdf) baseRequestResult.getRequestPayload();
|
||||||
|
assertEquals(generationId, journalSdf.getRegistrationNumber());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,63 @@
|
||||||
|
package ru.spcex.clearing.dbf.exporter.services;
|
||||||
|
|
||||||
|
import org.apache.kafka.clients.consumer.MockConsumer;
|
||||||
|
import org.apache.kafka.clients.producer.ProducerRecord;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.mockito.ArgumentCaptor;
|
||||||
|
import ru.clearing.classes.statics.data.sdf.SDf05;
|
||||||
|
import ru.spcex.clearing.dbf.exporter.AbstractServiceTest;
|
||||||
|
import ru.spcex.clearing.dbf.exporter.logic.data.enums.Table;
|
||||||
|
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;
|
||||||
|
import ru.spcex.clearing.platform.messaging.domain.cud.system.JournalSdf;
|
||||||
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
|
|
||||||
|
import javax.annotation.PostConstruct;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalTime;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.mockito.Mockito.timeout;
|
||||||
|
import static org.mockito.Mockito.verify;
|
||||||
|
import static ru.spcex.clearing.test.TestUtils.addRecordToKafka;
|
||||||
|
import static ru.spcex.clearing.test.TestUtils.getJsonStringForNew;
|
||||||
|
import static ru.spcex.clearing.test.config.KafkaTestConfig.getCaptor;
|
||||||
|
|
||||||
|
class S_DF05_Test extends AbstractServiceTest {
|
||||||
|
|
||||||
|
@PostConstruct
|
||||||
|
public void init() {
|
||||||
|
super.init();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Тест проверяет создание строк документа DBF .<br>
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
void cdeateSdf() {
|
||||||
|
Table table = Table.S_DF05;
|
||||||
|
Imdg<SDf05> map = imdgProvider.getImdg(table.getHazelcastMapName(), SDf05.class);
|
||||||
|
SDf05 sDf05 = new SDf05();
|
||||||
|
sDf05.setGenerationId(generationId);
|
||||||
|
sDf05.setTp(new BigDecimal(32));
|
||||||
|
sDf05.setDt(LocalDate.now());
|
||||||
|
sDf05.setTm(LocalTime.now());
|
||||||
|
sDf05.setPr("deal");
|
||||||
|
map.insert(sDf05);
|
||||||
|
SdfClearingRequest sdfClearingRequest = new SdfClearingRequest();
|
||||||
|
sdfClearingRequest.setGroupId(generationId);
|
||||||
|
String request = getJsonStringForNew(sdfClearingRequest, generationId);
|
||||||
|
addRecordToKafka((MockConsumer) commandService.getConsumer(), Consts.SDF05_PROCESS, 0, 0, request);
|
||||||
|
|
||||||
|
//waiting for kafka send message (finale event)
|
||||||
|
ArgumentCaptor<ProducerRecord> captor = getCaptor(kafkaTemplate);
|
||||||
|
verify(kafkaTemplate, timeout(30_000L).times(1))
|
||||||
|
.send(captor.capture());
|
||||||
|
|
||||||
|
BaseRequest<Object> baseRequestResult = (BaseRequest<Object>) captor.getValue().value();
|
||||||
|
JournalSdf journalSdf = (JournalSdf) baseRequestResult.getRequestPayload();
|
||||||
|
assertEquals(generationId, journalSdf.getRegistrationNumber());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,68 @@
|
||||||
|
package ru.spcex.clearing.dbf.exporter.services;
|
||||||
|
|
||||||
|
import org.apache.kafka.clients.consumer.MockConsumer;
|
||||||
|
import org.apache.kafka.clients.producer.ProducerRecord;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.mockito.ArgumentCaptor;
|
||||||
|
import ru.clearing.classes.statics.data.sdf.SDf07;
|
||||||
|
import ru.spcex.clearing.dbf.exporter.AbstractServiceTest;
|
||||||
|
import ru.spcex.clearing.dbf.exporter.logic.data.enums.Table;
|
||||||
|
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;
|
||||||
|
import ru.spcex.clearing.platform.messaging.domain.cud.system.JournalSdf;
|
||||||
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
|
|
||||||
|
import javax.annotation.PostConstruct;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.mockito.Mockito.timeout;
|
||||||
|
import static org.mockito.Mockito.verify;
|
||||||
|
import static ru.spcex.clearing.test.TestUtils.addRecordToKafka;
|
||||||
|
import static ru.spcex.clearing.test.TestUtils.getJsonStringForNew;
|
||||||
|
import static ru.spcex.clearing.test.config.KafkaTestConfig.getCaptor;
|
||||||
|
|
||||||
|
class S_DF07_Test extends AbstractServiceTest {
|
||||||
|
|
||||||
|
@PostConstruct
|
||||||
|
public void init() {
|
||||||
|
super.init();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Тест проверяет создание строк документа DBF .<br>
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
void cdeateSdf() {
|
||||||
|
Table table = Table.S_DF07;
|
||||||
|
Imdg<SDf07> map = imdgProvider.getImdg(table.getHazelcastMapName(), SDf07.class);
|
||||||
|
SDf07 sDf07 = new SDf07();
|
||||||
|
sDf07.setGenerationId(generationId);
|
||||||
|
sDf07.setAccount("curr_code");
|
||||||
|
sDf07.setSum(new BigDecimal(32));
|
||||||
|
sDf07.setMarket("remainder");
|
||||||
|
sDf07.setType("deal");
|
||||||
|
sDf07.setDeal("acc_code");
|
||||||
|
sDf07.setClientN("dat");
|
||||||
|
sDf07.setInn(new BigDecimal(2435));
|
||||||
|
sDf07.setBic(new BigDecimal(2435));
|
||||||
|
sDf07.setSpec("acc_type");
|
||||||
|
sDf07.setNumber(new BigDecimal(2435));
|
||||||
|
sDf07.setResult(new BigDecimal(2435));
|
||||||
|
map.insert(sDf07);
|
||||||
|
SdfClearingRequest sdfClearingRequest = new SdfClearingRequest();
|
||||||
|
sdfClearingRequest.setGroupId(generationId);
|
||||||
|
String request = getJsonStringForNew(sdfClearingRequest, generationId);
|
||||||
|
addRecordToKafka((MockConsumer) commandService.getConsumer(), Consts.SDF07_PROCESS, 0, 0, request);
|
||||||
|
|
||||||
|
//waiting for kafka send message (finale event)
|
||||||
|
ArgumentCaptor<ProducerRecord> captor = getCaptor(kafkaTemplate);
|
||||||
|
verify(kafkaTemplate, timeout(30_000L).times(1))
|
||||||
|
.send(captor.capture());
|
||||||
|
|
||||||
|
BaseRequest<Object> baseRequestResult = (BaseRequest<Object>) captor.getValue().value();
|
||||||
|
JournalSdf journalSdf = (JournalSdf) baseRequestResult.getRequestPayload();
|
||||||
|
assertEquals(generationId, journalSdf.getRegistrationNumber());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,58 @@
|
||||||
|
package ru.spcex.clearing.dbf.exporter.services;
|
||||||
|
|
||||||
|
import org.apache.kafka.clients.consumer.MockConsumer;
|
||||||
|
import org.apache.kafka.clients.producer.ProducerRecord;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.mockito.ArgumentCaptor;
|
||||||
|
import ru.clearing.classes.statics.data.sdf.SDf51;
|
||||||
|
import ru.spcex.clearing.dbf.exporter.AbstractServiceTest;
|
||||||
|
import ru.spcex.clearing.dbf.exporter.logic.data.enums.Table;
|
||||||
|
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;
|
||||||
|
import ru.spcex.clearing.platform.messaging.domain.cud.system.JournalSdf;
|
||||||
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
|
|
||||||
|
import javax.annotation.PostConstruct;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.mockito.Mockito.timeout;
|
||||||
|
import static org.mockito.Mockito.verify;
|
||||||
|
import static ru.spcex.clearing.test.TestUtils.addRecordToKafka;
|
||||||
|
import static ru.spcex.clearing.test.TestUtils.getJsonStringForNew;
|
||||||
|
import static ru.spcex.clearing.test.config.KafkaTestConfig.getCaptor;
|
||||||
|
|
||||||
|
class S_DF51_Test extends AbstractServiceTest {
|
||||||
|
|
||||||
|
@PostConstruct
|
||||||
|
public void init() {
|
||||||
|
super.init();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Тест проверяет создание строк документа DBF .<br>
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
void cdeateSdf() {
|
||||||
|
Table table = Table.S_DF51;
|
||||||
|
Imdg<SDf51> map = imdgProvider.getImdg(table.getHazelcastMapName(), SDf51.class);
|
||||||
|
SDf51 sDf51 = new SDf51();
|
||||||
|
sDf51.setGenerationId(generationId);
|
||||||
|
sDf51.setNumber("curr_code");
|
||||||
|
sDf51.setDatetime("245367");
|
||||||
|
map.insert(sDf51);
|
||||||
|
SdfClearingRequest sdfClearingRequest = new SdfClearingRequest();
|
||||||
|
sdfClearingRequest.setGroupId(generationId);
|
||||||
|
String request = getJsonStringForNew(sdfClearingRequest, generationId);
|
||||||
|
addRecordToKafka((MockConsumer) commandService.getConsumer(), Consts.SDF51_PROCESS, 0, 0, request);
|
||||||
|
|
||||||
|
//waiting for kafka send message (finale event)
|
||||||
|
ArgumentCaptor<ProducerRecord> captor = getCaptor(kafkaTemplate);
|
||||||
|
verify(kafkaTemplate, timeout(30_000L).times(1))
|
||||||
|
.send(captor.capture());
|
||||||
|
|
||||||
|
BaseRequest<Object> baseRequestResult = (BaseRequest<Object>) captor.getValue().value();
|
||||||
|
JournalSdf journalSdf = (JournalSdf) baseRequestResult.getRequestPayload();
|
||||||
|
assertEquals(generationId, journalSdf.getRegistrationNumber());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,61 @@
|
||||||
|
package ru.spcex.clearing.dbf.exporter.services;
|
||||||
|
|
||||||
|
import org.apache.kafka.clients.consumer.MockConsumer;
|
||||||
|
import org.apache.kafka.clients.producer.ProducerRecord;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.mockito.ArgumentCaptor;
|
||||||
|
import ru.clearing.classes.statics.data.sdf.SDf53;
|
||||||
|
import ru.spcex.clearing.dbf.exporter.AbstractServiceTest;
|
||||||
|
import ru.spcex.clearing.dbf.exporter.logic.data.enums.Table;
|
||||||
|
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;
|
||||||
|
import ru.spcex.clearing.platform.messaging.domain.cud.system.JournalSdf;
|
||||||
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
|
|
||||||
|
import javax.annotation.PostConstruct;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.mockito.Mockito.timeout;
|
||||||
|
import static org.mockito.Mockito.verify;
|
||||||
|
import static ru.spcex.clearing.test.TestUtils.addRecordToKafka;
|
||||||
|
import static ru.spcex.clearing.test.TestUtils.getJsonStringForNew;
|
||||||
|
import static ru.spcex.clearing.test.config.KafkaTestConfig.getCaptor;
|
||||||
|
|
||||||
|
class S_DF53_Test extends AbstractServiceTest {
|
||||||
|
|
||||||
|
@PostConstruct
|
||||||
|
public void init() {
|
||||||
|
super.init();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Тест проверяет создание строк документа DBF .<br>
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
void cdeateSdf() {
|
||||||
|
Table table = Table.S_DF53;
|
||||||
|
Imdg<SDf53> map = imdgProvider.getImdg(table.getHazelcastMapName(), SDf53.class);
|
||||||
|
SDf53 sDf53 = new SDf53();
|
||||||
|
sDf53.setGenerationId(generationId);
|
||||||
|
sDf53.setAccount("curr_code");
|
||||||
|
sDf53.setDeal("245367");
|
||||||
|
sDf53.setStatus(12345L);
|
||||||
|
sDf53.setResult(new BigDecimal(2345));
|
||||||
|
map.insert(sDf53);
|
||||||
|
SdfClearingRequest sdfClearingRequest = new SdfClearingRequest();
|
||||||
|
sdfClearingRequest.setGroupId(generationId);
|
||||||
|
String request = getJsonStringForNew(sdfClearingRequest, generationId);
|
||||||
|
addRecordToKafka((MockConsumer) commandService.getConsumer(), Consts.SDF53_PROCESS, 0, 0, request);
|
||||||
|
|
||||||
|
//waiting for kafka send message (finale event)
|
||||||
|
ArgumentCaptor<ProducerRecord> captor = getCaptor(kafkaTemplate);
|
||||||
|
verify(kafkaTemplate, timeout(30_000L).times(1))
|
||||||
|
.send(captor.capture());
|
||||||
|
|
||||||
|
BaseRequest<Object> baseRequestResult = (BaseRequest<Object>) captor.getValue().value();
|
||||||
|
JournalSdf journalSdf = (JournalSdf) baseRequestResult.getRequestPayload();
|
||||||
|
assertEquals(generationId, journalSdf.getRegistrationNumber());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,96 @@
|
||||||
|
package ru.spcex.clearing.dbf.exporter.services;
|
||||||
|
|
||||||
|
import org.apache.kafka.clients.consumer.MockConsumer;
|
||||||
|
import org.apache.kafka.clients.producer.ProducerRecord;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.mockito.ArgumentCaptor;
|
||||||
|
import ru.clearing.classes.statics.data.sdf.SDf54;
|
||||||
|
import ru.spcex.clearing.dbf.exporter.AbstractServiceTest;
|
||||||
|
import ru.spcex.clearing.dbf.exporter.logic.data.enums.Table;
|
||||||
|
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;
|
||||||
|
import ru.spcex.clearing.platform.messaging.domain.cud.system.JournalSdf;
|
||||||
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
|
|
||||||
|
import javax.annotation.PostConstruct;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.mockito.Mockito.timeout;
|
||||||
|
import static org.mockito.Mockito.verify;
|
||||||
|
import static ru.spcex.clearing.test.TestUtils.addRecordToKafka;
|
||||||
|
import static ru.spcex.clearing.test.TestUtils.getJsonStringForNew;
|
||||||
|
import static ru.spcex.clearing.test.config.KafkaTestConfig.getCaptor;
|
||||||
|
|
||||||
|
class S_DF54_Test extends AbstractServiceTest {
|
||||||
|
|
||||||
|
@PostConstruct
|
||||||
|
public void init() {
|
||||||
|
super.init();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Тест проверяет создание строк документа DBF .<br>
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
void cdeateSdf() {
|
||||||
|
Table table = Table.S_DF54;
|
||||||
|
Imdg<SDf54> map = imdgProvider.getImdg(table.getHazelcastMapName(), SDf54.class);
|
||||||
|
SDf54 sDf54 = new SDf54();
|
||||||
|
sDf54.setGenerationId(generationId);
|
||||||
|
sDf54.setSeg_type("seg_type");
|
||||||
|
sDf54.setDoc_type("doc_type");
|
||||||
|
sDf54.setDocnm_ref("docnm_ref");
|
||||||
|
sDf54.setDocnmprev("docnmprev");
|
||||||
|
sDf54.setSbankcode("sbankcode");
|
||||||
|
sDf54.setC_acc_deb("c_acc_deb");
|
||||||
|
sDf54.setSbanknam1("sbanknam1");
|
||||||
|
sDf54.setSbanknam2("sbanknam2");
|
||||||
|
sDf54.setSbanknam3("sbanknam3");
|
||||||
|
sDf54.setSbanknam4("sbanknam4");
|
||||||
|
sDf54.setSbanknam5("sbanknam5");
|
||||||
|
sDf54.setRbankcode("rbankcode");
|
||||||
|
sDf54.setC_acc_cred("c_acc_cred");
|
||||||
|
sDf54.setRbanknam1("rbanknam1");
|
||||||
|
sDf54.setRbanknam2("rbanknam2");
|
||||||
|
sDf54.setRbanknam3("rbanknam3");
|
||||||
|
sDf54.setRbanknam4("rbanknam4");
|
||||||
|
sDf54.setRbanknam5("rbanknam5");
|
||||||
|
sDf54.setOp_type("op_type");
|
||||||
|
sDf54.setOp_order("op_order");
|
||||||
|
sDf54.setPay_date("pay_date");
|
||||||
|
sDf54.setPay_val("pay_val");
|
||||||
|
sDf54.setSum_deb("sum_deb");
|
||||||
|
sDf54.setSclientn1("sclientn1");
|
||||||
|
sDf54.setSclientn2("sclientn2");
|
||||||
|
sDf54.setSclientn3("sclientn3");
|
||||||
|
sDf54.setSclientn4("sclientn4");
|
||||||
|
sDf54.setInn_deb("inn_deb");
|
||||||
|
sDf54.setKpp_deb("kpp_deb");
|
||||||
|
sDf54.setAcc_deb("acc_deb");
|
||||||
|
sDf54.setRclientn1("rclientn1");
|
||||||
|
sDf54.setRclientn2("rclientn2");
|
||||||
|
sDf54.setRclientn3("rclientn3");
|
||||||
|
sDf54.setRclientn4("rclientn4");
|
||||||
|
sDf54.setInn_cred("inn_cred");
|
||||||
|
sDf54.setKpp_cred("kpp_cred");
|
||||||
|
sDf54.setAcc_kr_1("acc_kr_1");
|
||||||
|
sDf54.setSpecif_1("specif_1");
|
||||||
|
sDf54.setSend_type("send_type");
|
||||||
|
sDf54.setDoc_result("doc_result");
|
||||||
|
map.insert(sDf54);
|
||||||
|
SdfClearingRequest sdfClearingRequest = new SdfClearingRequest();
|
||||||
|
sdfClearingRequest.setGroupId(generationId);
|
||||||
|
String request = getJsonStringForNew(sdfClearingRequest, generationId);
|
||||||
|
addRecordToKafka((MockConsumer) commandService.getConsumer(), Consts.SDF54_PROCESS, 0, 0, request);
|
||||||
|
|
||||||
|
//waiting for kafka send message (finale event)
|
||||||
|
ArgumentCaptor<ProducerRecord> captor = getCaptor(kafkaTemplate);
|
||||||
|
verify(kafkaTemplate, timeout(30_000L).times(1))
|
||||||
|
.send(captor.capture());
|
||||||
|
|
||||||
|
BaseRequest<Object> baseRequestResult = (BaseRequest<Object>) captor.getValue().value();
|
||||||
|
JournalSdf journalSdf = (JournalSdf) baseRequestResult.getRequestPayload();
|
||||||
|
assertEquals(generationId, journalSdf.getRegistrationNumber());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,61 @@
|
||||||
|
package ru.spcex.clearing.dbf.exporter.services;
|
||||||
|
|
||||||
|
import org.apache.kafka.clients.consumer.MockConsumer;
|
||||||
|
import org.apache.kafka.clients.producer.ProducerRecord;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.mockito.ArgumentCaptor;
|
||||||
|
import ru.clearing.classes.statics.data.sdf.SDf56;
|
||||||
|
import ru.spcex.clearing.dbf.exporter.AbstractServiceTest;
|
||||||
|
import ru.spcex.clearing.dbf.exporter.logic.data.enums.Table;
|
||||||
|
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;
|
||||||
|
import ru.spcex.clearing.platform.messaging.domain.cud.system.JournalSdf;
|
||||||
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
|
|
||||||
|
import javax.annotation.PostConstruct;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.mockito.Mockito.timeout;
|
||||||
|
import static org.mockito.Mockito.verify;
|
||||||
|
import static ru.spcex.clearing.test.TestUtils.addRecordToKafka;
|
||||||
|
import static ru.spcex.clearing.test.TestUtils.getJsonStringForNew;
|
||||||
|
import static ru.spcex.clearing.test.config.KafkaTestConfig.getCaptor;
|
||||||
|
|
||||||
|
class S_DF56_Test extends AbstractServiceTest {
|
||||||
|
|
||||||
|
@PostConstruct
|
||||||
|
public void init() {
|
||||||
|
super.init();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Тест проверяет создание строк документа DBF .<br>
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
void cdeateSdf() {
|
||||||
|
Table table = Table.S_DF56;
|
||||||
|
Imdg<SDf56> map = imdgProvider.getImdg(table.getHazelcastMapName(), SDf56.class);
|
||||||
|
SDf56 sDf56 = new SDf56();
|
||||||
|
sDf56.setGenerationId(generationId);
|
||||||
|
sDf56.setNumber("seg_type");
|
||||||
|
sDf56.setStart_datetime("23456");
|
||||||
|
sDf56.setEnd_datetime("345678");
|
||||||
|
sDf56.setAccount("docnmprev");
|
||||||
|
sDf56.setDeal("sbankcode");
|
||||||
|
map.insert(sDf56);
|
||||||
|
SdfClearingRequest sdfClearingRequest = new SdfClearingRequest();
|
||||||
|
sdfClearingRequest.setGroupId(generationId);
|
||||||
|
String request = getJsonStringForNew(sdfClearingRequest, generationId);
|
||||||
|
addRecordToKafka((MockConsumer) commandService.getConsumer(), Consts.SDF56_PROCESS, 0, 0, request);
|
||||||
|
|
||||||
|
//waiting for kafka send message (finale event)
|
||||||
|
ArgumentCaptor<ProducerRecord> captor = getCaptor(kafkaTemplate);
|
||||||
|
verify(kafkaTemplate, timeout(30_000L).times(1))
|
||||||
|
.send(captor.capture());
|
||||||
|
|
||||||
|
BaseRequest<Object> baseRequestResult = (BaseRequest<Object>) captor.getValue().value();
|
||||||
|
JournalSdf journalSdf = (JournalSdf) baseRequestResult.getRequestPayload();
|
||||||
|
assertEquals(generationId, journalSdf.getRegistrationNumber());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,19 +1,14 @@
|
||||||
package ru.spcex.clearing.lim.exporter;
|
package ru.spcex.clearing.lim.exporter;
|
||||||
|
|
||||||
import org.apache.kafka.clients.producer.MockProducer;
|
import org.apache.kafka.clients.producer.Producer;
|
||||||
import org.apache.kafka.clients.producer.ProducerRecord;
|
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
import org.mockito.ArgumentCaptor;
|
|
||||||
import org.mockito.Captor;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.beans.factory.annotation.Qualifier;
|
import org.springframework.beans.factory.annotation.Qualifier;
|
||||||
import org.springframework.boot.test.mock.mockito.MockBean;
|
|
||||||
import org.springframework.test.context.ContextConfiguration;
|
import org.springframework.test.context.ContextConfiguration;
|
||||||
import org.springframework.test.context.junit.jupiter.SpringExtension;
|
import org.springframework.test.context.junit.jupiter.SpringExtension;
|
||||||
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.imdg.IMDGDistributedNames;
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
import ru.spcex.clearing.test.TestUtils;
|
|
||||||
import ru.spcex.clearing.test.config.ImdgTestConfig;
|
import ru.spcex.clearing.test.config.ImdgTestConfig;
|
||||||
import ru.spcex.clearing.test.config.KafkaTestConfig;
|
import ru.spcex.clearing.test.config.KafkaTestConfig;
|
||||||
import ru.spcex.platform.imdg.api.Imdg;
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
|
|
@ -21,8 +16,6 @@ import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||||
|
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
|
|
||||||
import static org.mockito.Mockito.doReturn;
|
|
||||||
import static org.mockito.Mockito.spy;
|
|
||||||
import static ru.spcex.clearing.test.config.ImdgTestConfig.currentID;
|
import static ru.spcex.clearing.test.config.ImdgTestConfig.currentID;
|
||||||
import static ru.spcex.clearing.test.config.ImdgTestConfig.waitAvailableImdgProviderAndAddAdminWithDefaultId;
|
import static ru.spcex.clearing.test.config.ImdgTestConfig.waitAvailableImdgProviderAndAddAdminWithDefaultId;
|
||||||
|
|
||||||
|
|
@ -40,10 +33,10 @@ public abstract class AbstractServiceTest {
|
||||||
protected Long securityIdFirst = 12L;
|
protected Long securityIdFirst = 12L;
|
||||||
protected Long securityIdSecond = 23L;
|
protected Long securityIdSecond = 23L;
|
||||||
|
|
||||||
@Captor
|
@Autowired
|
||||||
protected ArgumentCaptor<ProducerRecord> producerRecord;
|
@Qualifier("mockProducer")
|
||||||
@MockBean
|
protected Producer<String, Object> mockProducer;
|
||||||
protected MockProducer<String, Object> mockProducer;
|
|
||||||
@Autowired
|
@Autowired
|
||||||
@Qualifier("hazelcastServiceTest")
|
@Qualifier("hazelcastServiceTest")
|
||||||
protected ImdgProvider imdgProvider;
|
protected ImdgProvider imdgProvider;
|
||||||
|
|
@ -52,8 +45,5 @@ public abstract class AbstractServiceTest {
|
||||||
waitAvailableImdgProviderAndAddAdminWithDefaultId();
|
waitAvailableImdgProviderAndAddAdminWithDefaultId();
|
||||||
this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
|
this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
|
||||||
this.tradingClearingRegistryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class);
|
this.tradingClearingRegistryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class);
|
||||||
|
|
||||||
TestUtils.FutureRecordMetadata future = spy(new TestUtils.FutureRecordMetadata());
|
|
||||||
doReturn(future).when(mockProducer).send(producerRecord.capture());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue