блокировка средств на активах, дополнительная логика для FOND секций
This commit is contained in:
parent
218c67bbf6
commit
72d9896fca
6 changed files with 74 additions and 1 deletions
|
|
@ -89,6 +89,7 @@ public class PrimaryAuctionB0Session extends AbstractSession implements Initiali
|
||||||
dealsPrepare.addExecutionFondCondition(execFondPb.regex("settlementCode", "^B0.*$"));
|
dealsPrepare.addExecutionFondCondition(execFondPb.regex("settlementCode", "^B0.*$"));
|
||||||
dealsPrepare.addExecutionFondCondition(execFondPb.in("market", marketCodes.get().toArray(new String[0])));
|
dealsPrepare.addExecutionFondCondition(execFondPb.in("market", marketCodes.get().toArray(new String[0])));
|
||||||
inclusionObligations.setSessionType(sessionType());
|
inclusionObligations.setSessionType(sessionType());
|
||||||
|
inspectionObligations.setSection(section());
|
||||||
imdgProvider.waitAvailable();
|
imdgProvider.waitAvailable();
|
||||||
initSessionIfPresent();
|
initSessionIfPresent();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -89,6 +89,7 @@ public class PrimaryAuctionBnSession extends AbstractSession implements Initiali
|
||||||
dealsPrepare.addExecutionFondCondition(execFondPb.regex("settlementCode", "^B\\d{2}$"));
|
dealsPrepare.addExecutionFondCondition(execFondPb.regex("settlementCode", "^B\\d{2}$"));
|
||||||
dealsPrepare.addExecutionFondCondition(execFondPb.in("market", marketCodes.get().toArray(new String[0])));
|
dealsPrepare.addExecutionFondCondition(execFondPb.in("market", marketCodes.get().toArray(new String[0])));
|
||||||
inclusionObligations.setSessionType(sessionType());
|
inclusionObligations.setSessionType(sessionType());
|
||||||
|
inspectionObligations.setSection(section());
|
||||||
imdgProvider.waitAvailable();
|
imdgProvider.waitAvailable();
|
||||||
initSessionIfPresent();
|
initSessionIfPresent();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -88,6 +88,7 @@ public class PrimaryAuctionT0Session extends AbstractSession implements Initiali
|
||||||
dealsPrepare.addExecutionFondCondition(execFondPb.regex("settlementCode", "^T0.*$"));
|
dealsPrepare.addExecutionFondCondition(execFondPb.regex("settlementCode", "^T0.*$"));
|
||||||
dealsPrepare.addExecutionFondCondition(execFondPb.in("market", marketCodes.get().toArray(new String[0])));
|
dealsPrepare.addExecutionFondCondition(execFondPb.in("market", marketCodes.get().toArray(new String[0])));
|
||||||
inclusionObligations.setSessionType(sessionType());
|
inclusionObligations.setSessionType(sessionType());
|
||||||
|
inspectionObligations.setSection(section());
|
||||||
imdgProvider.waitAvailable();
|
imdgProvider.waitAvailable();
|
||||||
initSessionIfPresent();
|
initSessionIfPresent();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,7 @@ import java.util.List;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
|
//todo эта сессия
|
||||||
public class SecondaryAuctionT0Session extends AbstractSession implements InitializingBean {
|
public class SecondaryAuctionT0Session extends AbstractSession implements InitializingBean {
|
||||||
private final Logger log = LoggerFactory.getLogger(getClass());
|
private final Logger log = LoggerFactory.getLogger(getClass());
|
||||||
private final BalanceRevise balanceRevise;
|
private final BalanceRevise balanceRevise;
|
||||||
|
|
@ -90,6 +91,7 @@ public class SecondaryAuctionT0Session extends AbstractSession implements Initia
|
||||||
dealsPrepare.addExecutionFondCondition(execFondPb.regex("settlementCode", "^T0.*$"));
|
dealsPrepare.addExecutionFondCondition(execFondPb.regex("settlementCode", "^T0.*$"));
|
||||||
dealsPrepare.addExecutionFondCondition(execFondPb.in("market", marketCodes.get().toArray(new String[0])));
|
dealsPrepare.addExecutionFondCondition(execFondPb.in("market", marketCodes.get().toArray(new String[0])));
|
||||||
inclusionObligations.setSessionType(sessionType());
|
inclusionObligations.setSessionType(sessionType());
|
||||||
|
inspectionObligations.setSection(section());
|
||||||
imdgProvider.waitAvailable();
|
imdgProvider.waitAvailable();
|
||||||
initSessionIfPresent();
|
initSessionIfPresent();
|
||||||
}
|
}
|
||||||
|
|
@ -147,6 +149,7 @@ public class SecondaryAuctionT0Session extends AbstractSession implements Initia
|
||||||
}
|
}
|
||||||
//stage 5
|
//stage 5
|
||||||
{
|
{
|
||||||
|
//todo здесь
|
||||||
InspectionPoolPayload companyIdPayload = new InspectionPoolPayload();
|
InspectionPoolPayload companyIdPayload = new InspectionPoolPayload();
|
||||||
companyIdPayload.setProcessedCompanyId(currSession.getCompanyId());
|
companyIdPayload.setProcessedCompanyId(currSession.getCompanyId());
|
||||||
runStage(TaskType.InspectionObligations, companyIdPayload, inspectionObligations);
|
runStage(TaskType.InspectionObligations, companyIdPayload, inspectionObligations);
|
||||||
|
|
@ -159,6 +162,7 @@ public class SecondaryAuctionT0Session extends AbstractSession implements Initia
|
||||||
}
|
}
|
||||||
StageResult<Collection<PaymentInstruction>> returnsPayment = null;
|
StageResult<Collection<PaymentInstruction>> returnsPayment = null;
|
||||||
{
|
{
|
||||||
|
//todo здесь
|
||||||
FormingPaymentInstructionDealsMkrPayload payload = new FormingPaymentInstructionDealsMkrPayload();
|
FormingPaymentInstructionDealsMkrPayload payload = new FormingPaymentInstructionDealsMkrPayload();
|
||||||
payload.setSessionId(currSession.getId());
|
payload.setSessionId(currSession.getId());
|
||||||
payload.setSendSdfs(false);
|
payload.setSendSdfs(false);
|
||||||
|
|
|
||||||
|
|
@ -38,6 +38,7 @@ public class InspectionObligations implements ISessionStage {
|
||||||
private final Imdg<Registry> registryImdg;
|
private final Imdg<Registry> registryImdg;
|
||||||
private final IMessageResolver msgResolver = new SimpleMessageResolver();
|
private final IMessageResolver msgResolver = new SimpleMessageResolver();
|
||||||
private SessionType sessionType;
|
private SessionType sessionType;
|
||||||
|
private Section section;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public InspectionObligations(ImdgProvider imdgProvider) {
|
public InspectionObligations(ImdgProvider imdgProvider) {
|
||||||
|
|
@ -48,6 +49,10 @@ public class InspectionObligations implements ISessionStage {
|
||||||
this.sessionType = sessionType;
|
this.sessionType = sessionType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setSection(Section section) {
|
||||||
|
this.section = section;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public StageResult submit(Task<?> task) {
|
public StageResult submit(Task<?> task) {
|
||||||
switch (task.getTaskType()) {
|
switch (task.getTaskType()) {
|
||||||
|
|
@ -102,6 +107,44 @@ public class InspectionObligations implements ISessionStage {
|
||||||
isUncovered = false;
|
isUncovered = false;
|
||||||
}
|
}
|
||||||
defineStatusAndUpdateRegistry(checkResults, group);
|
defineStatusAndUpdateRegistry(checkResults, group);
|
||||||
|
if (checkResults.stream().allMatch(checkResult -> checkResult.isUncovered)) {
|
||||||
|
//по каждому регистру OM*T, TM*T, OS*T, TS*T из одной группы
|
||||||
|
Optional<Registry> omt_registryOpt = group.stream().filter(registry ->
|
||||||
|
IEnumKey.getEnumByKey(RegistryDesignation.class, registry.getRegistryDesignation()) == RegistryDesignation.O
|
||||||
|
&& IEnumKey.getEnumByKey(RegistryInstrumentType.class, registry.getRegistryInstrumentType()) == RegistryInstrumentType.M)
|
||||||
|
.findFirst();
|
||||||
|
for (Registry registry : group) {
|
||||||
|
String securityBAssetSql = searchSecurityBAssetsSql(registry);
|
||||||
|
log.debug("search security asset by registry.id={} sql {}", registry.getId(), securityBAssetSql);
|
||||||
|
Registry securityBAsset = registryImdg.getFirstObjectBySQL(securityBAssetSql);
|
||||||
|
if (IEnumKey.getEnumByKey(RegistryInstrumentType.class, registry.getRegistryInstrumentType()) == RegistryInstrumentType.M) {
|
||||||
|
String moneyBAssetSql = searchMoneyBAssetsSql(registry);
|
||||||
|
log.debug("search money asset by registry.id={} sql {}", registry.getId(), moneyBAssetSql);
|
||||||
|
Registry moneyBAsset = registryImdg.getFirstObjectBySQL(moneyBAssetSql);
|
||||||
|
if (IEnumKey.getEnumByKey(RegistryDesignation.class, registry.getRegistryDesignation()) == RegistryDesignation.O) {
|
||||||
|
moneyBAsset.setBalance(securityBAsset.getBalance().add(registry.getBalance()));
|
||||||
|
} else if (IEnumKey.getEnumByKey(RegistryDesignation.class, registry.getRegistryDesignation()) == RegistryDesignation.T) {
|
||||||
|
moneyBAsset.setBalance(securityBAsset.getBalance().subtract(registry.getBalance()));
|
||||||
|
}
|
||||||
|
registryImdg.update(moneyBAsset);
|
||||||
|
} else if (section != null && section == Section.FOND &&
|
||||||
|
IEnumKey.getEnumByKey(RegistryInstrumentType.class, registry.getRegistryInstrumentType()) == RegistryInstrumentType.S) {
|
||||||
|
if (IEnumKey.getEnumByKey(RegistryDesignation.class, registry.getRegistryDesignation()) == RegistryDesignation.O) {
|
||||||
|
securityBAsset.setBalance(securityBAsset.getBalance().add(registry.getBalance()));
|
||||||
|
registryImdg.update(securityBAsset);
|
||||||
|
} else if (IEnumKey.getEnumByKey(RegistryDesignation.class, registry.getRegistryDesignation()) == RegistryDesignation.T) {
|
||||||
|
if (omt_registryOpt.isPresent()) {
|
||||||
|
Registry omtRegistry = omt_registryOpt.get();
|
||||||
|
String moneyBAssetSql = searchMoneyBAssetsSql(omtRegistry);
|
||||||
|
log.debug("search money asset by registry.id={} sql {}", registry.getId(), moneyBAssetSql);
|
||||||
|
Registry moneyBAsset = registryImdg.getFirstObjectBySQL(moneyBAssetSql);
|
||||||
|
moneyBAsset.setBalance(securityBAsset.getBalance().subtract(registry.getBalance()));
|
||||||
|
registryImdg.update(moneyBAsset);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return new StageResult(null, true);
|
return new StageResult(null, true);
|
||||||
|
|
@ -130,6 +173,28 @@ public class InspectionObligations implements ISessionStage {
|
||||||
return sqlCounterRegistryCondition;
|
return sqlCounterRegistryCondition;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String searchMoneyBAssetsSql(Registry obligation) {
|
||||||
|
return String.format("%s and " +
|
||||||
|
"tradingClearingRegistryId = '%s' and " +
|
||||||
|
"companyId = '%s' and " +
|
||||||
|
"accountId = %s",
|
||||||
|
RegistryCodeSqlBuilder.getInstance(AM_B).build(),
|
||||||
|
obligation.getTradingClearingRegistryId(),
|
||||||
|
obligation.getCompanyId(),
|
||||||
|
obligation.getAccountId());
|
||||||
|
}
|
||||||
|
|
||||||
|
private String searchSecurityBAssetsSql(Registry registry) {
|
||||||
|
return String.format("%s and " +
|
||||||
|
"tradingClearingRegistryId = '%s' and " +
|
||||||
|
"companyId = '%s' and " +
|
||||||
|
"accountId = %s",
|
||||||
|
RegistryCodeSqlBuilder.getInstance(AS_B).build(),
|
||||||
|
registry.getTradingClearingRegistryId(),
|
||||||
|
registry.getCompanyId(),
|
||||||
|
registry.getAccountId());
|
||||||
|
}
|
||||||
|
|
||||||
private void defineStatusAndUpdateRegistry(List<CheckResult> checkResults, List<Registry> registries) {
|
private void defineStatusAndUpdateRegistry(List<CheckResult> checkResults, List<Registry> registries) {
|
||||||
boolean isOneUncovered = checkResults.stream().anyMatch(checkResult -> checkResult.isUncovered);
|
boolean isOneUncovered = checkResults.stream().anyMatch(checkResult -> checkResult.isUncovered);
|
||||||
log.debug("groupId {}, uncovered: {}", registries.stream().findFirst().map(Registry::getGroupId).orElse(null), isOneUncovered);
|
log.debug("groupId {}, uncovered: {}", registries.stream().findFirst().map(Registry::getGroupId).orElse(null), isOneUncovered);
|
||||||
|
|
|
||||||
|
|
@ -106,7 +106,8 @@ public class RegistryFondBuilder implements IRegistryBuilder {
|
||||||
isMoney = false;
|
isMoney = false;
|
||||||
account = accountImdg.getSingleObjectByID(tcr.getDepoAccountId());
|
account = accountImdg.getSingleObjectByID(tcr.getDepoAccountId());
|
||||||
reg.setAccountId(tcr.getDepoAccountId());
|
reg.setAccountId(tcr.getDepoAccountId());
|
||||||
DepoAccount depoAccount = depoAccountImdg.getSingleObjectByID(tcr.getDepoAccountId());
|
DepoAccount depoAccount = depoAccountImdg.getFirstObjectByFieldValues(
|
||||||
|
Map.of("accountId", tcr.getDepoAccountId()));
|
||||||
if (depoAccount != null) {
|
if (depoAccount != null) {
|
||||||
capacityByAccount = depoAccount.getDepoAccountType();
|
capacityByAccount = depoAccount.getDepoAccountType();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue