This commit is contained in:
parent
183babf1c2
commit
0147b88ba8
10 changed files with 204 additions and 1 deletions
|
|
@ -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) {
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
package ru.spcex.clearing.service.builder;
|
||||
|
||||
public class RegistryBuilder {
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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";
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue