diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/component/predicate/SessionNameByType.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/component/predicate/SessionNameByType.java new file mode 100644 index 000000000..ce262911f --- /dev/null +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/component/predicate/SessionNameByType.java @@ -0,0 +1,38 @@ +package ru.spcex.clearing.component.predicate; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import ru.clearing.platform.dictionary.SessionTypeDictionary; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; +import ru.spcex.platform.utils.text.TextUtil; + +public class SessionNameByType { + private static final Logger log = LoggerFactory.getLogger(SessionNameByType.class); + private final Imdg imdg; + + public static SessionNameByType withSsnTypeImdg(final Imdg imdg) { + return new SessionNameByType(imdg); + } + + private SessionNameByType(Imdg imdg) { + this.imdg = imdg; + } + + public String getName(String code) { + if (code == null) throw new NullPointerException("cannot search SessionType name with null arg"); + ImdgPredicateBuilder pb = imdg.predicateBuilder(); + SessionTypeDictionary dictionaryRecord = imdg.getSingleObjectByPredicate( + pb.equals("code", code) + ); + if (dictionaryRecord == null) { + log.warn("couldn't find SessionDictionary for code '{}'", code); + return code; + } + if (TextUtil.isEmpty(dictionaryRecord.getName())) { + log.warn("SessionDictionary#name for code '{}' is null", code); + return code; + } + return dictionaryRecord.getName(); + } +} diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/InspectionObligationsPrecAction.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/InspectionObligationsPrecAction.java index 97beda118..6dc7db78d 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/InspectionObligationsPrecAction.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/InspectionObligationsPrecAction.java @@ -23,7 +23,9 @@ import org.springframework.statemachine.StateContext; import org.springframework.stereotype.Service; import ru.clearing.classes.statics.data.company.ClearingMemberCategory; import ru.clearing.classes.statics.data.registry.Registry; +import ru.clearing.platform.dictionary.SessionTypeDictionary; import ru.spcex.clearing.component.GroupRgsKey; +import static ru.spcex.clearing.component.predicate.SessionNameByType.withSsnTypeImdg; import ru.spcex.clearing.component.predicate.cash.CategoryByCompanyIdCashingPredicate; import ru.spcex.clearing.component.predicate.cash.registry.AssetByTcrCompanyAccountCashedPredicate; import ru.spcex.clearing.error.RgsError; @@ -61,10 +63,12 @@ public class InspectionObligationsPrecAction extends ReviseStage1Action { private final Logger log = LoggerFactory.getLogger(getClass()); private final Imdg registryImdg; private final Imdg cmcImdg; + private final Imdg ssnTypeImdg; private final ImdgId idGen; private final IMessageResolver msgResolver = new SimpleMessageResolver(); private Function, Boolean> cmcFilter; private SessionType sessionType; + private String ssnName; private Long sessionId; @Autowired @@ -72,6 +76,7 @@ public class InspectionObligationsPrecAction extends ReviseStage1Action { super(imdgProvider); this.registryImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_Registry, Registry.class, null); this.cmcImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class, null); + this.ssnTypeImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SessionTypeDictionary, SessionTypeDictionary.class); this.idGen = imdgProvider.getImdgIdGenerator(); } @@ -91,6 +96,7 @@ public class InspectionObligationsPrecAction extends ReviseStage1Action { ); this.sessionId = ctx.getExtendedState().get(DataEnum.sessionId, Long.class); this.sessionType = ctx.getExtendedState().get(DataEnum.sessionType, SessionType.class); + this.ssnName = withSsnTypeImdg(ssnTypeImdg).getName(sessionType.getKey()); inspectionObligations(ctx); } finally { a___Cash.clear(); @@ -251,13 +257,18 @@ public class InspectionObligationsPrecAction extends ReviseStage1Action { pmt.setRegistryStatus(RegistryStatus.PROC.getKey()); rgssToStore.put(pmt.getId(), pmt); if (notificationMessage[0] == null) { - notificationMessage[0] = new StringBuilder("Сформированы PM*T регистры:"); + notificationMessage[0] = new StringBuilder( + "Сессия «%s» завершена. Выявлена задолженность:".formatted(ssnName) + ); } - notificationMessage[0].append("\nдля компании %s – регистр %d;".formatted(pmt.getShortName(), pmt.getId())); + notificationMessage[0].append("\nКомпания %s, код %s, %s %s;".formatted( + pmt.getShortName(), pmt.getTradingCode(), pmt.getBalance(), pmt.getSecuritySymbol()) + ); }); - if (notificationMessage[0] != null) { - ctx.getExtendedState().getVariables().put(DataEnum.notificationMessage, notificationMessage[0].toString()); + if (notificationMessage[0] == null) { // сформированно 0 PM_T регистров + notificationMessage[0] = new StringBuilder("Сессия «%s» завершена. Задолженность не выявлена".formatted(ssnName)); } + ctx.getExtendedState().getVariables().put(DataEnum.notificationMessage, notificationMessage[0].toString()); ctx.getExtendedState().getVariables().put(DataEnum.erroneousRegistries, errs); ctx.getExtendedState().getVariables().put(DataEnum.inspectionObligationStashedRgs, rgssToStore); }