Merge remote-tracking branch 'origin/dev' into dev

This commit is contained in:
ialbert 2026-04-24 14:43:21 +03:00
commit a6e6f1e5c8
28 changed files with 136 additions and 166 deletions

View file

@ -27,7 +27,7 @@ public class RatesNewAction implements IAction<RatesNewRequest> {
private Long currencyId;
@ApiModelProperty(value = "Статус.", example = "1234")
@JsonProperty
private String status;
private String workflowStatus;
@Override
public RatesNewRequest toRequest() {
@ -35,7 +35,7 @@ public class RatesNewAction implements IAction<RatesNewRequest> {
request.setValue(this.value);
request.setValueDate(this.valueDate);
request.setCurrencyId(this.currencyId);
request.setStatus(this.status);
request.setWorkflowStatus(this.workflowStatus);
return request;
}
@ -69,11 +69,11 @@ public class RatesNewAction implements IAction<RatesNewRequest> {
this.currencyId = currencyPairId;
}
public String getStatus() {
return status;
public String getWorkflowStatus() {
return workflowStatus;
}
public void setStatus(String status) {
this.status = status;
public void setWorkflowStatus(String workflowStatus) {
this.workflowStatus = workflowStatus;
}
}

View file

@ -17,14 +17,14 @@ public class RatesUpdateAction implements IAction<RatesUpdateRequest> {
private BigDecimal value;
@ApiModelProperty(value = "Статус.", example = "1234")
@JsonProperty
private String status;
private String workflowStatus;
@Override
public RatesUpdateRequest toRequest() {
RatesUpdateRequest request = new RatesUpdateRequest();
request.setId(this.id);
request.setValue(this.value);
request.setStatus(this.status);
request.setWorkflowStatus(this.workflowStatus);
return request;
}
@ -50,11 +50,11 @@ public class RatesUpdateAction implements IAction<RatesUpdateRequest> {
this.value = value;
}
public String getStatus() {
return status;
public String getWorkflowStatus() {
return workflowStatus;
}
public void setStatus(String status) {
this.status = status;
public void setWorkflowStatus(String workflowStatus) {
this.workflowStatus = workflowStatus;
}
}

View file

@ -23,7 +23,7 @@ public class RiskParameterNewAction implements IAction<RiskParameterNewRequest>
private Long currencyPairId;
@ApiModelProperty(value = "Статус.", example = "1234")
@JsonProperty
private String status;
private String workflowStatus;
@Override
public RiskParameterNewRequest toRequest() {
@ -32,7 +32,7 @@ public class RiskParameterNewAction implements IAction<RiskParameterNewRequest>
request.setQuoteValue(this.quoteValue);
request.setSettlementType(this.settlementType);
request.setCurrencyPairId(this.currencyPairId);
request.setStatus(this.status);
request.setWorkflowStatus(this.workflowStatus);
return request;
}
@ -66,11 +66,11 @@ public class RiskParameterNewAction implements IAction<RiskParameterNewRequest>
this.currencyPairId = currencyPairId;
}
public String getStatus() {
return status;
public String getWorkflowStatus() {
return workflowStatus;
}
public void setStatus(String status) {
this.status = status;
public void setWorkflowStatus(String workflowStatus) {
this.workflowStatus = workflowStatus;
}
}

View file

@ -20,7 +20,7 @@ public class RiskParameterUpdateAction implements IAction<RiskParameterUpdateReq
private BigDecimal quoteValue;
@ApiModelProperty(value = "Статус.", example = "1234")
@JsonProperty
private String status;
private String workflowStatus;
@Override
public RiskParameterUpdateRequest toRequest() {
@ -28,7 +28,7 @@ public class RiskParameterUpdateAction implements IAction<RiskParameterUpdateReq
request.setId(this.id);
request.setValue(this.value);
request.setQuoteValue(this.quoteValue);
request.setStatus(this.status);
request.setWorkflowStatus(this.workflowStatus);
return request;
}
@ -54,11 +54,11 @@ public class RiskParameterUpdateAction implements IAction<RiskParameterUpdateReq
this.value = value;
}
public String getStatus() {
return status;
public String getWorkflowStatus() {
return workflowStatus;
}
public void setStatus(String status) {
this.status = status;
public void setWorkflowStatus(String workflowStatus) {
this.workflowStatus = workflowStatus;
}
}

View file

@ -15,12 +15,6 @@ public class SCrossRateUpdateAction implements IAction<SCrossRateUpdateRequest>
@JsonProperty
private Long id;
@JsonProperty
@JsonSerialize(using = LocalDateSerializer.class)
@JsonDeserialize(using = LocalDateDeserializer.class)
private LocalDate date;
@JsonProperty
private String currency;
@JsonProperty
private BigDecimal unitRate;
@JsonProperty
private BigDecimal faceValue;
@ -31,8 +25,6 @@ public class SCrossRateUpdateAction implements IAction<SCrossRateUpdateRequest>
public SCrossRateUpdateRequest toRequest() {
SCrossRateUpdateRequest sCrossRateUpdateRequest = new SCrossRateUpdateRequest();
sCrossRateUpdateRequest.setId(id);
sCrossRateUpdateRequest.setDate(date);
sCrossRateUpdateRequest.setCurrency(currency);
sCrossRateUpdateRequest.setUnitRate(unitRate);
sCrossRateUpdateRequest.setFaceValue(faceValue);
sCrossRateUpdateRequest.setRate(rate);

View file

@ -1,6 +1,6 @@
{
"version": "3.23.295.157",
"version": "3.23.295.158",
"enums": {
@ -10906,7 +10906,7 @@
"name": "Добавление центрального курса",
"class": "ru.spcex.clearing.platform.messaging.domain.cud.securitites.SCrossRateNewRequest",
"class": "ru.spcex.clearing.backendapi.controller.request.cud.securities.SCrossRateNewAction",
"fields": [
{"code": "date",
@ -10935,20 +10935,12 @@
"name": "Изменение центрального курса",
"class": "ru.spcex.clearing.platform.messaging.domain.cud.securitites.SCrossRateUpdateRequest",
"class": "ru.spcex.clearing.backendapi.controller.request.cud.securities.SCrossRateUpdateAction",
"fields": [
{"code": "id",
"type": 1,"name": "Идентификатор записи","shortname": "ID","link": "sCrossRate","linkCode": "id","required": true
}
,
{"code": "date",
"name": "Дата торгов","shortname": "Дата","type": 6,"required": true
}
,
{"code": "currency",
"name": "Наименование валюты","shortname": "Валюта","type": 2,"length": 50,"link": "currencyCode","linkCode": "code","required": true
}
,
{"code": "faceValue",
"name": "Единица базовой валюты","shortname": "Единица базовой валюты","type": 10
@ -11036,7 +11028,7 @@
"name": "Добавление параметров риска",
"confirmation": "value,quoteValue,settlementType,currencyPairId,status",
"confirmation": "value,quoteValue,settlementType,currencyPairId,workflowStatus",
"class": "ru.spcex.clearing.backendapi.controller.request.cud.securities.RiskParameterNewAction",
@ -11057,7 +11049,7 @@
"name": "Ставка сопряженной валюты","shortname": "Ставка сопряженной валюты","type": 10
}
,
{"code": "status",
{"code": "workflowStatus",
"name": "Статус","shortname": "Статус","type": 2,"length": 4,"link": "workflowStatus"
}
]
@ -11067,7 +11059,7 @@
"name": "Изменение параметров риска",
"confirmation": "value,quoteValue,status",
"confirmation": "value,quoteValue,workflowStatus",
"class": "ru.spcex.clearing.backendapi.controller.request.cud.securities.RiskParameterUpdateAction",
@ -11084,7 +11076,7 @@
"name": "Ставка сопряженной валюты","shortname": "Ставка сопряженной валюты","type": 10
}
,
{"code": "status",
{"code": "workflowStatus",
"name": "Статус","shortname": "Статус","type": 2,"length": 4,"link": "workflowStatus"
}
]
@ -11132,7 +11124,7 @@
"name": "Добавление расчетного курса",
"confirmation": "value,valueDate,currencyId,status",
"confirmation": "value,valueDate,currencyId,workflowStatus",
"class": "ru.spcex.clearing.backendapi.controller.request.cud.securities.RatesNewAction",
@ -11149,7 +11141,7 @@
"name": "Расчетный курс","shortname": "Расчетный курс","type": 10
}
,
{"code": "status",
{"code": "workflowStatus",
"name": "Статус","shortname": "Статус","type": 2,"length": 4,"link": "workflowStatus"
}
]
@ -11159,7 +11151,7 @@
"name": "Изменение расчетного курса",
"confirmation": "value,status",
"confirmation": "value,workflowStatus",
"class": "ru.spcex.clearing.backendapi.controller.request.cud.securities.RatesUpdateAction",
@ -11172,7 +11164,7 @@
"name": "Расчетный курс","shortname": "Расчетный курс","type": 10
}
,
{"code": "status",
{"code": "workflowStatus",
"name": "Статус","shortname": "Статус","type": 2,"length": 4,"link": "workflowStatus"
}
]

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--?xml-stylesheet type="text/xsl" href="\..\corp-reports\src\data\meta\meta.server.xslt"?-->
<meta version="3.23.295.157">
<meta version="3.23.295.158">
<!-- _xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" _xsi:noNamespaceSchemaLocation="file:///E:/d/projects/meta/from/meta.xsd" -->
<!--Здесь словари-->
<enums>
@ -2526,17 +2526,15 @@
<createdAt field="created" type="4" webtype="5" dbname="Дата-время создания записи" name="Время создания записи" shortname="Создано" searchable="true" sortable="true" ignore="true"/>
<updatedAt field="updated" type="4" webtype="5" dbname="Дата-время изменения записи" name="Время изменения записи" shortname="Изменено" searchable="true" sortable="true" ignore="true"/>
<actions>
<post name="Добавление центрального курса" class="ru.spcex.clearing.platform.messaging.domain.cud.securitites.SCrossRateNewRequest">
<post name="Добавление центрального курса" class="ru.spcex.clearing.backendapi.controller.request.cud.securities.SCrossRateNewAction">
<date name="Дата торгов" shortname="Дата" type="6" required="true"/>
<currency name="Наименование валюты" shortname="Валюта" type="2" length="50" link="currencyCode" linkCode="code" required="true"/>
<faceValue name="Единица базовой валюты" shortname="Единица базовой валюты" type="10"/>
<rate type="10" name="Курс валюты с учетом размера лота" shortname="Курс валюты"/>
<unitRate type="10" name="Курс за единицу иностранной валюты" shortname="Курс за единицу валюты" required="true"/>
</post>
<put name="Изменение центрального курса" class="ru.spcex.clearing.platform.messaging.domain.cud.securitites.SCrossRateUpdateRequest">
<put name="Изменение центрального курса" class="ru.spcex.clearing.backendapi.controller.request.cud.securities.SCrossRateUpdateAction">
<id type="1" name="Идентификатор записи" shortname="ID" link="sCrossRate" linkCode="id" required="true"/>
<date name="Дата торгов" shortname="Дата" type="6" required="true"/>
<currency name="Наименование валюты" shortname="Валюта" type="2" length="50" link="currencyCode" linkCode="code" required="true"/>
<faceValue name="Единица базовой валюты" shortname="Единица базовой валюты" type="10"/>
<rate type="10" name="Курс валюты с учетом размера лота" shortname="Курс валюты"/>
<unitRate type="10" name="Курс за единицу базовой валюты" shortname="Курс за единицу валюты" required="true"/>
@ -2557,18 +2555,18 @@
<quoteValue name="Ставка сопряженной валюты" shortname="Ставка сопряженной валюты" type="10"/>
<workflowStatus name="Статус" shortname="Статус" type="2" length="4" link="workflowStatus"/>
<actions>
<post name="Добавление параметров риска" confirmation="value,quoteValue,settlementType,currencyPairId,status" class="ru.spcex.clearing.backendapi.controller.request.cud.securities.RiskParameterNewAction">
<post name="Добавление параметров риска" confirmation="value,quoteValue,settlementType,currencyPairId,workflowStatus" class="ru.spcex.clearing.backendapi.controller.request.cud.securities.RiskParameterNewAction">
<currencyPairId name="Идентификатор валютной пары" shortname="Валютная пара" type="1" link="currencyPair" linkCode="code" linkKeyCode="id"/>
<settlementType name="Код расчёта" shortname="Код расчёта" type="12" link="currencySettlementType" linkCode="code"/>
<value name="Ставка" shortname="Ставка" type="10"/>
<quoteValue name="Ставка сопряженной валюты" shortname="Ставка сопряженной валюты" type="10"/>
<status name="Статус" shortname="Статус" type="2" length="4" link="workflowStatus"/>
<workflowStatus name="Статус" shortname="Статус" type="2" length="4" link="workflowStatus"/>
</post>
<put name="Изменение параметров риска" confirmation="value,quoteValue,status" class="ru.spcex.clearing.backendapi.controller.request.cud.securities.RiskParameterUpdateAction">
<put name="Изменение параметров риска" confirmation="value,quoteValue,workflowStatus" class="ru.spcex.clearing.backendapi.controller.request.cud.securities.RiskParameterUpdateAction">
<id type="1" name="Идентификатор записи" shortname="ID" link="riskParameter" linkCode="id" required="true"/>
<value name="Ставка" shortname="Ставка" type="10"/>
<quoteValue name="Ставка сопряженной валюты" shortname="Ставка сопряженной валюты" type="10"/>
<status name="Статус" shortname="Статус" type="2" length="4" link="workflowStatus"/>
<workflowStatus name="Статус" shortname="Статус" type="2" length="4" link="workflowStatus"/>
</put>
</actions>
</riskParameter>
@ -2580,16 +2578,16 @@
<value name="Расчетный курс" shortname="Расчетный курс" type="10"/>
<workflowStatus name="Статус" shortname="Статус" type="2" length="4" link="workflowStatus"/>
<actions>
<post name="Добавление расчетного курса" confirmation="value,valueDate,currencyId,status" class="ru.spcex.clearing.backendapi.controller.request.cud.securities.RatesNewAction">
<post name="Добавление расчетного курса" confirmation="value,valueDate,currencyId,workflowStatus" class="ru.spcex.clearing.backendapi.controller.request.cud.securities.RatesNewAction">
<currencyId name="Идентификатор валюты" shortname="Валюта" type="1" link="currencyCode" linkCode="code" linkKeyCode="id"/>
<valueDate name="Дата, на которую расчетный курс" shortname="Дата" type="6"/>
<value name="Расчетный курс" shortname="Расчетный курс" type="10"/>
<status name="Статус" shortname="Статус" type="2" length="4" link="workflowStatus"/>
<workflowStatus name="Статус" shortname="Статус" type="2" length="4" link="workflowStatus"/>
</post>
<put name="Изменение расчетного курса" confirmation="value,status" class="ru.spcex.clearing.backendapi.controller.request.cud.securities.RatesUpdateAction">
<put name="Изменение расчетного курса" confirmation="value,workflowStatus" class="ru.spcex.clearing.backendapi.controller.request.cud.securities.RatesUpdateAction">
<id type="1" name="Идентификатор записи" shortname="ID" link="rates" linkCode="id" required="true"/>
<value name="Расчетный курс" shortname="Расчетный курс" type="10"/>
<status name="Статус" shortname="Статус" type="2" length="4" link="workflowStatus"/>
<workflowStatus name="Статус" shortname="Статус" type="2" length="4" link="workflowStatus"/>
</put>
</actions>
</rates>

View file

@ -832,6 +832,8 @@ INSERT INTO SESSION_TYPE_DICTIONARY(ID, CODE, NAME) values (13, 'RSLT', 'Сес
INSERT INTO SESSION_TYPE_DICTIONARY(ID, CODE, NAME) values (14, 'PREC', 'Расчет дефолтов') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO SESSION_TYPE_DICTIONARY(ID, CODE, NAME) values (15, 'PRPC', 'Расчет дефолтов для ПЛ') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO MONEY_FLOW_SIDE_DICTIONARY(ID, CODE, NAME) values (1, 'BUY', 'Привлечь') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
INSERT INTO MONEY_FLOW_SIDE_DICTIONARY(ID, CODE, NAME) values (2, 'SELL', 'Разместить') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;

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

@ -4,14 +4,14 @@ import ru.spcex.platform.utils.enumeration.IErrorEnumId;
public enum DefaultManagementErrors implements IErrorEnumId {
//todo уточнить порядковый номер ошибки модуля
GeneralError(3000L), // Общая ошибка модуля
UserVerifyDenial(3001L), // 'Нет прав на проведение данной операции
RequiredFieldIsEmpty(3002L),
DictionaryNotFound(3003L),
RecordNotFound(3006L),
GeneralError(11000L),
UserVerifyDenial(11001L),
RequiredFieldIsEmpty(11002L),
DictionaryNotFound(11003L),
RecordNotFound(11006L),
RecordAlreadyPresent(11002L),
OnlyBalancingOrdersAllowed(11003L),
OnlyBalancingOrdersAllowedForChanging(11004L),
;
private final Long id;

View file

@ -140,13 +140,15 @@ public class TaskListener extends QueueConsumer implements InitializingBean {
.filter(Objects::nonNull)
.toList();
String comment = "После проведения первой части сделок переноса будет получен отрицательный баланс по RUB:\n"
+ String.join("\n", messages);
NotificationNewRequest newReq = new NotificationNewRequest();
newReq.setObjectType(ObjectType.rgst.getKey());
newReq.setPriority(Priority.HIGH.getKey());
newReq.setComment(comment);
kafkaSender.sendRequestToQueue(Consts.NOTIFICATION_NEW, newReq);
if (!messages.isEmpty()) {
String comment = "После проведения первой части сделок переноса будет получен отрицательный баланс по RUB:\n"
+ String.join("\n", messages);
NotificationNewRequest newReq = new NotificationNewRequest();
newReq.setObjectType(ObjectType.rgst.getKey());
newReq.setPriority(Priority.HIGH.getKey());
newReq.setComment(comment);
kafkaSender.sendRequestToQueue(Consts.NOTIFICATION_NEW, newReq);
}
log.info("SDOR export and send command to fix, request={}", req);
try {

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);

View file

@ -51,7 +51,7 @@ public class RatesValidationConfig {
IMDGDistributedNames.Map_Rates,
RiskParameter.class,
SecuritiesError.RequiredFieldIsEmpty,
SecuritiesError.RequiredFieldIsEmpty)
SecuritiesError.RecordNotFound)
);
};
}

View file

@ -50,7 +50,7 @@ public class SCrossRatesValidationConfig {
IMDGDistributedNames.Map_SCrossRate,
SCrossRate.class,
SecuritiesError.RequiredFieldIsEmpty,
SecuritiesError.RequiredFieldIsEmpty)
SecuritiesError.RecordNotFound)
);
};
}

View file

@ -8,6 +8,7 @@ public enum SecuritiesError implements IErrorEnumId {
RequiredFieldIsEmpty(1002L),
DictionaryNotFound(1003L),
WrongFieldValue(1004L),
RecordNotFound(1006L),
InstrumentAlreadyExists(1010L),
InstrumentNotFound(1011L),
InstrumentNotActive(1012L),

View file

@ -38,7 +38,7 @@ public class RatesFacade implements IClearingFacade {
rates.setCurrency(currencyCodeDictionary.getCode());
rates.setValue(request.getValue());
rates.setValueDate(request.getValueDate());
rates.setWorkflowStatus(request.getStatus());
rates.setWorkflowStatus(request.getWorkflowStatus());
rates.setCreated(Instant.now());
ratesImdg.insert(rates);
@ -50,7 +50,7 @@ public class RatesFacade implements IClearingFacade {
Rates ratesForUpdate = ratesImdg.getSingleObjectByID(request.getId());
ratesForUpdate.setValue(request.getValue());
ratesForUpdate.setWorkflowStatus(request.getStatus());
ratesForUpdate.setWorkflowStatus(request.getWorkflowStatus());
ratesForUpdate.setUpdated(Instant.now());
ratesImdg.update(ratesForUpdate);

View file

@ -42,7 +42,7 @@ public class RiskParameterFacade implements IClearingFacade {
riskParameter.setSettlementType(request.getSettlementType());
riskParameter.setValue(request.getValue());
riskParameter.setQuoteValue(request.getQuoteValue());
riskParameter.setWorkflowStatus(request.getStatus());
riskParameter.setWorkflowStatus(request.getWorkflowStatus());
riskParameter.setCreated(Instant.now());
riskParameterImdg.insert(riskParameter);
@ -55,7 +55,7 @@ public class RiskParameterFacade implements IClearingFacade {
riskParameterForUpdate.setValue(request.getValue());
riskParameterForUpdate.setQuoteValue(request.getQuoteValue());
riskParameterForUpdate.setWorkflowStatus(request.getStatus());
riskParameterForUpdate.setWorkflowStatus(request.getWorkflowStatus());
riskParameterImdg.update(riskParameterForUpdate);
log.debug("successfully processed, updated risk_parameter id {}", riskParameterForUpdate.getId());

View file

@ -38,9 +38,7 @@ public class SCrossRateFacade {
public void update(SCrossRateUpdateRequest req) {
SCrossRate sCrossRate = sCrossRateImdg.getSingleObjectByID(req.getId());
if (req.getDate() != null) {
sCrossRate.setDate(req.getDate());
}
sCrossRate.setUnitRate(req.getUnitRate());
sCrossRate.setFaceValue(req.getFaceValue());
sCrossRate.setRate(req.getRate());

View file

@ -145,7 +145,7 @@ public class RatesMessageListener extends QueueConsumer implements InitializingB
newRequest.setCurrencyId(currencyCodeDictionary.getId());
newRequest.setValueDate(sRateElem.getDate());
newRequest.setValue(sRateElem.getPrice());
newRequest.setStatus(WorkflowStatus.Active.getKey());
newRequest.setWorkflowStatus(WorkflowStatus.Active.getKey());
return Optional.of(newRequest);
}
@ -157,7 +157,7 @@ public class RatesMessageListener extends QueueConsumer implements InitializingB
return Optional.empty();
}
updateRequest.setValue(sRateElem.getPrice());
updateRequest.setStatus(WorkflowStatus.Active.getKey());
updateRequest.setWorkflowStatus(WorkflowStatus.Active.getKey());
return Optional.of(updateRequest);
}

View file

@ -1,23 +1,12 @@
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 java.math.BigDecimal;
import java.time.LocalDate;
import ru.spcex.clearing.platform.messaging.domain.json.deserialize.LocalDateDeserializer;
import ru.spcex.clearing.platform.messaging.domain.json.serialize.LocalDateSerializer;
public class SCrossRateUpdateRequest {
@JsonProperty
private Long id;
@JsonProperty
@JsonSerialize(using = LocalDateSerializer.class)
@JsonDeserialize(using = LocalDateDeserializer.class)
private LocalDate date;
@JsonProperty
private String currency;
@JsonProperty
private BigDecimal unitRate;
@JsonProperty
private BigDecimal faceValue;
@ -54,20 +43,4 @@ public class SCrossRateUpdateRequest {
public void setRate(BigDecimal rate) {
this.rate = rate;
}
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;
}
}

View file

@ -19,7 +19,7 @@ public class RatesNewRequest {
@JsonProperty
private Long currencyId;
@JsonProperty
private String status;
private String workflowStatus;
public BigDecimal getValue() {
return value;
@ -45,11 +45,11 @@ public class RatesNewRequest {
this.currencyId = currencyId;
}
public String getStatus() {
return status;
public String getWorkflowStatus() {
return workflowStatus;
}
public void setStatus(String status) {
this.status = status;
public void setWorkflowStatus(String workflowStatus) {
this.workflowStatus = workflowStatus;
}
}

View file

@ -10,7 +10,7 @@ public class RatesUpdateRequest {
@JsonProperty
private BigDecimal value;
@JsonProperty
private String status;
private String workflowStatus;
public Long getId() {
return id;
@ -28,11 +28,11 @@ public class RatesUpdateRequest {
this.value = value;
}
public String getStatus() {
return status;
public String getWorkflowStatus() {
return workflowStatus;
}
public void setStatus(String status) {
this.status = status;
public void setWorkflowStatus(String workflowStatus) {
this.workflowStatus = workflowStatus;
}
}

View file

@ -14,7 +14,7 @@ public class RiskParameterNewRequest {
@JsonProperty
private Long currencyPairId;
@JsonProperty
private String status;
private String workflowStatus;
public BigDecimal getValue() {
return value;
@ -48,11 +48,11 @@ public class RiskParameterNewRequest {
this.currencyPairId = currencyPairId;
}
public String getStatus() {
return status;
public String getWorkflowStatus() {
return workflowStatus;
}
public void setStatus(String status) {
this.status = status;
public void setWorkflowStatus(String status) {
this.workflowStatus = status;
}
}

View file

@ -12,7 +12,7 @@ public class RiskParameterUpdateRequest {
@JsonProperty
private BigDecimal quoteValue;
@JsonProperty
private String status;
private String workflowStatus;
public Long getId() {
return id;
@ -38,11 +38,11 @@ public class RiskParameterUpdateRequest {
this.quoteValue = quoteValue;
}
public String getStatus() {
return status;
public String getWorkflowStatus() {
return workflowStatus;
}
public void setStatus(String status) {
this.status = status;
public void setWorkflowStatus(String status) {
this.workflowStatus = status;
}
}