create SDF56 by BalanceRevise

This commit is contained in:
etreschenkov 2023-05-24 12:42:06 +03:00
parent cd863f209a
commit 73c8cce9c2

View file

@ -3,13 +3,14 @@ package ru.spcex.clearing.session.stage.impl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import ru.clearing.classes.statics.data.misc.Currency;
import ru.clearing.classes.statics.data.registry.Registry;
import ru.clearing.classes.statics.data.sdf.SDf56;
import ru.clearing.classes.statics.data.statement.Statement;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.platform.messaging.domain.Consts;
import ru.spcex.clearing.platform.messaging.domain.cud.clearing.Sdf56And51Request;
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
import ru.spcex.clearing.session.stage.ISessionStage;
import ru.spcex.clearing.session.stage.StageResult;
@ -19,19 +20,15 @@ import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgId;
import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.imdg.api.predicate.specific.StatementRevisePredicate;
import ru.spcex.platform.utils.enumeration.EnumMessage;
import ru.spcex.platform.utils.enumeration.IEnumKey;
import ru.spcex.platform.utils.time.TimeUtil;
import java.math.BigDecimal;
import java.time.Instant;
import java.time.LocalDate;
import java.time.Month;
import java.time.temporal.ChronoUnit;
import java.util.Collection;
import static ru.spcex.clearing.error.ClearingErrorInternal.SessionGeneralError;
@Service
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class BalanceRevise implements ISessionStage {
private final Logger log = LoggerFactory.getLogger(getClass());
//todo remove (set all in single method setImdg(provider -> setImdg1();setIdGenerator();...)
@ -40,6 +37,7 @@ public class BalanceRevise implements ISessionStage {
private Imdg<Statement> statementImdg;
private Imdg<Registry> registryImdg;
private Imdg<Currency> currencyImdg;
private Imdg<SDf56> sDf56Imdg;
private KafkaSender kafkaSender;
@Autowired
@ -49,6 +47,7 @@ public class BalanceRevise implements ISessionStage {
this.statementImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Statement, Statement.class);
this.currencyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Currency, Currency.class);
this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
this.sDf56Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf56, SDf56.class);
this.kafkaSender = kafkaSender;
}
@ -70,20 +69,21 @@ public class BalanceRevise implements ISessionStage {
private StageResult<?> sendSdfs() {
Collection<Long> currencies = currencyImdg.projectSingleAttribute("id");
Statement statement = statementImdg.aggregateByMax("created", StatementRevisePredicate.get(statementImdg, currencies));
Instant now = Instant.now();
Sdf56And51Request sdf56Request = new Sdf56And51Request();
sdf56Request.setDf56Number(idGenerator.nextId()); //fixme day scope id generator
sdf56Request.setsDateTime(statement != null ?
statement.getCreated() : TimeUtil.localDateToInstant(LocalDate.of(2023, Month.JANUARY, 1))); //fixme default sDate
sdf56Request.seteDateTime(now);
sdf56Request.setDf51Number(idGenerator.nextId()); //fixme day scope id generator
sdf56Request.setDateTime(now);
Long msgKey = kafkaSender.sendRequestToQueue(Consts.REVISE_PROCESS, sdf56Request);
if (msgKey == null) {
log.error("failed to put SDF56 request to kafka queue");
return new StageResult<>(new EnumMessage(SessionGeneralError), false);
}
newSDf56(statement);
//fixme теперь не отправляем команду в модуль dbf-export, он получит ее из другого места
// Instant now = Instant.now();
// Sdf56And51Request sdf56Request = new Sdf56And51Request();
// sdf56Request.setDf56Number(idGenerator.nextId()); //fixme day scope id generator
// sdf56Request.setsDateTime(statement != null ?
// statement.getCreated() : TimeUtil.localDateToInstant(LocalDate.of(2023, Month.JANUARY, 1))); //fixme default sDate
// sdf56Request.seteDateTime(now);
// sdf56Request.setDf51Number(idGenerator.nextId()); //fixme day scope id generator
// sdf56Request.setDateTime(now);
// Long msgKey = kafkaSender.sendRequestToQueue(Consts.REVISE_PROCESS, sdf56Request);
// if (msgKey == null) {
// log.error("failed to put SDF56 request to kafka queue");
// return new StageResult<>(new EnumMessage(SessionGeneralError), false);
// }
return new StageResult<>(null, true);
}
@ -133,7 +133,9 @@ public class BalanceRevise implements ISessionStage {
rgsAMT.setBalance(safeBD(rgsAMT.getBalance()).add(safeBD(stmt.getAmount())));
rgsAMT.setCredit(safeBD(rgsAMT.getCredit()).add(safeBD(stmt.getAmount())));
}
default -> {throw new IllegalStateException("null direction");}
default -> {
throw new IllegalStateException("null direction");
}
}
rgsAMF.setBalance(safeBD(rgsAMT.getBalance()).subtract(safeBD(rgsAMB.getBalance())));
registryImdg.update(rgsAMT);
@ -171,4 +173,21 @@ public class BalanceRevise implements ISessionStage {
private BigDecimal safeBD(BigDecimal value) {
return value != null ? value : BigDecimal.ZERO;
}
private void newSDf56(Statement statement) {
log.debug("GALB request received; creating sdf56");
SDf56 sDf56 = new SDf56();
sDf56.setNumber(idGenerator.nextId().toString());
Instant now = Instant.now();
String startTime = String.valueOf(statement != null ?
statement.getCreated().toEpochMilli() : now.minus(1, ChronoUnit.DAYS).toEpochMilli());
sDf56.setStart_datetime(startTime);
sDf56.setEnd_datetime(String.valueOf(now.toEpochMilli()));
sDf56.setAccount("ТБС");
sDf56.setDeal("КОДУ");
sDf56.setGenerationTime(now);
sDf56.setGenerationId(idGenerator.nextId());
sDf56Imdg.insert(sDf56);
log.debug("successfully processed, new id {}", sDf56.getId());
}
}