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

View file

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

View file

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

View file

@ -6,12 +6,12 @@ public enum DefaultManagementErrors implements IErrorEnumId {
GeneralError(11000L), GeneralError(11000L),
RecordNotFound(11001L), RecordNotFound(11001L),
RequiredFieldIsEmpty(11007L),
DictionaryNotFound(11005L),
RecordAlreadyPresent(11002L), RecordAlreadyPresent(11002L),
OnlyBalancingOrdersAllowed(11003L), OnlyBalancingOrdersAllowed(11003L),
OnlyBalancingOrdersAllowedForChanging(11004L), OnlyBalancingOrdersAllowedForChanging(11004L),
DictionaryNotFound(11005L),
IncorrectFieldValue(11005L), IncorrectFieldValue(11005L),
RequiredFieldIsEmpty(11007L),
; ;
private final Long id; 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<OrderCurrency> orderCurrencyImdg;
private final Imdg<SOrders> sOrdersImdg; private final Imdg<SOrders> sOrdersImdg;
private final Function<OrderCurrencyUpdateRequest, IValidator> orderCurrencyUpdateValidator; private final Function<OrderCurrencyUpdateRequest, IValidator> orderCurrencyUpdateValidator;
private final Function<OrderCurrencyUpdateRequest, IValidator> orderCurrencyUpdateStatusValidator;
private final Function<OrderCurrencyUpdateRequest, IValidator> overnightTypeUpdateValidator; private final Function<OrderCurrencyUpdateRequest, IValidator> overnightTypeUpdateValidator;
private final Function<OrderCompanyNewRequest, IValidator> orderCompanyNewValidator; private final Function<OrderCompanyNewRequest, IValidator> orderCompanyNewValidator;
private final Function<OrderCompanyUpdateRequest, IValidator> orderCompanyUpdateValidator; private final Function<OrderCompanyUpdateRequest, IValidator> orderCompanyUpdateValidator;
@ -80,6 +81,8 @@ public class OrderCurrencyListener extends QueueConsumer implements Initializing
Function<OrderCompanyNewRequest, IValidator> orderCompanyNewValidator, Function<OrderCompanyNewRequest, IValidator> orderCompanyNewValidator,
@Qualifier("orderCurrencyUpdateCompany") @Qualifier("orderCurrencyUpdateCompany")
Function<OrderCompanyUpdateRequest, IValidator> orderCompanyUpdateValidator, Function<OrderCompanyUpdateRequest, IValidator> orderCompanyUpdateValidator,
@Qualifier("orderCurrencyUpdateStatusValidator")
Function<OrderCurrencyUpdateRequest, IValidator> orderCurrencyUpdateStatusValidator,
Function<CommonDeleteRequest, IValidator> orderCompanyDeleteValidator, Function<CommonDeleteRequest, IValidator> orderCompanyDeleteValidator,
ImdgQueryService imdgQueryService, ImdgQueryService imdgQueryService,
IMessageResolver msgResolver, ValidationConfig validationConfig) { 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.overnightSettingsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_OvernightSettings, OvernightSettings.class);
this.sOrdersImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SOrders, SOrders.class);; this.sOrdersImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SOrders, SOrders.class);;
this.orderCurrencyUpdateValidator = orderCurrencyUpdateValidator; this.orderCurrencyUpdateValidator = orderCurrencyUpdateValidator;
this.orderCurrencyUpdateStatusValidator = orderCurrencyUpdateStatusValidator;
this.overnightTypeUpdateValidator = overnightTypeUpdateValidator; this.overnightTypeUpdateValidator = overnightTypeUpdateValidator;
this.orderCompanyNewValidator = orderCompanyNewValidator; this.orderCompanyNewValidator = orderCompanyNewValidator;
this.orderCompanyUpdateValidator = orderCompanyUpdateValidator; this.orderCompanyUpdateValidator = orderCompanyUpdateValidator;
@ -151,20 +155,13 @@ public class OrderCurrencyListener extends QueueConsumer implements Initializing
private RequestInfoUpdate orderCurrencyUpdateStatus(BaseRequest<OrderCurrencyUpdateRequest> req) { private RequestInfoUpdate orderCurrencyUpdateStatus(BaseRequest<OrderCurrencyUpdateRequest> req) {
OrderCurrencyUpdateRequest payload = req.getRequestPayload(); OrderCurrencyUpdateRequest payload = req.getRequestPayload();
IValidator validator = orderCurrencyUpdateValidator.apply(payload); IValidator validator = orderCurrencyUpdateStatusValidator.apply(payload);
Optional<EnumMessage> error = validator.tillFirstError(); Optional<EnumMessage> error = validator.tillFirstError();
if (error.isPresent()) { if (error.isPresent()) {
return new RequestInfoUpdate(req.getId(), Status.Error, msgResolver.resolve(error.get())); return new RequestInfoUpdate(req.getId(), Status.Error, msgResolver.resolve(error.get()));
} }
OrderCurrency order = validator.getStored(OrderCurrencyValidationStored.OrderCurrency); 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.setStatus(payload.getStatus());
order.setComment(payload.getComment());
log.info("updating OrderCurrency[{}]", order.getId()); log.info("updating OrderCurrency[{}]", order.getId());
orderCurrencyImdg.update(order); orderCurrencyImdg.update(order);
return null; return null;

View file

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