etreschenkov 2026-05-14 15:55:22 +03:00
parent 2781b29664
commit a9e4967a25
2 changed files with 12 additions and 6 deletions

View file

@ -27,9 +27,11 @@ import ru.clearing.classes.statics.data.misc.SCrossRate;
import ru.clearing.classes.statics.data.misc.SOrders; import ru.clearing.classes.statics.data.misc.SOrders;
import ru.clearing.classes.statics.data.registry.Registry; import ru.clearing.classes.statics.data.registry.Registry;
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry; import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
import ru.clearing.classes.statics.data.security.Rates;
import ru.clearing.platform.dictionary.CurrencyPairDictionary; import ru.clearing.platform.dictionary.CurrencyPairDictionary;
import ru.spcex.clearing.dflt.management.component.validation.OrderCurrencyValidationStored; import ru.spcex.clearing.dflt.management.component.validation.OrderCurrencyValidationStored;
import ru.spcex.clearing.dflt.management.service.ImdgQueryService; import ru.spcex.clearing.dflt.management.service.ImdgQueryService;
import ru.spcex.clearing.dflt.management.service.TransferDateService;
import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.platform.messaging.domain.BaseRequest; import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
import ru.spcex.clearing.platform.messaging.domain.Consts; import ru.spcex.clearing.platform.messaging.domain.Consts;
@ -69,6 +71,7 @@ public class OrderCurrencyListener extends QueueConsumer implements Initializing
private final Function<CommonDeleteRequest, IValidator> orderCompanyDeleteValidator; private final Function<CommonDeleteRequest, IValidator> orderCompanyDeleteValidator;
private final ImdgQueryService imdgQueryService; private final ImdgQueryService imdgQueryService;
private final IMessageResolver msgResolver; private final IMessageResolver msgResolver;
private final TransferDateService transferDateService;
@Autowired @Autowired
public OrderCurrencyListener(Consumer<String, Object> kafkaQueue, public OrderCurrencyListener(Consumer<String, Object> kafkaQueue,
@ -86,7 +89,8 @@ public class OrderCurrencyListener extends QueueConsumer implements Initializing
Function<OrderCurrencyUpdateRequest, IValidator> orderCurrencyUpdateStatusValidator, Function<OrderCurrencyUpdateRequest, IValidator> orderCurrencyUpdateStatusValidator,
Function<CommonDeleteRequest, IValidator> orderCompanyDeleteValidator, Function<CommonDeleteRequest, IValidator> orderCompanyDeleteValidator,
ImdgQueryService imdgQueryService, ImdgQueryService imdgQueryService,
IMessageResolver msgResolver) { IMessageResolver msgResolver,
TransferDateService transferDateService) {
super(kafkaQueue, kafkaProducer); super(kafkaQueue, kafkaProducer);
this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
this.overnightSettingsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_OvernightSettings, OvernightSettings.class); this.overnightSettingsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_OvernightSettings, OvernightSettings.class);
@ -100,6 +104,7 @@ public class OrderCurrencyListener extends QueueConsumer implements Initializing
this.imdgQueryService = imdgQueryService; this.imdgQueryService = imdgQueryService;
this.msgResolver = msgResolver; this.msgResolver = msgResolver;
this.orderCurrencyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_OrderCurrency, OrderCurrency.class); this.orderCurrencyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_OrderCurrency, OrderCurrency.class);
this.transferDateService = transferDateService;
} }
@Override @Override
@ -273,6 +278,10 @@ public class OrderCurrencyListener extends QueueConsumer implements Initializing
Market market = imdgQueryService.getSwapMarket(); Market market = imdgQueryService.getSwapMarket();
Listing listing = imdgQueryService.findListing(rgs, market.getCode(), SettleCode.T1.getKey()); Listing listing = imdgQueryService.findListing(rgs, market.getCode(), SettleCode.T1.getKey());
CurrencyPairDictionary pair = imdgQueryService.getCurrencyPairDictionaryBySecurityId(listing.getSecurityId());
BigDecimal n = transferDateService.numberOfDaysOfTransfer();
LocalDate searchingValueDate = LocalDate.now().plusDays(n.longValue());
Rates rates = imdgQueryService.getRate(pair.getBaseCurrency(), searchingValueDate);
copyCommonFields(order1, swap); copyCommonFields(order1, swap);
swap.setSecurityId(listing.getSecurityId()); swap.setSecurityId(listing.getSecurityId());
@ -281,7 +290,7 @@ public class OrderCurrencyListener extends QueueConsumer implements Initializing
swap.setOvernightType(OvernightType.SWAP.getKey()); swap.setOvernightType(OvernightType.SWAP.getKey());
swap.setMarket(market.getCode()); swap.setMarket(market.getCode());
swap.setPrice(safeBD(spotT1.getPrice()).subtract(safeBD(spotT0.getPrice()))); swap.setPrice(safeBD(spotT1.getPrice()).subtract(safeBD(spotT0.getPrice())));
swap.setBasePrice(safeBD(spotT1.getBasePrice())); swap.setBasePrice(safeBD(rates.getValue()));
swap.setCreated(Instant.now()); swap.setCreated(Instant.now());
return swap; return swap;
} }

View file

@ -54,10 +54,7 @@ public class OrderCalculationService {
BigDecimal quantityLot = result.sum3().abs(); BigDecimal quantityLot = result.sum3().abs();
BigDecimal price; BigDecimal price;
long nextWorkDayDelta = n.longValue(); long nextWorkDayDelta = n.longValue();
LocalDate searchingValueDate = LocalDate.now(); LocalDate searchingValueDate = LocalDate.now().plusDays(nextWorkDayDelta);
if (SettleCode.T1.equals(settleCode)) {
searchingValueDate = searchingValueDate.plusDays(nextWorkDayDelta);
}
int precision = listing.getPrecision().intValue(); int precision = listing.getPrecision().intValue();
Rates rates = imdgQueryService.getRate(pair.getBaseCurrency(), searchingValueDate); Rates rates = imdgQueryService.getRate(pair.getBaseCurrency(), searchingValueDate);
price = swapPriceCalc(rates, s, n, precision); price = swapPriceCalc(rates, s, n, precision);