fix overnightType creating OrderCurrency

This commit is contained in:
etreschenkov 2026-04-24 13:15:11 +03:00
parent b702758d6d
commit 37c0112525
6 changed files with 43 additions and 31 deletions

View file

@ -15,9 +15,6 @@ public class OvernightTypeChanged implements IValidationRule<ImdgValidationConte
public Optional<EnumMessage> validate(ImdgValidationContext<OrderCurrencyUpdateRequest> ctx) {
OrderCurrencyUpdateRequest validatedObject = ctx.getValidatedObject();
OrderCurrency oc = ctx.getStoredObject(OrderCurrencyValidationStored.OrderCurrency);
if (oc.getOvernightType() == null) {
return of(DefaultManagementErrors.GeneralError); //не понятно че с ним делать...
}
if (oc.getOvernightType().equalsIgnoreCase(validatedObject.getOvernightType())) {
return of(DefaultManagementErrors.GeneralError); //todo нормальную ошибку
}

View file

@ -3,8 +3,9 @@ package ru.spcex.clearing.dflt.management.model;
import ru.clearing.classes.statics.data.misc.Market;
import ru.clearing.classes.statics.data.registry.Registry;
import ru.clearing.classes.statics.data.security.RiskParameter;
import ru.spcex.platform.enumeration.OvernightType;
public class SwapContext {
public class OrderCurrencyContext {
private final Registry registry;
private final String orderCategory;
private final Market market;
@ -12,8 +13,9 @@ public class SwapContext {
private final CounterpartyInfo categoryP;
private final CounterpartyInfo clcc;
private final CounterpartyInfo rgcm;
private final OvernightType overnightType;
private SwapContext(Builder builder) {
private OrderCurrencyContext(Builder builder) {
this.registry = builder.registry;
this.orderCategory = builder.orderCategory;
this.market = builder.market;
@ -21,6 +23,7 @@ public class SwapContext {
this.categoryP = builder.categoryP;
this.clcc = builder.clcc;
this.rgcm = builder.rgcm;
this.overnightType = builder.overnightType;
}
public Registry getRegistry() {
@ -51,6 +54,10 @@ public class SwapContext {
return rgcm;
}
public OvernightType getOvernightType() {
return overnightType;
}
public static Builder builder() {
return new Builder();
}
@ -63,6 +70,7 @@ public class SwapContext {
private CounterpartyInfo categoryP;
private CounterpartyInfo clcc;
private CounterpartyInfo rgcm;
private OvernightType overnightType;
public Builder registry(Registry registry) {
this.registry = registry;
@ -99,8 +107,13 @@ public class SwapContext {
return this;
}
public SwapContext build() {
return new SwapContext(this);
public Builder overnightType(OvernightType overnightType) {
this.overnightType = overnightType;
return this;
}
public OrderCurrencyContext build() {
return new OrderCurrencyContext(this);
}
}
}

View file

@ -12,7 +12,7 @@ import ru.clearing.classes.statics.data.registry.Registry;
import ru.clearing.classes.statics.data.security.Rates;
import ru.clearing.platform.dictionary.CurrencyPairDictionary;
import ru.spcex.clearing.dflt.management.model.CalculationResult;
import ru.spcex.clearing.dflt.management.model.SwapContext;
import ru.spcex.clearing.dflt.management.model.OrderCurrencyContext;
import ru.spcex.platform.enumeration.SettleCode;
@Service
@ -29,7 +29,7 @@ public class OrderCalculationService {
}
public void calcAndEnrichSwap(OrderCurrency order,
SwapContext context) {
OrderCurrencyContext context) {
Registry registry = context.getRegistry();
Listing listing = imdgQueryService.findListing(registry, context.getMarket().getCode(), order.getSettleCode());
@ -49,7 +49,7 @@ public class OrderCalculationService {
}
public void calcAndEnrichSpot(OrderCurrency order,
SwapContext context) {
OrderCurrencyContext context) {
Registry registry = context.getRegistry();
Listing listing = imdgQueryService.findListing(registry, context.getMarket().getCode(), order.getSettleCode());

View file

@ -6,9 +6,8 @@ import ru.clearing.classes.statics.data.misc.Listing;
import ru.clearing.classes.statics.data.misc.Market;
import ru.clearing.classes.statics.data.misc.OrderCurrency;
import ru.clearing.classes.statics.data.registry.Registry;
import ru.clearing.classes.statics.data.security.RiskParameter;
import ru.spcex.clearing.dflt.management.model.CounterpartyInfo;
import ru.spcex.clearing.dflt.management.model.SwapContext;
import ru.spcex.clearing.dflt.management.model.OrderCurrencyContext;
import ru.spcex.platform.enumeration.SettleCode;
import static ru.spcex.platform.enumeration.SettleCode.T0;
import ru.spcex.platform.enumeration.Side;
@ -21,7 +20,7 @@ public class OrderTemplateBuilder {
this.imdgQueryService = imdgQueryService;
}
public OrderCurrency buildPrimaryTransfer(SwapContext context, SettleCode settleCode) {
public OrderCurrency buildPrimaryTransfer(OrderCurrencyContext context, SettleCode settleCode) {
OrderCurrency orderCurrency;
switch (context.getOrderCategory()) {
case "PL" -> orderCurrency = buildPrimaryTransferPl(context);
@ -33,7 +32,7 @@ public class OrderTemplateBuilder {
return orderCurrency;
}
public OrderCurrency buildCounterTransfer(SwapContext context, SettleCode settleCode) {
public OrderCurrency buildCounterTransfer(OrderCurrencyContext context, SettleCode settleCode) {
OrderCurrency orderCurrency;
switch (context.getOrderCategory()) {
case "PL" -> orderCurrency = buildCounterTransferPl(context);
@ -46,7 +45,7 @@ public class OrderTemplateBuilder {
return orderCurrency;
}
public OrderCurrency buildPrimaryBalancing(SwapContext context, SettleCode settleCode) {
public OrderCurrency buildPrimaryBalancing(OrderCurrencyContext context, SettleCode settleCode) {
OrderCurrency orderCurrency;
switch (context.getOrderCategory()) {
case "PL" -> orderCurrency = buildPrimaryBalancingPl(context);
@ -59,7 +58,7 @@ public class OrderTemplateBuilder {
return orderCurrency;
}
public OrderCurrency buildCounterBalancing(SwapContext context, SettleCode settleCode) {
public OrderCurrency buildCounterBalancing(OrderCurrencyContext context, SettleCode settleCode) {
OrderCurrency orderCurrency;
switch (context.getOrderCategory()) {
case "PL" -> orderCurrency = buildCounterBalancingPl(context);
@ -72,7 +71,7 @@ public class OrderTemplateBuilder {
return orderCurrency;
}
private OrderCurrency buildPrimaryTransferUk(SwapContext context) {
private OrderCurrency buildPrimaryTransferUk(OrderCurrencyContext context) {
CounterpartyInfo clcc = context.getClcc();
Registry registry = context.getRegistry();
@ -87,7 +86,7 @@ public class OrderTemplateBuilder {
return order;
}
private OrderCurrency buildCounterTransferUk(SwapContext context) {
private OrderCurrency buildCounterTransferUk(OrderCurrencyContext context) {
CounterpartyInfo clcc = context.getClcc();
Registry registry = context.getRegistry();
@ -102,7 +101,7 @@ public class OrderTemplateBuilder {
return order;
}
private OrderCurrency buildPrimaryBalancingUk(SwapContext context) {
private OrderCurrency buildPrimaryBalancingUk(OrderCurrencyContext context) {
CounterpartyInfo categoryP = context.getCategoryP();
CounterpartyInfo clcc = context.getClcc();
@ -117,7 +116,7 @@ public class OrderTemplateBuilder {
return order;
}
private OrderCurrency buildCounterBalancingUk(SwapContext context) {
private OrderCurrency buildCounterBalancingUk(OrderCurrencyContext context) {
CounterpartyInfo categoryP = context.getCategoryP();
CounterpartyInfo clcc = context.getClcc();
@ -132,7 +131,7 @@ public class OrderTemplateBuilder {
return order;
}
private OrderCurrency buildPrimaryTransferPl(SwapContext context) {
private OrderCurrency buildPrimaryTransferPl(OrderCurrencyContext context) {
CounterpartyInfo clcc = context.getClcc();
Registry registry = context.getRegistry();
@ -147,7 +146,7 @@ public class OrderTemplateBuilder {
return order;
}
private OrderCurrency buildCounterTransferPl(SwapContext context) {
private OrderCurrency buildCounterTransferPl(OrderCurrencyContext context) {
CounterpartyInfo clcc = context.getClcc();
Registry registry = context.getRegistry();
@ -162,7 +161,7 @@ public class OrderTemplateBuilder {
return order;
}
private OrderCurrency buildPrimaryBalancingPl(SwapContext context) {
private OrderCurrency buildPrimaryBalancingPl(OrderCurrencyContext context) {
CounterpartyInfo rgcm = context.getRgcm();
CounterpartyInfo clcc = context.getClcc();
@ -177,7 +176,7 @@ public class OrderTemplateBuilder {
return order;
}
private OrderCurrency buildCounterBalancingPl(SwapContext context) {
private OrderCurrency buildCounterBalancingPl(OrderCurrencyContext context) {
CounterpartyInfo clcc = context.getClcc();
CounterpartyInfo rgcm = context.getRgcm();
@ -193,16 +192,15 @@ public class OrderTemplateBuilder {
}
public void enrichOrder(OrderCurrency order,
SwapContext context,
OrderCurrencyContext context,
Side side,
String comment,
SettleCode settleCode) {
Registry registry = context.getRegistry();
Market market = context.getMarket();
RiskParameter riskParameter = context.getRiskParameter();
Listing listing = imdgQueryService.findListing(registry, market.getCode(), settleCode.getKey());
order.setOvernightType("SWAP");
order.setOvernightType(context.getOvernightType().getKey());
order.setMarket(market.getCode());
order.setListingId(listing.getId());
order.setSecuritySymbol(listing.getSymbolCode());

View file

@ -8,9 +8,10 @@ import ru.clearing.classes.statics.data.misc.OrderCurrency;
import ru.clearing.classes.statics.data.registry.Registry;
import ru.clearing.classes.statics.data.security.RiskParameter;
import ru.spcex.clearing.dflt.management.model.CounterpartyInfo;
import ru.spcex.clearing.dflt.management.model.SwapContext;
import ru.spcex.clearing.dflt.management.model.OrderCurrencyContext;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.platform.enumeration.CompanyRole;
import ru.spcex.platform.enumeration.OvernightType;
import ru.spcex.platform.enumeration.RegistryStatus;
import ru.spcex.platform.enumeration.SettleCode;
import ru.spcex.platform.imdg.api.Imdg;
@ -46,7 +47,7 @@ public class SpotOvernightOrderService {
CounterpartyInfo clcc = imdgQueryService.getCompanyByRole(CompanyRole.CLCC);
CounterpartyInfo rgcm = imdgQueryService.getCompanyByRole(CompanyRole.RGCM);
SwapContext context = SwapContext.builder()
OrderCurrencyContext context = OrderCurrencyContext.builder()
.registry(registry)
.orderCategory(orderCategory)
.market(market)
@ -54,6 +55,7 @@ public class SpotOvernightOrderService {
.categoryP(categoryP)
.clcc(clcc)
.rgcm(rgcm)
.overnightType(OvernightType.SPOT)
.build();
OrderCurrency primaryTransferT0 = templateBuilder.buildPrimaryTransfer(context, SettleCode.T0);

View file

@ -8,9 +8,10 @@ import ru.clearing.classes.statics.data.misc.OrderCurrency;
import ru.clearing.classes.statics.data.registry.Registry;
import ru.clearing.classes.statics.data.security.RiskParameter;
import ru.spcex.clearing.dflt.management.model.CounterpartyInfo;
import ru.spcex.clearing.dflt.management.model.SwapContext;
import ru.spcex.clearing.dflt.management.model.OrderCurrencyContext;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.platform.enumeration.CompanyRole;
import ru.spcex.platform.enumeration.OvernightType;
import ru.spcex.platform.enumeration.RegistryStatus;
import ru.spcex.platform.enumeration.SettleCode;
import ru.spcex.platform.imdg.api.Imdg;
@ -46,7 +47,7 @@ public class SwapOvernightOrderService {
CounterpartyInfo clcc = imdgQueryService.getCompanyByRole(CompanyRole.CLCC);
CounterpartyInfo rgcm = imdgQueryService.getCompanyByRole(CompanyRole.RGCM);
SwapContext context = SwapContext.builder()
OrderCurrencyContext context = OrderCurrencyContext.builder()
.registry(registry)
.orderCategory(orderCategory)
.market(market)
@ -54,6 +55,7 @@ public class SwapOvernightOrderService {
.categoryP(categoryP)
.clcc(clcc)
.rgcm(rgcm)
.overnightType(OvernightType.SWAP)
.build();
OrderCurrency primaryTransfer = templateBuilder.buildPrimaryTransfer(context, SettleCode.T1);