diff --git a/clearing-parent/default-management/pom.xml b/clearing-parent/default-management/pom.xml
new file mode 100644
index 000000000..bade73631
--- /dev/null
+++ b/clearing-parent/default-management/pom.xml
@@ -0,0 +1,116 @@
+
+
+ 4.0.0
+
+ ru.spcex.clearing
+ clearing-parent
+ SPCEX-3.22.285
+
+
+ default-management
+
+
+ 17
+ 17
+ UTF-8
+
+
+
+
+ ru.spcex.platform
+ platform-messaging
+
+
+ ru.spcex.platform
+ platform-imdg-api-hazelcast-impl
+
+
+ ru.spcex.clearing
+ security-util
+
+
+ ru.spcex.clearing
+ classes
+
+
+ ru.spcex.platform
+ platform-enum
+
+
+ ru.spcex.clearing
+ clearing-validation
+
+
+ org.springframework.boot
+ spring-boot-starter
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+
+ net.logstash.logback
+ logstash-logback-encoder
+ 7.0.1
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ ru.spcex.clearing
+ test-clearing
+ test
+
+
+
+
+
+
+ src/main/resources
+
+ application.properties
+
+ false
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+ repackage
+
+
+
+
+ ${project.artifactId}
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ 2.21.0
+
+
+ org.junit.platform
+ junit-platform-surefire-provider
+ 1.2.0-M1
+
+
+ org.junit.jupiter
+ junit-jupiter-engine
+ 5.2.0-M1
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/DefaultManagementApplication.java b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/DefaultManagementApplication.java
new file mode 100644
index 000000000..5da314b50
--- /dev/null
+++ b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/DefaultManagementApplication.java
@@ -0,0 +1,12 @@
+package ru.spcex.clearing.dflt.management;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class DefaultManagementApplication {
+ public static void main(String[] args) {
+ SpringApplication app = new SpringApplication(DefaultManagementApplication.class);
+ app.run(args);
+ }
+}
diff --git a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/config/AppConfig.java b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/config/AppConfig.java
new file mode 100644
index 000000000..95da03020
--- /dev/null
+++ b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/config/AppConfig.java
@@ -0,0 +1,65 @@
+package ru.spcex.clearing.dflt.management.config;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.beans.factory.config.ConfigurableBeanFactory;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Scope;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+import ru.spcex.clearing.dflt.management.config.settings.DefaultManagementSettings;
+import ru.spcex.clearing.dflt.management.error.DefaultManagementErrors;
+import ru.spcex.clearing.util.security.UserRoleVerification;
+import ru.spcex.clearing.util.services.IMDGMessageResolver;
+import ru.spcex.platform.enumeration.UserRole;
+import ru.spcex.platform.imdg.api.ImdgProvider;
+import ru.spcex.platform.imdg.iml.hazelcast.service.HazelcastService;
+import ru.spcex.platform.utils.enumeration.IMessageResolver;
+
+@Configuration
+public class AppConfig {
+
+ 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;
+ }
+
+ @Bean(name = "taskExecutorHazelcastClientInitializer")
+ public ThreadPoolTaskExecutor taskExecutorHazelcastClientInitializer() {
+ return createThreadPoolTaskExecutor(1, true);
+ }
+
+ @Bean(name = "taskExecutorIdGeneratorAwaiter")
+ public ThreadPoolTaskExecutor taskExecutorIdGeneratorAwaiter() {
+ return createThreadPoolTaskExecutor(1, false);
+ }
+
+ @Autowired
+ @Bean
+ public ImdgProvider imdgProvider(
+ @Qualifier("taskExecutorHazelcastClientInitializer") ThreadPoolTaskExecutor taskExecutorHazelcastClientInitializer,
+ @Qualifier("taskExecutorIdGeneratorAwaiter") ThreadPoolTaskExecutor taskExecutorIdGeneratorAwaiter,
+ DefaultManagementSettings settings
+ ) {
+ return new HazelcastService(taskExecutorHazelcastClientInitializer,
+ taskExecutorIdGeneratorAwaiter,
+ settings.getHazelcast());
+ }
+
+ @Bean
+ @Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
+ public UserRoleVerification userRoleVerification(ImdgProvider imdgProvider, IMessageResolver messageResolver) {
+ return new UserRoleVerification(imdgProvider, messageResolver, UserRole.Admin, DefaultManagementErrors.UserVerifyDenial);
+ }
+
+ @Bean
+ public IMessageResolver messageResolver(ImdgProvider imdgProvider) {
+ return new IMDGMessageResolver(imdgProvider);
+ }
+}
diff --git a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/config/KafkaConfig.java b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/config/KafkaConfig.java
new file mode 100644
index 000000000..d0ab04543
--- /dev/null
+++ b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/config/KafkaConfig.java
@@ -0,0 +1,65 @@
+package ru.spcex.clearing.dflt.management.config;
+
+import org.apache.kafka.clients.consumer.Consumer;
+import org.apache.kafka.clients.producer.Producer;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.config.ConfigurableBeanFactory;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Scope;
+import org.springframework.kafka.core.KafkaTemplate;
+import org.springframework.kafka.core.ProducerFactory;
+import ru.spcex.clearing.dflt.management.config.settings.DefaultManagementSettings;
+import ru.spcex.clearing.imdg.IMDGDistributedNames;
+import ru.spcex.clearing.platform.messaging.config.KafkaConsumerFactory;
+import ru.spcex.clearing.platform.messaging.config.KafkaProducerFactory;
+import ru.spcex.clearing.platform.messaging.config.element.KafkaProducerSettings;
+import ru.spcex.clearing.platform.messaging.service.RequestInfo;
+import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
+import ru.spcex.platform.imdg.api.Imdg;
+import ru.spcex.platform.imdg.api.ImdgId;
+import ru.spcex.platform.imdg.api.ImdgProvider;
+
+@Configuration
+public class KafkaConfig {
+ @Autowired
+ @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
+ @Bean("kafkaConsumer")
+ public Consumer createConsumer(DefaultManagementSettings settings) {
+ return KafkaConsumerFactory.consumer(settings.getKafkaConsumer());
+ }
+
+ @Autowired
+ @Bean("kafkaProducer")
+ public Producer createProducer(DefaultManagementSettings settings) {
+ return KafkaProducerFactory.producer(settings.getKafkaProducer());
+ }
+
+ @Bean
+ public ProducerFactory pf(DefaultManagementSettings settings) {
+ KafkaProducerSettings kafkaSettings = settings.getKafkaProducer();
+ return KafkaProducerFactory.producerFactory(kafkaSettings);
+ }
+
+ @Bean("kafkaTemplate")
+ public KafkaTemplate kafkaTemplate(ProducerFactory pf) {
+ return new KafkaTemplate<>(pf);
+ }
+
+ @Autowired
+ @Bean
+ public KafkaSender kafkaSender(KafkaTemplate kafkaTemplate,
+ ImdgProvider imdgProvider) {
+ ImdgId imdgIdGenerator = imdgProvider.getImdgIdGenerator();
+ return KafkaSender
+ .setup()
+ .setKafkaTemplate(kafkaTemplate)
+ .idGenerator(imdgIdGenerator::nextId)
+ .imdgProvider(s -> {
+ Imdg imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_RequestInfo, RequestInfo.class);
+ return imdg::insert;
+ })
+ .build();
+ }
+
+}
diff --git a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/config/settings/DefaultManagementSettings.java b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/config/settings/DefaultManagementSettings.java
new file mode 100644
index 000000000..c01590b6b
--- /dev/null
+++ b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/config/settings/DefaultManagementSettings.java
@@ -0,0 +1,41 @@
+package ru.spcex.clearing.dflt.management.config.settings;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.PropertySource;
+import org.springframework.stereotype.Component;
+import ru.spcex.clearing.platform.messaging.config.element.KafkaConsumerSettings;
+import ru.spcex.clearing.platform.messaging.config.element.KafkaProducerSettings;
+import ru.spcex.platform.imdg.iml.hazelcast.config.HazelcastClientParams;
+
+@Component
+@PropertySource("file:${spring.config.location}/application.properties")
+@ConfigurationProperties("default-management")
+public class DefaultManagementSettings {
+ private HazelcastClientParams hazelcast;
+ private KafkaConsumerSettings kafkaConsumer;
+ private KafkaProducerSettings kafkaProducer;
+
+ public HazelcastClientParams getHazelcast() {
+ return hazelcast;
+ }
+
+ public void setHazelcast(HazelcastClientParams hazelcast) {
+ this.hazelcast = hazelcast;
+ }
+
+ public KafkaConsumerSettings getKafkaConsumer() {
+ return kafkaConsumer;
+ }
+
+ public void setKafkaConsumer(KafkaConsumerSettings kafkaConsumer) {
+ this.kafkaConsumer = kafkaConsumer;
+ }
+
+ public KafkaProducerSettings getKafkaProducer() {
+ return kafkaProducer;
+ }
+
+ public void setKafkaProducer(KafkaProducerSettings kafkaProducer) {
+ this.kafkaProducer = kafkaProducer;
+ }
+}
diff --git a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/error/DefaultManagementErrors.java b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/error/DefaultManagementErrors.java
new file mode 100644
index 000000000..fdc0f1a7e
--- /dev/null
+++ b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/error/DefaultManagementErrors.java
@@ -0,0 +1,19 @@
+package ru.spcex.clearing.dflt.management.error;
+
+import ru.spcex.platform.utils.enumeration.IErrorEnumId;
+
+public enum DefaultManagementErrors implements IErrorEnumId {
+
+ //todo уточнить порядковый номер ошибки модуля
+ GeneralError(3000L), // Общая ошибка модуля
+ UserVerifyDenial(3001L); // 'Нет прав на проведение данной операции
+
+ private final Long id;
+ DefaultManagementErrors(Long id) {
+ this.id = id;
+ }
+ @Override
+ public Long getId() {
+ return this.id;
+ }
+}
diff --git a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/listener/OvernightSettingsListener.java b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/listener/OvernightSettingsListener.java
new file mode 100644
index 000000000..471dcb2e3
--- /dev/null
+++ b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/listener/OvernightSettingsListener.java
@@ -0,0 +1,43 @@
+package ru.spcex.clearing.dflt.management.listener;
+
+import org.apache.kafka.clients.consumer.Consumer;
+import org.apache.kafka.clients.producer.Producer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
+import ru.spcex.clearing.platform.messaging.domain.Consts;
+import ru.spcex.clearing.platform.messaging.domain.cud.misc.OvernightSettingsNewRequest;
+import ru.spcex.clearing.platform.messaging.service.QueueConsumer;
+import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate;
+import ru.spcex.clearing.util.security.UserRoleVerification;
+import ru.spcex.platform.imdg.api.ImdgProvider;
+
+@Service
+public class OvernightSettingsListener extends QueueConsumer implements InitializingBean {
+ protected final Logger log = LoggerFactory.getLogger(getClass());
+ protected ImdgProvider imdgProvider;
+
+ @Autowired
+ public OvernightSettingsListener(Consumer kafkaQueue,
+ Producer kafkaProducer,
+ ImdgProvider imdgProvider,
+ UserRoleVerification userRoleVerification) {
+ super(kafkaQueue, kafkaProducer);
+ this.imdgProvider = imdgProvider;
+ }
+
+ @Override
+ public void afterPropertiesSet() {
+ callback(OvernightSettingsNewRequest.class)
+ .setFunction(this::processNewReq)
+ .forDestination(Consts.OVERNIGHT_SETTINGS_NEW, callbacks::put);
+ init();
+ }
+
+ private RequestInfoUpdate processNewReq(BaseRequest newReq) {
+ return null;
+ }
+}
diff --git a/clearing-parent/default-management/src/main/resources/application.properties b/clearing-parent/default-management/src/main/resources/application.properties
new file mode 100644
index 000000000..c5e939da0
--- /dev/null
+++ b/clearing-parent/default-management/src/main/resources/application.properties
@@ -0,0 +1,19 @@
+spring.main.web-application-type=none
+default-management.hazelcast.cluster-members=127.0.0.1:5701
+default-management.hazelcast.login=dev
+default-management.hazelcast.password=dev-pass
+
+default-management.kafka-consumer.bootstrap-servers=localhost:9092
+default-management.kafka-consumer.group-id=dev-group-company-service
+default-management.kafka-consumer.enable-auto-commit=true
+default-management.kafka-consumer.session-timeout-ms=30000
+default-management.kafka-consumer.auto-offset-reset=latest
+default-management.kafka-consumer.linger-ms=1
+default-management.kafka-consumer.buffer-memory=33554432
+
+default-management.kafka-producer.bootstrap-servers=localhost:9092
+default-management.kafka-producer.acks=all
+default-management.kafka-producer.retries=0
+default-management.kafka-producer.batch-size=16384
+default-management.kafka-producer.linger-ms=1
+default-management.kafka-producer.buffer-memory=33554432
\ No newline at end of file
diff --git a/clearing-parent/default-management/src/main/resources/logback.xml b/clearing-parent/default-management/src/main/resources/logback.xml
new file mode 100644
index 000000000..9a2178d7d
--- /dev/null
+++ b/clearing-parent/default-management/src/main/resources/logback.xml
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+
+ ${CONSOLE_LOG_PATTERN}
+ utf-8
+
+
+
+
+ ${LOG_PATH}/${FILE_NAME}-text.log
+
+
+ ${FILE_LOG_PATTERN}
+ utf8
+
+
+ ${LOG_PATH}/${FILE_NAME}-text.%d{yyyy-MM-dd}.%i.gz
+
+
+ 100MB
+
+ 10
+
+
+
+
+ ${LOG_PATH}/${FILE_NAME}-json.log
+
+
+ ${LOG_PATH}/${FILE_NAME}-json.%d{yyyy-MM-dd}.%i.gz
+
+
+ 100MB
+
+ 10
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/clearing-parent/pom.xml b/clearing-parent/pom.xml
index 67574b778..cfce19672 100644
--- a/clearing-parent/pom.xml
+++ b/clearing-parent/pom.xml
@@ -46,6 +46,7 @@
imdg-hist
xml-importer
xml-exporter
+ default-management
diff --git a/pom.xml b/pom.xml
index bed27883a..a5cffc923 100644
--- a/pom.xml
+++ b/pom.xml
@@ -56,7 +56,7 @@
${folder_root_clearing}/clearing-parent/gateway-api
${folder_root_clearing}/clearing-parent/xml-exporter
${folder_root_clearing}/clearing-parent/xml-importer
- ${folder_root_clearing}/clearing-parent/fix-service
+ ${folder_root_clearing}/clearing-parent/default-management
3.12.4
1.7.33
diff --git a/z-distr/pom.xml b/z-distr/pom.xml
index e4cba9c61..7081bd7f6 100644
--- a/z-distr/pom.xml
+++ b/z-distr/pom.xml
@@ -641,6 +641,29 @@
+
+ copy-df-management-service-bin
+ prepare-package
+
+ copy
+
+
+
+
+ ${folder_root_df-management}/target/default-management.jar
+ ${folder.clearing.distr.bin}/default-management.jar
+
+
+ ${folder_root_df-management}/target/default-management.jar
+ ${folder.clearing.distr.services}/default-management/default-management.jar
+
+
+ ${folder_root_df-management}/src/main/resources/application.properties
+ ${folder.clearing.distr.settings}/default-management/application.properties
+
+
+
+
diff --git a/z-distr/src/main/resources/distr/sh/default-management.sh b/z-distr/src/main/resources/distr/sh/default-management.sh
new file mode 100644
index 000000000..8bb01b95a
--- /dev/null
+++ b/z-distr/src/main/resources/distr/sh/default-management.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+CLEARING_HOME=/opt/mfd/clearing/
+cd $CLEARING_HOME/bin
+
+CMD="java -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=6044 -jar default-management.jar --spring.config.location=$CLEARING_HOME/settings/default-management/"
+
+$CMD >/dev/null 2>&1 &
+
diff --git a/z-distr/src/main/resources/distr/sh/kill_all.sh b/z-distr/src/main/resources/distr/sh/kill_all.sh
index ddda9a827..e8137e457 100644
--- a/z-distr/src/main/resources/distr/sh/kill_all.sh
+++ b/z-distr/src/main/resources/distr/sh/kill_all.sh
@@ -22,4 +22,5 @@ kill -9 $(ps -ef | grep java | grep swt-importer.jar | awk '{print $2}')
kill -9 $(ps -ef | grep java | grep gateway-api.jar | awk '{print $2}')
kill -9 $(ps -ef | grep java | grep xml-exporter.jar | awk '{print $2}')
kill -9 $(ps -ef | grep java | grep xml-importer.jar | awk '{print $2}')
-kill -9 $(ps -ef | grep java | grep fix-service.jar | awk '{print $2}')
\ No newline at end of file
+kill -9 $(ps -ef | grep java | grep fix-service.jar | awk '{print $2}')
+kill -9 $(ps -ef | grep java | grep default-management.jar | awk '{print $2}')
\ No newline at end of file
diff --git a/z-distr/src/main/resources/distr/sh/launch_all.sh b/z-distr/src/main/resources/distr/sh/launch_all.sh
index 2eba4b277..89152ed3d 100644
--- a/z-distr/src/main/resources/distr/sh/launch_all.sh
+++ b/z-distr/src/main/resources/distr/sh/launch_all.sh
@@ -23,3 +23,4 @@ cd /opt/mfd/clearing/bin
/opt/mfd/clearing/bin/xml-exporter.sh
/opt/mfd/clearing/bin/xml-importer.sh
/opt/mfd/clearing/bin/fix-service.sh
+/opt/mfd/clearing/bin/default-management.sh