clearing-service SDF01 filename
This commit is contained in:
parent
c01cc429a0
commit
f1267387a3
6 changed files with 59 additions and 20 deletions
|
|
@ -288,7 +288,7 @@ public class StatementService extends QueueConsumer implements InitializingBean
|
||||||
//todo могут ли тут реквесты бегать по кругу, если да, то у нас проблемы
|
//todo могут ли тут реквесты бегать по кругу, если да, то у нас проблемы
|
||||||
sdfGroup = statementRequest.getAccountCreationResults()
|
sdfGroup = statementRequest.getAccountCreationResults()
|
||||||
.stream()
|
.stream()
|
||||||
.filter(part -> part.getErrorCode() == null) //fixme эти случае должны попадать в ошибочный sdf02
|
// .filter(part -> part.getErrorCode() == null) //fixme эти случае должны попадать в ошибочный sdf02
|
||||||
.map(part -> sdfImdg.getSingleObjectByID(part.getSdfId()))
|
.map(part -> sdfImdg.getSingleObjectByID(part.getSdfId()))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,21 +3,12 @@ package ru.spcex.clearing.service.executors;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.balance.StatementRequest;
|
import ru.spcex.clearing.platform.messaging.domain.cud.balance.StatementRequest;
|
||||||
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
|
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
|
||||||
import ru.spcex.clearing.service.model.Result;
|
import ru.spcex.clearing.service.model.Result;
|
||||||
import ru.spcex.platform.classes.base.interfaces.WithFileName;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
public abstract class AbstractExecutor<T> {
|
public abstract class AbstractExecutor<T> {
|
||||||
public abstract Result execute(Collection<T> sdf, StatementRequest statementRequest);
|
public abstract Result execute(Collection<T> sdf, StatementRequest statementRequest);
|
||||||
public abstract String exportTableName();
|
public abstract String exportTableName();
|
||||||
public abstract boolean isNeedToSendCommand();
|
public abstract boolean isNeedToSendCommand();
|
||||||
public abstract void sendCommand(KafkaSender kafkaSender, Result result);
|
public abstract void sendCommand(KafkaSender kafkaSender, Result result);
|
||||||
public static String getFileName(Collection<? extends WithFileName> sdfs) {
|
|
||||||
return sdfs.stream()
|
|
||||||
.map(WithFileName::getFileName)
|
|
||||||
.filter(Objects::nonNull)
|
|
||||||
.findFirst()
|
|
||||||
.orElse(null);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,40 @@
|
||||||
|
package ru.spcex.clearing.service.executors;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import ru.spcex.platform.classes.base.interfaces.WithFileName;
|
||||||
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
|
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||||
|
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
|
||||||
|
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class FilenameObtainer {
|
||||||
|
private final ImdgProvider imdgProvider;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
public FilenameObtainer(ImdgProvider imdgProvider) {
|
||||||
|
this.imdgProvider = imdgProvider;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getFilename(Collection<? extends WithFileName> sdfs, Imdg<? extends WithFileName> imdg, Long groupId) {
|
||||||
|
String nameFromSdfs = sdfs.stream()
|
||||||
|
.map(WithFileName::getFileName)
|
||||||
|
.filter(Objects::nonNull)
|
||||||
|
.findFirst()
|
||||||
|
.orElse(null);
|
||||||
|
if (nameFromSdfs != null) {
|
||||||
|
return nameFromSdfs;
|
||||||
|
}
|
||||||
|
ImdgPredicateBuilder pb = imdg.predicateBuilder();
|
||||||
|
ImdgPredicate prdct = pb.equals("generationId", groupId);
|
||||||
|
WithFileName sdf = imdg.getFirstObjectByPredicate(prdct);
|
||||||
|
if (sdf != null) {
|
||||||
|
return sdf.getFileName();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -15,7 +15,6 @@ import ru.clearing.classes.statics.data.sdf.SDf02;
|
||||||
import ru.clearing.classes.statics.data.security.Security;
|
import ru.clearing.classes.statics.data.security.Security;
|
||||||
import ru.clearing.classes.statics.data.statement.Statement;
|
import ru.clearing.classes.statics.data.statement.Statement;
|
||||||
import ru.spcex.clearing.error.ClearingError;
|
import ru.spcex.clearing.error.ClearingError;
|
||||||
import ru.spcex.clearing.error.ClearingErrorInternal;
|
|
||||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.Consts;
|
import ru.spcex.clearing.platform.messaging.domain.Consts;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.account.sdf01.AccountSdfRequestPart;
|
import ru.spcex.clearing.platform.messaging.domain.cud.account.sdf01.AccountSdfRequestPart;
|
||||||
|
|
@ -61,14 +60,16 @@ public class Sdf01Executor extends AbstractExecutor<SDf01> {
|
||||||
private final Imdg<TradingClearingRegistry> tradingClearingRegistryImdg;
|
private final Imdg<TradingClearingRegistry> tradingClearingRegistryImdg;
|
||||||
private final Imdg<Security> securityImdg;
|
private final Imdg<Security> securityImdg;
|
||||||
private final Imdg<Currency> currencyImdg;
|
private final Imdg<Currency> currencyImdg;
|
||||||
|
private final Imdg<SDf01> sdf01Imdg;
|
||||||
private final Imdg<SDf02> sdf02Imdg;
|
private final Imdg<SDf02> sdf02Imdg;
|
||||||
private final IMessageResolver messageResolver;
|
private final IMessageResolver messageResolver;
|
||||||
private final KafkaSender kafkaSender;
|
private final KafkaSender kafkaSender;
|
||||||
|
private final FilenameObtainer filenameObtainer;
|
||||||
|
|
||||||
public Sdf01Executor(@Qualifier("sdf01ValidatorNew") Function<SDf01, IValidator> sDf01Validator,
|
public Sdf01Executor(@Qualifier("sdf01ValidatorNew") Function<SDf01, IValidator> sDf01Validator,
|
||||||
LoggingService errorLogger,
|
LoggingService errorLogger,
|
||||||
ImdgProvider imdgProvider,
|
ImdgProvider imdgProvider,
|
||||||
IMessageResolver errorResolver, IMessageResolver messageResolver, KafkaSender kafkaSender) {
|
IMessageResolver errorResolver, IMessageResolver messageResolver, KafkaSender kafkaSender, FilenameObtainer filenameObtainer) {
|
||||||
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.clearingAccountImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingAccount, ClearingAccount.class);
|
this.clearingAccountImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingAccount, ClearingAccount.class);
|
||||||
|
|
@ -79,7 +80,9 @@ public class Sdf01Executor extends AbstractExecutor<SDf01> {
|
||||||
this.messageResolver = messageResolver;
|
this.messageResolver = messageResolver;
|
||||||
this.securityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Security, Security.class);
|
this.securityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Security, Security.class);
|
||||||
this.sdf02Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf02, SDf02.class);
|
this.sdf02Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf02, SDf02.class);
|
||||||
|
this.sdf01Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf01, SDf01.class);
|
||||||
this.kafkaSender = kafkaSender;
|
this.kafkaSender = kafkaSender;
|
||||||
|
this.filenameObtainer = filenameObtainer;
|
||||||
}
|
}
|
||||||
|
|
||||||
//todo доделать контроль sdf01 и sdf57
|
//todo доделать контроль sdf01 и sdf57
|
||||||
|
|
@ -107,7 +110,7 @@ public class Sdf01Executor extends AbstractExecutor<SDf01> {
|
||||||
Result result = new Result();
|
Result result = new Result();
|
||||||
Long generationIdForGroup = statementRequest.getChildGenerationId() != null ? statementRequest.getChildGenerationId() : imdgProvider.getImdgIdGenerator().nextId();
|
Long generationIdForGroup = statementRequest.getChildGenerationId() != null ? statementRequest.getChildGenerationId() : imdgProvider.getImdgIdGenerator().nextId();
|
||||||
result.setChildGenerationId(generationIdForGroup);
|
result.setChildGenerationId(generationIdForGroup);
|
||||||
result.setFileName(getFileName(sdf));
|
result.setFileName(filenameObtainer.getFilename(sdf, sdf01Imdg, statementRequest.getGroupId()));
|
||||||
log.info("SDF01 execution: sdf01 file={} number={}, groupId={}", result.getFileName(), sdf.size(), sdf.stream().findFirst().map(SDf01::getGenerationId).orElse(null));
|
log.info("SDF01 execution: sdf01 file={} number={}, groupId={}", result.getFileName(), sdf.size(), sdf.stream().findFirst().map(SDf01::getGenerationId).orElse(null));
|
||||||
for (SDf01 sdf01 : sdf) {
|
for (SDf01 sdf01 : sdf) {
|
||||||
IValidator validator = sDf01Validator.apply(sdf01);
|
IValidator validator = sDf01Validator.apply(sdf01);
|
||||||
|
|
@ -115,7 +118,7 @@ public class Sdf01Executor extends AbstractExecutor<SDf01> {
|
||||||
Company company = validator.getStored(ValidationStored.Sdf01Company);
|
Company company = validator.getStored(ValidationStored.Sdf01Company);
|
||||||
Account account = validator.getStored(ValidationStored.Sdf01Account);
|
Account account = validator.getStored(ValidationStored.Sdf01Account);
|
||||||
if (statementRequest.getAccountCreationResults().size() == 0
|
if (statementRequest.getAccountCreationResults().size() == 0
|
||||||
&& ClearingErrorInternal.AccountNotPresent.equals(error.map(EnumMessage::getSubject).orElse(null))) {
|
&& ClearingError.AccountNotPresent.equals(error.map(EnumMessage::getSubject).orElse(null))) {
|
||||||
//на данном шаге company существует -> getId ok
|
//на данном шаге company существует -> getId ok
|
||||||
//формируем пакетный запрос на добавление account
|
//формируем пакетный запрос на добавление account
|
||||||
//ответ придет в этот же метод, process
|
//ответ придет в этот же метод, process
|
||||||
|
|
@ -126,7 +129,7 @@ public class Sdf01Executor extends AbstractExecutor<SDf01> {
|
||||||
log.debug("account {} for sdf01.id={} not found - send request for creation", sdf01.getAccount(), sdf01.getId());
|
log.debug("account {} for sdf01.id={} not found - send request for creation", sdf01.getAccount(), sdf01.getId());
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
} else if (ClearingErrorInternal.AccountNotPresent.equals(error.map(EnumMessage::getSubject).orElse(null))) {
|
} else if (ClearingError.AccountNotPresent.equals(error.map(EnumMessage::getSubject).orElse(null))) {
|
||||||
log.error("fatal error: resumed processing after generating accounts, but no account found for sdf01.id={}", sdf01.getId());
|
log.error("fatal error: resumed processing after generating accounts, but no account found for sdf01.id={}", sdf01.getId());
|
||||||
}
|
}
|
||||||
if (error.isPresent()) {
|
if (error.isPresent()) {
|
||||||
|
|
@ -276,7 +279,11 @@ public class Sdf01Executor extends AbstractExecutor<SDf01> {
|
||||||
sDf02.setFile_type(sdf01.getFile_type());
|
sDf02.setFile_type(sdf01.getFile_type());
|
||||||
sDf02.setInSDfId(sdf01.getId());
|
sDf02.setInSDfId(sdf01.getId());
|
||||||
String errorId = error.getSubject().getId().toString();
|
String errorId = error.getSubject().getId().toString();
|
||||||
sDf02.setResult(errorId.substring(errorId.length() - 3));
|
if (errorId.length() > 3) {
|
||||||
|
sDf02.setResult(errorId.substring(errorId.length() - 3));
|
||||||
|
} else {
|
||||||
|
sDf02.setResult(errorId);
|
||||||
|
}
|
||||||
sDf02.setGenerationId(generationIdForGroup);
|
sDf02.setGenerationId(generationIdForGroup);
|
||||||
sDf02.setGenerationTime(Instant.now());
|
sDf02.setGenerationTime(Instant.now());
|
||||||
return sDf02;
|
return sDf02;
|
||||||
|
|
|
||||||
|
|
@ -64,6 +64,7 @@ public class Sdf06Executor {
|
||||||
private final IMessageResolver messageResolver;
|
private final IMessageResolver messageResolver;
|
||||||
private final Function<SDf06, IValidator> sDf06Validator;
|
private final Function<SDf06, IValidator> sDf06Validator;
|
||||||
private final KafkaSender kafkaSender;
|
private final KafkaSender kafkaSender;
|
||||||
|
private final FilenameObtainer filenameObtainer;
|
||||||
|
|
||||||
private final static BigDecimal successResult = BigDecimal.ZERO;
|
private final static BigDecimal successResult = BigDecimal.ZERO;
|
||||||
//ошибка проверок
|
//ошибка проверок
|
||||||
|
|
@ -83,7 +84,7 @@ public class Sdf06Executor {
|
||||||
public Sdf06Executor(ImdgProvider imdgProvider,
|
public Sdf06Executor(ImdgProvider imdgProvider,
|
||||||
IMessageResolver messageResolver,
|
IMessageResolver messageResolver,
|
||||||
@Qualifier("sdf06ValidatorNew") Function<SDf06, IValidator> sDf06Validator,
|
@Qualifier("sdf06ValidatorNew") Function<SDf06, IValidator> sDf06Validator,
|
||||||
KafkaSender kafkaSender) {
|
KafkaSender kafkaSender, FilenameObtainer filenameObtainer) {
|
||||||
this.imdgProvider = imdgProvider;
|
this.imdgProvider = imdgProvider;
|
||||||
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);
|
||||||
|
|
@ -98,6 +99,7 @@ public class Sdf06Executor {
|
||||||
this.kafkaSender = kafkaSender;
|
this.kafkaSender = kafkaSender;
|
||||||
this.sdf06Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf06, SDf06.class);
|
this.sdf06Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf06, SDf06.class);
|
||||||
this.sdf07Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf07, SDf07.class);
|
this.sdf07Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf07, SDf07.class);
|
||||||
|
this.filenameObtainer = filenameObtainer;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void createStatementAndSendGatewayCommand(BaseRequest<StatementRequest> systemRequest) {
|
public void createStatementAndSendGatewayCommand(BaseRequest<StatementRequest> systemRequest) {
|
||||||
|
|
@ -106,7 +108,7 @@ public class Sdf06Executor {
|
||||||
Collection<SDf06> sdfs = sdfImdg.getCollectionObjectsByFieldValues(Map.of(
|
Collection<SDf06> sdfs = sdfImdg.getCollectionObjectsByFieldValues(Map.of(
|
||||||
"generationId", groupId
|
"generationId", groupId
|
||||||
));
|
));
|
||||||
String fileName = AbstractExecutor.getFileName(sdfs);
|
String fileName = filenameObtainer.getFilename(sdfs, sdf06Imdg, groupId);
|
||||||
log.info("start processing SDF06: groupId={} file={}", groupId, fileName);
|
log.info("start processing SDF06: groupId={} file={}", groupId, fileName);
|
||||||
Instant now = Instant.now();
|
Instant now = Instant.now();
|
||||||
Long sdf07GroupId = idGenerator.nextId();
|
Long sdf07GroupId = idGenerator.nextId();
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,6 @@ import ru.clearing.classes.statics.data.account.Account;
|
||||||
import ru.clearing.classes.statics.data.company.Company;
|
import ru.clearing.classes.statics.data.company.Company;
|
||||||
import ru.clearing.classes.statics.data.sdf.SDf01;
|
import ru.clearing.classes.statics.data.sdf.SDf01;
|
||||||
import ru.spcex.clearing.error.ClearingError;
|
import ru.spcex.clearing.error.ClearingError;
|
||||||
import ru.spcex.clearing.error.ClearingErrorInternal;
|
|
||||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
import ru.spcex.platform.enumeration.AccType;
|
import ru.spcex.platform.enumeration.AccType;
|
||||||
import ru.spcex.platform.enumeration.CurrencyCode;
|
import ru.spcex.platform.enumeration.CurrencyCode;
|
||||||
|
|
@ -55,7 +54,7 @@ public enum Sdf01NewValidationRule implements IValidationRule<ImdgValidationCont
|
||||||
Account acc = accountImdg.getFirstObjectBySQL("account = '" + sdf01.getAccount()
|
Account acc = accountImdg.getFirstObjectBySQL("account = '" + sdf01.getAccount()
|
||||||
+ "' and accountType='" + ru.spcex.platform.enumeration.AccountType.Clrn.getKey() + "'");
|
+ "' and accountType='" + ru.spcex.platform.enumeration.AccountType.Clrn.getKey() + "'");
|
||||||
if (acc == null) {
|
if (acc == null) {
|
||||||
return of (ClearingErrorInternal.AccountNotPresent, sdf01.getAccount());
|
return of (ClearingError.AccountNotPresent, sdf01.getAccount());
|
||||||
}
|
}
|
||||||
context.storeObject(ValidationStored.Sdf01Account, acc);
|
context.storeObject(ValidationStored.Sdf01Account, acc);
|
||||||
return empty();
|
return empty();
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue