return deposit dm*x/dm*t

This commit is contained in:
ialbert 2023-09-26 15:06:22 +03:00
parent 9a074addcf
commit b749839963
4 changed files with 41 additions and 31 deletions

View file

@ -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__);

View file

@ -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);

View file

@ -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<ImdgValidatio
@Override
public Optional<EnumMessage> validate(ImdgValidationContext<RegistryReturnDepositRequest> 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<ImdgValidatio
@Override
public Optional<EnumMessage> validate(ImdgValidationContext<RegistryReturnDepositRequest> context) {
Registry rgs = context.getStoredObject(Stored.PresentById);
ClearingCategory ctgr = null;
if (equalsByCode(RegistryTradingParams.TM_T, rgs)) {
ctgr = ClearingCategory.I;
} else {
ctgr = ClearingCategory.V;
}
Imdg<ClearingMemberCategory> 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<ClearingMemberCategory> category = ctgImdg.getCollectionObjectsBySQL(
"companyId = %d".formatted(rgs.getCompanyId()));
Optional<ClearingCategory> 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<Registry> rgsImdg = context.obtainMap(IMDGDistributedNames.Map_Registry, Registry.class);
Collection<Registry> group = rgsImdg.getCollectionObjectsBySQL("groupId = %d".formatted(rgs.getGroupId()));
Optional<Registry> 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<EnumMessage> validate(ImdgValidationContext<RegistryReturnDepositRequest> 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<EnumMessage> validate(ImdgValidationContext<RegistryReturnDepositRequest> context) {
Registry rgs = context.getStoredObject(Stored.PresentById);
@ -90,7 +93,8 @@ public enum ReturnDepositValidationRule implements IValidationRule<ImdgValidatio
}, Dm_Check() {
@Override
public Optional<EnumMessage> validate(ImdgValidationContext<RegistryReturnDepositRequest> context) {
Registry rgs = context.getStoredObject(Stored.PresentById);
Registry rgs = context.getStoredObject(ValidationStored.ReturnDepositOm_t);
if (rgs == null) rgs = context.getStoredObject(Stored.PresentById);
Imdg<Registry> rgsImdg = context.obtainMap(IMDGDistributedNames.Map_Registry, Registry.class);
if (TextUtil.isEmpty(rgs.getContract())) {
return empty();

View file

@ -18,7 +18,7 @@ public enum ValidationStored {
Sdf06Company, Sdf06Account, Sdf06Tcr,
ReturnDepositDm__,
ReturnDepositDm__, ReturnDepositOm_t,
IdentificationFundsTcrSearch, IdentificationFundsAssetTrio,