IPO0, FINL, MEDM

This commit is contained in:
ialbert 2023-09-07 19:36:10 +03:00
parent 0e19218728
commit 99e98f6a28
12 changed files with 140 additions and 105 deletions

View file

@ -121,11 +121,8 @@ public class Sdf04Executor extends AbstractExecutor<SDf04> {
Optional<Registry> registryUnitF = registryManager.findRegByUnit(registry.getCompanyId(), registry.getAccountId(), registry.getContract(), registry, RegistryUnit.F); Optional<Registry> registryUnitF = registryManager.findRegByUnit(registry.getCompanyId(), registry.getAccountId(), registry.getContract(), registry, RegistryUnit.F);
Optional<Registry> registryUnitT = registryManager.findRegByUnit(registry.getCompanyId(), registry.getAccountId(), registry.getContract(), registry, RegistryUnit.T); Optional<Registry> registryUnitT = registryManager.findRegByUnit(registry.getCompanyId(), registry.getAccountId(), registry.getContract(), registry, RegistryUnit.T);
if (registryUnitF.isPresent() && registryUnitT.isPresent()) { if (registryUnitF.isPresent() && registryUnitT.isPresent()) {
registryUnitF.get().setBalance(registryUnitT.get().getBalance().subtract(registry.getBalance())); assets.process(registry, registryUnitT.get(), registryUnitF.get(), BigDecimal.ZERO);
registryUnitF.get().setUpdated(now);
registryImdg.update(registryUnitF.get());
} }
registry.setUpdated(now); registry.setUpdated(now);
registryImdg.update(registry); registryImdg.update(registry);
}); });

View file

@ -28,7 +28,9 @@ import ru.spcex.clearing.service.LoggingService;
import ru.spcex.clearing.service.builder.RegistryBuilder; import ru.spcex.clearing.service.builder.RegistryBuilder;
import ru.spcex.clearing.service.integration.GatewayRequestCreator; import ru.spcex.clearing.service.integration.GatewayRequestCreator;
import ru.spcex.clearing.service.model.Result; import ru.spcex.clearing.service.model.Result;
import ru.spcex.clearing.service.registry.AssetTBFProcessing;
import ru.spcex.clearing.service.registry.DmiService; import ru.spcex.clearing.service.registry.DmiService;
import ru.spcex.clearing.service.registry.RegistryManager;
import ru.spcex.clearing.service.schedule.TradingTimeService; import ru.spcex.clearing.service.schedule.TradingTimeService;
import ru.spcex.clearing.service.validation.ValidationStored; import ru.spcex.clearing.service.validation.ValidationStored;
import ru.spcex.clearing.session.stage.util.RegistryUtil; import ru.spcex.clearing.session.stage.util.RegistryUtil;
@ -84,13 +86,14 @@ public class Sdf57Executor extends AbstractExecutor<SDf57> {
private final DmiService dmiService; private final DmiService dmiService;
private final TradingTimeService timeService; private final TradingTimeService timeService;
private final KafkaSender kafka; private final KafkaSender kafka;
private final AssetTBFProcessing assets;
private final Pattern pattern = Pattern.compile("№.*"); private final Pattern pattern = Pattern.compile("№.*");
public Sdf57Executor(@Qualifier("sdf57Validator") Function<SDf57, IValidator> sDf57Validator, public Sdf57Executor(@Qualifier("sdf57Validator") Function<SDf57, IValidator> sDf57Validator,
LoggingService errorLogger, LoggingService errorLogger,
ImdgProvider imdgProvider, ImdgProvider imdgProvider,
IMessageResolver errorResolver, AnltSearcher anltSearcher, IMessageResolver messageResolver, DmiService dmiService, TradingTimeService timeService, IMessageResolver errorResolver, AnltSearcher anltSearcher, IMessageResolver messageResolver, DmiService dmiService, TradingTimeService timeService,
@Qualifier("kafkaSenderWithoutRequestInfo") KafkaSender kafka) { @Qualifier("kafkaSenderWithoutRequestInfo") KafkaSender kafka, AssetTBFProcessing assets) {
this.statementImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Statement, Statement.class); this.statementImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Statement, Statement.class);
this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
this.sdf02Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf02, SDf02.class); this.sdf02Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf02, SDf02.class);
@ -110,6 +113,7 @@ public class Sdf57Executor extends AbstractExecutor<SDf57> {
this.dmiService = dmiService; this.dmiService = dmiService;
this.timeService = timeService; this.timeService = timeService;
this.kafka = kafka; this.kafka = kafka;
this.assets = assets;
} }
//todo доделать контроль sdf01 и sdf57 //todo доделать контроль sdf01 и sdf57
@ -206,23 +210,25 @@ public class Sdf57Executor extends AbstractExecutor<SDf57> {
updateReg(stmt, rgs); updateReg(stmt, rgs);
//добавил создание если не найдены //добавил создание если не найдены
Registry registryUnitB = findRegByUnit(company.getId(), account.getId(), stmt.getContract(), rgs, RegistryUnit.B).orElse(copyRegB(rgs)); Registry registryUnitB = findRegByUnit(company.getId(), account.getId(), stmt.getContract(), rgs, RegistryUnit.B).orElse(copyRegB(rgs));
Registry registryUnitF = findRegByUnit(company.getId(), account.getId(), stmt.getContract(), rgs, RegistryUnit.F).orElse(copyRegF(rgs, null)); //передаю null т.к. отнимется ниже по коду Registry registryUnitF = findRegByUnit(company.getId(), account.getId(), stmt.getContract(), rgs, RegistryUnit.F).orElse(copyRegF(rgs)); //передаю null т.к. отнимется ниже по коду
registryUnitF.setBalance(rgs.getBalance().subtract(registryUnitB.getBalance())); // registryUnitF.setBalance(rgs.getBalance().subtract(registryUnitB.getBalance()));
registryUnitF.setUpdated(Instant.now()); // registryUnitF.setUpdated(Instant.now());
//registry F всегда меняется //registry F всегда меняется
if (registryUnitF.getId() == null) { if (registryUnitF.getId() == null) {
registryImdg.insert(registryUnitF); registryImdg.insert(registryUnitF);
log.debug("stmt.id={}, new AM*F.id={}", stmt.getId(), registryUnitF.getId()); log.debug("stmt.id={}, new AM*F.id={}", stmt.getId(), registryUnitF.getId());
} else {
registryImdg.update(registryUnitF);
log.debug("stmt.id={}, updated AM*F.id={}", stmt.getId(), registryUnitF.getId());
} }
// else {
// registryImdg.update(registryUnitF);
// log.debug("stmt.id={}, updated AM*F.id={}", stmt.getId(), registryUnitF.getId());
// }
//нужно сохранить registry B только если его не было //нужно сохранить registry B только если его не было
if (registryUnitB.getId() == null) { if (registryUnitB.getId() == null) {
registryImdg.insert(registryUnitB); registryImdg.insert(registryUnitB);
log.debug("stmt.id={}, new AM*B.id={}", stmt.getId(), registryUnitB.getId()); log.debug("stmt.id={}, new AM*B.id={}", stmt.getId(), registryUnitB.getId());
} }
registryImdg.update(rgs); registryImdg.update(rgs);
assets.process(registryUnitB, rgs, registryUnitF, BigDecimal.ZERO);
log.debug("stmt.id={}, updated AM*T.id={}: balance {}/debit {}/ credit {}", log.debug("stmt.id={}, updated AM*T.id={}: balance {}/debit {}/ credit {}",
stmt.getId(), stmt.getId(),
rgs.getId(), rgs.getId(),
@ -239,7 +245,7 @@ public class Sdf57Executor extends AbstractExecutor<SDf57> {
.build(); .build();
calcBalance(registry, stmt); calcBalance(registry, stmt);
Registry registryB = copyRegB(registry); Registry registryB = copyRegB(registry);
Registry registryF = copyRegF(registry, registryB.getBalance()); Registry registryF = copyRegF(registry);
registryImdg.insert(registry); registryImdg.insert(registry);
registryImdg.insert(registryF); registryImdg.insert(registryF);
@ -412,24 +418,18 @@ public class Sdf57Executor extends AbstractExecutor<SDf57> {
private Registry copyRegB(Registry rgs) { private Registry copyRegB(Registry rgs) {
Registry rgsB = rgs.clone(); Registry rgsB = rgs.clone();
RegistryManager.zeroState(rgsB);
rgsB.setRegistryUnit(RegistryUnit.B.getKey()); rgsB.setRegistryUnit(RegistryUnit.B.getKey());
rgsB.setRegistryCode(RegistryUtil.clearingCode(rgsB)); rgsB.setRegistryCode(RegistryUtil.clearingCode(rgsB));
rgsB.setBalance(BigDecimal.ZERO);
rgsB.setDebit(BigDecimal.ZERO);
rgsB.setCredit(BigDecimal.ZERO);
rgsB.setDiffBalance(BigDecimal.ZERO);
rgsB.setCheckBalance(BigDecimal.ZERO);
return rgsB; return rgsB;
} }
private Registry copyRegF(Registry rgs, BigDecimal rgsBBalance) { private Registry copyRegF(Registry rgs) {
Registry rgsF = rgs.clone(); Registry rgsF = rgs.clone();
RegistryManager.zeroState(rgsF);
rgsF.setRegistryUnit(RegistryUnit.F.getKey()); rgsF.setRegistryUnit(RegistryUnit.F.getKey());
rgsF.setRegistryCode(RegistryUtil.clearingCode(rgsF)); rgsF.setRegistryCode(RegistryUtil.clearingCode(rgsF));
rgsF.setBalance(safeBD(rgs.getBalance()).subtract(safeBD(rgsBBalance))); rgsF.setBalance(safeBD(rgs.getBalance()));
rgsF.setCredit(BigDecimal.ZERO);
rgsF.setDiffBalance(BigDecimal.ZERO);
rgsF.setCheckBalance(BigDecimal.ZERO);
return rgsF; return rgsF;
} }

View file

@ -183,6 +183,7 @@ public class RegistryManager {
rgs.setCredit(BigDecimal.ZERO); rgs.setCredit(BigDecimal.ZERO);
rgs.setDiffBalance(BigDecimal.ZERO); rgs.setDiffBalance(BigDecimal.ZERO);
rgs.setCheckBalance(BigDecimal.ZERO); rgs.setCheckBalance(BigDecimal.ZERO);
rgs.setPlanBalance(BigDecimal.ZERO);
} }

View file

@ -139,15 +139,17 @@ public class FinalMkrSession extends AbstractSession implements InitializingBean
if (firstReviseMonitor != null && isMonitorPassed(firstReviseMonitor, req.getRequestPayload())) { if (firstReviseMonitor != null && isMonitorPassed(firstReviseMonitor, req.getRequestPayload())) {
firstReviseMonitor = null; firstReviseMonitor = null;
firstPart(); firstPart();
return;
} }
if (afterPaymentsSdf4Monitor != null && isMonitorPassed(afterPaymentsSdf4Monitor, req.getRequestPayload())) { if (afterPaymentsSdf4Monitor != null && isMonitorPassed(afterPaymentsSdf4Monitor, req.getRequestPayload())) {
afterPaymentsSdf4Monitor = null; afterPaymentsSdf4Monitor = null;
sendSdf56();
}
if (afterPaymentsReviseMonitor != null && isMonitorPassed(afterPaymentsReviseMonitor, req.getRequestPayload())) {
afterPaymentsReviseMonitor = null;
finishPart(); finishPart();
return;
} }
//if (afterPaymentsReviseMonitor != null && isMonitorPassed(afterPaymentsReviseMonitor, req.getRequestPayload())) {
// afterPaymentsReviseMonitor = null;
// finishPart();
//}
} catch (StageException e) { } catch (StageException e) {
//already logged //already logged
} }
@ -211,11 +213,13 @@ public class FinalMkrSession extends AbstractSession implements InitializingBean
paymentResult = runStage(TaskType.FormingPaymentInstruction, payload, formingPaymentInstructionDeals); paymentResult = runStage(TaskType.FormingPaymentInstruction, payload, formingPaymentInstructionDeals);
} }
if (paymentResult.getStageResult().getPaymentInstructions().isEmpty()) { if (paymentResult.getStageResult().getPaymentInstructions().isEmpty()) {
log.info("no payment instructions were created, sending SDF56"); log.info("no payment instructions were created");
sendSdf56(); finishPart();
} else { } else {
log.info("created {} PaymentInstructions, waiting for SDF04", paymentResult.getStageResult().getPaymentInstructions().size()); this.afterPaymentsSdf4Monitor = SessionMonitorFactory.waitStep7(section());
this.afterPaymentsSdf4Monitor = SessionMonitorFactory.paymentsWereCreated(section()); log.info("created {} PaymentInstructions, waiting for {}",
paymentResult.getStageResult().getPaymentInstructions().size(),
this.afterPaymentsSdf4Monitor.allConditions());
} }
} catch (StageException e) { } catch (StageException e) {
//already logged //already logged

View file

@ -133,15 +133,17 @@ public class IntermediateMkrSession extends AbstractSession implements Initializ
if (firstReviseMonitor != null && isMonitorPassed(firstReviseMonitor, req.getRequestPayload())) { if (firstReviseMonitor != null && isMonitorPassed(firstReviseMonitor, req.getRequestPayload())) {
firstReviseMonitor = null; firstReviseMonitor = null;
firstPart(); firstPart();
return;
} }
if (afterPaymentsSdf4Monitor != null && isMonitorPassed(afterPaymentsSdf4Monitor, req.getRequestPayload())) { if (afterPaymentsSdf4Monitor != null && isMonitorPassed(afterPaymentsSdf4Monitor, req.getRequestPayload())) {
afterPaymentsSdf4Monitor = null; afterPaymentsSdf4Monitor = null;
sendSdf56();
}
if (afterPaymentsReviseMonitor != null && isMonitorPassed(afterPaymentsReviseMonitor, req.getRequestPayload())) {
afterPaymentsReviseMonitor = null;
finishPart(); finishPart();
return;
} }
//if (afterPaymentsReviseMonitor != null && isMonitorPassed(afterPaymentsReviseMonitor, req.getRequestPayload())) {
// afterPaymentsReviseMonitor = null;
// finishPart();
//}
} catch (StageException e) { } catch (StageException e) {
//already logged //already logged
} }
@ -195,11 +197,13 @@ public class IntermediateMkrSession extends AbstractSession implements Initializ
paymentResult = runStage(TaskType.FormingPaymentInstruction, payload, formingPaymentInstructionDeals); paymentResult = runStage(TaskType.FormingPaymentInstruction, payload, formingPaymentInstructionDeals);
} }
if (paymentResult.getStageResult().getPaymentInstructions().isEmpty()) { if (paymentResult.getStageResult().getPaymentInstructions().isEmpty()) {
log.info("no payment instructions were created, sending SDF56"); log.info("no payment instructions were created");
sendSdf56(); finishPart();
} else { } else {
log.info("created {} PaymentInstructions, waiting for SDF04", paymentResult.getStageResult().getPaymentInstructions().size()); this.afterPaymentsSdf4Monitor = SessionMonitorFactory.waitStep7(section());
this.afterPaymentsSdf4Monitor = SessionMonitorFactory.paymentsWereCreated(section()); log.info("created {} PaymentInstructions, waiting for {}",
paymentResult.getStageResult().getPaymentInstructions().size(),
this.afterPaymentsSdf4Monitor.allConditions());
} }
} catch (StageException e) { } catch (StageException e) {
//already logged //already logged

View file

@ -127,15 +127,17 @@ public class PrimaryAuctionB0Session extends AbstractSession implements Initiali
if (firstReviseMonitor != null && isMonitorPassed(firstReviseMonitor, req.getRequestPayload())) { if (firstReviseMonitor != null && isMonitorPassed(firstReviseMonitor, req.getRequestPayload())) {
firstReviseMonitor = null; firstReviseMonitor = null;
firstPart(); firstPart();
return;
} }
if (afterPaymentsSdf4And13Monitor != null && isMonitorPassed(afterPaymentsSdf4And13Monitor, req.getRequestPayload())) { if (afterPaymentsSdf4And13Monitor != null && isMonitorPassed(afterPaymentsSdf4And13Monitor, req.getRequestPayload())) {
afterPaymentsSdf4And13Monitor = null; afterPaymentsSdf4And13Monitor = null;
sendSdf56();
}
if (afterPaymentsReviseMonitor != null && isMonitorPassed(afterPaymentsReviseMonitor, req.getRequestPayload())) {
afterPaymentsReviseMonitor = null;
finishPart(); finishPart();
return;
} }
//if (afterPaymentsReviseMonitor != null && isMonitorPassed(afterPaymentsReviseMonitor, req.getRequestPayload())) {
// afterPaymentsReviseMonitor = null;
// finishPart();
//}
} catch (StageException e) { } catch (StageException e) {
//already logged //already logged
} }
@ -187,11 +189,13 @@ public class PrimaryAuctionB0Session extends AbstractSession implements Initiali
paymentResult = runStage(TaskType.FormingPaymentInstruction, payload, formingPaymentInstruction); paymentResult = runStage(TaskType.FormingPaymentInstruction, payload, formingPaymentInstruction);
} }
if (paymentResult.getStageResult().isEmpty()) { if (paymentResult.getStageResult().isEmpty()) {
log.info("no payment instructions were created, sending SDF56"); log.info("no payment instructions were created");
sendSdf56(); finishPart();
} else { } else {
log.info("created {} PaymentInstructions, waiting for SDF04/SDF13", paymentResult.getStageResult().size()); this.afterPaymentsSdf4And13Monitor = SessionMonitorFactory.waitStep7(section());
this.afterPaymentsSdf4And13Monitor = SessionMonitorFactory.paymentsWereCreated(section()); log.info("created {} PaymentInstructions, waiting for {}",
paymentResult.getStageResult().size(),
this.afterPaymentsSdf4And13Monitor.allConditions());
} }
} catch (StageException e) { } catch (StageException e) {
//already logged //already logged

View file

@ -22,6 +22,7 @@ import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
import ru.spcex.clearing.service.SpecifUtil; import ru.spcex.clearing.service.SpecifUtil;
import ru.spcex.clearing.service.builder.PaymentInstructionBuilder; import ru.spcex.clearing.service.builder.PaymentInstructionBuilder;
import ru.spcex.clearing.service.builder.PaymentInstructionBuilderFinalMkrDeals; import ru.spcex.clearing.service.builder.PaymentInstructionBuilderFinalMkrDeals;
import ru.spcex.clearing.service.registry.AssetTBFProcessing;
import ru.spcex.clearing.service.registry.RegistryManager; import ru.spcex.clearing.service.registry.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;
@ -62,12 +63,14 @@ public class FormingPaymentInstructionReturnMkr implements ISessionStage {
private Imdg<Company> companyImdg; private Imdg<Company> companyImdg;
private Imdg<SDf03> sDf03Imdg; private Imdg<SDf03> sDf03Imdg;
private Imdg<SDf12> sDf12Imdg; private Imdg<SDf12> sDf12Imdg;
private final AssetTBFProcessing assets;
private KafkaSender kafkaSender; private KafkaSender kafkaSender;
private final RegistryManager rgsMng; private final RegistryManager rgsMng;
@Autowired @Autowired
public FormingPaymentInstructionReturnMkr(ImdgProvider imdgProvider, public FormingPaymentInstructionReturnMkr(ImdgProvider imdgProvider,
KafkaSender kafkaSender, RegistryManager rgsMng) { AssetTBFProcessing assets, KafkaSender kafkaSender, RegistryManager rgsMng) {
this.assets = assets;
this.kafkaSender = kafkaSender; this.kafkaSender = kafkaSender;
this.imdgProvider = imdgProvider; this.imdgProvider = imdgProvider;
this.idGenerator = imdgProvider.getImdgIdGenerator(); this.idGenerator = imdgProvider.getImdgIdGenerator();
@ -196,6 +199,9 @@ public class FormingPaymentInstructionReturnMkr implements ISessionStage {
amt.setSettledDebit(safeBD(amt.getSettledDebit()).add(safeBD(lm_t.getBalance()))); amt.setSettledDebit(safeBD(amt.getSettledDebit()).add(safeBD(lm_t.getBalance())));
setUpdatedStoreInImdg(amt, now); setUpdatedStoreInImdg(amt, now);
}); });
if (amfO.isPresent() && ambO.isPresent() && payerAmtO.isPresent()) {
assets.process(ambO.get(), payerAmtO.get(), amfO.get(), lm_t.getBalance());
}
} }
Pair<PaymentInstruction, PaymentInstruction> pmts = PaymentInstructionBuilderFinalMkrDeals.builder(imdgProvider) Pair<PaymentInstruction, PaymentInstruction> pmts = PaymentInstructionBuilderFinalMkrDeals.builder(imdgProvider)
.lm_t(lm_t) .lm_t(lm_t)

View file

@ -11,6 +11,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.registry.AssetTBFProcessing;
import ru.spcex.clearing.service.registry.RegistryManager; import ru.spcex.clearing.service.registry.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;
@ -27,6 +28,7 @@ import ru.spcex.platform.utils.enumeration.IEnumKey;
import ru.spcex.platform.utils.enumeration.IMessageResolver; import ru.spcex.platform.utils.enumeration.IMessageResolver;
import ru.spcex.platform.utils.enumeration.SimpleMessageResolver; import ru.spcex.platform.utils.enumeration.SimpleMessageResolver;
import java.math.BigDecimal;
import java.time.Instant; import java.time.Instant;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.*; import java.util.*;
@ -45,11 +47,13 @@ public class InspectionObligations implements ISessionStage {
private final IMessageResolver msgResolver = new SimpleMessageResolver(); private final IMessageResolver msgResolver = new SimpleMessageResolver();
private SessionType sessionType; private SessionType sessionType;
private Section section; private Section section;
private final AssetTBFProcessing assets;
@Autowired @Autowired
public InspectionObligations(ImdgProvider imdgProvider, RegistryManager registryManager) { public InspectionObligations(ImdgProvider imdgProvider, RegistryManager registryManager, AssetTBFProcessing assets) {
this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
this.registryManager = registryManager; this.registryManager = registryManager;
this.assets = assets;
} }
public void setSessionType(SessionType sessionType) { public void setSessionType(SessionType sessionType) {
@ -150,9 +154,7 @@ public class InspectionObligations implements ISessionStage {
Optional<Registry> registryUnitF = registryManager.findRegByUnit(registry.getCompanyId(), registry.getAccountId(), registry.getContract(), blockedRegistry, RegistryUnit.F); 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); Optional<Registry> registryUnitT = registryManager.findRegByUnit(registry.getCompanyId(), registry.getAccountId(), registry.getContract(), blockedRegistry, RegistryUnit.T);
if (registryUnitF.isPresent() && registryUnitT.isPresent()) { if (registryUnitF.isPresent() && registryUnitT.isPresent()) {
registryUnitF.get().setBalance(registryUnitT.get().getBalance().subtract(blockedRegistry.getBalance())); assets.process(blockedRegistry, registryUnitT.get(), registryUnitF.get(), BigDecimal.ZERO);
registryUnitF.get().setUpdated(now);
registryImdg.update(registryUnitF.get());
} }
} }
} }

View file

@ -21,6 +21,27 @@ public class SessionMonitorFactory {
} }
} }
public static SessionMonitor waitStep7(Section section) {
switch (section) {
case MKR -> {
return SessionMonitor.create()
.addCondition(new SdfCondition(SdfTable.SDF_04))
.addCondition(new SdfCondition(SdfTable.SDF_01))
.addCondition(new SdfCondition(SdfTable.SDF_57));
}
case FOND -> {
return SessionMonitor.create()
.addCondition(new SdfCondition(SdfTable.SDF_04))
.addCondition(new SdfCondition(SdfTable.SDF_13))
.addCondition(new SdfCondition(SdfTable.SDF_08))
.addCondition(new SdfCondition(SdfTable.SDF_21))
.addCondition(new SdfCondition(SdfTable.SDF_01))
.addCondition(new SdfCondition(SdfTable.SDF_57));
}
default -> throw new IllegalStateException("unknown wait conditions for section " + section);
}
}
public static SessionMonitor waitRevise() { public static SessionMonitor waitRevise() {
return SessionMonitor.create() return SessionMonitor.create()
.addCondition(new SdfCondition(SdfTable.SDF_01)) .addCondition(new SdfCondition(SdfTable.SDF_01))

View file

@ -11,14 +11,14 @@ public enum SdfGroup {
Sdf01And57(SdfTable.SDF_01, SdfTable.SDF_57), Sdf01And57(SdfTable.SDF_01, SdfTable.SDF_57),
Sdf08And21(SdfTable.SDF_08, SdfTable.SDF_21), Sdf08And21(SdfTable.SDF_08, SdfTable.SDF_21),
//------ session groups ------ //------ session groups ------ (4), (1 57), (13), (8 21)
session_Triple(SdfTable.SDF_04, SdfTable.SDF_01, SdfTable.SDF_57), //session_Triple(SdfTable.SDF_04, SdfTable.SDF_01, SdfTable.SDF_57),
session_Six(SdfTable.SDF_04, //session_Six(SdfTable.SDF_04,
SdfTable.SDF_13, // SdfTable.SDF_13,
SdfTable.SDF_08, // SdfTable.SDF_08,
SdfTable.SDF_21, // SdfTable.SDF_21,
SdfTable.SDF_01, // SdfTable.SDF_01,
SdfTable.SDF_57), // SdfTable.SDF_57),
; ;
private final Collection<SdfTable> group; private final Collection<SdfTable> group;

View file

@ -4,19 +4,10 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.misc.Session; import ru.clearing.classes.statics.data.misc.Session;
import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.session.stage.TaskType;
import ru.spcex.platform.classes.base.SpcexObjectBase;
import ru.spcex.platform.enumeration.SdfTable; import ru.spcex.platform.enumeration.SdfTable;
import ru.spcex.platform.enumeration.Section;
import ru.spcex.platform.enumeration.SessionStatus;
import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider; import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
import ru.spcex.platform.utils.enumeration.IEnumKey;
import ru.spcex.platform.utils.text.TextUtil;
import java.util.Collection;
import java.util.Optional; import java.util.Optional;
@Component @Component
@ -29,33 +20,33 @@ public class SdfGroupManager {
} }
public Optional<SdfGroup> getGroup(SdfTable table) { public Optional<SdfGroup> getGroup(SdfTable table) {
ImdgPredicateBuilder pb = sessImdg.predicateBuilder(); //ImdgPredicateBuilder pb = sessImdg.predicateBuilder();
ImdgPredicate prdct = pb.and( //ImdgPredicate prdct = pb.and(
pb.equals("workflowStatus", SessionStatus.ACTV.getKey()), // pb.equals("workflowStatus", SessionStatus.ACTV.getKey()),
pb.equals("sessionStatus", TaskType.FormingPaymentInstruction.getKey()) // pb.equals("sessionStatus", TaskType.FormingPaymentInstruction.getKey())
); //);
Collection<Session> sessions = sessImdg.getCollectionObjectsByPredicate(prdct); //Collection<Session> sessions = sessImdg.getCollectionObjectsByPredicate(prdct);
if (sessions.size() > 1) { //if (sessions.size() > 1) {
throw new IllegalStateException("more than one active session found by predicate " // throw new IllegalStateException("more than one active session found by predicate "
+ prdct // + prdct
+ " ids " + sessions.stream() // + " ids " + sessions.stream()
.map(SpcexObjectBase::getId) // .map(SpcexObjectBase::getId)
.map(Object::toString) // .map(Object::toString)
.collect(TextUtil.join)); // .collect(TextUtil.join));
} //}
if (sessions.size() == 0) { //if (sessions.size() == 0) {
return SdfGroup.groupByTable(table); return SdfGroup.groupByTable(table);
} else { //} else {
Session session = sessions.iterator().next(); // Session session = sessions.iterator().next();
Section section = IEnumKey.getEnumByKey(Section.class, session.getSection()); // Section section = IEnumKey.getEnumByKey(Section.class, session.getSection());
if (section == null) { // if (section == null) {
throw new IllegalStateException("couldn't determine section of session.id=" + session.getId()); // throw new IllegalStateException("couldn't determine section of session.id=" + session.getId());
} // }
if (Section.MKR.equals(section)) { // if (Section.MKR.equals(section)) {
return Optional.of(SdfGroup.session_Triple); // return Optional.of(SdfGroup.session_Triple);
} else if (Section.FOND.equals(section)) { // } else if (Section.FOND.equals(section)) {
return Optional.of(SdfGroup.session_Six); // return Optional.of(SdfGroup.session_Six);
} else throw new IllegalStateException("unknown section '" + section + "' of session.id=" + session.getId()); // } else throw new IllegalStateException("unknown section '" + section + "' of session.id=" + session.getId());
} //}
} }
} }

View file

@ -123,15 +123,18 @@ public class StatementServiceV2 {
processSdf08And21(find(SdfTable.SDF_08, fullGroup), find(SdfTable.SDF_21, fullGroup)); processSdf08And21(find(SdfTable.SDF_08, fullGroup), find(SdfTable.SDF_21, fullGroup));
} else if (sdfGroup.get() == SdfGroup.Sdf01And57) { } else if (sdfGroup.get() == SdfGroup.Sdf01And57) {
processSdf01And57(find(SdfTable.SDF_01, fullGroup), find(SdfTable.SDF_57, fullGroup)); processSdf01And57(find(SdfTable.SDF_01, fullGroup), find(SdfTable.SDF_57, fullGroup));
} else if (sdfGroup.get() == SdfGroup.session_Triple) { }
processSdf04(find(SdfTable.SDF_04, fullGroup)); //else if (sdfGroup.get() == SdfGroup.session_Triple) {
processSdf01And57(find(SdfTable.SDF_01, fullGroup), find(SdfTable.SDF_57, fullGroup)); // processSdf04(find(SdfTable.SDF_04, fullGroup));
} else if (sdfGroup.get() == SdfGroup.session_Six) { // processSdf01And57(find(SdfTable.SDF_01, fullGroup), find(SdfTable.SDF_57, fullGroup));
processSdf04(find(SdfTable.SDF_04, fullGroup)); //}
processSdf13(find(SdfTable.SDF_13, fullGroup)); //else if (sdfGroup.get() == SdfGroup.session_Six) {
processSdf08And21(find(SdfTable.SDF_08, fullGroup), find(SdfTable.SDF_21, fullGroup)); // processSdf04(find(SdfTable.SDF_04, fullGroup));
processSdf01And57(find(SdfTable.SDF_01, fullGroup), find(SdfTable.SDF_57, fullGroup)); // processSdf13(find(SdfTable.SDF_13, fullGroup));
} else { // processSdf08And21(find(SdfTable.SDF_08, fullGroup), find(SdfTable.SDF_21, fullGroup));
// processSdf01And57(find(SdfTable.SDF_01, fullGroup), find(SdfTable.SDF_57, fullGroup));
//}
else {
throw new IllegalStateException("not implemented"); throw new IllegalStateException("not implemented");
} }
} }
@ -160,7 +163,9 @@ public class StatementServiceV2 {
processSdf21(sdf21); processSdf21(sdf21);
removeFirstWithSameTableAndGroupId(sdf21); removeFirstWithSameTableAndGroupId(sdf21);
//fixme ревизия для бумаг reviser.doRevise(pair.getFirst().getGroupId()); //fixme ревизия для бумаг reviser.doRevise(pair.getFirst().getGroupId());
log.info("pair sdf08/sdf21 processed successfully"); SessionContinueEvent continueSessionBn = new SessionContinueEvent(SdfTable.SDF_08, SdfTable.SDF_21);
kafkaSender.sendRequestToQueue(Consts.CONTINUE_SESSION_BN_FIRST_PART, continueSessionBn);
log.info("pair sdf08/sdf21 processed successfully");
} }
/** /**