финальная МКР сессия фикс по блокировкам и проверке обязательств
This commit is contained in:
parent
285f9b5188
commit
2a1dfad01b
3 changed files with 57 additions and 56 deletions
|
|
@ -97,6 +97,22 @@ public class AssetTBFProcessing {
|
|||
}
|
||||
}
|
||||
|
||||
public void processByAm_f(Registry am_f, BigDecimal sum) {
|
||||
Optional<Registry> am_b = rgsMng.findRegByUnit(am_f.getCompanyId(),
|
||||
am_f.getAccountId(),
|
||||
am_f.getContract(),
|
||||
am_f,
|
||||
RegistryUnit.B);
|
||||
Optional<Registry> am_t = rgsMng.findRegByUnit(am_f.getCompanyId(),
|
||||
am_f.getAccountId(),
|
||||
am_f.getContract(),
|
||||
am_f,
|
||||
RegistryUnit.T);
|
||||
if (am_b.isPresent() && am_t.isPresent()) {
|
||||
process(am_b.get(), am_t.get(), am_f, sum);
|
||||
}
|
||||
}
|
||||
|
||||
public AssetTrio createSAssets(Account acc,
|
||||
String securitySymbol,
|
||||
Long securityId,
|
||||
|
|
|
|||
|
|
@ -160,62 +160,41 @@ public class FormingPaymentInstructionReturnMkr implements ISessionStage {
|
|||
continue;
|
||||
}
|
||||
Optional<Registry> dmtClnr = rgsMng.searchDmtClrnNotOk(lm_t);
|
||||
Account tranAcc = accountImdg.getFirstObjectBySQL("accountType = '%s' and status = '%s' and processingSign = '%s'"
|
||||
.formatted(AccountType.Tran.getKey(), AccountStatus.ACTIVE.getKey(), Allowed.ALLOWED.getKey()));
|
||||
if (tranAcc == null) {
|
||||
return new StageResult<>(
|
||||
new EnumMessage(ClearingError.AccountNotPresent, "accountType = " + AccountType.Tran.getKey()),
|
||||
false);
|
||||
}
|
||||
{
|
||||
//изменение активов - блокируем средства беред отправкой sdf'ов
|
||||
Optional<Registry> receiverAmtO = rgsMng.findRelatedAsset(cm_t.getTradingClearingRegistryId(), cm_t.getCompanyId(), lm_t.getSecuritySymbol(), AM_B);
|
||||
log.debug("changing A* registers based on LM_T.id={} and CM_T.id={} found AM*T(receiver).id={}",
|
||||
lm_t.getId(),
|
||||
cm_t.getId(),
|
||||
receiverAmtO.map(Registry::getId).orElse(null)
|
||||
);
|
||||
receiverAmtO.ifPresent(amt -> {
|
||||
// у отправителя и получателя одинаково, см. в FormingPaymentInstruction
|
||||
amt.setSettledDebit(safeBD(amt.getSettledDebit()).add(safeBD(lm_t.getBalance())));
|
||||
setUpdatedStoreInImdg(amt, now);
|
||||
});
|
||||
}
|
||||
Pair<PaymentInstruction, PaymentInstruction> pmts = PaymentInstructionBuilderFinalMkrDeals.builder(imdgProvider)
|
||||
.lm_t(lm_t)
|
||||
.cm_t(cm_t)
|
||||
.tranAcc(tranAcc)
|
||||
.sessionId(sessionId)
|
||||
.paymentPurpose("Возврат депозита " + cm_t.getContract() + " по ТКР " + cm_t.getTradingClearingRegistry())
|
||||
.build();
|
||||
paymentInstructionImdg.insert(pmts.getFirst());
|
||||
paymentInstructionImdg.insert(pmts.getSecond());
|
||||
log.debug("LM*T#id={}, CM*T#id={} found, PaymentInstruction id={} and id={} created",
|
||||
lm_t.getId(), cm_t.getId(), pmts.getFirst().getId(), pmts.getSecond().getId());
|
||||
pmtCreated.add(pmts.getFirst());
|
||||
pmtCreated.add(pmts.getSecond());
|
||||
if (dmtClnr.isPresent()) {
|
||||
Account tranAcc = accountImdg.getFirstObjectBySQL("accountType = '%s' and status = '%s' and processingSign = '%s'"
|
||||
.formatted(AccountType.Tran.getKey(), AccountStatus.ACTIVE.getKey(), Allowed.ALLOWED.getKey()));
|
||||
if (tranAcc == null) {
|
||||
return new StageResult<>(
|
||||
new EnumMessage(ClearingError.AccountNotPresent, "accountType = " + AccountType.Tran.getKey()),
|
||||
false);
|
||||
}
|
||||
{
|
||||
//изменение активов - блокируем средства беред отправкой sdf'ов
|
||||
Optional<Registry> amfO = rgsMng.findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), lm_t.getSecuritySymbol(), AM_F);
|
||||
Optional<Registry> payerAmtO = rgsMng.findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), lm_t.getSecuritySymbol(), AM_T);
|
||||
Optional<Registry> ambO = rgsMng.findRelatedAsset(lm_t.getTradingClearingRegistryId(), lm_t.getCompanyId(), lm_t.getSecuritySymbol(), AM_B);
|
||||
Optional<Registry> receiverAmtO = rgsMng.findRelatedAsset(cm_t.getTradingClearingRegistryId(), cm_t.getCompanyId(), lm_t.getSecuritySymbol(), AM_B);
|
||||
log.debug("changing A* registers based on LM_T.id={} and CM_T.id={} found AM*F.id={}, AM*T.id={}, AM*B.id={}, AM*B.id={}",
|
||||
lm_t.getId(),
|
||||
cm_t.getId(),
|
||||
amfO.map(Registry::getId).orElse(null),
|
||||
payerAmtO.map(Registry::getId).orElse(null),
|
||||
ambO.map(Registry::getId).orElse(null),
|
||||
receiverAmtO.map(Registry::getId).orElse(null)
|
||||
);
|
||||
amfO.ifPresent(amf -> {
|
||||
amf.setBalance(safeBD(amf.getBalance()).subtract(safeBD(lm_t.getBalance())));
|
||||
setUpdatedStoreInImdg(amf, now);
|
||||
});
|
||||
payerAmtO.ifPresent(amt -> {
|
||||
amt.setSettledDebit(safeBD(amt.getSettledDebit()).add(safeBD(lm_t.getBalance())));
|
||||
setUpdatedStoreInImdg(amt, now);
|
||||
});
|
||||
ambO.ifPresent(amb -> {
|
||||
amb.setBalance(safeBD(amb.getBalance()).add(safeBD(lm_t.getBalance())));
|
||||
setUpdatedStoreInImdg(amb, now);
|
||||
});
|
||||
receiverAmtO.ifPresent(amt -> {
|
||||
// у отправителя и получателя одинаково, см. в FormingPaymentInstruction
|
||||
amt.setSettledDebit(safeBD(amt.getSettledDebit()).add(safeBD(lm_t.getBalance())));
|
||||
setUpdatedStoreInImdg(amt, now);
|
||||
});
|
||||
if (amfO.isPresent() && ambO.isPresent() && payerAmtO.isPresent()) {
|
||||
assets.process(ambO.get(), payerAmtO.get(), amfO.get(), lm_t.getBalance());
|
||||
}
|
||||
}
|
||||
Pair<PaymentInstruction, PaymentInstruction> pmts = PaymentInstructionBuilderFinalMkrDeals.builder(imdgProvider)
|
||||
.lm_t(lm_t)
|
||||
.cm_t(cm_t)
|
||||
.tranAcc(tranAcc)
|
||||
.sessionId(sessionId)
|
||||
.paymentPurpose("Возврат депозита " + cm_t.getContract() + " по ТКР " + cm_t.getTradingClearingRegistry())
|
||||
.build();
|
||||
paymentInstructionImdg.insert(pmts.getFirst());
|
||||
paymentInstructionImdg.insert(pmts.getSecond());
|
||||
log.debug("LM*T#id={}, CM*T#id={} found, PaymentInstruction id={} and id={} created",
|
||||
lm_t.getId(), cm_t.getId(), pmts.getFirst().getId(), pmts.getSecond().getId());
|
||||
pmtCreated.add(pmts.getFirst());
|
||||
pmtCreated.add(pmts.getSecond());
|
||||
dmtClnr.get().setRegistryStatus(RegistryStatus.OK.getKey());
|
||||
setUpdatedStoreInImdg(dmtClnr.get(), now);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ import org.springframework.stereotype.Service;
|
|||
import ru.clearing.classes.statics.data.company.ClearingMemberCategory;
|
||||
import ru.clearing.classes.statics.data.registry.Registry;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.clearing.service.registry.AssetTBFProcessing;
|
||||
import ru.spcex.clearing.service.registry.RegistryManager;
|
||||
import ru.spcex.clearing.session.stage.ISessionStage;
|
||||
import ru.spcex.clearing.session.stage.StageResult;
|
||||
|
|
@ -38,12 +39,14 @@ public class InspectionObligationsDepositReturn implements ISessionStage {
|
|||
private final Imdg<ClearingMemberCategory> categoryImdg;
|
||||
private SessionType sessionType;
|
||||
private final RegistryManager rgsMng;
|
||||
private final AssetTBFProcessing assets;
|
||||
|
||||
@Autowired
|
||||
public InspectionObligationsDepositReturn(ImdgProvider imdgProvider, RegistryManager rgsMng) {
|
||||
public InspectionObligationsDepositReturn(ImdgProvider imdgProvider, RegistryManager rgsMng, AssetTBFProcessing assets) {
|
||||
this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
|
||||
this.categoryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class);
|
||||
this.rgsMng = rgsMng;
|
||||
this.assets = assets;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -129,6 +132,7 @@ public class InspectionObligationsDepositReturn implements ISessionStage {
|
|||
);
|
||||
if (dmtBalance.compareTo(omtBalance) >= 0 && amfBalance.compareTo(omtBalance) >=0) {
|
||||
group.forEach(rgs -> updateStatus(rgs, RegistryStatus.OK));
|
||||
assets.processByAm_f(amfAsset, omtBalance.negate());
|
||||
// updateStatus(dmtInfo.get(), RegistryStatus.POOL);
|
||||
continue;
|
||||
} else if (SessionType.XDEP.equals(sessionType)) {
|
||||
|
|
@ -147,6 +151,7 @@ public class InspectionObligationsDepositReturn implements ISessionStage {
|
|||
);
|
||||
if (dmtBalance.compareTo(omtBalance) >= 0 && amfBalance.compareTo(omtBalance) >= 0) {
|
||||
group.forEach(rgs -> updateStatus(rgs, RegistryStatus.OK));
|
||||
assets.processByAm_f(amfAsset, omtBalance.negate());
|
||||
continue;
|
||||
} else if (SessionType.XDEP.equals(sessionType)) {
|
||||
group.forEach(rgs -> updateStatus(rgs, registryStatusFailed(rgs)));
|
||||
|
|
@ -162,6 +167,7 @@ public class InspectionObligationsDepositReturn implements ISessionStage {
|
|||
"FINL, initiator.category='V' and am*f > om*t: setting OK status to group",
|
||||
omtRgs.getId());
|
||||
group.forEach(rgs -> updateStatus(rgs, RegistryStatus.OK));
|
||||
assets.processByAm_f(amfAsset, omtBalance.negate());
|
||||
} else {
|
||||
log.info("OM*T.id={} -> no DM*X/DM*T(INFO/CLRN) registry found. setting {} status to group",
|
||||
omtRgs.getId(), registryStatusFailed());
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue