пересчет 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(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(registryF);
|
||||
}
|
||||
//todo
|
||||
//2. отправить notification на backend
|
||||
stmt.setOperationStatus(OperationStatus.Executed.getKey());
|
||||
statementImdg.update(stmt);
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ public enum STradesValidationRule implements IValidationRule<ImdgValidationConte
|
|||
context.obtainMap(IMDGDistributedNames.Map_MoneyMarketSecurity, 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) {
|
||||
return of(ClearingError.SecurityNotFound, validatedObject.getSecCode());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -149,7 +149,6 @@ public class SecondaryAuctionT0Session extends AbstractSession implements Initia
|
|||
}
|
||||
//stage 5
|
||||
{
|
||||
//todo здесь
|
||||
InspectionPoolPayload companyIdPayload = new InspectionPoolPayload();
|
||||
companyIdPayload.setProcessedCompanyId(currSession.getCompanyId());
|
||||
runStage(TaskType.InspectionObligations, companyIdPayload, inspectionObligations);
|
||||
|
|
@ -162,7 +161,6 @@ public class SecondaryAuctionT0Session extends AbstractSession implements Initia
|
|||
}
|
||||
StageResult<Collection<PaymentInstruction>> returnsPayment = null;
|
||||
{
|
||||
//todo здесь
|
||||
FormingPaymentInstructionDealsMkrPayload payload = new FormingPaymentInstructionDealsMkrPayload();
|
||||
payload.setSessionId(currSession.getId());
|
||||
payload.setSendSdfs(false);
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ import org.springframework.stereotype.Service;
|
|||
import ru.clearing.classes.statics.data.registry.Registry;
|
||||
import ru.spcex.clearing.error.ClearingError;
|
||||
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.StageResult;
|
||||
import ru.spcex.clearing.session.stage.Task;
|
||||
|
|
@ -36,13 +37,15 @@ import static ru.spcex.platform.enumeration.RegistryTradingParams.*;
|
|||
public class InspectionObligations implements ISessionStage {
|
||||
private final Logger log = LoggerFactory.getLogger(getClass());
|
||||
private final Imdg<Registry> registryImdg;
|
||||
private final RegistryManager registryManager;
|
||||
private final IMessageResolver msgResolver = new SimpleMessageResolver();
|
||||
private SessionType sessionType;
|
||||
private Section section;
|
||||
|
||||
@Autowired
|
||||
public InspectionObligations(ImdgProvider imdgProvider) {
|
||||
public InspectionObligations(ImdgProvider imdgProvider, RegistryManager registryManager) {
|
||||
this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
|
||||
this.registryManager = registryManager;
|
||||
}
|
||||
|
||||
public void setSessionType(SessionType sessionType) {
|
||||
|
|
@ -107,40 +110,42 @@ public class InspectionObligations implements ISessionStage {
|
|||
isUncovered = false;
|
||||
}
|
||||
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 из одной группы
|
||||
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);
|
||||
Registry blockedRegistry = null;
|
||||
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);
|
||||
blockedRegistry = registryImdg.getFirstObjectBySQL(moneyBAssetSql);
|
||||
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) {
|
||||
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 &&
|
||||
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) {
|
||||
securityBAsset.setBalance(securityBAsset.getBalance().add(registry.getBalance()));
|
||||
registryImdg.update(securityBAsset);
|
||||
blockedRegistry.setBalance(blockedRegistry.getBalance().add(registry.getBalance()));
|
||||
} 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);
|
||||
}
|
||||
blockedRegistry.setBalance(blockedRegistry.getBalance().subtract(registry.getBalance()));
|
||||
}
|
||||
blockedRegistry.setUpdated(now);
|
||||
registryImdg.update(blockedRegistry);
|
||||
}
|
||||
if (blockedRegistry != null) {
|
||||
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,
|
||||
RegistryInstrumentType.S,
|
||||
null,
|
||||
RegistryUnit.T);
|
||||
RegistryUnit.F);
|
||||
} else if (IEnumKey.getEnumByKey(RegistryInstrumentType.class, obligation.getRegistryInstrumentType()) == RegistryInstrumentType.M) {
|
||||
counterRegistryTradingParams = new RegistryTradingParams(RegistryDesignation.A,
|
||||
RegistryInstrumentType.M,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue