This commit is contained in:
parent
46afedede1
commit
e31453e293
10 changed files with 524 additions and 127 deletions
|
|
@ -29,9 +29,6 @@ public class RatesFacade implements IClearingFacade {
|
|||
this.currencyCodeDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CurrencyCodeDictionary, CurrencyCodeDictionary.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Создает clientCode, TCR и опционально TCRList, если указаны валюты.
|
||||
*/
|
||||
public void createRates(RatesNewRequest request) {
|
||||
log.trace("Start process creating new rates");
|
||||
Rates rates = new Rates();
|
||||
|
|
|
|||
|
|
@ -1,43 +1,47 @@
|
|||
package ru.spcex.clearing.securities.service.facade;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.Instant;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Service;
|
||||
import ru.clearing.classes.statics.data.misc.Listing;
|
||||
import ru.clearing.classes.statics.data.misc.SCrossRate;
|
||||
import ru.clearing.classes.statics.data.security.Security;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.securitites.SCrossRateRequest;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.securitites.SCrossRateNewRequest;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.securitites.SCrossRateUpdateRequest;
|
||||
import ru.spcex.platform.imdg.api.Imdg;
|
||||
import ru.spcex.platform.imdg.api.ImdgId;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
import ru.spcex.platform.imdg.api.predicate.specific.SecuritySelector;
|
||||
|
||||
@Service
|
||||
public class SCrossRateFacade {
|
||||
private final Logger log = LoggerFactory.getLogger(getClass());
|
||||
private final SecuritySelector<Security> securitySelector;
|
||||
private final ImdgProvider imdgProvider;
|
||||
private final ImdgId idGenerator;
|
||||
private final Imdg<SCrossRate> sCrossRateImdg;
|
||||
|
||||
public SCrossRateFacade(SecuritySelector<Security> securitySelector, ImdgProvider imdgProvider) {
|
||||
this.securitySelector = securitySelector;
|
||||
public SCrossRateFacade(ImdgProvider imdgProvider) {
|
||||
this.imdgProvider = imdgProvider;
|
||||
this.idGenerator = imdgProvider.getImdgIdGenerator();
|
||||
this.sCrossRateImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SCrossRate, SCrossRate.class);
|
||||
}
|
||||
|
||||
public Listing newSCrossRate(SCrossRateRequest req) {
|
||||
|
||||
public void create(SCrossRateNewRequest req) {
|
||||
SCrossRate sCrossRate = new SCrossRate();
|
||||
sCrossRate.setCreated(Instant.now());
|
||||
sCrossRate.setDate(req.getDate());
|
||||
sCrossRate.setCurrency(req.getBaseCurrencyLetterCode());
|
||||
sCrossRate.setCurrency(req.getCurrency());
|
||||
sCrossRate.setUnitRate(req.getRate());
|
||||
sCrossRate.setFaceValue(new BigDecimal(req.getBaseCurrencyUnit()));
|
||||
sCrossRate.setRate(req.getPrice());
|
||||
return null;
|
||||
sCrossRate.setFaceValue(req.getFaceValue());
|
||||
sCrossRate.setRate(req.getRate());
|
||||
sCrossRateImdg.insert(sCrossRate);
|
||||
}
|
||||
|
||||
public void update(SCrossRateUpdateRequest req) {
|
||||
SCrossRate sCrossRate = sCrossRateImdg.getSingleObjectByID(req.getId());
|
||||
sCrossRate.setUnitRate(req.getRate());
|
||||
sCrossRate.setFaceValue(req.getFaceValue());
|
||||
sCrossRate.setRate(req.getRate());
|
||||
sCrossRate.setUpdated(Instant.now());
|
||||
sCrossRateImdg.update(sCrossRate);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package ru.spcex.clearing.securities.service.listeners;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Optional;
|
||||
import java.util.function.Function;
|
||||
import org.apache.kafka.clients.consumer.Consumer;
|
||||
|
|
@ -8,15 +9,22 @@ import org.slf4j.Logger;
|
|||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.stereotype.Service;
|
||||
import ru.clearing.classes.statics.data.security.Rates;
|
||||
import ru.clearing.platform.dictionary.CurrencyCodeDictionary;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
|
||||
import ru.spcex.clearing.platform.messaging.domain.Consts;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.security.RatesGatewayRequest;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.security.RatesNewRequest;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.security.RatesUpdateRequest;
|
||||
import ru.spcex.clearing.platform.messaging.service.QueueConsumer;
|
||||
import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate;
|
||||
import ru.spcex.clearing.securities.service.facade.RatesFacade;
|
||||
import ru.spcex.clearing.util.security.UserRoleVerification;
|
||||
import ru.spcex.platform.enumeration.WorkflowStatus;
|
||||
import ru.spcex.platform.imdg.api.Imdg;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
||||
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
||||
import ru.spcex.platform.utils.enumeration.IMessageResolver;
|
||||
import ru.spcex.platform.utils.validation.IValidator;
|
||||
|
|
@ -26,10 +34,12 @@ public class RatesMessageListener extends QueueConsumer implements InitializingB
|
|||
private final Logger log = LoggerFactory.getLogger(getClass());
|
||||
private final ImdgProvider imdgProvider;
|
||||
private final RatesFacade ratesFacade;
|
||||
private final Imdg<Rates> ratesImdg;
|
||||
private final Function<RatesNewRequest, IValidator> ratesNewValidator;
|
||||
private final Function<RatesUpdateRequest, IValidator> ratesUpdateValidator;
|
||||
private final UserRoleVerification userRoleVerification;
|
||||
private final IMessageResolver messageResolver;
|
||||
private final Imdg<CurrencyCodeDictionary> currencyCodeDictionaryImdg;
|
||||
|
||||
public RatesMessageListener(Consumer<String, Object> kafkaQueue,
|
||||
Producer<String, Object> kafkaProducer,
|
||||
|
|
@ -46,6 +56,8 @@ public class RatesMessageListener extends QueueConsumer implements InitializingB
|
|||
this.ratesUpdateValidator = ratesUpdateValidator;
|
||||
this.userRoleVerification = userRoleVerification;
|
||||
this.messageResolver = messageResolver;
|
||||
this.ratesImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Rates, Rates.class);
|
||||
this.currencyCodeDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CurrencyCodeDictionary, CurrencyCodeDictionary.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -59,6 +71,9 @@ public class RatesMessageListener extends QueueConsumer implements InitializingB
|
|||
callback(RatesUpdateRequest.class)
|
||||
.setFunction(this::ratesUpdate)
|
||||
.forDestination(Consts.DESTINATION_RATES_UPDATE, callbacks::put);
|
||||
callback(RatesGatewayRequest.class)
|
||||
.setConsumer(this::gatewayRatesRequest)
|
||||
.forDestination(Consts.DESTINATION_RATES_GATEWAY, callbacks::put);
|
||||
init();
|
||||
}
|
||||
|
||||
|
|
@ -97,4 +112,58 @@ public class RatesMessageListener extends QueueConsumer implements InitializingB
|
|||
ratesFacade.updateRates(request);
|
||||
return null;
|
||||
}
|
||||
|
||||
private void gatewayRatesRequest(BaseRequest<RatesGatewayRequest> ratesGatewayRequest) {
|
||||
RatesGatewayRequest payload = ratesGatewayRequest.getRequestPayload();
|
||||
|
||||
for (RatesGatewayRequest.RateElem elem : payload.getRateElems()) {
|
||||
ImdgPredicateBuilder predicateBuilder = ratesImdg.predicateBuilder();
|
||||
Collection<Long> rateIds = ratesImdg.getCollectionIdsByPredicate(
|
||||
predicateBuilder.and(
|
||||
predicateBuilder.equals("date", elem.getDate()),
|
||||
predicateBuilder.equals("currency", elem.getBaseCurrencyLetterCode())
|
||||
));
|
||||
if (rateIds.isEmpty()) {
|
||||
toNewRequest(elem).ifPresent(ratesFacade::createRates);
|
||||
} else {
|
||||
toUpdateRequest(elem).ifPresent(ratesUpdateRequest -> {
|
||||
ratesUpdateRequest.setId(rateIds.iterator().next());
|
||||
ratesFacade.updateRates(ratesUpdateRequest);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private Optional<RatesNewRequest> toNewRequest(RatesGatewayRequest.RateElem sRateElem) {
|
||||
RatesNewRequest newRequest = new RatesNewRequest();
|
||||
|
||||
CurrencyCodeDictionary currencyCodeDictionary = currencyByCode(sRateElem.getBaseCurrencyLetterCode());
|
||||
if (currencyCodeDictionary == null) {
|
||||
return Optional.empty();
|
||||
}
|
||||
newRequest.setCurrencyId(currencyCodeDictionary.getId());
|
||||
newRequest.setValueDate(sRateElem.getDate());
|
||||
newRequest.setValue(sRateElem.getPrice());
|
||||
newRequest.setStatus(WorkflowStatus.Active.getKey());
|
||||
return Optional.of(newRequest);
|
||||
}
|
||||
|
||||
private Optional<RatesUpdateRequest> toUpdateRequest(RatesGatewayRequest.RateElem sRateElem) {
|
||||
RatesUpdateRequest updateRequest = new RatesUpdateRequest();
|
||||
|
||||
CurrencyCodeDictionary currencyCodeDictionary = currencyByCode(sRateElem.getBaseCurrencyLetterCode());
|
||||
if (currencyCodeDictionary == null) {
|
||||
return Optional.empty();
|
||||
}
|
||||
updateRequest.setValue(sRateElem.getPrice());
|
||||
updateRequest.setStatus(WorkflowStatus.Active.getKey());
|
||||
return Optional.of(updateRequest);
|
||||
}
|
||||
|
||||
private CurrencyCodeDictionary currencyByCode(String code) {
|
||||
ImdgPredicateBuilder predicateBuilder = currencyCodeDictionaryImdg.predicateBuilder();
|
||||
return currencyCodeDictionaryImdg.getFirstObjectByPredicate(
|
||||
predicateBuilder.equals("code", code)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,127 @@
|
|||
package ru.spcex.clearing.securities.service.listeners;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.Instant;
|
||||
import java.util.Collection;
|
||||
import java.util.function.Function;
|
||||
import org.apache.kafka.clients.consumer.Consumer;
|
||||
import org.apache.kafka.clients.producer.Producer;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.stereotype.Service;
|
||||
import ru.clearing.classes.statics.data.misc.SCrossRate;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
|
||||
import ru.spcex.clearing.platform.messaging.domain.Consts;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.securitites.SCrossRateGatewayRequest;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.securitites.SCrossRateNewRequest;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.securitites.SCrossRateUpdateRequest;
|
||||
import ru.spcex.clearing.platform.messaging.service.QueueConsumer;
|
||||
import ru.spcex.clearing.securities.service.facade.SCrossRateFacade;
|
||||
import ru.spcex.clearing.util.security.UserRoleVerification;
|
||||
import ru.spcex.platform.imdg.api.Imdg;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
||||
import ru.spcex.platform.utils.enumeration.IMessageResolver;
|
||||
|
||||
@Service
|
||||
public class SCrossRatesMessageListener extends QueueConsumer implements InitializingBean {
|
||||
private final Logger log = LoggerFactory.getLogger(getClass());
|
||||
private final ImdgProvider imdgProvider;
|
||||
private final UserRoleVerification userRoleVerification;
|
||||
private final IMessageResolver messageResolver;
|
||||
private final Imdg<SCrossRate> sCrossRateImdg;
|
||||
private final SCrossRateFacade sCrossRateFacade;
|
||||
|
||||
public SCrossRatesMessageListener(Consumer<String, Object> kafkaQueue,
|
||||
Producer<String, Object> kafkaProducer,
|
||||
ImdgProvider imdgProvider,
|
||||
UserRoleVerification userRoleVerification,
|
||||
IMessageResolver messageResolver,
|
||||
SCrossRateFacade sCrossRateFacade) {
|
||||
super(kafkaQueue, kafkaProducer);
|
||||
this.imdgProvider = imdgProvider;
|
||||
this.userRoleVerification = userRoleVerification;
|
||||
this.messageResolver = messageResolver;
|
||||
this.sCrossRateImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SCrossRate, SCrossRate.class);
|
||||
this.sCrossRateFacade = sCrossRateFacade;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterPropertiesSet() {
|
||||
imdgProvider.waitAvailable();
|
||||
|
||||
callback(SCrossRateGatewayRequest.class)
|
||||
.setConsumer(this::sCrossRatesProcess)
|
||||
.forDestination(Consts.DESTINATION_S_CROSS_RATES_GATEWAY, callbacks::put);
|
||||
init();
|
||||
}
|
||||
|
||||
private void sCrossRatesProcess(BaseRequest<SCrossRateGatewayRequest> sCrossRatesReq) {
|
||||
SCrossRateGatewayRequest payload = sCrossRatesReq.getRequestPayload();
|
||||
|
||||
for (SCrossRateGatewayRequest.SCrossRateElem elem : payload.getCrossRateElems()) {
|
||||
ImdgPredicateBuilder predicateBuilder = sCrossRateImdg.predicateBuilder();
|
||||
Collection<Long> sCrossRateIds = sCrossRateImdg.getCollectionIdsByPredicate(
|
||||
predicateBuilder.and(
|
||||
predicateBuilder.equals("date", elem.getDate()),
|
||||
predicateBuilder.equals("currency", elem.getBaseCurrencyLetterCode())
|
||||
));
|
||||
if (sCrossRateIds.isEmpty()) {
|
||||
SCrossRateNewRequest newRequest = toNewRequest(elem);
|
||||
sCrossRateFacade.create(newRequest);
|
||||
} else {
|
||||
SCrossRateUpdateRequest updateRequest = toUpdateRequest(elem);
|
||||
updateRequest.setId(sCrossRateIds.iterator().next());
|
||||
sCrossRateFacade.update(updateRequest);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private SCrossRateNewRequest toNewRequest(SCrossRateGatewayRequest.SCrossRateElem sCrossRateElem) {
|
||||
SCrossRateNewRequest newRequest = new SCrossRateNewRequest();
|
||||
newRequest.setDate(sCrossRateElem.getDate());
|
||||
newRequest.setCurrency(sCrossRateElem.getBaseCurrencyLetterCode());
|
||||
newRequest.setUnitRate(sCrossRateElem.getRate());
|
||||
newRequest.setFaceValue(BigDecimal.valueOf(sCrossRateElem.getBaseCurrencyUnit()));
|
||||
newRequest.setRate(sCrossRateElem.getPrice());
|
||||
return newRequest;
|
||||
}
|
||||
|
||||
private SCrossRateUpdateRequest toUpdateRequest(SCrossRateGatewayRequest.SCrossRateElem sCrossRateElem) {
|
||||
SCrossRateUpdateRequest updateRequest = new SCrossRateUpdateRequest();
|
||||
updateRequest.setUnitRate(sCrossRateElem.getRate());
|
||||
updateRequest.setFaceValue(BigDecimal.valueOf(sCrossRateElem.getBaseCurrencyUnit()));
|
||||
updateRequest.setRate(sCrossRateElem.getPrice());
|
||||
return updateRequest;
|
||||
}
|
||||
|
||||
private Function<SCrossRateGatewayRequest.SCrossRateElem, SCrossRate> findSCrossRate() {
|
||||
return req -> {
|
||||
ImdgPredicateBuilder predicateBuilder = sCrossRateImdg.predicateBuilder();
|
||||
Collection<Long> sCrossRateIds = sCrossRateImdg.getCollectionIdsByPredicate(
|
||||
predicateBuilder.and(
|
||||
predicateBuilder.equals("date", req.getDate()),
|
||||
predicateBuilder.equals("currency", req.getBaseCurrencyLetterCode())
|
||||
));
|
||||
SCrossRate sCrossRate;
|
||||
if (sCrossRateIds.isEmpty()) {
|
||||
log.debug("Not found any cross rate for date: {}, currency: {}",
|
||||
req.getDate(),
|
||||
req.getBaseCurrencyLetterCode());
|
||||
sCrossRate = new SCrossRate();
|
||||
sCrossRate.setCreated(Instant.now());
|
||||
} else {
|
||||
Long id = sCrossRateIds.iterator().next();
|
||||
log.debug("Found cross rate for date: {}, currency: {} with id: {}",
|
||||
req.getDate(),
|
||||
req.getBaseCurrencyLetterCode(),
|
||||
id);
|
||||
sCrossRate = sCrossRateImdg.getSingleObjectByID(sCrossRateIds.iterator().next());
|
||||
sCrossRate.setUpdated(Instant.now());
|
||||
}
|
||||
return sCrossRate;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
@ -133,7 +133,8 @@ public interface Consts {
|
|||
|
||||
String DESTINATION_RATES_NEW = "rates-new";
|
||||
String DESTINATION_RATES_UPDATE = "rates-update";
|
||||
|
||||
String DESTINATION_RATES_GATEWAY = "rates-gateway";
|
||||
String DESTINATION_S_CROSS_RATES_GATEWAY = "sCross-rates-gateway";
|
||||
String DESTINATION_VALIDATE_SYMBOLS_NEW = "validate-symbols-new";
|
||||
String DESTINATION_VALIDATE_SYMBOLS_UPDATE = "validate-symbols-update";
|
||||
String DESTINATION_VALIDATE_SYMBOLS_DELETE = "validate-symbols-delete";
|
||||
|
|
|
|||
|
|
@ -0,0 +1,135 @@
|
|||
package ru.spcex.clearing.platform.messaging.domain.cud.securitites;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
|
||||
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
import ru.spcex.clearing.platform.messaging.domain.json.deserialize.LocalDateDeserializer;
|
||||
import ru.spcex.clearing.platform.messaging.domain.json.serialize.LocalDateSerializer;
|
||||
|
||||
public class SCrossRateGatewayRequest {
|
||||
@JsonProperty
|
||||
private List<SCrossRateElem> crossRateElems;
|
||||
|
||||
public List<SCrossRateElem> getCrossRateElems() {
|
||||
return crossRateElems;
|
||||
}
|
||||
|
||||
public void setCrossRateElems(List<SCrossRateElem> crossRateElems) {
|
||||
this.crossRateElems = crossRateElems;
|
||||
}
|
||||
|
||||
public static class SCrossRateElem {
|
||||
@JsonProperty
|
||||
private String type;
|
||||
@JsonSerialize(using = LocalDateSerializer.class)
|
||||
@JsonDeserialize(using = LocalDateDeserializer.class)
|
||||
@JsonProperty
|
||||
private LocalDate date;
|
||||
@JsonProperty
|
||||
private String baseCurrencyLetterCode;
|
||||
@JsonProperty
|
||||
private String associatedCurrencyLetterCode;
|
||||
@JsonProperty
|
||||
private BigDecimal rate;
|
||||
@JsonProperty
|
||||
private Integer priceAccuracy;
|
||||
@JsonProperty
|
||||
private Integer baseCurrencyUnit;
|
||||
@JsonProperty
|
||||
private BigDecimal price;
|
||||
@JsonSerialize(using = LocalDateTimeSerializer.class)
|
||||
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
|
||||
@JsonProperty
|
||||
private LocalDateTime updateDateTime;
|
||||
@JsonSerialize(using = LocalDateTimeSerializer.class)
|
||||
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
|
||||
@JsonProperty
|
||||
private LocalDateTime sourceDateTime;
|
||||
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(String type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public LocalDate getDate() {
|
||||
return date;
|
||||
}
|
||||
|
||||
public void setDate(LocalDate date) {
|
||||
this.date = date;
|
||||
}
|
||||
|
||||
public String getBaseCurrencyLetterCode() {
|
||||
return baseCurrencyLetterCode;
|
||||
}
|
||||
|
||||
public void setBaseCurrencyLetterCode(String baseCurrencyLetterCode) {
|
||||
this.baseCurrencyLetterCode = baseCurrencyLetterCode;
|
||||
}
|
||||
|
||||
public String getAssociatedCurrencyLetterCode() {
|
||||
return associatedCurrencyLetterCode;
|
||||
}
|
||||
|
||||
public void setAssociatedCurrencyLetterCode(String associatedCurrencyLetterCode) {
|
||||
this.associatedCurrencyLetterCode = associatedCurrencyLetterCode;
|
||||
}
|
||||
|
||||
public BigDecimal getRate() {
|
||||
return rate;
|
||||
}
|
||||
|
||||
public void setRate(BigDecimal rate) {
|
||||
this.rate = rate;
|
||||
}
|
||||
|
||||
public Integer getPriceAccuracy() {
|
||||
return priceAccuracy;
|
||||
}
|
||||
|
||||
public void setPriceAccuracy(Integer priceAccuracy) {
|
||||
this.priceAccuracy = priceAccuracy;
|
||||
}
|
||||
|
||||
public Integer getBaseCurrencyUnit() {
|
||||
return baseCurrencyUnit;
|
||||
}
|
||||
|
||||
public void setBaseCurrencyUnit(Integer baseCurrencyUnit) {
|
||||
this.baseCurrencyUnit = baseCurrencyUnit;
|
||||
}
|
||||
|
||||
public BigDecimal getPrice() {
|
||||
return price;
|
||||
}
|
||||
|
||||
public void setPrice(BigDecimal price) {
|
||||
this.price = price;
|
||||
}
|
||||
|
||||
public LocalDateTime getUpdateDateTime() {
|
||||
return updateDateTime;
|
||||
}
|
||||
|
||||
public void setUpdateDateTime(LocalDateTime updateDateTime) {
|
||||
this.updateDateTime = updateDateTime;
|
||||
}
|
||||
|
||||
public LocalDateTime getSourceDateTime() {
|
||||
return sourceDateTime;
|
||||
}
|
||||
|
||||
public void setSourceDateTime(LocalDateTime sourceDateTime) {
|
||||
this.sourceDateTime = sourceDateTime;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,68 @@
|
|||
package ru.spcex.clearing.platform.messaging.domain.cud.securitites;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
|
||||
public class SCrossRateNewRequest {
|
||||
@JsonProperty
|
||||
private String type;
|
||||
@JsonProperty
|
||||
private LocalDate date;
|
||||
@JsonProperty
|
||||
private String currency;
|
||||
@JsonProperty
|
||||
private BigDecimal unitRate;
|
||||
@JsonProperty
|
||||
private BigDecimal faceValue;
|
||||
@JsonProperty
|
||||
private BigDecimal rate;
|
||||
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(String type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public LocalDate getDate() {
|
||||
return date;
|
||||
}
|
||||
|
||||
public void setDate(LocalDate date) {
|
||||
this.date = date;
|
||||
}
|
||||
|
||||
public String getCurrency() {
|
||||
return currency;
|
||||
}
|
||||
|
||||
public void setCurrency(String currency) {
|
||||
this.currency = currency;
|
||||
}
|
||||
|
||||
public BigDecimal getUnitRate() {
|
||||
return unitRate;
|
||||
}
|
||||
|
||||
public void setUnitRate(BigDecimal unitRate) {
|
||||
this.unitRate = unitRate;
|
||||
}
|
||||
|
||||
public BigDecimal getFaceValue() {
|
||||
return faceValue;
|
||||
}
|
||||
|
||||
public void setFaceValue(BigDecimal faceValue) {
|
||||
this.faceValue = faceValue;
|
||||
}
|
||||
|
||||
public BigDecimal getRate() {
|
||||
return rate;
|
||||
}
|
||||
|
||||
public void setRate(BigDecimal rate) {
|
||||
this.rate = rate;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,109 +0,0 @@
|
|||
package ru.spcex.clearing.platform.messaging.domain.cud.securitites;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
public class SCrossRateRequest {
|
||||
@JsonProperty
|
||||
private String type;
|
||||
@JsonProperty
|
||||
private LocalDate date;
|
||||
@JsonProperty
|
||||
private String baseCurrencyLetterCode;
|
||||
@JsonProperty
|
||||
private String associatedCurrencyLetterCode;
|
||||
@JsonProperty
|
||||
private BigDecimal rate;
|
||||
@JsonProperty
|
||||
private Integer priceAccuracy;
|
||||
@JsonProperty
|
||||
private Integer baseCurrencyUnit;
|
||||
@JsonProperty
|
||||
private BigDecimal price;
|
||||
@JsonProperty
|
||||
private LocalDateTime updateDateTime;
|
||||
@JsonProperty
|
||||
private LocalDateTime sourceDateTime;
|
||||
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(String type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public LocalDate getDate() {
|
||||
return date;
|
||||
}
|
||||
|
||||
public void setDate(LocalDate date) {
|
||||
this.date = date;
|
||||
}
|
||||
|
||||
public String getBaseCurrencyLetterCode() {
|
||||
return baseCurrencyLetterCode;
|
||||
}
|
||||
|
||||
public void setBaseCurrencyLetterCode(String baseCurrencyLetterCode) {
|
||||
this.baseCurrencyLetterCode = baseCurrencyLetterCode;
|
||||
}
|
||||
|
||||
public String getAssociatedCurrencyLetterCode() {
|
||||
return associatedCurrencyLetterCode;
|
||||
}
|
||||
|
||||
public void setAssociatedCurrencyLetterCode(String associatedCurrencyLetterCode) {
|
||||
this.associatedCurrencyLetterCode = associatedCurrencyLetterCode;
|
||||
}
|
||||
|
||||
public BigDecimal getRate() {
|
||||
return rate;
|
||||
}
|
||||
|
||||
public void setRate(BigDecimal rate) {
|
||||
this.rate = rate;
|
||||
}
|
||||
|
||||
public Integer getPriceAccuracy() {
|
||||
return priceAccuracy;
|
||||
}
|
||||
|
||||
public void setPriceAccuracy(Integer priceAccuracy) {
|
||||
this.priceAccuracy = priceAccuracy;
|
||||
}
|
||||
|
||||
public Integer getBaseCurrencyUnit() {
|
||||
return baseCurrencyUnit;
|
||||
}
|
||||
|
||||
public void setBaseCurrencyUnit(Integer baseCurrencyUnit) {
|
||||
this.baseCurrencyUnit = baseCurrencyUnit;
|
||||
}
|
||||
|
||||
public BigDecimal getPrice() {
|
||||
return price;
|
||||
}
|
||||
|
||||
public void setPrice(BigDecimal price) {
|
||||
this.price = price;
|
||||
}
|
||||
|
||||
public LocalDateTime getUpdateDateTime() {
|
||||
return updateDateTime;
|
||||
}
|
||||
|
||||
public void setUpdateDateTime(LocalDateTime updateDateTime) {
|
||||
this.updateDateTime = updateDateTime;
|
||||
}
|
||||
|
||||
public LocalDateTime getSourceDateTime() {
|
||||
return sourceDateTime;
|
||||
}
|
||||
|
||||
public void setSourceDateTime(LocalDateTime sourceDateTime) {
|
||||
this.sourceDateTime = sourceDateTime;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
package ru.spcex.clearing.platform.messaging.domain.cud.securitites;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
public class SCrossRateUpdateRequest {
|
||||
@JsonProperty
|
||||
private Long id;
|
||||
@JsonProperty
|
||||
private BigDecimal unitRate;
|
||||
@JsonProperty
|
||||
private BigDecimal faceValue;
|
||||
@JsonProperty
|
||||
private BigDecimal rate;
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Long id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public BigDecimal getUnitRate() {
|
||||
return unitRate;
|
||||
}
|
||||
|
||||
public void setUnitRate(BigDecimal unitRate) {
|
||||
this.unitRate = unitRate;
|
||||
}
|
||||
|
||||
public BigDecimal getFaceValue() {
|
||||
return faceValue;
|
||||
}
|
||||
|
||||
public void setFaceValue(BigDecimal faceValue) {
|
||||
this.faceValue = faceValue;
|
||||
}
|
||||
|
||||
public BigDecimal getRate() {
|
||||
return rate;
|
||||
}
|
||||
|
||||
public void setRate(BigDecimal rate) {
|
||||
this.rate = rate;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
package ru.spcex.clearing.platform.messaging.domain.cud.security;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.util.List;
|
||||
import ru.spcex.clearing.platform.messaging.domain.json.deserialize.LocalDateDeserializer;
|
||||
import ru.spcex.clearing.platform.messaging.domain.json.serialize.LocalDateSerializer;
|
||||
|
||||
public class RatesGatewayRequest {
|
||||
|
||||
@JsonProperty
|
||||
private List<RateElem> rateElems;
|
||||
|
||||
public List<RateElem> getRateElems() {
|
||||
return rateElems;
|
||||
}
|
||||
|
||||
public void setRateElems(List<RateElem> rateElems) {
|
||||
this.rateElems = rateElems;
|
||||
}
|
||||
|
||||
public static class RateElem {
|
||||
@JsonSerialize(using = LocalDateSerializer.class)
|
||||
@JsonDeserialize(using = LocalDateDeserializer.class)
|
||||
@JsonProperty
|
||||
private LocalDate date;
|
||||
@JsonProperty
|
||||
private String baseCurrencyLetterCode;
|
||||
@JsonProperty
|
||||
private BigDecimal price;
|
||||
|
||||
public LocalDate getDate() {
|
||||
return date;
|
||||
}
|
||||
|
||||
public void setDate(LocalDate date) {
|
||||
this.date = date;
|
||||
}
|
||||
|
||||
public String getBaseCurrencyLetterCode() {
|
||||
return baseCurrencyLetterCode;
|
||||
}
|
||||
|
||||
public void setBaseCurrencyLetterCode(String baseCurrencyLetterCode) {
|
||||
this.baseCurrencyLetterCode = baseCurrencyLetterCode;
|
||||
}
|
||||
|
||||
public BigDecimal getPrice() {
|
||||
return price;
|
||||
}
|
||||
|
||||
public void setPrice(BigDecimal price) {
|
||||
this.price = price;
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue