пересчет F = T-B при снятии блокировок
This commit is contained in:
parent
6883496845
commit
a9c9f1d47f
5 changed files with 50 additions and 28 deletions
|
|
@ -90,6 +90,26 @@ public class RegistryManager {
|
||||||
IEnumKey.getEnumByKey(RegistryCapacity.class, rgs.getRegistryCapacity()),
|
IEnumKey.getEnumByKey(RegistryCapacity.class, rgs.getRegistryCapacity()),
|
||||||
IEnumKey.getEnumByKey(RegistryUnit.class, rgs.getRegistryUnit())
|
IEnumKey.getEnumByKey(RegistryUnit.class, rgs.getRegistryUnit())
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Optional<Registry> findRegByUnit(Long companyId, Long accountId, String contract, Registry registry, RegistryUnit unit) {
|
||||||
|
RegistryTradingParams p = new RegistryTradingParams(
|
||||||
|
IEnumKey.getEnumByKey(RegistryDesignation.class, registry.getRegistryDesignation()),
|
||||||
|
IEnumKey.getEnumByKey(RegistryInstrumentType.class, registry.getRegistryInstrumentType()),
|
||||||
|
IEnumKey.getEnumByKey(RegistryCapacity.class, registry.getRegistryCapacity()),
|
||||||
|
unit
|
||||||
|
);
|
||||||
|
String sql = RegistryCodeSqlBuilder.getInstance(p).build();
|
||||||
|
ImdgPredicateBuilder pb = rgsImdg.predicateBuilder();
|
||||||
|
ImdgPredicate rgstrPredicate = pb.and(pb.sql(sql),
|
||||||
|
pb.sql(sql),
|
||||||
|
pb.equals("companyId", companyId),
|
||||||
|
pb.equals("accountId", accountId)
|
||||||
|
|
||||||
|
);
|
||||||
|
if (RegistryDesignation.D.equalsByKey(registry.getRegistryDesignation()) && !TextUtil.isEmpty(contract)) {
|
||||||
|
rgstrPredicate = pb.and(rgstrPredicate, pb.equals("contract", contract));
|
||||||
|
}
|
||||||
|
return Optional.ofNullable(rgsImdg.getSingleObjectByPredicate(rgstrPredicate));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -183,7 +183,6 @@ public class Sdf08Executor extends AbstractExecutor<SDf08> {
|
||||||
registryImdg.insert(registryB);
|
registryImdg.insert(registryB);
|
||||||
registryImdg.insert(registryF);
|
registryImdg.insert(registryF);
|
||||||
}
|
}
|
||||||
//todo
|
|
||||||
//2. отправить notification на backend
|
//2. отправить notification на backend
|
||||||
stmt.setOperationStatus(OperationStatus.Executed.getKey());
|
stmt.setOperationStatus(OperationStatus.Executed.getKey());
|
||||||
statementImdg.update(stmt);
|
statementImdg.update(stmt);
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ public enum STradesValidationRule implements IValidationRule<ImdgValidationConte
|
||||||
context.obtainMap(IMDGDistributedNames.Map_MoneyMarketSecurity, Security.class),
|
context.obtainMap(IMDGDistributedNames.Map_MoneyMarketSecurity, Security.class),
|
||||||
context.obtainMap(IMDGDistributedNames.Map_EquitySecurity, Security.class)
|
context.obtainMap(IMDGDistributedNames.Map_EquitySecurity, Security.class)
|
||||||
);
|
);
|
||||||
Security security = slctr.selectSecurityBySymbol(validatedObject.getSecCode());
|
Security security = slctr.selectSecurityBySymbol(validatedObject.getSecCode().trim());
|
||||||
if (security == null) {
|
if (security == null) {
|
||||||
return of(ClearingError.SecurityNotFound, validatedObject.getSecCode());
|
return of(ClearingError.SecurityNotFound, validatedObject.getSecCode());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -149,7 +149,6 @@ 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);
|
||||||
|
|
@ -162,7 +161,6 @@ 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);
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ import org.springframework.stereotype.Service;
|
||||||
import ru.clearing.classes.statics.data.registry.Registry;
|
import ru.clearing.classes.statics.data.registry.Registry;
|
||||||
import ru.spcex.clearing.error.ClearingError;
|
import ru.spcex.clearing.error.ClearingError;
|
||||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
|
import ru.spcex.clearing.service.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;
|
||||||
import ru.spcex.clearing.session.stage.Task;
|
import ru.spcex.clearing.session.stage.Task;
|
||||||
|
|
@ -36,13 +37,15 @@ import static ru.spcex.platform.enumeration.RegistryTradingParams.*;
|
||||||
public class InspectionObligations implements ISessionStage {
|
public class InspectionObligations 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 final RegistryManager registryManager;
|
||||||
private final IMessageResolver msgResolver = new SimpleMessageResolver();
|
private final IMessageResolver msgResolver = new SimpleMessageResolver();
|
||||||
private SessionType sessionType;
|
private SessionType sessionType;
|
||||||
private Section section;
|
private Section section;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public InspectionObligations(ImdgProvider imdgProvider) {
|
public InspectionObligations(ImdgProvider imdgProvider, RegistryManager registryManager) {
|
||||||
this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
|
this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
|
||||||
|
this.registryManager = registryManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setSessionType(SessionType sessionType) {
|
public void setSessionType(SessionType sessionType) {
|
||||||
|
|
@ -107,40 +110,42 @@ public class InspectionObligations implements ISessionStage {
|
||||||
isUncovered = false;
|
isUncovered = false;
|
||||||
}
|
}
|
||||||
defineStatusAndUpdateRegistry(checkResults, group);
|
defineStatusAndUpdateRegistry(checkResults, group);
|
||||||
if (checkResults.stream().allMatch(checkResult -> checkResult.isUncovered)) {
|
if (checkResults.stream().noneMatch(checkResult -> checkResult.isUncovered)) {
|
||||||
|
Instant now = Instant.now();
|
||||||
//по каждому регистру OM*T, TM*T, OS*T, TS*T из одной группы
|
//по каждому регистру 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) {
|
for (Registry registry : group) {
|
||||||
String securityBAssetSql = searchSecurityBAssetsSql(registry);
|
Registry blockedRegistry = null;
|
||||||
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) {
|
if (IEnumKey.getEnumByKey(RegistryInstrumentType.class, registry.getRegistryInstrumentType()) == RegistryInstrumentType.M) {
|
||||||
String moneyBAssetSql = searchMoneyBAssetsSql(registry);
|
String moneyBAssetSql = searchMoneyBAssetsSql(registry);
|
||||||
log.debug("search money asset by registry.id={} sql {}", registry.getId(), moneyBAssetSql);
|
log.debug("search money asset by registry.id={} sql {}", registry.getId(), moneyBAssetSql);
|
||||||
Registry moneyBAsset = registryImdg.getFirstObjectBySQL(moneyBAssetSql);
|
blockedRegistry = registryImdg.getFirstObjectBySQL(moneyBAssetSql);
|
||||||
if (IEnumKey.getEnumByKey(RegistryDesignation.class, registry.getRegistryDesignation()) == RegistryDesignation.O) {
|
if (IEnumKey.getEnumByKey(RegistryDesignation.class, registry.getRegistryDesignation()) == RegistryDesignation.O) {
|
||||||
moneyBAsset.setBalance(securityBAsset.getBalance().add(registry.getBalance()));
|
blockedRegistry.setBalance(blockedRegistry.getBalance().add(registry.getBalance()));
|
||||||
} else if (IEnumKey.getEnumByKey(RegistryDesignation.class, registry.getRegistryDesignation()) == RegistryDesignation.T) {
|
} else if (IEnumKey.getEnumByKey(RegistryDesignation.class, registry.getRegistryDesignation()) == RegistryDesignation.T) {
|
||||||
moneyBAsset.setBalance(securityBAsset.getBalance().subtract(registry.getBalance()));
|
blockedRegistry.setBalance(blockedRegistry.getBalance().subtract(registry.getBalance()));
|
||||||
}
|
}
|
||||||
registryImdg.update(moneyBAsset);
|
blockedRegistry.setUpdated(now);
|
||||||
|
registryImdg.update(blockedRegistry);
|
||||||
} else if (section != null && section == Section.FOND &&
|
} else if (section != null && section == Section.FOND &&
|
||||||
IEnumKey.getEnumByKey(RegistryInstrumentType.class, registry.getRegistryInstrumentType()) == RegistryInstrumentType.S) {
|
IEnumKey.getEnumByKey(RegistryInstrumentType.class, registry.getRegistryInstrumentType()) == RegistryInstrumentType.S) {
|
||||||
|
String securityBAssetSql = searchSecurityBAssetsSql(registry);
|
||||||
|
log.debug("search security asset by registry.id={} sql {}", registry.getId(), securityBAssetSql);
|
||||||
|
blockedRegistry = registryImdg.getFirstObjectBySQL(securityBAssetSql);
|
||||||
if (IEnumKey.getEnumByKey(RegistryDesignation.class, registry.getRegistryDesignation()) == RegistryDesignation.O) {
|
if (IEnumKey.getEnumByKey(RegistryDesignation.class, registry.getRegistryDesignation()) == RegistryDesignation.O) {
|
||||||
securityBAsset.setBalance(securityBAsset.getBalance().add(registry.getBalance()));
|
blockedRegistry.setBalance(blockedRegistry.getBalance().add(registry.getBalance()));
|
||||||
registryImdg.update(securityBAsset);
|
|
||||||
} else if (IEnumKey.getEnumByKey(RegistryDesignation.class, registry.getRegistryDesignation()) == RegistryDesignation.T) {
|
} else if (IEnumKey.getEnumByKey(RegistryDesignation.class, registry.getRegistryDesignation()) == RegistryDesignation.T) {
|
||||||
if (omt_registryOpt.isPresent()) {
|
blockedRegistry.setBalance(blockedRegistry.getBalance().subtract(registry.getBalance()));
|
||||||
Registry omtRegistry = omt_registryOpt.get();
|
}
|
||||||
String moneyBAssetSql = searchMoneyBAssetsSql(omtRegistry);
|
blockedRegistry.setUpdated(now);
|
||||||
log.debug("search money asset by registry.id={} sql {}", registry.getId(), moneyBAssetSql);
|
registryImdg.update(blockedRegistry);
|
||||||
Registry moneyBAsset = registryImdg.getFirstObjectBySQL(moneyBAssetSql);
|
}
|
||||||
moneyBAsset.setBalance(securityBAsset.getBalance().subtract(registry.getBalance()));
|
if (blockedRegistry != null) {
|
||||||
registryImdg.update(moneyBAsset);
|
Optional<Registry> registryUnitF = registryManager.findRegByUnit(registry.getCompanyId(), registry.getAccountId(), registry.getContract(), blockedRegistry, RegistryUnit.F);
|
||||||
}
|
Optional<Registry> registryUnitT = registryManager.findRegByUnit(registry.getCompanyId(), registry.getAccountId(), registry.getContract(), blockedRegistry, RegistryUnit.T);
|
||||||
|
if (registryUnitF.isPresent() && registryUnitT.isPresent()) {
|
||||||
|
registryUnitF.get().setBalance(registryUnitT.get().getBalance().subtract(blockedRegistry.getBalance()));
|
||||||
|
registryUnitF.get().setUpdated(now);
|
||||||
|
registryImdg.update(registryUnitF.get());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -156,7 +161,7 @@ public class InspectionObligations implements ISessionStage {
|
||||||
counterRegistryTradingParams = new RegistryTradingParams(RegistryDesignation.A,
|
counterRegistryTradingParams = new RegistryTradingParams(RegistryDesignation.A,
|
||||||
RegistryInstrumentType.S,
|
RegistryInstrumentType.S,
|
||||||
null,
|
null,
|
||||||
RegistryUnit.T);
|
RegistryUnit.F);
|
||||||
} else if (IEnumKey.getEnumByKey(RegistryInstrumentType.class, obligation.getRegistryInstrumentType()) == RegistryInstrumentType.M) {
|
} else if (IEnumKey.getEnumByKey(RegistryInstrumentType.class, obligation.getRegistryInstrumentType()) == RegistryInstrumentType.M) {
|
||||||
counterRegistryTradingParams = new RegistryTradingParams(RegistryDesignation.A,
|
counterRegistryTradingParams = new RegistryTradingParams(RegistryDesignation.A,
|
||||||
RegistryInstrumentType.M,
|
RegistryInstrumentType.M,
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue