изменения по финальной МКР сессии:
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 ObligationAdmission obligationsAdmission;
|
||||||
|
|
||||||
private final InclusionObligations inclusionObligations;
|
private final InclusionObligations inclusionObligations;
|
||||||
private final InspectionObligations inspectionObligations;
|
private final InspectionObligationsDepositReturn inspectionObligations;
|
||||||
private final FormingRegistersOnOS formingRegistersOnOS;
|
private final FormingRegistersOnOS formingRegistersOnOS;
|
||||||
private final FormingPaymentInstructionReturnMkr formingPaymentInstructionReturn;
|
private final FormingPaymentInstructionReturnMkr formingPaymentInstructionReturn;
|
||||||
private final FormingPaymentInstructionDealsFinalMkr formingPaymentInstructionDeals;
|
private final FormingPaymentInstructionDealsFinalMkr formingPaymentInstructionDeals;
|
||||||
|
|
@ -64,7 +64,7 @@ public class FinalMkrSession extends AbstractSession implements InitializingBean
|
||||||
FinishingSession finishingSession,
|
FinishingSession finishingSession,
|
||||||
EndStageNotification endStageNotification,
|
EndStageNotification endStageNotification,
|
||||||
IMessageResolver messageResolver,
|
IMessageResolver messageResolver,
|
||||||
InspectionObligations inspectionObligations,
|
InspectionObligationsDepositReturn inspectionObligations,
|
||||||
@Qualifier("marketCodesForBn") Supplier<List<String>> marketCodes) {
|
@Qualifier("marketCodesForBn") Supplier<List<String>> marketCodes) {
|
||||||
super(imdgProvider, messageResolver);
|
super(imdgProvider, messageResolver);
|
||||||
this.balanceRevise = balanceRevise;
|
this.balanceRevise = balanceRevise;
|
||||||
|
|
|
||||||
|
|
@ -99,32 +99,32 @@ public class FormingPaymentInstructionReturnMkr implements ISessionStage {
|
||||||
.toList();
|
.toList();
|
||||||
log.debug("LM*T and CM*T size = {}", rgsAll.size());
|
log.debug("LM*T and CM*T size = {}", rgsAll.size());
|
||||||
|
|
||||||
List<Registry> obligationsByMoney = rgsAll.stream()
|
// List<Registry> obligationsByMoney = rgsAll.stream()
|
||||||
.filter(registry -> equalsByRegistry(LM_T, registry))
|
// .filter(registry -> equalsByRegistry(LM_T, registry))
|
||||||
.toList();
|
// .toList();
|
||||||
|
//
|
||||||
log.debug("changing assets by LM*T");
|
// log.debug("changing assets by LM*T");
|
||||||
//изменяем активы по обязательствам по деньгам (LM_T)
|
//изменяем активы по обязательствам по деньгам (LM_T)
|
||||||
for (Registry obligationByMoney : obligationsByMoney) {
|
// for (Registry obligationByMoney : obligationsByMoney) {
|
||||||
String sql = String.format("tradingClearingRegistryId = %s and companyId = %s",
|
// String sql = String.format("tradingClearingRegistryId = %s and companyId = %s",
|
||||||
obligationByMoney.getTradingClearingRegistryId(), obligationByMoney.getCompanyId());
|
// obligationByMoney.getTradingClearingRegistryId(), obligationByMoney.getCompanyId());
|
||||||
Collection<Registry> relatedRegistries = registryImdg.getCollectionObjectsBySQL(sql);
|
// Collection<Registry> relatedRegistries = registryImdg.getCollectionObjectsBySQL(sql);
|
||||||
log.trace("found {} related registries (by tcrId&companyId) for LM*T.id={}",
|
// log.trace("found {} related registries (by tcrId&companyId) for LM*T.id={}",
|
||||||
relatedRegistries.size(),
|
// relatedRegistries.size(),
|
||||||
obligationByMoney.getId());
|
// obligationByMoney.getId());
|
||||||
|
//
|
||||||
for (Registry relatedRegistry : relatedRegistries) {
|
// for (Registry relatedRegistry : relatedRegistries) {
|
||||||
if (equalsByRegistry(AM_F, relatedRegistry)) {
|
// if (equalsByRegistry(AM_F, relatedRegistry)) {
|
||||||
relatedRegistry.setBalance(safeBD(relatedRegistry.getBalance()).subtract(safeBD(obligationByMoney.getBalance())));
|
// relatedRegistry.setBalance(safeBD(relatedRegistry.getBalance()).subtract(safeBD(obligationByMoney.getBalance())));
|
||||||
} else if (equalsByRegistry(AM_T, relatedRegistry)) {
|
// } else if (equalsByRegistry(AM_T, relatedRegistry)) {
|
||||||
relatedRegistry.setSettledDebit(safeBD(relatedRegistry.getSettledDebit()).add(safeBD(obligationByMoney.getBalance())));
|
// relatedRegistry.setSettledDebit(safeBD(relatedRegistry.getSettledDebit()).add(safeBD(obligationByMoney.getBalance())));
|
||||||
} else if (equalsByRegistry(AM_B, relatedRegistry)) {
|
// } else if (equalsByRegistry(AM_B, relatedRegistry)) {
|
||||||
relatedRegistry.setBalance(safeBD(relatedRegistry.getBalance()).add(safeBD(obligationByMoney.getBalance())));
|
// relatedRegistry.setBalance(safeBD(relatedRegistry.getBalance()).add(safeBD(obligationByMoney.getBalance())));
|
||||||
}
|
// }
|
||||||
log.trace("updated related registry.id={} for LM*T.id={}", relatedRegistry.getId(), obligationByMoney.getId());
|
// log.trace("updated related registry.id={} for LM*T.id={}", relatedRegistry.getId(), obligationByMoney.getId());
|
||||||
registryImdg.update(relatedRegistry);
|
// registryImdg.update(relatedRegistry);
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
log.debug("changing assets by CM*T");
|
log.debug("changing assets by CM*T");
|
||||||
List<Registry> requirementsByMoney = rgsAll.stream()
|
List<Registry> requirementsByMoney = rgsAll.stream()
|
||||||
.filter(registry -> equalsByRegistry(CM_T, registry))
|
.filter(registry -> equalsByRegistry(CM_T, registry))
|
||||||
|
|
@ -149,9 +149,19 @@ public class FormingPaymentInstructionReturnMkr implements ISessionStage {
|
||||||
List<Registry> allLiabilities = rgsAll
|
List<Registry> allLiabilities = rgsAll
|
||||||
.stream()
|
.stream()
|
||||||
.filter(registry -> RegistryDesignation.L.equalsByKey(registry.getRegistryDesignation()))
|
.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();
|
.toList();
|
||||||
//todo сортировка if needed
|
|
||||||
for (int i = 0; i < allLiabilities.size(); i++) {
|
for (int i = 0; i < allLiabilities.size(); i++) {
|
||||||
|
//сортировка чтобы найти сделки с одинаковыми направлениями и адресатами и схлопнуть в одну
|
||||||
Registry lm_t = allLiabilities.get(i);
|
Registry lm_t = allLiabilities.get(i);
|
||||||
if (lm_t == null) continue;
|
if (lm_t == null) continue;
|
||||||
LinkedList<Registry> relatedRegistries = new LinkedList<>();
|
LinkedList<Registry> relatedRegistries = new LinkedList<>();
|
||||||
|
|
@ -194,6 +204,17 @@ public class FormingPaymentInstructionReturnMkr implements ISessionStage {
|
||||||
return stageResult;
|
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) {
|
private void sendSdfs(List<PaymentInstruction> formedPaymentInstructions) {
|
||||||
List<SDf03> sDf03Created = new ArrayList<>();
|
List<SDf03> sDf03Created = new ArrayList<>();
|
||||||
List<SDf12> sDf12Created = 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 {
|
public class InspectionObligationsDepositReturn implements ISessionStage {
|
||||||
private final Logger log = LoggerFactory.getLogger(getClass());
|
private final Logger log = LoggerFactory.getLogger(getClass());
|
||||||
private final Imdg<Registry> registryImdg;
|
private final Imdg<Registry> registryImdg;
|
||||||
|
private SessionType sessionType;
|
||||||
|
|
||||||
private final static RegistryTradingParams OS_T;
|
private final static RegistryTradingParams OS_T;
|
||||||
private final static RegistryTradingParams OM_T;
|
private final static RegistryTradingParams OM_T;
|
||||||
|
|
@ -122,7 +123,7 @@ public class InspectionObligationsDepositReturn implements ISessionStage {
|
||||||
if (dmxBalance.compareTo(omtBalance) >= 0) {
|
if (dmxBalance.compareTo(omtBalance) >= 0) {
|
||||||
group.forEach(rgs -> updateStatus(rgs, RegistryStatus.OK));
|
group.forEach(rgs -> updateStatus(rgs, RegistryStatus.OK));
|
||||||
} else {
|
} else {
|
||||||
group.forEach(rgs -> updateStatus(rgs, RegistryStatus.MNG));
|
group.forEach(rgs -> updateStatus(rgs, registryStatusForDmxCheckFailed()));
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
@ -236,4 +237,16 @@ public class InspectionObligationsDepositReturn implements ISessionStage {
|
||||||
IEnumKey.getEnumByKey(RegistryUnit.class, rgs.getRegistryUnit())
|
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