From 02261a4c0c4ca1e763c63ff4718a9bcf576764b3 Mon Sep 17 00:00:00 2001 From: AKurakin Date: Fri, 7 Apr 2023 19:20:04 +0300 Subject: [PATCH] =?UTF-8?q?company-service=20CompanyService,=20AccountNoti?= =?UTF-8?q?ficationHelper=20-=20=D0=B4=D0=BE=D0=B4=D0=B5=D0=BB=D0=BA=D0=B0?= =?UTF-8?q?=20=D0=BE=D1=87=D0=B5=D1=80=D0=B5=D0=B4=D0=B8=20=D0=BE=D0=B1?= =?UTF-8?q?=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/AccountNotificationHelper.java | 1 + .../company/service/CompanyService.java | 59 +++++++++++++++++++ .../company/service/RelationHelper.java | 25 ++++---- 3 files changed, 74 insertions(+), 11 deletions(-) diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/AccountNotificationHelper.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/AccountNotificationHelper.java index 1dfc41da7..6dc4b46d8 100644 --- a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/AccountNotificationHelper.java +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/AccountNotificationHelper.java @@ -79,6 +79,7 @@ public class AccountNotificationHelper { Long reqId = kafkaSender.sendRequestToQueue(Consts.ACCOUNT_TERMINATION, createAccountsRequest(companyId, account)); log.debug("For account[{}] send termination by document request id={}", account.getId(), reqId); } + // ответ должен послаться в DESTINATION_COMPANY_BLOCK = "company-block"; return null; } } \ No newline at end of file diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanyService.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanyService.java index cc9d7c2f3..3444b1243 100644 --- a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanyService.java +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanyService.java @@ -46,6 +46,7 @@ public class CompanyService extends QueueConsumer implements InitializingBean { private final RequestHelper requestHelper; private final ImdgProvider imdgProvider; private final ImdgId idSequence; + private final Imdg companyIMap; protected UserRoleVerification userRoleVerification; private ValidationHelper validationHelper; @@ -89,6 +90,8 @@ public class CompanyService extends QueueConsumer implements InitializingBean { companySymbolService.setCompanyService(this); this.accountNotification = accountNotification; this.relationHelper = relationHelper; + + companyIMap = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); } @Override @@ -96,6 +99,9 @@ public class CompanyService extends QueueConsumer implements InitializingBean { callback(CommonDeleteRequest.class) .setConsumer(request -> requestHelper.requestFunction(this::deleteCompany, request)) .forDestination(Consts.DESTINATION_COMPANY_DELETE, callbacks::put); + callback(CommonDeleteRequest.class) + .setConsumer(request -> requestHelper.requestFunction(this::blockCompanyAfterDocument, request)) + .forDestination(Consts.DESTINATION_COMPANY_BLOCK, callbacks::put); callback(CompanyNewRequest.class) .setFunction(request -> requestHelper.requestFunction(this::createCompany, request)) .forDestination(Consts.DESTINATION_COMPANY_NEW, callbacks::put); @@ -294,4 +300,57 @@ public class CompanyService extends QueueConsumer implements InitializingBean { return null; } + + /** + * Блокировка компании по документу о расторжении + * + * @param companyBlockRequestBaseRequest + * @return + */ + private synchronized RequestInfoUpdate blockCompanyAfterDocument(BaseRequest companyBlockRequestBaseRequest) throws ValidationException { + CommonDeleteRequest request = companyBlockRequestBaseRequest.getRequestPayload(); + log.debug("CommonDeleteRequest (block request) received id = {}", request.getId()); + { // Валидация + RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(companyBlockRequestBaseRequest); + if (requestInfoUpdate != null) return requestInfoUpdate; + +// requestInfoUpdate = validationHelper.validateTillFirstError(companyBlockRequestBaseRequest, companyDeleteRequestValidator); +// if (requestInfoUpdate != null) return requestInfoUpdate; + } + + Company company = companyIMap.getSingleObjectByID(request.getId()); + if (company == null) { + log.warn("Company {} not found", request.getId()); + return requestHelper.makeErrorResponse(companyBlockRequestBaseRequest, CompanyErrors.CompanyNotFound); + } + if (!WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus())) { + log.info("Company {} already blocked", request.getId()); + return requestHelper.makeErrorResponse(companyBlockRequestBaseRequest, CompanyErrors.CompanyDisabled); + } + + + ImdgTransaction transaction = imdgProvider.newTransaction(); + transaction.beginTransaction(); + boolean txOk = false; + try { + Imdg companyMap = transaction.getImdg(IMDGDistributedNames.Map_Company, Company.class); + + company.setUpdated(Instant.now()); + + company.setWorkflowStatus(WorkflowStatus.Blocked.getKey()); + + relationHelper.onChangeWorkflowStatusOnlyRelationChange(transaction, company, company.getWorkflowStatus()); + log.debug("Update company.id={}", company.getId()); + companyMap.update(company); + + txOk = true; + } finally { + if (txOk) + transaction.commitTransaction(); + else + transaction.rollbackTransaction(); + } + return null; + } + } diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/RelationHelper.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/RelationHelper.java index 61fb15e7c..c68595767 100644 --- a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/RelationHelper.java +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/RelationHelper.java @@ -55,9 +55,22 @@ public class RelationHelper { public void onChangeWorkflowStatus(ImdgTransaction transaction, Company company, String oldStatus, String newStatus) throws ValidationException { log.debug("Company id={} status changed from {} to {}", company.getId(), oldStatus, company.getWorkflowStatus()); + onChangeWorkflowStatusOnlyRelationChange(transaction, company, newStatus); + + if (WorkflowStatus.Blocked.equalsByKey(newStatus)) { + // IV - сообщения на добавления документа расторжения договора + CompanyErrors hasError = accountNotification.accountTerminationNotification(company.getId()); + if (hasError != null) { + log.warn("Can not block company, cause error {}", hasError); + throw new ValidationException(hasError); + } + } + } + + protected void onChangeWorkflowStatusOnlyRelationChange(ImdgTransaction transaction, Company company, String newStatus) throws ValidationException { assert Objects.equals(newStatus, company.getWorkflowStatus()); String query = String.format("consumerId=%s", company.getId()); - Imdg relationMap = transaction.getImdg(IMDGDistributedNames.Map_Relation, Relation.class); + Imdg relationMap = transaction.getImdg(IMDGDistributedNames.Map_Relation, Relation.class); Collection relations = relationMap.getCollectionObjectsBySQL(query); log.trace("Selected {} Relation by query: {}", relations.size(), query); Instant now = Instant.now(); @@ -80,15 +93,5 @@ public class RelationHelper { relationMap.update(relation); } } - - if (WorkflowStatus.Blocked.equalsByKey(newStatus)) { - // IV - сообщения на добавления документа расторжения договора - CompanyErrors hasError = accountNotification.accountTerminationNotification(company.getId()); - if (hasError != null) { - log.warn("Can not block company, cause error {}", hasError); - throw new ValidationException(hasError); - } - } } - }