From 45f51a1b277ef8aad96c2d3962412dcdc2f0db0c Mon Sep 17 00:00:00 2001 From: aalehin Date: Wed, 24 May 2023 20:39:12 +0300 Subject: [PATCH] http://jira.mfd.msk:8088/browse/CLS-284 --- resolved issues --- .../ClearingMemberCategoryService.java | 32 ++++++++-- .../company/service/CompanyService.java | 2 +- .../service/ProfileDocumentService.java | 26 ++++++-- .../company/service/RelationService.java | 60 +++++++++++++++---- 4 files changed, 101 insertions(+), 19 deletions(-) diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/ClearingMemberCategoryService.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/ClearingMemberCategoryService.java index 9fcac3f22..33bdb7ed2 100644 --- a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/ClearingMemberCategoryService.java +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/ClearingMemberCategoryService.java @@ -9,6 +9,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; import ru.clearing.classes.statics.data.company.ClearingMemberCategory; +import ru.clearing.classes.statics.data.company.Company; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.platform.messaging.domain.BaseRequest; import ru.spcex.clearing.platform.messaging.domain.Consts; @@ -21,20 +22,25 @@ import ru.spcex.clearing.util.security.UserRoleVerification; import ru.spcex.clearing.validation.common.ValidationHelper; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; +import ru.spcex.platform.imdg.api.ImdgTransaction; import ru.spcex.platform.utils.validation.IValidator; +import java.util.Map; import java.util.function.Function; @Service public class ClearingMemberCategoryService extends QueueConsumer implements InitializingBean { private final Logger log = LoggerFactory.getLogger(getClass()); private final Imdg clearingMemberCategoryMap; + private final Imdg companyMap; + private final ImdgProvider imdgProvider; private final Function clearingMemberCategoryNewRequestValidator; private final Function clearingMemberCategoryUpdateRequestValidator; private final Function clearingMemberCategoryDeleteRequestValidator; private final ValidationHelper validationHelper; private final UserRoleVerification userRoleVerification; + private final CompanyService companyService; @Autowired public ClearingMemberCategoryService(Consumer kafkaQueue, @@ -44,14 +50,18 @@ public class ClearingMemberCategoryService extends QueueConsumer implements Init UserRoleVerification userRoleVerification, @Qualifier("clearingMemberCategoryNewRequestValidator") Function clearingMemberCategoryNewRequestValidator, @Qualifier("clearingMemberCategoryUpdateRequestValidator") Function clearingMemberCategoryUpdateRequestValidator, - @Qualifier("clearingMemberCategoryDeleteRequestValidator") Function clearingMemberCategoryDeleteRequestValidator) { + @Qualifier("clearingMemberCategoryDeleteRequestValidator") Function clearingMemberCategoryDeleteRequestValidator, + CompanyService companyService) { super(kafkaQueue, kafkaProducer); this.clearingMemberCategoryMap = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class); + this.companyMap = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); + this.imdgProvider = imdgProvider; this.clearingMemberCategoryNewRequestValidator = clearingMemberCategoryNewRequestValidator; this.clearingMemberCategoryUpdateRequestValidator = clearingMemberCategoryUpdateRequestValidator; this.clearingMemberCategoryDeleteRequestValidator = clearingMemberCategoryDeleteRequestValidator; this.validationHelper = validationHelper; this.userRoleVerification = userRoleVerification; + this.companyService = companyService; } @Override @@ -76,14 +86,28 @@ public class ClearingMemberCategoryService extends QueueConsumer implements Init requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, clearingMemberCategoryNewRequestValidator); if (requestInfoUpdate != null) return requestInfoUpdate; - ClearingMemberCategoryNewRequest req = userRequest.getRequestPayload(); ClearingMemberCategory newCategory = new ClearingMemberCategory(); newCategory.setCompanyId(req.getCompanyId()); newCategory.setClearingMemberCategory(req.getClearingMemberCategory()); - clearingMemberCategoryMap.insert(newCategory); - log.debug("successfully processed, new category id {}", newCategory.getId()); + synchronized (companyService) { + ImdgTransaction transaction = imdgProvider.newTransaction(); + transaction.beginTransaction(); + boolean txOk = false; + try { + companyService.relationService.createNewRelation(transaction, req.getCompanyId()); + Imdg txClearingMemberCategoryMap = transaction.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class); + txClearingMemberCategoryMap.insert(newCategory); + txOk = true; + } finally { + if (txOk) + transaction.commitTransaction(); + else + transaction.rollbackTransaction(); + } + } + log.debug("Successfully processed, new category id {}", newCategory.getId()); return null; } 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 3b51e8ed6..5ee1b2778 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 @@ -143,7 +143,7 @@ public class CompanyService extends QueueConsumer implements InitializingBean { companyMap.insert(company); log.debug("company-new request processed, BaseRequest.id = {}, company.id={}", companyNewRequestBaseRequest.getId(), company.getId()); - relationService.createNewRelation(transaction, company); + relationService.createNewRelation(transaction, company.getId()); if (!(WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus()))) { // Block relationService.onChangeWorkflowStatus(transaction, company, null, company.getWorkflowStatus()); } diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/ProfileDocumentService.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/ProfileDocumentService.java index 30eab291e..b9fd8f5ad 100644 --- a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/ProfileDocumentService.java +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/ProfileDocumentService.java @@ -9,6 +9,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.lang.NonNull; import org.springframework.stereotype.Service; +import ru.clearing.classes.statics.data.company.ClearingMemberCategory; import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.profile.ProfileDocument; import ru.spcex.clearing.company.error.CompanyErrors; @@ -27,6 +28,7 @@ import ru.spcex.platform.enumeration.DocumentTypes; 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; import ru.spcex.platform.utils.enumeration.IMessageResolver; import ru.spcex.platform.utils.validation.IValidator; @@ -41,6 +43,7 @@ public class ProfileDocumentService extends QueueConsumer implements Initializin private ImdgProvider imdgProvider; private AccountNotificationHelper accountNotificationHelper; + private final CompanyService companyService; private final Function profileDocumentNewRequestValidator; private final Function profileDocumentUpdateRequestValidator; private final Function profileDocumentDeleteRequestValidator; @@ -60,7 +63,8 @@ public class ProfileDocumentService extends QueueConsumer implements Initializin ValidationHelper validationHelper, IMessageResolver messageResolver, RequestHelper requestHelper, - AccountNotificationHelper accountNotificationHelper) { + AccountNotificationHelper accountNotificationHelper, + CompanyService companyService) { super(kafkaQueue, kafkaProducer); this.imdgProvider = imdgProvider; this.accountNotificationHelper = accountNotificationHelper; @@ -71,6 +75,7 @@ public class ProfileDocumentService extends QueueConsumer implements Initializin this.userRoleVerification = userRoleVerification; this.messageResolver = messageResolver; this.requestHelper = requestHelper.setLogger(log); + this.companyService = companyService; } @Override @@ -148,9 +153,22 @@ public class ProfileDocumentService extends QueueConsumer implements Initializin log.debug("Company {} not active", profileDocument.getCompanyId()); return requestHelper.makeErrorResponse(deleteRequest, CompanyErrors.CompanyNotFound, profileDocument.getCompanyId()); } - - profileDocumentMap.delete(profileDocument); - + synchronized (companyService) { + ImdgTransaction transaction = imdgProvider.newTransaction(); + transaction.beginTransaction(); + boolean txOk = false; + try { + companyService.relationService.cancelingOfAgreementUpdateRelation(transaction, profileDocument.getCompanyId()); + Imdg txProfileDocumentMap= transaction.getImdg(IMDGDistributedNames.Map_ProfileDocument, ProfileDocument.class); + txProfileDocumentMap.delete(profileDocument); + txOk = true; + } finally { + if (txOk) + transaction.commitTransaction(); + else + transaction.rollbackTransaction(); + } + } log.trace("successfully deleted, id {}", profileDocument.getId()); return null; diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/RelationService.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/RelationService.java index d91417af6..0fbd00f46 100644 --- a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/RelationService.java +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/RelationService.java @@ -8,6 +8,7 @@ import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; +import ru.clearing.classes.statics.data.company.ClearingMemberCategory; import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.company.relation.Relation; import ru.spcex.clearing.company.error.CompanyErrors; @@ -29,6 +30,7 @@ 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.ImdgTransaction; +import ru.spcex.platform.utils.enumeration.IEnumKey; import ru.spcex.platform.utils.error.ValidationException; import ru.spcex.platform.utils.validation.IValidator; @@ -38,6 +40,11 @@ import java.util.Map; import java.util.Objects; import java.util.function.Function; +import static ru.spcex.platform.enumeration.Service.FOND; +import static ru.spcex.platform.enumeration.Service.MKR; +import static ru.spcex.platform.enumeration.SessionStatus.CLOS; +import static ru.spcex.platform.utils.enumeration.IEnumKey.getEnumByKey; + @Service public class RelationService extends QueueConsumer implements InitializingBean { protected static final Long SPVB_ID = 1L; // СПВБ @@ -106,6 +113,14 @@ public class RelationService extends QueueConsumer implements InitializingBean { private synchronized RequestInfoUpdate relationNew(BaseRequest relationNewBaseRequest) { RelationNewRequest req = relationNewBaseRequest.getRequestPayload(); log.debug("relation-new request received, BaseRequest.id = {}", relationNewBaseRequest.getId()); + + { //проверка заполнен ли serviceStatus + String serviceStatus = req.getServiceStatus(); + if (serviceStatus == null || serviceStatus.isEmpty()) { + Company company = companyMap.getSingleObjectByFieldValues(Map.of("id", req.getCompanyId())); + req.setServiceStatus(company.getWorkflowStatus()); + } + } { // Валидация RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(relationNewBaseRequest); if (requestInfoUpdate != null) return requestInfoUpdate; @@ -120,7 +135,7 @@ public class RelationService extends QueueConsumer implements InitializingBean { Relation existRelation = searchRelation(req.getClearingMemberCategory(), req.getCompanyId()); if (existRelation != null && !WorkflowStatus.Blocked.equalsByKey(existRelation.getServiceStatus())) { CompanyErrors errorType; - if (ru.spcex.platform.enumeration.Service.MKR.equalsByKey(existRelation.getService())) { + if (MKR.equalsByKey(existRelation.getService())) { errorType = CompanyErrors.ClearingMemberCategoryOnMKRAlreadyExist; } else if (ru.spcex.platform.enumeration.Service.FOND.equalsByKey(existRelation.getService())) { errorType = CompanyErrors.ClearingMemberCategoryOnFONDAlreadyExist; @@ -160,7 +175,7 @@ public class RelationService extends QueueConsumer implements InitializingBean { relation.setServiceStatus(toStatus); } } - relation.setService(ru.spcex.platform.enumeration.Service.MKR.getKey()); // MKR + relation.setService(MKR.getKey()); // MKR relation.setServiceProduct(ServiceProduct.ZERO.getKey()); relation.setComment(req.getComment()); @@ -176,7 +191,7 @@ public class RelationService extends QueueConsumer implements InitializingBean { || ClearingCategory.I.equalsByKey(clearingMemberCategory) || ClearingCategory.V.equalsByKey(clearingMemberCategory) ) { - svc = ru.spcex.platform.enumeration.Service.MKR.getKey(); + svc = MKR.getKey(); } else if (ClearingCategory.C.equalsByKey(clearingMemberCategory) || ClearingCategory.F.equalsByKey(clearingMemberCategory) ) { @@ -265,21 +280,46 @@ public class RelationService extends QueueConsumer implements InitializingBean { // --- internal API --- - protected void createNewRelation(ImdgTransaction transaction, Company company) { + protected void createNewRelation(ImdgTransaction transaction, Long companyId) { + Imdg relationMap = transaction.getImdg(IMDGDistributedNames.Map_Relation, Relation.class); Relation relation = new Relation(); -// relation.setId(idSequence.nextId()); + Company company = transaction.getImdg(IMDGDistributedNames.Map_Company, Company.class).getSingleObjectByFieldValues(Map.of("id", companyId)); + ClearingMemberCategory clearingMemberCategory = transaction.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class).getSingleObjectByFieldValues(Map.of("companyId", companyId)); + + WorkflowStatus workflowStatus = getEnumByKey(WorkflowStatus.class, company.getWorkflowStatus()); + ClearingCategory clearingCategory = getEnumByKey(ClearingCategory.class, clearingMemberCategory.getClearingMemberCategory()); + String serviceStatus; + switch (Objects.requireNonNull(clearingCategory)){ + case B: + case I: + case V: + serviceStatus = MKR.getKey(); + break; + case C: + case F: + serviceStatus = FOND.getKey(); + break; + default: + throw new IllegalStateException("Illegal state of clearingCategory"); + } + relation.setCreated(Instant.now()); relation.setUpdated(relation.getCreated()); - - relation.setConsumerId(company.getId()); + relation.setConsumerId(companyId); relation.setSupplierId(SPVB_ID); // 1 СПВБ - relation.setServiceStatus(WorkflowStatus.Active.getKey()); - relation.setService(ru.spcex.platform.enumeration.Service.MKR.getKey()); // MKR + relation.setServiceStatus(Objects.requireNonNull(workflowStatus).getKey()); + relation.setService(serviceStatus); relation.setServiceProduct(ServiceProduct.ZERO.getKey()); log.debug("New Relation[{}] created.", relation.getId()); - Imdg relationMap = transaction.getImdg(IMDGDistributedNames.Map_Relation, Relation.class); relationMap.insert(relation); } + protected void cancelingOfAgreementUpdateRelation(ImdgTransaction transaction, Long companyId) { + Imdg relationMap = transaction.getImdg(IMDGDistributedNames.Map_Relation, Relation.class); + Relation relation = relationMap.getSingleObjectByFieldValues(Map.of("consumerId", companyId)); + relation.setServiceStatus(CLOS.getKey()); + relationMap.update(relation); + log.debug("New Relation[{}] updated.", relation.getId()); + } /** * @param company