From b7498399635b5c706a5e88de39bf6853ba4e14d5 Mon Sep 17 00:00:00 2001 From: ialbert Date: Tue, 26 Sep 2023 15:06:22 +0300 Subject: [PATCH] return deposit dm*x/dm*t --- .../clearing/service/RegistryService.java | 10 +++- .../service/registry/RegistryManager.java | 2 + .../ReturnDepositValidationRule.java | 58 ++++++++++--------- .../service/validation/ValidationStored.java | 2 +- 4 files changed, 41 insertions(+), 31 deletions(-) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/RegistryService.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/RegistryService.java index 619695f8f..d1d05f9ef 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/RegistryService.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/RegistryService.java @@ -20,6 +20,7 @@ import ru.spcex.clearing.platform.messaging.service.Status; import ru.spcex.clearing.service.builder.PaymentInstructionBuilderV2; import ru.spcex.clearing.service.integration.GatewayRequestCreator; import ru.spcex.clearing.service.registry.AssetTBFProcessing; +import ru.spcex.clearing.service.registry.RegistryManager; import ru.spcex.clearing.service.schedule.TradingTimeService; import ru.spcex.clearing.service.validation.ValidationStored; import ru.spcex.clearing.session.stage.impl.GatewayRequester; @@ -166,12 +167,14 @@ public class RegistryService { msgResolver.resolve(err.get())); return new RequestInfoUpdate(req.getId(), Status.Error, msgResolver.resolve(err.get())); } - Registry _m_t = validator.getStored(Stored.PresentById); + Registry _m_t = validator.getStored(ValidationStored.ReturnDepositOm_t); + if (_m_t == null) _m_t = validator.getStored(Stored.PresentById); + Registry dm__ = validator.getStored(ValidationStored.ReturnDepositDm__); if (dm__ != null) { dm__.setSessionId(null); dm__.setSessionType(null); - dm__.setBalance(requestPayload.getBalance()); + dm__.setBalance(safeBD(dm__.getBalance()).add(requestPayload.getBalance())); dm__.setUpdated(Instant.now()); registryImdg.update(dm__); log.debug("updated {}.id={} by RegistryReturnDepositRequest.id={}", @@ -181,13 +184,14 @@ public class RegistryService { } else { dm__ = _m_t.clone(); dm__.setRegistryDesignation(RegistryDesignation.D.getKey()); + RegistryManager.zeroState(dm__); if (RegistryDesignation.T.equalsByKey(_m_t.getRegistryDesignation())) { dm__.setRegistryUnit(RegistryUnit.X.getKey()); } else { dm__.setRegistryUnit(RegistryUnit.T.getKey()); } dm__.setRegistryCode(RegistryUtil.clearingCode(dm__)); - dm__.setBalance(requestPayload.getBalance()); + dm__.setBalance(safeBD(dm__.getBalance()).add(requestPayload.getBalance())); dm__.setSessionId(null); dm__.setSessionType(null); registryImdg.insert(dm__); diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/registry/RegistryManager.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/registry/RegistryManager.java index 5f316cc29..69c6ecba4 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/registry/RegistryManager.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/registry/RegistryManager.java @@ -183,6 +183,8 @@ public class RegistryManager { //балансы rgs.setBalance(BigDecimal.ZERO); rgs.setDebit(BigDecimal.ZERO); + rgs.setSettledDebit(BigDecimal.ZERO); + rgs.setSettledCredit(BigDecimal.ZERO); rgs.setCredit(BigDecimal.ZERO); rgs.setDiffBalance(BigDecimal.ZERO); rgs.setCheckBalance(BigDecimal.ZERO); diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/ReturnDepositValidationRule.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/ReturnDepositValidationRule.java index 421b59e1f..13b32dbe5 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/ReturnDepositValidationRule.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/ReturnDepositValidationRule.java @@ -5,16 +5,20 @@ import ru.clearing.classes.statics.data.registry.Registry; import ru.spcex.clearing.error.ClearingError; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.platform.messaging.domain.cud.registry.RegistryReturnDepositRequest; -import ru.spcex.platform.enumeration.*; +import ru.spcex.platform.enumeration.ClearingCategory; +import ru.spcex.platform.enumeration.RegistryStatus; +import ru.spcex.platform.enumeration.RegistryTradingParams; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder; import ru.spcex.platform.imdg.validation.ImdgValidationContext; import ru.spcex.platform.imdg.validation.Stored; import ru.spcex.platform.utils.enumeration.EnumMessage; +import ru.spcex.platform.utils.enumeration.IEnumKey; import ru.spcex.platform.utils.text.TextUtil; import ru.spcex.platform.utils.validation.IValidationRule; import java.math.BigDecimal; +import java.util.Collection; import java.util.Optional; import static ru.spcex.clearing.service.registry.RegistryManager.equalsByCode; @@ -36,7 +40,7 @@ public enum ReturnDepositValidationRule implements IValidationRule validate(ImdgValidationContext context) { Registry rgs = context.getStoredObject(Stored.PresentById); - if (!equalsByCode(RegistryTradingParams.TM_T, rgs) && !equalsByCode(RegistryTradingParams.OM_T, rgs)) { + if (!equalsByCode(RegistryTradingParams.TM_T, rgs)) { //!equalsByCode(RegistryTradingParams.OM_T, rgs) return of(ClearingError.RgsWrongCode, "{}.id={}", rgs.getRegistryCode(), rgs.getId()); } return empty(); @@ -46,35 +50,34 @@ public enum ReturnDepositValidationRule implements IValidationRule validate(ImdgValidationContext context) { Registry rgs = context.getStoredObject(Stored.PresentById); - ClearingCategory ctgr = null; - if (equalsByCode(RegistryTradingParams.TM_T, rgs)) { - ctgr = ClearingCategory.I; - } else { - ctgr = ClearingCategory.V; - } Imdg ctgImdg = context.obtainMap(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class); - ClearingMemberCategory category = - ctgImdg.getFirstObjectBySQL("companyId = %d and clearingMemberCategory = '%s'" - .formatted(rgs.getCompanyId(), ctgr.getKey())); - if (category == null) { - return of(ClearingError.CategoryNotFound, ctgr.getKey(), rgs.getCompanyId()); + Collection category = ctgImdg.getCollectionObjectsBySQL( + "companyId = %d".formatted(rgs.getCompanyId())); + + Optional ctgr = category.stream() + .map(c -> IEnumKey.getEnumByKey(ClearingCategory.class, c.getClearingMemberCategory())) + .filter(c -> ClearingCategory.V.equals(c) || ClearingCategory.I.equals(c)) + .findFirst(); + + if (ctgr.isEmpty()) { + return of(ClearingError.CategoryNotFound, "I/V", rgs.getCompanyId()); + } + if (ctgr.get().equals(ClearingCategory.V)) { + Imdg rgsImdg = context.obtainMap(IMDGDistributedNames.Map_Registry, Registry.class); + Collection group = rgsImdg.getCollectionObjectsBySQL("groupId = %d".formatted(rgs.getGroupId())); + Optional om_t = group.stream() + .filter(r -> r.getSettlementDate() != null) + .filter(r -> r.getValueDate() != null) + .filter(r -> r.getSettlementDate().isAfter(r.getValueDate())) + .filter(r -> equalsByCode(RegistryTradingParams.OM_T, r)) + .findFirst(); + if (om_t.isEmpty()) return of(ClearingError.RecordNotFound, "OM*T.groupId=%d".formatted(rgs.getGroupId())); + context.storeObject(ValidationStored.ReturnDepositOm_t, om_t.get()); } return empty(); } }, - @Deprecated - RegistryCodeCheck() { - @Override - public Optional validate(ImdgValidationContext context) { - Registry rgs = context.getStoredObject(Stored.PresentById); - if (!RegistryDesignation.T.equalsByKey(rgs.getRegistryDesignation()) - || !RegistryInstrumentType.M.equalsByKey(rgs.getRegistryInstrumentType()) - || !RegistryUnit.T.equalsByKey(rgs.getRegistryUnit())) { - return of(ClearingError.RecordNotFoundInDictionary, "TM*T", "Registry"); - } - return empty(); - } - }, BalanceCheck() { + BalanceCheck() { @Override public Optional validate(ImdgValidationContext context) { Registry rgs = context.getStoredObject(Stored.PresentById); @@ -90,7 +93,8 @@ public enum ReturnDepositValidationRule implements IValidationRule validate(ImdgValidationContext context) { - Registry rgs = context.getStoredObject(Stored.PresentById); + Registry rgs = context.getStoredObject(ValidationStored.ReturnDepositOm_t); + if (rgs == null) rgs = context.getStoredObject(Stored.PresentById); Imdg rgsImdg = context.obtainMap(IMDGDistributedNames.Map_Registry, Registry.class); if (TextUtil.isEmpty(rgs.getContract())) { return empty(); diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/ValidationStored.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/ValidationStored.java index a0ad7e8a8..057aecc58 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/ValidationStored.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/ValidationStored.java @@ -18,7 +18,7 @@ public enum ValidationStored { Sdf06Company, Sdf06Account, Sdf06Tcr, - ReturnDepositDm__, + ReturnDepositDm__, ReturnDepositOm_t, IdentificationFundsTcrSearch, IdentificationFundsAssetTrio,