PrepareExchangeInstruments

This commit is contained in:
akulikov 2023-05-27 18:17:01 +03:00
parent ee1f89e771
commit 48f619fdc7
6 changed files with 267 additions and 3 deletions

View file

@ -0,0 +1,58 @@
package ru.spcex.clearing.gatewayapi.logic.listings_mm;
import ru.spcex.clearing.gatewayapi.request.MMListingsRequest;
import ru.spcex.clearing.gatewayapi.request.objects.DirAuctionBiddingType;
import ru.spcex.clearing.gatewayapi.request.objects.DirCurrencyCode;
import ru.spcex.clearing.gatewayapi.request.objects.DirTradingModeMkr;
import ru.spcex.clearing.gatewayapi.request.objects.ExchangeInstrument;
import java.util.List;
public class MMListingsRequestParam {
private final MMListingsRequest request;
private List<ExchangeInstrument> exchangeInstrumentsList;
private List<DirAuctionBiddingType> dirAuctionBiddingTypeList;
private List<DirCurrencyCode> dirCurrencyCodeList;
private List<DirTradingModeMkr> dirTradingModeMkrList;
public MMListingsRequestParam(MMListingsRequest request) {
this.request = request;
}
public MMListingsRequest getRequest() {
return request;
}
public List<ExchangeInstrument> getExchangeInstrumentsList() {
return exchangeInstrumentsList;
}
public void setExchangeInstrumentsList(List<ExchangeInstrument> exchangeInstrumentsList) {
this.exchangeInstrumentsList = exchangeInstrumentsList;
}
public List<DirAuctionBiddingType> getDirAuctionBiddingTypeList() {
return dirAuctionBiddingTypeList;
}
public void setDirAuctionBiddingTypeList(List<DirAuctionBiddingType> dirAuctionBiddingTypeList) {
this.dirAuctionBiddingTypeList = dirAuctionBiddingTypeList;
}
public List<DirCurrencyCode> getDirCurrencyCodeList() {
return dirCurrencyCodeList;
}
public void setDirCurrencyCodeList(List<DirCurrencyCode> dirCurrencyCodeList) {
this.dirCurrencyCodeList = dirCurrencyCodeList;
}
public List<DirTradingModeMkr> getDirTradingModeMkrList() {
return dirTradingModeMkrList;
}
public void setDirTradingModeMkrList(List<DirTradingModeMkr> dirTradingModeMkrList) {
this.dirTradingModeMkrList = dirTradingModeMkrList;
}
}

View file

@ -0,0 +1,97 @@
package ru.spcex.clearing.gatewayapi.logic.listings_mm;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ru.spcex.clearing.gatewayapi.logic.ProcessResult;
import ru.spcex.clearing.gatewayapi.logic.Stage;
import ru.spcex.clearing.gatewayapi.request.objects.DirAuctionBiddingType;
import ru.spcex.clearing.gatewayapi.request.objects.DirTradingModeMkr;
import ru.spcex.clearing.gatewayapi.request.objects.ExchangeInstrument;
import ru.spcex.clearing.gatewayapi.request.objects.TradingMode;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
public class PrepareExchangeInstruments extends Stage<MMListingsRequestParam> {
private final Logger log = LoggerFactory.getLogger(getClass());
@Override
public ProcessResult process(MMListingsRequestParam param) {
List<ExchangeInstrument> exchangeInstrumentList = param.getExchangeInstrumentsList();
// Проверяем что в exchange_instrument нет объектов с одинаковым id
Map<UUID, ExchangeInstrument> exchangeInstrumentMap = new HashMap<>();
for (ExchangeInstrument exchangeInstrument : exchangeInstrumentList) {
if (exchangeInstrumentMap.containsKey(exchangeInstrument.getId())) {
log.warn("For exchange_instrument.UUID {} found > 1 element from request, use first", exchangeInstrument.getId());
exchangeInstrument.setInvalidData(true);
continue;
}
exchangeInstrumentMap.put(exchangeInstrument.getId(), exchangeInstrument);
}
// Находим для exchange_instrument соответствующий trading_mode по условию:
// exchange_instrument.id = trading_mode.exchange_instrument_id
List<TradingMode> tradingModeList = param.getRequest().getTradingModeList();
Map<UUID, TradingMode> tradingModeMap = new HashMap<>();
for (TradingMode tradingMode : tradingModeList) {
if (tradingModeMap.containsKey(tradingMode.getTradingModeId())) {
log.warn("For trading_mode.UUID {} found > 1 element from request, use first", tradingMode.getTradingModeId());
continue;
}
tradingModeMap.put(tradingMode.getTradingModeId(), tradingMode);
UUID exchangeInstrumentId = tradingMode.getExchangeInstrumentId();
ExchangeInstrument exchangeInstrument = exchangeInstrumentMap.get(exchangeInstrumentId);
if (exchangeInstrument != null) {
if (exchangeInstrument.getTradingMode() != null) {
log.warn("For exchange_instrument.id {} found > 1 trading_mode, use first", tradingMode.getExchangeInstrumentId());
continue;
}
exchangeInstrument.setTradingMode(tradingMode);
} else {
log.warn("For trading_mode.exchange_instrument_id {} not found exchange_instrument, trading_mode skipped", exchangeInstrumentId);
}
}
// Находим для exchange_instrument соответсвующий dir_auction_bidding_type по условию:
// exchange_instrument.auction_bidding_type_id = dir_auction_bidding_type.id
Map<UUID, DirAuctionBiddingType> dirAuctionBiddingTypeMap = new HashMap<>();
for (DirAuctionBiddingType dirAuctionBiddingType : param.getRequest().getDirAuctionBiddingTypeList()) {
if (dirAuctionBiddingTypeMap.containsKey(dirAuctionBiddingType.getId())) {
log.warn("For dir_auction_bidding_type.id {} found > 1 element from request, use first", dirAuctionBiddingType.getId());
continue;
}
dirAuctionBiddingTypeMap.put(dirAuctionBiddingType.getId(), dirAuctionBiddingType);
}
for (ExchangeInstrument exchangeInstrument : exchangeInstrumentList) {
if (exchangeInstrument.isInvalidData()) continue;
DirAuctionBiddingType dirAuctionBiddingType = dirAuctionBiddingTypeMap.get(exchangeInstrument.getAuctionBiddingTypeId());
if (dirAuctionBiddingType == null) {
log.warn("For exchange_instrument.id {} not found dir_auction_bidding_type", exchangeInstrument.getId());
continue;
}
exchangeInstrument.setDirAuctionBiddingType(dirAuctionBiddingType);
}
// Находим для trading_mode соответствующий dir_trading_mode_mkr по условию:
// trading_mode.trading_mode_id = dir_trading_mode_mkr.id
List<DirTradingModeMkr> dirTradingModeMkrList = param.getRequest().getDirTradingModeMkrList();
for (DirTradingModeMkr dirTradingModeMkr : dirTradingModeMkrList) {
UUID tradingModeUUID = dirTradingModeMkr.getId();
TradingMode tradingMode = tradingModeMap.get(tradingModeUUID);
if (tradingMode != null) {
if (tradingMode.getDirTradingModeMkr() != null) {
log.warn("For trading_mode.trading_more_id {} found > 1 dir_trading_mode_mkr, use first", tradingModeUUID);
continue;
}
tradingMode.setDirTradingModeMkr(dirTradingModeMkr);
} else {
log.warn("For dir_trading_mode_mkr.id {} not found trading_mode (for trading_mode_id), dir_trading_mode skipped", tradingModeUUID);
}
}
return null;
}
}

View file

@ -8,7 +8,7 @@ import java.util.List;
public class FondListingsRequest extends BaseRequest {
@JsonProperty("security")
@ApiModelProperty(value = "Список security")
@ApiModelProperty(value = "Список инструментов")
private List<FondSecurity> securities;
@JsonProperty("coupon_schedule")

View file

@ -0,0 +1,69 @@
package ru.spcex.clearing.gatewayapi.request;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModelProperty;
import ru.spcex.clearing.gatewayapi.request.objects.*;
import java.util.List;
public class MMListingsRequest extends BaseRequest {
@JsonProperty("exchange_instrument")
@ApiModelProperty(value = "Список инструментов")
private List<ExchangeInstrument> exchangeInstrumentList;
@JsonProperty("dir_auction_bidding_type")
@ApiModelProperty(value = "Справочник «Тип аукциона или торгов»")
private List<DirAuctionBiddingType> dirAuctionBiddingTypeList;
@JsonProperty("dir_currency_code")
@ApiModelProperty(value = "Справочник «Коды валют»")
private List<DirCurrencyCode> dirCurrencyCodeList;
@JsonProperty("trading_mode")
@ApiModelProperty(value = "Список режимов торгов Спецификации биржевого инструмента")
private List<TradingMode> tradingModeList;
@JsonProperty("dir_trading_mode_mkr")
@ApiModelProperty(value = "Справочник «Режимы торгов МКР»")
private List<DirTradingModeMkr> dirTradingModeMkrList;
public List<ExchangeInstrument> getExchangeInstrumentList() {
return exchangeInstrumentList;
}
public void setExchangeInstrumentList(List<ExchangeInstrument> exchangeInstrumentList) {
this.exchangeInstrumentList = exchangeInstrumentList;
}
public List<DirAuctionBiddingType> getDirAuctionBiddingTypeList() {
return dirAuctionBiddingTypeList;
}
public void setDirAuctionBiddingTypeList(List<DirAuctionBiddingType> dirAuctionBiddingTypeList) {
this.dirAuctionBiddingTypeList = dirAuctionBiddingTypeList;
}
public List<DirCurrencyCode> getDirCurrencyCodeList() {
return dirCurrencyCodeList;
}
public void setDirCurrencyCodeList(List<DirCurrencyCode> dirCurrencyCodeList) {
this.dirCurrencyCodeList = dirCurrencyCodeList;
}
public List<TradingMode> getTradingModeList() {
return tradingModeList;
}
public void setTradingModeList(List<TradingMode> tradingModeList) {
this.tradingModeList = tradingModeList;
}
public List<DirTradingModeMkr> getDirTradingModeMkrList() {
return dirTradingModeMkrList;
}
public void setDirTradingModeMkrList(List<DirTradingModeMkr> dirTradingModeMkrList) {
this.dirTradingModeMkrList = dirTradingModeMkrList;
}
}

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;
@ -8,7 +9,7 @@ import ru.spcex.clearing.gatewayapi.config.deserializers.LocalDateDeserializer;
import java.time.LocalDate;
import java.util.UUID;
public class ExchangeInstrument {
public class ExchangeInstrument extends WithMapId {
@JsonProperty("id")
@ApiModelProperty(
value = "id",
@ -155,6 +156,15 @@ public class ExchangeInstrument {
)
private String workflowStatus;
@JsonIgnore
@ApiModelProperty(hidden = true)
private TradingMode tradingMode;
@JsonIgnore
@ApiModelProperty(hidden = true)
private DirAuctionBiddingType dirAuctionBiddingType;
public UUID getId() {
return id;
}
@ -282,4 +292,20 @@ public class ExchangeInstrument {
public void setWorkflowStatus(String workflowStatus) {
this.workflowStatus = workflowStatus;
}
public TradingMode getTradingMode() {
return tradingMode;
}
public void setTradingMode(TradingMode tradingMode) {
this.tradingMode = tradingMode;
}
public DirAuctionBiddingType getDirAuctionBiddingType() {
return dirAuctionBiddingType;
}
public void setDirAuctionBiddingType(DirAuctionBiddingType dirAuctionBiddingType) {
this.dirAuctionBiddingType = dirAuctionBiddingType;
}
}

View file

@ -1,11 +1,12 @@
package ru.spcex.clearing.gatewayapi.request.objects;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModelProperty;
import java.util.UUID;
public class TradingMode {
public class TradingMode extends WithMapId {
@JsonProperty("exchange_instrument_id")
@ApiModelProperty(
value = "Ссылка на exchange_instrument",
@ -61,6 +62,11 @@ public class TradingMode {
)
private Boolean isDeleted;
@JsonIgnore
@ApiModelProperty(hidden = true)
private DirTradingModeMkr dirTradingModeMkr;
public UUID getExchangeInstrumentId() {
return exchangeInstrumentId;
}
@ -116,4 +122,12 @@ public class TradingMode {
public void setDeleted(Boolean deleted) {
isDeleted = deleted;
}
public DirTradingModeMkr getDirTradingModeMkr() {
return dirTradingModeMkr;
}
public void setDirTradingModeMkr(DirTradingModeMkr dirTradingModeMkr) {
this.dirTradingModeMkr = dirTradingModeMkr;
}
}