Obligation Admission PAUSE notification
This commit is contained in:
parent
c1c7e168ac
commit
e47ff42602
6 changed files with 103 additions and 3 deletions
|
|
@ -21,12 +21,16 @@ public class NotificationSender {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendNotification(ObjectType objType, String comment, Priority priority) {
|
public void sendNotification(ObjectType objType, String comment, Priority priority) {
|
||||||
|
sendNotification(objType, comment, priority, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sendNotification(ObjectType objType, String comment, Priority priority, Long objectId) {
|
||||||
NotificationNewRequest reviseNotification = new NotificationNewRequest();
|
NotificationNewRequest reviseNotification = new NotificationNewRequest();
|
||||||
reviseNotification.setObjectType(objType.getKey());
|
reviseNotification.setObjectType(objType.getKey());
|
||||||
reviseNotification.setComment(comment);
|
reviseNotification.setComment(comment);
|
||||||
reviseNotification.setPriority(priority.getKey());
|
reviseNotification.setPriority(priority.getKey());
|
||||||
|
reviseNotification.setObjectId(objectId);
|
||||||
kafkaSender.sendRequestToQueue(Consts.NOTIFICATION_NEW, reviseNotification);
|
kafkaSender.sendRequestToQueue(Consts.NOTIFICATION_NEW, reviseNotification);
|
||||||
log.info("notification {} sent {}", objType, comment);
|
log.info("notification {} sent {}", objType, comment);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ public enum DataEnum {
|
||||||
dealsPreparedCurrency,
|
dealsPreparedCurrency,
|
||||||
counterPartyId, //Long
|
counterPartyId, //Long
|
||||||
obligationAdmissionStashedRgs, //Map<Long, Registry>
|
obligationAdmissionStashedRgs, //Map<Long, Registry>
|
||||||
|
erroneousRegistries, //List<RgsErr>
|
||||||
paymentInstructionReturnMkr, //List<PaymentInstruction>
|
paymentInstructionReturnMkr, //List<PaymentInstruction>
|
||||||
paymentInstructionSecurity, //List<PaymentInstruction>
|
paymentInstructionSecurity, //List<PaymentInstruction>
|
||||||
paymentsWereCreatedDepositReturn, //Collection<PaymentInstruction>
|
paymentsWereCreatedDepositReturn, //Collection<PaymentInstruction>
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,7 @@ import ru.spcex.clearing.service.validation.admission.TcrActiveValidationRule;
|
||||||
import ru.spcex.clearing.session.stage.TaskType;
|
import ru.spcex.clearing.session.stage.TaskType;
|
||||||
import ru.spcex.clearing.session.state.DataEnum;
|
import ru.spcex.clearing.session.state.DataEnum;
|
||||||
import ru.spcex.clearing.session.state.SsnEvent;
|
import ru.spcex.clearing.session.state.SsnEvent;
|
||||||
|
import ru.spcex.clearing.session.state.model.RgsErr;
|
||||||
import ru.spcex.platform.enumeration.RegistryStatus;
|
import ru.spcex.platform.enumeration.RegistryStatus;
|
||||||
import ru.spcex.platform.imdg.api.Imdg;
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||||
|
|
@ -78,6 +79,7 @@ public class ObligationAdmissionAction extends AbstractSessionActionForOkErrorHa
|
||||||
.collect(Collectors.groupingBy(registry -> new GroupRgsKey(registry.getGroupId(), registry.getMarket())));
|
.collect(Collectors.groupingBy(registry -> new GroupRgsKey(registry.getGroupId(), registry.getMarket())));
|
||||||
log.info("found {} ({} groups) registries with sessionId {}", registries.size(), byGroups.size(), sessionId);
|
log.info("found {} ({} groups) registries with sessionId {}", registries.size(), byGroups.size(), sessionId);
|
||||||
Map<Long, Registry> rgsToUpdate = new HashMap<>();
|
Map<Long, Registry> rgsToUpdate = new HashMap<>();
|
||||||
|
List<RgsErr> errs = new ArrayList<>();
|
||||||
for (Map.Entry<GroupRgsKey, List<Registry>> grpEntry : byGroups.entrySet()) {
|
for (Map.Entry<GroupRgsKey, List<Registry>> grpEntry : byGroups.entrySet()) {
|
||||||
EnumMessage groupError = null;
|
EnumMessage groupError = null;
|
||||||
List<Registry> rgsGroup = grpEntry.getValue();
|
List<Registry> rgsGroup = grpEntry.getValue();
|
||||||
|
|
@ -86,6 +88,7 @@ public class ObligationAdmissionAction extends AbstractSessionActionForOkErrorHa
|
||||||
Optional<EnumMessage> error = validator.tillFirstError();
|
Optional<EnumMessage> error = validator.tillFirstError();
|
||||||
if (error.isPresent()) {
|
if (error.isPresent()) {
|
||||||
groupError = error.get();
|
groupError = error.get();
|
||||||
|
errs.add(new RgsErr(rgs, messageResolver.resolve(groupError)));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -100,6 +103,7 @@ public class ObligationAdmissionAction extends AbstractSessionActionForOkErrorHa
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx.getExtendedState().getVariables().put(DataEnum.obligationAdmissionStashedRgs, rgsToUpdate);
|
ctx.getExtendedState().getVariables().put(DataEnum.obligationAdmissionStashedRgs, rgsToUpdate);
|
||||||
|
ctx.getExtendedState().getVariables().put(DataEnum.erroneousRegistries, errs);
|
||||||
// if (wasNack) {
|
// if (wasNack) {
|
||||||
// } else {
|
// } else {
|
||||||
// registryImdg.putAll(rgsToUpdate);
|
// registryImdg.putAll(rgsToUpdate);
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,59 @@
|
||||||
|
package ru.spcex.clearing.session.state.action;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
import org.springframework.statemachine.StateContext;
|
||||||
|
import org.springframework.statemachine.state.State;
|
||||||
|
import ru.spcex.clearing.notification.NotificationSender;
|
||||||
|
import ru.spcex.clearing.session.stage.TaskType;
|
||||||
|
import ru.spcex.clearing.session.state.DataEnum;
|
||||||
|
import ru.spcex.clearing.session.state.SsnEvent;
|
||||||
|
import ru.spcex.clearing.session.state.model.RgsErr;
|
||||||
|
import ru.spcex.platform.enumeration.ObjectType;
|
||||||
|
import ru.spcex.platform.enumeration.Priority;
|
||||||
|
import ru.spcex.platform.enumeration.WorkflowStatus;
|
||||||
|
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||||
|
|
||||||
|
public class PauseWorkflowStatusWithNotificationAction extends UpdateWorkflowStatusAction {
|
||||||
|
private final NotificationSender notificationSender;
|
||||||
|
|
||||||
|
public PauseWorkflowStatusWithNotificationAction(ImdgProvider imdgProvider,
|
||||||
|
NotificationSender notificationSender) {
|
||||||
|
super(imdgProvider, WorkflowStatus.Pause);
|
||||||
|
this.notificationSender = notificationSender;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void actualExecute(StateContext<TaskType, SsnEvent> ctx) {
|
||||||
|
super.actualExecute(ctx);
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
List<RgsErr> errs = ctx.getExtendedState().get(DataEnum.erroneousRegistries, List.class);
|
||||||
|
errs = errs == null ? Collections.emptyList() : errs;
|
||||||
|
String comment = errs.stream()
|
||||||
|
.limit(100)
|
||||||
|
.map(rgsWr -> "ТКР %s: %s".formatted(rgsWr.getRgs().getTradingClearingRegistry(), rgsWr.getErr()))
|
||||||
|
.collect(Collectors.joining(";\r\n", notificationPrefix(ctx), ""));
|
||||||
|
Long ssnId = ctx.getExtendedState().get(DataEnum.sessionId, Long.class);
|
||||||
|
notificationSender.sendNotification(ObjectType.session, comment, Priority.HIGH, ssnId);
|
||||||
|
ctx.getExtendedState().getVariables().remove(DataEnum.erroneousRegistries);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String notificationPrefix(StateContext<TaskType, SsnEvent> ctx) {
|
||||||
|
State<TaskType, SsnEvent> target = ctx.getTarget();
|
||||||
|
if (target == null) return "";
|
||||||
|
TaskType id = target.getId();
|
||||||
|
if (id == null) return "";
|
||||||
|
switch (id) {
|
||||||
|
case PSEUDO_waitAfterObligationAdmissionError -> {
|
||||||
|
return "Ряд обязательств не допущены к клирингу!!!\r\n";
|
||||||
|
}
|
||||||
|
// case PSEUDO_waitAfterInspectionError -> {
|
||||||
|
// return "Ряд обязательств подлежит исключению из клирингового пула!!!\r\n";
|
||||||
|
// }
|
||||||
|
default -> {
|
||||||
|
return "Ошибка клиринговой сессии\r\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -2,20 +2,23 @@ package ru.spcex.clearing.session.state.action;
|
||||||
|
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import ru.spcex.clearing.notification.NotificationSender;
|
||||||
import ru.spcex.platform.enumeration.WorkflowStatus;
|
import ru.spcex.platform.enumeration.WorkflowStatus;
|
||||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||||
|
|
||||||
@Configuration
|
@Configuration
|
||||||
public class WorkflowStatusConfiguration {
|
public class WorkflowStatusConfiguration {
|
||||||
private final ImdgProvider imdgProvider;
|
private final ImdgProvider imdgProvider;
|
||||||
|
private final NotificationSender notificationSender;
|
||||||
|
|
||||||
public WorkflowStatusConfiguration(ImdgProvider imdgProvider) {
|
public WorkflowStatusConfiguration(ImdgProvider imdgProvider, NotificationSender notificationSender) {
|
||||||
this.imdgProvider = imdgProvider;
|
this.imdgProvider = imdgProvider;
|
||||||
|
this.notificationSender = notificationSender;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean("pauseWorkflowStatusAction")
|
@Bean("pauseWorkflowStatusAction")
|
||||||
public UpdateWorkflowStatusAction pauseWorkflowStatusAction() {
|
public UpdateWorkflowStatusAction pauseWorkflowStatusAction() {
|
||||||
return new UpdateWorkflowStatusAction(imdgProvider, WorkflowStatus.Pause);
|
return new PauseWorkflowStatusWithNotificationAction(imdgProvider, notificationSender);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean("activeWorkflowStatusAction")
|
@Bean("activeWorkflowStatusAction")
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
package ru.spcex.clearing.session.state.model;
|
||||||
|
|
||||||
|
import ru.clearing.classes.statics.data.registry.Registry;
|
||||||
|
|
||||||
|
public class RgsErr {
|
||||||
|
private Registry rgs;
|
||||||
|
private String err;
|
||||||
|
|
||||||
|
public RgsErr(Registry rgs, String err) {
|
||||||
|
this.rgs = rgs;
|
||||||
|
this.err = err;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Registry getRgs() {
|
||||||
|
return rgs;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRgs(Registry rgs) {
|
||||||
|
this.rgs = rgs;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getErr() {
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setErr(String err) {
|
||||||
|
this.err = err;
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Reference in a new issue