etreschenkov 2023-05-12 17:45:29 +03:00
parent 183babf1c2
commit 0147b88ba8
10 changed files with 204 additions and 1 deletions

View file

@ -0,0 +1,12 @@
package ru.spcex.clearing.models;
import ru.spcex.platform.enumeration.RegistryCapacity;
import ru.spcex.platform.enumeration.RegistryDesignation;
import ru.spcex.platform.enumeration.RegistryInstrumentType;
import ru.spcex.platform.enumeration.RegistryUnit;
public record RegistryInfo(RegistryDesignation registryDesignation,
RegistryInstrumentType registryInstrumentType,
RegistryCapacity registryCapacity,
RegistryUnit registryUnit) {
}

View file

@ -4,6 +4,7 @@ import org.apache.kafka.clients.consumer.Consumer;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Service;
import ru.spcex.clearing.platform.messaging.domain.Consts;
import ru.spcex.clearing.platform.messaging.domain.cud.clearing.CreateRegistryRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.clearing.Sdf04Request;
import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonIdRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.schedule.LauncherCommandRequest;
@ -13,9 +14,14 @@ import ru.spcex.platform.enumeration.Task;
@Service
public class EventsReceiver extends QueueConsumer implements InitializingBean {
private final ClearingService clearingService;
public EventsReceiver(Consumer<String, Object> kafkaQueue, ClearingService clearingService) {
private final RegistryService registryService;
public EventsReceiver(Consumer<String, Object> kafkaQueue,
ClearingService clearingService,
RegistryService registryService) {
super(kafkaQueue);
this.clearingService = clearingService;
this.registryService = registryService;
}
@Override
@ -41,6 +47,9 @@ public class EventsReceiver extends QueueConsumer implements InitializingBean {
callback(Object.class)
.setConsumer(event -> clearingService.executeSTrade())
.forDestination(Task.getOfTrades.topic(), callbacks::put);
callback(CreateRegistryRequest.class)
.setConsumer(event -> registryService.createRegistry(event.getRequestPayload()))
.forDestination(Consts.REGISTRY_NEW, callbacks::put);
init();
}
}

View file

@ -0,0 +1,76 @@
package ru.spcex.clearing.service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import ru.clearing.classes.statics.data.registry.Registry;
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.models.RegistryInfo;
import ru.spcex.clearing.platform.messaging.domain.cud.clearing.CreateRegistryRequest;
import ru.spcex.platform.enumeration.*;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.utils.enumeration.IEnumKey;
import java.math.BigDecimal;
@Service
public class RegistryService {
private final Logger log = LoggerFactory.getLogger(getClass());
private final ImdgProvider imdgProvider;
private final Imdg<TradingClearingRegistry> tradingClearingRegistryImdg;
private final Imdg<Registry> registryImdg;
public RegistryService(ImdgProvider imdgProvider) {
this.imdgProvider = imdgProvider;
this.tradingClearingRegistryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class);
this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
}
public void createRegistry(CreateRegistryRequest createRegistryRequest) {
Long companyId = createRegistryRequest.getCompanyId();
log.trace("Try to find tradingClearingRegistry by companyId: {}", createRegistryRequest.getCompanyId());
//todo может завести класс SqlFactory
String byCompanySqlPredicate = String.format("companyId=%s", companyId);
//todo для компани всегда один объект TradingClearingRegistry? пока предполагаю что да и нужно добавить такую проверку(в ТЗ ее нет);
//todo see TradingClearingRegistryService.tradingClearingRegistryNew
TradingClearingRegistry tcrByCompanyId = tradingClearingRegistryImdg.getSingleObjectBySQL(byCompanySqlPredicate);
if (tcrByCompanyId != null) {
log.trace("Found tradingClearingRegistry with id: {}", tcrByCompanyId.getId());
Registry registry = new Registry();
tcrByCompanyId.getTradingClearingRegistryType();
RegistryInfo registryInfo = createRegistryInfoByType(tcrByCompanyId.getTradingClearingRegistryType());
registry.setRegistryDesignation(registryInfo.registryDesignation().getKey());
registry.setRegistryInstrumentType(registryInfo.registryInstrumentType().getKey());
registry.setRegistryCapacity(registryInfo.registryCapacity().getKey());
registry.setRegistryUnit(registryInfo.registryUnit().getKey());
//todo не понял формулировку При создании новой записи, необходимо установить значение 0 в множестве свойств balance* AND registryInstrumentType=M AND securitySymbol=RUB[registry.securityId=security.id]
registry.setBalance(BigDecimal.ZERO);
registryImdg.insert(registry);
}
}
private RegistryInfo createRegistryInfoByType(String type){
TradingClearingRegistryType registryType = IEnumKey.getEnumByKey(TradingClearingRegistryType.class, type);
RegistryInfo registryInfo = null;
//todo спросить про дубль C и T
switch (registryType){
case Owner_A -> registryInfo = new RegistryInfo(RegistryDesignation.A, RegistryInstrumentType.M, RegistryCapacity.A, RegistryUnit.T);
case Client_B -> registryInfo = new RegistryInfo(RegistryDesignation.A, RegistryInstrumentType.M, RegistryCapacity.B, RegistryUnit.T);
case Trustee_C, DepoOfShares_T -> registryInfo = new RegistryInfo(RegistryDesignation.A, RegistryInstrumentType.S, RegistryCapacity.A, RegistryUnit.T);
case TrusteeManager_D -> registryInfo = new RegistryInfo(RegistryDesignation.A, RegistryInstrumentType.S, RegistryCapacity.A, RegistryUnit.A);
case Issuer_E -> registryInfo = new RegistryInfo(RegistryDesignation.A, RegistryInstrumentType.S, RegistryCapacity.E, RegistryUnit.R);
case ToThePlacementOrRedeem_Z -> registryInfo = new RegistryInfo(RegistryDesignation.A, RegistryInstrumentType.S, RegistryCapacity.Z, RegistryUnit.R);
case DepoBond_H -> registryInfo = new RegistryInfo(RegistryDesignation.A, RegistryInstrumentType.S, RegistryCapacity.A, RegistryUnit.R);
case DepoOfTrustedBond_N -> registryInfo = new RegistryInfo(RegistryDesignation.A, RegistryInstrumentType.S, RegistryCapacity.C, RegistryUnit.R);
case DepoOfTrustedShares_S -> registryInfo = new RegistryInfo(RegistryDesignation.A, RegistryInstrumentType.S, RegistryCapacity.C, RegistryUnit.T);
}
return registryInfo;
}
}

View file

@ -0,0 +1,4 @@
package ru.spcex.clearing.service.builder;
public class RegistryBuilder {
}

View file

@ -0,0 +1,24 @@
package ru.spcex.platform.enumeration;
import ru.spcex.platform.utils.enumeration.IEnumKey;
//todo фиксированные ли это значения? расшифровки подъедут?
public enum RegistryCapacity implements IEnumKey {
A("A"),
B("B"),
Z("Z"),
C("C"),
E("E"),
;
private final String key;
RegistryCapacity(String key) {
this.key = key;
}
@Override
public String getKey() {
return key;
}
}

View file

@ -0,0 +1,19 @@
package ru.spcex.platform.enumeration;
import ru.spcex.platform.utils.enumeration.IEnumKey;
public enum RegistryDesignation implements IEnumKey {
A("A")
;
private final String key;
RegistryDesignation(String key) {
this.key = key;
}
@Override
public String getKey() {
return key;
}
}

View file

@ -0,0 +1,20 @@
package ru.spcex.platform.enumeration;
import ru.spcex.platform.utils.enumeration.IEnumKey;
public enum RegistryInstrumentType implements IEnumKey {
M("M"),
S("S"),
;
private final String key;
RegistryInstrumentType(String key) {
this.key = key;
}
@Override
public String getKey() {
return key;
}
}

View file

@ -0,0 +1,21 @@
package ru.spcex.platform.enumeration;
import ru.spcex.platform.utils.enumeration.IEnumKey;
public enum RegistryUnit implements IEnumKey {
T("T"),
A("A"),
R("R"),
;
private final String key;
RegistryUnit(String key) {
this.key = key;
}
@Override
public String getKey() {
return key;
}
}

View file

@ -127,4 +127,6 @@ public interface Consts {
String REGISTRY_CLEAR_MEMBER_REGISTER_NEW = "registry-clear-member-register-new";
String REGISTRY_CLEAR_MEMBER_REGISTER_CHANGE_NEW = "registry-clear-member-register-change-new";
String REGISTRY_NEW = "registry-new";
}

View file

@ -0,0 +1,16 @@
package ru.spcex.clearing.platform.messaging.domain.cud.clearing;
import com.fasterxml.jackson.annotation.JsonProperty;
public class CreateRegistryRequest {
@JsonProperty
private Long companyId;
public Long getCompanyId() {
return companyId;
}
public void setCompanyId(Long companyId) {
this.companyId = companyId;
}
}