изменения по финальной МКР сессии:
1. перенесен шаг 5 из сессии по возврату депозитов. (отличие: при невыполнении условия на DM*X статус FAIL вместо MNG) 2. шаг 7 форм. PaymentInstruction: выпилил редактирование активов по обязательствам LM*T 3. шаг 7 форм. PaymentInstruction: пропускаем формирование если найден DM*X по обязательству
This commit is contained in:
parent
ef94bdc2fe
commit
19184c3a4a
3 changed files with 63 additions and 29 deletions
|
|
@ -38,7 +38,7 @@ public class FinalMkrSession extends AbstractSession implements InitializingBean
|
|||
private final ObligationAdmission obligationsAdmission;
|
||||
|
||||
private final InclusionObligations inclusionObligations;
|
||||
private final InspectionObligations inspectionObligations;
|
||||
private final InspectionObligationsDepositReturn inspectionObligations;
|
||||
private final FormingRegistersOnOS formingRegistersOnOS;
|
||||
private final FormingPaymentInstructionReturnMkr formingPaymentInstructionReturn;
|
||||
private final FormingPaymentInstructionDealsFinalMkr formingPaymentInstructionDeals;
|
||||
|
|
@ -64,7 +64,7 @@ public class FinalMkrSession extends AbstractSession implements InitializingBean
|
|||
FinishingSession finishingSession,
|
||||
EndStageNotification endStageNotification,
|
||||
IMessageResolver messageResolver,
|
||||
InspectionObligations inspectionObligations,
|
||||
InspectionObligationsDepositReturn inspectionObligations,
|
||||
@Qualifier("marketCodesForBn") Supplier<List<String>> marketCodes) {
|
||||
super(imdgProvider, messageResolver);
|
||||
this.balanceRevise = balanceRevise;
|
||||
|
|
|
|||
|
|
@ -99,32 +99,32 @@ public class FormingPaymentInstructionReturnMkr implements ISessionStage {
|
|||
.toList();
|
||||
log.debug("LM*T and CM*T size = {}", rgsAll.size());
|
||||
|
||||
List<Registry> obligationsByMoney = rgsAll.stream()
|
||||
.filter(registry -> equalsByRegistry(LM_T, registry))
|
||||
.toList();
|
||||
|
||||
log.debug("changing assets by LM*T");
|
||||
// List<Registry> obligationsByMoney = rgsAll.stream()
|
||||
// .filter(registry -> equalsByRegistry(LM_T, registry))
|
||||
// .toList();
|
||||
//
|
||||
// log.debug("changing assets by LM*T");
|
||||
//изменяем активы по обязательствам по деньгам (LM_T)
|
||||
for (Registry obligationByMoney : obligationsByMoney) {
|
||||
String sql = String.format("tradingClearingRegistryId = %s and companyId = %s",
|
||||
obligationByMoney.getTradingClearingRegistryId(), obligationByMoney.getCompanyId());
|
||||
Collection<Registry> relatedRegistries = registryImdg.getCollectionObjectsBySQL(sql);
|
||||
log.trace("found {} related registries (by tcrId&companyId) for LM*T.id={}",
|
||||
relatedRegistries.size(),
|
||||
obligationByMoney.getId());
|
||||
|
||||
for (Registry relatedRegistry : relatedRegistries) {
|
||||
if (equalsByRegistry(AM_F, relatedRegistry)) {
|
||||
relatedRegistry.setBalance(safeBD(relatedRegistry.getBalance()).subtract(safeBD(obligationByMoney.getBalance())));
|
||||
} else if (equalsByRegistry(AM_T, relatedRegistry)) {
|
||||
relatedRegistry.setSettledDebit(safeBD(relatedRegistry.getSettledDebit()).add(safeBD(obligationByMoney.getBalance())));
|
||||
} else if (equalsByRegistry(AM_B, relatedRegistry)) {
|
||||
relatedRegistry.setBalance(safeBD(relatedRegistry.getBalance()).add(safeBD(obligationByMoney.getBalance())));
|
||||
}
|
||||
log.trace("updated related registry.id={} for LM*T.id={}", relatedRegistry.getId(), obligationByMoney.getId());
|
||||
registryImdg.update(relatedRegistry);
|
||||
}
|
||||
}
|
||||
// for (Registry obligationByMoney : obligationsByMoney) {
|
||||
// String sql = String.format("tradingClearingRegistryId = %s and companyId = %s",
|
||||
// obligationByMoney.getTradingClearingRegistryId(), obligationByMoney.getCompanyId());
|
||||
// Collection<Registry> relatedRegistries = registryImdg.getCollectionObjectsBySQL(sql);
|
||||
// log.trace("found {} related registries (by tcrId&companyId) for LM*T.id={}",
|
||||
// relatedRegistries.size(),
|
||||
// obligationByMoney.getId());
|
||||
//
|
||||
// for (Registry relatedRegistry : relatedRegistries) {
|
||||
// if (equalsByRegistry(AM_F, relatedRegistry)) {
|
||||
// relatedRegistry.setBalance(safeBD(relatedRegistry.getBalance()).subtract(safeBD(obligationByMoney.getBalance())));
|
||||
// } else if (equalsByRegistry(AM_T, relatedRegistry)) {
|
||||
// relatedRegistry.setSettledDebit(safeBD(relatedRegistry.getSettledDebit()).add(safeBD(obligationByMoney.getBalance())));
|
||||
// } else if (equalsByRegistry(AM_B, relatedRegistry)) {
|
||||
// relatedRegistry.setBalance(safeBD(relatedRegistry.getBalance()).add(safeBD(obligationByMoney.getBalance())));
|
||||
// }
|
||||
// log.trace("updated related registry.id={} for LM*T.id={}", relatedRegistry.getId(), obligationByMoney.getId());
|
||||
// registryImdg.update(relatedRegistry);
|
||||
// }
|
||||
// }
|
||||
log.debug("changing assets by CM*T");
|
||||
List<Registry> requirementsByMoney = rgsAll.stream()
|
||||
.filter(registry -> equalsByRegistry(CM_T, registry))
|
||||
|
|
@ -149,9 +149,19 @@ public class FormingPaymentInstructionReturnMkr implements ISessionStage {
|
|||
List<Registry> allLiabilities = rgsAll
|
||||
.stream()
|
||||
.filter(registry -> RegistryDesignation.L.equalsByKey(registry.getRegistryDesignation()))
|
||||
.filter(obligation -> {
|
||||
Optional<Registry> dmx = searchDmx(obligation);
|
||||
if (dmx.isPresent()) {
|
||||
log.debug("LM*T#id={}, DM*X#id={} found, no action needed for group {}, skipping liability",
|
||||
obligation.getId(),
|
||||
obligation.getId(),
|
||||
obligation.getGroupId());
|
||||
}
|
||||
return dmx.isEmpty();
|
||||
})
|
||||
.toList();
|
||||
//todo сортировка if needed
|
||||
for (int i = 0; i < allLiabilities.size(); i++) {
|
||||
//сортировка чтобы найти сделки с одинаковыми направлениями и адресатами и схлопнуть в одну
|
||||
Registry lm_t = allLiabilities.get(i);
|
||||
if (lm_t == null) continue;
|
||||
LinkedList<Registry> relatedRegistries = new LinkedList<>();
|
||||
|
|
@ -194,6 +204,17 @@ public class FormingPaymentInstructionReturnMkr implements ISessionStage {
|
|||
return stageResult;
|
||||
}
|
||||
|
||||
/**
|
||||
* fixme duplicate
|
||||
*/
|
||||
private Optional<Registry> searchDmx(Registry rgs) {
|
||||
String sqlCondition = String.format("(%s) and companyId = %d",
|
||||
RegistryCodeSqlBuilder.getInstance(DM_X).build(),
|
||||
rgs.getCounterPartyId());
|
||||
Registry dmx = registryImdg.getSingleObjectBySQL(sqlCondition);
|
||||
return Optional.ofNullable(dmx);
|
||||
}
|
||||
|
||||
private void sendSdfs(List<PaymentInstruction> formedPaymentInstructions) {
|
||||
List<SDf03> sDf03Created = new ArrayList<>();
|
||||
List<SDf12> sDf12Created = new ArrayList<>();
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ import static ru.spcex.platform.utils.number.BigDecimalUtil.safeBD;
|
|||
public class InspectionObligationsDepositReturn implements ISessionStage {
|
||||
private final Logger log = LoggerFactory.getLogger(getClass());
|
||||
private final Imdg<Registry> registryImdg;
|
||||
private SessionType sessionType;
|
||||
|
||||
private final static RegistryTradingParams OS_T;
|
||||
private final static RegistryTradingParams OM_T;
|
||||
|
|
@ -122,7 +123,7 @@ public class InspectionObligationsDepositReturn implements ISessionStage {
|
|||
if (dmxBalance.compareTo(omtBalance) >= 0) {
|
||||
group.forEach(rgs -> updateStatus(rgs, RegistryStatus.OK));
|
||||
} else {
|
||||
group.forEach(rgs -> updateStatus(rgs, RegistryStatus.MNG));
|
||||
group.forEach(rgs -> updateStatus(rgs, registryStatusForDmxCheckFailed()));
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
|
@ -236,4 +237,16 @@ public class InspectionObligationsDepositReturn implements ISessionStage {
|
|||
IEnumKey.getEnumByKey(RegistryUnit.class, rgs.getRegistryUnit())
|
||||
);
|
||||
}
|
||||
|
||||
private RegistryStatus registryStatusForDmxCheckFailed() {
|
||||
if (SessionType.FINL.equals(sessionType)) {
|
||||
return RegistryStatus.FAIL;
|
||||
} else {
|
||||
return RegistryStatus.MNG;
|
||||
}
|
||||
}
|
||||
|
||||
public void setSessionType(SessionType sessionType) {
|
||||
this.sessionType = sessionType;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue