This commit is contained in:
akulikov 2023-05-24 15:20:33 +03:00
parent 0e4b425645
commit b6a48e49d7
26 changed files with 991 additions and 95 deletions

View file

@ -9,11 +9,12 @@ import ru.spcex.platform.imdg.iml.hazelcast.config.HazelcastClientParams;
@Component
@PropertySource("file:${spring.config.location}/application.properties")
@ConfigurationProperties("backend-api")
@ConfigurationProperties("gateway-api")
public class GatewayApiSettings {
private HazelcastClientParams hazelcast;
private KafkaProducerSettings kafkaProducer;
private KafkaConsumerSettings kafkaConsumer;
private InboundServerSettings inboundServer;
public HazelcastClientParams getHazelcast() {
return hazelcast;
@ -39,4 +40,11 @@ public class GatewayApiSettings {
this.kafkaConsumer = kafkaConsumer;
}
public InboundServerSettings getInboundServer() {
return inboundServer;
}
public void setInboundServer(InboundServerSettings inboundServer) {
this.inboundServer = inboundServer;
}
}

View file

@ -0,0 +1,40 @@
package ru.spcex.clearing.gatewayapi.config;
public class InboundServerSettings {
private String host;
private String path;
private Integer port;
private Boolean ssl;
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
public Integer getPort() {
return port;
}
public void setPort(Integer port) {
this.port = port;
}
public Boolean getSsl() {
return ssl;
}
public void setSsl(Boolean ssl) {
this.ssl = ssl;
}
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
}

View file

@ -0,0 +1,21 @@
package ru.spcex.clearing.gatewayapi.config.serializers;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import ru.spcex.platform.utils.time.TimeUtil;
import java.io.IOException;
import java.time.Instant;
import java.time.format.DateTimeFormatter;
public class InstantSerializer extends JsonSerializer<Instant> {
private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss:SSS");
@Override
public void serialize(Instant value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
if (value == null) return;
gen.writeString(TimeUtil.formatInstant(value, formatter));
}
}

View file

@ -0,0 +1,20 @@
package ru.spcex.clearing.gatewayapi.config.serializers;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class LocalDateSerializer extends JsonSerializer<LocalDate> {
private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy");
@Override
public void serialize(LocalDate value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
if (value == null) return;
gen.writeString(value.format(formatter));
}
}

View file

@ -11,21 +11,36 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import ru.spcex.clearing.gatewayapi.request.FullRequest;
import ru.spcex.clearing.gatewayapi.request.ListingsRequest;
import ru.spcex.clearing.gatewayapi.response.CommonResponse;
@Controller
@RequestMapping("/")
public class GatewayController {
private final Logger log = LoggerFactory.getLogger(getClass());
@ApiOperation(value = "Test gateway post request")
@ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = String.class), @ApiResponse(code = 400, message = "Ошибка валидации", response = String.class)})
@RequestMapping(path = "/inbound_request", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.TEXT_PLAIN_VALUE)
@ApiOperation(value = "Put listings")
@ApiResponses(value = {
@ApiResponse(code = 200, message = "OK", response = CommonResponse.class),
@ApiResponse(code = 400, message = "Ошибка валидации", response = CommonResponse.class)
})
@RequestMapping(
path = "/listings",
method = RequestMethod.POST,
consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE
)
@ResponseBody
public String inboundRequest(@RequestBody FullRequest request) {
log.info("toString: {}", request.toString());
log.info("Call test method for gateway-api controller");
return "gateway-api controller test method";
public CommonResponse listings(@RequestBody ListingsRequest request) {
// todo pack it to abstract class
CommonResponse commonResponse = new CommonResponse();
commonResponse.setId(request.getId());
commonResponse.setType(request.getType());
commonResponse.setDatetime(request.getDatetime());
commonResponse.setSection(request.getSection());
commonResponse.setCode(200); // todo set result code
return commonResponse;
}
}

View file

@ -0,0 +1,60 @@
package ru.spcex.clearing.gatewayapi.logic;
import ru.spcex.clearing.gatewayapi.request.ListingsRequest;
import ru.spcex.clearing.gatewayapi.request.objects.IssuerCompany;
import ru.spcex.clearing.gatewayapi.request.objects.IssuerCompanyInfo;
import ru.spcex.clearing.gatewayapi.request.objects.IssuerCompanySymbols;
import ru.spcex.clearing.gatewayapi.request.objects.IssuerContact;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
public class GroupingCompanyParts extends Stage<ListingsRequest> {
@Override
public ProcessResult process(ListingsRequest param) {
List<IssuerCompany> companyList = param.getIssuerCompanyList();
Map<UUID, IssuerCompany> issuerCompanyMap = new HashMap<>();
for (IssuerCompany issuerCompany : companyList) {
if (issuerCompanyMap.put(issuerCompany.getId(), issuerCompany) != null) {
throw new IllegalStateException("Duplicate key");
}
}
List<IssuerCompanyInfo> issuerCompanyInfoList = param.getIssuerCompanyInfoList();
for (IssuerCompanyInfo issuerCompanyInfo : issuerCompanyInfoList) {
UUID issuerCompanyInfoUUID = issuerCompanyInfo.getCompanyId();
IssuerCompany issuerCompany = issuerCompanyMap.get(issuerCompanyInfoUUID);
if (issuerCompany == null) {
// todo error
continue;
}
issuerCompany.getIssuerCompanyInfoList().add(issuerCompanyInfo);
}
List<IssuerCompanySymbols> issuerCompanySymbolsList = param.getIssuerCompanySymbolsList();
for (IssuerCompanySymbols issuerCompanySymbols : issuerCompanySymbolsList) {
UUID issuerCompanySymbolsUUID = issuerCompanySymbols.getCompanyId();
IssuerCompany issuerCompany = issuerCompanyMap.get(issuerCompanySymbolsUUID);
if (issuerCompany == null) {
// todo error
continue;
}
issuerCompany.getIssuerCompanySymbolsList().add(issuerCompanySymbols);
}
List<IssuerContact> issuerContactList = param.getIssuerContactList();
for (IssuerContact issuerContact : issuerContactList) {
UUID issuerContactUUID = issuerContact.getCompanyId();
IssuerCompany issuerCompany = issuerCompanyMap.get(issuerContactUUID);
if (issuerCompany == null) {
// todo error
continue;
}
issuerCompany.getIssuerContactList().add(issuerContact);
}
return null;
}
}

View file

@ -0,0 +1,64 @@
package ru.spcex.clearing.gatewayapi.logic;
import ru.spcex.clearing.gatewayapi.request.ListingsRequest;
import ru.spcex.clearing.gatewayapi.request.objects.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
public class GroupingSecurityParts extends Stage<ListingsRequest> {
@Override
public ProcessResult process(ListingsRequest param) {
List<Security> securities = param.getSecurities();
Map<UUID, Security> securityMap = new HashMap<>();
for (Security security : securities) {
if (securityMap.put(security.getId(), security) != null) {
// todo error
throw new IllegalStateException("Duplicate key");
}
}
List<CouponSchedule> couponSchedules = param.getCouponSchedules();
for (CouponSchedule couponSchedule : couponSchedules) {
UUID couponScheduleUUID = couponSchedule.getSecurityId();
Security security = securityMap.get(couponScheduleUUID);
if (security == null) {
// todo error
continue;
}
security.getCouponScheduleList().add(couponSchedule);
}
List<Currency> currencyList = param.getCurrencies();
for (Currency currency : currencyList) {
UUID currencyUUID = currency.getId();
// todo сделать после выяснения
}
List<Listing> listingList = param.getListingList();
for (Listing listing : listingList) {
UUID listingUUID = listing.getSecurityId();
Security security = securityMap.get(listingUUID);
if (security == null) {
// todo error
continue;
}
security.getListingList().add(listing);
}
List<Nominal> nominalList = param.getNominalList();
for (Nominal nominal : nominalList) {
UUID nominalUUID = nominal.getSecurityId();
Security security = securityMap.get(nominalUUID);
if (security == null) {
// todo error
continue;
}
security.getNominalList().add(nominal);
}
return null;
}
}

View file

@ -0,0 +1,4 @@
package ru.spcex.clearing.gatewayapi.logic;
public class ProcessResult {
}

View file

@ -0,0 +1,23 @@
package ru.spcex.clearing.gatewayapi.logic;
import java.util.List;
public abstract class Processor<T> {
private List<Stage<T>> pipeline;
public ProcessResult process(T param) {
for (Stage<T> stage : pipeline) {
ProcessResult processResult = stage.process(param);
if (processResult != null) return processResult;
}
return null;
}
public List<Stage<T>> getPipeline() {
return pipeline;
}
public void setPipeline(List<Stage<T>> pipeline) {
this.pipeline = pipeline;
}
}

View file

@ -0,0 +1,5 @@
package ru.spcex.clearing.gatewayapi.logic;
public abstract class Stage<T> {
public abstract ProcessResult process(T param);
}

View file

@ -8,7 +8,7 @@ import ru.spcex.clearing.gatewayapi.config.deserializers.InstantDeserializer;
import java.time.Instant;
import java.util.UUID;
public class FullRequest {
public class InboundRequest {
@JsonProperty("id")
@ApiModelProperty(
value = """

View file

@ -0,0 +1,187 @@
package ru.spcex.clearing.gatewayapi.request;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import io.swagger.annotations.ApiModelProperty;
import ru.spcex.clearing.gatewayapi.config.deserializers.InstantDeserializer;
import ru.spcex.clearing.gatewayapi.request.objects.*;
import java.time.Instant;
import java.util.List;
import java.util.UUID;
public class ListingsRequest {
@JsonProperty("id")
@ApiModelProperty(
value = """
Передавать новый UUID, если процесс стартовал по расписанию, или UUID, возвращенный в Клиринговую
систему в ответ на запрос Клиринговой системы об экспорте ценных бумаг (см. п. «Сигнальный REST API»),
если процесс стартовал по запросу от Клиринговой системы.
""",
example = "ef47f76c-bcea-11ed-afa1-0242ac120002"
)
private UUID id;
@JsonProperty("type")
@ApiModelProperty(
value = """
Передавать «DAY_START», если процесс стартовал по расписанию, или «ON_DEMAND»,
если процесс стартовал по запросу от Клиринговой системы.
""",
example = "DAY_START"
)
private String type;
@JsonProperty("datetime")
@JsonDeserialize(using = InstantDeserializer.class)
@ApiModelProperty(
value = "Передавать дату и время формирования JSON объекта в формате «ДД.ММ.ГГГГ ЧЧ:ММ:СС:ссс».",
example = "01.01.2023 12:34:56:789"
)
private Instant datetime;
@JsonProperty("section")
@ApiModelProperty(value = "Секция (FOND или MKR)", example = "FOND")
private String section;
@JsonProperty("security")
@ApiModelProperty(value = "Список security")
private List<Security> securities;
@JsonProperty("coupon_schedule")
@ApiModelProperty(value = "Список coupon_schedule")
private List<CouponSchedule> couponSchedules;
@JsonProperty("currency")
@ApiModelProperty(value = "Список валют")
private List<Currency> currencies;
@JsonProperty("listing")
@ApiModelProperty(value = "Список режимов торгов")
private List<Listing> listingList;
@JsonProperty("nominal")
@ApiModelProperty(value = "Список nominal")
private List<Nominal> nominalList;
@JsonProperty("company")
@ApiModelProperty(value = "Список компаний эмитентов")
private List<IssuerCompany> issuerCompanyList;
@JsonProperty("company_info")
@ApiModelProperty(value = "Список профилей компаний эмитентов")
private List<IssuerCompanyInfo> issuerCompanyInfoList;
@JsonProperty("company_symbols")
@ApiModelProperty(value = "Список реквизитов компаний эмитентов")
private List<IssuerCompanySymbols> issuerCompanySymbolsList;
@JsonProperty("contact")
@ApiModelProperty(value = "Список контактов компаний эмитентов")
private List<IssuerContact> issuerContactList;
public UUID getId() {
return id;
}
public void setId(UUID id) {
this.id = id;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Instant getDatetime() {
return datetime;
}
public void setDatetime(Instant datetime) {
this.datetime = datetime;
}
public String getSection() {
return section;
}
public void setSection(String section) {
this.section = section;
}
public List<Security> getSecurities() {
return securities;
}
public void setSecurities(List<Security> securities) {
this.securities = securities;
}
public List<CouponSchedule> getCouponSchedules() {
return couponSchedules;
}
public void setCouponSchedules(List<CouponSchedule> couponSchedules) {
this.couponSchedules = couponSchedules;
}
public List<Currency> getCurrencies() {
return currencies;
}
public void setCurrencies(List<Currency> currencies) {
this.currencies = currencies;
}
public List<Listing> getListingList() {
return listingList;
}
public void setListingList(List<Listing> listingList) {
this.listingList = listingList;
}
public List<Nominal> getNominalList() {
return nominalList;
}
public void setNominalList(List<Nominal> nominalList) {
this.nominalList = nominalList;
}
public List<IssuerCompany> getIssuerCompanyList() {
return issuerCompanyList;
}
public void setIssuerCompanyList(List<IssuerCompany> issuerCompanyList) {
this.issuerCompanyList = issuerCompanyList;
}
public List<IssuerCompanyInfo> getIssuerCompanyInfoList() {
return issuerCompanyInfoList;
}
public void setIssuerCompanyInfoList(List<IssuerCompanyInfo> issuerCompanyInfoList) {
this.issuerCompanyInfoList = issuerCompanyInfoList;
}
public List<IssuerCompanySymbols> getIssuerCompanySymbolsList() {
return issuerCompanySymbolsList;
}
public void setIssuerCompanySymbolsList(List<IssuerCompanySymbols> issuerCompanySymbolsList) {
this.issuerCompanySymbolsList = issuerCompanySymbolsList;
}
public List<IssuerContact> getIssuerContactList() {
return issuerContactList;
}
public void setIssuerContactList(List<IssuerContact> issuerContactList) {
this.issuerContactList = issuerContactList;
}
}

View file

@ -8,7 +8,7 @@ import java.util.UUID;
public class Currency {
@JsonProperty("id")
@ApiModelProperty(
value = "id",
value = "Ссылка на security",
example = "ef47f76c-bcea-11ed-afa1-0242ac120005"
)
private UUID id;

View file

@ -8,7 +8,7 @@ import java.util.UUID;
public class DirAuctionBiddingType {
@JsonProperty("id")
@ApiModelProperty(
value = "id",
value = "Ссылка на security",
example = "ef47f76c-bcea-11ed-afa1-0242ac120004"
)
private UUID id;

View file

@ -0,0 +1,109 @@
package ru.spcex.clearing.gatewayapi.request.objects;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
@ApiModel("Компания эмитент")
public class IssuerCompany {
@JsonProperty("id")
@ApiModelProperty(
value = "Идентификатор Эмитента в Модуле регистрации биржевых инструментов",
example = "ef47f76c-bcea-11ed-afa1-0242ac120003"
)
private UUID id;
@JsonProperty("short_name")
@ApiModelProperty(
value = "Основные сведения\\Сокращенное наименование на русском языке",
example = "Банк ВТБ (ПАО)"
)
private String shortName;
@JsonProperty("full_name")
@ApiModelProperty(
value = "Основные сведения\\Полное наименование на русском языке",
example = "Банк ВТБ (публичное акционерное общество)"
)
private String fullName;
@JsonProperty("workflow_status")
@ApiModelProperty(
value = """
«ACTV», если Эмитент не удален
«BLKD», если Эмитент удален
""",
example = "ACTV"
)
private String workflowStatus;
@JsonIgnore
private List<IssuerCompanyInfo> issuerCompanyInfoList = new ArrayList<>();
@JsonIgnore
private List<IssuerCompanySymbols> issuerCompanySymbolsList = new ArrayList<>();
@JsonIgnore
private List<IssuerContact> issuerContactList = new ArrayList<>();
public UUID getId() {
return id;
}
public void setId(UUID id) {
this.id = id;
}
public String getShortName() {
return shortName;
}
public void setShortName(String shortName) {
this.shortName = shortName;
}
public String getFullName() {
return fullName;
}
public void setFullName(String fullName) {
this.fullName = fullName;
}
public String getWorkflowStatus() {
return workflowStatus;
}
public void setWorkflowStatus(String workflowStatus) {
this.workflowStatus = workflowStatus;
}
public List<IssuerCompanyInfo> getIssuerCompanyInfoList() {
return issuerCompanyInfoList;
}
public void setIssuerCompanyInfoList(List<IssuerCompanyInfo> issuerCompanyInfoList) {
this.issuerCompanyInfoList = issuerCompanyInfoList;
}
public List<IssuerCompanySymbols> getIssuerCompanySymbolsList() {
return issuerCompanySymbolsList;
}
public void setIssuerCompanySymbolsList(List<IssuerCompanySymbols> issuerCompanySymbolsList) {
this.issuerCompanySymbolsList = issuerCompanySymbolsList;
}
public List<IssuerContact> getIssuerContactList() {
return issuerContactList;
}
public void setIssuerContactList(List<IssuerContact> issuerContactList) {
this.issuerContactList = issuerContactList;
}
}

View file

@ -0,0 +1,115 @@
package ru.spcex.clearing.gatewayapi.request.objects;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.util.UUID;
@ApiModel("Профиль компании эмитента")
public class IssuerCompanyInfo {
@JsonProperty("company_id")
@ApiModelProperty(
value = "Ссылка на company",
example = "ef47f76c-bcea-11ed-afa1-0242ac120003"
)
private UUID companyId;
@JsonProperty("country_code")
@ApiModelProperty(value = "RUS", example = "RUS")
private String countryCode;
@JsonProperty("legal_kind")
@ApiModelProperty(value = "JURD", example = "JURD")
private String legalKind;
@JsonProperty("organization_type")
@ApiModelProperty(
value = """
«CRED», если Основные сведения\\Кредитная организация = true
«NCRD», если Основные сведения\\Кредитная организация = false
""",
example = "CRED"
)
private String organizationType;
@JsonProperty("residence")
@ApiModelProperty(
value = "Резиденция. Трехсимвольный код страны из классификатора ОКСМ.",
example = "RUS"
)
private String residence;
@JsonProperty("short_name_eng")
@ApiModelProperty(
value = "Основные сведения\\Сокращенное наименование на английском языке",
example = "VTB (PJSC)"
)
private String shortNameEng;
@JsonProperty("full_name_eng")
@ApiModelProperty(
value = "Основные сведения\\Полное наименование на английском языке",
example = "VTB (public joint stock company)"
)
private String fullNameEng;
public UUID getCompanyId() {
return companyId;
}
public void setCompanyId(UUID companyId) {
this.companyId = companyId;
}
public String getCountryCode() {
return countryCode;
}
public void setCountryCode(String countryCode) {
this.countryCode = countryCode;
}
public String getLegalKind() {
return legalKind;
}
public void setLegalKind(String legalKind) {
this.legalKind = legalKind;
}
public String getOrganizationType() {
return organizationType;
}
public void setOrganizationType(String organizationType) {
this.organizationType = organizationType;
}
public String getResidence() {
return residence;
}
public void setResidence(String residence) {
this.residence = residence;
}
public String getShortNameEng() {
return shortNameEng;
}
public void setShortNameEng(String shortNameEng) {
this.shortNameEng = shortNameEng;
}
public String getFullNameEng() {
return fullNameEng;
}
public void setFullNameEng(String fullNameEng) {
this.fullNameEng = fullNameEng;
}
}

View file

@ -0,0 +1,72 @@
package ru.spcex.clearing.gatewayapi.request.objects;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.util.UUID;
@ApiModel("Реквизиты компании эмитента")
public class IssuerCompanySymbols {
@JsonProperty("company_id")
@ApiModelProperty(
value = "Ссылка на company",
example = "ef47f76c-bcea-11ed-afa1-0242ac120003"
)
private UUID companyId;
@JsonProperty("company_symbol")
@ApiModelProperty(
value = """
Передавать строки:
· OCVD
· INN
· CPP
· OCPO
· BIC
· OGRN
""",
example = "INN"
)
private String companySymbol;
@JsonProperty("company_symbol_value")
@ApiModelProperty(
value = """
Значения для company_symbol:
Для OCVD - Регистрационные данные\\ОКВЭД
Для INN - Основные сведения\\ИНН
Для CPP - Основные сведения\\КПП
Для OCPO - Основные сведения\\ОКПО
Для BIC - Основные сведения\\БИК
Для OGRN - Основные сведения\\ОГРН
""",
example = "7702070139"
)
private String companySymbolValue;
public UUID getCompanyId() {
return companyId;
}
public void setCompanyId(UUID companyId) {
this.companyId = companyId;
}
public String getCompanySymbol() {
return companySymbol;
}
public void setCompanySymbol(String companySymbol) {
this.companySymbol = companySymbol;
}
public String getCompanySymbolValue() {
return companySymbolValue;
}
public void setCompanySymbolValue(String companySymbolValue) {
this.companySymbolValue = companySymbolValue;
}
}

View file

@ -1,14 +1,16 @@
package ru.spcex.clearing.gatewayapi.request.objects;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.util.UUID;
public class Contact {
@ApiModel("Контакты компании эмитента")
public class IssuerContact {
@JsonProperty("company_id")
@ApiModelProperty(
value = "Ссылка на компанию",
value = "Ссылка на company",
example = "ef47f76c-bcea-11ed-afa1-0242ac120003"
)
private UUID companyId;
@ -45,7 +47,7 @@ public class Contact {
Для INFO - Контакты\\ФИО контактного лица + «, » + Должность контактного лица + «, » + Эл. почта контактного лица + «, » + Телефон контактного лица
Для WEB - Контакты\\Веб-сайт
""",
example = "example@ex.ample"
example = "test.org"
)
private String contactValue;

View file

@ -5,24 +5,27 @@ import io.swagger.annotations.ApiModelProperty;
import java.util.UUID;
public class Company {
/**
* Компания участник
*/
public class MemberCompany {
@JsonProperty("id")
@ApiModelProperty(
value = "Идентификатор Эмитента в Модуле регистрации биржевых инструментов",
value = "Идентификатор участника",
example = "ef47f76c-bcea-11ed-afa1-0242ac120003"
)
private UUID id;
@JsonProperty("short_name")
@ApiModelProperty(
value = "Основные сведения\\Сокращенное наименование на русском языке",
value = "Краткое наименование участника",
example = "Банк ВТБ (ПАО)"
)
private String shortName;
@JsonProperty("full_name")
@ApiModelProperty(
value = "Основные сведения\\Полное наименование на русском языке",
value = "Полное наименование участника",
example = "Банк ВТБ (публичное акционерное общество)"
)
private String fullName;
@ -55,16 +58,6 @@ public class Company {
)
private String initiatorCode;
@JsonProperty("workflow_status")
@ApiModelProperty(
value = """
«ACTV», если Эмитент не удален
«BLKD», если Эмитент удален
""",
example = "ACTV"
)
private String workflowStatus;
public UUID getId() {
return id;
@ -90,14 +83,6 @@ public class Company {
this.fullName = fullName;
}
public String getWorkflowStatus() {
return workflowStatus;
}
public void setWorkflowStatus(String workflowStatus) {
this.workflowStatus = workflowStatus;
}
public String getTradingCode() {
return tradingCode;
}

View file

@ -5,7 +5,7 @@ import io.swagger.annotations.ApiModelProperty;
import java.util.UUID;
public class CompanyClearingCategory {
public class MemberCompanyClearingCategory {
@JsonProperty("company_id")
@ApiModelProperty(
value = "Ссылка на company",

View file

@ -5,7 +5,7 @@ import io.swagger.annotations.ApiModelProperty;
import java.util.UUID;
public class CompanyInfo {
public class MemberCompanyInfo {
@JsonProperty("company_id")
@ApiModelProperty(
value = "Ссылка на company",
@ -14,8 +14,22 @@ public class CompanyInfo {
private UUID companyId;
@JsonProperty("country_code")
@ApiModelProperty(value = "RUS", example = "RUS")
private String countryCode;
@ApiModelProperty(
value = "Юрисдикция. Цифровой код страны из классификатора ОКСМ.",
example = "643"
)
private Integer countryCode;
@JsonProperty("professional_sign")
@ApiModelProperty(
value = """
Признак проф. участника. Возможные значения:
· ALWD Да
· DEND - Нет
""",
example = "DNED"
)
private String professionalSign;
@JsonProperty("legal_kind")
@ApiModelProperty(
@ -35,17 +49,6 @@ public class CompanyInfo {
)
private String organizationType;
@JsonProperty("professional_sign")
@ApiModelProperty(
value = """
Признак проф. участника. Возможные значения:
· ALWD Да
· DEND - Нет
""",
example = "DNED"
)
private String professionalSign;
@JsonProperty("residence")
@ApiModelProperty(
value = "Резиденция. Трехсимвольный код страны из классификатора ОКСМ.",
@ -53,20 +56,6 @@ public class CompanyInfo {
)
private String residence;
@JsonProperty("short_name_eng")
@ApiModelProperty(
value = "Основные сведения\\Сокращенное наименование на английском языке",
example = "VTB (PJSC)"
)
private String shortNameEng;
@JsonProperty("full_name_eng")
@ApiModelProperty(
value = "Основные сведения\\Полное наименование на английском языке",
example = "VTB (public joint stock company)"
)
private String fullNameEng;
public UUID getCompanyId() {
return companyId;
@ -76,11 +65,11 @@ public class CompanyInfo {
this.companyId = companyId;
}
public String getCountryCode() {
public Integer getCountryCode() {
return countryCode;
}
public void setCountryCode(String countryCode) {
public void setCountryCode(Integer countryCode) {
this.countryCode = countryCode;
}
@ -108,22 +97,6 @@ public class CompanyInfo {
this.residence = residence;
}
public String getShortNameEng() {
return shortNameEng;
}
public void setShortNameEng(String shortNameEng) {
this.shortNameEng = shortNameEng;
}
public String getFullNameEng() {
return fullNameEng;
}
public void setFullNameEng(String fullNameEng) {
this.fullNameEng = fullNameEng;
}
public String getProfessionalSign() {
return professionalSign;
}

View file

@ -5,7 +5,7 @@ import io.swagger.annotations.ApiModelProperty;
import java.util.UUID;
public class CompanySymbols {
public class MemberCompanySymbols {
@JsonProperty("company_id")
@ApiModelProperty(
value = "Ссылка на company",
@ -36,15 +36,7 @@ public class CompanySymbols {
@JsonProperty("company_symbol_value")
@ApiModelProperty(
value = """
Значения для company_symbol:
Для OCVD - Регистрационные данные\\ОКВЭД
Для INN - Основные сведения\\ИНН
Для CPP - Основные сведения\\КПП
Для OCPO - Основные сведения\\ОКПО
Для BIC - Основные сведения\\БИК
Для OGRN - Основные сведения\\ОГРН
""",
value = "Значение реквизита",
example = "7702070139"
)
private String companySymbolValue;

View file

@ -0,0 +1,60 @@
package ru.spcex.clearing.gatewayapi.request.objects;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModelProperty;
import java.util.UUID;
public class MemberContact {
@JsonProperty("company_id")
@ApiModelProperty(
value = "Ссылка на компанию",
example = "ef47f76c-bcea-11ed-afa1-0242ac120003"
)
private UUID companyId;
@JsonProperty("contact_type")
@ApiModelProperty(
value = """
Тип контакта. Возможные значения:
· ADRS адрес участника
· MAIL - Электронная почта участника клиринга
· PHON Телефон участника клиринга
· FAX факс участника клиринга
""",
example = "MAIL"
)
private String contactType;
@JsonProperty("contact_value")
@ApiModelProperty(
value = "Значение контакта",
example = "example@ya.ru"
)
private String contactValue;
public UUID getCompanyId() {
return companyId;
}
public void setCompanyId(UUID companyId) {
this.companyId = companyId;
}
public String getContactType() {
return contactType;
}
public void setContactType(String contactType) {
this.contactType = contactType;
}
public String getContactValue() {
return contactValue;
}
public void setContactValue(String contactValue) {
this.contactValue = contactValue;
}
}

View file

@ -1,5 +1,6 @@
package ru.spcex.clearing.gatewayapi.request.objects;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import io.swagger.annotations.ApiModelProperty;
@ -7,6 +8,8 @@ import ru.spcex.clearing.gatewayapi.config.deserializers.LocalDateDeserializer;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
public class Security {
@ -168,6 +171,18 @@ public class Security {
)
private BigDecimal couponFrequency;
@JsonIgnore
private List<Listing> listingList = new ArrayList<>();
@JsonIgnore
private List<CouponSchedule> couponScheduleList = new ArrayList<>();
@JsonIgnore
private List<Nominal> nominalList = new ArrayList<>();
@JsonIgnore
private List<IssuerCompany> issuerCompanyList = new ArrayList<>();
public UUID getId() {
return id;
}
@ -311,4 +326,36 @@ public class Security {
public void setCouponFrequency(BigDecimal couponFrequency) {
this.couponFrequency = couponFrequency;
}
public List<Listing> getListingList() {
return listingList;
}
public void setListingList(List<Listing> listingList) {
this.listingList = listingList;
}
public List<CouponSchedule> getCouponScheduleList() {
return couponScheduleList;
}
public void setCouponScheduleList(List<CouponSchedule> couponScheduleList) {
this.couponScheduleList = couponScheduleList;
}
public List<Nominal> getNominalList() {
return nominalList;
}
public void setNominalList(List<Nominal> nominalList) {
this.nominalList = nominalList;
}
public List<IssuerCompany> getIssuerCompanyList() {
return issuerCompanyList;
}
public void setIssuerCompanyList(List<IssuerCompany> issuerCompanyList) {
this.issuerCompanyList = issuerCompanyList;
}
}

View file

@ -0,0 +1,85 @@
package ru.spcex.clearing.gatewayapi.response;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import ru.spcex.clearing.gatewayapi.config.serializers.InstantSerializer;
import java.time.Instant;
import java.util.UUID;
@ApiModel(description = "Базовый формат ответа")
public class CommonResponse {
@JsonProperty("code")
@ApiModelProperty(value = "Код ответа", example = "200")
private Integer code;
@JsonProperty("id")
@ApiModelProperty(
value = "Значение соответствует полученному из запроса",
example = "ef47f76c-bcea-11ed-afa1-0242ac120002"
)
private UUID id;
@JsonProperty("type")
@ApiModelProperty(
value = "Значение соответствует полученному из запроса",
example = "DAY_START"
)
private String type;
@JsonProperty("datetime")
@JsonSerialize(using = InstantSerializer.class)
@ApiModelProperty(
value = "Значение соответствует полученному из запроса",
example = "01.01.2023 12:34:56:789"
)
private Instant datetime;
@JsonProperty("section")
@ApiModelProperty(
value = "Значение соответствует полученному из запроса", example = "FOND"
)
private String section;
public UUID getId() {
return id;
}
public void setId(UUID id) {
this.id = id;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Instant getDatetime() {
return datetime;
}
public void setDatetime(Instant datetime) {
this.datetime = datetime;
}
public String getSection() {
return section;
}
public void setSection(String section) {
this.section = section;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
}

View file

@ -1,20 +1,29 @@
server.port=8080
server.servlet.context-path=/gateway-api
spring.main.web-application-type=servlet
gateway-api.example-setting=test
gateway-api.hazelcast.cluster-members=127.0.0.1:5701
gateway-api.hazelcast.login=dev
gateway-api.hazelcast.password=dev-pass
gateway-api.kafka-producer.bootstrap-servers=localhost:9092
gateway-api.kafka-producer.acks=all
gateway-api.kafka-producer.retries=0
gateway-api.kafka-producer.batch-size=16384
gateway-api.kafka-producer.linger-ms=1
gateway-api.kafka-producer.buffer-memory=33554432
gateway-api.kafka-consumer.bootstrap-servers=localhost:9092
gateway-api.kafka-consumer.group-id=dev-group-gateway-api
gateway-api.kafka-consumer.enable-auto-commit=true
gateway-api.kafka-consumer.session-timeout-ms=30000
gateway-api.kafka-consumer.auto-offset-reset=latest
gateway-api.kafka-consumer.linger-ms=1
gateway-api.kafka-consumer.buffer-memory=33554432
gateway-api.kafka-consumer.buffer-memory=33554432
gateway-api.inbound-server.ssl=true
gateway-api.inbound-server.host=localhost
gateway-api.inbound-server.port=9999
gateway-api.inbound-server.path=/inbound_request