etreschenkov 2026-04-27 18:45:34 +03:00
parent 621a9dec97
commit 16f492f96c
6 changed files with 30 additions and 17 deletions

View file

@ -14,6 +14,9 @@ public class OrderCurrencyUpdateAction implements IAction<OrderCurrencyUpdateReq
@ApiModelProperty(value = "Наименование инструмента", example = "333")
@JsonProperty
private Long securityId;
@ApiModelProperty(value = "Маркет", example = "333")
@JsonProperty
private String market;
@ApiModelProperty(value = "Цена заявки", example = "12.33")
@JsonProperty
private BigDecimal price;
@ -35,6 +38,7 @@ public class OrderCurrencyUpdateAction implements IAction<OrderCurrencyUpdateReq
OrderCurrencyUpdateRequest request = new OrderCurrencyUpdateRequest();
request.setId(id);
request.setSecurityId(securityId);
request.setMarket(market);
request.setPrice(price);
request.setQuantityLot(quantityLot);
request.setSide(side);

View file

@ -2747,14 +2747,15 @@
<actions>
<put name="Изменение заявки" class="ru.spcex.clearing.backendapi.controller.request.cud.order.OrderCurrencyUpdateAction">
<id type="1" name="Идентификатор записи" shortname="ID" link="orderCurrency" linkCode="id" required="true"/>
<securityId type="1" name="Наименование инструмента" shortname="Инструмент" link="security" linkCode="shortName"/>
<securityId type="1" name="Наименование инструмента" shortname="Инструмент" link="security" linkCode="shortName" enabled="false" required="true"/>
<market type="12" name="Код режима торгов" shortname="Режим торгов" link="market" linkCode="code" enabled="false" required="true"/>
<price type="10" name="Цена заявки" shortname="Цена" required="true"/>
<quantityLot type="3" name="Объем заявки в лотах" shortname="Объем заявки" required="true"/>
<side type="12" name="Направление заявки" shortname="Направление" required="true" link="side"/>
<status type="12" name="Статус заявки" shortname="Статус" link="orderStatus"/>
<comment type="2" length="255" name="Комментарий" shortname="Комментарий"/>
</put>
<put name="Изменение заявки" class="ru.spcex.clearing.backendapi.controller.request.cud.order.OrderCurrencyUpdateStatusAction">
<put name="Изменение заявки" destination="order-currency/status" class="ru.spcex.clearing.backendapi.controller.request.cud.order.OrderCurrencyUpdateStatusAction">
<id type="1" name="Идентификатор записи" shortname="ID" link="orderCurrency" linkCode="id" required="true"/>
<status type="12" name="Статус заявки" shortname="Статус" link="orderStatus"/>
</put>

View file

@ -252,12 +252,13 @@ public class ValidationConfig {
};
}
@Bean("orderCurrencyUpdateValidator")
@Bean("orderCurrencyUpdateStatusValidator")
public Function<OrderCurrencyUpdateRequest, IValidator> orderCurrencyUpdateStatusValidator() {
return req -> {
ImdgValidationContext<OrderCurrencyUpdateRequest> ctx = new ImdgValidationContext<>();
ctx.setValidatedObject(req);
ctx.setLogPrefix(LogPrefixId.INSTANCE);
ctx.addImdg(IMDGDistributedNames.Map_OrderCurrency, orderCurrencyImdg);
ctx.addImdg(IMDGDistributedNames.Map_OrderStatusDictionary, orderStatusDictionaryImdg);
var orderCurrencyPresentById = PresentByPredicate
@ -275,15 +276,15 @@ public class ValidationConfig {
OrderStatus orderStatusReq = IEnumKey.getEnumByKey(OrderStatus.class, validatedObject.getStatus());
OrderStatus orderStatusExist = IEnumKey.getEnumByKey(OrderStatus.class, orderCurrency.getStatus());
if (!Arrays.asList(OrderStatus.CREATED, OrderStatus.HOLD).contains(orderStatusReq)) {
return of(DefaultManagementErrors.IncorrectFieldValue, "status=");
return of(DefaultManagementErrors.IncorrectFieldValue, "status");
}
if (orderStatusReq == OrderStatus.CREATED && orderStatusExist == OrderStatus.HOLD) {
return of(DefaultManagementErrors.IncorrectFieldValue, "status=");
return empty();
}
if (orderStatusReq == OrderStatus.HOLD && orderStatusExist == OrderStatus.CREATED) {
return of(DefaultManagementErrors.IncorrectFieldValue, "status=");
return empty();
}
return empty();
return of(DefaultManagementErrors.IncorrectFieldValue, "status");
}
};
return new ValidatorImpl<>(ctx,

View file

@ -6,12 +6,12 @@ public enum DefaultManagementErrors implements IErrorEnumId {
GeneralError(11000L),
RecordNotFound(11001L),
RequiredFieldIsEmpty(11007L),
DictionaryNotFound(11005L),
RecordAlreadyPresent(11002L),
OnlyBalancingOrdersAllowed(11003L),
OnlyBalancingOrdersAllowedForChanging(11004L),
DictionaryNotFound(11005L),
IncorrectFieldValue(11005L),
RequiredFieldIsEmpty(11007L),
;
private final Long id;

View file

@ -60,6 +60,7 @@ public class OrderCurrencyListener extends QueueConsumer implements Initializing
private final Imdg<OrderCurrency> orderCurrencyImdg;
private final Imdg<SOrders> sOrdersImdg;
private final Function<OrderCurrencyUpdateRequest, IValidator> orderCurrencyUpdateValidator;
private final Function<OrderCurrencyUpdateRequest, IValidator> orderCurrencyUpdateStatusValidator;
private final Function<OrderCurrencyUpdateRequest, IValidator> overnightTypeUpdateValidator;
private final Function<OrderCompanyNewRequest, IValidator> orderCompanyNewValidator;
private final Function<OrderCompanyUpdateRequest, IValidator> orderCompanyUpdateValidator;
@ -80,6 +81,8 @@ public class OrderCurrencyListener extends QueueConsumer implements Initializing
Function<OrderCompanyNewRequest, IValidator> orderCompanyNewValidator,
@Qualifier("orderCurrencyUpdateCompany")
Function<OrderCompanyUpdateRequest, IValidator> orderCompanyUpdateValidator,
@Qualifier("orderCurrencyUpdateStatusValidator")
Function<OrderCurrencyUpdateRequest, IValidator> orderCurrencyUpdateStatusValidator,
Function<CommonDeleteRequest, IValidator> orderCompanyDeleteValidator,
ImdgQueryService imdgQueryService,
IMessageResolver msgResolver, ValidationConfig validationConfig) {
@ -88,6 +91,7 @@ public class OrderCurrencyListener extends QueueConsumer implements Initializing
this.overnightSettingsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_OvernightSettings, OvernightSettings.class);
this.sOrdersImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SOrders, SOrders.class);;
this.orderCurrencyUpdateValidator = orderCurrencyUpdateValidator;
this.orderCurrencyUpdateStatusValidator = orderCurrencyUpdateStatusValidator;
this.overnightTypeUpdateValidator = overnightTypeUpdateValidator;
this.orderCompanyNewValidator = orderCompanyNewValidator;
this.orderCompanyUpdateValidator = orderCompanyUpdateValidator;
@ -151,20 +155,13 @@ public class OrderCurrencyListener extends QueueConsumer implements Initializing
private RequestInfoUpdate orderCurrencyUpdateStatus(BaseRequest<OrderCurrencyUpdateRequest> req) {
OrderCurrencyUpdateRequest payload = req.getRequestPayload();
IValidator validator = orderCurrencyUpdateValidator.apply(payload);
IValidator validator = orderCurrencyUpdateStatusValidator.apply(payload);
Optional<EnumMessage> error = validator.tillFirstError();
if (error.isPresent()) {
return new RequestInfoUpdate(req.getId(), Status.Error, msgResolver.resolve(error.get()));
}
OrderCurrency order = validator.getStored(OrderCurrencyValidationStored.OrderCurrency);
if (payload.getSecurityId() != null) {
order.setSecurityId(payload.getSecurityId());
}
order.setPrice(payload.getPrice());
order.setQuantityLot(BigDecimal.valueOf(payload.getQuantityLot()));
order.setSide(payload.getSide());
order.setStatus(payload.getStatus());
order.setComment(payload.getComment());
log.info("updating OrderCurrency[{}]", order.getId());
orderCurrencyImdg.update(order);
return null;

View file

@ -10,6 +10,8 @@ public class OrderCurrencyUpdateRequest implements WithId {
@JsonProperty
private Long securityId;
@JsonProperty
private String market;
@JsonProperty
private BigDecimal price;
@JsonProperty
private Long quantityLot;
@ -38,6 +40,14 @@ public class OrderCurrencyUpdateRequest implements WithId {
this.securityId = securityId;
}
public String getMarket() {
return market;
}
public void setMarket(String market) {
this.market = market;
}
public BigDecimal getPrice() {
return price;
}