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 c3a2664e9..9a5f102d9 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 @@ -27,6 +27,7 @@ import ru.clearing.classes.statics.data.misc.Currency; import ru.clearing.classes.statics.data.misc.Notification; import ru.clearing.classes.statics.data.registry.TradingClearingRegistry; import ru.clearing.classes.statics.data.sdf.SDf52; +import ru.clearing.platform.dictionary.ClearingAccountTypeDictionary; import ru.clearing.platform.dictionary.ClearingCategoryDictionary; import ru.spcex.clearing.account.errors.AccountError; import ru.spcex.clearing.imdg.IMDGDistributedNames; @@ -92,6 +93,7 @@ public class ClearingAccountService extends QueueConsumer implements Initializin private final Imdg clearingCategoryImdg; private final Imdg tradingClearingRegistryImdg; private final Imdg notificationImdg; + private final Imdg clearingAccountTypeDictionaryImdg; @Autowired public ClearingAccountService(Consumer kafkaQueue, @@ -127,6 +129,7 @@ public class ClearingAccountService extends QueueConsumer implements Initializin this.clearingCategoryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingCategoryDictionary, ClearingCategoryDictionary.class); this.tradingClearingRegistryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class); this.notificationImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Notification, Notification.class); + this.clearingAccountTypeDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingAccountTypeDictionary, ClearingAccountTypeDictionary.class); } @Override @@ -378,6 +381,22 @@ public class ClearingAccountService extends QueueConsumer implements Initializin * @return */ private synchronized Account createSdf52Account(String accountValue, String acctType, Long companyId, Long userRequestId) { + { // Валидация + boolean existClearingAccountTypeDictionary; + if (acctType == null) { + existClearingAccountTypeDictionary = false; + } else { + ClearingAccountTypeDictionary catd = clearingAccountTypeDictionaryImdg.getFirstObjectByFieldValues( + Map.of("code", acctType)); + existClearingAccountTypeDictionary = catd != null; + } + if (!existClearingAccountTypeDictionary) { + String errMsg = messageResolver.resolve(new EnumMessage(AccountError.DictionaryNotFound, acctType, clearingAccountTypeDictionaryImdg.getMapName())); + log.warn(errMsg); + return null; + } + } + Instant now = Instant.now(); Account account = new Account(); account.setAccount(accountValue); @@ -388,7 +407,9 @@ public class ClearingAccountService extends QueueConsumer implements Initializin Long currencyId = Long.valueOf(accountValue.substring(5, 8)); Currency currency = currImdg.getSingleObjectByID(currencyId); account.setCurrency(currency.getCurrencyCode()); - } catch (Throwable e) {} + } catch (Throwable e) { + log.trace("When obtain currency from accountValue: {}", e.toString()); + } } if (TextUtil.isEmpty(account.getCurrency())) { log.warn("Sdf52: Wrong accountValue=\"{}\" - can not parse for get currency", accountValue); @@ -477,14 +498,11 @@ public class ClearingAccountService extends QueueConsumer implements Initializin Account account = sDf52.getAccount() == null ? null : accountImdg.getFirstObjectByFieldValues(accountQuery); if (account == null) { if (SDFProcessService.SDF52_STATUS_3Open.equals(sDf52.getStatus())) { - //log.debug("By generationId={} s_df52[{}].status={}, but account not found (query: {}). Continue with result OK for status 3", - // groupId, sDf52.getId(), sDf52.getStatus(), accountQuery); - // todo http://jira.mfd.msk:8088/browse/CLS-585 добавят поле acc_type в формат дф52 log.trace("By generationId={} s_df52[{}].status={}, account not found (query: {}). Try create new account.", groupId, sDf52.getId(), sDf52.getStatus(), accountQuery); account = createSdf52Account(sDf52.getAccount(),sDf52.getAcc_type(), company.getId(), systemRequest.getId()); if (account == null) { - log.warn("Can not create account: \"{}\", companyId={}. Ignore SDF52.id={}", + log.info("Can not create account: \"{}\", companyId={}. Ignore SDF52.id={}", sDf52.getAccount(), company.getId(), sDf52.getId()); continue; }