SDF57 DM*T/DM*X запускают сессию по возвратам депозитов

перерасчет ассетов при проставлении ОК DM*V
This commit is contained in:
ialbert 2023-09-20 16:39:47 +03:00
parent 091dc2dc1d
commit d9e2796185
2 changed files with 23 additions and 2 deletions

View file

@ -19,6 +19,7 @@ import ru.spcex.clearing.platform.messaging.domain.cud.registry.RegistrySplitDep
import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate;
import ru.spcex.clearing.platform.messaging.service.Status;
import ru.spcex.clearing.service.integration.GatewayRequestCreator;
import ru.spcex.clearing.service.registry.AssetTBFProcessing;
import ru.spcex.clearing.service.schedule.TradingTimeService;
import ru.spcex.clearing.service.validation.ValidationStored;
import ru.spcex.clearing.session.stage.impl.GatewayRequester;
@ -66,6 +67,7 @@ public class RegistryService {
private final IMessageResolver msgResolver;
private final RequestHelper reqHelp;
private final UserRoleVerification rights;
private final AssetTBFProcessing assets;
public RegistryService(ImdgProvider imdgProvider,
@Qualifier("returnDepositValidator") Function<RegistryReturnDepositRequest, IValidator> returnDepositVal,
@ -73,7 +75,7 @@ public class RegistryService {
@Qualifier("splitDepositValidator") Function<RegistrySplitDepositActionRequest, IValidator> splitDepositActionVal,
@Qualifier("statusExtractValidator") Function<RegistryChangeStatusExtractRequest, IValidator> statusExtractVal,
GatewayRequester gateway, TradingTimeService tradingTimeService, NotificationSender notification, IMessageResolver msgResolver,
RequestHelper reqHelp, UserRoleVerification rights) {
RequestHelper reqHelp, UserRoleVerification rights, AssetTBFProcessing assets) {
this.imdgProvider = imdgProvider;
this.tradingClearingRegistryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class);
this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
@ -84,6 +86,7 @@ public class RegistryService {
this.gateway = gateway;
this.trdTime = tradingTimeService;
this.notification = notification;
this.assets = assets;
this.gateway.setName("RgsService|DM*V");
this.msgResolver = msgResolver;
this.reqHelp = reqHelp;
@ -214,6 +217,13 @@ public class RegistryService {
rgs.setRegistryStatus(payload.getRegistryStatus());
log.debug("changing registry.id={} status to {}", rgs.getId(), payload.getRegistryStatus());
registryImdg.update(rgs);
assets.searchMoneyByAccAndCompany(rgs.getCompanyId(), rgs.getAccountId())
.ifPresentOrElse(
astTrio -> assets.process(astTrio.a__b(),
astTrio.a__t(),
astTrio.a__f(),
BigDecimal.ZERO),
() -> log.error("RegistryChangeStatusExtractRequest rgs.id={} assets not found", rgs.getId()));
return reqHelp.success(req.getId());
}

View file

@ -23,6 +23,7 @@ import ru.spcex.clearing.platform.messaging.domain.Consts;
import ru.spcex.clearing.platform.messaging.domain.cud.balance.StatementRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.clearing.AssetOperationListRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.clearing.AssetOperationRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.schedule.LauncherCommandRequest;
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
import ru.spcex.clearing.service.AnltSearcher;
import ru.spcex.clearing.service.AssetTrio;
@ -57,6 +58,7 @@ import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.regex.Pattern;
@ -160,6 +162,7 @@ public class Sdf57Executor extends AbstractExecutor<SDf57> {
Long generationIdForGroup = imdgProvider.getImdgIdGenerator().nextId();
result.setChildGenerationId(generationIdForGroup);
log.info("SDF57 execution: sdf57 number={}, groupId={}", sdf.size(), sdf.stream().findFirst().map(SDf57::getGenerationId).orElse(null));
AtomicReference<Boolean> sessionIsNeededFlag = new AtomicReference<>(false);
for (SDf57 sdf57 : sdf) {
IValidator validator = sDf57Validator.apply(sdf57);
Optional<EnumMessage> error = validator.tillFirstError();
@ -268,7 +271,7 @@ public class Sdf57Executor extends AbstractExecutor<SDf57> {
//1. у stmt accountId 3021, addresseId 2610034, contract DT1000S001U/280623/8/7
//
Optional<Registry> dm__Found = RegistrySearch.builder(registryImdg)
.rgsCode(RegistryTradingParams.DM__)
.rgsCode(RegistryTradingParams.DM_T)
.companyId(company.getId())
.accountId(account.getId())
.contract(stmt.getContract())
@ -314,6 +317,7 @@ public class Sdf57Executor extends AbstractExecutor<SDf57> {
sdf57.getSpecif(),
om_t.getId(),
registryD.getId());
sessionIsNeededFlag.set(true);
} else if (tm_tFound.isPresent()) {
Registry tm_t = tm_tFound.get();
Registry registryD = copyRegD(tm_t, stmt, RegistryUnit.X);
@ -323,6 +327,7 @@ public class Sdf57Executor extends AbstractExecutor<SDf57> {
sdf57.getSpecif(),
tm_t.getId(),
registryD.getId());
sessionIsNeededFlag.set(true);
}
}
stmt.setOperationStatus(OperationStatus.Executed.getKey());
@ -410,6 +415,12 @@ public class Sdf57Executor extends AbstractExecutor<SDf57> {
statementDeb.map(stmt -> new StmtCmpAcc(stmt, companyDeb, accountDeb)).ifPresent(registersUpdate);
statementCred.map(stmt -> new StmtCmpAcc(stmt, companyCred, accountCred)).ifPresent(registersUpdate);
}
if (sessionIsNeededFlag.get()) {
LauncherCommandRequest sessionTask = new LauncherCommandRequest();
sessionTask.setSection(Section.MKR.getKey());
sessionTask.setSessionType(SessionType.XDEP.getKey());
kafka.sendRequestToQueue(Task.startOfClearing.topic(), sessionTask);
}
return result;
}