This commit is contained in:
parent
0597fe9136
commit
81dbf7bf2c
10 changed files with 151 additions and 41 deletions
|
|
@ -2,10 +2,8 @@ package ru.clearing.classes.statics.data.registry;
|
|||
|
||||
import ru.clearing.classes.ConstSerializable;
|
||||
import ru.clearing.classes.objects.BusinessObject;
|
||||
import ru.spcex.platform.classes.base.SpcexObjectBase;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.Instant;
|
||||
import java.time.LocalDate;
|
||||
|
||||
/**
|
||||
|
|
@ -414,9 +412,9 @@ public class Registry extends BusinessObject implements Cloneable {
|
|||
}
|
||||
|
||||
@Override
|
||||
public Object clone() {
|
||||
public Registry clone() {
|
||||
try {
|
||||
return super.clone();
|
||||
return (Registry) super.clone();
|
||||
} catch (CloneNotSupportedException e) {
|
||||
throw new RuntimeException("never", e); // it is Cloneable
|
||||
}
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ public class EventsReceiver extends QueueConsumer implements InitializingBean {
|
|||
.forDestination(Task.startOfClearing.topic(), callbacks::put);
|
||||
callback(Object.class)
|
||||
.setConsumer(primaryAuctionBnSession::continueSession)
|
||||
.forDestination(Consts.SDF57_PROCESS, callbacks::put);
|
||||
.forDestination(Consts.CONTINUE_SESSION_BN, callbacks::put);
|
||||
|
||||
callback(Object.class)
|
||||
.setConsumer(event -> clearingService.executeSTrade())
|
||||
|
|
|
|||
|
|
@ -14,7 +14,6 @@ import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
|
|||
import ru.spcex.clearing.platform.messaging.domain.Consts;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.account.sdf01.AccountSdf01Request;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.account.sdf01.AccountSdfRequestPart;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.balance.ExportToFileRequest;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.balance.StatementRequest;
|
||||
import ru.spcex.clearing.platform.messaging.service.QueueConsumer;
|
||||
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
|
||||
|
|
@ -81,11 +80,8 @@ public class StatementService extends QueueConsumer implements InitializingBean
|
|||
Result res = service.execute(sdfGroup, statementRequest);
|
||||
if (res.getAccountRequests().size() != 0) {
|
||||
kafkaSender.sendRequestToQueue(Consts.ACCOUNT_NEW_SDF01, createAccountsRequest(statementRequest.getGroupId(), res.getAccountRequests()));
|
||||
} else if (service.isNeedToSendCommandToExport()) {
|
||||
ExportToFileRequest exportRequest = new ExportToFileRequest();
|
||||
exportRequest.setSdfGroupId(res.getGenerationId());
|
||||
exportRequest.setNameOfTable(service.exportTableName());
|
||||
kafkaSender.sendRequestToQueue(Consts.EXPORT_PROCESS, exportRequest);
|
||||
} else if (service.isNeedToSendCommand()) {
|
||||
service.sendCommand(kafkaSender, res);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,74 @@
|
|||
package ru.spcex.clearing.service.builder;
|
||||
|
||||
import ru.clearing.classes.statics.data.account.Account;
|
||||
import ru.clearing.classes.statics.data.company.Company;
|
||||
import ru.clearing.classes.statics.data.company.CompanySymbols;
|
||||
import ru.clearing.classes.statics.data.payment.PaymentInstruction;
|
||||
import ru.clearing.classes.statics.data.registry.Registry;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.platform.enumeration.CompanySymbol;
|
||||
import ru.spcex.platform.imdg.api.Imdg;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public class PaymentInstructionBuilder {
|
||||
|
||||
private Registry registry;
|
||||
private ImdgProvider imdgProvider;
|
||||
|
||||
public static PaymentInstructionBuilder builder(ImdgProvider imdgProvider, Registry registry) {
|
||||
return new PaymentInstructionBuilder(imdgProvider, registry);
|
||||
}
|
||||
|
||||
private PaymentInstructionBuilder(ImdgProvider imdgProvider, Registry registry) {
|
||||
this.imdgProvider = imdgProvider;
|
||||
this.registry = registry;
|
||||
}
|
||||
|
||||
public PaymentInstruction build() {
|
||||
PaymentInstruction paymentInstruction = new PaymentInstruction();
|
||||
paymentInstruction.setSenderId(registry.getCompanyId());
|
||||
paymentInstruction.setAddresseeId(registry.getCounterPartyId());
|
||||
|
||||
Imdg<CompanySymbols> companySymbolsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class);
|
||||
CompanySymbols companySymbols = companySymbolsImdg.getSingleObjectByFieldValues(Map.of(
|
||||
"companyId", registry.getCompanyId(),
|
||||
"companySymbol", CompanySymbol.BIC.getKey())
|
||||
);
|
||||
CompanySymbols counterCompanySymbols = companySymbolsImdg.getSingleObjectByFieldValues(Map.of(
|
||||
"companyId", registry.getCounterPartyId(),
|
||||
"companySymbol", CompanySymbol.BIC.getKey())
|
||||
);
|
||||
|
||||
if (companySymbols != null) {
|
||||
paymentInstruction.setPayeeBic(companySymbols.getCompanySymbolValue());
|
||||
}
|
||||
if (counterCompanySymbols != null) {
|
||||
paymentInstruction.setAdresseeBic(counterCompanySymbols.getCompanySymbolValue());
|
||||
}
|
||||
|
||||
Imdg<Company> companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
|
||||
Company company = companyImdg.getSingleObjectByFieldValues(Map.of("companyId", registry.getCompanyId()));
|
||||
if (company != null) {
|
||||
paymentInstruction.setPayeeBankName(company.getShortName());
|
||||
paymentInstruction.setAddresseeBankName(company.getShortName());
|
||||
}
|
||||
paymentInstruction.setSettlementDate(registry.getSettlementDate());
|
||||
paymentInstruction.setCreditLeg_amount(registry.getBalance());
|
||||
paymentInstruction.setDebitLeg_amount(registry.getBalance());
|
||||
paymentInstruction.setCreditLeg_accountId(registry.getAccountId());
|
||||
|
||||
Imdg<Account> accountImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Account, Account.class);
|
||||
Account account = accountImdg.getSingleObjectByID(registry.getAccountId());
|
||||
if (account != null) {
|
||||
paymentInstruction.setCreditLeg_account(account.getAccount());
|
||||
}
|
||||
|
||||
paymentInstruction.setDebitLeg_accountId(registry.getAccountId());
|
||||
|
||||
// Account account = accountImdg.getSingleObjectByID(registry.get());
|
||||
// paymentInstruction.setDebitLeg_account();
|
||||
return paymentInstruction;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
package ru.spcex.clearing.service.executors;
|
||||
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.balance.StatementRequest;
|
||||
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
|
||||
import ru.spcex.clearing.service.model.Result;
|
||||
|
||||
import java.util.Collection;
|
||||
|
|
@ -8,5 +9,6 @@ import java.util.Collection;
|
|||
public abstract class AbstractExecutor<T> {
|
||||
public abstract Result execute(Collection<T> sdf, StatementRequest statementRequest);
|
||||
public abstract String exportTableName();
|
||||
public abstract boolean isNeedToSendCommandToExport();
|
||||
public abstract boolean isNeedToSendCommand();
|
||||
public abstract void sendCommand(KafkaSender kafkaSender, Result result);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,8 +11,11 @@ import ru.clearing.classes.statics.data.sdf.SDf02;
|
|||
import ru.clearing.classes.statics.data.statement.Statement;
|
||||
import ru.spcex.clearing.error.ClearingError;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
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.balance.ExportToFileRequest;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.balance.StatementRequest;
|
||||
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
|
||||
import ru.spcex.clearing.service.LoggingService;
|
||||
import ru.spcex.clearing.service.model.Result;
|
||||
import ru.spcex.clearing.service.validation.ValidationStored;
|
||||
|
|
@ -65,10 +68,18 @@ public class Sdf01Executor extends AbstractExecutor<SDf01> {
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean isNeedToSendCommandToExport() {
|
||||
public boolean isNeedToSendCommand() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendCommand(KafkaSender kafkaSender, Result result) {
|
||||
ExportToFileRequest exportRequest = new ExportToFileRequest();
|
||||
exportRequest.setSdfGroupId(result.getGenerationId());
|
||||
exportRequest.setNameOfTable(exportTableName());
|
||||
kafkaSender.sendRequestToQueue(Consts.EXPORT_PROCESS, exportRequest);
|
||||
}
|
||||
|
||||
public Result execute(Collection<SDf01> sdf, StatementRequest statementRequest) {
|
||||
Result result = new Result();
|
||||
Long generationIdForGroup = imdgProvider.getImdgIdGenerator().nextId();
|
||||
|
|
|
|||
|
|
@ -14,7 +14,10 @@ import ru.clearing.classes.statics.data.security.Security;
|
|||
import ru.clearing.classes.statics.data.statement.Statement;
|
||||
import ru.spcex.clearing.error.ClearingError;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
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.ContinueSessionBnRequest;
|
||||
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
|
||||
import ru.spcex.clearing.service.LoggingService;
|
||||
import ru.spcex.clearing.service.model.Result;
|
||||
import ru.spcex.clearing.service.validation.ValidationStored;
|
||||
|
|
@ -78,9 +81,16 @@ public class Sdf57Executor extends AbstractExecutor<SDf57> {
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean isNeedToSendCommandToExport() {
|
||||
return false;
|
||||
}//no need...
|
||||
public boolean isNeedToSendCommand() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendCommand(KafkaSender kafkaSender, Result result) {
|
||||
ContinueSessionBnRequest continueSessionBn = new ContinueSessionBnRequest();
|
||||
continueSessionBn.setGenerationId(result.getGenerationId());
|
||||
kafkaSender.sendRequestToQueue(Consts.CONTINUE_SESSION_BN, continueSessionBn);
|
||||
}
|
||||
|
||||
//V - Изменение statement по sDf57
|
||||
//
|
||||
|
|
@ -145,7 +155,13 @@ public class Sdf57Executor extends AbstractExecutor<SDf57> {
|
|||
};
|
||||
Consumer<RegistryDesignation> create = (dsgn) -> {
|
||||
Registry registry = createRegistryByStatement(stmt, company, account, dsgn);
|
||||
Registry registryF = registry.clone();
|
||||
registryF.setRegistryUnit(RegistryUnit.F.getKey());
|
||||
Registry registryB = registry.clone();
|
||||
registryB.setRegistryUnit(RegistryUnit.B.getKey());
|
||||
registryImdg.insert(registry);
|
||||
registryImdg.insert(registryF);
|
||||
registryImdg.insert(registryB);
|
||||
};
|
||||
|
||||
//todo понять что происходит со инициатором/контрагентом, особенно если у нас только один Statement
|
||||
|
|
@ -181,7 +197,7 @@ public class Sdf57Executor extends AbstractExecutor<SDf57> {
|
|||
Statement statement = new Statement();
|
||||
statement.setAddresseeId(companyDeb.getId());
|
||||
statement.setSenderId(Sender.Prc.getId());
|
||||
statement.setStatementType(StatementType.full.getKey());
|
||||
statement.setStatementType(StatementType.incr.getKey());
|
||||
statement.setContract(getContractFromSpecif(sdf57.getSpecif()));
|
||||
statement.setAccountId(accountDeb.getId());
|
||||
statement.setAccount(accountDeb.getAccount());
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ import ru.spcex.platform.enumeration.*;
|
|||
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.RegistryCodeSqlBuilder;
|
||||
import ru.spcex.platform.imdg.api.predicate.specific.StatementRevisePredicate;
|
||||
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
||||
|
||||
|
|
@ -93,32 +94,31 @@ public class BalanceRevise implements ISessionStage {
|
|||
Collection<Statement> stmts = statementImdg.getCollectionObjectsBySQL(statementSQL);
|
||||
|
||||
for (Statement stmt : stmts) {
|
||||
String unformatted = "registry_designation = '%s' " +
|
||||
"and registry_instrument_type = '%s' " +
|
||||
"and registry_unit = '%s' " +
|
||||
"and account = '%s' " +
|
||||
"and securityId = %d";
|
||||
String unformatted = "%s and account = '%s' and securityId = %d";
|
||||
|
||||
RegistryTradingParams registryAMT = new RegistryTradingParams(RegistryDesignation.A, RegistryInstrumentType.M,
|
||||
null, RegistryUnit.T);
|
||||
RegistryTradingParams registryAMF = new RegistryTradingParams(RegistryDesignation.A, RegistryInstrumentType.M,
|
||||
null, RegistryUnit.F);
|
||||
RegistryTradingParams registryAMB = new RegistryTradingParams(RegistryDesignation.A, RegistryInstrumentType.M,
|
||||
null, RegistryUnit.B);
|
||||
|
||||
String registrySqlAMT = String.format(unformatted,
|
||||
RegistryDesignation.A.getKey(),
|
||||
RegistryInstrumentType.M.getKey(),
|
||||
RegistryUnit.T.getKey(),
|
||||
RegistryCodeSqlBuilder.getInstance(registryAMT).build(),
|
||||
stmt.getAccount(),
|
||||
stmt.getSecurityId()
|
||||
);
|
||||
String registrySqlAMF = String.format(unformatted,
|
||||
RegistryDesignation.A.getKey(),
|
||||
RegistryInstrumentType.M.getKey(),
|
||||
RegistryUnit.F.getKey(),
|
||||
RegistryCodeSqlBuilder.getInstance(registryAMF).build(),
|
||||
stmt.getAccount(),
|
||||
stmt.getSecurityId()
|
||||
);
|
||||
String registrySqlAMB = String.format(unformatted,
|
||||
RegistryDesignation.A.getKey(),
|
||||
RegistryInstrumentType.M.getKey(),
|
||||
RegistryUnit.B.getKey(),
|
||||
RegistryCodeSqlBuilder.getInstance(registryAMB).build(),
|
||||
stmt.getAccount(),
|
||||
stmt.getSecurityId()
|
||||
);
|
||||
|
||||
Registry rgsAMT = registryImdg.getSingleObjectBySQL(registrySqlAMT);
|
||||
Registry rgsAMF = registryImdg.getSingleObjectBySQL(registrySqlAMF);
|
||||
Registry rgsAMB = registryImdg.getSingleObjectBySQL(registrySqlAMB);
|
||||
|
|
@ -152,14 +152,11 @@ public class BalanceRevise implements ISessionStage {
|
|||
InOutSDfType.type1.getKey(), OperationStatus.Pending.getKey(), StatementType.full.getKey());
|
||||
Collection<Statement> stmts = statementImdg.getCollectionObjectsBySQL(statementSQL);
|
||||
for (Statement stmt : stmts) {
|
||||
String registrySqlAMT = String.format("registry_designation = '%s' " +
|
||||
"and registry_instrument_type = '%s' " +
|
||||
"and registry_unit = '%s' " +
|
||||
"and account = '%s' " +
|
||||
"and securityId = %d",
|
||||
RegistryDesignation.A.getKey(),
|
||||
RegistryInstrumentType.M.getKey(),
|
||||
RegistryUnit.T.getKey(),
|
||||
|
||||
RegistryTradingParams registryAMT = new RegistryTradingParams(RegistryDesignation.A, RegistryInstrumentType.M,
|
||||
null, RegistryUnit.T);
|
||||
String registrySqlAMT = String.format("%s and account = '%s' and securityId = %d",
|
||||
RegistryCodeSqlBuilder.getInstance(registryAMT).build(),
|
||||
stmt.getAccount(),
|
||||
stmt.getSecurityId()
|
||||
);
|
||||
|
|
@ -175,7 +172,7 @@ public class BalanceRevise implements ISessionStage {
|
|||
}
|
||||
|
||||
private void newSDf56(Statement statement) {
|
||||
log.debug("GALB request received; creating sdf56");
|
||||
log.debug("creating sdf56");
|
||||
SDf56 sDf56 = new SDf56();
|
||||
sDf56.setNumber(idGenerator.nextId().toString());
|
||||
Instant now = Instant.now();
|
||||
|
|
|
|||
|
|
@ -121,7 +121,7 @@ public interface Consts {
|
|||
String SDF53_PROCESS = "sdf53-process";
|
||||
String SDF54_PROCESS = "sdf54-process";
|
||||
String SDF56_PROCESS = "sdf56-process";
|
||||
String SDF57_PROCESS = "sdf57-process";
|
||||
String CONTINUE_SESSION_BN = "sdf57-process";
|
||||
String REVISE_PROCESS = "revise-process";
|
||||
String EXPORT_PROCESS = "export-process";
|
||||
String EXPORT_COMPLETED = "export_completed";
|
||||
|
|
|
|||
|
|
@ -0,0 +1,16 @@
|
|||
package ru.spcex.clearing.platform.messaging.domain.cud.clearing;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
|
||||
public class ContinueSessionBnRequest {
|
||||
@JsonProperty
|
||||
private Long generationId;
|
||||
|
||||
public Long getGenerationId() {
|
||||
return generationId;
|
||||
}
|
||||
|
||||
public void setGenerationId(Long generationId) {
|
||||
this.generationId = generationId;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue