etreschenkov 2026-05-26 12:20:03 +03:00
parent b5ad5540c7
commit 578f6a708b
4 changed files with 66 additions and 8 deletions

View file

@ -0,0 +1,24 @@
package ru.spcex.clearing.dflt.management.error;
import ru.spcex.platform.utils.enumeration.EnumMessage;
public class ListingNotFound extends Exception {
final EnumMessage enumMsg;
public ListingNotFound(EnumMessage enumMsg) {
this.enumMsg = enumMsg;
}
public ListingNotFound(DefaultManagementErrors code) {
this.enumMsg = new EnumMessage(code);
}
public ListingNotFound(String message, Throwable cause) {
super(message, cause);
this.enumMsg = new EnumMessage(DefaultManagementErrors.GeneralError);
}
public EnumMessage getEnumMsg() {
return enumMsg;
}
}

View file

@ -27,6 +27,7 @@ import ru.clearing.classes.statics.data.registry.Registry;
import ru.clearing.classes.statics.data.security.Rates;
import ru.spcex.clearing.dflt.management.config.settings.DefaultManagementSettings;
import ru.spcex.clearing.dflt.management.enums.SendOrdersTypes;
import ru.spcex.clearing.dflt.management.error.ListingNotFound;
import ru.spcex.clearing.dflt.management.service.ImdgQueryService;
import ru.spcex.clearing.dflt.management.service.OrderCurrencyTriExportService;
import ru.spcex.clearing.dflt.management.service.SpotOvernightOrderService;
@ -141,7 +142,11 @@ public class TaskListener extends QueueConsumer implements InitializingBean {
log.warn("Unsupported overnightType={} for registry id={}", overnightType, registry.getId());
}
} catch (Exception e) {
log.error("Error while processing registryId={}, ex: {}", registryId, ExceptionUtils.getStackTrace(e));
if (e instanceof ListingNotFound) {
sendNotification("Ошибка: не найден инструмент");
} else {
log.error("Error while processing registryId={}, ex: {}", registryId, ExceptionUtils.getStackTrace(e));
}
}
}
log.info("CROR createOrder finished");
@ -163,11 +168,7 @@ public class TaskListener extends QueueConsumer implements InitializingBean {
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);
sendNotification(comment);
}
try {
@ -230,4 +231,12 @@ public class TaskListener extends QueueConsumer implements InitializingBean {
orderCurrencyImdg.update(orderCurrency);
}
}
private void sendNotification(String comment) {
NotificationNewRequest newReq = new NotificationNewRequest();
newReq.setObjectType(ObjectType.rgst.getKey());
newReq.setPriority(Priority.HIGH.getKey());
newReq.setComment(comment);
kafkaSender.sendRequestToQueue(Consts.NOTIFICATION_NEW, newReq);
}
}

View file

@ -4,10 +4,13 @@ import java.math.BigDecimal;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
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.error.DefaultManagementErrors;
import ru.spcex.clearing.dflt.management.error.ListingNotFound;
import ru.spcex.clearing.dflt.management.model.CounterpartyInfo;
import ru.spcex.clearing.dflt.management.model.FinalCalculationResult;
import ru.spcex.clearing.dflt.management.model.OrderCurrencyContext;
@ -42,7 +45,7 @@ public class SpotOvernightOrderService {
this.swapCalculationService = swapCalculationService;
}
public void process(Registry registry) {
public void process(Registry registry) throws ListingNotFound {
String orderCategory = imdgQueryService.resolveOrderCategory(registry.getCompanyId());
Market market = imdgQueryService.getSpotMarket();
@ -52,6 +55,16 @@ public class SpotOvernightOrderService {
CounterpartyInfo rgcm = imdgQueryService.getCompanyByRole(CompanyRole.RGCM);
CurrencyCode currency = IEnumKey.getEnumByKey(CurrencyCode.class, registry.getSecuritySymbol());
try {
Listing listingT0 = imdgQueryService.findListing(registry, market.getCode(), SettleCode.T0.getKey());
Listing listingT1 = imdgQueryService.findListing(registry, market.getCode(), SettleCode.T1.getKey());
if (listingT0 == null || listingT1 == null) {
throw new IllegalStateException();
}
} catch (Exception e) {
throw new ListingNotFound(DefaultManagementErrors.OperationNotAllowed);
}
OrderCurrencyContext context = OrderCurrencyContext.builder()
.registry(registry)
.orderCategory(orderCategory)

View file

@ -4,10 +4,13 @@ import java.math.BigDecimal;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
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.error.DefaultManagementErrors;
import ru.spcex.clearing.dflt.management.error.ListingNotFound;
import ru.spcex.clearing.dflt.management.model.CounterpartyInfo;
import ru.spcex.clearing.dflt.management.model.FinalCalculationResult;
import ru.spcex.clearing.dflt.management.model.OrderCurrencyContext;
@ -42,7 +45,7 @@ public class SwapOvernightOrderService {
this.swapCalculationService = swapCalculationService;
}
public void process(Registry registry) {
public void process(Registry registry) throws ListingNotFound {
String orderCategory = imdgQueryService.resolveOrderCategory(registry.getCompanyId());
Market market = imdgQueryService.getSwapMarket();
@ -51,6 +54,15 @@ public class SwapOvernightOrderService {
CounterpartyInfo clcc = imdgQueryService.getCompanyByRole(CompanyRole.CLCC);
CounterpartyInfo rgcm = imdgQueryService.getCompanyByRole(CompanyRole.RGCM);
CurrencyCode currency = IEnumKey.getEnumByKey(CurrencyCode.class, registry.getSecuritySymbol());
try {
Listing listing = imdgQueryService.findListing(registry, market.getCode(), SettleCode.T1.getKey());
if (listing == null) {
throw new IllegalStateException();
}
} catch (Exception e) {
throw new ListingNotFound(DefaultManagementErrors.OperationNotAllowed);
}
OrderCurrencyContext context = OrderCurrencyContext.builder()
.registry(registry)
.orderCategory(orderCategory)