diff --git a/clearing-parent/default-management/pom.xml b/clearing-parent/default-management/pom.xml index bade73631..92cacd091 100644 --- a/clearing-parent/default-management/pom.xml +++ b/clearing-parent/default-management/pom.xml @@ -6,7 +6,7 @@ ru.spcex.clearing clearing-parent - SPCEX-3.22.285 + SPCEX-3.22.295 default-management diff --git a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/listener/TaskListener.java b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/listener/TaskListener.java new file mode 100644 index 000000000..3993b7878 --- /dev/null +++ b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/listener/TaskListener.java @@ -0,0 +1,71 @@ +package ru.spcex.clearing.dflt.management.listener; + +import java.util.Collection; +import java.util.Optional; +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.clearing.classes.statics.data.misc.OvernightSettings; +import ru.clearing.classes.statics.data.registry.Registry; +import ru.spcex.clearing.dflt.management.service.OrderCurrencyService; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.domain.BaseRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.misc.OvernightSettingsNewRequest; +import ru.spcex.clearing.platform.messaging.service.QueueConsumer; +import ru.spcex.clearing.util.security.UserRoleVerification; +import ru.spcex.platform.enumeration.OvernightType; +import ru.spcex.platform.enumeration.Task; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; +import ru.spcex.platform.utils.enumeration.IEnumKey; + +@Service +public class TaskListener extends QueueConsumer implements InitializingBean { + protected final Logger log = LoggerFactory.getLogger(getClass()); + private final OrderCurrencyService orderCurrencyService; + private final ImdgProvider imdgProvider; + private final Imdg registryImdg; + private final Imdg overnightSettingsImdg; + + @Autowired + public TaskListener(Consumer kafkaQueue, + Producer kafkaProducer, + ImdgProvider imdgProvider, + UserRoleVerification userRoleVerification, + OrderCurrencyService orderCurrencyService) { + super(kafkaQueue, kafkaProducer); + this.imdgProvider = imdgProvider; + this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); + this.overnightSettingsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_OvernightSettings, OvernightSettings.class); + this.orderCurrencyService = orderCurrencyService; + } + + @Override + public void afterPropertiesSet() { + callback(OvernightSettingsNewRequest.class) + .setConsumer(this::createOrder) + .forDestination(Task.CROR.topic(), callbacks::put); + init(); + } + + private void createOrder(BaseRequest newReq) { + Collection registries = orderCurrencyService.getCurrencyRegistry(); + for (Long registryId : registries) { + Registry registry = registryImdg.getSingleObjectByID(registryId); + Optional overnightSettings = orderCurrencyService.findOvernightSettingsByCompany(registry.getCompanyId()); + Optional overnightType = overnightSettings + .map(settings -> IEnumKey.getEnumByKey(OvernightType.class, settings.getOvernightType())); + + if (overnightType.isPresent() && overnightType.get() == OvernightType.SPOT) { + + } else if (overnightType.isEmpty() || overnightType.get() == OvernightType.SWAP) { + + } + } + } + +} diff --git a/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/OrderCurrencyService.java b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/OrderCurrencyService.java new file mode 100644 index 000000000..3e961321a --- /dev/null +++ b/clearing-parent/default-management/src/main/java/ru/spcex/clearing/dflt/management/service/OrderCurrencyService.java @@ -0,0 +1,53 @@ +package ru.spcex.clearing.dflt.management.service; + +import java.util.Collection; +import java.util.Optional; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import ru.clearing.classes.statics.data.misc.OvernightSettings; +import ru.clearing.classes.statics.data.registry.Registry; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.util.security.UserRoleVerification; +import ru.spcex.platform.enumeration.Market; +import ru.spcex.platform.enumeration.RegistryStatus; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; +import ru.spcex.platform.imdg.api.predicate.ImdgPredicate; +import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; + +@Service +public class OrderCurrencyService { + private final Logger log = LoggerFactory.getLogger(getClass()); + private ImdgProvider imdgProvider; + private Imdg registryImdg; + private final Imdg overnightSettingsImdg; + + public OrderCurrencyService(ImdgProvider imdgProvider, + UserRoleVerification userRoleVerification) { + this.imdgProvider = imdgProvider; + this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); + this.overnightSettingsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_OvernightSettings, OvernightSettings.class); + } + + + public Collection getCurrencyRegistry() { + ImdgPredicateBuilder builder = registryImdg.predicateBuilder(); + ImdgPredicate registryPredicate = builder.and( + builder.regex("registryCode", "^PM.*T"), + builder.not(builder.equals("registryStatus", RegistryStatus.OK.getKey())) + ); + + return registryImdg.getCollectionIdsByPredicate(registryPredicate); + } + + public Optional findOvernightSettingsByCompany(Long companyId) { + ImdgPredicateBuilder builder = overnightSettingsImdg.predicateBuilder(); + ImdgPredicate predicate = builder.and( + builder.equals("market", Market.curr), + builder.equals("companyId", companyId) + ); + OvernightSettings overnightSettings = overnightSettingsImdg.getFirstObjectByPredicate(predicate); + return Optional.ofNullable(overnightSettings); + } +} diff --git a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/OvernightType.java b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/OvernightType.java new file mode 100644 index 000000000..fa0be7b70 --- /dev/null +++ b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/OvernightType.java @@ -0,0 +1,20 @@ +package ru.spcex.platform.enumeration; + +import ru.spcex.platform.utils.enumeration.IEnumKey; + +public enum OvernightType implements IEnumKey { + SWAP("SWAP"), + SPOT("SPOT") + ; + + private final String key; + + OvernightType(String key) { + this.key = key; + } + + @Override + public String getKey() { + return key; + } +}