ialbert 2026-04-15 15:18:27 +03:00
parent a461d55366
commit 5b6eb04345
4 changed files with 54 additions and 1 deletions

View file

@ -34,6 +34,7 @@ import ru.spcex.clearing.session.state.action.RequirementAndObligationCreationAc
import ru.spcex.clearing.session.state.action.ReviseStage1Action;
import ru.spcex.clearing.session.state.action.SaveRegistriesAfterInspectionAndContinueAction;
import ru.spcex.clearing.session.state.action.SaveRegistriesAndContinueAction;
import ru.spcex.clearing.session.state.action.SendNotificationAction;
import ru.spcex.clearing.session.state.action.UpdateWorkflowStatusAction;
import ru.spcex.clearing.session.state.guard.ErroneousRegistriesPresentGuard;
import ru.spcex.clearing.session.state.guard.StashedRegistriesPresentGuard;
@ -60,6 +61,7 @@ public class PrecSessionStateMachineConfig extends EnumStateMachineConfigurerAda
private final InspectionObligationsPrecAction inspectionObligationsV2Action;
private final SaveRegistriesAndContinueAction obligationAdmissionContinueAction;
private final SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction;
private final SendNotificationAction sendNotificationAction;
private final DiscardRegistriesAction discardOblAdmStash =
new DiscardRegistriesAction(DataEnum.obligationAdmissionStashedRgs);
private final DiscardRegistriesAction discardInspOblStash = new DiscardRegistriesAction(
@ -91,13 +93,14 @@ public class PrecSessionStateMachineConfig extends EnumStateMachineConfigurerAda
@Qualifier("marketCodesForCurr")
Supplier<List<String>> marketCodes,
SaveRegistriesAndContinueAction obligationAdmissionContinueAction,
SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction,
SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction, SendNotificationAction sendNotificationAction,
@Qualifier("pauseWorkflowStatusAction")
UpdateWorkflowStatusAction pauseWsAction,
@Qualifier("activeWorkflowStatusAction")
UpdateWorkflowStatusAction activeWsAction) {
this.sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class);
this.saveRegistriesAfterInspectionAndContinueAction = saveRegistriesAfterInspectionAndContinueAction;
this.sendNotificationAction = sendNotificationAction;
this.pauseWsAction = pauseWsAction;
this.activeWsAction = activeWsAction;
Imdg<ExecutionCurrency> executionCurrencyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionCurrency, ExecutionCurrency.class);
@ -193,6 +196,7 @@ public class PrecSessionStateMachineConfig extends EnumStateMachineConfigurerAda
.source(TaskType.InspectionObligations).target(TaskType.FinishingSession)
.guard(invert(inspErrGuard))
.action(saveRegistriesAfterInspectionAndContinueAction)
.action(sendNotificationAction)
.action(finishAction);
}
@ -219,6 +223,7 @@ public class PrecSessionStateMachineConfig extends EnumStateMachineConfigurerAda
.source(TaskType.PSEUDO_waitAfterInspectionError).target(TaskType.FinishingSession)
.action(activeWsAction)
.action(saveRegistriesAfterInspectionAndContinueAction)
.action(sendNotificationAction)
.action(finishAction)
.event(SsnEvent.CONTINUE);
for (var taskType : List.of(TaskType.PSEUDO_waitAfterInspectionError, TaskType.PSEUDO_waitAfterInspectionRestore)) {

View file

@ -12,6 +12,7 @@ public enum DataEnum {
counterPartyId, //Long
obligationAdmissionStashedRgs, //Map<Long, Registry>
inspectionObligationStashedRgs, //Map<Long, Registry>
notificationMessage,
erroneousRegistries, //List<RgsErr>
paymentInstructionReturnMkr, //List<PaymentInstruction>
paymentInstructionSecurity, //List<PaymentInstruction>

View file

@ -187,6 +187,7 @@ public class InspectionObligationsPrecAction extends ReviseStage1Action {
}
setGroupStatus.accept(group);
}
final StringBuilder[] notificationMessage = {null};
assetsByTcrAndSec.forEach((key, trio) -> {
Registry dm_t = trio.dm_t;
Registry am_t = trio.am_t;
@ -209,7 +210,14 @@ public class InspectionObligationsPrecAction extends ReviseStage1Action {
newPm_t.setSessionType(sessionType.getKey());
newPm_t.setBalance(difference);
rgssToStore.put(newPm_t.getId(), newPm_t);
if (notificationMessage[0] == null) {
notificationMessage[0] = new StringBuilder("Сформированы PM*T регистры:");
}
notificationMessage[0].append("\nдля компании %s регистр %d;".formatted(newPm_t.getShortName(), newPm_t.getId()));
});
if (notificationMessage[0] != null) {
ctx.getExtendedState().getVariables().put(DataEnum.notificationMessage, notificationMessage[0].toString());
}
ctx.getExtendedState().getVariables().put(DataEnum.erroneousRegistries, errs);
ctx.getExtendedState().getVariables().put(DataEnum.inspectionObligationStashedRgs, rgssToStore);
}

View file

@ -0,0 +1,39 @@
package ru.spcex.clearing.session.state.action;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Scope;
import org.springframework.statemachine.StateContext;
import org.springframework.stereotype.Service;
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.platform.enumeration.ObjectType;
import ru.spcex.platform.enumeration.Priority;
@Service
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class SendNotificationAction extends AbstractSessionActionForOkErrorHandling {
private final Logger log = LoggerFactory.getLogger(getClass());
private final NotificationSender notificationSender;
@Autowired
public SendNotificationAction(NotificationSender notificationSender) {
this.notificationSender = notificationSender;
}
@Override
protected void actualExecute(StateContext<TaskType, SsnEvent> ctx) {
String msg = ctx.getExtendedState().get(DataEnum.notificationMessage, String.class);
if (msg != null) {
log.info("sending notification, msg length {}...", msg.length());
notificationSender.sendNotification(ObjectType.rgst, msg, Priority.HIGH);
ctx.getExtendedState().getVariables().remove(DataEnum.notificationMessage);
}
}
}