diff --git a/clearing-parent/gateway-api/pom.xml b/clearing-parent/gateway-api/pom.xml new file mode 100644 index 000000000..b0a04daec --- /dev/null +++ b/clearing-parent/gateway-api/pom.xml @@ -0,0 +1,94 @@ + + + + clearing-parent + ru.spcex.clearing + SPCEX-1.0.0.0 + + 4.0.0 + + gateway-api + + + 17 + 17 + + + + + org.springframework.boot + spring-boot-starter-web + + + ru.spcex.platform + platform-imdg-api-hazelcast-impl + + + com.fasterxml.jackson.core + jackson-databind + + + ru.spcex.platform + platform-messaging + + + io.springfox + springfox-swagger2 + + + io.springfox + springfox-swagger-ui + + + ru.spcex.clearing + classes + + + ru.spcex.clearing + dictionary + + + ru.spcex.platform + platform-enum + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + ${project.artifactId} + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.21.0 + + + org.junit.platform + junit-platform-surefire-provider + 1.2.0-M1 + + + org.junit.jupiter + junit-jupiter-engine + 5.2.0-M1 + + + + + + + \ No newline at end of file diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/GatewayApiApplication.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/GatewayApiApplication.java new file mode 100644 index 000000000..9db71109a --- /dev/null +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/GatewayApiApplication.java @@ -0,0 +1,35 @@ +package ru.spcex.clearing.gatewayapi; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; +import org.springframework.web.context.WebApplicationContext; + +import javax.servlet.ServletContext; +import javax.servlet.ServletException; + +@SpringBootApplication +public class GatewayApiApplication extends SpringBootServletInitializer { + + public static void main(String[] args) { + SpringApplication app = new SpringApplication(GatewayApiApplication.class); + app.run(args); + } + + @Override + public void onStartup(ServletContext servletContext) throws ServletException { + super.onStartup(servletContext); + } + + @Override + protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { + return builder.sources(GatewayApiApplication.class); + } + + @Override + protected WebApplicationContext run(SpringApplication application) { + return super.run(application); + } + +} diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/GatewayApiSettings.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/GatewayApiSettings.java new file mode 100644 index 000000000..8fec38e7e --- /dev/null +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/GatewayApiSettings.java @@ -0,0 +1,42 @@ +package ru.spcex.clearing.gatewayapi.config; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.PropertySource; +import org.springframework.stereotype.Component; +import ru.spcex.clearing.platform.messaging.config.element.KafkaConsumerSettings; +import ru.spcex.clearing.platform.messaging.config.element.KafkaProducerSettings; +import ru.spcex.platform.imdg.iml.hazelcast.config.HazelcastClientParams; + +@Component +@PropertySource("file:${spring.config.location}/application.properties") +@ConfigurationProperties("backend-api") +public class GatewayApiSettings { + private HazelcastClientParams hazelcast; + private KafkaProducerSettings kafkaProducer; + private KafkaConsumerSettings kafkaConsumer; + + public HazelcastClientParams getHazelcast() { + return hazelcast; + } + + public void setHazelcast(HazelcastClientParams hazelcast) { + this.hazelcast = hazelcast; + } + + public KafkaProducerSettings getKafkaProducer() { + return kafkaProducer; + } + + public void setKafkaProducer(KafkaProducerSettings kafkaProducer) { + this.kafkaProducer = kafkaProducer; + } + + public KafkaConsumerSettings getKafkaConsumer() { + return kafkaConsumer; + } + + public void setKafkaConsumer(KafkaConsumerSettings kafkaConsumer) { + this.kafkaConsumer = kafkaConsumer; + } + +} diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/WebConfig.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/WebConfig.java new file mode 100644 index 000000000..73ac6c244 --- /dev/null +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/WebConfig.java @@ -0,0 +1,11 @@ +package ru.spcex.clearing.gatewayapi.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@Configuration +@EnableWebMvc +public class WebConfig implements WebMvcConfigurer { + +} diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/deserializers/InstantDeserializer.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/deserializers/InstantDeserializer.java new file mode 100644 index 000000000..2e03347b6 --- /dev/null +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/deserializers/InstantDeserializer.java @@ -0,0 +1,23 @@ +package ru.spcex.clearing.gatewayapi.config.deserializers; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; +import ru.spcex.platform.utils.time.TimeUtil; + +import java.io.IOException; +import java.time.Instant; +import java.time.format.DateTimeFormatter; + +public class InstantDeserializer extends JsonDeserializer { + private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss:SSS"); + + @Override + public Instant deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { + String date = p.getText(); + if (date == null || date.trim().length() == 0) { + return null; + } + return TimeUtil.parseInstantDateAndTime(date, formatter); + } +} diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/deserializers/LocalDateDeserializer.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/deserializers/LocalDateDeserializer.java new file mode 100644 index 000000000..8e9f9fa63 --- /dev/null +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/deserializers/LocalDateDeserializer.java @@ -0,0 +1,23 @@ +package ru.spcex.clearing.gatewayapi.config.deserializers; + + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; + +import java.io.IOException; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; + +public class LocalDateDeserializer extends JsonDeserializer { + private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy"); + + @Override + public LocalDate deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { + String date = p.getText(); + if (date == null || date.trim().length() == 0) { + return null; + } + return LocalDate.parse(date, formatter); + } +} diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/controller/GatewayController.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/controller/GatewayController.java new file mode 100644 index 000000000..33c5545ea --- /dev/null +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/controller/GatewayController.java @@ -0,0 +1,31 @@ +package ru.spcex.clearing.gatewayapi.controller; + +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiResponse; +import io.swagger.annotations.ApiResponses; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.MediaType; +import org.springframework.stereotype.Controller; +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; + +@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) + @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"; + } + +} diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/controller/TestController.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/controller/TestController.java new file mode 100644 index 000000000..29ae31fc0 --- /dev/null +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/controller/TestController.java @@ -0,0 +1,28 @@ +package ru.spcex.clearing.gatewayapi.controller; + +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiResponse; +import io.swagger.annotations.ApiResponses; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.MediaType; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; + +@Controller +@RequestMapping("/") +public class TestController { + private final Logger log = LoggerFactory.getLogger(getClass()); + + @ApiOperation(value = "Test gateway-api availability.") + @ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = String.class)}) + @RequestMapping(method = RequestMethod.GET, path = "/system/ping", produces = MediaType.TEXT_PLAIN_VALUE) + @ResponseBody + public String processGet() { + log.info("Call test method for gateway-api controller"); + return "gateway-api controller test method"; + } + +} diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/FullRequest.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/FullRequest.java new file mode 100644 index 000000000..df291f764 --- /dev/null +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/FullRequest.java @@ -0,0 +1,79 @@ +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 java.time.Instant; +import java.util.UUID; + +public class FullRequest { + @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; + + + 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; + } +} diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/Client.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/Client.java new file mode 100644 index 000000000..13110a66b --- /dev/null +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/Client.java @@ -0,0 +1,68 @@ +package ru.spcex.clearing.gatewayapi.request.objects; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.annotations.ApiModelProperty; + +import java.util.UUID; + +public class Client { + @JsonProperty("company_id") + @ApiModelProperty( + value = "Ссылка на company", + example = "ef47f76c-bcea-11ed-afa1-0242ac120003" + ) + private UUID companyId; + + @JsonProperty("client_code") + @ApiModelProperty( + value = "Код клиента", + example = "CLI001" + ) + private String clientCode; + + @JsonProperty("money_account") + @ApiModelProperty( + value = "Денежный счет клиента", + example = "1234567890" + ) + private String moneyAccount; + + @JsonProperty("depo_account") + @ApiModelProperty( + value = "Бумажный счет клиента", + example = "2223334449" + ) + private String depoAccount; + + public UUID getCompanyId() { + return companyId; + } + + public void setCompanyId(UUID companyId) { + this.companyId = companyId; + } + + public String getClientCode() { + return clientCode; + } + + public void setClientCode(String clientCode) { + this.clientCode = clientCode; + } + + public String getMoneyAccount() { + return moneyAccount; + } + + public void setMoneyAccount(String moneyAccount) { + this.moneyAccount = moneyAccount; + } + + public String getDepoAccount() { + return depoAccount; + } + + public void setDepoAccount(String depoAccount) { + this.depoAccount = depoAccount; + } +} diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/Company.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/Company.java new file mode 100644 index 000000000..29a3d380e --- /dev/null +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/Company.java @@ -0,0 +1,132 @@ +package ru.spcex.clearing.gatewayapi.request.objects; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.annotations.ApiModelProperty; + +import java.util.UUID; + +public class Company { + @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("trading_code") + @ApiModelProperty( + value = "Биржевой код участника", + example = "49" + ) + private String tradingCode; + + @JsonProperty("clearing_code") + @ApiModelProperty( + value = "Краткий клиринговый код участника клиринга. Заполняется, если участник является участником клиринга.", + example = "49" + ) + private String clearingCode; + + @JsonProperty("registration_code") + @ApiModelProperty( + value = "Регистрационный код участника", + example = "E/I/7702070139///////1/044525187" + ) + private String registrationCode; + + @JsonProperty("initiator_code") + @ApiModelProperty( + value = "Код инициатора. Заполняется, если участник является инициатором.", + example = "AB" + ) + private String initiatorCode; + + @JsonProperty("workflow_status") + @ApiModelProperty( + value = """ + «ACTV», если Эмитент не удален + «BLKD», если Эмитент удален + """, + example = "ACTV" + ) + private String workflowStatus; + + + 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 String getTradingCode() { + return tradingCode; + } + + public void setTradingCode(String tradingCode) { + this.tradingCode = tradingCode; + } + + public String getClearingCode() { + return clearingCode; + } + + public void setClearingCode(String clearingCode) { + this.clearingCode = clearingCode; + } + + public String getRegistrationCode() { + return registrationCode; + } + + public void setRegistrationCode(String registrationCode) { + this.registrationCode = registrationCode; + } + + public String getInitiatorCode() { + return initiatorCode; + } + + public void setInitiatorCode(String initiatorCode) { + this.initiatorCode = initiatorCode; + } +} diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/CompanyClearingCategory.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/CompanyClearingCategory.java new file mode 100644 index 000000000..d6c65966a --- /dev/null +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/CompanyClearingCategory.java @@ -0,0 +1,70 @@ +package ru.spcex.clearing.gatewayapi.request.objects; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.annotations.ApiModelProperty; + +import java.util.UUID; + +public class CompanyClearingCategory { + @JsonProperty("company_id") + @ApiModelProperty( + value = "Ссылка на company", + example = "ef47f76c-bcea-11ed-afa1-0242ac120003" + ) + private UUID companyId; + + @JsonProperty("category") + @ApiModelProperty( + value = """ + Категория клирингового обслуживания. Возможные значения: + · C - Категория «Ц» + · B - Категория «Б» + · F - Категория «Ф» + · I - Категория «И» + · V - Категория «В» + · T - Категория «Т» + · K - Категория «К» + """, + example = "F" + ) + private String category; + + @JsonProperty("workflow_status") + @ApiModelProperty( + value = """ + Статус допуска к категории на текущую дату. Возможные значения: + · ACTV – Участник клиринга + · APPL – Допущен к клиринговому обслуживанию + · SSPD – Допуск приостановлен + · ROPN – Допуск возобновлен + · CLOS – Допуск прекращен + """, + example = "CLOS" + ) + private String workflowStatus; + + + public UUID getCompanyId() { + return companyId; + } + + public void setCompanyId(UUID companyId) { + this.companyId = companyId; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public String getWorkflowStatus() { + return workflowStatus; + } + + public void setWorkflowStatus(String workflowStatus) { + this.workflowStatus = workflowStatus; + } +} diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/CompanyInfo.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/CompanyInfo.java new file mode 100644 index 000000000..234b056a4 --- /dev/null +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/CompanyInfo.java @@ -0,0 +1,134 @@ +package ru.spcex.clearing.gatewayapi.request.objects; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.annotations.ApiModelProperty; + +import java.util.UUID; + +public class CompanyInfo { + @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» - является кредитной организацией + · «NCRD» - не является кредитной организациейe + """, + example = "CRED" + ) + private String organizationType; + + @JsonProperty("professional_sign") + @ApiModelProperty( + value = """ + Признак проф. участника. Возможные значения: + · ALWD – Да + · DEND - Нет + """, + example = "DNED" + ) + private String professionalSign; + + @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; + } + + public String getProfessionalSign() { + return professionalSign; + } + + public void setProfessionalSign(String professionalSign) { + this.professionalSign = professionalSign; + } +} diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/CompanySymbols.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/CompanySymbols.java new file mode 100644 index 000000000..95eee1a9d --- /dev/null +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/CompanySymbols.java @@ -0,0 +1,76 @@ +package ru.spcex.clearing.gatewayapi.request.objects; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.annotations.ApiModelProperty; + +import java.util.UUID; + +public class CompanySymbols { + @JsonProperty("company_id") + @ApiModelProperty( + value = "Ссылка на company", + example = "ef47f76c-bcea-11ed-afa1-0242ac120003" + ) + private UUID companyId; + + @JsonProperty("company_symbol") + @ApiModelProperty( + value = """ + Тип реквизита. Возможные значения: + · INN - Индивидуальный налоговый номер (ИНН) + · CIO - Код иностранной организации (КИО) + · OGRN - Основной государственный регистрационный номер (ОГРН) + · CPP - Код причины постановки (КПП) + · OCPO - Общероссийский классификатор предприятий и организаций (ОКПО) + · BIC - Банковский идентификационный код (БИК) + · LICB - Номер банковской лицензии (Лицензия банка) + · LICR – Номер брокерской лицензии + · LICD - Номер дилерской лицензии + · LICT - Номер лицензии по управлению ЦБ + · LICС - Номер лицензии по брокерской деятельности ПФИ (производных финансовых инструментов) + · LICF - Номер лицензии форекс-дилера + """, + 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; + } +} diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/Contact.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/Contact.java new file mode 100644 index 000000000..0428ecd51 --- /dev/null +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/Contact.java @@ -0,0 +1,76 @@ +package ru.spcex.clearing.gatewayapi.request.objects; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.annotations.ApiModelProperty; + +import java.util.UUID; + +public class Contact { + @JsonProperty("company_id") + @ApiModelProperty( + value = "Ссылка на компанию", + example = "ef47f76c-bcea-11ed-afa1-0242ac120003" + ) + private UUID companyId; + + @JsonProperty("contact_type") + @ApiModelProperty( + value = """ + Передавать строки: + · ADRS + · POST + · CONT + · MAIL + · GDIR + · TRST + · FAX + · INFO + · WEB + """, + example = "WEB" + ) + private String contactType; + + @JsonProperty("contact_value") + @ApiModelProperty( + value = """ + Значения для contact_type: + Для ADRS - Контакты\\Юридический адрес + Для POST - Контакты\\Почтовый адрес + Для CONT - Контакты\\ФИО контактного лица + Для MAIL - Контакты\\Адрес электронной почты + Для GDIR - Контакты\\ФИО руководителя + «, » + Должность руководителя + «, » + Телефон руководителя + Для TRST - Контакты\\ФИО отв. за фондовую деятельность + «, » + Должность отв. за фондовую деятельность + «, » + Телефон отв. за фондовую деятельность + Для FAX - Контакты\\Факс + Для INFO - Контакты\\ФИО контактного лица + «, » + Должность контактного лица + «, » + Эл. почта контактного лица + «, » + Телефон контактного лица + Для WEB - Контакты\\Веб-сайт + """, + example = "example@ex.ample" + ) + 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; + } +} diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/CouponSchedule.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/CouponSchedule.java new file mode 100644 index 000000000..a53ca6976 --- /dev/null +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/CouponSchedule.java @@ -0,0 +1,138 @@ +package ru.spcex.clearing.gatewayapi.request.objects; + +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.LocalDateDeserializer; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.util.UUID; + +public class CouponSchedule { + @JsonProperty("security_id") + @ApiModelProperty( + value = "Ссылка на security", + example = "ef47f76c-bcea-11ed-afa1-0242ac120004" + ) + private UUID securityId; + + @JsonProperty("period_start_date") + @JsonDeserialize(using = LocalDateDeserializer.class) + @ApiModelProperty( + value = "Дата начала купонного периода, формат «ДД.ММ.ГГГГ»", + example = "30.12.2023" + ) + private LocalDate periodStartDate; + + @JsonProperty("period_end_date") + @JsonDeserialize(using = LocalDateDeserializer.class) + @ApiModelProperty( + value = "Дата выплаты купона, формат «ДД.ММ.ГГГГ»", + example = "30.12.2023" + ) + private LocalDate periodEndDate; + + @JsonProperty("coupon_rate") + @ApiModelProperty( + value = "Процентная ставка", + example = "7.5" + ) + private BigDecimal couponRate; + + @JsonProperty("coupon_number") + @ApiModelProperty( + value = "Порядковый номер", + example = "100" + ) + private Long couponNumber; + + @JsonProperty("coupon_currency") + @ApiModelProperty( + value = "Валюта", + example = "RUB" + ) + private String couponCurrency; + + @JsonProperty("accrued_coupon") + @ApiModelProperty( + value = "Сумма", + example = "100.15" + ) + private BigDecimal accruedCoupon; + + @JsonProperty("is_deleted") + @ApiModelProperty( + value = """ + true, если Купон удален + false, если Купон не удален + """, + example = "true" + ) + private Boolean isDeleted; + + + public UUID getSecurityId() { + return securityId; + } + + public void setSecurityId(UUID securityId) { + this.securityId = securityId; + } + + public LocalDate getPeriodStartDate() { + return periodStartDate; + } + + public void setPeriodStartDate(LocalDate periodStartDate) { + this.periodStartDate = periodStartDate; + } + + public LocalDate getPeriodEndDate() { + return periodEndDate; + } + + public void setPeriodEndDate(LocalDate periodEndDate) { + this.periodEndDate = periodEndDate; + } + + public BigDecimal getCouponRate() { + return couponRate; + } + + public void setCouponRate(BigDecimal couponRate) { + this.couponRate = couponRate; + } + + public Long getCouponNumber() { + return couponNumber; + } + + public void setCouponNumber(Long couponNumber) { + this.couponNumber = couponNumber; + } + + public String getCouponCurrency() { + return couponCurrency; + } + + public void setCouponCurrency(String couponCurrency) { + this.couponCurrency = couponCurrency; + } + + public BigDecimal getAccruedCoupon() { + return accruedCoupon; + } + + public void setAccruedCoupon(BigDecimal accruedCoupon) { + this.accruedCoupon = accruedCoupon; + } + + public Boolean getDeleted() { + return isDeleted; + } + + public void setDeleted(Boolean deleted) { + isDeleted = deleted; + } +} diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/Currency.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/Currency.java new file mode 100644 index 000000000..e12ccbf31 --- /dev/null +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/Currency.java @@ -0,0 +1,54 @@ +package ru.spcex.clearing.gatewayapi.request.objects; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.annotations.ApiModelProperty; + +import java.util.UUID; + +public class Currency { + @JsonProperty("id") + @ApiModelProperty( + value = "id", + example = "ef47f76c-bcea-11ed-afa1-0242ac120005" + ) + private UUID id; + + @JsonProperty("currency_code") + @ApiModelProperty( + value = "Значение из справочника «Коды валют» (dir_currency_code) dir_currency_code.letter_code", + example = "RUB" + ) + private String currencyCode; + + @JsonProperty("currency_code_numeric") + @ApiModelProperty( + value = "Значение из справочника «Коды валют» (dir_currency_code) dir_currency_code.numeric_code", + example = "643" + ) + private String currencyCodeNumeric; + + + public UUID getId() { + return id; + } + + public void setId(UUID id) { + this.id = id; + } + + public String getCurrencyCode() { + return currencyCode; + } + + public void setCurrencyCode(String currencyCode) { + this.currencyCode = currencyCode; + } + + public String getCurrencyCodeNumeric() { + return currencyCodeNumeric; + } + + public void setCurrencyCodeNumeric(String currencyCodeNumeric) { + this.currencyCodeNumeric = currencyCodeNumeric; + } +} diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/DirAuctionBiddingType.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/DirAuctionBiddingType.java new file mode 100644 index 000000000..cc10dc125 --- /dev/null +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/DirAuctionBiddingType.java @@ -0,0 +1,68 @@ +package ru.spcex.clearing.gatewayapi.request.objects; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.annotations.ApiModelProperty; + +import java.util.UUID; + +public class DirAuctionBiddingType { + @JsonProperty("id") + @ApiModelProperty( + value = "id", + example = "ef47f76c-bcea-11ed-afa1-0242ac120004" + ) + private UUID id; + + @JsonProperty("type_code") + @ApiModelProperty( + value = "Тип", + example = "D" + ) + private String typeCode; + + @JsonProperty("name") + @ApiModelProperty( + value = "Наименование", + example = "Депозитный аукцион" + ) + private String name; + + @JsonProperty("is_deleted") + @ApiModelProperty( + value = "Флаг удалённости", + example = "true" + ) + private Boolean isDeleted; + + public UUID getId() { + return id; + } + + public void setId(UUID id) { + this.id = id; + } + + public String getTypeCode() { + return typeCode; + } + + public void setTypeCode(String typeCode) { + this.typeCode = typeCode; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Boolean getDeleted() { + return isDeleted; + } + + public void setDeleted(Boolean deleted) { + isDeleted = deleted; + } +} diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/DirCurrencyCode.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/DirCurrencyCode.java new file mode 100644 index 000000000..a43a082ef --- /dev/null +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/DirCurrencyCode.java @@ -0,0 +1,36 @@ +package ru.spcex.clearing.gatewayapi.request.objects; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.annotations.ApiModelProperty; + +public class DirCurrencyCode { + @JsonProperty("letter_code") + @ApiModelProperty( + value = "Символьный код валюты", + example = "RUB" + ) + private String letterCode; + + @JsonProperty("numeric_code") + @ApiModelProperty( + value = "Численный код валюты", + example = "643" + ) + private String numericCode; + + public String getLetterCode() { + return letterCode; + } + + public void setLetterCode(String letterCode) { + this.letterCode = letterCode; + } + + public String getNumericCode() { + return numericCode; + } + + public void setNumericCode(String numericCode) { + this.numericCode = numericCode; + } +} diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/DirTradingModeMkr.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/DirTradingModeMkr.java new file mode 100644 index 000000000..cf5c92fe7 --- /dev/null +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/DirTradingModeMkr.java @@ -0,0 +1,86 @@ +package ru.spcex.clearing.gatewayapi.request.objects; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.annotations.ApiModelProperty; + +import java.util.UUID; + +public class DirTradingModeMkr { + @JsonProperty("id") + @ApiModelProperty( + value = "id", + example = "ef47f76c-bcea-11ed-afa1-0242ac120006" + ) + private UUID id; + + @JsonProperty("trading_code") + @ApiModelProperty( + value = "trading_code", + example = "XMDT" + ) + private String tradingCode; + + @JsonProperty("name") + @ApiModelProperty( + value = "name", + example = "Размещение: депозитный аукцион" + ) + private String name; + + @JsonProperty("settle_code") + @ApiModelProperty( + value = "settle_code", + example = "T0, Bn" + ) + private String settleCode; + + @JsonProperty("is_deleted") + @ApiModelProperty( + value = """ + true, если Режим торгов удален + false, если Режим торгов не удален + """, + example = "true" + ) + private Boolean isDeleted; + + public UUID getId() { + return id; + } + + public void setId(UUID id) { + this.id = id; + } + + public String getTradingCode() { + return tradingCode; + } + + public void setTradingCode(String tradingCode) { + this.tradingCode = tradingCode; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getSettleCode() { + return settleCode; + } + + public void setSettleCode(String settleCode) { + this.settleCode = settleCode; + } + + public Boolean getDeleted() { + return isDeleted; + } + + public void setDeleted(Boolean deleted) { + isDeleted = deleted; + } +} diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/ExchangeInstrument.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/ExchangeInstrument.java new file mode 100644 index 000000000..4f426ed18 --- /dev/null +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/ExchangeInstrument.java @@ -0,0 +1,285 @@ +package ru.spcex.clearing.gatewayapi.request.objects; + +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.LocalDateDeserializer; + +import java.time.LocalDate; +import java.util.UUID; + +public class ExchangeInstrument { + @JsonProperty("id") + @ApiModelProperty( + value = "id", + example = "ef47f76c-bcea-11ed-afa1-0242ac120002" + ) + private UUID id; + + @JsonProperty("code") + @ApiModelProperty( + value = "Код биржевого инструмента", + example = "DSTАА10VX7X8X9" + ) + private String code; + + @JsonProperty("name") + @ApiModelProperty( + value = "Наименование биржевого инструмента", + example = "Договор банковского депозита" + ) + private String name; + + @JsonProperty("initiator_id") + @ApiModelProperty( + value = "Идентификатор Инициатора (Участника торгов) в Модуле «Реестр Участников торгов, Участников клиринга и клиентов УТ/УК».", + example = "ef47f76c-bcea-11ed-afa1-0242ac120003" + ) + private UUID initiatorId; + + @JsonProperty("auction_bidding_type_id") + @ApiModelProperty( + value = "Тип аукциона\\торгов. Ссылка на dir_auction_bidding_type (id)", + example = "ef47f76c-bcea-11ed-afa1-0242ac120004" + ) + private UUID auctionBiddingTypeId; + + @JsonProperty("exchange_offexchange") + @ApiModelProperty( + value = """ + Биржевой\\Внебиржевой + Передавать: + · «exchange», если «Биржевой» + · «off_exchange», если «Внебиржевой» + """, + example = "exchange" + ) + private String exchangeOffExchange; + + @JsonProperty("price_measurement_unit") + @ApiModelProperty( + value = """ + Единица измерения цены + Передавать: + · «Percentage_of_face_value», если «Процент от номинала» + · «In_settlement_currency», если «В валюте расчетов» + """, + example = "Percentage_of_face_value" + ) + private String priceMeasurementUnit; + + @JsonProperty("price_type") + @ApiModelProperty( + value = """ + Вид цены + Передавать: + · «FLOATING», если «Плавающая» + · «FIXED», если «Фиксированная» + """ + ) + private String priceType; + + @JsonProperty("settlement_currency_letter_code") + @ApiModelProperty( + value = "Валюта расчетов. Ссылка на dir_currency_code (letter_code)", + example = "RUB" + ) + private String settlementCurrencyLetterCode; + + @JsonProperty("order_execution_type_by_price") + @ApiModelProperty( + value = """ + Тип исполнения заявок по цене + Передавать: + · «depositor_application_price», если «По цене заявки вкладчика» + · «Counter_price», если «По встречной цене» + """, + example = "Counter_price" + ) + private String orderExecutionTypeByPrice; + + @JsonProperty("order_execution_type_by_volume") + @ApiModelProperty( + value = """ + Тип исполнения заявок по объему + Передавать: + · «Proportional_lot», если «Пропорционально с точностью до лота (остаток остается)» + · «Proportional_rub», если «Пропорционально с точностью до рубля (остаток остается)» + · «FULLY», если «Полностью» + """, + example = "FULLY" + ) + private String orderExecutionTypeByVolume; + + @JsonProperty("clearing_organization") + @ApiModelProperty( + value = "Клиринговая организация", + example = "Клиринговая организация" + ) + private String clearingOrganization; + + @JsonProperty("settlement_organization") + @ApiModelProperty( + value = "Расчётная организация", + example = "Расчётная организация" + ) + private String settlementOrganization; + + @JsonProperty("specification_approval_date") + @JsonDeserialize(using = LocalDateDeserializer.class) + @ApiModelProperty( + value = "Дата принятия Решения об утверждении Спецификации биржевого инструмента", + example = "30.12.2023" + ) + private LocalDate specificationApprovalDate; + + @JsonProperty("specification_approval_number") + @ApiModelProperty( + value = "Номер принятия Решения об утверждении Спецификации биржевого инструмента", + example = "070323-01" + ) + private LocalDate specificationApprovalNumber; + + @JsonProperty("workflow_status") + @ApiModelProperty( + value = """ + «ACTV», если статус Спецификации биржевого инструмента: + БИ допущен к торгам + + «BLKD», если статус Спецификации биржевого инструмента: + БИ не допущен к торгам + Торги БИ приостановлены + Торги БИ прекращены + """, + example = "ACTV" + ) + private String workflowStatus; + + public UUID getId() { + return id; + } + + public void setId(UUID id) { + this.id = id; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public UUID getInitiatorId() { + return initiatorId; + } + + public void setInitiatorId(UUID initiatorId) { + this.initiatorId = initiatorId; + } + + public UUID getAuctionBiddingTypeId() { + return auctionBiddingTypeId; + } + + public void setAuctionBiddingTypeId(UUID auctionBiddingTypeId) { + this.auctionBiddingTypeId = auctionBiddingTypeId; + } + + public String getExchangeOffExchange() { + return exchangeOffExchange; + } + + public void setExchangeOffExchange(String exchangeOffExchange) { + this.exchangeOffExchange = exchangeOffExchange; + } + + public String getPriceMeasurementUnit() { + return priceMeasurementUnit; + } + + public void setPriceMeasurementUnit(String priceMeasurementUnit) { + this.priceMeasurementUnit = priceMeasurementUnit; + } + + public String getPriceType() { + return priceType; + } + + public void setPriceType(String priceType) { + this.priceType = priceType; + } + + public String getSettlementCurrencyLetterCode() { + return settlementCurrencyLetterCode; + } + + public void setSettlementCurrencyLetterCode(String settlementCurrencyLetterCode) { + this.settlementCurrencyLetterCode = settlementCurrencyLetterCode; + } + + public String getOrderExecutionTypeByPrice() { + return orderExecutionTypeByPrice; + } + + public void setOrderExecutionTypeByPrice(String orderExecutionTypeByPrice) { + this.orderExecutionTypeByPrice = orderExecutionTypeByPrice; + } + + public String getOrderExecutionTypeByVolume() { + return orderExecutionTypeByVolume; + } + + public void setOrderExecutionTypeByVolume(String orderExecutionTypeByVolume) { + this.orderExecutionTypeByVolume = orderExecutionTypeByVolume; + } + + public String getClearingOrganization() { + return clearingOrganization; + } + + public void setClearingOrganization(String clearingOrganization) { + this.clearingOrganization = clearingOrganization; + } + + public String getSettlementOrganization() { + return settlementOrganization; + } + + public void setSettlementOrganization(String settlementOrganization) { + this.settlementOrganization = settlementOrganization; + } + + public LocalDate getSpecificationApprovalDate() { + return specificationApprovalDate; + } + + public void setSpecificationApprovalDate(LocalDate specificationApprovalDate) { + this.specificationApprovalDate = specificationApprovalDate; + } + + public LocalDate getSpecificationApprovalNumber() { + return specificationApprovalNumber; + } + + public void setSpecificationApprovalNumber(LocalDate specificationApprovalNumber) { + this.specificationApprovalNumber = specificationApprovalNumber; + } + + public String getWorkflowStatus() { + return workflowStatus; + } + + public void setWorkflowStatus(String workflowStatus) { + this.workflowStatus = workflowStatus; + } +} \ No newline at end of file diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/Listing.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/Listing.java new file mode 100644 index 000000000..8965e1d2a --- /dev/null +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/Listing.java @@ -0,0 +1,243 @@ +package ru.spcex.clearing.gatewayapi.request.objects; + +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.LocalDateDeserializer; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.util.UUID; + +public class Listing { + @JsonProperty("security_id") + @ApiModelProperty( + value = "Ссылка на security", + example = "ef47f76c-bcea-11ed-afa1-0242ac120004" + ) + private UUID securityId; + + @JsonProperty("lot_size") + @ApiModelProperty( + value = "Размер лота", + example = "10" + ) + private BigDecimal lotSize; + + @JsonProperty("symbol_code") + @ApiModelProperty( + value = "Значение из «Общая информация\\Код биржевого инструмента СПВБ»", + example = "VTB_001P-06" + ) + private String symbolCode; + + @JsonProperty("symbol_name") + @ApiModelProperty( + value = "Значение из «Общая информация\\Сокращенное наименование на русском языке»", + example = "Биржевые облигации ВТБ" + ) + private String symbolName; + + @JsonProperty("trading_currency") + @ApiModelProperty( + value = "Валюта торгов", + example = "RUB" + ) + private String tradingCurrency; + + @JsonProperty("workflow_status") + @ApiModelProperty( + value = """ + «ACTV», если Режим торгов не удален + «BLKD», если Режим торгов удален + """, + example = "ACTV" + ) + private String workflowStatus; + + @JsonProperty("precision") + @ApiModelProperty( + value = "Точность цены, значение dir_price_min_step_precision.precision", + example = "10" + ) + private Long precision; + + @JsonProperty("min_step") + @ApiModelProperty( + value = "Минимальный шаг цены, значение dir_price_min_step_precision.min_step", + example = "10" + ) + private Long minStep; + + @JsonProperty("settle_code") + @ApiModelProperty( + value = "Код расчетов, значение dir_settle_code.settle_code", + example = "T0" + ) + private String settleCode; + + @JsonProperty("settle_days") + @ApiModelProperty( + value = "Из settle_code выделить подстроку – все символы, кроме первого слева, и привести подстроку к числу", + example = "0" + ) + private Long settleDays; + + @JsonProperty("name") + @ApiModelProperty( + value = "Режим торгов, значение dir_trading_mode.name", + example = "Обл. с ПК - Торги" + ) + private String name; + + @JsonProperty("code") + @ApiModelProperty( + value = "Режим торгов, значение dir_trading_mode.trading_code", + example = "UBVC" + ) + private String code; + + @JsonProperty("sector") + @ApiModelProperty( + value = "FOND", + example = "FOND" + ) + private String sector; + + @JsonProperty("start_date") + @JsonDeserialize(using = LocalDateDeserializer.class) + @ApiModelProperty( + value = "Дата начала действия, формат «ДД.ММ.ГГГГ»", + example = "30.12.2023" + ) + private LocalDate startDate; + + @JsonProperty("end_date") + @JsonDeserialize(using = LocalDateDeserializer.class) + @ApiModelProperty( + value = "Дата окончания действия, формат «ДД.ММ.ГГГГ»", + example = "30.12.2023" + ) + private LocalDate endDate; + + + public UUID getSecurityId() { + return securityId; + } + + public void setSecurityId(UUID securityId) { + this.securityId = securityId; + } + + public BigDecimal getLotSize() { + return lotSize; + } + + public void setLotSize(BigDecimal lotSize) { + this.lotSize = lotSize; + } + + public String getSymbolCode() { + return symbolCode; + } + + public void setSymbolCode(String symbolCode) { + this.symbolCode = symbolCode; + } + + public String getSymbolName() { + return symbolName; + } + + public void setSymbolName(String symbolName) { + this.symbolName = symbolName; + } + + public String getTradingCurrency() { + return tradingCurrency; + } + + public void setTradingCurrency(String tradingCurrency) { + this.tradingCurrency = tradingCurrency; + } + + public String getWorkflowStatus() { + return workflowStatus; + } + + public void setWorkflowStatus(String workflowStatus) { + this.workflowStatus = workflowStatus; + } + + public Long getPrecision() { + return precision; + } + + public void setPrecision(Long precision) { + this.precision = precision; + } + + public Long getMinStep() { + return minStep; + } + + public void setMinStep(Long minStep) { + this.minStep = minStep; + } + + public String getSettleCode() { + return settleCode; + } + + public void setSettleCode(String settleCode) { + this.settleCode = settleCode; + } + + public Long getSettleDays() { + return settleDays; + } + + public void setSettleDays(Long settleDays) { + this.settleDays = settleDays; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getSector() { + return sector; + } + + public void setSector(String sector) { + this.sector = sector; + } + + public LocalDate getStartDate() { + return startDate; + } + + public void setStartDate(LocalDate startDate) { + this.startDate = startDate; + } + + public LocalDate getEndDate() { + return endDate; + } + + public void setEndDate(LocalDate endDate) { + this.endDate = endDate; + } +} \ No newline at end of file diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/Nominal.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/Nominal.java new file mode 100644 index 000000000..9fb026604 --- /dev/null +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/Nominal.java @@ -0,0 +1,76 @@ +package ru.spcex.clearing.gatewayapi.request.objects; + +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.LocalDateDeserializer; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.util.UUID; + +public class Nominal { + @JsonProperty("security_id") + @ApiModelProperty( + value = "Ссылка на security", + example = "ef47f76c-bcea-11ed-afa1-0242ac120004" + ) + private UUID securityId; + + @JsonProperty("nominal") + @ApiModelProperty( + value = "Номинал", + example = "1000" + ) + private BigDecimal nominal; + + @JsonProperty("date") + @JsonDeserialize(using = LocalDateDeserializer.class) + @ApiModelProperty( + value = "Дата, формат «ДД.ММ.ГГГГ»", + example = "30.12.2023" + ) + private LocalDate date; + + @JsonProperty("is_deleted") + @ApiModelProperty( + value = """ + true, если Номинал удален + false, если Номинал не удален + """, + example = "true" + ) + private Boolean isDeleted; + + public UUID getSecurityId() { + return securityId; + } + + public void setSecurityId(UUID securityId) { + this.securityId = securityId; + } + + public BigDecimal getNominal() { + return nominal; + } + + public void setNominal(BigDecimal nominal) { + this.nominal = nominal; + } + + public LocalDate getDate() { + return date; + } + + public void setDate(LocalDate date) { + this.date = date; + } + + public Boolean getDeleted() { + return isDeleted; + } + + public void setDeleted(Boolean deleted) { + isDeleted = deleted; + } +} diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/ProfileDocument.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/ProfileDocument.java new file mode 100644 index 000000000..a3714104d --- /dev/null +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/ProfileDocument.java @@ -0,0 +1,130 @@ +package ru.spcex.clearing.gatewayapi.request.objects; + +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.LocalDateDeserializer; + +import java.time.LocalDate; +import java.util.UUID; + +public class ProfileDocument { + @JsonProperty("company_id") + @ApiModelProperty( + value = "Ссылка на company", + example = "ef47f76c-bcea-11ed-afa1-0242ac120003" + ) + private UUID companyId; + + @JsonProperty("document_type") + @ApiModelProperty( + value = """ + Тип. документа. Возможные значения: + · CNTR - Договор клиринга + · FORM - Анкета участника + · LICB - Банковская лицензия + · LICR - Брокерская лицензия + · LICD - Номер дилерской лицензии + · LICT - Номер лицензии по управлению ЦБ + · LICС - Номер лицензии по брокерской деятельности ПФИ (производных финансовых инструментов) + · LICF - Номер лицензии форекс-дилера + · EDOC - Договор об электронном взаимодействии + · XCNT - Документ о расторжении Договора клиринга + """, + example = "XCNT" + ) + private String documentType; + + @JsonProperty("issue_date") + @JsonDeserialize(using = LocalDateDeserializer.class) + @ApiModelProperty( + value = "Дата выдачи документа", + example = "30.12.2023" + ) + private LocalDate issueDate; + + @JsonProperty("issuer") + @ApiModelProperty( + value = "Кем выдан", + example = "" + ) + private String issuer; + + @JsonProperty("number") + @ApiModelProperty( + value = "Номер документа", + example = "122/Б" + ) + private String number; + + @JsonProperty("valid_to_date") + @JsonDeserialize(using = LocalDateDeserializer.class) + @ApiModelProperty( + value = "Дата окончания срока действия", + example = "30.12.2023" + ) + private LocalDate validToDate; + + @JsonProperty("link") + @ApiModelProperty( + value = "Ссылка на документ в модуле хранения документов", + example = "00cd62ba-bb30-4e9e-a8b6-7937d7492212" + ) + private String link; + + public UUID getCompanyId() { + return companyId; + } + + public void setCompanyId(UUID companyId) { + this.companyId = companyId; + } + + public String getDocumentType() { + return documentType; + } + + public void setDocumentType(String documentType) { + this.documentType = documentType; + } + + public LocalDate getIssueDate() { + return issueDate; + } + + public void setIssueDate(LocalDate issueDate) { + this.issueDate = issueDate; + } + + public String getIssuer() { + return issuer; + } + + public void setIssuer(String issuer) { + this.issuer = issuer; + } + + public String getNumber() { + return number; + } + + public void setNumber(String number) { + this.number = number; + } + + public LocalDate getValidToDate() { + return validToDate; + } + + public void setValidToDate(LocalDate validToDate) { + this.validToDate = validToDate; + } + + public String getLink() { + return link; + } + + public void setLink(String link) { + this.link = link; + } +} diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/Security.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/Security.java new file mode 100644 index 000000000..485e370fc --- /dev/null +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/Security.java @@ -0,0 +1,314 @@ +package ru.spcex.clearing.gatewayapi.request.objects; + +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.LocalDateDeserializer; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.util.UUID; + +public class Security { + @JsonProperty("id") + @ApiModelProperty( + value = "id (uuid)", + example = "ef47f76c-bcea-11ed-afa1-0242ac120004" + ) + private UUID id; + + @JsonProperty("instrument_type") + @ApiModelProperty( + value = """ + «EQTY», если Общая информация\\Вид ценной бумаги = «E - Долевые ценные бумаги (акции)» + «BOND», если Общая информация\\Вид ценной бумаги = «B - Долговые ценные бумаги (облигации)» + """, + example = "BOND" + ) + private String instrumentType; + + @JsonProperty("issuer_id") + @ApiModelProperty( + value = "Ссылка на company", + example = "ef47f76c-bcea-11ed-afa1-0242ac120003" + ) + private UUID issuerId; + @JsonProperty("short_name") + @ApiModelProperty( + value = "Основные сведения\\Сокращенное наименование на русском языке", + example = "Биржевые облигации ВТБ" + ) + private String shortName; + + @JsonProperty("full_name") + @ApiModelProperty( + value = "Основные сведения\\Полное наименование на русском языке", + example = """ + Биржевые облигации документарные процентные неконвертируемые на предъявителя + с обязательным централизованным хранением серии 001P-06" + """ + ) + private String fullName; + + @JsonProperty("short_name_eng") + @ApiModelProperty( + value = "Основные сведения\\Сокращенное наименование на английском языке", + example = "VTB exchange-traded bonds" + ) + private String shortNameEng; + + @JsonProperty("full_name_eng") + @ApiModelProperty( + value = "Основные сведения\\Полное наименование на английском языке", + example = """ + Exchange-traded interest-bearing non-convertible bearer bonds + with obligatory centralized storage of series 001P-06 + """ + ) + private String fullNameEng; + + @JsonProperty("security_symbol") + @ApiModelProperty( + value = "Общая информация\\Код биржевого инструмента СПВБ", + example = "VTB_001P-06" + ) + private String securitySymbol; + + @JsonProperty("isin") + @ApiModelProperty( + value = "Общая информация\\ISIN", + example = "RU000A0ZYWY5" + ) + private String isin; + + @JsonProperty("workflow_status") + @ApiModelProperty( + value = """ + «ACTV», если статус ценной бумаги: + Допущена к торгам в режиме размещения + Допущена к торгам в режиме обращения + + «BLKD», если статус ценной бумаги: + Не допущена к торгам + Торги временно приостановлены + Выведена из обращения + """, + example = "ACTV" + ) + private String workflowStatus; + + @JsonProperty("share_type") + @ApiModelProperty( + value = """ + «S», если Общая информация\\Тип ценной бумаги = «S - Обыкновенная акция» + «P», если Общая информация\\Тип ценной бумаги = «P - Привилегированная акция» + """, + example = "S" + ) + private String shareType; + + @JsonProperty("bond_type") + @ApiModelProperty( + value = """ + «Z», если Общая информация\\Тип ценной бумаги = «Z - Дисконтная облигация» + «F», если Общая информация\\Тип ценной бумаги = «F - Купонная облигация с постоянным купоном» + «V», если Общая информация\\Тип ценной бумаги = «V - Купонная облигация с переменным купоном» + «C», если Общая информация\\Тип ценной бумаги = «C - Купонная облигация Банка России» + «E», если Общая информация\\Тип ценной бумаги = «E - Биржевая облигация» + «I», если Общая информация\\Тип ценной бумаги = «I - Облигации с индексированным номиналом» + «M», если Общая информация\\Тип ценной бумаги = «M - Облигации с амортизацией долга» + """ + ) + private String bondType; + + @JsonProperty("maturity_date") + @JsonDeserialize(using = LocalDateDeserializer.class) + @ApiModelProperty( + value = "Дополнительная информация\\Дата погашения облигации", + example = "30.12.2023" + ) + private LocalDate maturityDate; + + @JsonProperty("nominal_value") + @ApiModelProperty( + value = "Общая информация\\Номинал инструмента", + example = "1000" + ) + private BigDecimal nominalValue; + + @JsonProperty("nominal_for_date") + @ApiModelProperty( + value = "Общая информация\\Текущее значение номинала", + example = "1000" + ) + private BigDecimal nominalForDate; + + @JsonProperty("nominal_currency") + @ApiModelProperty( + value = "Общая информация\\Валюта номинала", + example = "RUB" + ) + private String nominalCurrency; + + @JsonProperty("coupon_type") + @ApiModelProperty( + value = """ + «NUL», если Дополнительная информация\\Тип купона = «NUL - Дисконтная облигация (Нулевой)» + «VAR», если Дополнительная информация\\Тип купона = «VAR - Плавающая процентная ставка (Переменный)» + «FIX», если Дополнительная информация\\Тип купона = «FIX - Фиксированная процентная ставка (Постоянный)» + """, + example = "NUL" + ) + private String couponType; + + @JsonProperty("coupon_frequency") + @ApiModelProperty( + value = "Дополнительная информация\\Количество купонов в год", + example = "1000" + ) + private BigDecimal couponFrequency; + + public UUID getId() { + return id; + } + + public void setId(UUID id) { + this.id = id; + } + + public String getInstrumentType() { + return instrumentType; + } + + public void setInstrumentType(String instrumentType) { + this.instrumentType = instrumentType; + } + + public UUID getIssuerId() { + return issuerId; + } + + public void setIssuerId(UUID issuerId) { + this.issuerId = issuerId; + } + + 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 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 getSecuritySymbol() { + return securitySymbol; + } + + public void setSecuritySymbol(String securitySymbol) { + this.securitySymbol = securitySymbol; + } + + public String getIsin() { + return isin; + } + + public void setIsin(String isin) { + this.isin = isin; + } + + public String getWorkflowStatus() { + return workflowStatus; + } + + public void setWorkflowStatus(String workflowStatus) { + this.workflowStatus = workflowStatus; + } + + public String getShareType() { + return shareType; + } + + public void setShareType(String shareType) { + this.shareType = shareType; + } + + public String getBondType() { + return bondType; + } + + public void setBondType(String bondType) { + this.bondType = bondType; + } + + public LocalDate getMaturityDate() { + return maturityDate; + } + + public void setMaturityDate(LocalDate maturityDate) { + this.maturityDate = maturityDate; + } + + public BigDecimal getNominalValue() { + return nominalValue; + } + + public void setNominalValue(BigDecimal nominalValue) { + this.nominalValue = nominalValue; + } + + public BigDecimal getNominalForDate() { + return nominalForDate; + } + + public void setNominalForDate(BigDecimal nominalForDate) { + this.nominalForDate = nominalForDate; + } + + public String getNominalCurrency() { + return nominalCurrency; + } + + public void setNominalCurrency(String nominalCurrency) { + this.nominalCurrency = nominalCurrency; + } + + public String getCouponType() { + return couponType; + } + + public void setCouponType(String couponType) { + this.couponType = couponType; + } + + public BigDecimal getCouponFrequency() { + return couponFrequency; + } + + public void setCouponFrequency(BigDecimal couponFrequency) { + this.couponFrequency = couponFrequency; + } +} diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/TradingMode.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/TradingMode.java new file mode 100644 index 000000000..f34a78c78 --- /dev/null +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/request/objects/TradingMode.java @@ -0,0 +1,119 @@ +package ru.spcex.clearing.gatewayapi.request.objects; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.annotations.ApiModelProperty; + +import java.util.UUID; + +public class TradingMode { + @JsonProperty("exchange_instrument_id") + @ApiModelProperty( + value = "Ссылка на exchange_instrument", + example = "ef47f76c-bcea-11ed-afa1-0242ac120002" + ) + private UUID exchangeInstrumentId; + + @JsonProperty("Ссылка на trading_mode") + @ApiModelProperty( + value = "Ссылка на trading_mode_mkr", + example = "ef47f76c-bcea-11ed-afa1-0242ac120006" + ) + private UUID tradingModeId; + + @JsonProperty("min_step") + @ApiModelProperty( + value = "Минимальный шаг цены, значение listing.dir_price_min_step_precision.min_step", + example = "6" + ) + private Long minStep; + + @JsonProperty("precision") + @ApiModelProperty( + value = """ + Значение listing.dir_price_min_step_precision.precision, соответствующее + значению listing.dir_price_min_step_precision.min_step в поле «Минимальный шаг цены» + """, + example = "1" + ) + private Long precision; + + @JsonProperty("lot_size") + @ApiModelProperty( + value = "Размер лота", + example = "10" + ) + private Long lotSize; + + @JsonProperty("trading_currency_letter_code") + @ApiModelProperty( + value = "Валюта торгов. Ссылка на dir_currency_code (letter_code)", + example = "ef47f76c-bcea-11ed-afa1-0242ac120005" + ) + private UUID tradingCurrencyLetterCode; + + @JsonProperty("is_deleted") + @ApiModelProperty( + value = """ + true, если Режим торгов удален + false, если Режим торгов не удален + """, + example = "true" + ) + private Boolean isDeleted; + + public UUID getExchangeInstrumentId() { + return exchangeInstrumentId; + } + + public void setExchangeInstrumentId(UUID exchangeInstrumentId) { + this.exchangeInstrumentId = exchangeInstrumentId; + } + + public UUID getTradingModeId() { + return tradingModeId; + } + + public void setTradingModeId(UUID tradingModeId) { + this.tradingModeId = tradingModeId; + } + + public Long getMinStep() { + return minStep; + } + + public void setMinStep(Long minStep) { + this.minStep = minStep; + } + + public Long getPrecision() { + return precision; + } + + public void setPrecision(Long precision) { + this.precision = precision; + } + + public Long getLotSize() { + return lotSize; + } + + public void setLotSize(Long lotSize) { + this.lotSize = lotSize; + } + + public UUID getTradingCurrencyLetterCode() { + return tradingCurrencyLetterCode; + } + + public void setTradingCurrencyLetterCode(UUID tradingCurrencyLetterCode) { + this.tradingCurrencyLetterCode = tradingCurrencyLetterCode; + } + + public Boolean getDeleted() { + return isDeleted; + } + + public void setDeleted(Boolean deleted) { + isDeleted = deleted; + } +} diff --git a/clearing-parent/gateway-api/src/main/resources/application.properties b/clearing-parent/gateway-api/src/main/resources/application.properties new file mode 100644 index 000000000..982647841 --- /dev/null +++ b/clearing-parent/gateway-api/src/main/resources/application.properties @@ -0,0 +1,20 @@ +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 \ No newline at end of file diff --git a/clearing-parent/gateway-api/src/main/resources/logback.xml b/clearing-parent/gateway-api/src/main/resources/logback.xml new file mode 100644 index 000000000..6cf49c1fe --- /dev/null +++ b/clearing-parent/gateway-api/src/main/resources/logback.xml @@ -0,0 +1,37 @@ + + + + + %date{HH:mm:ss.SSS} [%thread] %-5level %class{0}:%line - %message%n + utf-8 + + + + ./logs/gateway-api.log + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %class{0}:%msg%n + utf8 + + + + ./logs/gateway-api.%i.log + + 1 + 10 + + + 500MB + + + + + + + + + + + + + + diff --git a/clearing-parent/gateway-api/src/main/web/WEB-INF/web.xml b/clearing-parent/gateway-api/src/main/web/WEB-INF/web.xml new file mode 100644 index 000000000..f951a8c6c --- /dev/null +++ b/clearing-parent/gateway-api/src/main/web/WEB-INF/web.xml @@ -0,0 +1,17 @@ + + + ${project.name} ${project.version} (${timestamp}) + + + 60 + + + + spcex_web + + diff --git a/clearing-parent/pom.xml b/clearing-parent/pom.xml index c80817211..8f734db02 100644 --- a/clearing-parent/pom.xml +++ b/clearing-parent/pom.xml @@ -38,6 +38,7 @@ cleaning-builders trade-importer lim-exporter + gateway-api diff --git a/pom.xml b/pom.xml index ce3a0c7c7..706b73a72 100644 --- a/pom.xml +++ b/pom.xml @@ -45,6 +45,7 @@ ${folder_root_clearing}/clearing-parent/reports-service ${folder_root_clearing}/clearing-parent/utility-service ${folder_root_clearing}/clearing-parent/scheduler-service + ${folder_root_clearing}/clearing-parent/gateway-api 3.12.4 1.7.33 diff --git a/z-distr/copy_modules_to_single_dir.cmd b/z-distr/copy_modules_to_single_dir.cmd index 991e1dad5..1100b90a8 100644 --- a/z-distr/copy_modules_to_single_dir.cmd +++ b/z-distr/copy_modules_to_single_dir.cmd @@ -19,6 +19,7 @@ rem copy clearing\modules\dbf-importer\*.jar allinone rem copy clearing\modules\reports-service\*.jar allinone rem copy clearing\modules\securities-service\*.jar allinone rem copy clearing\modules\utility-service\*.jar allinone +rem copy clearing\modules\gateway-api\*.jar allinone copy ..\..\..\clearing-parent\account-service\target\account-service.jar allinone copy ..\..\..\clearing-parent\backend-api\target\backend-api.jar allinone @@ -35,5 +36,6 @@ copy ..\..\..\clearing-parent\scheduler-service\target\scheduler-service.jar all copy ..\..\..\clearing-parent\securities-service\target\securities-service.jar allinone copy ..\..\..\clearing-parent\trade-importer\target\trade-importer.jar allinone copy ..\..\..\clearing-parent\utility-service\target\utility-service.jar allinone +copy ..\..\..\clearing-parent\gateway-api\target\gateway-api.jar allinone :exit1: diff --git a/z-distr/pom.xml b/z-distr/pom.xml index 819183670..4e5cb36c5 100644 --- a/z-distr/pom.xml +++ b/z-distr/pom.xml @@ -343,6 +343,32 @@ + + copy-gateway-api-bin + prepare-package + + copy + + + + + ${folder_root_gateway-api}/target/gateway-api.jar + + + ${folder.clearing.distr.modules}/gateway-api/gateway-api.jar + + + + + ${folder_root_gateway-api}/src/main/resources/application.properties + + + ${folder.clearing.distr.modules}/gateway-api/application.properties + + + + + diff --git a/z-distr/src/main/resources/distr/bin/gateway-api.sh b/z-distr/src/main/resources/distr/bin/gateway-api.sh new file mode 100644 index 000000000..aac6f7dde --- /dev/null +++ b/z-distr/src/main/resources/distr/bin/gateway-api.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +CLEARING_HOME=/opt/mfd/clearing/ +cd $CLEARING_HOME/bin + +CMD="java -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=7020 -jar gateway-api.jar --spring.config.location=$CLEARING_HOME/settings/gateway-api/" + +$CMD >/dev/null 2>&1 & + diff --git a/z-distr/src/main/resources/distr/modules/gateway-api/Dockerfile b/z-distr/src/main/resources/distr/modules/gateway-api/Dockerfile new file mode 100644 index 000000000..643717be3 --- /dev/null +++ b/z-distr/src/main/resources/distr/modules/gateway-api/Dockerfile @@ -0,0 +1,6 @@ +FROM debian:stable-20220125-jdk17 + +ADD gateway-api.jar /opt/clearing/bin/gateway-api.jar +ADD application.properties /opt/clearing/bin/application.properties +USER root +ENTRYPOINT java -jar /opt/clearing/bin/gateway-api.jar --spring.config.location=/opt/clearing/bin/ \ No newline at end of file