etreschenkov 2026-04-03 13:51:27 +03:00
parent 96b00a84ab
commit bbc8a76a7e
4 changed files with 145 additions and 1 deletions

View file

@ -6,7 +6,7 @@
<parent>
<groupId>ru.spcex.clearing</groupId>
<artifactId>clearing-parent</artifactId>
<version>SPCEX-3.22.285</version>
<version>SPCEX-3.22.295</version>
</parent>
<artifactId>default-management</artifactId>

View file

@ -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<Registry> registryImdg;
private final Imdg<OvernightSettings> overnightSettingsImdg;
@Autowired
public TaskListener(Consumer<String, Object> kafkaQueue,
Producer<String, Object> 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<OvernightSettingsNewRequest> newReq) {
Collection<Long> registries = orderCurrencyService.getCurrencyRegistry();
for (Long registryId : registries) {
Registry registry = registryImdg.getSingleObjectByID(registryId);
Optional<OvernightSettings> overnightSettings = orderCurrencyService.findOvernightSettingsByCompany(registry.getCompanyId());
Optional<OvernightType> 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) {
}
}
}
}

View file

@ -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<Registry> registryImdg;
private final Imdg<OvernightSettings> 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<Long> 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<OvernightSettings> 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);
}
}

View file

@ -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;
}
}