From 12f9d024aa4db209ad0dd10c1364e0a24a242d36 Mon Sep 17 00:00:00 2001 From: AKurakin Date: Thu, 8 Jun 2023 18:23:58 +0300 Subject: [PATCH 1/6] clearing-service sdf08 --- .../account/service/AccountService.java | 6 ++++- .../account/service/BankAccountService.java | 3 ++- .../service/InformationAccountService.java | 2 +- .../service/executors/Sdf08Executor.java | 24 ++++++++++++++++++- .../validation/Sdf08NewValidationRule.java | 7 ++++-- 5 files changed, 36 insertions(+), 6 deletions(-) diff --git a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/AccountService.java b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/AccountService.java index 85d82a532..ca5c6342e 100644 --- a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/AccountService.java +++ b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/AccountService.java @@ -133,7 +133,11 @@ public class AccountService extends QueueConsumer implements InitializingBean { account.setCompanyId(req.getCompanyId()); account.setAccount(req.getAccount()); account.setAccountType(req.getAccountType()); - account.setStatus(WorkflowStatus.Active.getKey()); + if (req.getStatus() == null) { + account.setStatus(WorkflowStatus.Active.getKey()); + } else { + account.setStatus(req.getStatus()); + } account.setCreated(now); account.setUpdated(now); diff --git a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/BankAccountService.java b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/BankAccountService.java index 846cdbc75..44d37f90d 100644 --- a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/BankAccountService.java +++ b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/BankAccountService.java @@ -22,6 +22,7 @@ import ru.spcex.clearing.util.security.UserRoleVerification; import ru.spcex.clearing.validation.common.ValidationHelper; import ru.spcex.platform.enumeration.AccountType; import ru.spcex.platform.enumeration.ServiceStatus; +import ru.spcex.platform.enumeration.WorkflowStatus; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; import ru.spcex.platform.imdg.api.ImdgTransaction; @@ -101,7 +102,7 @@ public class BankAccountService extends QueueConsumer implements InitializingBea Account account = new Account(); account.setAccount(req.getAccount()); account.setAccountType(AccountType.Bank.getKey()); - account.setStatus(ServiceStatus.Active.getKey()); + account.setStatus(WorkflowStatus.Active.getKey()); account.setCompanyId(req.getCompanyId()); account.setCreated(now); account.setUpdated(now); diff --git a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/InformationAccountService.java b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/InformationAccountService.java index c7595c14c..7aead7923 100644 --- a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/InformationAccountService.java +++ b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/InformationAccountService.java @@ -128,7 +128,7 @@ public class InformationAccountService extends QueueConsumer implements Initiali Account account = new Account(); account.setAccount(accountValue); account.setAccountType(AccountType.Info.getKey()); - account.setStatus(ServiceStatus.Active.getKey()); + account.setStatus(ServiceStatus.Active.getKey());//fixme !!! account.setCompanyId(userRequest.getRequestPayload().getCompanyId()); account.setCreated(now); account.setUpdated(now); diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf08Executor.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf08Executor.java index 79a92f754..9e6482d39 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf08Executor.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf08Executor.java @@ -42,6 +42,7 @@ import java.util.Collection; import java.util.Map; import java.util.Optional; import java.util.function.Function; +import java.util.stream.Collectors; @Service public class Sdf08Executor extends AbstractExecutor { @@ -89,6 +90,27 @@ public class Sdf08Executor extends AbstractExecutor { public void sendCommand(KafkaSender kafkaSender, Result result) { } + Company searchCompany(String depoCode) { + String tradingCode; + if (depoCode.length() < 4) { + log.warn("Depocode='{}' too short. Can not search company.", depoCode); + tradingCode = depoCode; + } else { + tradingCode = depoCode.substring(1, 4); + while (tradingCode.length() > 1 && tradingCode.startsWith("0")) + tradingCode = tradingCode.substring(1); + } + String query = "tradingCode LIKE '" + tradingCode + "'"; + Collection companys = companyImdg.getCollectionObjectsBySQL(query); + log.trace("Selected {} record for sql: {}", companys.size(), query); + if (companys.isEmpty()) { + return null; + } + if (companys.size() > 1) + log.warn("Found {} company's by tradingCode='{}'", companys.size(), tradingCode); + return companys.iterator().next(); + } + public Result execute(Collection sdf, StatementRequest statementRequest) { Result result = new Result(); Long generationIdForGroup = imdgProvider.getImdgIdGenerator().nextId(); @@ -99,7 +121,7 @@ public class Sdf08Executor extends AbstractExecutor { Account account = validator.getStored(ValidationStored.Sdf08Account); if (statementRequest.getAccountCreationResults().size() == 0 && ClearingErrorInternal.AccountNotPresent.equals(error.map(EnumMessage::getSubject).orElse(null))) { - Company company = validator.getStored(ValidationStored.Sdf08Company); + Company company = searchCompany(sdf08.getDepoCode()); // validator.getStored(ValidationStored.Sdf08Company); Long companyId = company == null ? null : company.getId(); // account == null сегда, т.к. кейс AccountNotPresent if (companyId == null) { log.warn("account {} for sdf08.id={} not found. Can not send request for creation, cause company not found too", sdf08.getDepoCode(), sdf08.getId()); diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/Sdf08NewValidationRule.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/Sdf08NewValidationRule.java index bbb26fd11..9f21f02da 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/Sdf08NewValidationRule.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/Sdf08NewValidationRule.java @@ -12,9 +12,11 @@ import ru.spcex.platform.utils.enumeration.EnumMessage; import ru.spcex.platform.utils.text.TextUtil; import ru.spcex.platform.utils.validation.IValidationRule; +import java.util.Map; import java.util.Optional; public enum Sdf08NewValidationRule implements IValidationRule> { + @Deprecated // unused, см. тз по поиску компаний "III - Изменение statement по sDf08" 1. CompanyPresent() { @Override public Optional validate(ImdgValidationContext context) { @@ -37,8 +39,9 @@ public enum Sdf08NewValidationRule implements IValidationRule validate(ImdgValidationContext context) { SDf08 sdf08 = context.getValidatedObject(); Imdg accountImdg = context.obtainMap(IMDGDistributedNames.Map_Account, Account.class); - Account acc = accountImdg.getSingleObjectBySQL("account = '" + sdf08.getDepoCode() - + "' and accountType='" + ru.spcex.platform.enumeration.AccountType.Depo.getKey() + "'"); + Account acc = accountImdg.getSingleObjectByFieldValues(Map.of( + "account", sdf08.getDepoCode() + , "accountType",ru.spcex.platform.enumeration.AccountType.Depo.getKey())); if (acc == null) { return of (ClearingErrorInternal.AccountNotPresent, sdf08.getDepoCode()); } From 66cf85a688144931cd4db44a0642c3ea16328c9a Mon Sep 17 00:00:00 2001 From: AKurakin Date: Thu, 8 Jun 2023 19:29:56 +0300 Subject: [PATCH 2/6] =?UTF-8?q?account-service=20fix=20TCR=20validation;?= =?UTF-8?q?=20clearing-service=20swt-importer=20=D0=BB=D0=BE=D0=B3=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TradingClearingRegistryValidationConfig.java | 3 ++- .../clearing/account/service/ClearingAccountService.java | 3 ++- .../java/ru/spcex/clearing/service/StatementService.java | 4 +++- .../importer/logic/stages/SWTImportKafkaMessenger.java | 8 +++++++- 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/validation/TradingClearingRegistryValidationConfig.java b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/validation/TradingClearingRegistryValidationConfig.java index f936a6925..c98933433 100644 --- a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/validation/TradingClearingRegistryValidationConfig.java +++ b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/validation/TradingClearingRegistryValidationConfig.java @@ -62,7 +62,8 @@ public class TradingClearingRegistryValidationConfig { Imdg informationAccountImdg = context.obtainMap( IMDGDistributedNames.Map_InformationAccount, InformationAccount.class ); - InformationAccount infoAccount = informationAccountImdg.getSingleObjectByID(moneyAccountId); + InformationAccount infoAccount = informationAccountImdg.getSingleObjectByFieldValues( + Map.of("accountId",moneyAccountId)); if (infoAccount == null) return AccountError.AccountNotFound; } return null; diff --git a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/ClearingAccountService.java b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/ClearingAccountService.java index 9d28ae3f3..de3bd3411 100644 --- a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/ClearingAccountService.java +++ b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/ClearingAccountService.java @@ -232,12 +232,13 @@ public class ClearingAccountService extends QueueConsumer implements Initializin clearingAccount.setAccountId(accountId); clearingAccount.setClearingAccountType(accountReq.getAccountType()); clearingAccountId = clearingAccountImdg.insert(clearingAccount); - log.trace("New account {}, clearingAccount {} was created.", accountId, clearingAccountId); + log.debug("New account {}, clearingAccount {} was created.", accountId, clearingAccountId); { TradingClearingRegistryNewRequest request = new TradingClearingRegistryNewRequest(); request.setMoneyAccountId(accountId); request.setCompanyId(clearingAccount.getCompanyId()); +// request.setTradingClearingRegistryType(cl); toTCRRequests.add(request); } { diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/StatementService.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/StatementService.java index 106e78c81..2189b0065 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/StatementService.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/StatementService.java @@ -109,7 +109,9 @@ public class StatementService extends QueueConsumer implements InitializingBean } } } - if (!doSomeone) { + if (doSomeone) { + log.debug("For table {} done.", table); + } else { log.warn("No operation for request.id={}; statementRequest GroupId={}, table={}", systemRequest.getId(), statementRequest.getGroupId(), statementRequest.getTable()); } diff --git a/clearing-parent/swt-importer/src/main/java/ru/spcex/clearing/swt/importer/logic/stages/SWTImportKafkaMessenger.java b/clearing-parent/swt-importer/src/main/java/ru/spcex/clearing/swt/importer/logic/stages/SWTImportKafkaMessenger.java index f37ec2930..bc0533656 100644 --- a/clearing-parent/swt-importer/src/main/java/ru/spcex/clearing/swt/importer/logic/stages/SWTImportKafkaMessenger.java +++ b/clearing-parent/swt-importer/src/main/java/ru/spcex/clearing/swt/importer/logic/stages/SWTImportKafkaMessenger.java @@ -1,5 +1,7 @@ package ru.spcex.clearing.swt.importer.logic.stages; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.InitializingBean; import org.springframework.stereotype.Component; import ru.spcex.clearing.platform.messaging.domain.Consts; @@ -15,6 +17,7 @@ import java.util.function.Supplier; @Component public class SWTImportKafkaMessenger implements InitializingBean { + final Logger log = LoggerFactory.getLogger(getClass()); private final Supplier kafka; private final Map> messengers; @@ -38,6 +41,8 @@ public class SWTImportKafkaMessenger implements InitializingBean { Consumer messenger = messengers.get(table); if (messenger != null) { messenger.accept(groupId); + } else { + log.debug("No message stage for table {}", table); } } @@ -45,7 +50,8 @@ public class SWTImportKafkaMessenger implements InitializingBean { StatementRequest statementRequest = new StatementRequest(); statementRequest.setGroupId(groupId); statementRequest.setTable(table); - kafka.get().sendRequestToQueue(Consts.STATEMENT_PROCESS, statementRequest); + Long rid = kafka.get().sendRequestToQueue(Consts.STATEMENT_PROCESS, statementRequest); + log.debug("Send message id={}; groupId={} to kafka \"{}\"", rid, groupId, Consts.STATEMENT_PROCESS); } } From b85247dfaf3d2cb2d8f6bcf46cd656c381e9e105 Mon Sep 17 00:00:00 2001 From: AKurakin Date: Fri, 9 Jun 2023 10:39:00 +0300 Subject: [PATCH 3/6] account-service http://jira.mfd.msk:8088/browse/CLS-265 --- .../account/config/validation/AccountValidationConfig.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/validation/AccountValidationConfig.java b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/validation/AccountValidationConfig.java index 4438f7163..6201d0bbd 100644 --- a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/validation/AccountValidationConfig.java +++ b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/validation/AccountValidationConfig.java @@ -166,8 +166,8 @@ public class AccountValidationConfig { AccountError.RequiredFieldEmpty, AccountError.AccountNotFound, account -> { - if (WorkflowStatus.Active.equalsByKey(account.getStatus())) return null; - return AccountError.AccountNotActive; + if (AccountStatus.BLOCKED.equalsByKey(account.getStatus())) return AccountError.AccountNotActive; + return null; }) ); }; From e6b32c49436d8771b0116f2b7844b69ee8294206 Mon Sep 17 00:00:00 2001 From: ialbert Date: Fri, 9 Jun 2023 10:56:21 +0300 Subject: [PATCH 4/6] =?UTF-8?q?=D1=84=D0=B8=D0=BA=D1=81=20=D0=BE=D0=B1?= =?UTF-8?q?=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D0=B8=20SDF04?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ru/spcex/clearing/service/executors/Sdf04Executor.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf04Executor.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf04Executor.java index 8595cc937..9b6040f76 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf04Executor.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf04Executor.java @@ -18,6 +18,7 @@ import ru.spcex.platform.imdg.api.predicate.ImdgPredicate; import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; import java.math.BigDecimal; +import java.time.Instant; import java.util.Collection; @Service @@ -78,6 +79,8 @@ public class Sdf04Executor extends AbstractExecutor { boolean unlockRegistry(Registry registry, BigDecimal value) { if (registry.getBalance() == null) registry.setBalance(BigDecimal.ZERO); registry.setBalance(registry.getBalance().subtract(value)); + registry.setUpdated(Instant.now()); + registryImdg.update(registry); return true; } } From f21e7dea8874157c321cddf86566fc22bcea8be2 Mon Sep 17 00:00:00 2001 From: ialbert Date: Fri, 9 Jun 2023 10:58:58 +0300 Subject: [PATCH 5/6] sdf04 fix --- .../clearing/service/executors/Sdf04Executor.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf04Executor.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf04Executor.java index 9b6040f76..60955181f 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf04Executor.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf04Executor.java @@ -16,6 +16,7 @@ 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 ru.spcex.platform.utils.log.ExceptionUtils; import java.math.BigDecimal; import java.time.Instant; @@ -55,7 +56,7 @@ public class Sdf04Executor extends AbstractExecutor { //обычно мы ищем по группу sdf04, здесь как будто всегда только одна запись, todo нужно прочекать этот момент log.debug("Process sdf04 record; sdf04.id: {}", sdf04.getId()); Collection registries = selectRegistryForSDF04(sdf04.getC_acc_deb()); - registries.forEach(registry -> unlockRegistry(registry, new BigDecimal(sdf04.getSum_deb()))); + registries.forEach(registry -> unlockRegistry(registry, parseString(sdf04.getSum_deb()))); } return result; } @@ -83,4 +84,13 @@ public class Sdf04Executor extends AbstractExecutor { registryImdg.update(registry); return true; } + + private BigDecimal parseString(String str) { + try { + return new BigDecimal(str); + } catch (Throwable e) { + log.warn(ExceptionUtils.getStackTrace(e)); + return BigDecimal.ZERO; + } + } } From 4e795ee832a12bb3dced4b7952fa1f80956add38 Mon Sep 17 00:00:00 2001 From: AKurakin Date: Fri, 9 Jun 2023 11:49:21 +0300 Subject: [PATCH 6/6] . --- .../swt/importer/logic/stages/SWTImportKafkaMessenger.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clearing-parent/swt-importer/src/main/java/ru/spcex/clearing/swt/importer/logic/stages/SWTImportKafkaMessenger.java b/clearing-parent/swt-importer/src/main/java/ru/spcex/clearing/swt/importer/logic/stages/SWTImportKafkaMessenger.java index bc0533656..260b1f4c2 100644 --- a/clearing-parent/swt-importer/src/main/java/ru/spcex/clearing/swt/importer/logic/stages/SWTImportKafkaMessenger.java +++ b/clearing-parent/swt-importer/src/main/java/ru/spcex/clearing/swt/importer/logic/stages/SWTImportKafkaMessenger.java @@ -51,7 +51,7 @@ public class SWTImportKafkaMessenger implements InitializingBean { statementRequest.setGroupId(groupId); statementRequest.setTable(table); Long rid = kafka.get().sendRequestToQueue(Consts.STATEMENT_PROCESS, statementRequest); - log.debug("Send message id={}; groupId={} to kafka \"{}\"", rid, groupId, Consts.STATEMENT_PROCESS); + log.debug("Send message id={}; groupId={}, table={} to kafka \"{}\"", rid, groupId, table, Consts.STATEMENT_PROCESS); } }