diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/InspectionObligationsDepositReturnAction.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/InspectionObligationsDepositReturnAction.java index 85b609b13..a10fdbfbc 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/InspectionObligationsDepositReturnAction.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/InspectionObligationsDepositReturnAction.java @@ -33,6 +33,7 @@ import ru.spcex.clearing.session.stage.impl.PlanBalanceCalc; import ru.spcex.clearing.session.state.DataEnum; import ru.spcex.clearing.session.state.SsnEvent; import ru.spcex.clearing.session.state.model.RgsErr; +import static ru.spcex.clearing.util.ClearingUtil.biErr; import ru.spcex.platform.enumeration.ClearingCategory; import ru.spcex.platform.enumeration.RegistryCapacity; import ru.spcex.platform.enumeration.RegistryDesignation; @@ -135,7 +136,7 @@ public class InspectionObligationsDepositReturnAction extends ReviseStage1Action //для OM*T uncovered остальным фейл group.forEach(rgs -> updateRegistryStatus(rgs, registryStatusFailed(rgs), rgssToStore)); updateRegistryStatus(dmx.get(), RegistryStatus.UNCV, rgssToStore); - errs.add(new RgsErr(dmx.get(), biErr(dmx.get()))); + errs.add(new RgsErr(dmx.get(), biErr(dmx.get(), omtRgs))); } continue; } @@ -185,7 +186,7 @@ public class InspectionObligationsDepositReturnAction extends ReviseStage1Action continue; } else if (SessionType.XDEP.equals(sessionType)) { group.forEach(rgs -> updateRegistryStatus(rgs, registryStatusFailed(rgs), rgssToStore)); // для финальной UNCV or FAIL ; другие MNG - errs.add(new RgsErr(omtRgs, biErr(omtRgs))); + errs.add(new RgsErr(omtRgs, biErr(omtRgs, amfAsset, dmtInfo.get()))); // updateStatus(dmtInfo.get(), RegistryStatus.UNCV); не меняет статус, статус определяется OM*T continue; } @@ -205,7 +206,7 @@ public class InspectionObligationsDepositReturnAction extends ReviseStage1Action continue; } else if (SessionType.XDEP.equals(sessionType)) { group.forEach(rgs -> updateRegistryStatus(rgs, registryStatusFailed(rgs), rgssToStore)); - errs.add(new RgsErr(omtRgs, biErr(omtRgs))); + errs.add(new RgsErr(omtRgs, biErr(omtRgs, dmtClnr.get(), amfAsset))); // updateStatus(dmtClnr.get(), RegistryStatus.UNCV); не меняет статус, статус определяется OM*T continue; } @@ -235,10 +236,6 @@ public class InspectionObligationsDepositReturnAction extends ReviseStage1Action // planBalanceCalc.stageRevision2(sessionId); } - private static String biErr(Registry rgs) { - return "Недостаточно средств по инструменту " + rgs.getSecuritySymbol(); - } - private static boolean equalByRgs(RegistryTradingParams rgsParams, Registry rgs) { return rgsParams.equalByRegistry( IEnumKey.getEnumByKey(RegistryDesignation.class, rgs.getRegistryDesignation()), diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/InspectionObligationsV2Action.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/InspectionObligationsV2Action.java index 5e73cba9a..2e5ab3304 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/InspectionObligationsV2Action.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/InspectionObligationsV2Action.java @@ -40,6 +40,7 @@ import ru.spcex.clearing.session.stage.util.RegistryUtil; import ru.spcex.clearing.session.state.DataEnum; import ru.spcex.clearing.session.state.SsnEvent; import ru.spcex.clearing.session.state.model.RgsErr; +import static ru.spcex.clearing.util.ClearingUtil.biErr; import ru.spcex.platform.enumeration.RegistryDesignation; import ru.spcex.platform.enumeration.RegistryInstrumentType; import ru.spcex.platform.enumeration.RegistryStatus; @@ -169,7 +170,7 @@ public class InspectionObligationsV2Action extends ReviseStage1Action { msgResolver.resolve(new EnumMessage(ClearingError.InsecurityObligation, obligation.getCompanyId()))); isUncovered = true; } - if (isUncovered) errs.add(new RgsErr(obligation, biErr(obligation))); + if (isUncovered) errs.add(new RgsErr(obligation, biErr(obligation, asset))); checkResults.add(new CheckResult(obligation, isUncovered)); isUncovered = false; } @@ -285,10 +286,6 @@ public class InspectionObligationsV2Action extends ReviseStage1Action { ctx.getExtendedState().getVariables().put(DataEnum.inspectionObligationStashedRgs, rgssToStore); } - private static String biErr(Registry rgs) { - return "Недостаточно средств по инструменту " + rgs.getSecuritySymbol(); - } - private Registry copyF(Registry rgs) { Registry rgsF = rgs.clone(); RegistryManager.zeroState(rgsF); diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/util/ClearingUtil.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/util/ClearingUtil.java index 35294a2d2..ddbc1398a 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/util/ClearingUtil.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/util/ClearingUtil.java @@ -1,7 +1,11 @@ package ru.spcex.clearing.util; +import java.math.BigDecimal; import java.util.Map; +import java.util.function.Function; import ru.clearing.classes.statics.data.execution.ExecutionCommon; +import ru.clearing.classes.statics.data.registry.Registry; +import static ru.spcex.platform.utils.number.BigDecimalUtil.safeBD; public class ClearingUtil { public static Map castMap(Map m) { @@ -19,4 +23,32 @@ public class ClearingUtil { // } // } } + + public static String biErr(Registry rgs) { + return "Недостаточно средств по инструменту " + rgs.getSecuritySymbol(); + } + + public static String biErr(Registry obligation, Registry asset) { + if (asset == null) return biErr(obligation); + BigDecimal difference = safeBD(obligation.getBalance()) + .subtract(asset.getBalance()) + .abs(); + return "Недостаточно средств по инструменту " + + obligation.getSecuritySymbol() + + ", разница: " + difference; + } + + public static String biErr(Registry obligation, Registry asset1, Registry asset2) { + Function printErr = bd -> "Недостаточно средств по инструменту " + + obligation.getSecuritySymbol() + + ", разница: " + bd; + BigDecimal obligationBalance = safeBD(obligation.getBalance()); + Function diff = r -> obligationBalance.subtract(r.getBalance()).abs(); + BigDecimal assetBalance1 = safeBD(asset1.getBalance()); + if (assetBalance1.compareTo(obligationBalance) < 0) { + return printErr.apply(diff.apply(asset1)); + } else { + return printErr.apply(diff.apply(asset2)); + } + } }