diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/facade/RatesFacade.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/facade/RatesFacade.java index 963d50754..6b0dc62f5 100644 --- a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/facade/RatesFacade.java +++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/facade/RatesFacade.java @@ -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(); diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/facade/SCrossRateFacade.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/facade/SCrossRateFacade.java index 27a691069..f528b32ad 100644 --- a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/facade/SCrossRateFacade.java +++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/facade/SCrossRateFacade.java @@ -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 securitySelector; private final ImdgProvider imdgProvider; private final ImdgId idGenerator; private final Imdg sCrossRateImdg; - public SCrossRateFacade(SecuritySelector 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); + } } diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/listeners/RatesMessageListener.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/listeners/RatesMessageListener.java index 69e9b2bb6..504f8fbd7 100644 --- a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/listeners/RatesMessageListener.java +++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/listeners/RatesMessageListener.java @@ -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 ratesImdg; private final Function ratesNewValidator; private final Function ratesUpdateValidator; private final UserRoleVerification userRoleVerification; private final IMessageResolver messageResolver; + private final Imdg currencyCodeDictionaryImdg; public RatesMessageListener(Consumer kafkaQueue, Producer 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 payload = ratesGatewayRequest.getRequestPayload(); + + for (RatesGatewayRequest.RateElem elem : payload.getRateElems()) { + ImdgPredicateBuilder predicateBuilder = ratesImdg.predicateBuilder(); + Collection 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 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 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) + ); + } } diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/listeners/SCrossRatesMessageListener.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/listeners/SCrossRatesMessageListener.java new file mode 100644 index 000000000..efa31c2a7 --- /dev/null +++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/listeners/SCrossRatesMessageListener.java @@ -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 sCrossRateImdg; + private final SCrossRateFacade sCrossRateFacade; + + public SCrossRatesMessageListener(Consumer kafkaQueue, + Producer 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 sCrossRatesReq) { + SCrossRateGatewayRequest payload = sCrossRatesReq.getRequestPayload(); + + for (SCrossRateGatewayRequest.SCrossRateElem elem : payload.getCrossRateElems()) { + ImdgPredicateBuilder predicateBuilder = sCrossRateImdg.predicateBuilder(); + Collection 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 findSCrossRate() { + return req -> { + ImdgPredicateBuilder predicateBuilder = sCrossRateImdg.predicateBuilder(); + Collection 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; + }; + } +} diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/Consts.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/Consts.java index 93ae19b35..f86a6a24b 100644 --- a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/Consts.java +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/Consts.java @@ -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"; diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/securitites/SCrossRateGatewayRequest.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/securitites/SCrossRateGatewayRequest.java new file mode 100644 index 000000000..eeeea3e41 --- /dev/null +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/securitites/SCrossRateGatewayRequest.java @@ -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 crossRateElems; + + public List getCrossRateElems() { + return crossRateElems; + } + + public void setCrossRateElems(List 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; + } + } +} diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/securitites/SCrossRateNewRequest.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/securitites/SCrossRateNewRequest.java new file mode 100644 index 000000000..4b81c7eb7 --- /dev/null +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/securitites/SCrossRateNewRequest.java @@ -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; + } +} diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/securitites/SCrossRateRequest.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/securitites/SCrossRateRequest.java deleted file mode 100644 index aa8a3e62c..000000000 --- a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/securitites/SCrossRateRequest.java +++ /dev/null @@ -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; - } -} diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/securitites/SCrossRateUpdateRequest.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/securitites/SCrossRateUpdateRequest.java new file mode 100644 index 000000000..f48667b2c --- /dev/null +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/securitites/SCrossRateUpdateRequest.java @@ -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; + } +} diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/security/RatesGatewayRequest.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/security/RatesGatewayRequest.java new file mode 100644 index 000000000..985d0a2bc --- /dev/null +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/security/RatesGatewayRequest.java @@ -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 rateElems; + + public List getRateElems() { + return rateElems; + } + + public void setRateElems(List 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; + } + } +}