PrepareExchangeInstruments
This commit is contained in:
parent
ee1f89e771
commit
48f619fdc7
6 changed files with 267 additions and 3 deletions
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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")
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue