пересчет F = T-B при снятии блокировок

This commit is contained in:
etreschenkov 2023-07-31 11:06:45 +03:00
parent 6883496845
commit a9c9f1d47f
5 changed files with 50 additions and 28 deletions

View file

@ -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));
}
}

View file

@ -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);

View file

@ -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());
}

View file

@ -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);

View file

@ -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,