финальная МКР сессия фикс по блокировкам и проверке обязательств
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,
|
public AssetTrio createSAssets(Account acc,
|
||||||
String securitySymbol,
|
String securitySymbol,
|
||||||
Long securityId,
|
Long securityId,
|
||||||
|
|
|
||||||
|
|
@ -160,62 +160,41 @@ public class FormingPaymentInstructionReturnMkr implements ISessionStage {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
Optional<Registry> dmtClnr = rgsMng.searchDmtClrnNotOk(lm_t);
|
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()) {
|
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());
|
dmtClnr.get().setRegistryStatus(RegistryStatus.OK.getKey());
|
||||||
setUpdatedStoreInImdg(dmtClnr.get(), now);
|
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.company.ClearingMemberCategory;
|
||||||
import ru.clearing.classes.statics.data.registry.Registry;
|
import ru.clearing.classes.statics.data.registry.Registry;
|
||||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
|
import ru.spcex.clearing.service.registry.AssetTBFProcessing;
|
||||||
import ru.spcex.clearing.service.registry.RegistryManager;
|
import ru.spcex.clearing.service.registry.RegistryManager;
|
||||||
import ru.spcex.clearing.session.stage.ISessionStage;
|
import ru.spcex.clearing.session.stage.ISessionStage;
|
||||||
import ru.spcex.clearing.session.stage.StageResult;
|
import ru.spcex.clearing.session.stage.StageResult;
|
||||||
|
|
@ -38,12 +39,14 @@ public class InspectionObligationsDepositReturn implements ISessionStage {
|
||||||
private final Imdg<ClearingMemberCategory> categoryImdg;
|
private final Imdg<ClearingMemberCategory> categoryImdg;
|
||||||
private SessionType sessionType;
|
private SessionType sessionType;
|
||||||
private final RegistryManager rgsMng;
|
private final RegistryManager rgsMng;
|
||||||
|
private final AssetTBFProcessing assets;
|
||||||
|
|
||||||
@Autowired
|
@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.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
|
||||||
this.categoryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class);
|
this.categoryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class);
|
||||||
this.rgsMng = rgsMng;
|
this.rgsMng = rgsMng;
|
||||||
|
this.assets = assets;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -129,6 +132,7 @@ public class InspectionObligationsDepositReturn implements ISessionStage {
|
||||||
);
|
);
|
||||||
if (dmtBalance.compareTo(omtBalance) >= 0 && amfBalance.compareTo(omtBalance) >=0) {
|
if (dmtBalance.compareTo(omtBalance) >= 0 && amfBalance.compareTo(omtBalance) >=0) {
|
||||||
group.forEach(rgs -> updateStatus(rgs, RegistryStatus.OK));
|
group.forEach(rgs -> updateStatus(rgs, RegistryStatus.OK));
|
||||||
|
assets.processByAm_f(amfAsset, omtBalance.negate());
|
||||||
// updateStatus(dmtInfo.get(), RegistryStatus.POOL);
|
// updateStatus(dmtInfo.get(), RegistryStatus.POOL);
|
||||||
continue;
|
continue;
|
||||||
} else if (SessionType.XDEP.equals(sessionType)) {
|
} else if (SessionType.XDEP.equals(sessionType)) {
|
||||||
|
|
@ -147,6 +151,7 @@ public class InspectionObligationsDepositReturn implements ISessionStage {
|
||||||
);
|
);
|
||||||
if (dmtBalance.compareTo(omtBalance) >= 0 && amfBalance.compareTo(omtBalance) >= 0) {
|
if (dmtBalance.compareTo(omtBalance) >= 0 && amfBalance.compareTo(omtBalance) >= 0) {
|
||||||
group.forEach(rgs -> updateStatus(rgs, RegistryStatus.OK));
|
group.forEach(rgs -> updateStatus(rgs, RegistryStatus.OK));
|
||||||
|
assets.processByAm_f(amfAsset, omtBalance.negate());
|
||||||
continue;
|
continue;
|
||||||
} else if (SessionType.XDEP.equals(sessionType)) {
|
} else if (SessionType.XDEP.equals(sessionType)) {
|
||||||
group.forEach(rgs -> updateStatus(rgs, registryStatusFailed(rgs)));
|
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",
|
"FINL, initiator.category='V' and am*f > om*t: setting OK status to group",
|
||||||
omtRgs.getId());
|
omtRgs.getId());
|
||||||
group.forEach(rgs -> updateStatus(rgs, RegistryStatus.OK));
|
group.forEach(rgs -> updateStatus(rgs, RegistryStatus.OK));
|
||||||
|
assets.processByAm_f(amfAsset, omtBalance.negate());
|
||||||
} else {
|
} else {
|
||||||
log.info("OM*T.id={} -> no DM*X/DM*T(INFO/CLRN) registry found. setting {} status to group",
|
log.info("OM*T.id={} -> no DM*X/DM*T(INFO/CLRN) registry found. setting {} status to group",
|
||||||
omtRgs.getId(), registryStatusFailed());
|
omtRgs.getId(), registryStatusFailed());
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue