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 4e341dc79..b556168bd 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 @@ -1,5 +1,6 @@ package ru.spcex.clearing.company.service; +import java.util.function.Function; import org.apache.kafka.clients.consumer.Consumer; import org.apache.kafka.clients.producer.Producer; import org.slf4j.Logger; @@ -12,25 +13,18 @@ import ru.clearing.classes.statics.data.company.ClearingMemberCategory; import ru.clearing.classes.statics.data.company.Company; import ru.spcex.clearing.company.service.v2.facade.CompanyServiceFacade; import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.platform.messaging.domain.BaseRequest; -import ru.spcex.clearing.platform.messaging.domain.Consts; import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; import ru.spcex.clearing.platform.messaging.domain.cud.company.ClearingMemberCategoryNewRequest; import ru.spcex.clearing.platform.messaging.domain.cud.company.ClearingMemberCategoryUpdateRequest; import ru.spcex.clearing.platform.messaging.service.QueueConsumer; -import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate; import ru.spcex.clearing.util.security.UserRoleVerification; import ru.spcex.clearing.validation.common.ValidationHelper; -import ru.spcex.platform.enumeration.ClearingCategory; 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.validation.IValidator; -import java.util.function.Function; - +@Deprecated @Service public class ClearingMemberCategoryService extends QueueConsumer implements InitializingBean { private final Logger log = LoggerFactory.getLogger(getClass()); @@ -71,131 +65,131 @@ public class ClearingMemberCategoryService extends QueueConsumer implements Init @Override public void afterPropertiesSet() { - callback(ClearingMemberCategoryNewRequest.class) - .setFunction(this::clearingMemberCategoryNew) - .forDestination(Consts.DESTINATION_CLEARING_MEMBER_CATEGORY_NEW, callbacks::put); - callback(ClearingMemberCategoryUpdateRequest.class) - .setFunction(this::clearingMemberCategoryUpdate) - .forDestination(Consts.DESTINATION_CLEARING_MEMBER_CATEGORY_UPDATE, callbacks::put); - callback(CommonDeleteRequest.class) - .setFunction(this::clearingMemberCategoryDelete) - .forDestination(Consts.DESTINATION_CLEARING_MEMBER_CATEGORY_DELETE, callbacks::put); - init(); +// callback(ClearingMemberCategoryNewRequest.class) +// .setFunction(this::clearingMemberCategoryNew) +// .forDestination(Consts.DESTINATION_CLEARING_MEMBER_CATEGORY_NEW, callbacks::put); +// callback(ClearingMemberCategoryUpdateRequest.class) +// .setFunction(this::clearingMemberCategoryUpdate) +// .forDestination(Consts.DESTINATION_CLEARING_MEMBER_CATEGORY_UPDATE, callbacks::put); +// callback(CommonDeleteRequest.class) +// .setFunction(this::clearingMemberCategoryDelete) +// .forDestination(Consts.DESTINATION_CLEARING_MEMBER_CATEGORY_DELETE, callbacks::put); +// init(); } - public RequestInfoUpdate clearingMemberCategoryNew(BaseRequest userRequest) { - log.debug("ClearingMemberCategoryNewRequest received {}", userRequest.getId()); - - RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest); - if (requestInfoUpdate != null) return requestInfoUpdate; - - requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, clearingMemberCategoryNewRequestValidator); - if (requestInfoUpdate != null) return requestInfoUpdate; - ClearingMemberCategoryNewRequest req = userRequest.getRequestPayload(); - ClearingMemberCategory newCategory = new ClearingMemberCategory(); - newCategory.setId(idSequence.nextId()); - newCategory.setCompanyId(req.getCompanyId()); - newCategory.setClearingMemberCategory(req.getClearingMemberCategory()); - - synchronized (companyService) { - ImdgTransaction transaction = imdgProvider.newTransaction(); - transaction.beginTransaction(); - boolean txOk = false; - try { - if (IEnumKey.contains(newCategory.getClearingMemberCategory(), ClearingCategory.T, ClearingCategory.K)) { - log.debug("For category \"{}\" do not create relation.", newCategory.getClearingMemberCategory()); - } else { - companyService.relationService.createNewRelation(transaction, req.getCompanyId(), newCategory); - } - 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; - } - - - public RequestInfoUpdate clearingMemberCategoryUpdate(BaseRequest userRequest) { - ClearingMemberCategoryUpdateRequest req = userRequest.getRequestPayload(); - - RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest); - if (requestInfoUpdate != null) return requestInfoUpdate; - - requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, clearingMemberCategoryUpdateRequestValidator); - if (requestInfoUpdate != null) return requestInfoUpdate; - - log.debug("ClearingMemberCategoryUpdateRequest received"); - ClearingMemberCategory clearingMemberCategory = clearingMemberCategoryMap.getSingleObjectByID(req.getId()); - - // if (Objects.equals(clearingMemberCategory.getClearingMemberCategory(), req.getClearingMemberCategory())) - String oldClearingMemberCategory = clearingMemberCategory.getClearingMemberCategory(); - clearingMemberCategory.setClearingMemberCategory(req.getClearingMemberCategory()); - synchronized (companyService) { - ImdgTransaction transaction = imdgProvider.newTransaction(); - transaction.beginTransaction(); - boolean txOk = false; - try { - //todo сложный кейс с возможным изменением релейшена или пересозданием. Скоро ТЗ доделают. - //companyService.relationService.updateExistRelation(transaction,clearingMemberCategory.getCompanyId(), oldClearingMemberCategory, - // clearingMemberCategory.getClearingMemberCategory()); - companyService.relationService.createNewRelation(transaction, clearingMemberCategory.getCompanyId(), clearingMemberCategory); - Imdg txClearingMemberCategoryMap = transaction.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class); - txClearingMemberCategoryMap.insert(clearingMemberCategory); - txOk = true; - } finally { - if (txOk) - transaction.commitTransaction(); - else - transaction.rollbackTransaction(); - } - } - - log.debug("successfully processed, id {}", clearingMemberCategory.getId()); - return null; - } - - private RequestInfoUpdate clearingMemberCategoryDelete(BaseRequest userRequest) { - CommonDeleteRequest req = userRequest.getRequestPayload(); - - RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest); - if (requestInfoUpdate != null) return requestInfoUpdate; - - requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, clearingMemberCategoryDeleteRequestValidator); - if (requestInfoUpdate != null) return requestInfoUpdate; - - log.debug("CommonDeleteRequest received id = {}", req.getId()); - ClearingMemberCategory clearingMemberCategory = clearingMemberCategoryMap.getSingleObjectByID(req.getId()); - - synchronized (companyService) { - ImdgTransaction transaction = imdgProvider.newTransaction(); - transaction.beginTransaction(); - boolean txOk = false; - try { - Imdg txClearingMemberCategoryMap = transaction.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class); - txClearingMemberCategoryMap.delete(clearingMemberCategory); // далить до cancelRelation внутри транзакции - if (clearingMemberCategory.getCompanyId() == null) { // never, только тестовые данные - log.warn("Deleted clearingMemberCategory[{}] has not companyId", clearingMemberCategory.getId()); - } else { - companyService.relationService.cancelRelation(transaction, clearingMemberCategory.getCompanyId(), clearingMemberCategory); - } - txOk = true; - } finally { - if (txOk) - transaction.commitTransaction(); - else - transaction.rollbackTransaction(); - } - } - - log.debug("clearingMemberCategory.id={} deleted.", clearingMemberCategory.getId()); - - return null; - } +// public RequestInfoUpdate clearingMemberCategoryNew(BaseRequest userRequest) { +// log.debug("ClearingMemberCategoryNewRequest received {}", userRequest.getId()); +// +// RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest); +// if (requestInfoUpdate != null) return requestInfoUpdate; +// +// requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, clearingMemberCategoryNewRequestValidator); +// if (requestInfoUpdate != null) return requestInfoUpdate; +// ClearingMemberCategoryNewRequest req = userRequest.getRequestPayload(); +// ClearingMemberCategory newCategory = new ClearingMemberCategory(); +// newCategory.setId(idSequence.nextId()); +// newCategory.setCompanyId(req.getCompanyId()); +// newCategory.setClearingMemberCategory(req.getClearingMemberCategory()); +// +// synchronized (companyService) { +// ImdgTransaction transaction = imdgProvider.newTransaction(); +// transaction.beginTransaction(); +// boolean txOk = false; +// try { +// if (IEnumKey.contains(newCategory.getClearingMemberCategory(), ClearingCategory.T, ClearingCategory.K)) { +// log.debug("For category \"{}\" do not create relation.", newCategory.getClearingMemberCategory()); +// } else { +// companyService.relationService.createNewRelation(transaction, req.getCompanyId(), newCategory); +// } +// 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; +// } +// +// +// public RequestInfoUpdate clearingMemberCategoryUpdate(BaseRequest userRequest) { +// ClearingMemberCategoryUpdateRequest req = userRequest.getRequestPayload(); +// +// RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest); +// if (requestInfoUpdate != null) return requestInfoUpdate; +// +// requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, clearingMemberCategoryUpdateRequestValidator); +// if (requestInfoUpdate != null) return requestInfoUpdate; +// +// log.debug("ClearingMemberCategoryUpdateRequest received"); +// ClearingMemberCategory clearingMemberCategory = clearingMemberCategoryMap.getSingleObjectByID(req.getId()); +// +// // if (Objects.equals(clearingMemberCategory.getClearingMemberCategory(), req.getClearingMemberCategory())) +// String oldClearingMemberCategory = clearingMemberCategory.getClearingMemberCategory(); +// clearingMemberCategory.setClearingMemberCategory(req.getClearingMemberCategory()); +// synchronized (companyService) { +// ImdgTransaction transaction = imdgProvider.newTransaction(); +// transaction.beginTransaction(); +// boolean txOk = false; +// try { +// //todo сложный кейс с возможным изменением релейшена или пересозданием. Скоро ТЗ доделают. +// //companyService.relationService.updateExistRelation(transaction,clearingMemberCategory.getCompanyId(), oldClearingMemberCategory, +// // clearingMemberCategory.getClearingMemberCategory()); +// companyService.relationService.createNewRelation(transaction, clearingMemberCategory.getCompanyId(), clearingMemberCategory); +// Imdg txClearingMemberCategoryMap = transaction.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class); +// txClearingMemberCategoryMap.insert(clearingMemberCategory); +// txOk = true; +// } finally { +// if (txOk) +// transaction.commitTransaction(); +// else +// transaction.rollbackTransaction(); +// } +// } +// +// log.debug("successfully processed, id {}", clearingMemberCategory.getId()); +// return null; +// } +// +// private RequestInfoUpdate clearingMemberCategoryDelete(BaseRequest userRequest) { +// CommonDeleteRequest req = userRequest.getRequestPayload(); +// +// RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest); +// if (requestInfoUpdate != null) return requestInfoUpdate; +// +// requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, clearingMemberCategoryDeleteRequestValidator); +// if (requestInfoUpdate != null) return requestInfoUpdate; +// +// log.debug("CommonDeleteRequest received id = {}", req.getId()); +// ClearingMemberCategory clearingMemberCategory = clearingMemberCategoryMap.getSingleObjectByID(req.getId()); +// +// synchronized (companyService) { +// ImdgTransaction transaction = imdgProvider.newTransaction(); +// transaction.beginTransaction(); +// boolean txOk = false; +// try { +// Imdg txClearingMemberCategoryMap = transaction.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class); +// txClearingMemberCategoryMap.delete(clearingMemberCategory); // далить до cancelRelation внутри транзакции +// if (clearingMemberCategory.getCompanyId() == null) { // never, только тестовые данные +// log.warn("Deleted clearingMemberCategory[{}] has not companyId", clearingMemberCategory.getId()); +// } else { +// companyService.relationService.cancelRelation(transaction, clearingMemberCategory.getCompanyId(), clearingMemberCategory); +// } +// txOk = true; +// } finally { +// if (txOk) +// transaction.commitTransaction(); +// else +// transaction.rollbackTransaction(); +// } +// } +// +// log.debug("clearingMemberCategory.id={} deleted.", clearingMemberCategory.getId()); +// +// return null; +// } } diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanyInfoService.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanyInfoService.java index 887232ba7..2a6481219 100644 --- a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanyInfoService.java +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanyInfoService.java @@ -1,6 +1,6 @@ package ru.spcex.clearing.company.service; -import org.apache.commons.lang3.StringUtils; +import java.util.function.Function; import org.apache.kafka.clients.consumer.Consumer; import org.apache.kafka.clients.producer.Producer; import org.slf4j.Logger; @@ -10,28 +10,18 @@ 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.Company; -import ru.clearing.classes.statics.data.profile.CompanyInfo; -import ru.spcex.clearing.company.error.CompanyErrors; import ru.spcex.clearing.company.service.v2.facade.CompanyServiceFacade; import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.platform.messaging.domain.BaseRequest; -import ru.spcex.clearing.platform.messaging.domain.Consts; import ru.spcex.clearing.platform.messaging.domain.cud.company.CompanyInfoUpdateRequest; import ru.spcex.clearing.platform.messaging.service.QueueConsumer; -import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate; import ru.spcex.clearing.util.security.UserRoleVerification; import ru.spcex.clearing.util.services.RequestHelper; 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.error.ValidationException; import ru.spcex.platform.utils.validation.IValidator; -import java.time.Instant; -import java.util.Objects; -import java.util.function.Function; - +@Deprecated @Service public class CompanyInfoService extends QueueConsumer implements InitializingBean { private final Logger log = LoggerFactory.getLogger(getClass()); @@ -62,83 +52,83 @@ public class CompanyInfoService extends QueueConsumer implements InitializingBea @Override public void afterPropertiesSet() { - callback(CompanyInfoUpdateRequest.class) - .setFunction(request -> requestHelper.requestFunction(this::companyInfoUpdate, request)) - .forDestination(Consts.DESTINATION_COMPANY_INFO_UPDATE, callbacks::put); - callback(CompanyInfoUpdateRequest.class) - .setFunction(request -> requestHelper.requestFunction(this::companyInfoUpdate, request)) - .forDestination(Consts.DESTINATION_COMPANY_INFO_NEW, callbacks::put); // логика заполнения одинакова с companyInfoUpdate - init(); +// callback(CompanyInfoUpdateRequest.class) +// .setFunction(request -> requestHelper.requestFunction(this::companyInfoUpdate, request)) +// .forDestination(Consts.DESTINATION_COMPANY_INFO_UPDATE, callbacks::put); +// callback(CompanyInfoUpdateRequest.class) +// .setFunction(request -> requestHelper.requestFunction(this::companyInfoUpdate, request)) +// .forDestination(Consts.DESTINATION_COMPANY_INFO_NEW, callbacks::put); // логика заполнения одинакова с companyInfoUpdate +// init(); } - public RequestInfoUpdate companyInfoUpdate(BaseRequest companyInfoReq) throws ValidationException { - CompanyInfoUpdateRequest req = companyInfoReq.getRequestPayload(); - log.debug("{} received", req.getClass().getSimpleName()); - { // Валидация, ValidationException - RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(companyInfoReq); - if (requestInfoUpdate != null) return requestInfoUpdate; - - requestInfoUpdate = validationHelper.validateTillFirstError(companyInfoReq, companyInfoUpdateRequestValidator); - if (requestInfoUpdate != null) return requestInfoUpdate; - } - synchronized (companyService) { - Company company = companyMap.getSingleObjectByID(req.getId()); - if (company == null) { - log.trace("Company {} not found", req.getId()); - return requestHelper.makeErrorResponse(companyInfoReq, CompanyErrors.CompanyNotFound, companyInfoReq.getId()); - } - company.setUpdated(Instant.now()); - if (StringUtils.isNotEmpty(req.getShortName())) - company.setShortName(req.getShortName()); - if (StringUtils.isNotEmpty(req.getFullName())) - company.setFullName(req.getFullName()); - CompanyInfo companyInfo = company.getProfile(); - - companyInfo.setCountryCode(req.getCountryCode()); - companyInfo.setProfessionalSign(req.getProfessionalSign()); - companyInfo.setLegalKind(req.getLegalKind()); - companyInfo.setOrganizationType(req.getOrganizationType()); - companyInfo.setResidence(req.getResidence()); - - companyInfo.setCorporationSoleType(req.getCorporationSoleType()); - companyInfo.setDescription(req.getDescription()); - companyInfo.setShortNameEng(req.getShortNameEng()); - companyInfo.setFullNameEng(req.getFullNameEng()); - - boolean simpleUpdate = true; - if (req.getWorkflowStatus() != null) { - String prevStatus = company.getWorkflowStatus(); - company.setWorkflowStatus(req.getWorkflowStatus()); - if (!Objects.equals(prevStatus, company.getWorkflowStatus())) { - simpleUpdate = false; - ImdgTransaction transaction = imdgProvider.newTransaction(); - transaction.beginTransaction(); - boolean txOk = false; - try { - companyService.relationService.onChangeWorkflowStatus(transaction, company, prevStatus, company.getWorkflowStatus()); - Imdg txCompanyMap = transaction.getImdg(IMDGDistributedNames.Map_Company, Company.class); - txCompanyMap.update(company); - log.trace("Company {} updated", company.getId()); - txOk = true; - } finally { - if (txOk) - transaction.commitTransaction(); - else - transaction.rollbackTransaction(); - } - } else { - log.trace("Status was not changed"); - } - } else { - log.trace("Null new WorkflowStatus"); - } - if (simpleUpdate) { - companyMap.update(company); - log.trace("Company {} updated", company.getId()); - } - log.debug("successfully CompanyInfo processed, id {}", companyInfo.getId()); - } - return null; - } +// public RequestInfoUpdate companyInfoUpdate(BaseRequest companyInfoReq) throws ValidationException { +// CompanyInfoUpdateRequest req = companyInfoReq.getRequestPayload(); +// log.debug("{} received", req.getClass().getSimpleName()); +// { // Валидация, ValidationException +// RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(companyInfoReq); +// if (requestInfoUpdate != null) return requestInfoUpdate; +// +// requestInfoUpdate = validationHelper.validateTillFirstError(companyInfoReq, companyInfoUpdateRequestValidator); +// if (requestInfoUpdate != null) return requestInfoUpdate; +// } +// synchronized (companyService) { +// Company company = companyMap.getSingleObjectByID(req.getId()); +// if (company == null) { +// log.trace("Company {} not found", req.getId()); +// return requestHelper.makeErrorResponse(companyInfoReq, CompanyErrors.CompanyNotFound, companyInfoReq.getId()); +// } +// company.setUpdated(Instant.now()); +// if (StringUtils.isNotEmpty(req.getShortName())) +// company.setShortName(req.getShortName()); +// if (StringUtils.isNotEmpty(req.getFullName())) +// company.setFullName(req.getFullName()); +// CompanyInfo companyInfo = company.getProfile(); +// +// companyInfo.setCountryCode(req.getCountryCode()); +// companyInfo.setProfessionalSign(req.getProfessionalSign()); +// companyInfo.setLegalKind(req.getLegalKind()); +// companyInfo.setOrganizationType(req.getOrganizationType()); +// companyInfo.setResidence(req.getResidence()); +// +// companyInfo.setCorporationSoleType(req.getCorporationSoleType()); +// companyInfo.setDescription(req.getDescription()); +// companyInfo.setShortNameEng(req.getShortNameEng()); +// companyInfo.setFullNameEng(req.getFullNameEng()); +// +// boolean simpleUpdate = true; +// if (req.getWorkflowStatus() != null) { +// String prevStatus = company.getWorkflowStatus(); +// company.setWorkflowStatus(req.getWorkflowStatus()); +// if (!Objects.equals(prevStatus, company.getWorkflowStatus())) { +// simpleUpdate = false; +// ImdgTransaction transaction = imdgProvider.newTransaction(); +// transaction.beginTransaction(); +// boolean txOk = false; +// try { +// companyService.relationService.onChangeWorkflowStatus(transaction, company, prevStatus, company.getWorkflowStatus()); +// Imdg txCompanyMap = transaction.getImdg(IMDGDistributedNames.Map_Company, Company.class); +// txCompanyMap.update(company); +// log.trace("Company {} updated", company.getId()); +// txOk = true; +// } finally { +// if (txOk) +// transaction.commitTransaction(); +// else +// transaction.rollbackTransaction(); +// } +// } else { +// log.trace("Status was not changed"); +// } +// } else { +// log.trace("Null new WorkflowStatus"); +// } +// if (simpleUpdate) { +// companyMap.update(company); +// log.trace("Company {} updated", company.getId()); +// } +// log.debug("successfully CompanyInfo processed, id {}", companyInfo.getId()); +// } +// return null; +// } } diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanyRoleSetService.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanyRoleSetService.java index 50e197e7e..02f5071e6 100644 --- a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanyRoleSetService.java +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanyRoleSetService.java @@ -1,5 +1,8 @@ package ru.spcex.clearing.company.service; +import java.util.Map; +import java.util.Objects; +import java.util.function.Function; import org.apache.kafka.clients.consumer.Consumer; import org.apache.kafka.clients.producer.Producer; import org.slf4j.Logger; @@ -8,12 +11,10 @@ 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.Company; import ru.clearing.classes.statics.data.company.CompanyRoleSet; import ru.spcex.clearing.company.error.CompanyErrors; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.platform.messaging.domain.BaseRequest; -import ru.spcex.clearing.platform.messaging.domain.Consts; import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; import ru.spcex.clearing.platform.messaging.domain.cud.company.CompanyRoleSetNewRequest; import ru.spcex.clearing.platform.messaging.domain.cud.company.CompanyRoleSetUpdateRequest; @@ -31,10 +32,7 @@ import ru.spcex.platform.utils.enumeration.IMessageResolver; import ru.spcex.platform.utils.error.ValidationException; import ru.spcex.platform.utils.validation.IValidator; -import java.util.Map; -import java.util.Objects; -import java.util.function.Function; - +@Deprecated @Service public class CompanyRoleSetService extends QueueConsumer implements InitializingBean { private final Logger log = LoggerFactory.getLogger(getClass()); @@ -81,17 +79,17 @@ public class CompanyRoleSetService extends QueueConsumer implements Initializing @Override public void afterPropertiesSet() { - callback(CompanyRoleSetNewRequest.class) - .setFunction(request -> requestHelper.requestFunction(this::createCompanyRoleSet, request)) - .forDestination(Consts.DESTINATION_COMPANY_ROLE_SETS_NEW, callbacks::put); - callback(CompanyRoleSetUpdateRequest.class) - .setConsumer(request -> requestHelper.requestFunction(this::updateCompanyRoleSet, request)) - .forDestination(Consts.DESTINATION_COMPANY_ROLE_SETS_UPDATE, callbacks::put); - callback(CommonDeleteRequest.class) - .setFunction(request -> requestHelper.requestFunction(this::deleteCompanyRoleSet, request)) - .forDestination(Consts.DESTINATION_COMPANY_ROLE_SETS_DELETE - , callbacks::put); - init(); +// callback(CompanyRoleSetNewRequest.class) +// .setFunction(request -> requestHelper.requestFunction(this::createCompanyRoleSet, request)) +// .forDestination(Consts.DESTINATION_COMPANY_ROLE_SETS_NEW, callbacks::put); +// callback(CompanyRoleSetUpdateRequest.class) +// .setConsumer(request -> requestHelper.requestFunction(this::updateCompanyRoleSet, request)) +// .forDestination(Consts.DESTINATION_COMPANY_ROLE_SETS_UPDATE, callbacks::put); +// callback(CommonDeleteRequest.class) +// .setFunction(request -> requestHelper.requestFunction(this::deleteCompanyRoleSet, request)) +// .forDestination(Consts.DESTINATION_COMPANY_ROLE_SETS_DELETE +// , callbacks::put); +// init(); } private RequestInfoUpdate createCompanyRoleSet(BaseRequest companyRoleNewRequestBaseRequest) throws ValidationException { 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 2408f2896..5588a3ff7 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 @@ -1,96 +1,62 @@ package ru.spcex.clearing.company.service; -import org.apache.commons.lang3.StringUtils; import org.apache.kafka.clients.consumer.Consumer; import org.apache.kafka.clients.producer.Producer; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; 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.Company; -import ru.clearing.classes.statics.data.company.CompanySymbols; -import ru.clearing.classes.statics.data.profile.CompanyInfo; -import ru.spcex.clearing.company.error.CompanyErrors; -import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.platform.messaging.domain.ActionType; -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.AccountTerminationRequest; -import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; -import ru.spcex.clearing.platform.messaging.domain.cud.company.CompanyNewRequest; import ru.spcex.clearing.platform.messaging.service.QueueConsumer; -import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate; -import ru.spcex.clearing.util.security.UserRoleVerification; -import ru.spcex.clearing.util.services.RequestHelper; -import ru.spcex.clearing.validation.common.ValidationHelper; -import ru.spcex.platform.enumeration.CompanySymbol; -import ru.spcex.platform.enumeration.UserRole; -import ru.spcex.platform.enumeration.WorkflowStatus; -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.EnumMessage; -import ru.spcex.platform.utils.error.ClearingBaseException; -import ru.spcex.platform.utils.error.ValidationException; -import ru.spcex.platform.utils.validation.IValidator; - -import java.time.Instant; -import java.util.Objects; -import java.util.Optional; -import java.util.function.Function; @Deprecated @Service public class CompanyService extends QueueConsumer implements InitializingBean { - private final Logger log = LoggerFactory.getLogger(getClass()); - private final RequestHelper requestHelper; - private final ImdgProvider imdgProvider; - private final ImdgId idSequence; - private final Imdg companyIMap; - protected UserRoleVerification userRoleVerification; - protected CompanySymbolService companySymbolService; - protected AccountNotificationHelper accountNotification; - protected RelationService relationService; - private final ValidationHelper validationHelper; - private final Function companyNewRequestValidator; - private final Function companyUpdateRequestValidator; - private final Function companyDeleteRequestValidator; +// private final Logger log = LoggerFactory.getLogger(getClass()); +// private final RequestHelper requestHelper; +// private final ImdgProvider imdgProvider; +// private final ImdgId idSequence; +// private final Imdg companyIMap; +// protected UserRoleVerification userRoleVerification; +// protected CompanySymbolService companySymbolService; +// protected AccountNotificationHelper accountNotification; +// protected RelationService relationService; +// private final ValidationHelper validationHelper; +// private final Function companyNewRequestValidator; +// private final Function companyUpdateRequestValidator; +// private final Function companyDeleteRequestValidator; @Autowired - public CompanyService(Consumer kafkaQueue, Producer kafkaProducer, - ImdgProvider imdgProvider, - RequestHelper requestHelper, - ValidationHelper validationHelper, - UserRoleVerification userRoleVerification, - @Qualifier("companyNewRequestValidator") - Function companyNewRequestValidator, - @Qualifier("companyUpdateRequestValidator") - Function companyUpdateRequestValidator, - @Qualifier("CompanyDeleteRequestValidator") - Function companyDeleteRequestValidator, - CompanySymbolService companySymbolService, - AccountNotificationHelper accountNotification, - RelationService relationService) { + public CompanyService(Consumer kafkaQueue, Producer kafkaProducer +// ImdgProvider imdgProvider, +// RequestHelper requestHelper, +// ValidationHelper validationHelper, +// UserRoleVerification userRoleVerification, +// @Qualifier("companyNewRequestValidator") +// Function companyNewRequestValidator, +// @Qualifier("companyUpdateRequestValidator") +// Function companyUpdateRequestValidator, +// @Qualifier("CompanyDeleteRequestValidator") +// Function companyDeleteRequestValidator, +// CompanySymbolService companySymbolService, +// AccountNotificationHelper accountNotification, +// RelationService relationService + ) { super(kafkaQueue, kafkaProducer); - this.imdgProvider = imdgProvider; - this.requestHelper = requestHelper.setLogger(log); - this.idSequence = imdgProvider.getImdgIdGenerator(); - this.userRoleVerification = userRoleVerification; - this.userRoleVerification.setRoleForVerification(UserRole.Admin); - this.validationHelper = validationHelper; - this.companyNewRequestValidator = companyNewRequestValidator; - this.companyUpdateRequestValidator = companyUpdateRequestValidator; - this.companyDeleteRequestValidator = companyDeleteRequestValidator; - this.companySymbolService = companySymbolService; - this.companySymbolService.setCompanyService(this); - this.accountNotification = accountNotification; - this.relationService = relationService; - - companyIMap = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); +// this.imdgProvider = imdgProvider; +// this.requestHelper = requestHelper.setLogger(log); +// this.idSequence = imdgProvider.getImdgIdGenerator(); +// this.userRoleVerification = userRoleVerification; +// this.userRoleVerification.setRoleForVerification(UserRole.Admin); +// this.validationHelper = validationHelper; +// this.companyNewRequestValidator = companyNewRequestValidator; +// this.companyUpdateRequestValidator = companyUpdateRequestValidator; +// this.companyDeleteRequestValidator = companyDeleteRequestValidator; +// this.companySymbolService = companySymbolService; +// this.companySymbolService.setCompanyService(this); +// this.accountNotification = accountNotification; +// this.relationService = relationService; +// +// companyIMap = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); } @Override @@ -113,324 +79,324 @@ public class CompanyService extends QueueConsumer implements InitializingBean { // init(); } - private RequestInfoUpdate processBaseRequest(BaseRequest request) throws ValidationException { - // Валидация - RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(request); - if (requestInfoUpdate != null) return requestInfoUpdate; - ActionType actionType = request.getActionType(); - switch (actionType) { - case NEW -> { - CompanyNewRequest companyNewRequest = (CompanyNewRequest) request.getRequestPayload(); -// IValidator validator = companyNewRequestValidator.apply(companyNewRequest); -// Optional error = validator.tillFirstError(); -// if (error.isPresent()) { -// throw new ValidationException(error.get()); -// } - create(companyNewRequest); - } - case UPDATE -> update((CompanyNewRequest) request.getRequestPayload(), true); - } - return requestInfoUpdate; - } - - public synchronized Long create(CompanyNewRequest companyNewRequest) throws ValidationException { - IValidator validator = companyNewRequestValidator.apply(companyNewRequest); - Optional error = validator.tillFirstError(); - if (error.isPresent()) { - throw new ValidationException(error.get()); - } - - log.debug("creating new company"); - Instant now = Instant.now(); - Company company = new Company(); - company.setId(idSequence.nextId()); - company.setCreated(now); - company.setUpdated(now); - company.setShortName(companyNewRequest.getShortName()); - company.setFullName(companyNewRequest.getFullName()); - company.setTradingCode(companyNewRequest.getTradingCode()); - company.setClearingCode(companyNewRequest.getClearingCode()); - company.setRegistrationCode(companyNewRequest.getRegistrationCode()); - if (companyNewRequest.getWorkflowStatus() != null) { - company.setWorkflowStatus(companyNewRequest.getWorkflowStatus()); - } else { - company.setWorkflowStatus(WorkflowStatus.Active.getKey()); - } - fillNewCompanyInfo(company, companyNewRequest); - - ImdgTransaction transaction = imdgProvider.newTransaction(); - transaction.beginTransaction(); - boolean txOk = false; - try { - if (companyNewRequest.getCompanySymbol() != null) { - CompanySymbols newSymbol = new CompanySymbols(); - newSymbol.setId(idSequence.nextId()); - newSymbol.setCompanyId(company.getId()); - newSymbol.setCompanySymbol(companyNewRequest.getCompanySymbol()); - newSymbol.setCompanySymbolValue(companyNewRequest.getCompanySymbolValue()); - log.debug("Created new companySymbols.id={} for company {}", newSymbol.getId(), company.getId()); - Imdg companySymbolsImdg = transaction.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class); - companySymbolsImdg.insert(newSymbol); - log.debug("Creating companySymbols with id: {} by company.id: {} done", newSymbol.getId(), company.getId()); - updateCompanyBySymbol(company, newSymbol, false); - } - Imdg companyMap = transaction.getImdg(IMDGDistributedNames.Map_Company, Company.class); - companyMap.insert(company); - log.debug("company-new request processed, BaseRequest.id = {}, company.id={}", - companyNewRequest.getId(), company.getId()); - txOk = true; - } finally { - if (txOk) - transaction.commitTransaction(); - else - transaction.rollbackTransaction(); - } - accountNotification.makeInfoAccount(company.getId()); - return company.getId(); - } - - public synchronized void update(CompanyNewRequest updateRequest, boolean validationIsEnable) throws ValidationException { - if (validationIsEnable) { - IValidator validator = companyUpdateRequestValidator.apply(updateRequest); - Optional error = validator.tillFirstError(); - if (error.isPresent()) { - throw new ValidationException(error.get()); - } - } - ImdgTransaction transaction = imdgProvider.newTransaction(); - transaction.beginTransaction(); - boolean txOk = false; - try { - Imdg companyMap = transaction.getImdg(IMDGDistributedNames.Map_Company, Company.class); - Company company = companyMap.getSingleObjectByID(updateRequest.getId()); - if (company == null) { - log.trace("Company {} not found", updateRequest.getId()); - throw new ValidationException(new EnumMessage(CompanyErrors.CompanyNotFound)); - } -// if (!WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus())) { -// log.trace("Company {} not active: {}", company.getId(), company.getWorkflowStatus()); -// return requestHelper.makeErrorResponse(companyUpdateRequestBaseRequest, CompanyErrors.CompanyDisabled, updateRequest.getId()); +// private RequestInfoUpdate processBaseRequest(BaseRequest request) throws ValidationException { +// // Валидация +// RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(request); +// if (requestInfoUpdate != null) return requestInfoUpdate; +// ActionType actionType = request.getActionType(); +// switch (actionType) { +// case NEW -> { +// CompanyNewRequest companyNewRequest = (CompanyNewRequest) request.getRequestPayload(); +//// IValidator validator = companyNewRequestValidator.apply(companyNewRequest); +//// Optional error = validator.tillFirstError(); +//// if (error.isPresent()) { +//// throw new ValidationException(error.get()); +//// } +// create(companyNewRequest); // } - - company.setUpdated(Instant.now()); - if (StringUtils.isNotEmpty(updateRequest.getShortName())) - company.setShortName(updateRequest.getShortName()); - if (StringUtils.isNotEmpty(updateRequest.getFullName())) - company.setFullName(updateRequest.getFullName()); - - if (updateRequest.getCompanySymbol() != null || updateRequest.getCompanySymbolValue() != null) { - log.trace("Request field CompanySymbol, CompanySymbolValue ignore for update company request."); - } - - String prevStatus = company.getWorkflowStatus(); - if (updateRequest.getWorkflowStatus() != null) { - company.setWorkflowStatus(updateRequest.getWorkflowStatus()); - if (!Objects.equals(prevStatus, company.getWorkflowStatus())) { - relationService.onChangeWorkflowStatus(transaction, company, prevStatus, company.getWorkflowStatus()); - } else { - log.trace("Status was not changed"); - } - } else { - log.trace("Null new WorkflowStatus"); - } - companyMap.update(company); - txOk = true; - } finally { - if (txOk) - transaction.commitTransaction(); - else - transaction.rollbackTransaction(); - } - } - - protected void updateCompanyBySymbol(Company company, CompanySymbols companySymbol, boolean shouldBeDeleted) { - assert company.getId().equals(companySymbol.getCompanyId()); - String companySymbolValue = companySymbol.getCompanySymbolValue(); - String setUpValue = shouldBeDeletedOrSet(companySymbolValue, shouldBeDeleted); - if (CompanySymbol.TRDC.equalsByKey(companySymbol.getCompanySymbol())) { - company.setTradingCode(setUpValue); - } - if (CompanySymbol.CLRC.equalsByKey(companySymbol.getCompanySymbol())) { - company.setClearingCode(setUpValue); - } - if (CompanySymbol.RGRC.equalsByKey(companySymbol.getCompanySymbol())) { - company.setRegistrationCode(setUpValue); - } - } - - private String shouldBeDeletedOrSet(String companySymbol, boolean shouldBeDeleted) { - return shouldBeDeleted ? "" : companySymbol; - } - - public synchronized void updateCompanyBySymbol(ImdgTransaction transaction, CompanySymbols companySymbol, boolean shouldBeDeleted) throws ClearingBaseException { - if (companySymbol.getCompanyId() == null) { - throw new IllegalArgumentException("Required companySymbol.companyId"); - } - if (CompanySymbol.TRDC.equalsByKey(companySymbol.getCompanySymbol()) - || CompanySymbol.CLRC.equalsByKey(companySymbol.getCompanySymbol()) - || CompanySymbol.RGRC.equalsByKey(companySymbol.getCompanySymbol())) { - Imdg companyMap = transaction.getImdg(IMDGDistributedNames.Map_Company, Company.class); - - Company company = companyMap.getSingleObjectByID(companySymbol.getCompanyId()); - if (company == null) { - throw new ClearingBaseException(new EnumMessage(CompanyErrors.CompanyNotFound, companySymbol.getCompanyId())); - } - updateCompanyBySymbol(company, companySymbol, shouldBeDeleted); - company.setUpdated(Instant.now()); - companyMap.update(company); - log.debug("Company {} updated by change CompanySymbols {} ({})", - company.getId(), companySymbol.getId(), companySymbol.getCompanySymbol()); - } else { - log.trace("No need update company {} by changed companySymbols {}", - companySymbol.getCompanyId(), companySymbol.getCompanySymbol()); - } - } - - /** - * Блокировка компании - * - * @param companyBlockRequestBaseRequest - * @return - */ - private synchronized RequestInfoUpdate deleteCompany(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; - } - ImdgTransaction transaction = imdgProvider.newTransaction(); - transaction.beginTransaction(); - boolean txOk = false; - try { - Imdg companyMap = transaction.getImdg(IMDGDistributedNames.Map_Company, Company.class); - Company company = companyMap.getSingleObjectByID(request.getId()); - if (company == null) { - log.warn("Company {} not found", request.getId()); - return requestHelper.makeErrorResponse(companyBlockRequestBaseRequest, CompanyErrors.CompanyNotFound, request.getId()); - } - - company.setUpdated(Instant.now()); - - String prevStatus = company.getWorkflowStatus(); - company.setWorkflowStatus(WorkflowStatus.Blocked.getKey()); - - relationService.onChangeWorkflowStatus(transaction, company, prevStatus, company.getWorkflowStatus()); - log.debug("Update company.id={}", company.getId()); - companyMap.update(company); - - txOk = true; - } finally { - if (txOk) - transaction.commitTransaction(); - else - transaction.rollbackTransaction(); - } - 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; - +// case UPDATE -> update((CompanyNewRequest) request.getRequestPayload(), true); +// } +// return requestInfoUpdate; +// } +// +// public synchronized Long create(CompanyNewRequest companyNewRequest) throws ValidationException { +// IValidator validator = companyNewRequestValidator.apply(companyNewRequest); +// Optional error = validator.tillFirstError(); +// if (error.isPresent()) { +// throw new ValidationException(error.get()); +// } +// +// log.debug("creating new company"); +// Instant now = Instant.now(); +// Company company = new Company(); +// company.setId(idSequence.nextId()); +// company.setCreated(now); +// company.setUpdated(now); +// company.setShortName(companyNewRequest.getShortName()); +// company.setFullName(companyNewRequest.getFullName()); +// company.setTradingCode(companyNewRequest.getTradingCode()); +// company.setClearingCode(companyNewRequest.getClearingCode()); +// company.setRegistrationCode(companyNewRequest.getRegistrationCode()); +// if (companyNewRequest.getWorkflowStatus() != null) { +// company.setWorkflowStatus(companyNewRequest.getWorkflowStatus()); +// } else { +// company.setWorkflowStatus(WorkflowStatus.Active.getKey()); +// } +// fillNewCompanyInfo(company, companyNewRequest); +// +// ImdgTransaction transaction = imdgProvider.newTransaction(); +// transaction.beginTransaction(); +// boolean txOk = false; +// try { +// if (companyNewRequest.getCompanySymbol() != null) { +// CompanySymbols newSymbol = new CompanySymbols(); +// newSymbol.setId(idSequence.nextId()); +// newSymbol.setCompanyId(company.getId()); +// newSymbol.setCompanySymbol(companyNewRequest.getCompanySymbol()); +// newSymbol.setCompanySymbolValue(companyNewRequest.getCompanySymbolValue()); +// log.debug("Created new companySymbols.id={} for company {}", newSymbol.getId(), company.getId()); +// Imdg companySymbolsImdg = transaction.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class); +// companySymbolsImdg.insert(newSymbol); +// log.debug("Creating companySymbols with id: {} by company.id: {} done", newSymbol.getId(), company.getId()); +// updateCompanyBySymbol(company, newSymbol, false); +// } +// Imdg companyMap = transaction.getImdg(IMDGDistributedNames.Map_Company, Company.class); +// companyMap.insert(company); +// log.debug("company-new request processed, BaseRequest.id = {}, company.id={}", +// companyNewRequest.getId(), company.getId()); +// txOk = true; +// } finally { +// if (txOk) +// transaction.commitTransaction(); +// else +// transaction.rollbackTransaction(); +// } +// accountNotification.makeInfoAccount(company.getId()); +// return company.getId(); +// } +// +// public synchronized void update(CompanyNewRequest updateRequest, boolean validationIsEnable) throws ValidationException { +// if (validationIsEnable) { +// IValidator validator = companyUpdateRequestValidator.apply(updateRequest); +// Optional error = validator.tillFirstError(); +// if (error.isPresent()) { +// throw new ValidationException(error.get()); +// } +// } +// ImdgTransaction transaction = imdgProvider.newTransaction(); +// transaction.beginTransaction(); +// boolean txOk = false; +// try { +// Imdg companyMap = transaction.getImdg(IMDGDistributedNames.Map_Company, Company.class); +// Company company = companyMap.getSingleObjectByID(updateRequest.getId()); +// if (company == null) { +// log.trace("Company {} not found", updateRequest.getId()); +// throw new ValidationException(new EnumMessage(CompanyErrors.CompanyNotFound)); +// } +//// if (!WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus())) { +//// log.trace("Company {} not active: {}", company.getId(), company.getWorkflowStatus()); +//// return requestHelper.makeErrorResponse(companyUpdateRequestBaseRequest, CompanyErrors.CompanyDisabled, updateRequest.getId()); +//// } +// +// company.setUpdated(Instant.now()); +// if (StringUtils.isNotEmpty(updateRequest.getShortName())) +// company.setShortName(updateRequest.getShortName()); +// if (StringUtils.isNotEmpty(updateRequest.getFullName())) +// company.setFullName(updateRequest.getFullName()); +// +// if (updateRequest.getCompanySymbol() != null || updateRequest.getCompanySymbolValue() != null) { +// log.trace("Request field CompanySymbol, CompanySymbolValue ignore for update company request."); +// } +// +// String prevStatus = company.getWorkflowStatus(); +// if (updateRequest.getWorkflowStatus() != null) { +// company.setWorkflowStatus(updateRequest.getWorkflowStatus()); +// if (!Objects.equals(prevStatus, company.getWorkflowStatus())) { +// relationService.onChangeWorkflowStatus(transaction, company, prevStatus, company.getWorkflowStatus()); +// } else { +// log.trace("Status was not changed"); +// } +// } else { +// log.trace("Null new WorkflowStatus"); +// } +// companyMap.update(company); +// txOk = true; +// } finally { +// if (txOk) +// transaction.commitTransaction(); +// else +// transaction.rollbackTransaction(); +// } +// } +// +// protected void updateCompanyBySymbol(Company company, CompanySymbols companySymbol, boolean shouldBeDeleted) { +// assert company.getId().equals(companySymbol.getCompanyId()); +// String companySymbolValue = companySymbol.getCompanySymbolValue(); +// String setUpValue = shouldBeDeletedOrSet(companySymbolValue, shouldBeDeleted); +// if (CompanySymbol.TRDC.equalsByKey(companySymbol.getCompanySymbol())) { +// company.setTradingCode(setUpValue); +// } +// if (CompanySymbol.CLRC.equalsByKey(companySymbol.getCompanySymbol())) { +// company.setClearingCode(setUpValue); +// } +// if (CompanySymbol.RGRC.equalsByKey(companySymbol.getCompanySymbol())) { +// company.setRegistrationCode(setUpValue); +// } +// } +// +// private String shouldBeDeletedOrSet(String companySymbol, boolean shouldBeDeleted) { +// return shouldBeDeleted ? "" : companySymbol; +// } +// +// public synchronized void updateCompanyBySymbol(ImdgTransaction transaction, CompanySymbols companySymbol, boolean shouldBeDeleted) throws ClearingBaseException { +// if (companySymbol.getCompanyId() == null) { +// throw new IllegalArgumentException("Required companySymbol.companyId"); +// } +// if (CompanySymbol.TRDC.equalsByKey(companySymbol.getCompanySymbol()) +// || CompanySymbol.CLRC.equalsByKey(companySymbol.getCompanySymbol()) +// || CompanySymbol.RGRC.equalsByKey(companySymbol.getCompanySymbol())) { +// Imdg companyMap = transaction.getImdg(IMDGDistributedNames.Map_Company, Company.class); +// +// Company company = companyMap.getSingleObjectByID(companySymbol.getCompanyId()); +// if (company == null) { +// throw new ClearingBaseException(new EnumMessage(CompanyErrors.CompanyNotFound, companySymbol.getCompanyId())); +// } +// updateCompanyBySymbol(company, companySymbol, shouldBeDeleted); +// company.setUpdated(Instant.now()); +// companyMap.update(company); +// log.debug("Company {} updated by change CompanySymbols {} ({})", +// company.getId(), companySymbol.getId(), companySymbol.getCompanySymbol()); +// } else { +// log.trace("No need update company {} by changed companySymbols {}", +// companySymbol.getCompanyId(), companySymbol.getCompanySymbol()); +// } +// } +// +// /** +// * Блокировка компании +// * +// * @param companyBlockRequestBaseRequest +// * @return +// */ +// private synchronized RequestInfoUpdate deleteCompany(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, company.getShortName()); - } - - - 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()); - - relationService.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; - } - - /** - * Блокировка компании после блокировки счетов - * - * @return - */ - private synchronized RequestInfoUpdate finishCompanyTermination(BaseRequest terminationRequest) throws ValidationException { - AccountTerminationRequest request = terminationRequest.getRequestPayload(); - log.debug("AccountTerminationRequest (block request) received id = {}", terminationRequest.getId()); - { // Валидация - RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(terminationRequest); - if (requestInfoUpdate != null) return requestInfoUpdate; - } - - log.debug("Finish block company {}", request.getCompanyId()); - ImdgTransaction tx = imdgProvider.newTransaction(); - boolean txOk = false; - tx.beginTransaction(); - try { - Company company = companyIMap.getSingleObjectByID(request.getCompanyId()); - if (company == null) { - log.warn("Company {} not found", request.getCompanyId()); - //return requestHelper.makeErrorResponse(companyBlockRequestBaseRequest, CompanyErrors.CompanyNotFound); - } - if (WorkflowStatus.Blocked.equalsByKey(company.getWorkflowStatus())) { - log.info("Company {} already blocked", company.getId()); - //return requestHelper.makeErrorResponse(companyBlockRequestBaseRequest, CompanyErrors.CompanyDisabled); - } else { - company.setWorkflowStatus(WorkflowStatus.Blocked.getKey()); - company.setUpdated(Instant.now()); - companyIMap.update(company); - } - - relationService.cancelAllRelationForCompany(tx, request.getCompanyId()); - txOk = true; - } finally { - if (txOk) tx.commitTransaction(); - else tx.rollbackTransaction(); - } - return null; - } - - void fillNewCompanyInfo(Company company, CompanyNewRequest req) { - if (company.getProfile() == null) - company.setProfile(new CompanyInfo()); - CompanyInfo ci = company.getProfile(); - ci.setId(company.getId()); - ci.setCompanyId(company.getId()); - } +// } +// ImdgTransaction transaction = imdgProvider.newTransaction(); +// transaction.beginTransaction(); +// boolean txOk = false; +// try { +// Imdg companyMap = transaction.getImdg(IMDGDistributedNames.Map_Company, Company.class); +// Company company = companyMap.getSingleObjectByID(request.getId()); +// if (company == null) { +// log.warn("Company {} not found", request.getId()); +// return requestHelper.makeErrorResponse(companyBlockRequestBaseRequest, CompanyErrors.CompanyNotFound, request.getId()); +// } +// +// company.setUpdated(Instant.now()); +// +// String prevStatus = company.getWorkflowStatus(); +// company.setWorkflowStatus(WorkflowStatus.Blocked.getKey()); +// +// relationService.onChangeWorkflowStatus(transaction, company, prevStatus, company.getWorkflowStatus()); +// log.debug("Update company.id={}", company.getId()); +// companyMap.update(company); +// +// txOk = true; +// } finally { +// if (txOk) +// transaction.commitTransaction(); +// else +// transaction.rollbackTransaction(); +// } +// 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, company.getShortName()); +// } +// +// +// 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()); +// +// relationService.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; +// } +// +// /** +// * Блокировка компании после блокировки счетов +// * +// * @return +// */ +// private synchronized RequestInfoUpdate finishCompanyTermination(BaseRequest terminationRequest) throws ValidationException { +// AccountTerminationRequest request = terminationRequest.getRequestPayload(); +// log.debug("AccountTerminationRequest (block request) received id = {}", terminationRequest.getId()); +// { // Валидация +// RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(terminationRequest); +// if (requestInfoUpdate != null) return requestInfoUpdate; +// } +// +// log.debug("Finish block company {}", request.getCompanyId()); +// ImdgTransaction tx = imdgProvider.newTransaction(); +// boolean txOk = false; +// tx.beginTransaction(); +// try { +// Company company = companyIMap.getSingleObjectByID(request.getCompanyId()); +// if (company == null) { +// log.warn("Company {} not found", request.getCompanyId()); +// //return requestHelper.makeErrorResponse(companyBlockRequestBaseRequest, CompanyErrors.CompanyNotFound); +// } +// if (WorkflowStatus.Blocked.equalsByKey(company.getWorkflowStatus())) { +// log.info("Company {} already blocked", company.getId()); +// //return requestHelper.makeErrorResponse(companyBlockRequestBaseRequest, CompanyErrors.CompanyDisabled); +// } else { +// company.setWorkflowStatus(WorkflowStatus.Blocked.getKey()); +// company.setUpdated(Instant.now()); +// companyIMap.update(company); +// } +// +// relationService.cancelAllRelationForCompany(tx, request.getCompanyId()); +// txOk = true; +// } finally { +// if (txOk) tx.commitTransaction(); +// else tx.rollbackTransaction(); +// } +// return null; +// } +// +// void fillNewCompanyInfo(Company company, CompanyNewRequest req) { +// if (company.getProfile() == null) +// company.setProfile(new CompanyInfo()); +// CompanyInfo ci = company.getProfile(); +// ci.setId(company.getId()); +// ci.setCompanyId(company.getId()); +// } } diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanySymbolService.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanySymbolService.java index 3d3cc40e0..6b3c840ef 100644 --- a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanySymbolService.java +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanySymbolService.java @@ -1,6 +1,7 @@ package ru.spcex.clearing.company.service; +import java.util.function.Function; import org.apache.kafka.clients.consumer.Consumer; import org.apache.kafka.clients.producer.Producer; import org.slf4j.Logger; @@ -9,35 +10,19 @@ 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.Company; -import ru.clearing.classes.statics.data.company.CompanySymbols; -import ru.spcex.clearing.company.error.CompanyErrors; -import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.platform.messaging.domain.BaseRequest; -import ru.spcex.clearing.platform.messaging.domain.Consts; import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; import ru.spcex.clearing.platform.messaging.domain.cud.company.CompanySymbolNewRequest; import ru.spcex.clearing.platform.messaging.domain.cud.company.CompanySymbolUpdateRequest; import ru.spcex.clearing.platform.messaging.service.QueueConsumer; -import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate; -import ru.spcex.clearing.platform.messaging.service.Status; import ru.spcex.clearing.util.security.UserRoleVerification; import ru.spcex.clearing.util.services.RequestHelper; import ru.spcex.clearing.validation.common.ValidationHelper; import ru.spcex.platform.enumeration.UserRole; -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.EnumMessage; -import ru.spcex.platform.utils.error.ClearingBaseException; -import ru.spcex.platform.utils.error.ValidationException; import ru.spcex.platform.utils.validation.IValidator; -import java.util.Objects; -import java.util.Optional; -import java.util.function.Function; - +@Deprecated @Service public class CompanySymbolService extends QueueConsumer implements InitializingBean { private final Logger log = LoggerFactory.getLogger(getClass()); @@ -79,160 +64,160 @@ public class CompanySymbolService extends QueueConsumer implements InitializingB @Override public void afterPropertiesSet() { - callback(CompanySymbolNewRequest.class) - .setFunction(this::processBaseRequest) - .forDestination(Consts.DESTINATION_COMPANY_SYMBOL_NEW, callbacks::put); - callback(CompanySymbolUpdateRequest.class) - .setFunction(this::companySymbolUpdate) - .forDestination(Consts.DESTINATION_COMPANY_SYMBOL_UPDATE, callbacks::put); - callback(CommonDeleteRequest.class) - .setFunction(this::companySymbolDelete) - .forDestination(Consts.DESTINATION_COMPANY_SYMBOL_DELETE, callbacks::put); - init(); - } - - private RequestInfoUpdate processBaseRequest(BaseRequest request) { - RequestInfoUpdate requestInfoUpdate = null; - // Валидация - requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(request); - if (requestInfoUpdate != null) return requestInfoUpdate; - - try { - create((CompanySymbolNewRequest) request.getRequestPayload()); - } catch (ValidationException e) { - return requestHelper.makeErrorResponse(request, e.getEnumMsg()); - } - return requestInfoUpdate; - } - - public void setCompanyService(CompanyService companyService) { - this.companyService = companyService; - } - - - public Long create(CompanySymbolNewRequest symbolRequest) throws ValidationException { - log.debug("CompanySymbolNewRequest received"); - { // validate - IValidator validator = companySymbolNewRequestValidator.apply(symbolRequest); - Optional error = validator.tillFirstError(); - if (error.isPresent()) { - throw new ValidationException(error.get()); - } - } - - CompanySymbols companySymbols = create(symbolRequest.companyId, symbolRequest.getCompanySymbol(), - symbolRequest.getCompanySymbolValue()); - log.debug("successfully processed, id {}", companySymbols.getId()); - return null; - } - - public CompanySymbols create(Long companyId, String companySymbol, String companySymbolValue) { - Objects.requireNonNull(companyId); - CompanySymbols newSymbol = new CompanySymbols(); - newSymbol.setId(idSequence.nextId()); - newSymbol.setCompanyId(companyId); - newSymbol.setCompanySymbol(companySymbol); - newSymbol.setCompanySymbolValue(companySymbolValue); - log.debug("Created new companySymbols.id={} for company {}", newSymbol.getId(), companyId); - ImdgTransaction transaction = imdgProvider.newTransaction(); - transaction.beginTransaction(); - boolean txOk = false; - try { - Imdg companySymbolsTMap = transaction.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class); - companySymbolsTMap.update(newSymbol); - - Imdg companyMap = transaction.getImdg(IMDGDistributedNames.Map_Company, Company.class); - Company company = companyMap.getSingleObjectByID(newSymbol.getCompanyId()); - companyService.updateCompanyBySymbol(company, newSymbol, false); - companyMap.update(company); - txOk = true; - } finally { - if (txOk) - transaction.commitTransaction(); - else - transaction.rollbackTransaction(); - } - return newSymbol; - } - - public RequestInfoUpdate companySymbolUpdate(BaseRequest symbolRequest) { - CompanySymbolUpdateRequest req = symbolRequest.getRequestPayload(); - log.debug("CompanySymbolUpdateRequest received, id={}", symbolRequest.getId()); - - { // validate - RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(symbolRequest); - if (requestInfoUpdate != null) return requestInfoUpdate; - - requestInfoUpdate = validationHelper.validateTillFirstError(symbolRequest, companySymbolUpdateRequestValidator); - if (requestInfoUpdate != null) return requestInfoUpdate; - } - CompanySymbols companySymbols; - ImdgTransaction transaction = imdgProvider.newTransaction(); - transaction.beginTransaction(); - boolean txOk = false; - try { - Imdg companySymbolsTMap = transaction.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class); - companySymbols = companySymbolsTMap.getSingleObjectByID(req.getId()); - if (companySymbols == null) { - throw new ClearingBaseException(new EnumMessage(CompanyErrors.CompanyInfoNotFound, req.getId())); - } - if (req.getCompanySymbol() != null && !companySymbols.getCompanySymbol().equalsIgnoreCase(req.getCompanySymbol())) { - log.debug("Change CompanySymbol[{}].CompanySymbol from \"{}\" to \"{}\"", - companySymbols.getId(), companySymbols.getCompanySymbol(), req.getCompanySymbol()); - companyService.updateCompanyBySymbol(transaction, companySymbols, true); - companySymbols.setCompanySymbol(req.getCompanySymbol()); - } - companySymbols.setCompanySymbolValue(req.getCompanySymbolValue()); - companySymbolsTMap.update(companySymbols); - companyService.updateCompanyBySymbol(transaction, companySymbols, false); - txOk = true; - } catch (ClearingBaseException e) { - return requestHelper.makeErrorResponse(symbolRequest, e.getEnumMsg()); - } finally { - if (txOk) - transaction.commitTransaction(); - else - transaction.rollbackTransaction(); - } - - log.debug("successfully processed, id {}", companySymbols.getId()); - return null; - } - - public RequestInfoUpdate companySymbolDelete(BaseRequest symbolRequest) { - CommonDeleteRequest req = symbolRequest.getRequestPayload(); - log.debug("CommonDeleteRequest for CompanySymbol received, id={}", symbolRequest.getId()); - - { // validate - RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(symbolRequest); - if (requestInfoUpdate != null) return requestInfoUpdate; - - requestInfoUpdate = validationHelper.validateTillFirstError(symbolRequest, companySymbolDeleteRequestValidator); - if (requestInfoUpdate != null) return requestInfoUpdate; - } - CompanySymbols companySymbols; - ImdgTransaction transaction = imdgProvider.newTransaction(); - transaction.beginTransaction(); - boolean txOk = false; - try { - Imdg companySymbolsTMap = transaction.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class); - companySymbols = companySymbolsTMap.getSingleObjectByID(req.getId()); - if (companySymbols == null) { - throw new ClearingBaseException(new EnumMessage(CompanyErrors.CompanyInfoNotFound, req.getId())); - } - companySymbolsTMap.delete(companySymbols); - companyService.updateCompanyBySymbol(transaction, companySymbols, true); - txOk = true; - } catch (ClearingBaseException e) { - return requestHelper.makeErrorResponse(symbolRequest, e.getEnumMsg()); - } finally { - if (txOk) - transaction.commitTransaction(); - else - transaction.rollbackTransaction(); - } - - log.debug("successfully processed, id {}", companySymbols.getId()); - return null; +// callback(CompanySymbolNewRequest.class) +// .setFunction(this::processBaseRequest) +// .forDestination(Consts.DESTINATION_COMPANY_SYMBOL_NEW, callbacks::put); +// callback(CompanySymbolUpdateRequest.class) +// .setFunction(this::companySymbolUpdate) +// .forDestination(Consts.DESTINATION_COMPANY_SYMBOL_UPDATE, callbacks::put); +// callback(CommonDeleteRequest.class) +// .setFunction(this::companySymbolDelete) +// .forDestination(Consts.DESTINATION_COMPANY_SYMBOL_DELETE, callbacks::put); +// init(); } +// +// private RequestInfoUpdate processBaseRequest(BaseRequest request) { +// RequestInfoUpdate requestInfoUpdate = null; +// // Валидация +// requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(request); +// if (requestInfoUpdate != null) return requestInfoUpdate; +// +// try { +// create((CompanySymbolNewRequest) request.getRequestPayload()); +// } catch (ValidationException e) { +// return requestHelper.makeErrorResponse(request, e.getEnumMsg()); +// } +// return requestInfoUpdate; +// } +// +// public void setCompanyService(CompanyService companyService) { +// this.companyService = companyService; +// } +// +// +// public Long create(CompanySymbolNewRequest symbolRequest) throws ValidationException { +// log.debug("CompanySymbolNewRequest received"); +// { // validate +// IValidator validator = companySymbolNewRequestValidator.apply(symbolRequest); +// Optional error = validator.tillFirstError(); +// if (error.isPresent()) { +// throw new ValidationException(error.get()); +// } +// } +// +// CompanySymbols companySymbols = create(symbolRequest.companyId, symbolRequest.getCompanySymbol(), +// symbolRequest.getCompanySymbolValue()); +// log.debug("successfully processed, id {}", companySymbols.getId()); +// return null; +// } +// +// public CompanySymbols create(Long companyId, String companySymbol, String companySymbolValue) { +// Objects.requireNonNull(companyId); +// CompanySymbols newSymbol = new CompanySymbols(); +// newSymbol.setId(idSequence.nextId()); +// newSymbol.setCompanyId(companyId); +// newSymbol.setCompanySymbol(companySymbol); +// newSymbol.setCompanySymbolValue(companySymbolValue); +// log.debug("Created new companySymbols.id={} for company {}", newSymbol.getId(), companyId); +// ImdgTransaction transaction = imdgProvider.newTransaction(); +// transaction.beginTransaction(); +// boolean txOk = false; +// try { +// Imdg companySymbolsTMap = transaction.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class); +// companySymbolsTMap.update(newSymbol); +// +// Imdg companyMap = transaction.getImdg(IMDGDistributedNames.Map_Company, Company.class); +// Company company = companyMap.getSingleObjectByID(newSymbol.getCompanyId()); +// companyService.updateCompanyBySymbol(company, newSymbol, false); +// companyMap.update(company); +// txOk = true; +// } finally { +// if (txOk) +// transaction.commitTransaction(); +// else +// transaction.rollbackTransaction(); +// } +// return newSymbol; +// } +// +// public RequestInfoUpdate companySymbolUpdate(BaseRequest symbolRequest) { +// CompanySymbolUpdateRequest req = symbolRequest.getRequestPayload(); +// log.debug("CompanySymbolUpdateRequest received, id={}", symbolRequest.getId()); +// +// { // validate +// RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(symbolRequest); +// if (requestInfoUpdate != null) return requestInfoUpdate; +// +// requestInfoUpdate = validationHelper.validateTillFirstError(symbolRequest, companySymbolUpdateRequestValidator); +// if (requestInfoUpdate != null) return requestInfoUpdate; +// } +// CompanySymbols companySymbols; +// ImdgTransaction transaction = imdgProvider.newTransaction(); +// transaction.beginTransaction(); +// boolean txOk = false; +// try { +// Imdg companySymbolsTMap = transaction.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class); +// companySymbols = companySymbolsTMap.getSingleObjectByID(req.getId()); +// if (companySymbols == null) { +// throw new ClearingBaseException(new EnumMessage(CompanyErrors.CompanyInfoNotFound, req.getId())); +// } +// if (req.getCompanySymbol() != null && !companySymbols.getCompanySymbol().equalsIgnoreCase(req.getCompanySymbol())) { +// log.debug("Change CompanySymbol[{}].CompanySymbol from \"{}\" to \"{}\"", +// companySymbols.getId(), companySymbols.getCompanySymbol(), req.getCompanySymbol()); +// companyService.updateCompanyBySymbol(transaction, companySymbols, true); +// companySymbols.setCompanySymbol(req.getCompanySymbol()); +// } +// companySymbols.setCompanySymbolValue(req.getCompanySymbolValue()); +// companySymbolsTMap.update(companySymbols); +// companyService.updateCompanyBySymbol(transaction, companySymbols, false); +// txOk = true; +// } catch (ClearingBaseException e) { +// return requestHelper.makeErrorResponse(symbolRequest, e.getEnumMsg()); +// } finally { +// if (txOk) +// transaction.commitTransaction(); +// else +// transaction.rollbackTransaction(); +// } +// +// log.debug("successfully processed, id {}", companySymbols.getId()); +// return null; +// } +// +// public RequestInfoUpdate companySymbolDelete(BaseRequest symbolRequest) { +// CommonDeleteRequest req = symbolRequest.getRequestPayload(); +// log.debug("CommonDeleteRequest for CompanySymbol received, id={}", symbolRequest.getId()); +// +// { // validate +// RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(symbolRequest); +// if (requestInfoUpdate != null) return requestInfoUpdate; +// +// requestInfoUpdate = validationHelper.validateTillFirstError(symbolRequest, companySymbolDeleteRequestValidator); +// if (requestInfoUpdate != null) return requestInfoUpdate; +// } +// CompanySymbols companySymbols; +// ImdgTransaction transaction = imdgProvider.newTransaction(); +// transaction.beginTransaction(); +// boolean txOk = false; +// try { +// Imdg companySymbolsTMap = transaction.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class); +// companySymbols = companySymbolsTMap.getSingleObjectByID(req.getId()); +// if (companySymbols == null) { +// throw new ClearingBaseException(new EnumMessage(CompanyErrors.CompanyInfoNotFound, req.getId())); +// } +// companySymbolsTMap.delete(companySymbols); +// companyService.updateCompanyBySymbol(transaction, companySymbols, true); +// txOk = true; +// } catch (ClearingBaseException e) { +// return requestHelper.makeErrorResponse(symbolRequest, e.getEnumMsg()); +// } finally { +// if (txOk) +// transaction.commitTransaction(); +// else +// transaction.rollbackTransaction(); +// } +// +// log.debug("successfully processed, id {}", companySymbols.getId()); +// return null; +// } } diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/ContactService.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/ContactService.java index 48d592a95..8c4f61119 100644 --- a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/ContactService.java +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/ContactService.java @@ -1,5 +1,6 @@ package ru.spcex.clearing.company.service; +import java.util.function.Function; import org.apache.kafka.clients.consumer.Consumer; import org.apache.kafka.clients.producer.Producer; import org.slf4j.Logger; @@ -10,21 +11,17 @@ import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; import ru.clearing.classes.statics.data.profile.Contact; import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.platform.messaging.domain.BaseRequest; -import ru.spcex.clearing.platform.messaging.domain.Consts; import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; import ru.spcex.clearing.platform.messaging.domain.cud.company.ContactNewRequest; import ru.spcex.clearing.platform.messaging.domain.cud.company.ContactUpdateRequest; import ru.spcex.clearing.platform.messaging.service.QueueConsumer; -import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate; 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.utils.validation.IValidator; -import java.util.function.Function; - +@Deprecated @Service public class ContactService extends QueueConsumer implements InitializingBean { private final Logger log = LoggerFactory.getLogger(getClass()); @@ -55,72 +52,72 @@ public class ContactService extends QueueConsumer implements InitializingBean { @Override public void afterPropertiesSet() { - callback(ContactNewRequest.class) - .setFunction(this::contactNew) - .forDestination(Consts.DESTINATION_CONTACT_NEW, callbacks::put); - callback(ContactUpdateRequest.class) - .setFunction(this::contactUpdate) - .forDestination(Consts.DESTINATION_CONTACT_UPDATE, callbacks::put); - callback(CommonDeleteRequest.class) - .setFunction(this::companySymbolDelete) - .forDestination(Consts.DESTINATION_CONTACT_DELETE, callbacks::put); - init(); +// callback(ContactNewRequest.class) +// .setFunction(this::contactNew) +// .forDestination(Consts.DESTINATION_CONTACT_NEW, callbacks::put); +// callback(ContactUpdateRequest.class) +// .setFunction(this::contactUpdate) +// .forDestination(Consts.DESTINATION_CONTACT_UPDATE, callbacks::put); +// callback(CommonDeleteRequest.class) +// .setFunction(this::companySymbolDelete) +// .forDestination(Consts.DESTINATION_CONTACT_DELETE, callbacks::put); +// init(); } - public RequestInfoUpdate contactNew(BaseRequest userRequest) { - log.debug("ContactNewRequest received"); - - RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest); - if (requestInfoUpdate != null) return requestInfoUpdate; - - requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, contactNewRequestValidator); - if (requestInfoUpdate != null) return requestInfoUpdate; - - ContactNewRequest contactNewRequest = userRequest.getRequestPayload(); - Contact contact = new Contact(); - contact.setCompanyId(contactNewRequest.getCompanyId()); - contact.setContactType(contactNewRequest.getContactType()); - contact.setContactValue(contactNewRequest.getContactValue()); - Long id = contactMap.insert(contact); - - log.debug("successfully processed, id {}", id); - return null; - } - - public RequestInfoUpdate contactUpdate(BaseRequest userRequest) { - log.debug("ContactUpdateRequest received"); - - RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest); - if (requestInfoUpdate != null) return requestInfoUpdate; - - requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, contactUpdateRequestValidator); - if (requestInfoUpdate != null) return requestInfoUpdate; - - // Тип контакта не меняем, при валидации кидаем ошибку. - ContactUpdateRequest req = userRequest.getRequestPayload(); - Contact contact = contactMap.getSingleObjectByID(req.getId()); - contact.setContactValue(req.getContactValue()); - - contactMap.update(contact); - log.debug("successfully processed, id {}", contact.getId()); - return null; - } - - public RequestInfoUpdate companySymbolDelete(BaseRequest userRequest) { - log.debug("CommonDeleteRequest received for contact service."); - - RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest); - if (requestInfoUpdate != null) return requestInfoUpdate; - - requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, contactDeleteRequestValidator); - if (requestInfoUpdate != null) return requestInfoUpdate; - - CommonDeleteRequest req = userRequest.getRequestPayload(); - - Contact contact = contactMap.getSingleObjectByID(req.getId()); - - contactMap.delete(contact); - log.debug("successfully deleted, id {}", contact.getId()); - return null; - } +// public RequestInfoUpdate contactNew(BaseRequest userRequest) { +// log.debug("ContactNewRequest received"); +// +// RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest); +// if (requestInfoUpdate != null) return requestInfoUpdate; +// +// requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, contactNewRequestValidator); +// if (requestInfoUpdate != null) return requestInfoUpdate; +// +// ContactNewRequest contactNewRequest = userRequest.getRequestPayload(); +// Contact contact = new Contact(); +// contact.setCompanyId(contactNewRequest.getCompanyId()); +// contact.setContactType(contactNewRequest.getContactType()); +// contact.setContactValue(contactNewRequest.getContactValue()); +// Long id = contactMap.insert(contact); +// +// log.debug("successfully processed, id {}", id); +// return null; +// } +// +// public RequestInfoUpdate contactUpdate(BaseRequest userRequest) { +// log.debug("ContactUpdateRequest received"); +// +// RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest); +// if (requestInfoUpdate != null) return requestInfoUpdate; +// +// requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, contactUpdateRequestValidator); +// if (requestInfoUpdate != null) return requestInfoUpdate; +// +// // Тип контакта не меняем, при валидации кидаем ошибку. +// ContactUpdateRequest req = userRequest.getRequestPayload(); +// Contact contact = contactMap.getSingleObjectByID(req.getId()); +// contact.setContactValue(req.getContactValue()); +// +// contactMap.update(contact); +// log.debug("successfully processed, id {}", contact.getId()); +// return null; +// } +// +// public RequestInfoUpdate companySymbolDelete(BaseRequest userRequest) { +// log.debug("CommonDeleteRequest received for contact service."); +// +// RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest); +// if (requestInfoUpdate != null) return requestInfoUpdate; +// +// requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, contactDeleteRequestValidator); +// if (requestInfoUpdate != null) return requestInfoUpdate; +// +// CommonDeleteRequest req = userRequest.getRequestPayload(); +// +// Contact contact = contactMap.getSingleObjectByID(req.getId()); +// +// contactMap.delete(contact); +// log.debug("successfully deleted, id {}", contact.getId()); +// return null; +// } } \ No newline at end of file diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/MultiCompanyService.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/MultiCompanyService.java index 911dee586..e578c893c 100644 --- a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/MultiCompanyService.java +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/MultiCompanyService.java @@ -1,6 +1,5 @@ package ru.spcex.clearing.company.service; -import org.apache.commons.lang3.StringUtils; import org.apache.kafka.clients.consumer.Consumer; import org.apache.kafka.clients.producer.Producer; import org.slf4j.Logger; @@ -14,29 +13,13 @@ import ru.clearing.classes.statics.data.company.CompanySymbols; import ru.clearing.classes.statics.data.profile.Contact; import ru.clearing.classes.statics.data.profile.ProfileDocument; import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.platform.messaging.domain.ActionType; -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.ClientCodeNewRequest; -import ru.spcex.clearing.platform.messaging.domain.cud.company.*; import ru.spcex.clearing.platform.messaging.service.QueueConsumer; -import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate; import ru.spcex.clearing.util.security.UserRoleVerification; import ru.spcex.clearing.util.services.RequestHelper; import ru.spcex.clearing.validation.common.ValidationHelper; -import ru.spcex.platform.enumeration.CompanySymbol; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; -import ru.spcex.platform.utils.enumeration.IEnumKey; import ru.spcex.platform.utils.enumeration.IMessageResolver; -import ru.spcex.platform.utils.error.ValidationException; -import ru.spcex.platform.utils.log.ExceptionUtils; -import ru.spcex.platform.utils.text.TextUtil; - -import java.util.*; -import java.util.function.BiFunction; -import java.util.stream.Collectors; -import java.util.stream.Stream; /** * Обрабатывает MultiCompanyRequest и распределяет сложный объект по... @@ -114,330 +97,330 @@ public class MultiCompanyService // init(); } - private synchronized RequestInfoUpdate processMultiRequest(BaseRequest baseRequest) { - CompanyGatewayRequest req = baseRequest.getRequestPayload(); - log.debug("company-batch-new request received, BaseRequest.id = {}", baseRequest.getId()); - { // Валидация - RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(baseRequest); - if (requestInfoUpdate != null) return requestInfoUpdate; - - } - Long companyId = null; - boolean txOk = false; // todo IMDG transaction - synchronized (companyService) { - try { - //часть в companyService - req.setCompanySymbols( - Stream.concat(req.getCompanySymbols().stream(), additionalSymbols(req.getCompany())).collect(Collectors.toList()) - ); - companyId = getCompanyIdForCompanySymbols(req.getUuid(), req.getCompany(), req.getCompanySymbols()); - log.debug("For request {} (uuid {}) company {}.", baseRequest.getId(), req.getUuid(), companyId == null ? "not found" : ("found, id=" + companyId)); - - if (companyId == null) { - companyId = companyService.create(req.getCompany()); - log.debug("The companyId={}", companyId); - fillCompanyId(req, companyId); - } else { - fillCompanyId(req, companyId); - companyService.update(req.getCompany(), false); - } - - RequestInfoUpdate replyI; - if (req.getCompanyInfo() != null) { - log.trace("For company {} do update CompanyInfo", companyId); - replyI = companyInfoService.companyInfoUpdate(wrapRequest(baseRequest, req.getCompanyInfo(), null)); - validateReply(companyId, "CompanyInfo", replyI); - } - for (ProfileDocumentNewRequest partRequest : req.getProfileDocuments()) { - ProfileDocument existDocument = findCompanyDocument(partRequest); - if (existDocument == null) { - log.trace("For company[{}] do new profileDocument", companyId); - replyI = profileDocumentService.profileDocumentNew(wrapRequest(baseRequest, partRequest, ActionType.NEW)); - validateReply(companyId, "profileDocumentNew", replyI); - } else { - log.trace("For company[{}] do update profileDocument[{}]", companyId, existDocument.getId()); - ProfileDocumentUpdateRequest partUpdateRequest = createUpdateRequest(existDocument, partRequest); - replyI = profileDocumentService.profileDocumentUpdate(wrapRequest(baseRequest, partUpdateRequest, ActionType.UPDATE)); - validateReply(companyId, "profileDocumentUpdate", replyI); - } - } - - for (CompanySymbolNewRequest partRequest : req.getCompanySymbols()) { - CompanySymbols existSymbol = findCompanySymbols(partRequest); - if (existSymbol == null) { - log.trace("For company[{}] do new companySymbol", companyId); - Long id = companySymbolService.create(partRequest); - } else { - log.trace("For company[{}] do update companySymbol[{}]", companyId, existSymbol.getId()); - CompanySymbolUpdateRequest partUpdateRequest = createUpdateRequest(existSymbol, partRequest); - replyI = companySymbolService.companySymbolUpdate(wrapRequest(baseRequest, partUpdateRequest, ActionType.UPDATE)); - validateReply(companyId, "companySymbolUpdate", replyI); - } - } - for (ContactNewRequest partRequest : req.getContacts()) { - Contact existContact = findContact(partRequest); - if (existContact == null) { - log.trace("For company[{}] do new contact", companyId); - replyI = contactService.contactNew(wrapRequest(baseRequest, partRequest, ActionType.NEW)); - validateReply(companyId, "contactNew", replyI); - } else { - log.trace("For company[{}] do update contact[{}]", companyId, existContact.getId()); - ContactUpdateRequest partUpdateRequest = createUpdateRequest(existContact, partRequest); - replyI = contactService.contactUpdate(wrapRequest(baseRequest, partUpdateRequest, ActionType.UPDATE)); - validateReply(companyId, "contactUpdate", replyI); - } - } - - for (ClearingMemberCategoryNewRequest partRequest : req.getCategories()) { - ClearingMemberCategory existCategory = findCategory(partRequest); - if (existCategory == null) { - log.trace("For company[{}] do new category", companyId); - replyI = clearingMemberCategoryService.clearingMemberCategoryNew(wrapRequest(baseRequest, partRequest, ActionType.NEW)); - validateReply(companyId, "contactNew", replyI); - } else { - log.trace("For company[{}] do update category[{}]", companyId, existCategory.getId()); - ClearingMemberCategoryUpdateRequest partUpdateRequest = createUpdateRequest(existCategory, partRequest); - replyI = clearingMemberCategoryService.clearingMemberCategoryUpdate(wrapRequest(baseRequest, partUpdateRequest, ActionType.UPDATE)); - validateReply(companyId, "categoryUpdate", replyI); - } - } - txOk = true; - } catch (ValidationException vex) { - log.error("For gateway request.id={}, companyId={} error validate: {}", baseRequest.getId(), companyId, messageResolver.resolve(vex.getEnumMsg())); - log.trace("For companyId={} error validation: {}", companyId, ExceptionUtils.getStackTrace(vex)); - } - } - if (txOk) { - log.debug("Create or update sendNewClientCode for company {}", companyId); - for (ClientCodeNewRequest partRequest : req.getClientCodes()) { - accountNotification.clientCodeNew(partRequest); // Consts.DESTINATION_CLIENT_CODE_NEW Consts.DESTINATION_CLIENT_CODE_UPDATE - } - } - - return null; - } - - private Stream additionalSymbols(CompanyNewRequest companyNewReq) { - BiFunction> symbolCreation = (companySymbol, companySymbolValue) -> { - if (companySymbolValue == null || TextUtil.isEmpty(companySymbolValue)) { - return Optional.empty(); - } - CompanySymbolNewRequest companySymbolNewRequest = new CompanySymbolNewRequest(); - companySymbolNewRequest.setCompanySymbol(companySymbol); - companySymbolNewRequest.setCompanySymbolValue(companySymbolValue); - return Optional.of(companySymbolNewRequest); - }; - return Stream.of(symbolCreation.apply(CompanySymbol.TRDC.getKey(), companyNewReq.getTradingCode()), - symbolCreation.apply(CompanySymbol.CLRC.getKey(), companyNewReq.getClearingCode()), - symbolCreation.apply(CompanySymbol.INTC.getKey(), companyNewReq.getInitiatorCode()), - symbolCreation.apply(CompanySymbol.RGRC.getKey(), companyNewReq.getRegistrationCode())) - .filter(Optional::isPresent) - .map(Optional::get); - } - - void validateReply(Long companyId, String process, RequestInfoUpdate replyI) { - if (replyI != null && replyI.getMessage() != null) { - log.warn("Error process {} for companyId={}: {}", process, companyId, replyI.getMessage()); - } - } - - ProfileDocument findCompanyDocument(ProfileDocumentNewRequest partRequest) { - Map> query = new HashMap<>(); - query.put("companyId", partRequest.getCompanyId()); - query.put("documentType", partRequest.getDocumentType()); - query.put("issueDate", partRequest.getIssueDate()); // может быть null - Collection allDoc = profileDocumentImdg.getCollectionObjectsByFieldValues(query); - if (allDoc.isEmpty()) - return null; - if (allDoc.size() > 1) - log.warn("Fount {} ProfileDocument by: {}", allDoc.size(), query); - return allDoc.iterator().next(); - } - - CompanySymbols findCompanySymbols(CompanySymbolNewRequest partRequest) { - Map> query = new HashMap<>(); - query.put("companyId", partRequest.getCompanyId()); - query.put("companySymbol", partRequest.getCompanySymbol()); - Collection allCS = companySymbolsImdg.getCollectionObjectsByFieldValues(query); - if (allCS.isEmpty()) - return null; - if (allCS.size() > 1) - log.warn("Fount {} CompanySymbols by: {}", allCS.size(), query); - return allCS.iterator().next(); - } - - Contact findContact(ContactNewRequest partRequest) { - Map> query = new HashMap<>(); - query.put("companyId", partRequest.getCompanyId()); - query.put("contactType", partRequest.getContactType()); - Collection allCS = contactImdg.getCollectionObjectsByFieldValues(query); - if (allCS.isEmpty()) - return null; - if (allCS.size() > 1) - log.warn("Fount {} Contact by: {}", allCS.size(), query); - return allCS.iterator().next(); - } - - ClearingMemberCategory findCategory(ClearingMemberCategoryNewRequest partRequest) { - Map> query = new HashMap<>(); - query.put("companyId", partRequest.getCompanyId()); - query.put("clearingMemberCategory", partRequest.getClearingMemberCategory()); - Collection allCS = clearingMemberCategoryImdg.getCollectionObjectsByFieldValues(query); - if (allCS.isEmpty()) - return null; - if (allCS.size() > 1) - log.warn("Fount {} ClearingMemberCategory by: {}", allCS.size(), query); - return allCS.iterator().next(); - } - - ProfileDocumentUpdateRequest createUpdateRequest(ProfileDocument existDocument, ProfileDocumentNewRequest partRequest) { - ProfileDocumentUpdateRequest r = new ProfileDocumentUpdateRequest(); - r.setId(existDocument.getId()); - r.setCompanyId(partRequest.getCompanyId()); - r.setDocumentType(partRequest.getDocumentType()); - r.setIssueDate(partRequest.getIssueDate()); - r.setIssuePlace(partRequest.getIssuePlace()); - r.setIssuer(partRequest.getIssuer()); - r.setIssuerCode(partRequest.getIssuerCode()); - r.setName(partRequest.getName()); - r.setNumber(partRequest.getNumber()); - r.setPlace(partRequest.getPlace()); - r.setValidFromDate(partRequest.getValidFromDate()); - r.setValidToDate(partRequest.getValidToDate()); - r.setLink(partRequest.getLink()); - return r; - } - - CompanySymbolUpdateRequest createUpdateRequest(CompanySymbols existSymbol, CompanySymbolNewRequest partRequest) { - CompanySymbolUpdateRequest r = new CompanySymbolUpdateRequest(); - r.setId(existSymbol.getId()); - r.setCompanyId(partRequest.getCompanyId()); - r.setCompanySymbol(partRequest.getCompanySymbol()); - r.setCompanySymbolValue(partRequest.getCompanySymbolValue()); - return r; - } - - ContactUpdateRequest createUpdateRequest(Contact existContact, ContactNewRequest partRequest) { - ContactUpdateRequest r = new ContactUpdateRequest(); - r.setId(existContact.getId()); - r.setContactType(partRequest.getContactType()); - r.setContactValue(partRequest.getContactValue()); - return r; - } - - ClearingMemberCategoryUpdateRequest createUpdateRequest(ClearingMemberCategory existCategory, ClearingMemberCategoryNewRequest partRequest) { - ClearingMemberCategoryUpdateRequest r = new ClearingMemberCategoryUpdateRequest(); - r.setId(existCategory.getId()); - r.setClearingMemberCategory(partRequest.getClearingMemberCategory()); - return r; - } - - Long getCompanyIdForCompanySymbols(String uuid, CompanyNewRequest cnr, Collection companySymbols) { - CompanySymbols companySymbol = null; - if (StringUtils.isNotEmpty(uuid)) { - log.trace("Search company by companySymbol uuid={}", uuid); - Collection companySymbolsFromImdg = companySymbolsImdg.getCollectionObjectsByFieldValues( - Map.of( - "companySymbol", CompanySymbol.UUID.getKey(), - "companySymbolValue", uuid - ) - ); - if (!companySymbolsFromImdg.isEmpty()) { - companySymbol = companySymbolsFromImdg.iterator().next(); - if (companySymbolsFromImdg.size() > 1) { - log.warn("For UUID found > 1 company_symbols, use first (id = {})", companySymbol.getId()); - } - } - } - if (companySymbol == null && StringUtils.isNotEmpty(cnr.getCompanySymbolValue()) - && IEnumKey.contains(cnr.getCompanySymbol(), CompanySymbol.UUID, CompanySymbol.INN, CompanySymbol.CIO)) { // вероятно там будет только UUID - { - String companySymbolType = cnr.getCompanySymbol(); - log.debug("Company not found by UUID=\"{}\", try find by {}={}", - uuid, companySymbolType, cnr.getCompanySymbolValue()); - log.trace("Search company by companySymbol {}={}", companySymbolType, cnr.getCompanySymbolValue()); - Collection companySymbolsFromImdg = companySymbolsImdg.getCollectionObjectsByFieldValues( - Map.of( - "companySymbol", companySymbolType, - "companySymbolValue", cnr.getCompanySymbolValue() - ) - ); - if (!companySymbolsFromImdg.isEmpty()) { - companySymbol = companySymbolsFromImdg.iterator().next(); - if (companySymbolsFromImdg.size() > 1) { - log.warn("For {} found > 1 company_symbols, use first (id = {})", companySymbolType, cnr.getCompanySymbolValue()); - } - } - } - } - if (companySymbol == null && companySymbols != null) { - for (CompanySymbolNewRequest cSymbolReq : companySymbols) { - if (IEnumKey.contains(cSymbolReq.getCompanySymbol(), CompanySymbol.INN, CompanySymbol.CIO)) { - String companySymbolType = cSymbolReq.getCompanySymbol(); - log.debug("Company not found by UUID=\"{}\", try find by {}", uuid, companySymbolType); - log.trace("Search company by companySymbol {}={}", companySymbolType, cSymbolReq.getCompanySymbolValue()); - Collection companySymbolsFromImdg = companySymbolsImdg.getCollectionObjectsByFieldValues( - Map.of( - "companySymbol", companySymbolType, - "companySymbolValue", cSymbolReq.getCompanySymbolValue() - ) - ); - if (!companySymbolsFromImdg.isEmpty()) { - companySymbol = companySymbolsFromImdg.iterator().next(); - if (companySymbolsFromImdg.size() > 1) { - log.warn("For {} found > 1 company_symbols, use first (id = {})", companySymbolType, cSymbolReq.getCompanySymbolValue()); - } - break; - } - } - } - } - - if (companySymbol != null) - return companySymbol.getCompanyId(); - else - return null; - } - - private BaseRequest wrapRequest(BaseRequest template, T payload, ActionType action) { - BaseRequest r = new BaseRequest<>(); - r.setId(template.getId()); - if (action == null) { - r.setActionType(template.getActionType()); - } else { - r.setActionType(action); - } - r.setUserId(template.getUserId()); - r.setCorrelationId(template.getCorrelationId()); - r.setRequestPayload(payload); - return r; - } - - void fillCompanyId(CompanyGatewayRequest req, Long companyId) { - if (req.getCompany() != null) { - req.getCompany().setId(companyId); - } - if (req.getCompanyInfo() != null) { - req.getCompanyInfo().setId(companyId); - } - if (req.getCompanySymbols() == null) req.setCompanySymbols(new ArrayList<>()); - if (req.getClientCodes() == null) req.setClientCodes(new ArrayList<>()); - if (req.getProfileDocuments() == null) req.setProfileDocuments(new ArrayList<>()); - if (req.getContacts() == null) req.setContacts(new ArrayList<>()); - for (CompanySymbolNewRequest cs : req.getCompanySymbols()) { - cs.setCompanyId(companyId); - } - for (ClientCodeNewRequest cc : req.getClientCodes()) { - cc.setCompanyId(companyId); - } - for (ProfileDocumentNewRequest pd : req.getProfileDocuments()) { - pd.setCompanyId(companyId); - } - for (ContactNewRequest c : req.getContacts()) { - c.setCompanyId(companyId); - } - for (ClearingMemberCategoryNewRequest c : req.getCategories()) { - c.setCompanyId(companyId); - } - } +// private synchronized RequestInfoUpdate processMultiRequest(BaseRequest baseRequest) { +// CompanyGatewayRequest req = baseRequest.getRequestPayload(); +// log.debug("company-batch-new request received, BaseRequest.id = {}", baseRequest.getId()); +// { // Валидация +// RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(baseRequest); +// if (requestInfoUpdate != null) return requestInfoUpdate; +// +// } +// Long companyId = null; +// boolean txOk = false; // todo IMDG transaction +// synchronized (companyService) { +// try { +// //часть в companyService +// req.setCompanySymbols( +// Stream.concat(req.getCompanySymbols().stream(), additionalSymbols(req.getCompany())).collect(Collectors.toList()) +// ); +// companyId = getCompanyIdForCompanySymbols(req.getUuid(), req.getCompany(), req.getCompanySymbols()); +// log.debug("For request {} (uuid {}) company {}.", baseRequest.getId(), req.getUuid(), companyId == null ? "not found" : ("found, id=" + companyId)); +// +// if (companyId == null) { +// companyId = companyService.create(req.getCompany()); +// log.debug("The companyId={}", companyId); +// fillCompanyId(req, companyId); +// } else { +// fillCompanyId(req, companyId); +// companyService.update(req.getCompany(), false); +// } +// +// RequestInfoUpdate replyI; +// if (req.getCompanyInfo() != null) { +// log.trace("For company {} do update CompanyInfo", companyId); +// replyI = companyInfoService.companyInfoUpdate(wrapRequest(baseRequest, req.getCompanyInfo(), null)); +// validateReply(companyId, "CompanyInfo", replyI); +// } +// for (ProfileDocumentNewRequest partRequest : req.getProfileDocuments()) { +// ProfileDocument existDocument = findCompanyDocument(partRequest); +// if (existDocument == null) { +// log.trace("For company[{}] do new profileDocument", companyId); +// replyI = profileDocumentService.profileDocumentNew(wrapRequest(baseRequest, partRequest, ActionType.NEW)); +// validateReply(companyId, "profileDocumentNew", replyI); +// } else { +// log.trace("For company[{}] do update profileDocument[{}]", companyId, existDocument.getId()); +// ProfileDocumentUpdateRequest partUpdateRequest = createUpdateRequest(existDocument, partRequest); +// replyI = profileDocumentService.profileDocumentUpdate(wrapRequest(baseRequest, partUpdateRequest, ActionType.UPDATE)); +// validateReply(companyId, "profileDocumentUpdate", replyI); +// } +// } +// +// for (CompanySymbolNewRequest partRequest : req.getCompanySymbols()) { +// CompanySymbols existSymbol = findCompanySymbols(partRequest); +// if (existSymbol == null) { +// log.trace("For company[{}] do new companySymbol", companyId); +// Long id = companySymbolService.create(partRequest); +// } else { +// log.trace("For company[{}] do update companySymbol[{}]", companyId, existSymbol.getId()); +// CompanySymbolUpdateRequest partUpdateRequest = createUpdateRequest(existSymbol, partRequest); +// replyI = companySymbolService.companySymbolUpdate(wrapRequest(baseRequest, partUpdateRequest, ActionType.UPDATE)); +// validateReply(companyId, "companySymbolUpdate", replyI); +// } +// } +// for (ContactNewRequest partRequest : req.getContacts()) { +// Contact existContact = findContact(partRequest); +// if (existContact == null) { +// log.trace("For company[{}] do new contact", companyId); +// replyI = contactService.contactNew(wrapRequest(baseRequest, partRequest, ActionType.NEW)); +// validateReply(companyId, "contactNew", replyI); +// } else { +// log.trace("For company[{}] do update contact[{}]", companyId, existContact.getId()); +// ContactUpdateRequest partUpdateRequest = createUpdateRequest(existContact, partRequest); +// replyI = contactService.contactUpdate(wrapRequest(baseRequest, partUpdateRequest, ActionType.UPDATE)); +// validateReply(companyId, "contactUpdate", replyI); +// } +// } +// +// for (ClearingMemberCategoryNewRequest partRequest : req.getCategories()) { +// ClearingMemberCategory existCategory = findCategory(partRequest); +// if (existCategory == null) { +// log.trace("For company[{}] do new category", companyId); +// replyI = clearingMemberCategoryService.clearingMemberCategoryNew(wrapRequest(baseRequest, partRequest, ActionType.NEW)); +// validateReply(companyId, "contactNew", replyI); +// } else { +// log.trace("For company[{}] do update category[{}]", companyId, existCategory.getId()); +// ClearingMemberCategoryUpdateRequest partUpdateRequest = createUpdateRequest(existCategory, partRequest); +// replyI = clearingMemberCategoryService.clearingMemberCategoryUpdate(wrapRequest(baseRequest, partUpdateRequest, ActionType.UPDATE)); +// validateReply(companyId, "categoryUpdate", replyI); +// } +// } +// txOk = true; +// } catch (ValidationException vex) { +// log.error("For gateway request.id={}, companyId={} error validate: {}", baseRequest.getId(), companyId, messageResolver.resolve(vex.getEnumMsg())); +// log.trace("For companyId={} error validation: {}", companyId, ExceptionUtils.getStackTrace(vex)); +// } +// } +// if (txOk) { +// log.debug("Create or update sendNewClientCode for company {}", companyId); +// for (ClientCodeNewRequest partRequest : req.getClientCodes()) { +// accountNotification.clientCodeNew(partRequest); // Consts.DESTINATION_CLIENT_CODE_NEW Consts.DESTINATION_CLIENT_CODE_UPDATE +// } +// } +// +// return null; +// } +// +// private Stream additionalSymbols(CompanyNewRequest companyNewReq) { +// BiFunction> symbolCreation = (companySymbol, companySymbolValue) -> { +// if (companySymbolValue == null || TextUtil.isEmpty(companySymbolValue)) { +// return Optional.empty(); +// } +// CompanySymbolNewRequest companySymbolNewRequest = new CompanySymbolNewRequest(); +// companySymbolNewRequest.setCompanySymbol(companySymbol); +// companySymbolNewRequest.setCompanySymbolValue(companySymbolValue); +// return Optional.of(companySymbolNewRequest); +// }; +// return Stream.of(symbolCreation.apply(CompanySymbol.TRDC.getKey(), companyNewReq.getTradingCode()), +// symbolCreation.apply(CompanySymbol.CLRC.getKey(), companyNewReq.getClearingCode()), +// symbolCreation.apply(CompanySymbol.INTC.getKey(), companyNewReq.getInitiatorCode()), +// symbolCreation.apply(CompanySymbol.RGRC.getKey(), companyNewReq.getRegistrationCode())) +// .filter(Optional::isPresent) +// .map(Optional::get); +// } +// +// void validateReply(Long companyId, String process, RequestInfoUpdate replyI) { +// if (replyI != null && replyI.getMessage() != null) { +// log.warn("Error process {} for companyId={}: {}", process, companyId, replyI.getMessage()); +// } +// } +// +// ProfileDocument findCompanyDocument(ProfileDocumentNewRequest partRequest) { +// Map> query = new HashMap<>(); +// query.put("companyId", partRequest.getCompanyId()); +// query.put("documentType", partRequest.getDocumentType()); +// query.put("issueDate", partRequest.getIssueDate()); // может быть null +// Collection allDoc = profileDocumentImdg.getCollectionObjectsByFieldValues(query); +// if (allDoc.isEmpty()) +// return null; +// if (allDoc.size() > 1) +// log.warn("Fount {} ProfileDocument by: {}", allDoc.size(), query); +// return allDoc.iterator().next(); +// } +// +// CompanySymbols findCompanySymbols(CompanySymbolNewRequest partRequest) { +// Map> query = new HashMap<>(); +// query.put("companyId", partRequest.getCompanyId()); +// query.put("companySymbol", partRequest.getCompanySymbol()); +// Collection allCS = companySymbolsImdg.getCollectionObjectsByFieldValues(query); +// if (allCS.isEmpty()) +// return null; +// if (allCS.size() > 1) +// log.warn("Fount {} CompanySymbols by: {}", allCS.size(), query); +// return allCS.iterator().next(); +// } +// +// Contact findContact(ContactNewRequest partRequest) { +// Map> query = new HashMap<>(); +// query.put("companyId", partRequest.getCompanyId()); +// query.put("contactType", partRequest.getContactType()); +// Collection allCS = contactImdg.getCollectionObjectsByFieldValues(query); +// if (allCS.isEmpty()) +// return null; +// if (allCS.size() > 1) +// log.warn("Fount {} Contact by: {}", allCS.size(), query); +// return allCS.iterator().next(); +// } +// +// ClearingMemberCategory findCategory(ClearingMemberCategoryNewRequest partRequest) { +// Map> query = new HashMap<>(); +// query.put("companyId", partRequest.getCompanyId()); +// query.put("clearingMemberCategory", partRequest.getClearingMemberCategory()); +// Collection allCS = clearingMemberCategoryImdg.getCollectionObjectsByFieldValues(query); +// if (allCS.isEmpty()) +// return null; +// if (allCS.size() > 1) +// log.warn("Fount {} ClearingMemberCategory by: {}", allCS.size(), query); +// return allCS.iterator().next(); +// } +// +// ProfileDocumentUpdateRequest createUpdateRequest(ProfileDocument existDocument, ProfileDocumentNewRequest partRequest) { +// ProfileDocumentUpdateRequest r = new ProfileDocumentUpdateRequest(); +// r.setId(existDocument.getId()); +// r.setCompanyId(partRequest.getCompanyId()); +// r.setDocumentType(partRequest.getDocumentType()); +// r.setIssueDate(partRequest.getIssueDate()); +// r.setIssuePlace(partRequest.getIssuePlace()); +// r.setIssuer(partRequest.getIssuer()); +// r.setIssuerCode(partRequest.getIssuerCode()); +// r.setName(partRequest.getName()); +// r.setNumber(partRequest.getNumber()); +// r.setPlace(partRequest.getPlace()); +// r.setValidFromDate(partRequest.getValidFromDate()); +// r.setValidToDate(partRequest.getValidToDate()); +// r.setLink(partRequest.getLink()); +// return r; +// } +// +// CompanySymbolUpdateRequest createUpdateRequest(CompanySymbols existSymbol, CompanySymbolNewRequest partRequest) { +// CompanySymbolUpdateRequest r = new CompanySymbolUpdateRequest(); +// r.setId(existSymbol.getId()); +// r.setCompanyId(partRequest.getCompanyId()); +// r.setCompanySymbol(partRequest.getCompanySymbol()); +// r.setCompanySymbolValue(partRequest.getCompanySymbolValue()); +// return r; +// } +// +// ContactUpdateRequest createUpdateRequest(Contact existContact, ContactNewRequest partRequest) { +// ContactUpdateRequest r = new ContactUpdateRequest(); +// r.setId(existContact.getId()); +// r.setContactType(partRequest.getContactType()); +// r.setContactValue(partRequest.getContactValue()); +// return r; +// } +// +// ClearingMemberCategoryUpdateRequest createUpdateRequest(ClearingMemberCategory existCategory, ClearingMemberCategoryNewRequest partRequest) { +// ClearingMemberCategoryUpdateRequest r = new ClearingMemberCategoryUpdateRequest(); +// r.setId(existCategory.getId()); +// r.setClearingMemberCategory(partRequest.getClearingMemberCategory()); +// return r; +// } +// +// Long getCompanyIdForCompanySymbols(String uuid, CompanyNewRequest cnr, Collection companySymbols) { +// CompanySymbols companySymbol = null; +// if (StringUtils.isNotEmpty(uuid)) { +// log.trace("Search company by companySymbol uuid={}", uuid); +// Collection companySymbolsFromImdg = companySymbolsImdg.getCollectionObjectsByFieldValues( +// Map.of( +// "companySymbol", CompanySymbol.UUID.getKey(), +// "companySymbolValue", uuid +// ) +// ); +// if (!companySymbolsFromImdg.isEmpty()) { +// companySymbol = companySymbolsFromImdg.iterator().next(); +// if (companySymbolsFromImdg.size() > 1) { +// log.warn("For UUID found > 1 company_symbols, use first (id = {})", companySymbol.getId()); +// } +// } +// } +// if (companySymbol == null && StringUtils.isNotEmpty(cnr.getCompanySymbolValue()) +// && IEnumKey.contains(cnr.getCompanySymbol(), CompanySymbol.UUID, CompanySymbol.INN, CompanySymbol.CIO)) { // вероятно там будет только UUID +// { +// String companySymbolType = cnr.getCompanySymbol(); +// log.debug("Company not found by UUID=\"{}\", try find by {}={}", +// uuid, companySymbolType, cnr.getCompanySymbolValue()); +// log.trace("Search company by companySymbol {}={}", companySymbolType, cnr.getCompanySymbolValue()); +// Collection companySymbolsFromImdg = companySymbolsImdg.getCollectionObjectsByFieldValues( +// Map.of( +// "companySymbol", companySymbolType, +// "companySymbolValue", cnr.getCompanySymbolValue() +// ) +// ); +// if (!companySymbolsFromImdg.isEmpty()) { +// companySymbol = companySymbolsFromImdg.iterator().next(); +// if (companySymbolsFromImdg.size() > 1) { +// log.warn("For {} found > 1 company_symbols, use first (id = {})", companySymbolType, cnr.getCompanySymbolValue()); +// } +// } +// } +// } +// if (companySymbol == null && companySymbols != null) { +// for (CompanySymbolNewRequest cSymbolReq : companySymbols) { +// if (IEnumKey.contains(cSymbolReq.getCompanySymbol(), CompanySymbol.INN, CompanySymbol.CIO)) { +// String companySymbolType = cSymbolReq.getCompanySymbol(); +// log.debug("Company not found by UUID=\"{}\", try find by {}", uuid, companySymbolType); +// log.trace("Search company by companySymbol {}={}", companySymbolType, cSymbolReq.getCompanySymbolValue()); +// Collection companySymbolsFromImdg = companySymbolsImdg.getCollectionObjectsByFieldValues( +// Map.of( +// "companySymbol", companySymbolType, +// "companySymbolValue", cSymbolReq.getCompanySymbolValue() +// ) +// ); +// if (!companySymbolsFromImdg.isEmpty()) { +// companySymbol = companySymbolsFromImdg.iterator().next(); +// if (companySymbolsFromImdg.size() > 1) { +// log.warn("For {} found > 1 company_symbols, use first (id = {})", companySymbolType, cSymbolReq.getCompanySymbolValue()); +// } +// break; +// } +// } +// } +// } +// +// if (companySymbol != null) +// return companySymbol.getCompanyId(); +// else +// return null; +// } +// +// private BaseRequest wrapRequest(BaseRequest template, T payload, ActionType action) { +// BaseRequest r = new BaseRequest<>(); +// r.setId(template.getId()); +// if (action == null) { +// r.setActionType(template.getActionType()); +// } else { +// r.setActionType(action); +// } +// r.setUserId(template.getUserId()); +// r.setCorrelationId(template.getCorrelationId()); +// r.setRequestPayload(payload); +// return r; +// } +// +// void fillCompanyId(CompanyGatewayRequest req, Long companyId) { +// if (req.getCompany() != null) { +// req.getCompany().setId(companyId); +// } +// if (req.getCompanyInfo() != null) { +// req.getCompanyInfo().setId(companyId); +// } +// if (req.getCompanySymbols() == null) req.setCompanySymbols(new ArrayList<>()); +// if (req.getClientCodes() == null) req.setClientCodes(new ArrayList<>()); +// if (req.getProfileDocuments() == null) req.setProfileDocuments(new ArrayList<>()); +// if (req.getContacts() == null) req.setContacts(new ArrayList<>()); +// for (CompanySymbolNewRequest cs : req.getCompanySymbols()) { +// cs.setCompanyId(companyId); +// } +// for (ClientCodeNewRequest cc : req.getClientCodes()) { +// cc.setCompanyId(companyId); +// } +// for (ProfileDocumentNewRequest pd : req.getProfileDocuments()) { +// pd.setCompanyId(companyId); +// } +// for (ContactNewRequest c : req.getContacts()) { +// c.setCompanyId(companyId); +// } +// for (ClearingMemberCategoryNewRequest c : req.getCategories()) { +// c.setCompanyId(companyId); +// } +// } } 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 bf601f285..eac0c8111 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 @@ -1,5 +1,6 @@ package ru.spcex.clearing.company.service; +import java.util.function.Function; import org.apache.kafka.clients.consumer.Consumer; import org.apache.kafka.clients.producer.Producer; import org.slf4j.Logger; @@ -7,34 +8,23 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.InitializingBean; 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.Company; import ru.clearing.classes.statics.data.profile.ProfileDocument; -import ru.spcex.clearing.company.error.CompanyErrors; import ru.spcex.clearing.company.service.v2.facade.CompanyServiceFacade; -import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.platform.messaging.domain.BaseRequest; -import ru.spcex.clearing.platform.messaging.domain.Consts; import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; import ru.spcex.clearing.platform.messaging.domain.cud.company.ProfileDocumentNewRequest; import ru.spcex.clearing.platform.messaging.domain.cud.company.ProfileDocumentUpdateRequest; import ru.spcex.clearing.platform.messaging.service.QueueConsumer; -import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate; import ru.spcex.clearing.util.security.UserRoleVerification; import ru.spcex.clearing.util.services.RequestHelper; import ru.spcex.clearing.validation.common.ValidationHelper; -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; -import java.util.Objects; -import java.util.function.Function; - +@Deprecated @Service public class ProfileDocumentService extends QueueConsumer implements InitializingBean { private final Logger log = LoggerFactory.getLogger(getClass()); @@ -79,184 +69,184 @@ public class ProfileDocumentService extends QueueConsumer implements Initializin @Override public void afterPropertiesSet() { - this.profileDocumentMap = imdgProvider.getImdg(IMDGDistributedNames.Map_ProfileDocument, ProfileDocument.class); - this.companyMap = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); - - callback(ProfileDocumentNewRequest.class) - .setFunction(this::profileDocumentNew) - .forDestination(Consts.DESTINATION_PROFILE_DOCUMENT_NEW, callbacks::put); - callback(ProfileDocumentUpdateRequest.class) - .setFunction(this::profileDocumentUpdate) - .forDestination(Consts.DESTINATION_PROFILE_DOCUMENT_UPDATE, callbacks::put); - callback(CommonDeleteRequest.class) - .setFunction(this::profileDocumentDelete) - .forDestination(Consts.DESTINATION_PROFILE_DOCUMENT_DELETE, callbacks::put); - init(); +// this.profileDocumentMap = imdgProvider.getImdg(IMDGDistributedNames.Map_ProfileDocument, ProfileDocument.class); +// this.companyMap = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); +// +// callback(ProfileDocumentNewRequest.class) +// .setFunction(this::profileDocumentNew) +// .forDestination(Consts.DESTINATION_PROFILE_DOCUMENT_NEW, callbacks::put); +// callback(ProfileDocumentUpdateRequest.class) +// .setFunction(this::profileDocumentUpdate) +// .forDestination(Consts.DESTINATION_PROFILE_DOCUMENT_UPDATE, callbacks::put); +// callback(CommonDeleteRequest.class) +// .setFunction(this::profileDocumentDelete) +// .forDestination(Consts.DESTINATION_PROFILE_DOCUMENT_DELETE, callbacks::put); +// init(); } - @NonNull - public RequestInfoUpdate profileDocumentNew(BaseRequest profileDocumentNewRequestBaseRequest) { - log.trace("Start processing ProfileDocumentNewRequest!"); - - RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(profileDocumentNewRequestBaseRequest); - if (requestInfoUpdate != null) return requestInfoUpdate; - - requestInfoUpdate = validationHelper.validateTillFirstError( - profileDocumentNewRequestBaseRequest, profileDocumentNewRequestValidator - ); - if (requestInfoUpdate != null) return requestInfoUpdate; - - ProfileDocumentNewRequest profileDocumentNewRequest = profileDocumentNewRequestBaseRequest.getRequestPayload(); - ProfileDocument profileDocument = new ProfileDocument(); - profileDocument.setCompanyId(profileDocumentNewRequest.getCompanyId()); - profileDocument.setDocumentType(profileDocumentNewRequest.getDocumentType()); - profileDocument.setIssueDate(profileDocumentNewRequest.getIssueDate()); - profileDocument.setIssuePlace(profileDocumentNewRequest.getIssuePlace()); - profileDocument.setIssuer(profileDocumentNewRequest.getIssuer()); - profileDocument.setIssuerCode(profileDocumentNewRequest.getIssuerCode()); - profileDocument.setName(profileDocumentNewRequest.getName()); - profileDocument.setNumber(profileDocumentNewRequest.getNumber()); - profileDocument.setPlace(profileDocumentNewRequest.getPlace()); - profileDocument.setValidFromDate(profileDocumentNewRequest.getValidFromDate()); - profileDocument.setValidToDate(profileDocumentNewRequest.getValidToDate()); - profileDocument.setLink(profileDocumentNewRequest.getLink()); - profileDocumentMap.insert(profileDocument); - - if (DocumentTypes.xcnt.getKey().equalsIgnoreCase(profileDocument.getDocumentType())) { - processXCNT(profileDocument); - } - - return null; - } - - private RequestInfoUpdate profileDocumentDelete(BaseRequest deleteRequest) { - log.trace("Start processing CommonDeleteRequest!"); - - RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(deleteRequest); - if (requestInfoUpdate != null) return requestInfoUpdate; - - requestInfoUpdate = validationHelper.validateTillFirstError( - deleteRequest, profileDocumentDeleteRequestValidator - ); - if (requestInfoUpdate != null) return requestInfoUpdate; - CommonDeleteRequest profileDocumentDeleteRequest = deleteRequest.getRequestPayload(); - ProfileDocument profileDocument = profileDocumentMap.getSingleObjectByID(profileDocumentDeleteRequest.getId()); - synchronized (companyService) { - Company existCompany = profileDocument.getCompanyId() == null ? null : companyMap.getSingleObjectByID(profileDocument.getCompanyId()); - if (existCompany == null) { - log.warn("Company {} not found by profileDocument {}", profileDocument.getCompanyId(), profileDocument.getId()); - return requestHelper.makeErrorResponse(deleteRequest, CompanyErrors.CompanyNotFound, profileDocument.getCompanyId()); - } - - 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; - } - - - public RequestInfoUpdate profileDocumentUpdate(BaseRequest profileDocumentUpdateRequestBaseRequest) { - log.trace("Start processing ProfileDocumentUpdateRequest!"); - - RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(profileDocumentUpdateRequestBaseRequest); - if (requestInfoUpdate != null) return requestInfoUpdate; - - requestInfoUpdate = validationHelper.validateTillFirstError( - profileDocumentUpdateRequestBaseRequest, - profileDocumentUpdateRequestValidator - ); - if (requestInfoUpdate != null) return requestInfoUpdate; - - ProfileDocumentUpdateRequest profileDocumentUpdateRequest = profileDocumentUpdateRequestBaseRequest.getRequestPayload(); - ProfileDocument profileDocument = profileDocumentMap.getSingleObjectByID(profileDocumentUpdateRequest.getId()); - - String prevDocType = profileDocument.getDocumentType(); - if (profileDocumentUpdateRequest.getCompanyId() != null && !profileDocumentUpdateRequest.getCompanyId().equals(profileDocument.getCompanyId())) { - log.warn("profileDocumentUpdateRequest[{}] CompanyId {} not match", profileDocumentUpdateRequest.getId(), profileDocumentUpdateRequest.getCompanyId()); - return requestHelper.makeErrorResponse(profileDocumentUpdateRequestBaseRequest, CompanyErrors.WrongFieldValue, "companyId"); - } - - if (profileDocumentUpdateRequest.getDocumentType() != null) - profileDocument.setDocumentType(profileDocumentUpdateRequest.getDocumentType()); - - if (profileDocumentUpdateRequest.getIssueDate() != null) - profileDocument.setIssueDate(profileDocumentUpdateRequest.getIssueDate()); - - if (profileDocumentUpdateRequest.getIssuePlace() != null) - profileDocument.setIssuePlace(profileDocumentUpdateRequest.getIssuePlace()); - - if (profileDocumentUpdateRequest.getIssuer() != null) - profileDocument.setIssuer(profileDocumentUpdateRequest.getIssuer()); - - if (profileDocumentUpdateRequest.getIssuerCode() != null) - profileDocument.setIssuerCode(profileDocumentUpdateRequest.getIssuerCode()); - - if (profileDocumentUpdateRequest.getName() != null) - profileDocument.setName(profileDocumentUpdateRequest.getName()); - - if (profileDocumentUpdateRequest.getNumber() != null) - profileDocument.setNumber(profileDocumentUpdateRequest.getNumber()); - - if (profileDocumentUpdateRequest.getPlace() != null) - profileDocument.setPlace(profileDocumentUpdateRequest.getPlace()); - - if (profileDocumentUpdateRequest.getValidFromDate() != null) - profileDocument.setValidFromDate(profileDocumentUpdateRequest.getValidFromDate()); - - if (profileDocumentUpdateRequest.getValidToDate() != null) - profileDocument.setValidToDate(profileDocumentUpdateRequest.getValidToDate()); - - if (profileDocumentUpdateRequest.getLink() != null) - profileDocument.setLink(profileDocumentUpdateRequest.getLink()); - - profileDocumentMap.insert(profileDocument); - - log.trace("successfully processed, id {}", profileDocument.getId()); - - if (!Objects.equals(prevDocType, profileDocument.getDocumentType()) && - DocumentTypes.xcnt.getKey().equalsIgnoreCase(profileDocument.getDocumentType())) { - processXCNT(profileDocument); - } - - return null; - } - - protected void processXCNT(ProfileDocument profileDocument) { - Company existCompany = profileDocument.getCompanyId() == null ? null : companyMap.getSingleObjectByID(profileDocument.getCompanyId()); - if (existCompany == null) { - log.warn("Company {} not found by profileDocument {}", profileDocument.getCompanyId(), profileDocument.getId()); - return; - } - if (!WorkflowStatus.Active.equalsByKey(existCompany.getWorkflowStatus())) { - log.warn("Current workflowStatus {} for company {}. Do not termination account.", - existCompany.getWorkflowStatus(), existCompany.getId()); - } - - CompanyErrors hasError = accountNotificationHelper.accountTerminationByDocumentNotification(profileDocument.getCompanyId(), profileDocument.getId()); - if (hasError != null) { - log.error("Error at termination account of company {} by document {}: {}", - profileDocument.getCompanyId(), profileDocument.getId(), hasError + "(" + hasError.getId() + ")"); - } - log.debug("Now wait notification from account-service."); - /* processXCNT - Дальнейшая обработка документа о расторжении, то есть обновление статусов в company и relation, возможна только после ответа об успешном обновлении статуса в account. - ACCOUNT_TERMINATION -> ACCOUNT_TERMINATION_STEP2 - 1.2. Обновить статус в бизнес-объекте company [profileDocument.companyId=company.id] согласно описанию с тегом "При расторжении". - 1.3. Обновить статус в бизнес-объекте relation [profileDocument.companyId=relation.consumerId] согласно описанию с тегом "При расторжении". - */ - } +// @NonNull +// public RequestInfoUpdate profileDocumentNew(BaseRequest profileDocumentNewRequestBaseRequest) { +// log.trace("Start processing ProfileDocumentNewRequest!"); +// +// RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(profileDocumentNewRequestBaseRequest); +// if (requestInfoUpdate != null) return requestInfoUpdate; +// +// requestInfoUpdate = validationHelper.validateTillFirstError( +// profileDocumentNewRequestBaseRequest, profileDocumentNewRequestValidator +// ); +// if (requestInfoUpdate != null) return requestInfoUpdate; +// +// ProfileDocumentNewRequest profileDocumentNewRequest = profileDocumentNewRequestBaseRequest.getRequestPayload(); +// ProfileDocument profileDocument = new ProfileDocument(); +// profileDocument.setCompanyId(profileDocumentNewRequest.getCompanyId()); +// profileDocument.setDocumentType(profileDocumentNewRequest.getDocumentType()); +// profileDocument.setIssueDate(profileDocumentNewRequest.getIssueDate()); +// profileDocument.setIssuePlace(profileDocumentNewRequest.getIssuePlace()); +// profileDocument.setIssuer(profileDocumentNewRequest.getIssuer()); +// profileDocument.setIssuerCode(profileDocumentNewRequest.getIssuerCode()); +// profileDocument.setName(profileDocumentNewRequest.getName()); +// profileDocument.setNumber(profileDocumentNewRequest.getNumber()); +// profileDocument.setPlace(profileDocumentNewRequest.getPlace()); +// profileDocument.setValidFromDate(profileDocumentNewRequest.getValidFromDate()); +// profileDocument.setValidToDate(profileDocumentNewRequest.getValidToDate()); +// profileDocument.setLink(profileDocumentNewRequest.getLink()); +// profileDocumentMap.insert(profileDocument); +// +// if (DocumentTypes.xcnt.getKey().equalsIgnoreCase(profileDocument.getDocumentType())) { +// processXCNT(profileDocument); +// } +// +// return null; +// } +// +// private RequestInfoUpdate profileDocumentDelete(BaseRequest deleteRequest) { +// log.trace("Start processing CommonDeleteRequest!"); +// +// RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(deleteRequest); +// if (requestInfoUpdate != null) return requestInfoUpdate; +// +// requestInfoUpdate = validationHelper.validateTillFirstError( +// deleteRequest, profileDocumentDeleteRequestValidator +// ); +// if (requestInfoUpdate != null) return requestInfoUpdate; +// CommonDeleteRequest profileDocumentDeleteRequest = deleteRequest.getRequestPayload(); +// ProfileDocument profileDocument = profileDocumentMap.getSingleObjectByID(profileDocumentDeleteRequest.getId()); +// synchronized (companyService) { +// Company existCompany = profileDocument.getCompanyId() == null ? null : companyMap.getSingleObjectByID(profileDocument.getCompanyId()); +// if (existCompany == null) { +// log.warn("Company {} not found by profileDocument {}", profileDocument.getCompanyId(), profileDocument.getId()); +// return requestHelper.makeErrorResponse(deleteRequest, CompanyErrors.CompanyNotFound, profileDocument.getCompanyId()); +// } +// +// 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; +// } +// +// +// public RequestInfoUpdate profileDocumentUpdate(BaseRequest profileDocumentUpdateRequestBaseRequest) { +// log.trace("Start processing ProfileDocumentUpdateRequest!"); +// +// RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(profileDocumentUpdateRequestBaseRequest); +// if (requestInfoUpdate != null) return requestInfoUpdate; +// +// requestInfoUpdate = validationHelper.validateTillFirstError( +// profileDocumentUpdateRequestBaseRequest, +// profileDocumentUpdateRequestValidator +// ); +// if (requestInfoUpdate != null) return requestInfoUpdate; +// +// ProfileDocumentUpdateRequest profileDocumentUpdateRequest = profileDocumentUpdateRequestBaseRequest.getRequestPayload(); +// ProfileDocument profileDocument = profileDocumentMap.getSingleObjectByID(profileDocumentUpdateRequest.getId()); +// +// String prevDocType = profileDocument.getDocumentType(); +// if (profileDocumentUpdateRequest.getCompanyId() != null && !profileDocumentUpdateRequest.getCompanyId().equals(profileDocument.getCompanyId())) { +// log.warn("profileDocumentUpdateRequest[{}] CompanyId {} not match", profileDocumentUpdateRequest.getId(), profileDocumentUpdateRequest.getCompanyId()); +// return requestHelper.makeErrorResponse(profileDocumentUpdateRequestBaseRequest, CompanyErrors.WrongFieldValue, "companyId"); +// } +// +// if (profileDocumentUpdateRequest.getDocumentType() != null) +// profileDocument.setDocumentType(profileDocumentUpdateRequest.getDocumentType()); +// +// if (profileDocumentUpdateRequest.getIssueDate() != null) +// profileDocument.setIssueDate(profileDocumentUpdateRequest.getIssueDate()); +// +// if (profileDocumentUpdateRequest.getIssuePlace() != null) +// profileDocument.setIssuePlace(profileDocumentUpdateRequest.getIssuePlace()); +// +// if (profileDocumentUpdateRequest.getIssuer() != null) +// profileDocument.setIssuer(profileDocumentUpdateRequest.getIssuer()); +// +// if (profileDocumentUpdateRequest.getIssuerCode() != null) +// profileDocument.setIssuerCode(profileDocumentUpdateRequest.getIssuerCode()); +// +// if (profileDocumentUpdateRequest.getName() != null) +// profileDocument.setName(profileDocumentUpdateRequest.getName()); +// +// if (profileDocumentUpdateRequest.getNumber() != null) +// profileDocument.setNumber(profileDocumentUpdateRequest.getNumber()); +// +// if (profileDocumentUpdateRequest.getPlace() != null) +// profileDocument.setPlace(profileDocumentUpdateRequest.getPlace()); +// +// if (profileDocumentUpdateRequest.getValidFromDate() != null) +// profileDocument.setValidFromDate(profileDocumentUpdateRequest.getValidFromDate()); +// +// if (profileDocumentUpdateRequest.getValidToDate() != null) +// profileDocument.setValidToDate(profileDocumentUpdateRequest.getValidToDate()); +// +// if (profileDocumentUpdateRequest.getLink() != null) +// profileDocument.setLink(profileDocumentUpdateRequest.getLink()); +// +// profileDocumentMap.insert(profileDocument); +// +// log.trace("successfully processed, id {}", profileDocument.getId()); +// +// if (!Objects.equals(prevDocType, profileDocument.getDocumentType()) && +// DocumentTypes.xcnt.getKey().equalsIgnoreCase(profileDocument.getDocumentType())) { +// processXCNT(profileDocument); +// } +// +// return null; +// } +// +// protected void processXCNT(ProfileDocument profileDocument) { +// Company existCompany = profileDocument.getCompanyId() == null ? null : companyMap.getSingleObjectByID(profileDocument.getCompanyId()); +// if (existCompany == null) { +// log.warn("Company {} not found by profileDocument {}", profileDocument.getCompanyId(), profileDocument.getId()); +// return; +// } +// if (!WorkflowStatus.Active.equalsByKey(existCompany.getWorkflowStatus())) { +// log.warn("Current workflowStatus {} for company {}. Do not termination account.", +// existCompany.getWorkflowStatus(), existCompany.getId()); +// } +// +// CompanyErrors hasError = accountNotificationHelper.accountTerminationByDocumentNotification(profileDocument.getCompanyId(), profileDocument.getId()); +// if (hasError != null) { +// log.error("Error at termination account of company {} by document {}: {}", +// profileDocument.getCompanyId(), profileDocument.getId(), hasError + "(" + hasError.getId() + ")"); +// } +// log.debug("Now wait notification from account-service."); +// /* processXCNT +// Дальнейшая обработка документа о расторжении, то есть обновление статусов в company и relation, возможна только после ответа об успешном обновлении статуса в account. +// ACCOUNT_TERMINATION -> ACCOUNT_TERMINATION_STEP2 +// 1.2. Обновить статус в бизнес-объекте company [profileDocument.companyId=company.id] согласно описанию с тегом "При расторжении". +// 1.3. Обновить статус в бизнес-объекте relation [profileDocument.companyId=relation.consumerId] согласно описанию с тегом "При расторжении". +// */ +// } } 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 6055d2d11..9bbfece40 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 @@ -1,5 +1,17 @@ package ru.spcex.clearing.company.service; +import static ru.spcex.platform.enumeration.Service.FOND; +import static ru.spcex.platform.enumeration.Service.MKR; +import static ru.spcex.platform.enumeration.ServiceStatus.Closed; +import static ru.spcex.platform.utils.enumeration.IEnumKey.getEnumByKey; + +import java.time.Instant; +import java.util.Collection; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import java.util.function.Function; +import java.util.stream.Collectors; import org.apache.commons.lang3.StringUtils; import org.apache.kafka.clients.consumer.Consumer; import org.apache.kafka.clients.producer.Producer; @@ -15,7 +27,6 @@ import ru.clearing.classes.statics.data.company.relation.Relation; import ru.spcex.clearing.company.error.CompanyErrors; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.platform.messaging.domain.BaseRequest; -import ru.spcex.clearing.platform.messaging.domain.Consts; import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; import ru.spcex.clearing.platform.messaging.domain.cud.company.RelationNewRequest; import ru.spcex.clearing.platform.messaging.domain.cud.company.RelationUpdateRequest; @@ -36,19 +47,7 @@ import ru.spcex.platform.utils.enumeration.IEnumKey; import ru.spcex.platform.utils.error.ValidationException; import ru.spcex.platform.utils.validation.IValidator; -import java.time.Instant; -import java.util.Collection; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; -import java.util.function.Function; -import java.util.stream.Collectors; - -import static ru.spcex.platform.enumeration.Service.FOND; -import static ru.spcex.platform.enumeration.Service.MKR; -import static ru.spcex.platform.enumeration.ServiceStatus.Closed; -import static ru.spcex.platform.utils.enumeration.IEnumKey.getEnumByKey; - +@Deprecated @Service public class RelationService extends QueueConsumer implements InitializingBean { protected static final Long SPVB_ID = 1L; // СПВБ @@ -104,16 +103,16 @@ public class RelationService extends QueueConsumer implements InitializingBean { // this.profileDocumentMap = imdgProvider.getImdg(IMDGDistributedNames.Map_ProfileDocument, ProfileDocument.class); // this.companyMap = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); - callback(RelationNewRequest.class) - .setFunction(this::relationNew) - .forDestination(Consts.DESTINATION_RELATION_NEW, callbacks::put); - callback(RelationUpdateRequest.class) - .setFunction(this::relationUpdate) - .forDestination(Consts.DESTINATION_RELATION_UPDATE, callbacks::put); - callback(CommonDeleteRequest.class) - .setFunction(this::relationDelete) - .forDestination(Consts.DESTINATION_RELATION_DELETE, callbacks::put); - init(); +// callback(RelationNewRequest.class) +// .setFunction(this::relationNew) +// .forDestination(Consts.DESTINATION_RELATION_NEW, callbacks::put); +// callback(RelationUpdateRequest.class) +// .setFunction(this::relationUpdate) +// .forDestination(Consts.DESTINATION_RELATION_UPDATE, callbacks::put); +// callback(CommonDeleteRequest.class) +// .setFunction(this::relationDelete) +// .forDestination(Consts.DESTINATION_RELATION_DELETE, callbacks::put); +// init(); } private synchronized RequestInfoUpdate relationNew(BaseRequest relationNewBaseRequest) { @@ -562,7 +561,7 @@ public class RelationService extends QueueConsumer implements InitializingBean { // --- internal API --- - protected void createNewRelation(ImdgTransaction transaction, Long companyId, ClearingMemberCategory clearingMemberCategory) { + public void createNewRelation(ImdgTransaction transaction, Long companyId, ClearingMemberCategory clearingMemberCategory) { Objects.requireNonNull(companyId, "companyId"); Imdg relationMap = transaction.getImdg(IMDGDistributedNames.Map_Relation, Relation.class); Company company = transaction.getImdg(IMDGDistributedNames.Map_Company, Company.class).getFirstObjectByFieldValues(Map.of("id", companyId)); @@ -599,7 +598,7 @@ public class RelationService extends QueueConsumer implements InitializingBean { /** * Приходит от ClearingMemberCategory */ - protected void cancelRelation(ImdgTransaction transaction, Long companyId, ClearingMemberCategory clearingMemberCategory) { + public void cancelRelation(ImdgTransaction transaction, Long companyId, ClearingMemberCategory clearingMemberCategory) { log.debug("Cancelling relations for companyId={} and clearingMemberCategory {}", companyId, clearingMemberCategory == null ? null : clearingMemberCategory.getClearingMemberCategory()); Objects.requireNonNull(companyId, "companyId"); Imdg relationMap = transaction.getImdg(IMDGDistributedNames.Map_Relation, Relation.class); @@ -657,7 +656,7 @@ public class RelationService extends QueueConsumer implements InitializingBean { log.debug("Cancelled {} relation (of {}) by company {}", cancelledN, relations.size(), companyId); } - protected void cancelingOfAgreementUpdateRelation(ImdgTransaction transaction, Long companyId) { + public void cancelingOfAgreementUpdateRelation(ImdgTransaction transaction, Long companyId) { Imdg relationMap = transaction.getImdg(IMDGDistributedNames.Map_Relation, Relation.class); Relation relation = relationMap.getFirstObjectByFieldValues(Map.of("consumerId", companyId)); if (relation == null) { diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/SettlementHousePropertiesService.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/SettlementHousePropertiesService.java index 895788e2b..e6ee203f0 100644 --- a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/SettlementHousePropertiesService.java +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/SettlementHousePropertiesService.java @@ -1,5 +1,6 @@ package ru.spcex.clearing.company.service; +import java.util.function.Function; import org.apache.kafka.clients.consumer.Consumer; import org.apache.kafka.clients.producer.Producer; import org.slf4j.Logger; @@ -9,31 +10,21 @@ 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.SettlementHouseProperties; -import ru.spcex.clearing.company.error.CompanyErrors; import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.platform.messaging.domain.BaseRequest; -import ru.spcex.clearing.platform.messaging.domain.Consts; import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; import ru.spcex.clearing.platform.messaging.domain.cud.company.SettlementHousePropertyNewRequest; import ru.spcex.clearing.platform.messaging.domain.cud.company.SettlementHousePropertyUpdateRequest; import ru.spcex.clearing.platform.messaging.service.QueueConsumer; -import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate; import ru.spcex.clearing.util.security.UserRoleVerification; import ru.spcex.clearing.util.services.RequestHelper; import ru.spcex.clearing.validation.common.ValidationHelper; -import ru.spcex.platform.enumeration.WorkflowStatus; 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.ImdgPredicateBuilder; import ru.spcex.platform.utils.enumeration.IMessageResolver; -import ru.spcex.platform.utils.error.ValidationException; import ru.spcex.platform.utils.validation.IValidator; -import java.util.Map; -import java.util.Objects; -import java.util.function.Function; - +@Deprecated @Service public class SettlementHousePropertiesService extends QueueConsumer implements InitializingBean { private final Logger log = LoggerFactory.getLogger(getClass()); @@ -80,76 +71,76 @@ public class SettlementHousePropertiesService extends QueueConsumer implements I @Override public void afterPropertiesSet() { - callback(SettlementHousePropertyNewRequest.class) - .setFunction(request -> requestHelper.requestFunction(this::createSettlementHouseProperty, request)) - .forDestination(Consts.DESTINATION_SETTLEMENT_HOUSE_PROPERTY_NEW, callbacks::put); - callback(SettlementHousePropertyUpdateRequest.class) - .setConsumer(request -> requestHelper.requestFunction(this::updateSettlementHouseProperty, request)) - .forDestination(Consts.DESTINATION_SETTLEMENT_HOUSE_PROPERTY_UPDATE, callbacks::put); - callback(CommonDeleteRequest.class) - .setFunction(request -> requestHelper.requestFunction(this::deleteSettlementHouseProperty, request)) - .forDestination(Consts.DESTINATION_SETTLEMENT_HOUSE_PROPERTY_DELETE - , callbacks::put); - init(); +// callback(SettlementHousePropertyNewRequest.class) +// .setFunction(request -> requestHelper.requestFunction(this::createSettlementHouseProperty, request)) +// .forDestination(Consts.DESTINATION_SETTLEMENT_HOUSE_PROPERTY_NEW, callbacks::put); +// callback(SettlementHousePropertyUpdateRequest.class) +// .setConsumer(request -> requestHelper.requestFunction(this::updateSettlementHouseProperty, request)) +// .forDestination(Consts.DESTINATION_SETTLEMENT_HOUSE_PROPERTY_UPDATE, callbacks::put); +// callback(CommonDeleteRequest.class) +// .setFunction(request -> requestHelper.requestFunction(this::deleteSettlementHouseProperty, request)) +// .forDestination(Consts.DESTINATION_SETTLEMENT_HOUSE_PROPERTY_DELETE +// , callbacks::put); +// init(); } - private RequestInfoUpdate createSettlementHouseProperty(BaseRequest settlementHousePropertyNewRequestBaseRequest) throws ValidationException { - SettlementHousePropertyNewRequest req = settlementHousePropertyNewRequestBaseRequest.getRequestPayload(); - log.debug("SettlementHouseProperty-new request received, BaseRequest.id = {}", settlementHousePropertyNewRequestBaseRequest.getId()); - { // Валидация, ValidationException - RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(settlementHousePropertyNewRequestBaseRequest); - if (requestInfoUpdate != null) return requestInfoUpdate; - requestInfoUpdate = validationHelper.validateTillFirstError(settlementHousePropertyNewRequestBaseRequest, settlementHousePropertyNewRequestValidator); - if (requestInfoUpdate != null) return requestInfoUpdate; - } - - - SettlementHouseProperties shp = new SettlementHouseProperties(); - shp.setId(idSequence.nextId()); - shp.setCompanyId(req.getCompanyId()); - shp.setCurrencyCode(req.getCurrencyCode()); - - settlementHousePropertiesMap.insert(shp); - log.debug("New SettlementHouseProperties[{}] for company {}", shp.getId(), shp.getCompanyId()); - return null; - } - - private RequestInfoUpdate updateSettlementHouseProperty(BaseRequest settlementHousePropertyUpdateRequestBaseRequest) throws ValidationException { - SettlementHousePropertyUpdateRequest req = settlementHousePropertyUpdateRequestBaseRequest.getRequestPayload(); - log.debug("SettlementHouseProperty-update request received, BaseRequest.id = {}", settlementHousePropertyUpdateRequestBaseRequest.getId()); - { // Валидация, ValidationException - RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(settlementHousePropertyUpdateRequestBaseRequest); - if (requestInfoUpdate != null) return requestInfoUpdate; - requestInfoUpdate = validationHelper.validateTillFirstError(settlementHousePropertyUpdateRequestBaseRequest, settlementHousePropertyUpdateRequestRequestValidator); - if (requestInfoUpdate != null) return requestInfoUpdate; - } - - SettlementHouseProperties shp = settlementHousePropertiesMap.getSingleObjectByID(req.getId()); - - shp.setCompanyId(req.getCompanyId()); - shp.setCurrencyCode(req.getCurrencyCode()); - - settlementHousePropertiesMap.update(shp); - log.debug("Update SettlementHouseProperty[{}] for company {}", shp.getId(), req.getCompanyId()); - return null; - } - - private RequestInfoUpdate deleteSettlementHouseProperty(BaseRequest settlementHousePropertyDeleteRequest) throws ValidationException { - CommonDeleteRequest request = settlementHousePropertyDeleteRequest.getRequestPayload(); - log.debug("SettlementHousePropertyDeleteRequest received id = {}", request.getId()); - { // Валидация, ValidationException - RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(settlementHousePropertyDeleteRequest); - if (requestInfoUpdate != null) return requestInfoUpdate; - requestInfoUpdate = validationHelper.validateTillFirstError(settlementHousePropertyDeleteRequest, settlementHousePropertiesDeleteRequestValidator); - if (requestInfoUpdate != null) return requestInfoUpdate; - } - SettlementHouseProperties settlementHouseProperty = settlementHousePropertiesMap.getSingleObjectByID(request.getId()); - if (settlementHouseProperty == null) { - return requestHelper.makeErrorResponse(settlementHousePropertyDeleteRequest, CompanyErrors.RecordNotFound, request.getId()); - } - settlementHousePropertiesMap.delete(settlementHouseProperty); - log.debug("SettlementHouseProperty {} for company {} delete", settlementHouseProperty.getId(), settlementHouseProperty.getCompanyId()); - return null; - } +// private RequestInfoUpdate createSettlementHouseProperty(BaseRequest settlementHousePropertyNewRequestBaseRequest) throws ValidationException { +// SettlementHousePropertyNewRequest req = settlementHousePropertyNewRequestBaseRequest.getRequestPayload(); +// log.debug("SettlementHouseProperty-new request received, BaseRequest.id = {}", settlementHousePropertyNewRequestBaseRequest.getId()); +// { // Валидация, ValidationException +// RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(settlementHousePropertyNewRequestBaseRequest); +// if (requestInfoUpdate != null) return requestInfoUpdate; +// requestInfoUpdate = validationHelper.validateTillFirstError(settlementHousePropertyNewRequestBaseRequest, settlementHousePropertyNewRequestValidator); +// if (requestInfoUpdate != null) return requestInfoUpdate; +// } +// +// +// SettlementHouseProperties shp = new SettlementHouseProperties(); +// shp.setId(idSequence.nextId()); +// shp.setCompanyId(req.getCompanyId()); +// shp.setCurrencyCode(req.getCurrencyCode()); +// +// settlementHousePropertiesMap.insert(shp); +// log.debug("New SettlementHouseProperties[{}] for company {}", shp.getId(), shp.getCompanyId()); +// return null; +// } +// +// private RequestInfoUpdate updateSettlementHouseProperty(BaseRequest settlementHousePropertyUpdateRequestBaseRequest) throws ValidationException { +// SettlementHousePropertyUpdateRequest req = settlementHousePropertyUpdateRequestBaseRequest.getRequestPayload(); +// log.debug("SettlementHouseProperty-update request received, BaseRequest.id = {}", settlementHousePropertyUpdateRequestBaseRequest.getId()); +// { // Валидация, ValidationException +// RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(settlementHousePropertyUpdateRequestBaseRequest); +// if (requestInfoUpdate != null) return requestInfoUpdate; +// requestInfoUpdate = validationHelper.validateTillFirstError(settlementHousePropertyUpdateRequestBaseRequest, settlementHousePropertyUpdateRequestRequestValidator); +// if (requestInfoUpdate != null) return requestInfoUpdate; +// } +// +// SettlementHouseProperties shp = settlementHousePropertiesMap.getSingleObjectByID(req.getId()); +// +// shp.setCompanyId(req.getCompanyId()); +// shp.setCurrencyCode(req.getCurrencyCode()); +// +// settlementHousePropertiesMap.update(shp); +// log.debug("Update SettlementHouseProperty[{}] for company {}", shp.getId(), req.getCompanyId()); +// return null; +// } +// +// private RequestInfoUpdate deleteSettlementHouseProperty(BaseRequest settlementHousePropertyDeleteRequest) throws ValidationException { +// CommonDeleteRequest request = settlementHousePropertyDeleteRequest.getRequestPayload(); +// log.debug("SettlementHousePropertyDeleteRequest received id = {}", request.getId()); +// { // Валидация, ValidationException +// RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(settlementHousePropertyDeleteRequest); +// if (requestInfoUpdate != null) return requestInfoUpdate; +// requestInfoUpdate = validationHelper.validateTillFirstError(settlementHousePropertyDeleteRequest, settlementHousePropertiesDeleteRequestValidator); +// if (requestInfoUpdate != null) return requestInfoUpdate; +// } +// SettlementHouseProperties settlementHouseProperty = settlementHousePropertiesMap.getSingleObjectByID(request.getId()); +// if (settlementHouseProperty == null) { +// return requestHelper.makeErrorResponse(settlementHousePropertyDeleteRequest, CompanyErrors.RecordNotFound, request.getId()); +// } +// settlementHousePropertiesMap.delete(settlementHouseProperty); +// log.debug("SettlementHouseProperty {} for company {} delete", settlementHouseProperty.getId(), settlementHouseProperty.getCompanyId()); +// return null; +// } } diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/facade/ClearingMemberCategoryServiceFacade.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/facade/ClearingMemberCategoryServiceFacade.java new file mode 100644 index 000000000..ba0ba3b30 --- /dev/null +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/facade/ClearingMemberCategoryServiceFacade.java @@ -0,0 +1,106 @@ +package ru.spcex.clearing.company.service.v2.facade; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import ru.clearing.classes.statics.data.company.ClearingMemberCategory; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.ClearingMemberCategoryNewRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.ClearingMemberCategoryUpdateRequest; +import ru.spcex.platform.enumeration.ClearingCategory; +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; + +@Service +public class ClearingMemberCategoryServiceFacade { + private final Logger log = LoggerFactory.getLogger(getClass()); + private final ImdgProvider imdgProvider; + private final ImdgId idSequence; + private final Imdg clearingMemberCategoryMap; + private final RelationServiceFacade relationServiceFacade; + + public ClearingMemberCategoryServiceFacade(ImdgProvider imdgProvider, + RelationServiceFacade relationServiceFacade) { + this.imdgProvider = imdgProvider; + this.relationServiceFacade = relationServiceFacade; + this.idSequence = imdgProvider.getImdgIdGenerator(); + this.clearingMemberCategoryMap = this.imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class); + } + + public void create(ClearingMemberCategoryNewRequest request) { + ClearingMemberCategory newCategory = new ClearingMemberCategory(); + newCategory.setId(idSequence.nextId()); + newCategory.setCompanyId(request.getCompanyId()); + newCategory.setClearingMemberCategory(request.getClearingMemberCategory()); + + ImdgTransaction transaction = imdgProvider.newTransaction(); + transaction.beginTransaction(); + boolean txOk = false; + try { + if (IEnumKey.contains(newCategory.getClearingMemberCategory(), ClearingCategory.T, ClearingCategory.K)) { + log.debug("For category \"{}\" do not create relation.", newCategory.getClearingMemberCategory()); + } else { + relationServiceFacade.createNewRelation(transaction, request.getCompanyId(), newCategory); + } + clearingMemberCategoryMap.insert(newCategory); + txOk = true; + } finally { + if (txOk) + transaction.commitTransaction(); + else + transaction.rollbackTransaction(); + } + log.debug("Successfully processed, new category id {}", newCategory.getId()); + } + + public void update(ClearingMemberCategoryUpdateRequest request) { + ClearingMemberCategory clearingMemberCategory = clearingMemberCategoryMap.getSingleObjectByID(request.getId()); + + clearingMemberCategory.setClearingMemberCategory(request.getClearingMemberCategory()); + ImdgTransaction transaction = imdgProvider.newTransaction(); + transaction.beginTransaction(); + boolean txOk = false; + try { + //todo сложный кейс с возможным изменением релейшена или пересозданием. Скоро ТЗ доделают. + //companyService.relationService.updateExistRelation(transaction,clearingMemberCategory.getCompanyId(), oldClearingMemberCategory, + // clearingMemberCategory.getClearingMemberCategory()); + relationServiceFacade.createNewRelation(transaction, clearingMemberCategory.getCompanyId(), clearingMemberCategory); + clearingMemberCategoryMap.insert(clearingMemberCategory); + txOk = true; + } finally { + if (txOk) + transaction.commitTransaction(); + else + transaction.rollbackTransaction(); + } + + log.debug("successfully processed, id {}", clearingMemberCategory.getId()); + } + + public void delete(CommonDeleteRequest request) { + ClearingMemberCategory clearingMemberCategory = clearingMemberCategoryMap.getSingleObjectByID(request.getId()); + + ImdgTransaction transaction = imdgProvider.newTransaction(); + transaction.beginTransaction(); + boolean txOk = false; + try { + clearingMemberCategoryMap.delete(clearingMemberCategory); // далить до cancelRelation внутри транзакции + if (clearingMemberCategory.getCompanyId() == null) { // never, только тестовые данные + log.warn("Deleted clearingMemberCategory[{}] has not companyId", clearingMemberCategory.getId()); + } else { + relationServiceFacade.cancelRelation(transaction, clearingMemberCategory.getCompanyId(), clearingMemberCategory); + } + txOk = true; + } finally { + if (txOk) + transaction.commitTransaction(); + else + transaction.rollbackTransaction(); + } + log.debug("clearingMemberCategory.id={} deleted.", clearingMemberCategory.getId()); + } +} diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/facade/CompanyInfoServiceFacade.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/facade/CompanyInfoServiceFacade.java new file mode 100644 index 000000000..f6b329e36 --- /dev/null +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/facade/CompanyInfoServiceFacade.java @@ -0,0 +1,93 @@ +package ru.spcex.clearing.company.service.v2.facade; + +import java.time.Instant; +import java.util.Objects; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import ru.clearing.classes.statics.data.company.Company; +import ru.clearing.classes.statics.data.profile.CompanyInfo; +import ru.spcex.clearing.company.error.CompanyErrors; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.domain.cud.company.CompanyInfoUpdateRequest; +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.error.ValidationException; + +@Service +public class CompanyInfoServiceFacade { + private final Logger log = LoggerFactory.getLogger(getClass()); + private final ImdgProvider imdgProvider; + private final Imdg companyMap; + private final RelationServiceFacade relationServiceFacade; + + public CompanyInfoServiceFacade(ImdgProvider imdgProvider, + RelationServiceFacade relationServiceFacade) { + this.imdgProvider = imdgProvider; + this.relationServiceFacade = relationServiceFacade; + this.companyMap = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); + } + + public CompanyErrors update(CompanyInfoUpdateRequest request) { + Company company = companyMap.getSingleObjectByID(request.getId()); + if (company == null) { + log.trace("Company {} not found", request.getId()); + return CompanyErrors.CompanyNotFound; + } + company.setUpdated(Instant.now()); + if (StringUtils.isNotEmpty(request.getShortName())) + company.setShortName(request.getShortName()); + if (StringUtils.isNotEmpty(request.getFullName())) + company.setFullName(request.getFullName()); + CompanyInfo companyInfo = company.getProfile(); + + companyInfo.setCountryCode(request.getCountryCode()); + companyInfo.setProfessionalSign(request.getProfessionalSign()); + companyInfo.setLegalKind(request.getLegalKind()); + companyInfo.setOrganizationType(request.getOrganizationType()); + companyInfo.setResidence(request.getResidence()); + + companyInfo.setCorporationSoleType(request.getCorporationSoleType()); + companyInfo.setDescription(request.getDescription()); + companyInfo.setShortNameEng(request.getShortNameEng()); + companyInfo.setFullNameEng(request.getFullNameEng()); + + boolean simpleUpdate = true; + if (request.getWorkflowStatus() != null) { + String prevStatus = company.getWorkflowStatus(); + company.setWorkflowStatus(request.getWorkflowStatus()); + if (!Objects.equals(prevStatus, company.getWorkflowStatus())) { + simpleUpdate = false; + ImdgTransaction transaction = imdgProvider.newTransaction(); + transaction.beginTransaction(); + boolean txOk = false; + try { + relationServiceFacade.onChangeWorkflowStatus(transaction, company, prevStatus, company.getWorkflowStatus()); + Imdg txCompanyMap = transaction.getImdg(IMDGDistributedNames.Map_Company, Company.class); + txCompanyMap.update(company); + log.trace("Company {} updated", company.getId()); + txOk = true; + } catch (ValidationException e) { + throw new RuntimeException(e); + } finally { + if (txOk) + transaction.commitTransaction(); + else + transaction.rollbackTransaction(); + } + } else { + log.trace("Status was not changed"); + } + } else { + log.trace("Null new WorkflowStatus"); + } + if (simpleUpdate) { + companyMap.update(company); + log.trace("Company {} updated", company.getId()); + } + log.debug("successfully CompanyInfo processed, id {}", companyInfo.getId()); + return null; + } +} diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/facade/CompanyRoleSetServiceFacade.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/facade/CompanyRoleSetServiceFacade.java new file mode 100644 index 000000000..f9c880dff --- /dev/null +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/facade/CompanyRoleSetServiceFacade.java @@ -0,0 +1,100 @@ +package ru.spcex.clearing.company.service.v2.facade; + +import java.util.Map; +import java.util.Objects; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import ru.clearing.classes.statics.data.company.CompanyRoleSet; +import ru.spcex.clearing.company.error.CompanyErrors; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.CompanyRoleSetNewRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.CompanyRoleSetUpdateRequest; +import ru.spcex.platform.enumeration.WorkflowStatus; +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.ImdgPredicateBuilder; + +@Service +public class CompanyRoleSetServiceFacade { + private final Logger log = LoggerFactory.getLogger(getClass()); + private final ImdgId idSequence; + private final Imdg companyRoleSetMap; + + public CompanyRoleSetServiceFacade(ImdgProvider imdgProvider) { + this.idSequence = imdgProvider.getImdgIdGenerator(); + this.companyRoleSetMap = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanyRoleSet, CompanyRoleSet.class); + } + + public CompanyErrors create(CompanyRoleSetNewRequest request) { + CompanyRoleSet existRole = companyRoleSetMap.getFirstObjectByFieldValues(Map.of( + "companyId", request.getCompanyId(), + "companyRole", request.getCompanyRole() + )); + if (existRole != null) { + log.debug("Update exist CompanyRoleSet[{}] for company {}. Should use UPDATE method, action was rejected.", + existRole.getId(), request.getCompanyId()); + return CompanyErrors.RecordAlreadyExist; + } + + CompanyRoleSet newRole = new CompanyRoleSet(); + newRole.setId(idSequence.nextId()); + newRole.setCompanyId(request.getCompanyId()); + newRole.setCompanyRole(request.getCompanyRole()); + if (request.getWorkflowStatus() == null) { + newRole.setWorkflowStatus(WorkflowStatus.Active.getKey()); + } else { + newRole.setWorkflowStatus(request.getWorkflowStatus()); + } + + companyRoleSetMap.insert(newRole); + + log.debug("New CompanyRoleSet[{}] for company {}", newRole.getId(), request.getCompanyId()); + return null; + } + + public CompanyErrors update(CompanyRoleSetUpdateRequest request) { + CompanyRoleSet role = companyRoleSetMap.getSingleObjectByID(request.getId()); + + if (!Objects.equals(role.getCompanyId(), request.getCompanyId()) || !Objects.equals(role.getCompanyRole(), request.getCompanyRole())) { + log.warn("By user request want change companyId or companyRole of CompanyRoleSet[{}]", request.getId()); + ImdgPredicateBuilder p = companyRoleSetMap.predicateBuilder(); + CompanyRoleSet existRole = companyRoleSetMap.getFirstObjectByPredicate(p.and( + p.equals("companyId", request.getCompanyId()), + p.equals("companyRole", request.getCompanyRole()), + p.not(p.equals("id", request.getId())) + )); + if (existRole != null) { + log.debug("Role \"{}\" for company {} already exist with other id={}. Action was rejected.", + request.getCompanyRole(), request.getCompanyId(), existRole.getId()); + return CompanyErrors.RecordAlreadyExist; + } + } + + role.setCompanyId(request.getCompanyId()); + role.setCompanyRole(request.getCompanyRole()); + if (request.getWorkflowStatus() != null) { + role.setWorkflowStatus(request.getWorkflowStatus()); + } + + companyRoleSetMap.update(role); + + log.debug("Update CompanyRoleSet[{}] for company {}", role.getId(), request.getCompanyId()); + return null; + } + + public CompanyErrors delete(CommonDeleteRequest request) { + CompanyRoleSet role = companyRoleSetMap.getSingleObjectByID(request.getId()); + + if (role == null) { + return CompanyErrors.RecordNotFound; + } + + companyRoleSetMap.delete(role); + + log.debug("CompanyRoleSet {} for company {} delete", role.getId(), role.getCompanyId()); + return null; + } +} diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/facade/CompanyServiceFacade.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/facade/CompanyServiceFacade.java index 24818eca0..48abf0274 100644 --- a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/facade/CompanyServiceFacade.java +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/facade/CompanyServiceFacade.java @@ -1,21 +1,40 @@ package ru.spcex.clearing.company.service.v2.facade; import java.time.Instant; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; import java.util.Objects; +import java.util.Optional; +import java.util.function.BiFunction; +import java.util.stream.Collectors; +import java.util.stream.Stream; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; 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.CompanySymbols; import ru.clearing.classes.statics.data.profile.CompanyInfo; +import ru.clearing.classes.statics.data.profile.Contact; +import ru.clearing.classes.statics.data.profile.ProfileDocument; import ru.spcex.clearing.company.error.CompanyErrors; -import ru.spcex.clearing.company.service.RelationService; import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.platform.messaging.domain.BaseRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.account.ClientCodeNewRequest; import ru.spcex.clearing.platform.messaging.domain.cud.account.sdf01.AccountTerminationRequest; import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.ClearingMemberCategoryNewRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.ClearingMemberCategoryUpdateRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.CompanyGatewayRequest; import ru.spcex.clearing.platform.messaging.domain.cud.company.CompanyNewRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.CompanySymbolNewRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.CompanySymbolUpdateRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.ContactNewRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.ContactUpdateRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.ProfileDocumentNewRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.ProfileDocumentUpdateRequest; import ru.spcex.platform.enumeration.CompanySymbol; import ru.spcex.platform.enumeration.WorkflowStatus; import ru.spcex.platform.imdg.api.Imdg; @@ -23,26 +42,57 @@ 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.EnumMessage; +import ru.spcex.platform.utils.enumeration.IEnumKey; +import ru.spcex.platform.utils.enumeration.IMessageResolver; import ru.spcex.platform.utils.error.ValidationException; +import ru.spcex.platform.utils.log.ExceptionUtils; +import ru.spcex.platform.utils.text.TextUtil; @Service public class CompanyServiceFacade { private final Logger log = LoggerFactory.getLogger(getClass()); + private final CompanyInfoServiceFacade companyInfoService; + private final ProfileDocumentServiceFacade profileDocumentService; + private final CompanySymbolServiceFacade companySymbolService; + private final ContactServiceFacade contactService; + private final ClearingMemberCategoryServiceFacade clearingMemberCategoryService; + private final IMessageResolver messageResolver; + private final ImdgProvider imdgProvider; private final ImdgId idSequence; - private final Imdg companyIMap; - public RelationService relationService; + private final Imdg companyImdg; + private final RelationServiceFacade relationServiceFacade; + final Imdg companySymbolsImdg; + final Imdg profileDocumentImdg; + final Imdg contactImdg; + final Imdg clearingMemberCategoryImdg; - public CompanyServiceFacade(ImdgProvider imdgProvider, - RelationService relationService) { + public CompanyServiceFacade(CompanyInfoServiceFacade companyInfoService, + ProfileDocumentServiceFacade profileDocumentService, + CompanySymbolServiceFacade companySymbolService, + ContactServiceFacade contactService, + ClearingMemberCategoryServiceFacade clearingMemberCategoryService, + IMessageResolver messageResolver, + ImdgProvider imdgProvider, + RelationServiceFacade relationServiceFacade) { + this.companyInfoService = companyInfoService; + this.profileDocumentService = profileDocumentService; + this.companySymbolService = companySymbolService; + this.contactService = contactService; + this.clearingMemberCategoryService = clearingMemberCategoryService; + this.messageResolver = messageResolver; this.imdgProvider = imdgProvider; this.idSequence = imdgProvider.getImdgIdGenerator(); - this.relationService = relationService; + this.relationServiceFacade = relationServiceFacade; - this.companyIMap = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); + this.companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); + companySymbolsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class); + profileDocumentImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ProfileDocument, ProfileDocument.class); + contactImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Contact, Contact.class); + clearingMemberCategoryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class); } - public synchronized Long create(CompanyNewRequest companyNewRequest) throws ValidationException { + public Long create(CompanyNewRequest companyNewRequest) throws ValidationException { log.debug("creating new company"); Instant now = Instant.now(); Company company = new Company(); @@ -79,9 +129,9 @@ public class CompanyServiceFacade { Imdg companySymbolsImdg = transaction.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class); companySymbolsImdg.insert(newSymbol); log.debug("Creating companySymbols with id: {} by company.id: {} done", newSymbol.getId(), company.getId()); - updateCompanyBySymbol(company, newSymbol, false); + companySymbolService.updateCompanyBySymbol(company, newSymbol, false); } - companyIMap.insert(company); + companyImdg.insert(company); log.debug("company-new request processed, BaseRequest.id = {}, company.id={}", companyNewRequest.getId(), company.getId()); txOk = true; @@ -94,12 +144,12 @@ public class CompanyServiceFacade { return company.getId(); } - public synchronized void update(CompanyNewRequest updateRequest) throws ValidationException { + public void update(CompanyNewRequest updateRequest) throws ValidationException { ImdgTransaction transaction = imdgProvider.newTransaction(); transaction.beginTransaction(); boolean txOk = false; try { - Company company = companyIMap.getSingleObjectByID(updateRequest.getId()); + Company company = companyImdg.getSingleObjectByID(updateRequest.getId()); if (company == null) { log.trace("Company {} not found", updateRequest.getId()); throw new ValidationException(new EnumMessage(CompanyErrors.CompanyNotFound)); @@ -123,14 +173,14 @@ public class CompanyServiceFacade { if (updateRequest.getWorkflowStatus() != null) { company.setWorkflowStatus(updateRequest.getWorkflowStatus()); if (!Objects.equals(prevStatus, company.getWorkflowStatus())) { - relationService.onChangeWorkflowStatus(transaction, company, prevStatus, company.getWorkflowStatus()); + relationServiceFacade.onChangeWorkflowStatus(transaction, company, prevStatus, company.getWorkflowStatus()); } else { log.trace("Status was not changed"); } } else { log.trace("Null new WorkflowStatus"); } - companyIMap.update(company); + companyImdg.update(company); txOk = true; } finally { if (txOk) @@ -140,12 +190,12 @@ public class CompanyServiceFacade { } } - public synchronized CompanyErrors delete(BaseRequest companyBlockRequestBaseRequest) { + public CompanyErrors delete(CommonDeleteRequest deleteRequest) { ImdgTransaction transaction = imdgProvider.newTransaction(); transaction.beginTransaction(); boolean txOk = false; try { - Company company = companyIMap.getSingleObjectByID(companyBlockRequestBaseRequest.getRequestPayload().getId()); + Company company = companyImdg.getSingleObjectByID(deleteRequest.getId()); if (company == null) { return CompanyErrors.CompanyNotFound; } @@ -155,9 +205,9 @@ public class CompanyServiceFacade { String prevStatus = company.getWorkflowStatus(); company.setWorkflowStatus(WorkflowStatus.Blocked.getKey()); - relationService.onChangeWorkflowStatus(transaction, company, prevStatus, company.getWorkflowStatus()); + relationServiceFacade.onChangeWorkflowStatus(transaction, company, prevStatus, company.getWorkflowStatus()); log.debug("Update company.id={}", company.getId()); - companyIMap.update(company); + companyImdg.update(company); txOk = true; } catch (ValidationException e) { @@ -172,8 +222,8 @@ public class CompanyServiceFacade { return null; } - public synchronized CompanyErrors blockCompany(BaseRequest companyBlockRequestBaseRequest) { - Company company = companyIMap.getSingleObjectByID(companyBlockRequestBaseRequest.getRequestPayload().getId()); + public CompanyErrors blockCompany(CommonDeleteRequest blockRequest) { + Company company = companyImdg.getSingleObjectByID(blockRequest.getId()); if (company == null) { return CompanyErrors.CompanyNotFound; } @@ -190,7 +240,7 @@ public class CompanyServiceFacade { company.setUpdated(Instant.now()); company.setWorkflowStatus(WorkflowStatus.Blocked.getKey()); - relationService.onChangeWorkflowStatusOnlyRelationChange(transaction, company, company.getWorkflowStatus()); + relationServiceFacade.onChangeWorkflowStatusOnlyRelationChange(transaction, company, company.getWorkflowStatus()); log.debug("Update company.id={}", company.getId()); companyMap.update(company); @@ -207,15 +257,15 @@ public class CompanyServiceFacade { return null; } - public synchronized CompanyErrors terminateAccount(BaseRequest accountTerminationRequestBaseRequest) { - log.debug("Finish block company {}", accountTerminationRequestBaseRequest.getRequestPayload().getCompanyId()); + public CompanyErrors terminateAccount(AccountTerminationRequest terminationRequest) { + log.debug("Finish block company {}", terminationRequest.getCompanyId()); ImdgTransaction tx = imdgProvider.newTransaction(); boolean txOk = false; tx.beginTransaction(); try { - Company company = companyIMap.getSingleObjectByID(accountTerminationRequestBaseRequest.getRequestPayload().getCompanyId()); + Company company = companyImdg.getSingleObjectByID(terminationRequest.getCompanyId()); if (company == null) { - log.warn("Company {} not found", accountTerminationRequestBaseRequest.getRequestPayload().getCompanyId()); + log.warn("Company {} not found", terminationRequest.getCompanyId()); //return requestHelper.makeErrorResponse(companyBlockRequestBaseRequest, CompanyErrors.CompanyNotFound); } if (WorkflowStatus.Blocked.equalsByKey(Objects.requireNonNull(company).getWorkflowStatus())) { @@ -224,10 +274,10 @@ public class CompanyServiceFacade { } else { company.setWorkflowStatus(WorkflowStatus.Blocked.getKey()); company.setUpdated(Instant.now()); - companyIMap.update(company); + companyImdg.update(company); } - relationService.cancelAllRelationForCompany(tx, accountTerminationRequestBaseRequest.getRequestPayload().getCompanyId()); + relationServiceFacade.cancelAllRelationForCompany(tx, terminationRequest.getCompanyId()); txOk = true; } finally { if (txOk) tx.commitTransaction(); @@ -237,17 +287,295 @@ public class CompanyServiceFacade { return null; } - private void updateCompanyBySymbol(Company company, CompanySymbols companySymbol, boolean shouldBeDeleted) { - assert company.getId().equals(companySymbol.getCompanyId()); - String setUpValue = shouldBeDeleted ? "" : companySymbol.getCompanySymbolValue(); - if (CompanySymbol.TRDC.equalsByKey(companySymbol.getCompanySymbol())) { - company.setTradingCode(setUpValue); + public boolean createUpdateMultiCompany(CompanyGatewayRequest createRequest) { + ImdgTransaction transaction = imdgProvider.newTransaction(); + transaction.beginTransaction(); + + Long companyId = getCompanyIdForCompanySymbols(createRequest.getUuid(), createRequest.getCompany(), createRequest.getCompanySymbols()); + + try { + createRequest.setCompanySymbols( + Stream.concat(createRequest.getCompanySymbols().stream(), additionalSymbols(createRequest.getCompany())).collect(Collectors.toList()) + ); + + log.debug("For request with uuid {} company {}.", createRequest.getUuid(), companyId == null ? "not found" : ("found, id=" + companyId)); + + if (companyId == null) { + companyId = create(createRequest.getCompany()); + log.debug("The companyId={}", companyId); + fillCompanyId(createRequest, companyId); + } else { + fillCompanyId(createRequest, companyId); + update(createRequest.getCompany()); + } + + if (createRequest.getCompanyInfo() != null) { + log.trace("For company {} do update CompanyInfo", companyId); + companyInfoService.update(createRequest.getCompanyInfo()); +// validateReply(companyId, "CompanyInfo", replyI); + } + createUpdateProfileDocument(createRequest, companyId); + createUpdateCompanySymbol(createRequest, companyId); + createUpdateContract(createRequest, companyId); + createUpdateClearingMemberCategory(createRequest, companyId); + + log.debug("Create or update sendNewClientCode for company {}", companyId); + return true; + } catch (ValidationException vex) { + log.error("For gateway request.id={}, companyId={} error validate: {}", createRequest.getUuid(), companyId, messageResolver.resolve(vex.getEnumMsg())); + log.trace("For companyId={} error validation: {}", companyId, ExceptionUtils.getStackTrace(vex)); } - if (CompanySymbol.CLRC.equalsByKey(companySymbol.getCompanySymbol())) { - company.setClearingCode(setUpValue); + return false; + } + + private void createUpdateProfileDocument(CompanyGatewayRequest baseRequest, Long companyId) { + for (ProfileDocumentNewRequest partRequest : baseRequest.getProfileDocuments()) { + ProfileDocument existDocument = findCompanyDocument(partRequest); + if (existDocument == null) { + log.trace("For company[{}] do new profileDocument", companyId); + profileDocumentService.create(partRequest); +// validateReply(companyId, "profileDocumentNew", requestInfoUpdate); + } else { + log.trace("For company[{}] do update profileDocument[{}]", companyId, existDocument.getId()); + ProfileDocumentUpdateRequest partUpdateRequest = ProfileDocumentUpdateRequest.builder() + .id(existDocument.getId()) + .companyId(partRequest.getCompanyId()) + .documentType(partRequest.getDocumentType()) + .issueDate(partRequest.getIssueDate()) + .issuePlace(partRequest.getIssuePlace()) + .issuer(partRequest.getIssuer()) + .issuerCode(partRequest.getIssuerCode()) + .name(partRequest.getName()) + .number(partRequest.getNumber()) + .place(partRequest.getPlace()) + .validFromDate(partRequest.getValidFromDate()) + .validToDate(partRequest.getValidToDate()) + .link(partRequest.getLink()) + .build(); + profileDocumentService.update(partUpdateRequest); +// validateReply(companyId, "profileDocumentUpdate", requestInfoUpdate); + } } - if (CompanySymbol.RGRC.equalsByKey(companySymbol.getCompanySymbol())) { - company.setRegistrationCode(setUpValue); + } + + private void createUpdateCompanySymbol(CompanyGatewayRequest baseRequest, Long companyId) throws ValidationException { + for (CompanySymbolNewRequest partRequest : baseRequest.getCompanySymbols()) { + CompanySymbols existSymbol = findCompanySymbols(partRequest); + if (existSymbol == null) { + log.trace("For company[{}] do new companySymbol", companyId); + companySymbolService.create(partRequest); + } else { + log.trace("For company[{}] do update companySymbol[{}]", companyId, existSymbol.getId()); + CompanySymbolUpdateRequest partUpdateRequest = CompanySymbolUpdateRequest.builder() + .id(existSymbol.getId()) + .companyId(partRequest.getCompanyId()) + .companySymbol(partRequest.getCompanySymbol()) + .companySymbolValue(partRequest.getCompanySymbolValue()) + .build(); + companySymbolService.update(partUpdateRequest); +// validateReply(companyId, "companySymbolUpdate", requestInfoUpdate); + } + } + } + + private void createUpdateContract(CompanyGatewayRequest baseRequest, Long companyId) { + for (ContactNewRequest partRequest : baseRequest.getContacts()) { + Contact existContact = findContact(partRequest); + if (existContact == null) { + log.trace("For company[{}] do new contact", companyId); + contactService.create(partRequest); +// validateReply(companyId, "contactNew", requestInfoUpdate); + } else { + log.trace("For company[{}] do update contact[{}]", companyId, existContact.getId()); + ContactUpdateRequest partUpdateRequest = ContactUpdateRequest.builder() + .id(existContact.getId()) + .contactType(partRequest.getContactType()) + .contactValue(partRequest.getContactValue()) + .build(); + contactService.update(partUpdateRequest); +// validateReply(companyId, "contactUpdate", requestInfoUpdate); + } + } + } + + private void createUpdateClearingMemberCategory(CompanyGatewayRequest baseRequest, Long companyId) { + for (ClearingMemberCategoryNewRequest partRequest : baseRequest.getCategories()) { + ClearingMemberCategory existCategory = findCategory(partRequest); + if (existCategory == null) { + log.trace("For company[{}] do new category", companyId); + clearingMemberCategoryService.create(partRequest); +// validateReply(companyId, "contactNew", requestInfoUpdate); + } else { + log.trace("For company[{}] do update category[{}]", companyId, existCategory.getId()); + ClearingMemberCategoryUpdateRequest partUpdateRequest = ClearingMemberCategoryUpdateRequest.builder() + .id(existCategory.getId()) + .clearingMemberCategory(partRequest.getClearingMemberCategory()) + .build(); + clearingMemberCategoryService.update(partUpdateRequest); +// validateReply(companyId, "categoryUpdate", requestInfoUpdate); + } + } + } + + private Stream additionalSymbols(CompanyNewRequest companyNewReq) { + BiFunction> symbolCreation = (companySymbol, companySymbolValue) -> { + if (companySymbolValue == null || TextUtil.isEmpty(companySymbolValue)) { + return Optional.empty(); + } + CompanySymbolNewRequest companySymbolNewRequest = new CompanySymbolNewRequest(); + companySymbolNewRequest.setCompanySymbol(companySymbol); + companySymbolNewRequest.setCompanySymbolValue(companySymbolValue); + return Optional.of(companySymbolNewRequest); + }; + return Stream.of(symbolCreation.apply(CompanySymbol.TRDC.getKey(), companyNewReq.getTradingCode()), + symbolCreation.apply(CompanySymbol.CLRC.getKey(), companyNewReq.getClearingCode()), + symbolCreation.apply(CompanySymbol.INTC.getKey(), companyNewReq.getInitiatorCode()), + symbolCreation.apply(CompanySymbol.RGRC.getKey(), companyNewReq.getRegistrationCode())) + .filter(Optional::isPresent) + .map(Optional::get); + } + + public ProfileDocument findCompanyDocument(ProfileDocumentNewRequest partRequest) { + Map> query = new HashMap<>(); + query.put("companyId", partRequest.getCompanyId()); + query.put("documentType", partRequest.getDocumentType()); + query.put("issueDate", partRequest.getIssueDate()); // может быть null + Collection allDoc = profileDocumentImdg.getCollectionObjectsByFieldValues(query); + if (allDoc.isEmpty()) + return null; + if (allDoc.size() > 1) + log.warn("Fount {} ProfileDocument by: {}", allDoc.size(), query); + return allDoc.iterator().next(); + } + + public CompanySymbols findCompanySymbols(CompanySymbolNewRequest partRequest) { + Map> query = new HashMap<>(); + query.put("companyId", partRequest.getCompanyId()); + query.put("companySymbol", partRequest.getCompanySymbol()); + Collection allCS = companySymbolsImdg.getCollectionObjectsByFieldValues(query); + if (allCS.isEmpty()) + return null; + if (allCS.size() > 1) + log.warn("Fount {} CompanySymbols by: {}", allCS.size(), query); + return allCS.iterator().next(); + } + + public Contact findContact(ContactNewRequest partRequest) { + Map> query = new HashMap<>(); + query.put("companyId", partRequest.getCompanyId()); + query.put("contactType", partRequest.getContactType()); + Collection allCS = contactImdg.getCollectionObjectsByFieldValues(query); + if (allCS.isEmpty()) + return null; + if (allCS.size() > 1) + log.warn("Fount {} Contact by: {}", allCS.size(), query); + return allCS.iterator().next(); + } + + private ClearingMemberCategory findCategory(ClearingMemberCategoryNewRequest partRequest) { + Map> query = new HashMap<>(); + query.put("companyId", partRequest.getCompanyId()); + query.put("clearingMemberCategory", partRequest.getClearingMemberCategory()); + Collection allCS = clearingMemberCategoryImdg.getCollectionObjectsByFieldValues(query); + if (allCS.isEmpty()) + return null; + if (allCS.size() > 1) + log.warn("Fount {} ClearingMemberCategory by: {}", allCS.size(), query); + return allCS.iterator().next(); + } + + public Long getCompanyIdForCompanySymbols(String uuid, CompanyNewRequest cnr, Collection companySymbols) { + CompanySymbols companySymbol = null; + if (StringUtils.isNotEmpty(uuid)) { + log.trace("Search company by companySymbol uuid={}", uuid); + Collection companySymbolsFromImdg = companySymbolsImdg.getCollectionObjectsByFieldValues( + Map.of( + "companySymbol", CompanySymbol.UUID.getKey(), + "companySymbolValue", uuid + ) + ); + if (!companySymbolsFromImdg.isEmpty()) { + companySymbol = companySymbolsFromImdg.iterator().next(); + if (companySymbolsFromImdg.size() > 1) { + log.warn("For UUID found > 1 company_symbols, use first (id = {})", companySymbol.getId()); + } + } + } + if (companySymbol == null && StringUtils.isNotEmpty(cnr.getCompanySymbolValue()) + && IEnumKey.contains(cnr.getCompanySymbol(), CompanySymbol.UUID, CompanySymbol.INN, CompanySymbol.CIO)) { // вероятно там будет только UUID + { + String companySymbolType = cnr.getCompanySymbol(); + log.debug("Company not found by UUID=\"{}\", try find by {}={}", + uuid, companySymbolType, cnr.getCompanySymbolValue()); + log.trace("Search company by companySymbol {}={}", companySymbolType, cnr.getCompanySymbolValue()); + Collection companySymbolsFromImdg = companySymbolsImdg.getCollectionObjectsByFieldValues( + Map.of( + "companySymbol", companySymbolType, + "companySymbolValue", cnr.getCompanySymbolValue() + ) + ); + if (!companySymbolsFromImdg.isEmpty()) { + companySymbol = companySymbolsFromImdg.iterator().next(); + if (companySymbolsFromImdg.size() > 1) { + log.warn("For {} found > 1 company_symbols, use first (id = {})", companySymbolType, cnr.getCompanySymbolValue()); + } + } + } + } + if (companySymbol == null && companySymbols != null) { + for (CompanySymbolNewRequest cSymbolReq : companySymbols) { + if (IEnumKey.contains(cSymbolReq.getCompanySymbol(), CompanySymbol.INN, CompanySymbol.CIO)) { + String companySymbolType = cSymbolReq.getCompanySymbol(); + log.debug("Company not found by UUID=\"{}\", try find by {}", uuid, companySymbolType); + log.trace("Search company by companySymbol {}={}", companySymbolType, cSymbolReq.getCompanySymbolValue()); + Collection companySymbolsFromImdg = companySymbolsImdg.getCollectionObjectsByFieldValues( + Map.of( + "companySymbol", companySymbolType, + "companySymbolValue", cSymbolReq.getCompanySymbolValue() + ) + ); + if (!companySymbolsFromImdg.isEmpty()) { + companySymbol = companySymbolsFromImdg.iterator().next(); + if (companySymbolsFromImdg.size() > 1) { + log.warn("For {} found > 1 company_symbols, use first (id = {})", companySymbolType, cSymbolReq.getCompanySymbolValue()); + } + break; + } + } + } + } + + if (companySymbol != null) + return companySymbol.getCompanyId(); + else + return null; + } + + public void fillCompanyId(CompanyGatewayRequest req, Long companyId) { + if (req.getCompany() != null) { + req.getCompany().setId(companyId); + } + if (req.getCompanyInfo() != null) { + req.getCompanyInfo().setId(companyId); + } + if (req.getCompanySymbols() == null) req.setCompanySymbols(new ArrayList<>()); + if (req.getClientCodes() == null) req.setClientCodes(new ArrayList<>()); + if (req.getProfileDocuments() == null) req.setProfileDocuments(new ArrayList<>()); + if (req.getContacts() == null) req.setContacts(new ArrayList<>()); + for (CompanySymbolNewRequest cs : req.getCompanySymbols()) { + cs.setCompanyId(companyId); + } + for (ClientCodeNewRequest cc : req.getClientCodes()) { + cc.setCompanyId(companyId); + } + for (ProfileDocumentNewRequest pd : req.getProfileDocuments()) { + pd.setCompanyId(companyId); + } + for (ContactNewRequest c : req.getContacts()) { + c.setCompanyId(companyId); + } + for (ClearingMemberCategoryNewRequest c : req.getCategories()) { + c.setCompanyId(companyId); } } } diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/facade/CompanySymbolServiceFacade.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/facade/CompanySymbolServiceFacade.java new file mode 100644 index 000000000..9d72e5850 --- /dev/null +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/facade/CompanySymbolServiceFacade.java @@ -0,0 +1,158 @@ +package ru.spcex.clearing.company.service.v2.facade; + +import java.time.Instant; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import ru.clearing.classes.statics.data.company.Company; +import ru.clearing.classes.statics.data.company.CompanySymbols; +import ru.spcex.clearing.company.error.CompanyErrors; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.CompanySymbolNewRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.CompanySymbolUpdateRequest; +import ru.spcex.platform.enumeration.CompanySymbol; +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.EnumMessage; +import ru.spcex.platform.utils.error.ClearingBaseException; + +@Service +public class CompanySymbolServiceFacade { + private final Logger log = LoggerFactory.getLogger(getClass()); + private final ImdgProvider imdgProvider; + private final ImdgId idSequence; + private final Imdg companySymbolsTMap; + private final Imdg companyMap; + + + public CompanySymbolServiceFacade(ImdgProvider imdgProvider) { + this.imdgProvider = imdgProvider; + this.idSequence = imdgProvider.getImdgIdGenerator(); + this.companySymbolsTMap = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class); + this.companyMap = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); + } + + public void create(CompanySymbolNewRequest request) { + CompanySymbols newSymbol = new CompanySymbols(); + newSymbol.setId(idSequence.nextId()); + newSymbol.setCompanyId(request.getCompanyId()); + newSymbol.setCompanySymbol(request.getCompanySymbol()); + newSymbol.setCompanySymbolValue(request.getCompanySymbolValue()); + log.debug("Created new companySymbols.id={} for company {}", newSymbol.getId(), request.getCompanyId()); + ImdgTransaction transaction = imdgProvider.newTransaction(); + transaction.beginTransaction(); + boolean txOk = false; + try { + companySymbolsTMap.update(newSymbol); + + Company company = companyMap.getSingleObjectByID(newSymbol.getCompanyId()); + updateCompanyBySymbol(company, newSymbol, false); + companyMap.update(company); + txOk = true; + } finally { + if (txOk) + transaction.commitTransaction(); + else + transaction.rollbackTransaction(); + } + } + + public EnumMessage update(CompanySymbolUpdateRequest request) { + CompanySymbols companySymbols; + ImdgTransaction transaction = imdgProvider.newTransaction(); + transaction.beginTransaction(); + boolean txOk = false; + try { + companySymbols = companySymbolsTMap.getSingleObjectByID(request.getId()); + if (companySymbols == null) { + throw new ClearingBaseException(new EnumMessage(CompanyErrors.CompanyInfoNotFound, request.getId())); + } + if (request.getCompanySymbol() != null && !companySymbols.getCompanySymbol().equalsIgnoreCase(request.getCompanySymbol())) { + log.debug("Change CompanySymbol[{}].CompanySymbol from \"{}\" to \"{}\"", + companySymbols.getId(), companySymbols.getCompanySymbol(), request.getCompanySymbol()); + updateCompanyBySymbol(companySymbols, true); + companySymbols.setCompanySymbol(request.getCompanySymbol()); + } + companySymbols.setCompanySymbolValue(request.getCompanySymbolValue()); + companySymbolsTMap.update(companySymbols); + updateCompanyBySymbol(companySymbols, false); + txOk = true; + } catch (ClearingBaseException e) { + return e.getEnumMsg(); + } finally { + if (txOk) + transaction.commitTransaction(); + else + transaction.rollbackTransaction(); + } + + log.debug("successfully processed, id {}", companySymbols.getId()); + return null; + } + + public EnumMessage delete(CommonDeleteRequest request) { + CompanySymbols companySymbols; + ImdgTransaction transaction = imdgProvider.newTransaction(); + transaction.beginTransaction(); + boolean txOk = false; + try { + companySymbols = companySymbolsTMap.getSingleObjectByID(request.getId()); + if (companySymbols == null) { + throw new ClearingBaseException(new EnumMessage(CompanyErrors.CompanyInfoNotFound, request.getId())); + } + companySymbolsTMap.delete(companySymbols); + updateCompanyBySymbol(companySymbols, true); + txOk = true; + } catch (ClearingBaseException e) { + return e.getEnumMsg(); + } finally { + if (txOk) + transaction.commitTransaction(); + else + transaction.rollbackTransaction(); + } + + log.debug("successfully processed, id {}", companySymbols.getId()); + return null; + } + + public void updateCompanyBySymbol(CompanySymbols companySymbol, boolean shouldBeDeleted) throws ClearingBaseException { + if (companySymbol.getCompanyId() == null) { + throw new IllegalArgumentException("Required companySymbol.companyId"); + } + if (CompanySymbol.TRDC.equalsByKey(companySymbol.getCompanySymbol()) + || CompanySymbol.CLRC.equalsByKey(companySymbol.getCompanySymbol()) + || CompanySymbol.RGRC.equalsByKey(companySymbol.getCompanySymbol())) { + + Company company = companyMap.getSingleObjectByID(companySymbol.getCompanyId()); + if (company == null) { + throw new ClearingBaseException(new EnumMessage(CompanyErrors.CompanyNotFound, companySymbol.getCompanyId())); + } + updateCompanyBySymbol(company, companySymbol, shouldBeDeleted); + company.setUpdated(Instant.now()); + companyMap.update(company); + log.debug("Company {} updated by change CompanySymbols {} ({})", + company.getId(), companySymbol.getId(), companySymbol.getCompanySymbol()); + } else { + log.trace("No need update company {} by changed companySymbols {}", + companySymbol.getCompanyId(), companySymbol.getCompanySymbol()); + } + } + + void updateCompanyBySymbol(Company company, CompanySymbols companySymbol, boolean shouldBeDeleted) { + assert company.getId().equals(companySymbol.getCompanyId()); + String setUpValue = shouldBeDeleted ? "" : companySymbol.getCompanySymbolValue(); + if (CompanySymbol.TRDC.equalsByKey(companySymbol.getCompanySymbol())) { + company.setTradingCode(setUpValue); + } + if (CompanySymbol.CLRC.equalsByKey(companySymbol.getCompanySymbol())) { + company.setClearingCode(setUpValue); + } + if (CompanySymbol.RGRC.equalsByKey(companySymbol.getCompanySymbol())) { + company.setRegistrationCode(setUpValue); + } + } +} diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/facade/ContactServiceFacade.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/facade/ContactServiceFacade.java new file mode 100644 index 000000000..1947d4249 --- /dev/null +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/facade/ContactServiceFacade.java @@ -0,0 +1,47 @@ +package ru.spcex.clearing.company.service.v2.facade; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import ru.clearing.classes.statics.data.profile.Contact; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.ContactNewRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.ContactUpdateRequest; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; + +@Service +public class ContactServiceFacade { + private final Logger log = LoggerFactory.getLogger(getClass()); + private final Imdg contactMap; + + public ContactServiceFacade(ImdgProvider imdgProvider) { + this.contactMap = imdgProvider.getImdg(IMDGDistributedNames.Map_Contact, Contact.class); + } + + public void create(ContactNewRequest request) { + Contact contact = new Contact(); + contact.setCompanyId(request.getCompanyId()); + contact.setContactType(request.getContactType()); + contact.setContactValue(request.getContactValue()); + Long id = contactMap.insert(contact); + + log.debug("successfully processed, id {}", id); + } + + public void update(ContactUpdateRequest request) { + Contact contact = contactMap.getSingleObjectByID(request.getId()); + contact.setContactValue(request.getContactValue()); + + contactMap.update(contact); + log.debug("successfully processed, id {}", contact.getId()); + } + + public void delete(CommonDeleteRequest request) { + Contact contact = contactMap.getSingleObjectByID(request.getId()); + + contactMap.delete(contact); + log.debug("successfully deleted, id {}", contact.getId()); + } +} diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/facade/MultiCompanyServiceFacade.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/facade/MultiCompanyServiceFacade.java deleted file mode 100644 index 35d1c786d..000000000 --- a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/facade/MultiCompanyServiceFacade.java +++ /dev/null @@ -1,426 +0,0 @@ -package ru.spcex.clearing.company.service.v2.facade; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; -import java.util.Optional; -import java.util.function.BiFunction; -import java.util.stream.Collectors; -import java.util.stream.Stream; -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Service; -import ru.clearing.classes.statics.data.company.ClearingMemberCategory; -import ru.clearing.classes.statics.data.company.CompanySymbols; -import ru.clearing.classes.statics.data.profile.Contact; -import ru.clearing.classes.statics.data.profile.ProfileDocument; -import ru.spcex.clearing.company.service.ClearingMemberCategoryService; -import ru.spcex.clearing.company.service.CompanyInfoService; -import ru.spcex.clearing.company.service.CompanySymbolService; -import ru.spcex.clearing.company.service.ContactService; -import ru.spcex.clearing.company.service.ProfileDocumentService; -import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.platform.messaging.domain.ActionType; -import ru.spcex.clearing.platform.messaging.domain.BaseRequest; -import ru.spcex.clearing.platform.messaging.domain.cud.account.ClientCodeNewRequest; -import ru.spcex.clearing.platform.messaging.domain.cud.company.ClearingMemberCategoryNewRequest; -import ru.spcex.clearing.platform.messaging.domain.cud.company.ClearingMemberCategoryUpdateRequest; -import ru.spcex.clearing.platform.messaging.domain.cud.company.CompanyGatewayRequest; -import ru.spcex.clearing.platform.messaging.domain.cud.company.CompanyNewRequest; -import ru.spcex.clearing.platform.messaging.domain.cud.company.CompanySymbolNewRequest; -import ru.spcex.clearing.platform.messaging.domain.cud.company.CompanySymbolUpdateRequest; -import ru.spcex.clearing.platform.messaging.domain.cud.company.ContactNewRequest; -import ru.spcex.clearing.platform.messaging.domain.cud.company.ContactUpdateRequest; -import ru.spcex.clearing.platform.messaging.domain.cud.company.ProfileDocumentNewRequest; -import ru.spcex.clearing.platform.messaging.domain.cud.company.ProfileDocumentUpdateRequest; -import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate; -import ru.spcex.platform.enumeration.CompanySymbol; -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.IEnumKey; -import ru.spcex.platform.utils.enumeration.IMessageResolver; -import ru.spcex.platform.utils.error.ValidationException; -import ru.spcex.platform.utils.log.ExceptionUtils; -import ru.spcex.platform.utils.text.TextUtil; - -@Service -public class MultiCompanyServiceFacade { - private final Logger log = LoggerFactory.getLogger(getClass()); - private final CompanyServiceFacade companyServiceFacade; - private final CompanyInfoService companyInfoService; - private final ProfileDocumentService profileDocumentService; - private final CompanySymbolService companySymbolService; - private final ContactService contactService; - private final ClearingMemberCategoryService clearingMemberCategoryService; - private final IMessageResolver messageResolver; - - private final ImdgProvider imdgProvider; - final Imdg companySymbolsImdg; - final Imdg profileDocumentImdg; - final Imdg contactImdg; - final Imdg clearingMemberCategoryImdg; - - public MultiCompanyServiceFacade(ImdgProvider imdgProvider, - CompanyServiceFacade companyServiceFacade, - CompanyInfoService companyInfoService, - ProfileDocumentService profileDocumentService, - CompanySymbolService companySymbolService, - ContactService contactService, - ClearingMemberCategoryService clearingMemberCategoryService, - IMessageResolver messageResolver) { - this.imdgProvider = imdgProvider; - this.companyServiceFacade = companyServiceFacade; - this.companyInfoService = companyInfoService; - this.profileDocumentService = profileDocumentService; - this.companySymbolService = companySymbolService; - this.contactService = contactService; - this.clearingMemberCategoryService = clearingMemberCategoryService; - this.messageResolver = messageResolver; - - companySymbolsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class); - profileDocumentImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ProfileDocument, ProfileDocument.class); - contactImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Contact, Contact.class); - clearingMemberCategoryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class); - } - - public synchronized boolean createUpdateMultiCompany(BaseRequest baseRequest) { - ImdgTransaction transaction = imdgProvider.newTransaction(); - transaction.beginTransaction(); - - CompanyGatewayRequest req = baseRequest.getRequestPayload(); - Long companyId = getCompanyIdForCompanySymbols(req.getUuid(), req.getCompany(), req.getCompanySymbols()); - - try { - req.setCompanySymbols( - Stream.concat(req.getCompanySymbols().stream(), additionalSymbols(req.getCompany())).collect(Collectors.toList()) - ); - - log.debug("For request {} (uuid {}) company {}.", baseRequest.getId(), req.getUuid(), companyId == null ? "not found" : ("found, id=" + companyId)); - - if (companyId == null) { - companyId = companyServiceFacade.create(req.getCompany()); - log.debug("The companyId={}", companyId); - fillCompanyId(req, companyId); - } else { - fillCompanyId(req, companyId); - companyServiceFacade.update(req.getCompany()); - } - - RequestInfoUpdate replyI = new RequestInfoUpdate(); - if (req.getCompanyInfo() != null) { - log.trace("For company {} do update CompanyInfo", companyId); - replyI = companyInfoService.companyInfoUpdate(wrapRequest(baseRequest, req.getCompanyInfo(), null)); - validateReply(companyId, "CompanyInfo", replyI); - } - replyI = createUpdateProfileDocument(baseRequest, replyI, companyId); - replyI = createUpdateCompanySymbol(baseRequest, replyI, companyId); - replyI = createUpdateContract(baseRequest, replyI, companyId); - createUpdateClearingMemberCategory(baseRequest, replyI, companyId); - - log.debug("Create or update sendNewClientCode for company {}", companyId); - return true; - } catch (ValidationException vex) { - log.error("For gateway request.id={}, companyId={} error validate: {}", baseRequest.getId(), companyId, messageResolver.resolve(vex.getEnumMsg())); - log.trace("For companyId={} error validation: {}", companyId, ExceptionUtils.getStackTrace(vex)); - } - return false; - } - - private RequestInfoUpdate createUpdateProfileDocument(BaseRequest baseRequest, RequestInfoUpdate requestInfoUpdate, Long companyId) { - for (ProfileDocumentNewRequest partRequest : baseRequest.getRequestPayload().getProfileDocuments()) { - ProfileDocument existDocument = findCompanyDocument(partRequest); - if (existDocument == null) { - log.trace("For company[{}] do new profileDocument", companyId); - requestInfoUpdate = profileDocumentService.profileDocumentNew(wrapRequest(baseRequest, partRequest, ActionType.NEW)); - validateReply(companyId, "profileDocumentNew", requestInfoUpdate); - } else { - log.trace("For company[{}] do update profileDocument[{}]", companyId, existDocument.getId()); - ProfileDocumentUpdateRequest partUpdateRequest = createUpdateRequest(existDocument, partRequest); - requestInfoUpdate = profileDocumentService.profileDocumentUpdate(wrapRequest(baseRequest, partUpdateRequest, ActionType.UPDATE)); - validateReply(companyId, "profileDocumentUpdate", requestInfoUpdate); - } - } - - return requestInfoUpdate; - } - - private RequestInfoUpdate createUpdateCompanySymbol(BaseRequest baseRequest, RequestInfoUpdate requestInfoUpdate, Long companyId) throws ValidationException { - for (CompanySymbolNewRequest partRequest : baseRequest.getRequestPayload().getCompanySymbols()) { - CompanySymbols existSymbol = findCompanySymbols(partRequest); - if (existSymbol == null) { - log.trace("For company[{}] do new companySymbol", companyId); - Long id = companySymbolService.create(partRequest); - } else { - log.trace("For company[{}] do update companySymbol[{}]", companyId, existSymbol.getId()); - CompanySymbolUpdateRequest partUpdateRequest = createUpdateRequest(existSymbol, partRequest); - requestInfoUpdate = companySymbolService.companySymbolUpdate(wrapRequest(baseRequest, partUpdateRequest, ActionType.UPDATE)); - validateReply(companyId, "companySymbolUpdate", requestInfoUpdate); - } - } - - return requestInfoUpdate; - } - - private RequestInfoUpdate createUpdateContract(BaseRequest baseRequest, RequestInfoUpdate requestInfoUpdate, Long companyId) { - for (ContactNewRequest partRequest : baseRequest.getRequestPayload().getContacts()) { - Contact existContact = findContact(partRequest); - if (existContact == null) { - log.trace("For company[{}] do new contact", companyId); - requestInfoUpdate = contactService.contactNew(wrapRequest(baseRequest, partRequest, ActionType.NEW)); - validateReply(companyId, "contactNew", requestInfoUpdate); - } else { - log.trace("For company[{}] do update contact[{}]", companyId, existContact.getId()); - ContactUpdateRequest partUpdateRequest = createUpdateRequest(existContact, partRequest); - requestInfoUpdate = contactService.contactUpdate(wrapRequest(baseRequest, partUpdateRequest, ActionType.UPDATE)); - validateReply(companyId, "contactUpdate", requestInfoUpdate); - } - } - - return requestInfoUpdate; - } - - private RequestInfoUpdate createUpdateClearingMemberCategory(BaseRequest baseRequest, RequestInfoUpdate requestInfoUpdate, Long companyId) { - for (ClearingMemberCategoryNewRequest partRequest : baseRequest.getRequestPayload().getCategories()) { - ClearingMemberCategory existCategory = findCategory(partRequest); - if (existCategory == null) { - log.trace("For company[{}] do new category", companyId); - requestInfoUpdate = clearingMemberCategoryService.clearingMemberCategoryNew(wrapRequest(baseRequest, partRequest, ActionType.NEW)); - validateReply(companyId, "contactNew", requestInfoUpdate); - } else { - log.trace("For company[{}] do update category[{}]", companyId, existCategory.getId()); - ClearingMemberCategoryUpdateRequest partUpdateRequest = createUpdateRequest(existCategory, partRequest); - requestInfoUpdate = clearingMemberCategoryService.clearingMemberCategoryUpdate(wrapRequest(baseRequest, partUpdateRequest, ActionType.UPDATE)); - validateReply(companyId, "categoryUpdate", requestInfoUpdate); - } - } - - return requestInfoUpdate; - } - - private Stream additionalSymbols(CompanyNewRequest companyNewReq) { - BiFunction> symbolCreation = (companySymbol, companySymbolValue) -> { - if (companySymbolValue == null || TextUtil.isEmpty(companySymbolValue)) { - return Optional.empty(); - } - CompanySymbolNewRequest companySymbolNewRequest = new CompanySymbolNewRequest(); - companySymbolNewRequest.setCompanySymbol(companySymbol); - companySymbolNewRequest.setCompanySymbolValue(companySymbolValue); - return Optional.of(companySymbolNewRequest); - }; - return Stream.of(symbolCreation.apply(CompanySymbol.TRDC.getKey(), companyNewReq.getTradingCode()), - symbolCreation.apply(CompanySymbol.CLRC.getKey(), companyNewReq.getClearingCode()), - symbolCreation.apply(CompanySymbol.INTC.getKey(), companyNewReq.getInitiatorCode()), - symbolCreation.apply(CompanySymbol.RGRC.getKey(), companyNewReq.getRegistrationCode())) - .filter(Optional::isPresent) - .map(Optional::get); - } - - private void validateReply(Long companyId, String process, RequestInfoUpdate replyI) { - if (replyI != null && replyI.getMessage() != null) { - log.warn("Error process {} for companyId={}: {}", process, companyId, replyI.getMessage()); - } - } - - public ProfileDocument findCompanyDocument(ProfileDocumentNewRequest partRequest) { - Map> query = new HashMap<>(); - query.put("companyId", partRequest.getCompanyId()); - query.put("documentType", partRequest.getDocumentType()); - query.put("issueDate", partRequest.getIssueDate()); // может быть null - Collection allDoc = profileDocumentImdg.getCollectionObjectsByFieldValues(query); - if (allDoc.isEmpty()) - return null; - if (allDoc.size() > 1) - log.warn("Fount {} ProfileDocument by: {}", allDoc.size(), query); - return allDoc.iterator().next(); - } - - public CompanySymbols findCompanySymbols(CompanySymbolNewRequest partRequest) { - Map> query = new HashMap<>(); - query.put("companyId", partRequest.getCompanyId()); - query.put("companySymbol", partRequest.getCompanySymbol()); - Collection allCS = companySymbolsImdg.getCollectionObjectsByFieldValues(query); - if (allCS.isEmpty()) - return null; - if (allCS.size() > 1) - log.warn("Fount {} CompanySymbols by: {}", allCS.size(), query); - return allCS.iterator().next(); - } - - public Contact findContact(ContactNewRequest partRequest) { - Map> query = new HashMap<>(); - query.put("companyId", partRequest.getCompanyId()); - query.put("contactType", partRequest.getContactType()); - Collection allCS = contactImdg.getCollectionObjectsByFieldValues(query); - if (allCS.isEmpty()) - return null; - if (allCS.size() > 1) - log.warn("Fount {} Contact by: {}", allCS.size(), query); - return allCS.iterator().next(); - } - - private ClearingMemberCategory findCategory(ClearingMemberCategoryNewRequest partRequest) { - Map> query = new HashMap<>(); - query.put("companyId", partRequest.getCompanyId()); - query.put("clearingMemberCategory", partRequest.getClearingMemberCategory()); - Collection allCS = clearingMemberCategoryImdg.getCollectionObjectsByFieldValues(query); - if (allCS.isEmpty()) - return null; - if (allCS.size() > 1) - log.warn("Fount {} ClearingMemberCategory by: {}", allCS.size(), query); - return allCS.iterator().next(); - } - - private ProfileDocumentUpdateRequest createUpdateRequest(ProfileDocument existDocument, ProfileDocumentNewRequest partRequest) { - ProfileDocumentUpdateRequest r = new ProfileDocumentUpdateRequest(); - r.setId(existDocument.getId()); - r.setCompanyId(partRequest.getCompanyId()); - r.setDocumentType(partRequest.getDocumentType()); - r.setIssueDate(partRequest.getIssueDate()); - r.setIssuePlace(partRequest.getIssuePlace()); - r.setIssuer(partRequest.getIssuer()); - r.setIssuerCode(partRequest.getIssuerCode()); - r.setName(partRequest.getName()); - r.setNumber(partRequest.getNumber()); - r.setPlace(partRequest.getPlace()); - r.setValidFromDate(partRequest.getValidFromDate()); - r.setValidToDate(partRequest.getValidToDate()); - r.setLink(partRequest.getLink()); - return r; - } - - private CompanySymbolUpdateRequest createUpdateRequest(CompanySymbols existSymbol, CompanySymbolNewRequest partRequest) { - CompanySymbolUpdateRequest r = new CompanySymbolUpdateRequest(); - r.setId(existSymbol.getId()); - r.setCompanyId(partRequest.getCompanyId()); - r.setCompanySymbol(partRequest.getCompanySymbol()); - r.setCompanySymbolValue(partRequest.getCompanySymbolValue()); - return r; - } - - private ContactUpdateRequest createUpdateRequest(Contact existContact, ContactNewRequest partRequest) { - ContactUpdateRequest r = new ContactUpdateRequest(); - r.setId(existContact.getId()); - r.setContactType(partRequest.getContactType()); - r.setContactValue(partRequest.getContactValue()); - return r; - } - - private ClearingMemberCategoryUpdateRequest createUpdateRequest(ClearingMemberCategory existCategory, ClearingMemberCategoryNewRequest partRequest) { - ClearingMemberCategoryUpdateRequest r = new ClearingMemberCategoryUpdateRequest(); - r.setId(existCategory.getId()); - r.setClearingMemberCategory(partRequest.getClearingMemberCategory()); - return r; - } - - public Long getCompanyIdForCompanySymbols(String uuid, CompanyNewRequest cnr, Collection companySymbols) { - CompanySymbols companySymbol = null; - if (StringUtils.isNotEmpty(uuid)) { - log.trace("Search company by companySymbol uuid={}", uuid); - Collection companySymbolsFromImdg = companySymbolsImdg.getCollectionObjectsByFieldValues( - Map.of( - "companySymbol", CompanySymbol.UUID.getKey(), - "companySymbolValue", uuid - ) - ); - if (!companySymbolsFromImdg.isEmpty()) { - companySymbol = companySymbolsFromImdg.iterator().next(); - if (companySymbolsFromImdg.size() > 1) { - log.warn("For UUID found > 1 company_symbols, use first (id = {})", companySymbol.getId()); - } - } - } - if (companySymbol == null && StringUtils.isNotEmpty(cnr.getCompanySymbolValue()) - && IEnumKey.contains(cnr.getCompanySymbol(), CompanySymbol.UUID, CompanySymbol.INN, CompanySymbol.CIO)) { // вероятно там будет только UUID - { - String companySymbolType = cnr.getCompanySymbol(); - log.debug("Company not found by UUID=\"{}\", try find by {}={}", - uuid, companySymbolType, cnr.getCompanySymbolValue()); - log.trace("Search company by companySymbol {}={}", companySymbolType, cnr.getCompanySymbolValue()); - Collection companySymbolsFromImdg = companySymbolsImdg.getCollectionObjectsByFieldValues( - Map.of( - "companySymbol", companySymbolType, - "companySymbolValue", cnr.getCompanySymbolValue() - ) - ); - if (!companySymbolsFromImdg.isEmpty()) { - companySymbol = companySymbolsFromImdg.iterator().next(); - if (companySymbolsFromImdg.size() > 1) { - log.warn("For {} found > 1 company_symbols, use first (id = {})", companySymbolType, cnr.getCompanySymbolValue()); - } - } - } - } - if (companySymbol == null && companySymbols != null) { - for (CompanySymbolNewRequest cSymbolReq : companySymbols) { - if (IEnumKey.contains(cSymbolReq.getCompanySymbol(), CompanySymbol.INN, CompanySymbol.CIO)) { - String companySymbolType = cSymbolReq.getCompanySymbol(); - log.debug("Company not found by UUID=\"{}\", try find by {}", uuid, companySymbolType); - log.trace("Search company by companySymbol {}={}", companySymbolType, cSymbolReq.getCompanySymbolValue()); - Collection companySymbolsFromImdg = companySymbolsImdg.getCollectionObjectsByFieldValues( - Map.of( - "companySymbol", companySymbolType, - "companySymbolValue", cSymbolReq.getCompanySymbolValue() - ) - ); - if (!companySymbolsFromImdg.isEmpty()) { - companySymbol = companySymbolsFromImdg.iterator().next(); - if (companySymbolsFromImdg.size() > 1) { - log.warn("For {} found > 1 company_symbols, use first (id = {})", companySymbolType, cSymbolReq.getCompanySymbolValue()); - } - break; - } - } - } - } - - if (companySymbol != null) - return companySymbol.getCompanyId(); - else - return null; - } - - private BaseRequest wrapRequest(BaseRequest template, T payload, ActionType action) { - BaseRequest r = new BaseRequest<>(); - r.setId(template.getId()); - if (action == null) { - r.setActionType(template.getActionType()); - } else { - r.setActionType(action); - } - r.setUserId(template.getUserId()); - r.setCorrelationId(template.getCorrelationId()); - r.setRequestPayload(payload); - return r; - } - - public void fillCompanyId(CompanyGatewayRequest req, Long companyId) { - if (req.getCompany() != null) { - req.getCompany().setId(companyId); - } - if (req.getCompanyInfo() != null) { - req.getCompanyInfo().setId(companyId); - } - if (req.getCompanySymbols() == null) req.setCompanySymbols(new ArrayList<>()); - if (req.getClientCodes() == null) req.setClientCodes(new ArrayList<>()); - if (req.getProfileDocuments() == null) req.setProfileDocuments(new ArrayList<>()); - if (req.getContacts() == null) req.setContacts(new ArrayList<>()); - for (CompanySymbolNewRequest cs : req.getCompanySymbols()) { - cs.setCompanyId(companyId); - } - for (ClientCodeNewRequest cc : req.getClientCodes()) { - cc.setCompanyId(companyId); - } - for (ProfileDocumentNewRequest pd : req.getProfileDocuments()) { - pd.setCompanyId(companyId); - } - for (ContactNewRequest c : req.getContacts()) { - c.setCompanyId(companyId); - } - for (ClearingMemberCategoryNewRequest c : req.getCategories()) { - c.setCompanyId(companyId); - } - } -} diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/facade/ProfileDocumentServiceFacade.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/facade/ProfileDocumentServiceFacade.java new file mode 100644 index 000000000..22843a15b --- /dev/null +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/facade/ProfileDocumentServiceFacade.java @@ -0,0 +1,164 @@ +package ru.spcex.clearing.company.service.v2.facade; + +import java.util.Objects; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import ru.clearing.classes.statics.data.company.Company; +import ru.clearing.classes.statics.data.profile.ProfileDocument; +import ru.spcex.clearing.company.error.CompanyErrors; +import ru.spcex.clearing.company.service.AccountNotificationHelper; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.ProfileDocumentNewRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.ProfileDocumentUpdateRequest; +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; + +@Service +public class ProfileDocumentServiceFacade { + private final Logger log = LoggerFactory.getLogger(getClass()); + private final ImdgProvider imdgProvider; + private final Imdg profileDocumentMap; + private final Imdg companyMap; + private final AccountNotificationHelper accountNotificationHelper; + private final RelationServiceFacade relationServiceFacade; + + public ProfileDocumentServiceFacade(ImdgProvider imdgProvider, + AccountNotificationHelper accountNotificationHelper, + RelationServiceFacade relationServiceFacade) { + this.imdgProvider = imdgProvider; + this.profileDocumentMap = imdgProvider.getImdg(IMDGDistributedNames.Map_ProfileDocument, ProfileDocument.class); + this.companyMap = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); + this.accountNotificationHelper = accountNotificationHelper; + this.relationServiceFacade = relationServiceFacade; + } + + public void create(ProfileDocumentNewRequest request) { + ProfileDocument profileDocument = new ProfileDocument(); + profileDocument.setCompanyId(request.getCompanyId()); + profileDocument.setDocumentType(request.getDocumentType()); + profileDocument.setIssueDate(request.getIssueDate()); + profileDocument.setIssuePlace(request.getIssuePlace()); + profileDocument.setIssuer(request.getIssuer()); + profileDocument.setIssuerCode(request.getIssuerCode()); + profileDocument.setName(request.getName()); + profileDocument.setNumber(request.getNumber()); + profileDocument.setPlace(request.getPlace()); + profileDocument.setValidFromDate(request.getValidFromDate()); + profileDocument.setValidToDate(request.getValidToDate()); + profileDocument.setLink(request.getLink()); + profileDocumentMap.insert(profileDocument); + + if (DocumentTypes.xcnt.getKey().equalsIgnoreCase(profileDocument.getDocumentType())) { + processXCNT(profileDocument); + } + } + + public CompanyErrors delete(CommonDeleteRequest request) { + ProfileDocument profileDocument = profileDocumentMap.getSingleObjectByID(request.getId()); + Company existCompany = profileDocument.getCompanyId() == null ? null : companyMap.getSingleObjectByID(profileDocument.getCompanyId()); + if (existCompany == null) { + log.warn("Company {} not found by profileDocument {}", profileDocument.getCompanyId(), profileDocument.getId()); + return CompanyErrors.CompanyNotFound; + } + + ImdgTransaction transaction = imdgProvider.newTransaction(); + transaction.beginTransaction(); + boolean txOk = false; + try { + relationServiceFacade.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; + } + + public CompanyErrors update(ProfileDocumentUpdateRequest request) { + ProfileDocument profileDocument = profileDocumentMap.getSingleObjectByID(request.getId()); + + String prevDocType = profileDocument.getDocumentType(); + if (request.getCompanyId() != null && !request.getCompanyId().equals(profileDocument.getCompanyId())) { + log.warn("profileDocumentUpdateRequest[{}] CompanyId {} not match", request.getId(), request.getCompanyId()); + return CompanyErrors.WrongFieldValue; + } + + if (request.getDocumentType() != null) + profileDocument.setDocumentType(request.getDocumentType()); + + if (request.getIssueDate() != null) + profileDocument.setIssueDate(request.getIssueDate()); + + if (request.getIssuePlace() != null) + profileDocument.setIssuePlace(request.getIssuePlace()); + + if (request.getIssuer() != null) + profileDocument.setIssuer(request.getIssuer()); + + if (request.getIssuerCode() != null) + profileDocument.setIssuerCode(request.getIssuerCode()); + + if (request.getName() != null) + profileDocument.setName(request.getName()); + + if (request.getNumber() != null) + profileDocument.setNumber(request.getNumber()); + + if (request.getPlace() != null) + profileDocument.setPlace(request.getPlace()); + + if (request.getValidFromDate() != null) + profileDocument.setValidFromDate(request.getValidFromDate()); + + if (request.getValidToDate() != null) + profileDocument.setValidToDate(request.getValidToDate()); + + if (request.getLink() != null) + profileDocument.setLink(request.getLink()); + + profileDocumentMap.insert(profileDocument); + + log.trace("successfully processed, id {}", profileDocument.getId()); + + if (!Objects.equals(prevDocType, profileDocument.getDocumentType()) && + DocumentTypes.xcnt.getKey().equalsIgnoreCase(profileDocument.getDocumentType())) { + processXCNT(profileDocument); + } + return null; + } + + protected void processXCNT(ProfileDocument profileDocument) { + Company existCompany = profileDocument.getCompanyId() == null ? null : companyMap.getSingleObjectByID(profileDocument.getCompanyId()); + if (existCompany == null) { + log.warn("Company {} not found by profileDocument {}", profileDocument.getCompanyId(), profileDocument.getId()); + return; + } + if (!WorkflowStatus.Active.equalsByKey(existCompany.getWorkflowStatus())) { + log.warn("Current workflowStatus {} for company {}. Do not termination account.", + existCompany.getWorkflowStatus(), existCompany.getId()); + } + + CompanyErrors hasError = accountNotificationHelper.accountTerminationByDocumentNotification(profileDocument.getCompanyId(), profileDocument.getId()); + if (hasError != null) { + log.error("Error at termination account of company {} by document {}: {}", + profileDocument.getCompanyId(), profileDocument.getId(), hasError + "(" + hasError.getId() + ")"); + } + log.debug("Now wait notification from account-service."); + /* processXCNT + Дальнейшая обработка документа о расторжении, то есть обновление статусов в company и relation, возможна только после ответа об успешном обновлении статуса в account. + ACCOUNT_TERMINATION -> ACCOUNT_TERMINATION_STEP2 + 1.2. Обновить статус в бизнес-объекте company [profileDocument.companyId=company.id] согласно описанию с тегом "При расторжении". + 1.3. Обновить статус в бизнес-объекте relation [profileDocument.companyId=relation.consumerId] согласно описанию с тегом "При расторжении". + */ + } +} diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/facade/RelationServiceFacade.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/facade/RelationServiceFacade.java new file mode 100644 index 000000000..3b8b73a97 --- /dev/null +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/facade/RelationServiceFacade.java @@ -0,0 +1,615 @@ +package ru.spcex.clearing.company.service.v2.facade; + +import static ru.spcex.platform.enumeration.Service.FOND; +import static ru.spcex.platform.enumeration.Service.MKR; +import static ru.spcex.platform.enumeration.ServiceStatus.Closed; +import static ru.spcex.platform.utils.enumeration.IEnumKey.getEnumByKey; + +import java.time.Instant; +import java.util.Collection; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import java.util.stream.Collectors; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +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; +import ru.spcex.clearing.company.service.AccountNotificationHelper; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.RelationNewRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.RelationUpdateRequest; +import ru.spcex.platform.enumeration.ClearingCategory; +import ru.spcex.platform.enumeration.ServiceProduct; +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.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; + +@Service +public class RelationServiceFacade { + private static final Long SPVB_ID = 1L; // СПВБ + + private final Logger log = LoggerFactory.getLogger(getClass()); + private final ImdgProvider imdgProvider; + private final ImdgId idSequence; + private final Imdg relationMap; + private final Imdg companyMap; + private final Imdg clearingMemberCategoryImdg; + private final AccountNotificationHelper accountNotification; + + public RelationServiceFacade(ImdgProvider imdgProvider, + AccountNotificationHelper accountNotification) { + this.imdgProvider = imdgProvider; + this.idSequence = imdgProvider.getImdgIdGenerator(); + relationMap = imdgProvider.getImdg(IMDGDistributedNames.Map_Relation, Relation.class); + companyMap = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); + clearingMemberCategoryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class); + + this.accountNotification = accountNotification; + } + + public CompanyErrors create(RelationNewRequest request) { + String serviceStatus = request.getServiceStatus(); + if (serviceStatus == null || serviceStatus.isEmpty()) { + Company company = companyMap.getSingleObjectByID(request.getCompanyId()); + if (company != null) { + request.setServiceStatus(company.getWorkflowStatus()); + } + } + + Company company = companyMap.getSingleObjectByID(request.getCompanyId()); + + Relation existRelation = searchRelation(request.getClearingMemberCategory(), request.getCompanyId()); + boolean isClosedRelation = existRelation != null && IEnumKey.contains + (existRelation.getServiceStatus(), Closed, ServiceStatus.Blocked, ServiceStatus.Suspended); + if (existRelation != null && !isClosedRelation) { + if (MKR.equalsByKey(existRelation.getService())) { + return CompanyErrors.ClearingMemberCategoryOnMKRAlreadyExist; + } else if (ru.spcex.platform.enumeration.Service.FOND.equalsByKey(existRelation.getService())) { + return CompanyErrors.ClearingMemberCategoryOnFONDAlreadyExist; + } else { + log.warn("Unknown relation[{}] service={}", existRelation.getId(), existRelation.getService()); + return CompanyErrors.GeneralError; + } + } + + Relation relation; + if (existRelation == null) { + relation = new Relation(); + relation.setId(idSequence.nextId()); + relation.setCreated(Instant.now()); + relation.setUpdated(relation.getCreated()); + log.debug("New relation.id={}", relation.getId()); + } else { + log.info("Found exist relation id={}, it will be update.", existRelation.getId()); + relation = existRelation; + relation.setUpdated(Instant.now()); + } + + relation.setConsumerId(request.getCompanyId()); + relation.setSupplierId(SPVB_ID); // 1 СПВБ + if (request.getServiceStatus() != null) { + relation.setServiceStatus(request.getServiceStatus()); + } else { + if (existRelation != null) { + relation.setServiceStatus(ServiceStatus.Reopened.getKey()); + log.debug("Request has no status. Set status by resume: {}", relation.getServiceStatus()); + } else { + String toStatus = WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus()) ? ServiceStatus.Active.getKey() : + WorkflowStatus.Blocked.equalsByKey(company.getWorkflowStatus()) ? Closed.getKey() : + null; + log.debug("Request has no status. Set status by company[{}].status={}. Relation[{}].serviceSStatus={}", + company.getId(), company.getWorkflowStatus(), relation.getId(), toStatus); + relation.setServiceStatus(toStatus); + } + } + + String service = serviceForCMC(request.getClearingMemberCategory()); + relation.setService(service); // MKR + relation.setServiceProduct(ServiceProduct.ZERO.getKey()); + relation.setComment(request.getComment()); + + relationMap.insert(relation); + + log.debug("New Relation[{}] created.", relation.getId()); + return null; + } + + public void update(RelationUpdateRequest request) { + Relation relation = relationMap.getSingleObjectByID(request.getId()); + + final Long companyId = relation.getConsumerId(); + Collection companyCMC = selectCompanyClearingMemberCategory(companyId); + boolean companyCMCisBIV = companyCMC.contains(ClearingCategory.B.getKey()) || companyCMC.contains(ClearingCategory.I.getKey()) + || companyCMC.contains(ClearingCategory.V.getKey()); + boolean companyCMCisCF = companyCMC.contains(ClearingCategory.C.getKey()) || companyCMC.contains(ClearingCategory.F.getKey()); + String firstCMC = companyCMC.isEmpty() ? null : companyCMC.iterator().next(); + + ImdgTransaction tx = imdgProvider.newTransaction(); + boolean txOk = false; + try { + tx.beginTransaction(); + //relationUpdate0(tx, req, relation); // первоначальное ТЗ. + + boolean needAddNewRelation = false; // call relationNew0(req, companyId, firstCMC); + if (ru.spcex.platform.enumeration.Service.MKR.equalsByKey(relation.getService())) { // relation B or I or V + if (companyCMCisCF) { + // 4.1. Если clearingMemberCategory = B or I or V и для этой компании установлены clearingMemberCategory = C or F: + Relation relation1 = selectRelation(companyId, MKR.getKey(), false); + if (relation1 != null) { + relationUpdate0WithResume(request, relation1); + } else { + needAddNewRelation = true; + } + Relation relation2 = selectRelation(companyId, MKR.getKey(), true); + if (relation2 != null) { + // nothing + } else { + needAddNewRelation = true; + } + } + if (!companyCMCisCF) { + // 4.3. Если clearingMemberCategory = B or I or V и для этой компании не установлены clearingMemberCategory = C or F: + Relation relation1 = selectRelation(companyId, MKR.getKey(), false); + if (relation1 != null) { + relationUpdate0WithResume(request, relation1); + } else { + needAddNewRelation = true; + } + Relation relation2 = selectRelation(companyId, MKR.getKey(), true); + if (relation2 != null) { + // nothing + } else { + needAddNewRelation = true; + } + Relation relation3 = selectRelation(companyId, FOND.getKey(), null); + if (relation3 != null) { + // nothing + relationClose0(relation3); + } + } + } else if (FOND.equalsByKey(relation.getService())) { // relation C or F + if (companyCMCisBIV) { + // 4.2. Если clearingMemberCategory = C or F и для этой компании установлены clearingMemberCategory = B or I or V: + Relation relation1 = selectRelation(companyId, FOND.getKey(), false); + if (relation1 != null) { + relationUpdate0WithResume(request, relation1); + } else { + needAddNewRelation = true; + } + Relation relation2 = selectRelation(companyId, FOND.getKey(), true); + if (relation2 != null) { + // nothing + } else { + needAddNewRelation = true; + } + } + if (!companyCMCisBIV) { + // 4.4. Если clearingMemberCategory = C or F и для этой компании установлены не clearingMemberCategory = B or I or V: + Relation relation1 = selectRelation(companyId, FOND.getKey(), false); + if (relation1 != null) { + relationUpdate0WithResume(request, relation1); + } else { + needAddNewRelation = true; + } + Relation relation2 = selectRelation(companyId, FOND.getKey(), true); + if (relation2 != null) { + // nothing + } else { + needAddNewRelation = true; + } + Relation relation3 = selectRelation(companyId, MKR.getKey(), null); + if (relation3 != null) { + relationClose0(relation3); + } + } + } else { + // unknown type + relationUpdate0(request, relation); + } + + if (needAddNewRelation) { + relationNew0(request, companyId, firstCMC); + } + + txOk = true; + } finally { + if (txOk) { + tx.commitTransaction(); + } else { + tx.rollbackTransaction(); + } + } + } + + public void delete(CommonDeleteRequest request) { + Relation relation = relationMap.getSingleObjectByID(request.getId()); + + Long companyId = relation.getConsumerId(); + + Collection companyCMC = selectCompanyClearingMemberCategory(companyId); + boolean companyCMCisBIV = companyCMC.contains(ClearingCategory.B.getKey()) || companyCMC.contains(ClearingCategory.I.getKey()) + || companyCMC.contains(ClearingCategory.V.getKey()); + boolean companyCMCisCF = companyCMC.contains(ClearingCategory.C.getKey()) || companyCMC.contains(ClearingCategory.F.getKey()); + + if (companyCMCisBIV && MKR.equalsByKey(relation.getService())) { + // relation не изменяем + } else if (companyCMCisCF && FOND.equalsByKey(relation.getService())) { + // relation не изменяем + } else { + // удалить. + } + // else + { + ImdgTransaction tx = imdgProvider.newTransaction(); + boolean txOk = false; + try { + tx.beginTransaction(); + if (!companyCMCisBIV) { + Relation relation1 = selectRelation(companyId, MKR.getKey(), false); + if (relation1 != null) relationClose0(relation1); + } + if (!companyCMCisCF) { + Relation relation1 = selectRelation(companyId, FOND.getKey(), false); + if (relation1 != null) relationClose0(relation1); + } + txOk = true; + } finally { + if (txOk) + tx.commitTransaction(); + else + tx.rollbackTransaction(); + } + } + + if (WorkflowStatus.Blocked.equalsByKey(relation.getServiceStatus())) { + log.warn("Relation {} already blocked.", relation.getId()); + } else { + relation.setUpdated(Instant.now()); + relation.setServiceStatus(WorkflowStatus.Blocked.getKey()); + + relationMap.insert(relation); + log.debug("Relation[{}] block.", relation.getId()); + } + } + + public void createNewRelation(ImdgTransaction transaction, Long companyId, ClearingMemberCategory clearingMemberCategory) { + Objects.requireNonNull(companyId, "companyId"); + Imdg relationMap = transaction.getImdg(IMDGDistributedNames.Map_Relation, Relation.class); + Company company = transaction.getImdg(IMDGDistributedNames.Map_Company, Company.class).getFirstObjectByFieldValues(Map.of("id", companyId)); + + WorkflowStatus workflowStatus = getEnumByKey(WorkflowStatus.class, company.getWorkflowStatus()); + String serviceStatus = null; + if (clearingMemberCategory == null) { + log.warn("clearingMemberCategory not set for companyId={}", companyId); + } else { + ClearingCategory clearingCategory = getEnumByKey(ClearingCategory.class, clearingMemberCategory.getClearingMemberCategory()); + serviceStatus = serviceForCMC(clearingCategory).getKey(); + } + + Relation relation = searchRelation(transaction, clearingMemberCategory.getClearingMemberCategory(), companyId); + if (relation == null) { + relation = new Relation(); + relation.setId(idSequence.nextId()); + relation.setCreated(Instant.now()); + relation.setUpdated(relation.getCreated()); + log.debug("Create new relation.id={}", relation.getId()); + } else { + relation.setUpdated(Instant.now()); + log.debug("Update exist relation.id={}", relation.getId()); + } + relation.setConsumerId(companyId); + relation.setSupplierId(SPVB_ID); // 1 СПВБ + relation.setServiceStatus(Objects.requireNonNull(workflowStatus).getKey()); + relation.setService(serviceStatus); + relation.setServiceProduct(ServiceProduct.ZERO.getKey()); + log.debug("New Relation[{}] created by clearingMemberCategory[{}].", relation.getId(), clearingMemberCategory.getId()); + relationMap.insert(relation); + } + + /** + * Приходит от ClearingMemberCategory + */ + public void cancelRelation(ImdgTransaction transaction, Long companyId, ClearingMemberCategory clearingMemberCategory) { + log.debug("Cancelling relations for companyId={} and clearingMemberCategory {}", companyId, clearingMemberCategory == null ? null : clearingMemberCategory.getClearingMemberCategory()); + + Objects.requireNonNull(companyId, "companyId"); + Imdg relationMap = transaction.getImdg(IMDGDistributedNames.Map_Relation, Relation.class); +// String serviceStatus = null; +// if (clearingMemberCategory == null) { +// log.warn("clearingMemberCategory not set for companyId={}", companyId); +// } else { +// ClearingCategory clearingCategory = getEnumByKey(ClearingCategory.class, clearingMemberCategory.getClearingMemberCategory()); +// serviceStatus = serviceForCMC(clearingCategory).getKey(); +// } + + Collection companyCMC = selectCompanyClearingMemberCategory(companyId); + if (companyCMC.contains(clearingMemberCategory.getClearingMemberCategory())) { + // never + log.warn("ClearingMemberCategory \"{}\" already exist in set for company {}.", clearingMemberCategory.getClearingMemberCategory(), companyId); + } + boolean companyCMCisBIV = companyCMC.contains(ClearingCategory.B.getKey()) || companyCMC.contains(ClearingCategory.I.getKey()) + || companyCMC.contains(ClearingCategory.V.getKey()); + boolean companyCMCisCF = companyCMC.contains(ClearingCategory.C.getKey()) || companyCMC.contains(ClearingCategory.F.getKey()); + + + Relation relation = searchRelation(transaction, clearingMemberCategory.getClearingMemberCategory(), companyId); + if (relation == null) { + log.debug("Relation for clearingMemberCategory.id={} {} not found", clearingMemberCategory.getId(), clearingMemberCategory.getClearingMemberCategory()); + } else { + if (companyCMCisBIV && MKR.equalsByKey(relation.getService())) { + // relation не изменяем + log.debug("Relation {} {} lost for ClearingMemberCategory \"{}\".", relation.getId(), relation.getService(), clearingMemberCategory.getClearingMemberCategory()); + } else if (companyCMCisCF && FOND.equalsByKey(relation.getService())) { + // relation не изменяем + log.debug("Relation {} {} lost for ClearingMemberCategory \"{}\".", relation.getId(), relation.getService(), clearingMemberCategory.getClearingMemberCategory()); + } else { + // удалить. + log.debug("Block exist relation.id={}", relation.getId()); + relation.setUpdated(Instant.now()); + relation.setServiceStatus(Closed.getKey()); + relationMap.update(relation); + log.debug("Relation[{}] updated (closed) by clearingMemberCategory[{}].", relation.getId(), clearingMemberCategory.getId()); + } + } + } + + public void cancelAllRelationForCompany(ImdgTransaction transaction, Long companyId) { + Objects.requireNonNull(companyId, "companyId"); + Imdg relationMap = transaction.getImdg(IMDGDistributedNames.Map_Relation, Relation.class); + Collection relations = relationMap.getCollectionObjectsByFieldValues(Map.of("consumerId", companyId)); + + int cancelledN = 0; + for (Relation relation : relations) { + if (!Closed.equalsByKey(relation.getServiceStatus())) { + relation.setServiceStatus(Closed.getKey()); + relationMap.update(relation); + cancelledN++; + } + } + + log.debug("Cancelled {} relation (of {}) by company {}", cancelledN, relations.size(), companyId); + } + + public void cancelingOfAgreementUpdateRelation(ImdgTransaction transaction, Long companyId) { + Imdg relationMap = transaction.getImdg(IMDGDistributedNames.Map_Relation, Relation.class); + Relation relation = relationMap.getFirstObjectByFieldValues(Map.of("consumerId", companyId)); + + if (relation == null) { + log.warn("Relation with consumerId={} not found", companyId); + return; + } + relation.setServiceStatus(Closed.getKey()); + relationMap.update(relation); + + log.debug("New Relation[{}] updated.", relation.getId()); + } + + /** + * @param company + * @param oldStatus + * @param newStatus WorkflowStatus.Active - при возобналвении; WorkflowStatus.Blocked - при блокировки/расторжении + */ + 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); + } + } + } + + public synchronized 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); + Collection relations = relationMap.getCollectionObjectsBySQL(query); + + log.trace("Selected {} Relation by query: {}", relations.size(), query); + Instant now = Instant.now(); + + for (Relation relation : relations) { + boolean modified = false; + if (WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus())) { + if (!ServiceStatus.Reopened.equalsByKey(relation.getServiceStatus())) { + relation.setServiceStatus(ServiceStatus.Reopened.getKey()); + modified = true; + } + } else if (WorkflowStatus.Blocked.equalsByKey(company.getWorkflowStatus())) { + if (!Closed.equalsByKey(relation.getServiceStatus())) { + relation.setServiceStatus(Closed.getKey()); + modified = true; + } + } + if (modified) { + relation.setUpdated(now); + log.debug("Relation id={} updated", relation.getId()); + relationMap.update(relation); + } + } + } + + private Relation selectRelation(Long companyId, String service, Boolean statusActive) { + Objects.requireNonNull(companyId, "companyId"); + Objects.requireNonNull(service, "service"); + Collection relations = relationMap.getCollectionObjectsByFieldValues(Map.of("consumerId", companyId, "service", service)); + Optional r = relations.stream() + .filter(rel -> { + if (statusActive == null) return true; + boolean wasClosed = IEnumKey.contains(rel.getServiceStatus(), + Closed, ServiceStatus.Suspended, ServiceStatus.Blocked); + return statusActive != wasClosed; + }).findFirst(); + if (r.isPresent()) { + log.trace("Found relation[{}] by consumerId={} and service={} and active={}", + r.get().getId(), companyId, service, statusActive); + return r.get(); + } else { + log.trace("Relation not found by consumerId={} and service={} and active={}", + companyId, service, statusActive); + return null; + } + } + + private Relation searchRelation(ImdgTransaction tx, String clearingMemberCategory, Long consumerId) { + String svc = serviceForCMC(clearingMemberCategory); + if (svc == null) { + log.warn("Unexpected relation clearingMemberCategory={}", clearingMemberCategory); + return null; + } + Imdg currentRelationMap = tx == null ? relationMap : tx.getImdg(IMDGDistributedNames.Map_Relation, Relation.class); + Relation existRelation = currentRelationMap.getFirstObjectByFieldValues(Map.of( + "consumerId", consumerId, + "service", svc + )); + if (existRelation == null) + log.trace("Relation with consumerId={} and service={} not exist.", consumerId, svc); + else + log.trace("Exist relation.id={}", existRelation.getId()); + return existRelation; + } + + private Relation searchRelation(String clearingMemberCategory, Long consumerId) { + return searchRelation(null, clearingMemberCategory, consumerId); + } + + private String serviceForCMC(String clearingMemberCategory) { + String svc = null; + if (ClearingCategory.B.equalsByKey(clearingMemberCategory) + || ClearingCategory.I.equalsByKey(clearingMemberCategory) + || ClearingCategory.V.equalsByKey(clearingMemberCategory) + ) { + svc = MKR.getKey(); + } else if (ClearingCategory.C.equalsByKey(clearingMemberCategory) + || ClearingCategory.F.equalsByKey(clearingMemberCategory) + ) { + svc = ru.spcex.platform.enumeration.Service.FOND.getKey(); + } + return svc; + } + + private ru.spcex.platform.enumeration.Service serviceForCMC(ClearingCategory clearingCategory) { + return switch (Objects.requireNonNull(clearingCategory)) { + case B, I, V -> MKR; + case C, F -> FOND; + default -> throw new IllegalStateException("Illegal state of clearingCategory " + clearingCategory); + }; + } + + private Collection selectCompanyClearingMemberCategory(Long companyId) { + Collection companyCategory = clearingMemberCategoryImdg.getCollectionObjectsByFieldValues( + Map.of("companyId", companyId) + ); + return companyCategory.stream() + .map(ClearingMemberCategory::getClearingMemberCategory) + .filter(StringUtils::isNotEmpty) + .distinct() + .collect(Collectors.toList()); + } + + private Relation relationNew0(RelationUpdateRequest req, Long companyId, String clearingMemberCategory) { + Company company = companyMap.getSingleObjectByID(companyId); + + Relation relation = new Relation(); + relation.setId(idSequence.nextId()); + relation.setCreated(Instant.now()); + relation.setUpdated(relation.getCreated()); + log.debug("New relation.id={}", relation.getId()); + + relation.setConsumerId(companyId); + relation.setSupplierId(SPVB_ID); // 1 СПВБ + if (req.getServiceStatus() != null) { + relation.setServiceStatus(req.getServiceStatus()); + } else { + String toStatus = WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus()) ? ServiceStatus.Active.getKey() : + WorkflowStatus.Blocked.equalsByKey(company.getWorkflowStatus()) ? Closed.getKey() : + null; + log.debug("Request has no status. Set status by company[{}].status={}. Relation[{}].serviceSStatus={}", + company.getId(), company.getWorkflowStatus(), relation.getId(), toStatus); + relation.setServiceStatus(toStatus); + } + String service = serviceForCMC(clearingMemberCategory); + relation.setService(service); // MKR + relation.setServiceProduct(ServiceProduct.ZERO.getKey()); + relation.setComment(req.getComment()); + + relationMap.insert(relation); + log.debug("New Relation[{}] created.", relation.getId()); + + return null; + } + + private Relation relationUpdate0(RelationUpdateRequest req, Relation relation) { + if (req.getServiceStatus() != null) { + log.debug("To relation {} set serivceStatus=\"{}\" by user request.", relation.getId(), req.getServiceStatus()); + relation.setServiceStatus(req.getServiceStatus()); + } else { // never - см. валидатор relationUpdateRequestValidator + if (relation.getConsumerId() == null) { + log.warn("Relation[{}]. consumerId was null", relation.getId()); + } + Company company = companyMap.getSingleObjectByID(relation.getConsumerId()); + String toStatus = WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus()) ? ServiceStatus.Active.getKey() : + WorkflowStatus.Blocked.equalsByKey(company.getWorkflowStatus()) ? Closed.getKey() : + null; + if (ServiceStatus.Active.equalsByKey(toStatus) && Closed.equalsByKey(relation.getServiceStatus())) { + relation.setServiceStatus(ServiceStatus.Reopened.getKey()); + log.debug("Set status by resume: {}", relation.getServiceStatus()); + } else { + relation.setServiceStatus(toStatus); + log.debug("Request has no status. Set status by company[{}].status={}. Relation[{}].serviceSStatus={}", + company.getId(), company.getWorkflowStatus(), toStatus, relation.getServiceStatus()); + } + } + + relation.setComment(req.getComment()); + relation.setUpdated(Instant.now()); + + relationMap.update(relation); + log.debug("Update Relation[{}].", relation.getId()); + return relation; + } + + private Relation relationUpdate0WithResume(RelationUpdateRequest req, Relation relation) { + if (ServiceStatus.Reopened.equalsByKey(relation.getServiceStatus())) { + log.debug("Relation {} already reopened(resumed)", relation.getId()); + return relation; + } + if (req.getComment() != null) { + relation.setComment(req.getComment()); + } + relation.setServiceStatus(ServiceStatus.Reopened.getKey()); + relation.setUpdated(Instant.now()); + + relationMap.update(relation); + log.debug("Update Relation[{}] - resume.", relation.getId()); + return relation; + } + + private void relationClose0(Relation relation) { + if (ServiceStatus.Closed.equalsByKey((relation.getServiceStatus()))) { + log.debug("Relation {} already closed.", relation.getId()); + return; + } + relation.setServiceStatus(Closed.getKey()); + relation.setUpdated(Instant.now()); + + relationMap.update(relation); + log.debug("Relation[{}] was closed.", relation.getId()); + } +} diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/facade/SettlementHousePropertiesServiceFacade.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/facade/SettlementHousePropertiesServiceFacade.java new file mode 100644 index 000000000..d34ca3f6a --- /dev/null +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/facade/SettlementHousePropertiesServiceFacade.java @@ -0,0 +1,56 @@ +package ru.spcex.clearing.company.service.v2.facade; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import ru.clearing.classes.statics.data.company.SettlementHouseProperties; +import ru.spcex.clearing.company.error.CompanyErrors; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.SettlementHousePropertyNewRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.SettlementHousePropertyUpdateRequest; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgId; +import ru.spcex.platform.imdg.api.ImdgProvider; + +@Service +public class SettlementHousePropertiesServiceFacade { + private final Logger log = LoggerFactory.getLogger(getClass()); + private final Imdg settlementHousePropertiesMap; + private final ImdgId idSequence; + + public SettlementHousePropertiesServiceFacade(ImdgProvider imdgProvider) { + this.settlementHousePropertiesMap = imdgProvider.getImdg(IMDGDistributedNames.Map_SettlementHouseProperties, SettlementHouseProperties.class); + this.idSequence = imdgProvider.getImdgIdGenerator(); + } + + public void create(SettlementHousePropertyNewRequest request) { + SettlementHouseProperties shp = new SettlementHouseProperties(); + shp.setId(idSequence.nextId()); + shp.setCompanyId(request.getCompanyId()); + shp.setCurrencyCode(request.getCurrencyCode()); + + settlementHousePropertiesMap.insert(shp); + log.debug("New SettlementHouseProperties[{}] for company {}", shp.getId(), shp.getCompanyId()); + } + + public void update(SettlementHousePropertyUpdateRequest request) { + SettlementHouseProperties shp = settlementHousePropertiesMap.getSingleObjectByID(request.getId()); + + shp.setCompanyId(request.getCompanyId()); + shp.setCurrencyCode(request.getCurrencyCode()); + + settlementHousePropertiesMap.update(shp); + log.debug("Update SettlementHouseProperty[{}] for company {}", shp.getId(), request.getCompanyId()); + } + + public CompanyErrors delete(CommonDeleteRequest request) { + SettlementHouseProperties settlementHouseProperty = settlementHousePropertiesMap.getSingleObjectByID(request.getId()); + if (settlementHouseProperty == null) { + return CompanyErrors.RecordNotFound; + } + settlementHousePropertiesMap.delete(settlementHouseProperty); + log.debug("SettlementHouseProperty {} for company {} delete", settlementHouseProperty.getId(), settlementHouseProperty.getCompanyId()); + return null; + } +} diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/listeners/ClearingMemberCategoryServiceListener.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/listeners/ClearingMemberCategoryServiceListener.java new file mode 100644 index 000000000..bed25cb4b --- /dev/null +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/listeners/ClearingMemberCategoryServiceListener.java @@ -0,0 +1,83 @@ +package ru.spcex.clearing.company.service.v2.listeners; + +import org.apache.kafka.clients.consumer.Consumer; +import org.apache.kafka.clients.producer.Producer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.stereotype.Service; +import ru.spcex.clearing.company.service.v2.facade.ClearingMemberCategoryServiceFacade; +import ru.spcex.clearing.company.service.v2.validators.ClearingMemberCategoryServiceValidator; +import ru.spcex.clearing.platform.messaging.domain.BaseRequest; +import ru.spcex.clearing.platform.messaging.domain.Consts; +import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.ClearingMemberCategoryNewRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.ClearingMemberCategoryUpdateRequest; +import ru.spcex.clearing.platform.messaging.service.QueueConsumer; +import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate; + +@Service +public class ClearingMemberCategoryServiceListener extends QueueConsumer implements InitializingBean { + private final Logger log = LoggerFactory.getLogger(getClass()); + private final ClearingMemberCategoryServiceFacade clearingMemberCategoryServiceFacade; + private final ClearingMemberCategoryServiceValidator clearingMemberCategoryServiceValidator; + + public ClearingMemberCategoryServiceListener(Consumer kafkaQueue, + Producer kafkaResponseQueue, + ClearingMemberCategoryServiceFacade clearingMemberCategoryServiceFacade, + ClearingMemberCategoryServiceValidator clearingMemberCategoryServiceValidator) { + super(kafkaQueue, kafkaResponseQueue); + this.clearingMemberCategoryServiceFacade = clearingMemberCategoryServiceFacade; + this.clearingMemberCategoryServiceValidator = clearingMemberCategoryServiceValidator; + } + + @Override + public void afterPropertiesSet() throws Exception { + callback(ClearingMemberCategoryNewRequest.class) + .setFunction(this::processNewClearingMemberCategoryRequest) + .forDestination(Consts.DESTINATION_CLEARING_MEMBER_CATEGORY_NEW, callbacks::put); + callback(ClearingMemberCategoryUpdateRequest.class) + .setFunction(this::processUpdateClearingMemberCategoryRequest) + .forDestination(Consts.DESTINATION_CLEARING_MEMBER_CATEGORY_UPDATE, callbacks::put); + callback(CommonDeleteRequest.class) + .setFunction(this::processDeleteClearingMemberCategoryRequest) + .forDestination(Consts.DESTINATION_CLEARING_MEMBER_CATEGORY_DELETE, callbacks::put); + init(); + } + + public RequestInfoUpdate processNewClearingMemberCategoryRequest(BaseRequest request) { + log.debug("ClearingMemberCategoryNewRequest received {}", request.getId()); + + RequestInfoUpdate requestInfoUpdate = clearingMemberCategoryServiceValidator.createRequestValidation(request); + if (requestInfoUpdate != null) { + return requestInfoUpdate; + } + + clearingMemberCategoryServiceFacade.create(request.getRequestPayload()); + return null; + } + + public RequestInfoUpdate processUpdateClearingMemberCategoryRequest(BaseRequest request) { + log.debug("ClearingMemberCategoryUpdateRequest received {}", request.getId()); + + RequestInfoUpdate requestInfoUpdate = clearingMemberCategoryServiceValidator.updateRequestValidation(request); + if (requestInfoUpdate != null) { + return requestInfoUpdate; + } + + clearingMemberCategoryServiceFacade.update(request.getRequestPayload()); + return null; + } + + public RequestInfoUpdate processDeleteClearingMemberCategoryRequest(BaseRequest request) { + log.debug("CommonDeleteRequest received {}", request.getId()); + + RequestInfoUpdate requestInfoUpdate = clearingMemberCategoryServiceValidator.deleteRequestValidation(request); + if (requestInfoUpdate != null) { + return requestInfoUpdate; + } + + clearingMemberCategoryServiceFacade.delete(request.getRequestPayload()); + return null; + } +} diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/listeners/CompanyInfoServiceListener.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/listeners/CompanyInfoServiceListener.java new file mode 100644 index 000000000..0cdfd15bd --- /dev/null +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/listeners/CompanyInfoServiceListener.java @@ -0,0 +1,67 @@ +package ru.spcex.clearing.company.service.v2.listeners; + +import org.apache.kafka.clients.consumer.Consumer; +import org.apache.kafka.clients.producer.Producer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import ru.spcex.clearing.company.error.CompanyErrors; +import ru.spcex.clearing.company.service.v2.facade.CompanyInfoServiceFacade; +import ru.spcex.clearing.company.service.v2.validators.CompanyInfoServiceValidator; +import ru.spcex.clearing.platform.messaging.domain.BaseRequest; +import ru.spcex.clearing.platform.messaging.domain.Consts; +import ru.spcex.clearing.platform.messaging.domain.cud.company.CompanyInfoUpdateRequest; +import ru.spcex.clearing.platform.messaging.service.QueueConsumer; +import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate; +import ru.spcex.clearing.util.services.RequestHelper; + +@Service +public class CompanyInfoServiceListener extends QueueConsumer implements InitializingBean { + private final Logger log = LoggerFactory.getLogger(getClass()); + private final RequestHelper requestHelper; + private final CompanyInfoServiceFacade companyInfoServiceFacade; + private final CompanyInfoServiceValidator companyInfoServiceValidator; + + @Autowired + public CompanyInfoServiceListener(Consumer kafkaQueue, + Producer kafkaProducer, + RequestHelper requestHelper, + CompanyInfoServiceFacade companyInfoServiceFacade, + CompanyInfoServiceValidator companyInfoServiceValidator) { + super(kafkaQueue, kafkaProducer); + this.requestHelper = requestHelper; + this.companyInfoServiceFacade = companyInfoServiceFacade; + this.companyInfoServiceValidator = companyInfoServiceValidator; + } + + @Override + public void afterPropertiesSet() { + callback(CompanyInfoUpdateRequest.class) + .setFunction(request -> requestHelper.requestFunction(this::processNewCompanyInfoUpdateRequest, request)) + .forDestination(Consts.DESTINATION_COMPANY_INFO_UPDATE, callbacks::put); + callback(CompanyInfoUpdateRequest.class) + .setFunction(request -> requestHelper.requestFunction(this::processNewCompanyInfoUpdateRequest, request)) + .forDestination(Consts.DESTINATION_COMPANY_INFO_NEW, callbacks::put); // логика заполнения одинакова с companyInfoUpdate + init(); + } + + + public RequestInfoUpdate processNewCompanyInfoUpdateRequest(BaseRequest request) { + log.debug("{} received", request.getRequestPayload().getClass().getSimpleName()); + + RequestInfoUpdate requestInfoUpdate = companyInfoServiceValidator.updateRequestValidation(request); + if (requestInfoUpdate != null) { + return requestInfoUpdate; + } + + CompanyErrors result = companyInfoServiceFacade.update(request.getRequestPayload()); + if (result.equals(CompanyErrors.CompanyNotFound)) { + log.warn("Company {} not found", request.getRequestPayload().getId()); + return requestHelper.makeErrorResponse(request, CompanyErrors.CompanyNotFound, request.getId()); + } + + return null; + } +} diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/listeners/CompanyRoleSetServiceListener.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/listeners/CompanyRoleSetServiceListener.java new file mode 100644 index 000000000..d715db132 --- /dev/null +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/listeners/CompanyRoleSetServiceListener.java @@ -0,0 +1,91 @@ +package ru.spcex.clearing.company.service.v2.listeners; + +import org.apache.kafka.clients.consumer.Consumer; +import org.apache.kafka.clients.producer.Producer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.stereotype.Service; +import ru.spcex.clearing.company.error.CompanyErrors; +import ru.spcex.clearing.company.service.v2.facade.CompanyRoleSetServiceFacade; +import ru.spcex.clearing.company.service.v2.validators.CompanyRoleSetServiceValidator; +import ru.spcex.clearing.platform.messaging.domain.BaseRequest; +import ru.spcex.clearing.platform.messaging.domain.Consts; +import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.CompanyRoleSetNewRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.CompanyRoleSetUpdateRequest; +import ru.spcex.clearing.platform.messaging.service.QueueConsumer; +import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate; +import ru.spcex.clearing.util.services.RequestHelper; + +@Service +public class CompanyRoleSetServiceListener extends QueueConsumer implements InitializingBean { + private final Logger log = LoggerFactory.getLogger(getClass()); + private final CompanyRoleSetServiceFacade companyRoleSetServiceFacade; + private final CompanyRoleSetServiceValidator companyRoleSetServiceValidator; + private final RequestHelper requestHelper; + + public CompanyRoleSetServiceListener(Consumer kafkaQueue, + Producer kafkaResponseQueue, + CompanyRoleSetServiceFacade companyRoleSetServiceFacade, + CompanyRoleSetServiceValidator companyRoleSetServiceValidator, + RequestHelper requestHelper) { + super(kafkaQueue, kafkaResponseQueue); + this.companyRoleSetServiceFacade = companyRoleSetServiceFacade; + this.companyRoleSetServiceValidator = companyRoleSetServiceValidator; + this.requestHelper = requestHelper; + } + + @Override + public void afterPropertiesSet() throws Exception { + callback(CompanyRoleSetNewRequest.class) + .setFunction(request -> requestHelper.requestFunction(this::processNewCompanyRoleSetRequest, request)) + .forDestination(Consts.DESTINATION_COMPANY_ROLE_SETS_NEW, callbacks::put); + callback(CompanyRoleSetUpdateRequest.class) + .setConsumer(request -> requestHelper.requestFunction(this::processUpdateCompanyRoleSetRequest, request)) + .forDestination(Consts.DESTINATION_COMPANY_ROLE_SETS_UPDATE, callbacks::put); + callback(CommonDeleteRequest.class) + .setFunction(request -> requestHelper.requestFunction(this::processDeleteCompanyRoleSetRequest, request)) + .forDestination(Consts.DESTINATION_COMPANY_ROLE_SETS_DELETE, callbacks::put); + init(); + } + + public RequestInfoUpdate processNewCompanyRoleSetRequest(BaseRequest request) { + RequestInfoUpdate requestInfoUpdate = companyRoleSetServiceValidator.createRequestValidation(request); + if (requestInfoUpdate != null) { + return requestInfoUpdate; + } + + CompanyErrors result = companyRoleSetServiceFacade.create(request.getRequestPayload()); + if (result != null) { + return requestHelper.makeErrorResponse(request, result, request.getId()); + } + return null; + } + + public RequestInfoUpdate processUpdateCompanyRoleSetRequest(BaseRequest request) { + RequestInfoUpdate requestInfoUpdate = companyRoleSetServiceValidator.updateRequestValidation(request); + if (requestInfoUpdate != null) { + return requestInfoUpdate; + } + + CompanyErrors result = companyRoleSetServiceFacade.update(request.getRequestPayload()); + if (result != null) { + return requestHelper.makeErrorResponse(request, result, request.getId()); + } + return null; + } + + public RequestInfoUpdate processDeleteCompanyRoleSetRequest(BaseRequest request) { + RequestInfoUpdate requestInfoUpdate = companyRoleSetServiceValidator.deleteRequestValidation(request); + if (requestInfoUpdate != null) { + return requestInfoUpdate; + } + + CompanyErrors result = companyRoleSetServiceFacade.delete(request.getRequestPayload()); + if (result != null) { + return requestHelper.makeErrorResponse(request, result, request.getId()); + } + return null; + } +} diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/listeners/CompanyServiceListener.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/listeners/CompanyServiceListener.java index 7927ef042..0ac8b7b84 100644 --- a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/listeners/CompanyServiceListener.java +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/listeners/CompanyServiceListener.java @@ -7,13 +7,15 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.InitializingBean; import org.springframework.stereotype.Service; import ru.spcex.clearing.company.error.CompanyErrors; +import ru.spcex.clearing.company.service.AccountNotificationHelper; import ru.spcex.clearing.company.service.v2.facade.CompanyServiceFacade; import ru.spcex.clearing.company.service.v2.validators.CompanyServiceValidator; -import ru.spcex.clearing.platform.messaging.domain.ActionType; 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.ClientCodeNewRequest; import ru.spcex.clearing.platform.messaging.domain.cud.account.sdf01.AccountTerminationRequest; import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.CompanyGatewayRequest; import ru.spcex.clearing.platform.messaging.domain.cud.company.CompanyNewRequest; import ru.spcex.clearing.platform.messaging.service.QueueConsumer; import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate; @@ -26,65 +28,77 @@ public class CompanyServiceListener extends QueueConsumer implements Initializin private final CompanyServiceFacade companyServiceFacade; private final CompanyServiceValidator companyServiceValidator; private final RequestHelper requestHelper; + private final AccountNotificationHelper accountNotificationHelper; public CompanyServiceListener(Consumer kafkaQueue, Producer kafkaResponseQueue, CompanyServiceFacade companyServiceFacade, CompanyServiceValidator companyServiceValidator, - RequestHelper requestHelper) { + RequestHelper requestHelper, + AccountNotificationHelper accountNotificationHelper) { super(kafkaQueue, kafkaResponseQueue); this.companyServiceFacade = companyServiceFacade; this.companyServiceValidator = companyServiceValidator; this.requestHelper = requestHelper; + this.accountNotificationHelper = accountNotificationHelper; } @Override public void afterPropertiesSet() throws Exception { callback(CompanyNewRequest.class) - .setFunction(request -> requestHelper.requestFunction(this::processBaseRequest, request)) + .setFunction(request -> requestHelper.requestFunction(this::processNewCompanyRequest, request)) .forDestination(Consts.DESTINATION_COMPANY_NEW, callbacks::put); callback(CompanyNewRequest.class) - .setFunction(request -> requestHelper.requestFunction(this::processBaseRequest, request)) + .setFunction(request -> requestHelper.requestFunction(this::processUpdateCompanyRequest, request)) .forDestination(Consts.DESTINATION_COMPANY_UPDATE, callbacks::put); callback(CommonDeleteRequest.class) - .setFunction(request -> requestHelper.requestFunction(this::processDeleteRequest, request)) + .setFunction(request -> requestHelper.requestFunction(this::processDeleteCompanyRequest, request)) .forDestination(Consts.DESTINATION_COMPANY_DELETE, callbacks::put); callback(CommonDeleteRequest.class) - .setFunction(request -> requestHelper.requestFunction(this::processCompanyBlock, request)) + .setFunction(request -> requestHelper.requestFunction(this::processBlockCompanyRequest, request)) .forDestination(Consts.DESTINATION_COMPANY_BLOCK, callbacks::put); callback(AccountTerminationRequest.class) - .setFunction(request -> requestHelper.requestFunction(this::processAccountTermination, request)) + .setFunction(request -> requestHelper.requestFunction(this::processAccountTerminationRequest, request)) .forDestination(Consts.ACCOUNT_TERMINATION_STEP2, callbacks::put); + callback(CompanyGatewayRequest.class) + .setFunction(request -> requestHelper.requestFunction(this::processMultiCompanyRequest, request)) + .forDestination(Consts.DESTINATION_COMPANY_GATEWAY_REQUEST, callbacks::put); init(); } - private RequestInfoUpdate processBaseRequest(BaseRequest request) throws ValidationException { + public RequestInfoUpdate processNewCompanyRequest(BaseRequest request) throws ValidationException { + log.debug("CompanyNewRequest received id = {}", request.getId()); + RequestInfoUpdate requestInfoUpdate = companyServiceValidator.baseRequestValidation(request); if (requestInfoUpdate != null) { return requestInfoUpdate; } - ActionType actionType = request.getActionType(); - switch (actionType) { - case NEW -> { - companyServiceValidator.createRequestValidation((CompanyNewRequest) request.getRequestPayload()); - companyServiceFacade.create((CompanyNewRequest) request.getRequestPayload()); - } - case UPDATE -> { - companyServiceValidator.updateRequestValidation((CompanyNewRequest) request.getRequestPayload()); - companyServiceFacade.update((CompanyNewRequest) request.getRequestPayload()); - } - } + companyServiceValidator.createRequestValidation((CompanyNewRequest) request.getRequestPayload()); + companyServiceFacade.create((CompanyNewRequest) request.getRequestPayload()); return requestInfoUpdate; } - private synchronized RequestInfoUpdate processDeleteRequest(BaseRequest companyBlockRequestBaseRequest) throws ValidationException { + public RequestInfoUpdate processUpdateCompanyRequest(BaseRequest request) throws ValidationException { + log.debug("CompanyNewRequest received id = {}", request.getId()); + + RequestInfoUpdate requestInfoUpdate = companyServiceValidator.baseRequestValidation(request); + if (requestInfoUpdate != null) { + return requestInfoUpdate; + } + companyServiceValidator.updateRequestValidation((CompanyNewRequest) request.getRequestPayload()); + companyServiceFacade.update((CompanyNewRequest) request.getRequestPayload()); + return requestInfoUpdate; + } + + public RequestInfoUpdate processDeleteCompanyRequest(BaseRequest companyBlockRequestBaseRequest) { log.debug("CommonDeleteRequest (block request) received id = {}", companyBlockRequestBaseRequest.getRequestPayload().getId()); + RequestInfoUpdate requestInfoUpdate = companyServiceValidator.deleteRequestValidation(companyBlockRequestBaseRequest); if (requestInfoUpdate != null) { return requestInfoUpdate; } - CompanyErrors result = companyServiceFacade.delete(companyBlockRequestBaseRequest); + CompanyErrors result = companyServiceFacade.delete(companyBlockRequestBaseRequest.getRequestPayload()); if (result.equals(CompanyErrors.CompanyNotFound)) { log.warn("Company {} not found", companyBlockRequestBaseRequest.getRequestPayload().getId()); return requestHelper.makeErrorResponse(companyBlockRequestBaseRequest, CompanyErrors.CompanyNotFound, companyBlockRequestBaseRequest.getRequestPayload().getId()); @@ -93,14 +107,15 @@ public class CompanyServiceListener extends QueueConsumer implements Initializin return null; } - private synchronized RequestInfoUpdate processCompanyBlock(BaseRequest companyBlockRequestBaseRequest) throws ValidationException { + public RequestInfoUpdate processBlockCompanyRequest(BaseRequest companyBlockRequestBaseRequest) { log.debug("CommonDeleteRequest (block request) received id = {}", companyBlockRequestBaseRequest.getRequestPayload().getId()); + RequestInfoUpdate requestInfoUpdate = companyServiceValidator.baseRequestValidation(companyBlockRequestBaseRequest); if (requestInfoUpdate != null) { return requestInfoUpdate; } - CompanyErrors result = companyServiceFacade.blockCompany(companyBlockRequestBaseRequest); + CompanyErrors result = companyServiceFacade.blockCompany(companyBlockRequestBaseRequest.getRequestPayload()); if (result.equals(CompanyErrors.CompanyNotFound)) { log.warn("Company {} not found", companyBlockRequestBaseRequest.getRequestPayload().getId()); return requestHelper.makeErrorResponse(companyBlockRequestBaseRequest, CompanyErrors.CompanyNotFound); @@ -112,13 +127,33 @@ public class CompanyServiceListener extends QueueConsumer implements Initializin return null; } - private synchronized RequestInfoUpdate processAccountTermination(BaseRequest accountTerminationRequestBaseRequest) throws ValidationException { + public RequestInfoUpdate processAccountTerminationRequest(BaseRequest accountTerminationRequestBaseRequest) { log.debug("AccountTerminationRequest (block request) received id = {}", accountTerminationRequestBaseRequest.getId()); + RequestInfoUpdate requestInfoUpdate = companyServiceValidator.baseRequestValidation(accountTerminationRequestBaseRequest); if (requestInfoUpdate != null) { return requestInfoUpdate; } - companyServiceFacade.terminateAccount(accountTerminationRequestBaseRequest); + companyServiceFacade.terminateAccount(accountTerminationRequestBaseRequest.getRequestPayload()); + + return null; + } + + public RequestInfoUpdate processMultiCompanyRequest(BaseRequest baseRequest) { + log.debug("company-batch-new request received, BaseRequest.id = {}", baseRequest.getId()); + + RequestInfoUpdate requestInfoUpdate = companyServiceValidator.baseRequestValidation(baseRequest); + if (requestInfoUpdate != null) { + return requestInfoUpdate; + } + + boolean result = companyServiceFacade.createUpdateMultiCompany(baseRequest.getRequestPayload()); + if (result) { + for (ClientCodeNewRequest partRequest : baseRequest.getRequestPayload().getClientCodes()) { + accountNotificationHelper.clientCodeNew(partRequest); // Consts.DESTINATION_CLIENT_CODE_NEW Consts.DESTINATION_CLIENT_CODE_UPDATE + } + } + return null; } } diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/listeners/CompanySymbolServiceListener.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/listeners/CompanySymbolServiceListener.java new file mode 100644 index 000000000..d85002c90 --- /dev/null +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/listeners/CompanySymbolServiceListener.java @@ -0,0 +1,99 @@ +package ru.spcex.clearing.company.service.v2.listeners; + +import org.apache.kafka.clients.consumer.Consumer; +import org.apache.kafka.clients.producer.Producer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.stereotype.Service; +import ru.spcex.clearing.company.service.v2.facade.CompanySymbolServiceFacade; +import ru.spcex.clearing.company.service.v2.validators.CompanySymbolServiceValidator; +import ru.spcex.clearing.platform.messaging.domain.BaseRequest; +import ru.spcex.clearing.platform.messaging.domain.Consts; +import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.CompanySymbolNewRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.CompanySymbolUpdateRequest; +import ru.spcex.clearing.platform.messaging.service.QueueConsumer; +import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate; +import ru.spcex.clearing.platform.messaging.service.Status; +import ru.spcex.platform.utils.enumeration.EnumMessage; + +@Service +public class CompanySymbolServiceListener extends QueueConsumer implements InitializingBean { + private final Logger log = LoggerFactory.getLogger(getClass()); + private final CompanySymbolServiceFacade companySymbolServiceFacade; + private final CompanySymbolServiceValidator companySymbolServiceValidator; + + public CompanySymbolServiceListener(Consumer kafkaQueue, + Producer kafkaResponseQueue, + CompanySymbolServiceFacade companySymbolServiceFacade, + CompanySymbolServiceValidator companySymbolServiceValidator) { + super(kafkaQueue, kafkaResponseQueue); + this.companySymbolServiceFacade = companySymbolServiceFacade; + this.companySymbolServiceValidator = companySymbolServiceValidator; + } + + @Override + public void afterPropertiesSet() throws Exception { + callback(CompanySymbolNewRequest.class) + .setFunction(this::processNewCompanySymbolRequest) + .forDestination(Consts.DESTINATION_COMPANY_SYMBOL_NEW, callbacks::put); + callback(CompanySymbolUpdateRequest.class) + .setFunction(this::processUpdateCompanySymbolRequest) + .forDestination(Consts.DESTINATION_COMPANY_SYMBOL_UPDATE, callbacks::put); + callback(CommonDeleteRequest.class) + .setFunction(this::processDeleteCompanySymbolRequest) + .forDestination(Consts.DESTINATION_COMPANY_SYMBOL_DELETE, callbacks::put); + init(); + } + + public RequestInfoUpdate processNewCompanySymbolRequest(BaseRequest request) { + log.debug("CompanySymbolNewRequest received"); + + RequestInfoUpdate requestInfoUpdate = companySymbolServiceValidator.createRequestValidation(request); + if (requestInfoUpdate != null) { + return requestInfoUpdate; + } + + companySymbolServiceFacade.create(request.getRequestPayload()); + return null; + } + + public RequestInfoUpdate processUpdateCompanySymbolRequest(BaseRequest request) { + log.debug("CompanySymbolUpdateRequest received, id={}", request.getId()); + + RequestInfoUpdate requestInfoUpdate = companySymbolServiceValidator.updateRequestValidation(request); + if (requestInfoUpdate != null) { + return requestInfoUpdate; + } + + EnumMessage message = companySymbolServiceFacade.update(request.getRequestPayload()); + if (message != null) { + requestInfoUpdate = new RequestInfoUpdate(); + requestInfoUpdate.setStatus(Status.Error); + requestInfoUpdate.setMessage(message.toString()); + return requestInfoUpdate; + } + + return null; + } + + public RequestInfoUpdate processDeleteCompanySymbolRequest(BaseRequest request) { + log.debug("CommonDeleteRequest for CompanySymbol received, id={}", request.getId()); + + RequestInfoUpdate requestInfoUpdate = companySymbolServiceValidator.deleteRequestValidation(request); + if (requestInfoUpdate != null) { + return requestInfoUpdate; + } + + EnumMessage message = companySymbolServiceFacade.delete(request.getRequestPayload()); + if (message != null) { + requestInfoUpdate = new RequestInfoUpdate(); + requestInfoUpdate.setStatus(Status.Error); + requestInfoUpdate.setMessage(message.toString()); + return requestInfoUpdate; + } + + return null; + } +} diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/listeners/ContactServiceListener.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/listeners/ContactServiceListener.java new file mode 100644 index 000000000..400d8b6e7 --- /dev/null +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/listeners/ContactServiceListener.java @@ -0,0 +1,83 @@ +package ru.spcex.clearing.company.service.v2.listeners; + +import org.apache.kafka.clients.consumer.Consumer; +import org.apache.kafka.clients.producer.Producer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.stereotype.Service; +import ru.spcex.clearing.company.service.v2.facade.ContactServiceFacade; +import ru.spcex.clearing.company.service.v2.validators.ContactServiceValidator; +import ru.spcex.clearing.platform.messaging.domain.BaseRequest; +import ru.spcex.clearing.platform.messaging.domain.Consts; +import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.ContactNewRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.ContactUpdateRequest; +import ru.spcex.clearing.platform.messaging.service.QueueConsumer; +import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate; + +@Service +public class ContactServiceListener extends QueueConsumer implements InitializingBean { + private final Logger log = LoggerFactory.getLogger(getClass()); + private final ContactServiceFacade contactServiceFacade; + private final ContactServiceValidator contactServiceValidator; + + public ContactServiceListener(Consumer kafkaQueue, + Producer kafkaResponseQueue, + ContactServiceFacade contactServiceFacade, + ContactServiceValidator contactServiceValidator) { + super(kafkaQueue, kafkaResponseQueue); + this.contactServiceFacade = contactServiceFacade; + this.contactServiceValidator = contactServiceValidator; + } + + @Override + public void afterPropertiesSet() throws Exception { + callback(ContactNewRequest.class) + .setFunction(this::processNewContactRequest) + .forDestination(Consts.DESTINATION_CONTACT_NEW, callbacks::put); + callback(ContactUpdateRequest.class) + .setFunction(this::processUpdateContactRequest) + .forDestination(Consts.DESTINATION_CONTACT_UPDATE, callbacks::put); + callback(CommonDeleteRequest.class) + .setFunction(this::processDeleteContactRequest) + .forDestination(Consts.DESTINATION_CONTACT_DELETE, callbacks::put); + init(); + } + + public RequestInfoUpdate processNewContactRequest(BaseRequest request) { + log.debug("ContactNewRequest received"); + + RequestInfoUpdate requestInfoUpdate = contactServiceValidator.createRequestValidation(request); + if (requestInfoUpdate != null) { + return requestInfoUpdate; + } + + contactServiceFacade.create(request.getRequestPayload()); + return null; + } + + public RequestInfoUpdate processUpdateContactRequest(BaseRequest request) { + log.debug("ContactUpdateRequest received"); + + RequestInfoUpdate requestInfoUpdate = contactServiceValidator.updateRequestValidation(request); + if (requestInfoUpdate != null) { + return requestInfoUpdate; + } + + contactServiceFacade.update(request.getRequestPayload()); + return null; + } + + public RequestInfoUpdate processDeleteContactRequest(BaseRequest request) { + log.debug("CommonDeleteRequest received for contact service."); + + RequestInfoUpdate requestInfoUpdate = contactServiceValidator.deleteRequestValidation(request); + if (requestInfoUpdate != null) { + return requestInfoUpdate; + } + + contactServiceFacade.delete(request.getRequestPayload()); + return null; + } +} diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/listeners/MultiCompanyServiceListener.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/listeners/MultiCompanyServiceListener.java deleted file mode 100644 index 3dc2522b5..000000000 --- a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/listeners/MultiCompanyServiceListener.java +++ /dev/null @@ -1,65 +0,0 @@ -package ru.spcex.clearing.company.service.v2.listeners; - -import org.apache.kafka.clients.consumer.Consumer; -import org.apache.kafka.clients.producer.Producer; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.InitializingBean; -import org.springframework.stereotype.Service; -import ru.spcex.clearing.company.service.AccountNotificationHelper; -import ru.spcex.clearing.company.service.v2.facade.MultiCompanyServiceFacade; -import ru.spcex.clearing.company.service.v2.validators.MultiCompanyServiceValidator; -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.ClientCodeNewRequest; -import ru.spcex.clearing.platform.messaging.domain.cud.company.CompanyGatewayRequest; -import ru.spcex.clearing.platform.messaging.service.QueueConsumer; -import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate; -import ru.spcex.clearing.util.services.RequestHelper; - -@Service -public class MultiCompanyServiceListener extends QueueConsumer implements InitializingBean { - private final Logger log = LoggerFactory.getLogger(getClass()); - private final MultiCompanyServiceFacade multiCompanyServiceFacade; - private final MultiCompanyServiceValidator multiCompanyServiceValidator; - private final RequestHelper requestHelper; - private final AccountNotificationHelper accountNotificationHelper; - - public MultiCompanyServiceListener(Consumer kafkaQueue, - Producer kafkaResponseQueue, - MultiCompanyServiceFacade multiCompanyServiceFacade, - MultiCompanyServiceValidator multiCompanyServiceValidator, - RequestHelper requestHelper, - AccountNotificationHelper accountNotificationHelper) { - super(kafkaQueue, kafkaResponseQueue); - this.multiCompanyServiceFacade = multiCompanyServiceFacade; - this.multiCompanyServiceValidator = multiCompanyServiceValidator; - this.requestHelper = requestHelper; - this.accountNotificationHelper = accountNotificationHelper; - } - - @Override - public void afterPropertiesSet() throws Exception { - callback(CompanyGatewayRequest.class) - .setFunction(request -> requestHelper.requestFunction(this::processMultiRequest, request)) - .forDestination(Consts.DESTINATION_COMPANY_GATEWAY_REQUEST, callbacks::put); - init(); - } - - private synchronized RequestInfoUpdate processMultiRequest(BaseRequest baseRequest) { - log.debug("company-batch-new request received, BaseRequest.id = {}", baseRequest.getId()); - RequestInfoUpdate requestInfoUpdate = multiCompanyServiceValidator.baseRequestValidation(baseRequest); - if (requestInfoUpdate != null) { - return requestInfoUpdate; - } - - boolean result = multiCompanyServiceFacade.createUpdateMultiCompany(baseRequest); - if (result) { - for (ClientCodeNewRequest partRequest : baseRequest.getRequestPayload().getClientCodes()) { - accountNotificationHelper.clientCodeNew(partRequest); // Consts.DESTINATION_CLIENT_CODE_NEW Consts.DESTINATION_CLIENT_CODE_UPDATE - } - } - - return null; - } -} diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/listeners/ProfileDocumentServiceListener.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/listeners/ProfileDocumentServiceListener.java new file mode 100644 index 000000000..98db8989a --- /dev/null +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/listeners/ProfileDocumentServiceListener.java @@ -0,0 +1,88 @@ +package ru.spcex.clearing.company.service.v2.listeners; + +import org.apache.kafka.clients.consumer.Consumer; +import org.apache.kafka.clients.producer.Producer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.stereotype.Service; +import ru.spcex.clearing.company.error.CompanyErrors; +import ru.spcex.clearing.company.service.v2.facade.ProfileDocumentServiceFacade; +import ru.spcex.clearing.company.service.v2.validators.ProfileDocumentServiceValidator; +import ru.spcex.clearing.platform.messaging.domain.BaseRequest; +import ru.spcex.clearing.platform.messaging.domain.Consts; +import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.ProfileDocumentNewRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.ProfileDocumentUpdateRequest; +import ru.spcex.clearing.platform.messaging.service.QueueConsumer; +import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate; +import ru.spcex.clearing.util.services.RequestHelper; + +@Service +public class ProfileDocumentServiceListener extends QueueConsumer implements InitializingBean { + private final Logger log = LoggerFactory.getLogger(getClass()); + private final ProfileDocumentServiceFacade profileDocumentServiceFacade; + private final ProfileDocumentServiceValidator profileDocumentServiceValidator; + private final RequestHelper requestHelper; + + public ProfileDocumentServiceListener(Consumer kafkaQueue, + Producer kafkaResponseQueue, + ProfileDocumentServiceFacade profileDocumentServiceFacade, + ProfileDocumentServiceValidator profileDocumentServiceValidator, + RequestHelper requestHelper) { + super(kafkaQueue, kafkaResponseQueue); + this.profileDocumentServiceFacade = profileDocumentServiceFacade; + this.profileDocumentServiceValidator = profileDocumentServiceValidator; + this.requestHelper = requestHelper; + } + + @Override + public void afterPropertiesSet() throws Exception { + callback(ProfileDocumentNewRequest.class) + .setFunction(this::processNewProfileDocumentRequest) + .forDestination(Consts.DESTINATION_PROFILE_DOCUMENT_NEW, callbacks::put); + callback(ProfileDocumentUpdateRequest.class) + .setFunction(this::processUpdateProfileDocumentRequest) + .forDestination(Consts.DESTINATION_PROFILE_DOCUMENT_UPDATE, callbacks::put); + callback(CommonDeleteRequest.class) + .setFunction(this::processDeleteProfileDocumentRequest) + .forDestination(Consts.DESTINATION_PROFILE_DOCUMENT_DELETE, callbacks::put); + init(); + } + + public RequestInfoUpdate processNewProfileDocumentRequest(BaseRequest request) { + log.trace("Start processing ProfileDocumentNewRequest!"); + + RequestInfoUpdate requestInfoUpdate = profileDocumentServiceValidator.createRequestValidation(request); + if (requestInfoUpdate != null) return requestInfoUpdate; + + profileDocumentServiceFacade.create(request.getRequestPayload()); + return null; + } + + public RequestInfoUpdate processUpdateProfileDocumentRequest(BaseRequest request) { + log.trace("Start processing ProfileDocumentUpdateRequest!"); + + RequestInfoUpdate requestInfoUpdate = profileDocumentServiceValidator.updateRequestValidation(request); + if (requestInfoUpdate != null) return requestInfoUpdate; + + CompanyErrors result = profileDocumentServiceFacade.update(request.getRequestPayload()); + if (result != null) { + return requestHelper.makeErrorResponse(request, result, request.getId()); + } + return null; + } + + public RequestInfoUpdate processDeleteProfileDocumentRequest(BaseRequest request) { + log.trace("Start processing CommonDeleteRequest!"); + + RequestInfoUpdate requestInfoUpdate = profileDocumentServiceValidator.deleteRequestValidation(request); + if (requestInfoUpdate != null) return requestInfoUpdate; + + CompanyErrors result = profileDocumentServiceFacade.delete(request.getRequestPayload()); + if (result != null) { + return requestHelper.makeErrorResponse(request, result, request.getId()); + } + return null; + } +} diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/listeners/RelationServiceListener.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/listeners/RelationServiceListener.java new file mode 100644 index 000000000..8eeeee516 --- /dev/null +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/listeners/RelationServiceListener.java @@ -0,0 +1,91 @@ +package ru.spcex.clearing.company.service.v2.listeners; + +import org.apache.kafka.clients.consumer.Consumer; +import org.apache.kafka.clients.producer.Producer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.stereotype.Service; +import ru.spcex.clearing.company.error.CompanyErrors; +import ru.spcex.clearing.company.service.v2.facade.RelationServiceFacade; +import ru.spcex.clearing.company.service.v2.validators.RelationServiceValidator; +import ru.spcex.clearing.platform.messaging.domain.BaseRequest; +import ru.spcex.clearing.platform.messaging.domain.Consts; +import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.RelationNewRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.RelationUpdateRequest; +import ru.spcex.clearing.platform.messaging.service.QueueConsumer; +import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate; +import ru.spcex.clearing.util.services.RequestHelper; + +@Service +public class RelationServiceListener extends QueueConsumer implements InitializingBean { + private final Logger log = LoggerFactory.getLogger(getClass()); + private final RelationServiceFacade relationServiceFacade; + private final RelationServiceValidator relationServiceValidator; + private final RequestHelper requestHelper; + + public RelationServiceListener(Consumer kafkaQueue, + Producer kafkaResponseQueue, + RelationServiceFacade relationServiceFacade, + RelationServiceValidator relationServiceValidator, + RequestHelper requestHelper) { + super(kafkaQueue, kafkaResponseQueue); + this.relationServiceFacade = relationServiceFacade; + this.relationServiceValidator = relationServiceValidator; + this.requestHelper = requestHelper; + } + + @Override + public void afterPropertiesSet() throws Exception { + callback(RelationNewRequest.class) + .setFunction(this::processNewRelationRequest) + .forDestination(Consts.DESTINATION_RELATION_NEW, callbacks::put); + callback(RelationUpdateRequest.class) + .setFunction(this::processUpdateRelationRequest) + .forDestination(Consts.DESTINATION_RELATION_UPDATE, callbacks::put); + callback(CommonDeleteRequest.class) + .setFunction(this::processDeleteRelationRequest) + .forDestination(Consts.DESTINATION_RELATION_DELETE, callbacks::put); + init(); + } + + public RequestInfoUpdate processNewRelationRequest(BaseRequest request) { + log.debug("relation-new request received, BaseRequest.id = {}", request.getId()); + + RequestInfoUpdate requestInfoUpdate = relationServiceValidator.createRequestValidation(request); + if (requestInfoUpdate != null) { + return requestInfoUpdate; + } + + CompanyErrors result = relationServiceFacade.create(request.getRequestPayload()); + if (result != null) { + return requestHelper.makeErrorResponse(request, result, request.getId()); + } + return null; + } + + public RequestInfoUpdate processUpdateRelationRequest(BaseRequest request) { + log.debug("relation-update request received, BaseRequest.id = {}", request.getId()); + + RequestInfoUpdate requestInfoUpdate = relationServiceValidator.updateRequestValidation(request); + if (requestInfoUpdate != null) { + return requestInfoUpdate; + } + + relationServiceFacade.update(request.getRequestPayload()); + return null; + } + + public RequestInfoUpdate processDeleteRelationRequest(BaseRequest request) { + log.debug("relation-delete request received, BaseRequest.id = {}", request.getId()); + + RequestInfoUpdate requestInfoUpdate = relationServiceValidator.deleteRequestValidation(request); + if (requestInfoUpdate != null) { + return requestInfoUpdate; + } + + relationServiceFacade.delete(request.getRequestPayload()); + return null; + } +} diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/listeners/SettlementHousePropertiesServiceListener.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/listeners/SettlementHousePropertiesServiceListener.java new file mode 100644 index 000000000..b50814a0e --- /dev/null +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/listeners/SettlementHousePropertiesServiceListener.java @@ -0,0 +1,92 @@ +package ru.spcex.clearing.company.service.v2.listeners; + +import org.apache.kafka.clients.consumer.Consumer; +import org.apache.kafka.clients.producer.Producer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.stereotype.Service; +import ru.spcex.clearing.company.error.CompanyErrors; +import ru.spcex.clearing.company.service.v2.facade.SettlementHousePropertiesServiceFacade; +import ru.spcex.clearing.company.service.v2.validators.SettlementHousePropertiesServiceValidator; +import ru.spcex.clearing.platform.messaging.domain.BaseRequest; +import ru.spcex.clearing.platform.messaging.domain.Consts; +import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.SettlementHousePropertyNewRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.SettlementHousePropertyUpdateRequest; +import ru.spcex.clearing.platform.messaging.service.QueueConsumer; +import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate; +import ru.spcex.clearing.util.services.RequestHelper; + +@Service +public class SettlementHousePropertiesServiceListener extends QueueConsumer implements InitializingBean { + private final Logger log = LoggerFactory.getLogger(getClass()); + private final SettlementHousePropertiesServiceFacade settlementHousePropertiesServiceFacade; + private final SettlementHousePropertiesServiceValidator settlementHousePropertiesServiceValidator; + private final RequestHelper requestHelper; + + public SettlementHousePropertiesServiceListener(Consumer kafkaQueue, + Producer kafkaResponseQueue, + SettlementHousePropertiesServiceFacade settlementHousePropertiesServiceFacade, + SettlementHousePropertiesServiceValidator settlementHousePropertiesServiceValidator, + RequestHelper requestHelper) { + super(kafkaQueue, kafkaResponseQueue); + this.settlementHousePropertiesServiceFacade = settlementHousePropertiesServiceFacade; + this.settlementHousePropertiesServiceValidator = settlementHousePropertiesServiceValidator; + this.requestHelper = requestHelper; + } + + @Override + public void afterPropertiesSet() throws Exception { + callback(SettlementHousePropertyNewRequest.class) + .setFunction(request -> requestHelper.requestFunction(this::processNewSettlementHousePropertyRequest, request)) + .forDestination(Consts.DESTINATION_SETTLEMENT_HOUSE_PROPERTY_NEW, callbacks::put); + callback(SettlementHousePropertyUpdateRequest.class) + .setConsumer(request -> requestHelper.requestFunction(this::processUpdateSettlementHousePropertyRequest, request)) + .forDestination(Consts.DESTINATION_SETTLEMENT_HOUSE_PROPERTY_UPDATE, callbacks::put); + callback(CommonDeleteRequest.class) + .setFunction(request -> requestHelper.requestFunction(this::processDeleteSettlementHousePropertyRequest, request)) + .forDestination(Consts.DESTINATION_SETTLEMENT_HOUSE_PROPERTY_DELETE + , callbacks::put); + init(); + } + + public RequestInfoUpdate processNewSettlementHousePropertyRequest(BaseRequest request) { + log.debug("SettlementHouseProperty-new request received, BaseRequest.id = {}", request.getId()); + + RequestInfoUpdate requestInfoUpdate = settlementHousePropertiesServiceValidator.createRequestValidation(request); + if (requestInfoUpdate != null) { + return requestInfoUpdate; + } + + settlementHousePropertiesServiceFacade.create(request.getRequestPayload()); + return null; + } + + public RequestInfoUpdate processUpdateSettlementHousePropertyRequest(BaseRequest request) { + log.debug("SettlementHouseProperty-update request received, BaseRequest.id = {}", request.getId()); + + RequestInfoUpdate requestInfoUpdate = settlementHousePropertiesServiceValidator.updateRequestValidation(request); + if (requestInfoUpdate != null) { + return requestInfoUpdate; + } + + settlementHousePropertiesServiceFacade.update(request.getRequestPayload()); + return null; + } + + public RequestInfoUpdate processDeleteSettlementHousePropertyRequest(BaseRequest request) { + log.debug("SettlementHousePropertyDeleteRequest received id = {}", request.getId()); + + RequestInfoUpdate requestInfoUpdate = settlementHousePropertiesServiceValidator.deleteRequestValidation(request); + if (requestInfoUpdate != null) { + return requestInfoUpdate; + } + + CompanyErrors result = settlementHousePropertiesServiceFacade.delete(request.getRequestPayload()); + if (result != null) { + return requestHelper.makeErrorResponse(request, result, request.getId()); + } + return null; + } +} diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/validators/ClearingMemberCategoryServiceValidator.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/validators/ClearingMemberCategoryServiceValidator.java new file mode 100644 index 000000000..6194cb983 --- /dev/null +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/validators/ClearingMemberCategoryServiceValidator.java @@ -0,0 +1,64 @@ +package ru.spcex.clearing.company.service.v2.validators; + +import java.util.function.Function; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Service; +import ru.spcex.clearing.platform.messaging.domain.BaseRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.ClearingMemberCategoryNewRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.ClearingMemberCategoryUpdateRequest; +import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate; +import ru.spcex.clearing.util.security.UserRoleVerification; +import ru.spcex.clearing.validation.common.ValidationHelper; +import ru.spcex.platform.utils.validation.IValidator; + +@Service +public class ClearingMemberCategoryServiceValidator { + private final Logger log = LoggerFactory.getLogger(getClass()); + private final ValidationHelper validationHelper; + private final UserRoleVerification userRoleVerification; + private final Function clearingMemberCategoryNewRequestValidator; + private final Function clearingMemberCategoryUpdateRequestValidator; + private final Function clearingMemberCategoryDeleteRequestValidator; + + public ClearingMemberCategoryServiceValidator(ValidationHelper validationHelper, + UserRoleVerification userRoleVerification, + @Qualifier("clearingMemberCategoryNewRequestValidator") + Function clearingMemberCategoryNewRequestValidator, + @Qualifier("clearingMemberCategoryUpdateRequestValidator") + Function clearingMemberCategoryUpdateRequestValidator, + @Qualifier("clearingMemberCategoryDeleteRequestValidator") + Function clearingMemberCategoryDeleteRequestValidator) { + this.validationHelper = validationHelper; + this.userRoleVerification = userRoleVerification; + this.clearingMemberCategoryNewRequestValidator = clearingMemberCategoryNewRequestValidator; + this.clearingMemberCategoryUpdateRequestValidator = clearingMemberCategoryUpdateRequestValidator; + this.clearingMemberCategoryDeleteRequestValidator = clearingMemberCategoryDeleteRequestValidator; + } + + public RequestInfoUpdate createRequestValidation(BaseRequest request) { + RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(request); + if (requestInfoUpdate != null) return requestInfoUpdate; + + requestInfoUpdate = validationHelper.validateTillFirstError(request, clearingMemberCategoryNewRequestValidator); + return requestInfoUpdate; + } + + public RequestInfoUpdate updateRequestValidation(BaseRequest request) { + RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(request); + if (requestInfoUpdate != null) return requestInfoUpdate; + + requestInfoUpdate = validationHelper.validateTillFirstError(request, clearingMemberCategoryUpdateRequestValidator); + return requestInfoUpdate; + } + + public RequestInfoUpdate deleteRequestValidation(BaseRequest request) { + RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(request); + if (requestInfoUpdate != null) return requestInfoUpdate; + + requestInfoUpdate = validationHelper.validateTillFirstError(request, clearingMemberCategoryDeleteRequestValidator); + return requestInfoUpdate; + } +} diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/validators/CompanyInfoServiceValidator.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/validators/CompanyInfoServiceValidator.java new file mode 100644 index 000000000..72ef250d6 --- /dev/null +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/validators/CompanyInfoServiceValidator.java @@ -0,0 +1,37 @@ +package ru.spcex.clearing.company.service.v2.validators; + +import java.util.function.Function; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Service; +import ru.spcex.clearing.platform.messaging.domain.BaseRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.CompanyInfoUpdateRequest; +import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate; +import ru.spcex.clearing.util.security.UserRoleVerification; +import ru.spcex.clearing.validation.common.ValidationHelper; +import ru.spcex.platform.utils.validation.IValidator; + +@Service +public class CompanyInfoServiceValidator { + private final UserRoleVerification userRoleVerification; + private final ValidationHelper validationHelper; + private final Function companyInfoUpdateRequestValidator; + + public CompanyInfoServiceValidator(UserRoleVerification userRoleVerification, + ValidationHelper validationHelper, + @Qualifier("CompanyInfoUpdateRequestValidator") + Function companyInfoUpdateRequestValidator) { + this.userRoleVerification = userRoleVerification; + this.validationHelper = validationHelper; + this.companyInfoUpdateRequestValidator = companyInfoUpdateRequestValidator; + } + + public RequestInfoUpdate updateRequestValidation(BaseRequest companyInfoReq) { + RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(companyInfoReq); + if (requestInfoUpdate != null) { + return requestInfoUpdate; + } + + requestInfoUpdate = validationHelper.validateTillFirstError(companyInfoReq, companyInfoUpdateRequestValidator); + return requestInfoUpdate; + } +} diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/validators/CompanyRoleSetServiceValidator.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/validators/CompanyRoleSetServiceValidator.java new file mode 100644 index 000000000..4f60be098 --- /dev/null +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/validators/CompanyRoleSetServiceValidator.java @@ -0,0 +1,64 @@ +package ru.spcex.clearing.company.service.v2.validators; + +import java.util.function.Function; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Service; +import ru.spcex.clearing.platform.messaging.domain.BaseRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.CompanyRoleSetNewRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.CompanyRoleSetUpdateRequest; +import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate; +import ru.spcex.clearing.util.security.UserRoleVerification; +import ru.spcex.clearing.validation.common.ValidationHelper; +import ru.spcex.platform.utils.validation.IValidator; + +@Service +public class CompanyRoleSetServiceValidator { + private final Logger log = LoggerFactory.getLogger(getClass()); + private final UserRoleVerification userRoleVerification; + private final ValidationHelper validationHelper; + private final Function companyRoleSetNewRequestValidator; + private final Function companyRoleSetUpdateRequestValidator; + private final Function companyRoleSetDeleteRequestValidator; + + public CompanyRoleSetServiceValidator(UserRoleVerification userRoleVerification, + ValidationHelper validationHelper, + @Qualifier("CompanyRoleSetNewRequestValidator") + Function companyRoleSetNewRequestValidator, + @Qualifier("CompanyRoleSetUpdateRequestValidator") + Function companyRoleSetUpdateRequestValidator, + @Qualifier("CompanyRoleSetDeleteRequestValidator") + Function companyRoleSetDeleteRequestValidator) { + this.userRoleVerification = userRoleVerification; + this.validationHelper = validationHelper; + this.companyRoleSetNewRequestValidator = companyRoleSetNewRequestValidator; + this.companyRoleSetUpdateRequestValidator = companyRoleSetUpdateRequestValidator; + this.companyRoleSetDeleteRequestValidator = companyRoleSetDeleteRequestValidator; + } + + public RequestInfoUpdate createRequestValidation(BaseRequest request) { + RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(request); + if (requestInfoUpdate != null) return requestInfoUpdate; + + requestInfoUpdate = validationHelper.validateTillFirstError(request, companyRoleSetNewRequestValidator); + return requestInfoUpdate; + } + + public RequestInfoUpdate updateRequestValidation(BaseRequest request) { + RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(request); + if (requestInfoUpdate != null) return requestInfoUpdate; + + requestInfoUpdate = validationHelper.validateTillFirstError(request, companyRoleSetUpdateRequestValidator); + return requestInfoUpdate; + } + + public RequestInfoUpdate deleteRequestValidation(BaseRequest request) { + RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(request); + if (requestInfoUpdate != null) return requestInfoUpdate; + + requestInfoUpdate = validationHelper.validateTillFirstError(request, companyRoleSetDeleteRequestValidator); + return requestInfoUpdate; + } +} diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/validators/CompanyServiceValidator.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/validators/CompanyServiceValidator.java index 8d961627f..513a60f7f 100644 --- a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/validators/CompanyServiceValidator.java +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/validators/CompanyServiceValidator.java @@ -20,7 +20,7 @@ public class CompanyServiceValidator { private final Function companyNewRequestValidator; private final Function companyUpdateRequestValidator; private final Function companyDeleteRequestValidator; - protected UserRoleVerification userRoleVerification; + private final UserRoleVerification userRoleVerification; public CompanyServiceValidator(ValidationHelper validationHelper, @Qualifier("companyNewRequestValidator") diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/validators/CompanySymbolServiceValidator.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/validators/CompanySymbolServiceValidator.java new file mode 100644 index 000000000..e5fa5da1a --- /dev/null +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/validators/CompanySymbolServiceValidator.java @@ -0,0 +1,66 @@ +package ru.spcex.clearing.company.service.v2.validators; + +import java.util.function.Function; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Service; +import ru.spcex.clearing.platform.messaging.domain.BaseRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.CompanySymbolNewRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.CompanySymbolUpdateRequest; +import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate; +import ru.spcex.clearing.util.security.UserRoleVerification; +import ru.spcex.clearing.validation.common.ValidationHelper; +import ru.spcex.platform.utils.validation.IValidator; + +@Service +public class CompanySymbolServiceValidator { + private final Logger log = LoggerFactory.getLogger(getClass()); + private final ValidationHelper validationHelper; + private final UserRoleVerification userRoleVerification; + private final Function companySymbolNewRequestValidator; + private final Function companySymbolUpdateRequestValidator; + private final Function companySymbolDeleteRequestValidator; + + public CompanySymbolServiceValidator(ValidationHelper validationHelper, + UserRoleVerification userRoleVerification, + @Qualifier("companySymbolNewRequestValidator") + Function companySymbolNewRequestValidator, + @Qualifier("companySymbolDeleteRequestValidator") + Function companySymbolDeleteRequestValidator, + @Qualifier("companySymbolUpdateRequestValidator") + Function companySymbolUpdateRequestValidator) { + this.validationHelper = validationHelper; + this.userRoleVerification = userRoleVerification; + this.companySymbolNewRequestValidator = companySymbolNewRequestValidator; + this.companySymbolUpdateRequestValidator = companySymbolUpdateRequestValidator; + this.companySymbolDeleteRequestValidator = companySymbolDeleteRequestValidator; + } + + public RequestInfoUpdate createRequestValidation(BaseRequest request) { + RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(request); + if (requestInfoUpdate != null) { + return requestInfoUpdate; + } + + requestInfoUpdate = validationHelper.validateTillFirstError(request, companySymbolNewRequestValidator); + return requestInfoUpdate; + } + + public RequestInfoUpdate updateRequestValidation(BaseRequest request) { + RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(request); + if (requestInfoUpdate != null) return requestInfoUpdate; + + requestInfoUpdate = validationHelper.validateTillFirstError(request, companySymbolUpdateRequestValidator); + return requestInfoUpdate; + } + + public RequestInfoUpdate deleteRequestValidation(BaseRequest request) { + RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(request); + if (requestInfoUpdate != null) return requestInfoUpdate; + + requestInfoUpdate = validationHelper.validateTillFirstError(request, companySymbolDeleteRequestValidator); + return requestInfoUpdate; + } +} diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/validators/ContactServiceValidator.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/validators/ContactServiceValidator.java new file mode 100644 index 000000000..277a88995 --- /dev/null +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/validators/ContactServiceValidator.java @@ -0,0 +1,64 @@ +package ru.spcex.clearing.company.service.v2.validators; + +import java.util.function.Function; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Service; +import ru.spcex.clearing.platform.messaging.domain.BaseRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.ContactNewRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.ContactUpdateRequest; +import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate; +import ru.spcex.clearing.util.security.UserRoleVerification; +import ru.spcex.clearing.validation.common.ValidationHelper; +import ru.spcex.platform.utils.validation.IValidator; + +@Service +public class ContactServiceValidator { + private final Logger log = LoggerFactory.getLogger(getClass()); + private final ValidationHelper validationHelper; + private final UserRoleVerification userRoleVerification; + private final Function contactNewRequestValidator; + private final Function contactUpdateRequestValidator; + private final Function contactDeleteRequestValidator; + + public ContactServiceValidator(ValidationHelper validationHelper, + UserRoleVerification userRoleVerification, + @Qualifier("contactNewRequestValidator") + Function contactNewRequestValidator, + @Qualifier("contactDeleteRequestValidator") + Function contactDeleteRequestValidator, + @Qualifier("contactUpdateRequestValidator") + Function contactUpdateRequestValidator) { + this.validationHelper = validationHelper; + this.userRoleVerification = userRoleVerification; + this.contactNewRequestValidator = contactNewRequestValidator; + this.contactUpdateRequestValidator = contactUpdateRequestValidator; + this.contactDeleteRequestValidator = contactDeleteRequestValidator; + } + + public RequestInfoUpdate createRequestValidation(BaseRequest request) { + RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(request); + if (requestInfoUpdate != null) return requestInfoUpdate; + + requestInfoUpdate = validationHelper.validateTillFirstError(request, contactNewRequestValidator); + return requestInfoUpdate; + } + + public RequestInfoUpdate updateRequestValidation(BaseRequest request) { + RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(request); + if (requestInfoUpdate != null) return requestInfoUpdate; + + requestInfoUpdate = validationHelper.validateTillFirstError(request, contactUpdateRequestValidator); + return requestInfoUpdate; + } + + public RequestInfoUpdate deleteRequestValidation(BaseRequest request) { + RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(request); + if (requestInfoUpdate != null) return requestInfoUpdate; + + requestInfoUpdate = validationHelper.validateTillFirstError(request, contactDeleteRequestValidator); + return requestInfoUpdate; + } +} diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/validators/MultiCompanyServiceValidator.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/validators/MultiCompanyServiceValidator.java deleted file mode 100644 index a1c63b57d..000000000 --- a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/validators/MultiCompanyServiceValidator.java +++ /dev/null @@ -1,19 +0,0 @@ -package ru.spcex.clearing.company.service.v2.validators; - -import org.springframework.stereotype.Service; -import ru.spcex.clearing.platform.messaging.domain.BaseRequest; -import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate; -import ru.spcex.clearing.util.security.UserRoleVerification; - -@Service -public class MultiCompanyServiceValidator { - protected UserRoleVerification userRoleVerification; - - public MultiCompanyServiceValidator(UserRoleVerification userRoleVerification) { - this.userRoleVerification = userRoleVerification; - } - - public RequestInfoUpdate baseRequestValidation(BaseRequest request) { - return userRoleVerification.validateRoleAndGetResult(request); - } -} diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/validators/ProfileDocumentServiceValidator.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/validators/ProfileDocumentServiceValidator.java new file mode 100644 index 000000000..d53267689 --- /dev/null +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/validators/ProfileDocumentServiceValidator.java @@ -0,0 +1,61 @@ +package ru.spcex.clearing.company.service.v2.validators; + +import java.util.function.Function; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Service; +import ru.spcex.clearing.platform.messaging.domain.BaseRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.ProfileDocumentNewRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.ProfileDocumentUpdateRequest; +import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate; +import ru.spcex.clearing.util.security.UserRoleVerification; +import ru.spcex.clearing.validation.common.ValidationHelper; +import ru.spcex.platform.utils.validation.IValidator; + +@Service +public class ProfileDocumentServiceValidator { + private final Logger log = LoggerFactory.getLogger(getClass()); + private final UserRoleVerification userRoleVerification; + private final ValidationHelper validationHelper; + private final Function profileDocumentNewRequestValidator; + private final Function profileDocumentUpdateRequestValidator; + private final Function profileDocumentDeleteRequestValidator; + + public ProfileDocumentServiceValidator(UserRoleVerification userRoleVerification, + ValidationHelper validationHelper, + @Qualifier("profileDocumentNewRequestValidation") + Function profileDocumentNewRequestValidator, + @Qualifier("profileDocumentUpdateRequestValidation") + Function profileDocumentUpdateRequestValidator, + @Qualifier("profileDocumentDeleteRequestValidation") + Function profileDocumentDeleteRequestValidator) { + this.userRoleVerification = userRoleVerification; + this.validationHelper = validationHelper; + this.profileDocumentNewRequestValidator = profileDocumentNewRequestValidator; + this.profileDocumentUpdateRequestValidator = profileDocumentUpdateRequestValidator; + this.profileDocumentDeleteRequestValidator = profileDocumentDeleteRequestValidator; + } + + public RequestInfoUpdate createRequestValidation(BaseRequest request) { + RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(request); + if (requestInfoUpdate != null) return requestInfoUpdate; + + return validationHelper.validateTillFirstError(request, profileDocumentNewRequestValidator); + } + + public RequestInfoUpdate updateRequestValidation(BaseRequest request) { + RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(request); + if (requestInfoUpdate != null) return requestInfoUpdate; + + return validationHelper.validateTillFirstError(request, profileDocumentUpdateRequestValidator); + } + + public RequestInfoUpdate deleteRequestValidation(BaseRequest request) { + RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(request); + if (requestInfoUpdate != null) return requestInfoUpdate; + + return validationHelper.validateTillFirstError(request, profileDocumentDeleteRequestValidator); + } +} diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/validators/RelationServiceValidator.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/validators/RelationServiceValidator.java new file mode 100644 index 000000000..cc631cec8 --- /dev/null +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/validators/RelationServiceValidator.java @@ -0,0 +1,64 @@ +package ru.spcex.clearing.company.service.v2.validators; + +import java.util.function.Function; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Service; +import ru.spcex.clearing.platform.messaging.domain.BaseRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.RelationNewRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.RelationUpdateRequest; +import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate; +import ru.spcex.clearing.util.security.UserRoleVerification; +import ru.spcex.clearing.validation.common.ValidationHelper; +import ru.spcex.platform.utils.validation.IValidator; + +@Service +public class RelationServiceValidator { + private final Logger log = LoggerFactory.getLogger(getClass()); + private final UserRoleVerification userRoleVerification; + private final ValidationHelper validationHelper; + private final Function relationNewRequestValidator; + private final Function relationUpdateRequestValidator; + private final Function relationDeleteRequestValidator; + + public RelationServiceValidator(UserRoleVerification userRoleVerification, + ValidationHelper validationHelper, + @Qualifier("relationNewRequestValidation") + Function relationNewRequestValidator, + @Qualifier("relationUpdateRequestValidation") + Function relationUpdateRequestValidator, + @Qualifier("relationDeleteRequestValidation") + Function relationDeleteRequestValidator) { + this.userRoleVerification = userRoleVerification; + this.validationHelper = validationHelper; + this.relationNewRequestValidator = relationNewRequestValidator; + this.relationUpdateRequestValidator = relationUpdateRequestValidator; + this.relationDeleteRequestValidator = relationDeleteRequestValidator; + } + + public RequestInfoUpdate createRequestValidation(BaseRequest request) { + RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(request); + if (requestInfoUpdate != null) return requestInfoUpdate; + + requestInfoUpdate = validationHelper.validateTillFirstError(request, relationNewRequestValidator); + return requestInfoUpdate; + } + + public RequestInfoUpdate updateRequestValidation(BaseRequest request) { + RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(request); + if (requestInfoUpdate != null) return requestInfoUpdate; + + requestInfoUpdate = validationHelper.validateTillFirstError(request, relationUpdateRequestValidator); + return requestInfoUpdate; + } + + public RequestInfoUpdate deleteRequestValidation(BaseRequest request) { + RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(request); + if (requestInfoUpdate != null) return requestInfoUpdate; + + requestInfoUpdate = validationHelper.validateTillFirstError(request, relationDeleteRequestValidator); + return requestInfoUpdate; + } +} diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/validators/SettlementHousePropertiesServiceValidator.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/validators/SettlementHousePropertiesServiceValidator.java new file mode 100644 index 000000000..bb94615ff --- /dev/null +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/v2/validators/SettlementHousePropertiesServiceValidator.java @@ -0,0 +1,64 @@ +package ru.spcex.clearing.company.service.v2.validators; + +import java.util.function.Function; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Service; +import ru.spcex.clearing.platform.messaging.domain.BaseRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.SettlementHousePropertyNewRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.SettlementHousePropertyUpdateRequest; +import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate; +import ru.spcex.clearing.util.security.UserRoleVerification; +import ru.spcex.clearing.validation.common.ValidationHelper; +import ru.spcex.platform.utils.validation.IValidator; + +@Service +public class SettlementHousePropertiesServiceValidator { + private final Logger log = LoggerFactory.getLogger(getClass()); + private final UserRoleVerification userRoleVerification; + private final ValidationHelper validationHelper; + private final Function settlementHousePropertyNewRequestValidator; + private final Function settlementHousePropertyUpdateRequestRequestValidator; + private final Function settlementHousePropertiesDeleteRequestValidator; + + public SettlementHousePropertiesServiceValidator(UserRoleVerification userRoleVerification, + ValidationHelper validationHelper, + @Qualifier("SettlementHousePropertyNewRequestValidator") + Function settlementHousePropertyNewRequestValidator, + @Qualifier("SettlementHousePropertyUpdateRequestValidator") + Function settlementHousePropertyUpdateRequestRequestValidator, + @Qualifier("SettlementHousePropertiesDeleteRequestValidator") + Function settlementHousePropertiesDeleteRequestValidator) { + this.userRoleVerification = userRoleVerification; + this.validationHelper = validationHelper; + this.settlementHousePropertyNewRequestValidator = settlementHousePropertyNewRequestValidator; + this.settlementHousePropertyUpdateRequestRequestValidator = settlementHousePropertyUpdateRequestRequestValidator; + this.settlementHousePropertiesDeleteRequestValidator = settlementHousePropertiesDeleteRequestValidator; + } + + public RequestInfoUpdate createRequestValidation(BaseRequest request) { + RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(request); + if (requestInfoUpdate != null) return requestInfoUpdate; + + requestInfoUpdate = validationHelper.validateTillFirstError(request, settlementHousePropertyNewRequestValidator); + return requestInfoUpdate; + } + + public RequestInfoUpdate updateRequestValidation(BaseRequest request) { + RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(request); + if (requestInfoUpdate != null) return requestInfoUpdate; + + requestInfoUpdate = validationHelper.validateTillFirstError(request, settlementHousePropertyUpdateRequestRequestValidator); + return requestInfoUpdate; + } + + public RequestInfoUpdate deleteRequestValidation(BaseRequest request) { + RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(request); + if (requestInfoUpdate != null) return requestInfoUpdate; + + requestInfoUpdate = validationHelper.validateTillFirstError(request, settlementHousePropertiesDeleteRequestValidator); + return requestInfoUpdate; + } +} diff --git a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/ClearingMemberCategoryServiceTest.java b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/ClearingMemberCategoryServiceTest.java index 3767a109c..1eacca314 100644 --- a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/ClearingMemberCategoryServiceTest.java +++ b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/ClearingMemberCategoryServiceTest.java @@ -3,6 +3,7 @@ package ru.spcex.clearing.company.service; import org.apache.kafka.clients.consumer.MockConsumer; import org.apache.kafka.clients.producer.Producer; import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -35,6 +36,8 @@ import static ru.spcex.clearing.test.TestUtils.*; import static ru.spcex.clearing.test.config.ImdgTestConfig.currentID; import static ru.spcex.clearing.test.config.ImdgTestConfig.waitAvailableImdgProviderAndAddAdminWithDefaultId; +@Deprecated +@Disabled @ExtendWith(SpringExtension.class) @ContextConfiguration(classes = { BeanConfiguration.class, diff --git a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/CompanyInfoServiceTest.java b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/CompanyInfoServiceTest.java index bf5cdf895..0afbf1364 100644 --- a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/CompanyInfoServiceTest.java +++ b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/CompanyInfoServiceTest.java @@ -2,6 +2,7 @@ package ru.spcex.clearing.company.service; import org.apache.kafka.clients.consumer.MockConsumer; import org.apache.kafka.clients.producer.Producer; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -33,6 +34,8 @@ import static ru.spcex.clearing.test.MatcherFactory.usingIgnoringFieldsComparato import static ru.spcex.clearing.test.TestUtils.*; import static ru.spcex.clearing.test.config.ImdgTestConfig.waitAvailableImdgProviderAndAddAdminWithDefaultId; +@Deprecated +@Disabled @ExtendWith(SpringExtension.class) @ContextConfiguration(classes = { CompanyInfoService.class, diff --git a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/CompanyRoleSetServiceTest.java b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/CompanyRoleSetServiceTest.java index a0ab540bc..075af246f 100644 --- a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/CompanyRoleSetServiceTest.java +++ b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/CompanyRoleSetServiceTest.java @@ -42,6 +42,8 @@ import static ru.spcex.clearing.test.MatcherFactory.usingIgnoringFieldsComparato import static ru.spcex.clearing.test.TestUtils.*; import static ru.spcex.clearing.test.config.ImdgTestConfig.waitAvailableImdgProviderAndAddAdminWithDefaultId; +@Deprecated +@Disabled @ExtendWith(SpringExtension.class) @ContextConfiguration(classes = { CompanyRoleSetService.class, diff --git a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/CompanyServiceTest.java b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/CompanyServiceTest.java index 02ea80e91..f69ce6efe 100644 --- a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/CompanyServiceTest.java +++ b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/CompanyServiceTest.java @@ -3,6 +3,7 @@ package ru.spcex.clearing.company.service; import org.apache.kafka.clients.consumer.MockConsumer; import org.apache.kafka.clients.producer.Producer; import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -42,6 +43,7 @@ import static ru.spcex.clearing.test.TestUtils.*; import static ru.spcex.clearing.test.config.ImdgTestConfig.waitAvailableImdgProviderAndAddAdminWithDefaultId; @Deprecated +@Disabled @ExtendWith(SpringExtension.class) @ContextConfiguration(classes = { CompanyService.class, diff --git a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/CompanySymbolServiceTest.java b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/CompanySymbolServiceTest.java index dffd3056f..3b27eca70 100644 --- a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/CompanySymbolServiceTest.java +++ b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/CompanySymbolServiceTest.java @@ -2,6 +2,7 @@ package ru.spcex.clearing.company.service; import org.apache.kafka.clients.consumer.MockConsumer; import org.apache.kafka.clients.producer.Producer; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -33,6 +34,8 @@ import static ru.spcex.clearing.test.MatcherFactory.usingIgnoringFieldsComparato import static ru.spcex.clearing.test.TestUtils.*; import static ru.spcex.clearing.test.config.ImdgTestConfig.waitAvailableImdgProviderAndAddAdminWithDefaultId; +@Deprecated +@Disabled @ExtendWith(SpringExtension.class) @ContextConfiguration(classes = { CompanySymbolService.class, diff --git a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/ContactServiceTest.java b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/ContactServiceTest.java index 631608641..ea5e89533 100644 --- a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/ContactServiceTest.java +++ b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/ContactServiceTest.java @@ -2,6 +2,7 @@ package ru.spcex.clearing.company.service; import org.apache.kafka.clients.consumer.MockConsumer; import org.apache.kafka.clients.producer.Producer; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -33,6 +34,8 @@ import static ru.spcex.clearing.test.MatcherFactory.usingIgnoringFieldsComparato import static ru.spcex.clearing.test.TestUtils.*; import static ru.spcex.clearing.test.config.ImdgTestConfig.waitAvailableImdgProviderAndAddAdminWithDefaultId; +@Deprecated +@Disabled @ExtendWith(SpringExtension.class) @ContextConfiguration(classes = { BeanConfiguration.class, diff --git a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/MultiCompanyServiceTest.java b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/MultiCompanyServiceTest.java index fb00ec215..d6597d69f 100644 --- a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/MultiCompanyServiceTest.java +++ b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/MultiCompanyServiceTest.java @@ -1,38 +1,22 @@ package ru.spcex.clearing.company.service; -import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; -import ru.clearing.classes.statics.data.company.Company; -import ru.clearing.classes.statics.data.company.CompanySymbols; -import ru.clearing.classes.statics.data.profile.Contact; -import ru.clearing.classes.statics.data.profile.ProfileDocument; -import ru.clearing.platform.dictionary.CompanySymbolDictionary; import ru.spcex.clearing.company.config.BeanConfiguration; -import ru.spcex.clearing.company.config.validation.*; -import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.platform.messaging.domain.cud.company.*; +import ru.spcex.clearing.company.config.validation.ClearingMemberCategoryValidationConfig; +import ru.spcex.clearing.company.config.validation.CompanySymbolValidationConfig; +import ru.spcex.clearing.company.config.validation.CompanyValidationConfig; +import ru.spcex.clearing.company.config.validation.ContactValidationConfig; +import ru.spcex.clearing.company.config.validation.ProfileDocumentValidationConfig; +import ru.spcex.clearing.company.config.validation.RelationValidationConfig; +import ru.spcex.clearing.company.config.validation.ValidationConfig; import ru.spcex.clearing.test.config.ImdgTestConfig; import ru.spcex.clearing.test.config.KafkaTestConfig; -import ru.spcex.platform.enumeration.CompanySymbol; -import ru.spcex.platform.enumeration.ContactTypes; -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 javax.annotation.PostConstruct; -import java.time.LocalDate; -import java.util.ArrayList; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.*; -import static ru.spcex.clearing.test.config.ImdgTestConfig.waitAvailableImdgProviderAndAddAdminWithDefaultId; @Deprecated +@Disabled @ExtendWith(SpringExtension.class) @ContextConfiguration(classes = { MultiCompanyService.class, @@ -58,158 +42,158 @@ import static ru.spcex.clearing.test.config.ImdgTestConfig.waitAvailableImdgProv ImdgTestConfig.class, BeanConfiguration.class}) class MultiCompanyServiceTest { - final Long COMPANY_ID = 123L; - - @Autowired - protected MultiCompanyService multiCompanyService; - - @Autowired - @Qualifier("hazelcastServiceTest") - private ImdgProvider hazelcastServiceTest; - - @PostConstruct - private void init() { - waitAvailableImdgProviderAndAddAdminWithDefaultId(); - Imdg companyImdg = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_Company, Company.class); - Imdg companySymbolsImdg = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class); - - Company company = new Company(); - company.setId(COMPANY_ID); - company.setWorkflowStatus(WorkflowStatus.Active.getKey()); - company.setFullName("Test company prime"); - companyImdg.insert(company); - - - Imdg companySymbolDictionaryImdg = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_CompanySymbolDictionary, CompanySymbolDictionary.class); - { - CompanySymbolDictionary cSymbol = new CompanySymbolDictionary(); - cSymbol.setId(11L); - cSymbol.setCode(CompanySymbol.CLRC.getKey()); - cSymbol.setName(CompanySymbol.CLRC.getKey()); - cSymbol.setShortname(" CLRC key"); - companySymbolDictionaryImdg.insert(cSymbol); - CompanySymbolDictionary cioSymbol = new CompanySymbolDictionary(); - cioSymbol.setId(22L); - cioSymbol.setCode(CompanySymbol.CIO.getKey()); - cioSymbol.setName(CompanySymbol.CIO.getKey()); - companySymbolDictionaryImdg.insert(cioSymbol); - } - - Imdg contactImdg = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_Contact, Contact.class); - Contact contact = new Contact(); - contact.setId(100L); - contact.setCompanyId(company.getId()); - contact.setContactType(ContactTypes.adrs.getKey()); - contact.setContactValue("UAR, st.Uarus, anystreet st., house 1"); - contactImdg.insert(contact); - - CompanySymbols companySymbol = new CompanySymbols(); - companySymbol.setId(222L); - companySymbol.setCompanyId(company.getId()); - companySymbol.setCompanySymbol(CompanySymbol.INN.getKey()); - companySymbol.setCompanySymbolValue("INN-VALUE"); - companySymbolsImdg.insert(companySymbol); - - Imdg profileDocumentImdg = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_ProfileDocument, ProfileDocument.class); - ProfileDocument doc = new ProfileDocument(); - doc.setId(10002L); - doc.setCompanyId(COMPANY_ID); - doc.setDocumentType(DocumentTypes.form.getKey()); - doc.setIssueDate(LocalDate.now()); // тест может показать ложное срабатывание в 00:00:00.001 - profileDocumentImdg.insert(doc); - } - - @Test - void findCompanyDocument() { - ProfileDocumentNewRequest req = new ProfileDocumentNewRequest(); - req.setCompanyId(COMPANY_ID); - req.setDocumentType(DocumentTypes.form.getKey()); - req.setIssueDate(LocalDate.now()); - ProfileDocument doc = multiCompanyService.findCompanyDocument(req); - assertNotNull(doc); - } - - @Test - void findCompanySymbols() { - CompanySymbolNewRequest req = new CompanySymbolNewRequest(); - req.setCompanyId(COMPANY_ID); - req.setCompanySymbol(CompanySymbol.CLRC.getKey()); - req.setCompanySymbolValue("CL-VALUE-2"); - assertNull(multiCompanyService.findCompanySymbols(req)); - - req.setCompanySymbol(CompanySymbol.INN.getKey()); - req.setCompanySymbolValue("INN-VALUE"); - CompanySymbols symbol = multiCompanyService.findCompanySymbols(req); - assertNotNull(symbol); - assertEquals("INN-VALUE", symbol.getCompanySymbolValue()); - } - - @Test - void findContact() { - ContactNewRequest req = new ContactNewRequest(); - req.setCompanyId(COMPANY_ID); - req.setContactType(ContactTypes.adrs.getKey()); - req.setContactValue("UAR, st.Uarus, anystreet st., house 2"); - Contact contact = multiCompanyService.findContact(req); - assertNotNull(contact); - assertNotEquals(req.getContactValue(), contact.getContactValue()); - } - - @Test - void getCompanyIdForCompanySymbols() { - CompanyNewRequest req = new CompanyNewRequest(); - req.setCompanySymbol(CompanySymbol.CLRC.getKey()); - req.setCompanySymbolValue("CL-VALUE"); - assertNull(multiCompanyService.getCompanyIdForCompanySymbols("SAMPLE-NO-uuid", req, null)); - - req.setCompanySymbolValue("INN-VALUE"); - assertNull(multiCompanyService.getCompanyIdForCompanySymbols("SAMPLE-NO-uuid", req, null)); - req.setCompanySymbol(CompanySymbol.INN.getKey()); - assertEquals(COMPANY_ID, multiCompanyService.getCompanyIdForCompanySymbols("SAMPLE-NO-uuid", req, null)); - req.setCompanySymbol(null); - req.setCompanySymbolValue(null); - assertNull(multiCompanyService.getCompanyIdForCompanySymbols(null, req, null)); - List csReq=new ArrayList<>(); - assertNull(multiCompanyService.getCompanyIdForCompanySymbols(null, req, null)); - assertNull(multiCompanyService.getCompanyIdForCompanySymbols(null, req, csReq)); - { - CompanySymbolNewRequest cs=new CompanySymbolNewRequest(); - cs.setCompanySymbol(CompanySymbol.CLRC.getKey()); - cs.setCompanySymbolValue("INN-VALUE"); - csReq.add(cs); - } - assertNull(multiCompanyService.getCompanyIdForCompanySymbols(null, req, csReq)); - { - CompanySymbolNewRequest cs=new CompanySymbolNewRequest(); - cs.setCompanySymbol(CompanySymbol.INN.getKey()); - cs.setCompanySymbolValue("INN-VALUE"); - csReq.add(cs); - } - assertEquals(COMPANY_ID, multiCompanyService.getCompanyIdForCompanySymbols(null, req, csReq)); - } - - @Test - void fillCompanyId() { - { - CompanyGatewayRequest testReq = new CompanyGatewayRequest(); - testReq.setCompany(new CompanyNewRequest()); - testReq.setProfileDocuments(null); - testReq.setCompanySymbols(null); - testReq.setContacts(null); - testReq.setClientCodes(null); - multiCompanyService.fillCompanyId(testReq, COMPANY_ID); - assertEquals(COMPANY_ID, testReq.getCompany().getId()); - assertNotNull(testReq.getProfileDocuments()); - assertNotNull(testReq.getCompanySymbols()); - assertNotNull(testReq.getContacts()); - assertNotNull(testReq.getClientCodes()); - } - { - CompanyGatewayRequest testReq = new CompanyGatewayRequest(); - testReq.setCompany(new CompanyNewRequest()); - testReq.setCompanyInfo(new CompanyInfoUpdateRequest()); - multiCompanyService.fillCompanyId(testReq, COMPANY_ID); - assertEquals(COMPANY_ID, testReq.getCompany().getId()); - } - } +// final Long COMPANY_ID = 123L; +// +// @Autowired +// protected MultiCompanyService multiCompanyService; +// +// @Autowired +// @Qualifier("hazelcastServiceTest") +// private ImdgProvider hazelcastServiceTest; +// +// @PostConstruct +// private void init() { +// waitAvailableImdgProviderAndAddAdminWithDefaultId(); +// Imdg companyImdg = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_Company, Company.class); +// Imdg companySymbolsImdg = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class); +// +// Company company = new Company(); +// company.setId(COMPANY_ID); +// company.setWorkflowStatus(WorkflowStatus.Active.getKey()); +// company.setFullName("Test company prime"); +// companyImdg.insert(company); +// +// +// Imdg companySymbolDictionaryImdg = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_CompanySymbolDictionary, CompanySymbolDictionary.class); +// { +// CompanySymbolDictionary cSymbol = new CompanySymbolDictionary(); +// cSymbol.setId(11L); +// cSymbol.setCode(CompanySymbol.CLRC.getKey()); +// cSymbol.setName(CompanySymbol.CLRC.getKey()); +// cSymbol.setShortname(" CLRC key"); +// companySymbolDictionaryImdg.insert(cSymbol); +// CompanySymbolDictionary cioSymbol = new CompanySymbolDictionary(); +// cioSymbol.setId(22L); +// cioSymbol.setCode(CompanySymbol.CIO.getKey()); +// cioSymbol.setName(CompanySymbol.CIO.getKey()); +// companySymbolDictionaryImdg.insert(cioSymbol); +// } +// +// Imdg contactImdg = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_Contact, Contact.class); +// Contact contact = new Contact(); +// contact.setId(100L); +// contact.setCompanyId(company.getId()); +// contact.setContactType(ContactTypes.adrs.getKey()); +// contact.setContactValue("UAR, st.Uarus, anystreet st., house 1"); +// contactImdg.insert(contact); +// +// CompanySymbols companySymbol = new CompanySymbols(); +// companySymbol.setId(222L); +// companySymbol.setCompanyId(company.getId()); +// companySymbol.setCompanySymbol(CompanySymbol.INN.getKey()); +// companySymbol.setCompanySymbolValue("INN-VALUE"); +// companySymbolsImdg.insert(companySymbol); +// +// Imdg profileDocumentImdg = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_ProfileDocument, ProfileDocument.class); +// ProfileDocument doc = new ProfileDocument(); +// doc.setId(10002L); +// doc.setCompanyId(COMPANY_ID); +// doc.setDocumentType(DocumentTypes.form.getKey()); +// doc.setIssueDate(LocalDate.now()); // тест может показать ложное срабатывание в 00:00:00.001 +// profileDocumentImdg.insert(doc); +// } +// +// @Test +// void findCompanyDocument() { +// ProfileDocumentNewRequest req = new ProfileDocumentNewRequest(); +// req.setCompanyId(COMPANY_ID); +// req.setDocumentType(DocumentTypes.form.getKey()); +// req.setIssueDate(LocalDate.now()); +// ProfileDocument doc = multiCompanyService.findCompanyDocument(req); +// assertNotNull(doc); +// } +// +// @Test +// void findCompanySymbols() { +// CompanySymbolNewRequest req = new CompanySymbolNewRequest(); +// req.setCompanyId(COMPANY_ID); +// req.setCompanySymbol(CompanySymbol.CLRC.getKey()); +// req.setCompanySymbolValue("CL-VALUE-2"); +// assertNull(multiCompanyService.findCompanySymbols(req)); +// +// req.setCompanySymbol(CompanySymbol.INN.getKey()); +// req.setCompanySymbolValue("INN-VALUE"); +// CompanySymbols symbol = multiCompanyService.findCompanySymbols(req); +// assertNotNull(symbol); +// assertEquals("INN-VALUE", symbol.getCompanySymbolValue()); +// } +// +// @Test +// void findContact() { +// ContactNewRequest req = new ContactNewRequest(); +// req.setCompanyId(COMPANY_ID); +// req.setContactType(ContactTypes.adrs.getKey()); +// req.setContactValue("UAR, st.Uarus, anystreet st., house 2"); +// Contact contact = multiCompanyService.findContact(req); +// assertNotNull(contact); +// assertNotEquals(req.getContactValue(), contact.getContactValue()); +// } +// +// @Test +// void getCompanyIdForCompanySymbols() { +// CompanyNewRequest req = new CompanyNewRequest(); +// req.setCompanySymbol(CompanySymbol.CLRC.getKey()); +// req.setCompanySymbolValue("CL-VALUE"); +// assertNull(multiCompanyService.getCompanyIdForCompanySymbols("SAMPLE-NO-uuid", req, null)); +// +// req.setCompanySymbolValue("INN-VALUE"); +// assertNull(multiCompanyService.getCompanyIdForCompanySymbols("SAMPLE-NO-uuid", req, null)); +// req.setCompanySymbol(CompanySymbol.INN.getKey()); +// assertEquals(COMPANY_ID, multiCompanyService.getCompanyIdForCompanySymbols("SAMPLE-NO-uuid", req, null)); +// req.setCompanySymbol(null); +// req.setCompanySymbolValue(null); +// assertNull(multiCompanyService.getCompanyIdForCompanySymbols(null, req, null)); +// List csReq=new ArrayList<>(); +// assertNull(multiCompanyService.getCompanyIdForCompanySymbols(null, req, null)); +// assertNull(multiCompanyService.getCompanyIdForCompanySymbols(null, req, csReq)); +// { +// CompanySymbolNewRequest cs=new CompanySymbolNewRequest(); +// cs.setCompanySymbol(CompanySymbol.CLRC.getKey()); +// cs.setCompanySymbolValue("INN-VALUE"); +// csReq.add(cs); +// } +// assertNull(multiCompanyService.getCompanyIdForCompanySymbols(null, req, csReq)); +// { +// CompanySymbolNewRequest cs=new CompanySymbolNewRequest(); +// cs.setCompanySymbol(CompanySymbol.INN.getKey()); +// cs.setCompanySymbolValue("INN-VALUE"); +// csReq.add(cs); +// } +// assertEquals(COMPANY_ID, multiCompanyService.getCompanyIdForCompanySymbols(null, req, csReq)); +// } +// +// @Test +// void fillCompanyId() { +// { +// CompanyGatewayRequest testReq = new CompanyGatewayRequest(); +// testReq.setCompany(new CompanyNewRequest()); +// testReq.setProfileDocuments(null); +// testReq.setCompanySymbols(null); +// testReq.setContacts(null); +// testReq.setClientCodes(null); +// multiCompanyService.fillCompanyId(testReq, COMPANY_ID); +// assertEquals(COMPANY_ID, testReq.getCompany().getId()); +// assertNotNull(testReq.getProfileDocuments()); +// assertNotNull(testReq.getCompanySymbols()); +// assertNotNull(testReq.getContacts()); +// assertNotNull(testReq.getClientCodes()); +// } +// { +// CompanyGatewayRequest testReq = new CompanyGatewayRequest(); +// testReq.setCompany(new CompanyNewRequest()); +// testReq.setCompanyInfo(new CompanyInfoUpdateRequest()); +// multiCompanyService.fillCompanyId(testReq, COMPANY_ID); +// assertEquals(COMPANY_ID, testReq.getCompany().getId()); +// } +// } } \ No newline at end of file diff --git a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/ProfileDocumentServiceTest.java b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/ProfileDocumentServiceTest.java index acf59e7d6..f574cf2a5 100644 --- a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/ProfileDocumentServiceTest.java +++ b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/ProfileDocumentServiceTest.java @@ -3,6 +3,7 @@ package ru.spcex.clearing.company.service; import org.apache.kafka.clients.consumer.MockConsumer; import org.apache.kafka.clients.producer.Producer; import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -37,6 +38,8 @@ import static ru.spcex.clearing.test.TestUtils.*; import static ru.spcex.clearing.test.config.ImdgTestConfig.currentID; import static ru.spcex.clearing.test.config.ImdgTestConfig.waitAvailableImdgProviderAndAddAdminWithDefaultId; +@Deprecated +@Disabled @ExtendWith(SpringExtension.class) @ContextConfiguration(classes = { BeanConfiguration.class, diff --git a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/RelationServiceTest.java b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/RelationServiceTest.java index 520291439..a0cf1c327 100644 --- a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/RelationServiceTest.java +++ b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/RelationServiceTest.java @@ -2,6 +2,7 @@ package ru.spcex.clearing.company.service; import org.apache.kafka.clients.consumer.MockConsumer; import org.apache.kafka.clients.producer.Producer; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -37,6 +38,8 @@ import static ru.spcex.clearing.test.TestUtils.*; import static ru.spcex.clearing.test.config.ImdgTestConfig.currentID; import static ru.spcex.clearing.test.config.ImdgTestConfig.waitAvailableImdgProviderAndAddAdminWithDefaultId; +@Deprecated +@Disabled @ExtendWith(SpringExtension.class) @ContextConfiguration(classes = { BeanConfiguration.class, diff --git a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/SettlementHousePropertiesServiceTest.java b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/SettlementHousePropertiesServiceTest.java index 760d4917d..92e6047af 100644 --- a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/SettlementHousePropertiesServiceTest.java +++ b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/SettlementHousePropertiesServiceTest.java @@ -3,6 +3,7 @@ package ru.spcex.clearing.company.service; import org.apache.kafka.clients.consumer.MockConsumer; import org.apache.kafka.clients.producer.Producer; import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -44,6 +45,8 @@ import static ru.spcex.clearing.test.MatcherFactory.usingIgnoringFieldsComparato import static ru.spcex.clearing.test.TestUtils.*; import static ru.spcex.clearing.test.config.ImdgTestConfig.waitAvailableImdgProviderAndAddAdminWithDefaultId; +@Deprecated +@Disabled @ExtendWith(SpringExtension.class) @ContextConfiguration(classes = { SettlementHousePropertiesService.class, diff --git a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/v2/ClearingMemberCategoryServiceListenerTest.java b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/v2/ClearingMemberCategoryServiceListenerTest.java new file mode 100644 index 000000000..b86f1560f --- /dev/null +++ b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/v2/ClearingMemberCategoryServiceListenerTest.java @@ -0,0 +1,210 @@ +package ru.spcex.clearing.company.service.v2; + +import static ru.spcex.clearing.test.MatcherFactory.usingIgnoringFieldsComparator; +import static ru.spcex.clearing.test.TestUtils.addRecordToKafka; +import static ru.spcex.clearing.test.TestUtils.getJsonStringForDelete; +import static ru.spcex.clearing.test.TestUtils.getJsonStringForNew; +import static ru.spcex.clearing.test.TestUtils.getJsonStringForUpdate; +import static ru.spcex.clearing.test.TestUtils.waitingSendAndCheckRecord; +import static ru.spcex.clearing.test.config.ImdgTestConfig.currentID; +import static ru.spcex.clearing.test.config.ImdgTestConfig.waitAvailableImdgProviderAndAddAdminWithDefaultId; + +import javax.annotation.PostConstruct; +import org.apache.kafka.clients.consumer.MockConsumer; +import org.apache.kafka.clients.producer.Producer; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit.jupiter.SpringExtension; +import ru.clearing.classes.statics.data.company.ClearingMemberCategory; +import ru.clearing.classes.statics.data.company.Company; +import ru.clearing.platform.dictionary.ClearingCategoryDictionary; +import ru.spcex.clearing.company.config.BeanConfiguration; +import ru.spcex.clearing.company.config.validation.ClearingMemberCategoryValidationConfig; +import ru.spcex.clearing.company.config.validation.CompanySymbolValidationConfig; +import ru.spcex.clearing.company.config.validation.CompanyValidationConfig; +import ru.spcex.clearing.company.config.validation.RelationValidationConfig; +import ru.spcex.clearing.company.config.validation.ValidationConfig; +import ru.spcex.clearing.company.service.AccountNotificationHelper; +import ru.spcex.clearing.company.service.v2.facade.ClearingMemberCategoryServiceFacade; +import ru.spcex.clearing.company.service.v2.facade.CompanyInfoServiceFacade; +import ru.spcex.clearing.company.service.v2.facade.CompanyServiceFacade; +import ru.spcex.clearing.company.service.v2.facade.CompanySymbolServiceFacade; +import ru.spcex.clearing.company.service.v2.facade.ContactServiceFacade; +import ru.spcex.clearing.company.service.v2.facade.ProfileDocumentServiceFacade; +import ru.spcex.clearing.company.service.v2.facade.RelationServiceFacade; +import ru.spcex.clearing.company.service.v2.listeners.ClearingMemberCategoryServiceListener; +import ru.spcex.clearing.company.service.v2.validators.ClearingMemberCategoryServiceValidator; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.domain.BaseRequest; +import ru.spcex.clearing.platform.messaging.domain.Consts; +import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.ClearingMemberCategoryNewRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.ClearingMemberCategoryUpdateRequest; +import ru.spcex.clearing.test.MatcherFactory; +import ru.spcex.clearing.test.config.ImdgTestConfig; +import ru.spcex.clearing.test.config.KafkaTestConfig; +import ru.spcex.platform.enumeration.ClearingCategory; +import ru.spcex.platform.enumeration.WorkflowStatus; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; + +@ExtendWith(SpringExtension.class) +@ContextConfiguration(classes = { + BeanConfiguration.class, + ValidationConfig.class, + ClearingMemberCategoryServiceListener.class, + ClearingMemberCategoryServiceFacade.class, + ClearingMemberCategoryServiceValidator.class, + ClearingMemberCategoryValidationConfig.class, + + CompanyInfoServiceFacade.class, + ProfileDocumentServiceFacade.class, + ContactServiceFacade.class, + + CompanyServiceFacade.class, CompanyValidationConfig.class, + CompanySymbolServiceFacade.class, CompanySymbolValidationConfig.class, + AccountNotificationHelper.class, + RelationServiceFacade.class, RelationValidationConfig.class, + + KafkaTestConfig.class, + ImdgTestConfig.class}) +class ClearingMemberCategoryServiceListenerTest { + + public static final MatcherFactory.Matcher MEMBER_CATEGORY_MATCHER = usingIgnoringFieldsComparator(); + private static final int PARTITION = 0; + private static final String TOPIC_MEMBER_CATEGORY_NEW = Consts.DESTINATION_CLEARING_MEMBER_CATEGORY_NEW; + private static final String TOPIC_MEMBER_CATEGORY_UPDATE = Consts.DESTINATION_CLEARING_MEMBER_CATEGORY_UPDATE; + private static final String TOPIC_MEMBER_CATEGORY_DELETE = Consts.DESTINATION_CLEARING_MEMBER_CATEGORY_DELETE; + private static final Long ID = currentID.incrementAndGet(); + @Autowired + ClearingMemberCategoryServiceListener clearingMemberCategoryServiceListener; + @Autowired + @Qualifier("hazelcastServiceTest") + private ImdgProvider hazelcastServiceTest; + private Imdg memberCategoryImdg; + + @Autowired + @Qualifier("mockProducer") + protected Producer mockProducer; + + private long COMPANY_ID; + private Company TEST_COMPANY; + + private final String CLEARING_CATEGORY_DICT_CODE = ClearingCategory.B.getKey(); + private ClearingCategoryDictionary clearingCategoryDictionary; + + @PostConstruct + private void init() { + waitAvailableImdgProviderAndAddAdminWithDefaultId(); + memberCategoryImdg = hazelcastServiceTest.getImdg( + IMDGDistributedNames.Map_ClearingMemberCategory, + ClearingMemberCategory.class + ); + Imdg clearingCategoryDictionaryImdg = hazelcastServiceTest.getImdg( + IMDGDistributedNames.Map_ClearingCategoryDictionary, + ClearingCategoryDictionary.class + ); + + Imdg companyImdg = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_Company, Company.class); + TEST_COMPANY = new Company(); + TEST_COMPANY.setWorkflowStatus(WorkflowStatus.Active.getKey()); + COMPANY_ID = companyImdg.insert(TEST_COMPANY); + + clearingCategoryDictionary = new ClearingCategoryDictionary(); + clearingCategoryDictionary.setCode(CLEARING_CATEGORY_DICT_CODE); + clearingCategoryDictionaryImdg.insert(clearingCategoryDictionary); + } + + @Test + void clearingMemberCategoryNew() throws InterruptedException { + //ARRANGE + String clearingMemberCategory = CLEARING_CATEGORY_DICT_CODE; + ClearingMemberCategoryNewRequest memberCategoryNewRequest = new ClearingMemberCategoryNewRequest(); + memberCategoryNewRequest.setClearingMemberCategory(clearingMemberCategory); + memberCategoryNewRequest.setCompanyId(TEST_COMPANY.getId()); + + ClearingMemberCategory predictableClearingMemberCategory = new ClearingMemberCategory(); + predictableClearingMemberCategory.setCompanyId(COMPANY_ID); + predictableClearingMemberCategory.setClearingMemberCategory(clearingMemberCategory); + + //ACT + String jsonString = getJsonStringForNew(memberCategoryNewRequest, ID); + + addRecordToKafka((MockConsumer) clearingMemberCategoryServiceListener.getConsumer(), TOPIC_MEMBER_CATEGORY_NEW, PARTITION, 0, jsonString); + + //ASSERT + waitingSendAndCheckRecord(ID, mockProducer); + ClearingMemberCategory resultNew = memberCategoryImdg.getFirstObjectBySQL(String.format("clearingMemberCategory = %s", clearingMemberCategory)); + predictableClearingMemberCategory.setId(resultNew.getId()); + MEMBER_CATEGORY_MATCHER.assertMatch(resultNew, predictableClearingMemberCategory); + } + + /** + * {@link ClearingMemberCategoryServiceListener#processUpdateClearingMemberCategoryRequest(BaseRequest)} (BaseRequest)}
+ * Тест проверяет обновление сущности {@link ClearingMemberCategory} в Hazelcast при передаче из Apache Kafka.
+ * Входной запрос {@link ClearingMemberCategoryUpdateRequest}:
+ * {@link ClearingMemberCategoryUpdateRequest#id} - Идентификатор записи
+ * {@link ClearingMemberCategoryUpdateRequest#getClearingMemberCategory()} - 1234
+ */ + @Test + void clearingMemberCategoryUpdate() throws InterruptedException { + //ARRANGE + String clearingMemberCategory = CLEARING_CATEGORY_DICT_CODE; + ClearingMemberCategory existsClearingMemberCategory = new ClearingMemberCategory(); + existsClearingMemberCategory.setClearingMemberCategory("0000"); + existsClearingMemberCategory.setCompanyId(COMPANY_ID); + Long id = memberCategoryImdg.insert(existsClearingMemberCategory); + + ClearingMemberCategoryUpdateRequest memberCategoryUpdateRequest = new ClearingMemberCategoryUpdateRequest(); + memberCategoryUpdateRequest.setId(id); + memberCategoryUpdateRequest.setClearingMemberCategory(clearingMemberCategory); + + ClearingMemberCategory predictableClearingMemberCategory = new ClearingMemberCategory(); + predictableClearingMemberCategory.setCompanyId(COMPANY_ID); + predictableClearingMemberCategory.setId(id); + predictableClearingMemberCategory.setClearingMemberCategory(clearingMemberCategory); + + //ACT + String jsonString = getJsonStringForUpdate(memberCategoryUpdateRequest, id); + addRecordToKafka((MockConsumer) clearingMemberCategoryServiceListener.getConsumer(), TOPIC_MEMBER_CATEGORY_UPDATE, PARTITION, 0, jsonString); + + //ASSERT + waitingSendAndCheckRecord(id, mockProducer); + + ClearingMemberCategory resultUpdating = memberCategoryImdg.getSingleObjectByID(id); + MEMBER_CATEGORY_MATCHER.assertMatch(resultUpdating, predictableClearingMemberCategory); + } + + /** + * {@link ClearingMemberCategoryServiceListener#processDeleteClearingMemberCategoryRequest(BaseRequest)} (BaseRequest)}
+ * Тест проверяет удаление сущности {@link ClearingMemberCategory} в Hazelcast при передаче из Apache Kafka.
+ * Входной запрос {@link CommonDeleteRequest}:
+ * {@link CommonDeleteRequest#id} - Идентификатор записи
+ */ + @Test + void clearingMemberCategoryDelete() throws InterruptedException { + //ARRANGE + String clearingMemberCategory = "0000"; + ClearingMemberCategory existsClearingMemberCategory = new ClearingMemberCategory(); + existsClearingMemberCategory.setClearingMemberCategory(clearingMemberCategory); + existsClearingMemberCategory.setCompanyId(COMPANY_ID); + Long id = memberCategoryImdg.insert(existsClearingMemberCategory); + + CommonDeleteRequest memberCategoryDeleteRequest = new CommonDeleteRequest(); + memberCategoryDeleteRequest.setId(id); + + //ACT + String jsonString = getJsonStringForDelete(memberCategoryDeleteRequest, id); + addRecordToKafka((MockConsumer) clearingMemberCategoryServiceListener.getConsumer(), TOPIC_MEMBER_CATEGORY_DELETE, PARTITION, 0, jsonString); + + //ASSERT + waitingSendAndCheckRecord(id, mockProducer); + + ClearingMemberCategory resultDeleting = memberCategoryImdg.getFirstObjectBySQL(String.format("clearingMemberCategory = %s", clearingMemberCategory)); + Assertions.assertNull(resultDeleting); + } +} \ No newline at end of file diff --git a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/v2/CompanyInfoServiceListenerTest.java b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/v2/CompanyInfoServiceListenerTest.java new file mode 100644 index 000000000..966ab3b6e --- /dev/null +++ b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/v2/CompanyInfoServiceListenerTest.java @@ -0,0 +1,194 @@ +package ru.spcex.clearing.company.service.v2; + +import static ru.spcex.clearing.test.MatcherFactory.usingIgnoringFieldsComparator; +import static ru.spcex.clearing.test.TestUtils.addRecordToKafka; +import static ru.spcex.clearing.test.TestUtils.getJsonStringForUpdate; +import static ru.spcex.clearing.test.TestUtils.waitingSendAndCheckRecord; +import static ru.spcex.clearing.test.config.ImdgTestConfig.waitAvailableImdgProviderAndAddAdminWithDefaultId; + +import javax.annotation.PostConstruct; +import org.apache.kafka.clients.consumer.MockConsumer; +import org.apache.kafka.clients.producer.Producer; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit.jupiter.SpringExtension; +import ru.clearing.classes.statics.data.company.Company; +import ru.clearing.classes.statics.data.profile.CompanyInfo; +import ru.clearing.platform.dictionary.AbstractDictionary; +import ru.clearing.platform.dictionary.AllowedDictionary; +import ru.clearing.platform.dictionary.CompanySymbolDictionary; +import ru.clearing.platform.dictionary.CorporationSoleTypeDictionary; +import ru.clearing.platform.dictionary.CountryCodeDictionary; +import ru.clearing.platform.dictionary.LegalKindDictionary; +import ru.clearing.platform.dictionary.OrganizationTypeDictionary; +import ru.clearing.platform.dictionary.WorkflowStatusDictionary; +import ru.spcex.clearing.company.config.BeanConfiguration; +import ru.spcex.clearing.company.config.validation.CompanySymbolValidationConfig; +import ru.spcex.clearing.company.config.validation.CompanyValidationConfig; +import ru.spcex.clearing.company.config.validation.RelationValidationConfig; +import ru.spcex.clearing.company.config.validation.ValidationConfig; +import ru.spcex.clearing.company.service.AccountNotificationHelper; +import ru.spcex.clearing.company.service.v2.facade.ClearingMemberCategoryServiceFacade; +import ru.spcex.clearing.company.service.v2.facade.CompanyInfoServiceFacade; +import ru.spcex.clearing.company.service.v2.facade.CompanyServiceFacade; +import ru.spcex.clearing.company.service.v2.facade.CompanySymbolServiceFacade; +import ru.spcex.clearing.company.service.v2.facade.ContactServiceFacade; +import ru.spcex.clearing.company.service.v2.facade.ProfileDocumentServiceFacade; +import ru.spcex.clearing.company.service.v2.facade.RelationServiceFacade; +import ru.spcex.clearing.company.service.v2.listeners.CompanyInfoServiceListener; +import ru.spcex.clearing.company.service.v2.validators.CompanyInfoServiceValidator; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.domain.BaseRequest; +import ru.spcex.clearing.platform.messaging.domain.Consts; +import ru.spcex.clearing.platform.messaging.domain.cud.company.CompanyInfoUpdateRequest; +import ru.spcex.clearing.test.MatcherFactory; +import ru.spcex.clearing.test.config.ImdgTestConfig; +import ru.spcex.clearing.test.config.KafkaTestConfig; +import ru.spcex.platform.enumeration.WorkflowStatus; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; + +@ExtendWith(SpringExtension.class) +@ContextConfiguration(classes = { + CompanyInfoServiceListener.class, + CompanyInfoServiceFacade.class, + CompanyInfoServiceValidator.class, + CompanyValidationConfig.class, + CompanySymbolValidationConfig.class, + + ProfileDocumentServiceFacade.class, + ContactServiceFacade.class, + ClearingMemberCategoryServiceFacade.class, + + CompanyServiceFacade.class, + CompanyValidationConfig.class, + ValidationConfig.class, + CompanySymbolServiceFacade.class, + AccountNotificationHelper.class, + RelationServiceFacade.class, + RelationValidationConfig.class, + BeanConfiguration.class, + + KafkaTestConfig.class, + ImdgTestConfig.class}) +class CompanyInfoServiceListenerTest { + public static final MatcherFactory.Matcher COMPANY_INFO_MATCHER = usingIgnoringFieldsComparator(); + private static final int PARTITION = 0; + private static final String TOPIC_COMPANY_INFO_UPDATE = Consts.DESTINATION_COMPANY_INFO_UPDATE; + private static final Long ID = 0L; + + @Autowired + CompanyInfoServiceListener companyInfoService; + + @Autowired + @Qualifier("hazelcastServiceTest") + private ImdgProvider hazelcastServiceTest; + private Imdg companyImdg; + + @Autowired + @Qualifier("mockProducer") + protected Producer mockProducer; + + @PostConstruct + private void init() { + waitAvailableImdgProviderAndAddAdminWithDefaultId(); + companyImdg = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_Company, Company.class); + + // Словари для теста, применяются в ValidationConfig + putToDictionary(IMDGDistributedNames.Map_WorkflowStatusDictionary, new WorkflowStatusDictionary(), "ACTV"); + putToDictionary(IMDGDistributedNames.Map_CompanySymbolDictionary, new CompanySymbolDictionary(), "CLRC"); + putToDictionary(IMDGDistributedNames.Map_CorporationSoleTypeDictionary, new CorporationSoleTypeDictionary(), "GDIR"); + putToDictionary(IMDGDistributedNames.Map_CountryCodeDictionary, new CountryCodeDictionary(), "RUS"); + putToDictionary(IMDGDistributedNames.Map_AllowedDictionary, new AllowedDictionary(), "ALWD"); + putToDictionary(IMDGDistributedNames.Map_LegalKindDictionary, new LegalKindDictionary(), "JURD"); + putToDictionary(IMDGDistributedNames.Map_OrganizationTypeDictionary, new OrganizationTypeDictionary(), "NCRD"); + } + + private void putToDictionary(String mapName, D object, String code) { + Imdg dMap = (Imdg) hazelcastServiceTest.getImdg(mapName, object.getClass()); + object.setId(2L); + object.setCode(code); + object.setName("name of " + code); + dMap.insert(object); + } + + /** + * {@link CompanyInfoServiceListener#processNewCompanyInfoUpdateRequest(BaseRequest)}
+ * Тест проверяет обновление сущности {@link CompanyInfo} в Hazelcast при передаче из Apache Kafka.
+ * Входной запрос {@link CompanyInfoUpdateRequest}:
+ * {@link CompanyInfoUpdateRequest#id} - Идентификатор записи
+ * {@link CompanyInfoUpdateRequest#getCorporationSoleType()} - GDIR
+ * {@link CompanyInfoUpdateRequest#getCountryCode()} - RUS
+ * {@link CompanyInfoUpdateRequest#getDescription()} - updated description
+ * {@link CompanyInfoUpdateRequest#getProfessionalSign()} - ALWD
+ * {@link CompanyInfoUpdateRequest#getLegalKind()} - JURD
+ * {@link CompanyInfoUpdateRequest#getOrganizationType()} - NCRD
+ * {@link CompanyInfoUpdateRequest#getResidence()} - RUS
+ * {@link CompanyInfoUpdateRequest#getShortName()} - updated shortNameEng
+ * {@link CompanyInfoUpdateRequest#getFullName()} - updated fullNameEng
+ */ + @Test + void processNewCompanyInfoUpdateRequest() throws InterruptedException { + //ARRANGE + CompanyInfo existsCompanyInfo = new CompanyInfo(); + existsCompanyInfo.setId(ID); + existsCompanyInfo.setCompanyId(ID); + existsCompanyInfo.setCorporationSoleType("0000"); + existsCompanyInfo.setCountryCode("0000"); + existsCompanyInfo.setDescription("exists description"); + existsCompanyInfo.setProfessionalSign("0000"); + existsCompanyInfo.setLegalKind("0000"); + existsCompanyInfo.setOrganizationType("0000"); + existsCompanyInfo.setResidence("0000"); + existsCompanyInfo.setShortNameEng("exists shortNameEng"); + existsCompanyInfo.setFullNameEng("exists fullNameEng"); + Company existsCompany = new Company(); + existsCompany.setId(ID); + existsCompany.setWorkflowStatus(WorkflowStatus.Active.getKey()); + existsCompany.setProfile(existsCompanyInfo); + existsCompany.setShortName("exists shortName"); + existsCompany.setFullName("exists fullName"); + companyImdg.insert(existsCompany); + + CompanyInfoUpdateRequest companyInfoUpdateRequest = new CompanyInfoUpdateRequest(); + companyInfoUpdateRequest.setId(ID); + companyInfoUpdateRequest.setCorporationSoleType("GDIR"); + companyInfoUpdateRequest.setCountryCode("RUS"); + companyInfoUpdateRequest.setDescription("updated description"); + companyInfoUpdateRequest.setProfessionalSign("ALWD"); + companyInfoUpdateRequest.setLegalKind("JURD"); + companyInfoUpdateRequest.setOrganizationType("NCRD"); + companyInfoUpdateRequest.setResidence("RUS"); + companyInfoUpdateRequest.setShortNameEng("updated shortNameEng"); + companyInfoUpdateRequest.setFullNameEng("updated fullNameEng"); + companyInfoUpdateRequest.setShortName("updated shortName"); + companyInfoUpdateRequest.setFullName("updated fullName"); + + CompanyInfo predictableCompanyInfo = new CompanyInfo(); + predictableCompanyInfo.setId(ID); + predictableCompanyInfo.setCompanyId(ID); + predictableCompanyInfo.setCorporationSoleType("GDIR"); + predictableCompanyInfo.setCountryCode("RUS"); + predictableCompanyInfo.setDescription("updated description"); + predictableCompanyInfo.setProfessionalSign("ALWD"); + predictableCompanyInfo.setLegalKind("JURD"); + predictableCompanyInfo.setOrganizationType("NCRD"); + predictableCompanyInfo.setResidence("RUS"); + predictableCompanyInfo.setShortNameEng("updated shortNameEng"); + predictableCompanyInfo.setFullNameEng("updated fullNameEng"); + + //ACT + String jsonString = getJsonStringForUpdate(companyInfoUpdateRequest, ID); + + addRecordToKafka((MockConsumer) companyInfoService.getConsumer(), TOPIC_COMPANY_INFO_UPDATE, PARTITION, 0, jsonString); + + //ASSERT + waitingSendAndCheckRecord(ID, mockProducer); + + Company resultUpdating = companyImdg.getSingleObjectByID(ID); + COMPANY_INFO_MATCHER.assertMatch(resultUpdating.getProfile(), predictableCompanyInfo); + } +} \ No newline at end of file diff --git a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/v2/CompanyRoleSetServiceListenerTest.java b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/v2/CompanyRoleSetServiceListenerTest.java new file mode 100644 index 000000000..6f489f393 --- /dev/null +++ b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/v2/CompanyRoleSetServiceListenerTest.java @@ -0,0 +1,268 @@ +package ru.spcex.clearing.company.service.v2; + +import static ru.spcex.clearing.test.MatcherFactory.usingIgnoringFieldsComparator; +import static ru.spcex.clearing.test.TestUtils.addRecordToKafka; +import static ru.spcex.clearing.test.TestUtils.getJsonStringForDelete; +import static ru.spcex.clearing.test.TestUtils.getJsonStringForNew; +import static ru.spcex.clearing.test.TestUtils.getJsonStringForUpdate; +import static ru.spcex.clearing.test.TestUtils.waitingSendAndCheckRecord; +import static ru.spcex.clearing.test.config.ImdgTestConfig.waitAvailableImdgProviderAndAddAdminWithDefaultId; + +import java.time.Instant; +import java.util.Map; +import javax.annotation.PostConstruct; +import org.apache.kafka.clients.consumer.MockConsumer; +import org.apache.kafka.clients.producer.Producer; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit.jupiter.SpringExtension; +import ru.clearing.classes.statics.data.company.Company; +import ru.clearing.classes.statics.data.company.CompanyRoleSet; +import ru.clearing.classes.statics.data.profile.CompanyInfo; +import ru.clearing.platform.dictionary.AbstractDictionary; +import ru.clearing.platform.dictionary.AllowedDictionary; +import ru.clearing.platform.dictionary.CompanyRoleDictionary; +import ru.clearing.platform.dictionary.CompanySymbolDictionary; +import ru.clearing.platform.dictionary.WorkflowStatusDictionary; +import ru.spcex.clearing.company.config.BeanConfiguration; +import ru.spcex.clearing.company.config.validation.CompanyRoleSetValidationConfig; +import ru.spcex.clearing.company.config.validation.ValidationConfig; +import ru.spcex.clearing.company.service.v2.facade.CompanyRoleSetServiceFacade; +import ru.spcex.clearing.company.service.v2.listeners.CompanyRoleSetServiceListener; +import ru.spcex.clearing.company.service.v2.validators.CompanyRoleSetServiceValidator; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.domain.BaseRequest; +import ru.spcex.clearing.platform.messaging.domain.Consts; +import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.CompanyRoleSetNewRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.CompanyRoleSetUpdateRequest; +import ru.spcex.clearing.test.MatcherFactory; +import ru.spcex.clearing.test.config.ImdgTestConfig; +import ru.spcex.clearing.test.config.KafkaTestConfig; +import ru.spcex.platform.enumeration.CompanyRole; +import ru.spcex.platform.enumeration.WorkflowStatus; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; + +@ExtendWith(SpringExtension.class) +@ContextConfiguration(classes = { + CompanyRoleSetServiceListener.class, + CompanyRoleSetServiceFacade.class, + CompanyRoleSetServiceValidator.class, + CompanyRoleSetValidationConfig.class, + + ValidationConfig.class, + BeanConfiguration.class, + + KafkaTestConfig.class, + ImdgTestConfig.class}) +class CompanyRoleSetServiceListenerTest { + public static final MatcherFactory.Matcher COMPANY_ROLE_SET_MATCHER = usingIgnoringFieldsComparator(); + private static final int PARTITION = 0; + private static final Long COMPANY_ID = 105L; + + @Autowired + CompanyRoleSetServiceListener companyRoleSetServiceListener; + + @Autowired + @Qualifier("hazelcastServiceTest") + private ImdgProvider hazelcastServiceTest; + + private Imdg companyImdg; + private Imdg companyRoleSetImdg; + + @Autowired + @Qualifier("mockProducer") + protected Producer mockProducer; + + @PostConstruct + private void init() { + waitAvailableImdgProviderAndAddAdminWithDefaultId(); + companyImdg = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_Company, Company.class); + companyRoleSetImdg = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_CompanyRoleSet, CompanyRoleSet.class); + + // Словари для теста, применяются в ValidationConfig + putToDictionary(IMDGDistributedNames.Map_WorkflowStatusDictionary, new WorkflowStatusDictionary(), "ACTV"); + putToDictionary(IMDGDistributedNames.Map_CompanySymbolDictionary, new CompanySymbolDictionary(), "CLRC"); + putToDictionary(IMDGDistributedNames.Map_AllowedDictionary, new AllowedDictionary(), "ALWD"); + putToDictionary(IMDGDistributedNames.Map_CompanyRoleDictionary, new CompanyRoleDictionary(), "RPRT"); + putToDictionary(IMDGDistributedNames.Map_CompanyRoleDictionary, new CompanyRoleDictionary(), "SETH"); + + Company comp = new Company(); + comp.setId(COMPANY_ID); + comp.setCreated(Instant.now()); + comp.setFullName("Test LLC inc"); + comp.setShortName("Test LLC"); + comp.setProfile(new CompanyInfo()); + comp.setWorkflowStatus(WorkflowStatus.Active.getKey()); + companyImdg.insert(comp); + } + + private void putToDictionary(String mapName, D object, String code) { + Imdg dMap = (Imdg) hazelcastServiceTest.getImdg(mapName, object.getClass()); + object.setId(1000L + code.hashCode() % 1000); + object.setCode(code); + object.setName("name of " + code); +// assert dMap.getSingleObjectByID(object.getId()) == null; + dMap.insert(object); + } + + /** + * {@link CompanyRoleSetServiceListener#processNewCompanyRoleSetRequest(BaseRequest)} (BaseRequest)}
+ * * Тест проверяет создание сущности {@link CompanyRoleSet} в IMDG при передаче из Apache Kafka.
+ * * Входной запрос {@link CompanyRoleSetNewRequest}:
+ * * {@link CompanyRoleSetNewRequest#getCompanyId()} - COMPANY_ID (105)
+ * * {@link CompanyRoleSetNewRequest#getCompanyRole()} - SETH
+ * * {@link CompanyRoleSetNewRequest#getWorkflowStatus()} - ACTV
+ */ + @Test + void companyRoleSetNew1() { + //ARRANGE + final Long ID = 102L; + final String DESTINATION_NEW = Consts.DESTINATION_COMPANY_ROLE_SETS_NEW; + companyImdg.size(); + + CompanyRoleSetNewRequest newRequest = new CompanyRoleSetNewRequest(); + newRequest.setCompanyId(COMPANY_ID); + newRequest.setCompanyRole(CompanyRole.SETH.getKey()); + newRequest.setWorkflowStatus(WorkflowStatus.Active.getKey()); + + //ACT + String jsonString = getJsonStringForNew(newRequest, ID); + addRecordToKafka((MockConsumer) companyRoleSetServiceListener.getConsumer(), DESTINATION_NEW, PARTITION, 0, jsonString); + + //ASSERT + waitingSendAndCheckRecord(ID, mockProducer); + + CompanyRoleSet resultNew = companyRoleSetImdg.getFirstObjectByFieldValues(Map.of("companyId", COMPANY_ID)); + Assertions.assertNotNull(resultNew); + Assertions.assertEquals("SETH", resultNew.getCompanyRole()); + Assertions.assertEquals(WorkflowStatus.Active.getKey(), resultNew.getWorkflowStatus()); + + // CLEAN UP + companyRoleSetImdg.delete(resultNew); + } + + + /** + * {@link CompanyRoleSetServiceListener#processNewCompanyRoleSetRequest(BaseRequest)} (BaseRequest)}
+ * * Тест проверяет создание сущности {@link CompanyRoleSet} в IMDG при передаче из Apache Kafka.
+ * * Входной запрос {@link CompanyRoleSetNewRequest}:
+ * * {@link CompanyRoleSetNewRequest#getCompanyId()} - COMPANY_ID (105)
+ * * {@link CompanyRoleSetNewRequest#getCompanyRole()} - SETH
+ * * {@link CompanyRoleSetNewRequest#getWorkflowStatus()} - null
+ */ + @Disabled + @Test + void companyRoleSetNew2() { + //ARRANGE + final Long ID = 103L; + final String DESTINATION_NEW = Consts.DESTINATION_COMPANY_ROLE_SETS_NEW; + companyImdg.size(); + + CompanyRoleSetNewRequest newRequest = new CompanyRoleSetNewRequest(); + newRequest.setCompanyId(COMPANY_ID); + newRequest.setCompanyRole(CompanyRole.SETH.getKey()); + newRequest.setWorkflowStatus(null); + + //ACT + String jsonString = getJsonStringForNew(newRequest, ID); + addRecordToKafka((MockConsumer) companyRoleSetServiceListener.getConsumer(), DESTINATION_NEW, PARTITION, 0, jsonString); + + //ASSERT + waitingSendAndCheckRecord(ID, mockProducer); + + CompanyRoleSet resultNew = companyRoleSetImdg.getFirstObjectByFieldValues(Map.of("companyId", COMPANY_ID)); + Assertions.assertNotNull(resultNew); + Assertions.assertEquals("SETH", resultNew.getCompanyRole()); + Assertions.assertEquals(WorkflowStatus.Active.getKey(), resultNew.getWorkflowStatus()); + + // CLEAN UP + companyRoleSetImdg.delete(resultNew); + } + + /** + * {@link CompanyRoleSetServiceListener#processUpdateCompanyRoleSetRequest(BaseRequest)} (BaseRequest)}
+ * * Тест проверяет обновление сущности {@link CompanyRoleSet} в IMDG при передаче из Apache Kafka.
+ * * Входной запрос {@link CompanyRoleSetUpdateRequest}:
+ * * {@link CompanyRoleSetUpdateRequest#getId()} - ID
+ * * {@link CompanyRoleSetUpdateRequest#getCompanyId()} - COMPANY_ID
+ * * {@link CompanyRoleSetUpdateRequest#getCompanyRole()} - SETH
+ * * {@link CompanyRoleSetUpdateRequest#getWorkflowStatus()} - null
+ */ + @Test + void companyRoleSetUpdate() { + final Long ID = 104L; + final String DESTINATION_UPDATE = Consts.DESTINATION_COMPANY_ROLE_SETS_UPDATE; + //ARRANGE + CompanyRoleSet existsCompanyRoleSet = new CompanyRoleSet(); + existsCompanyRoleSet.setId(ID); + existsCompanyRoleSet.setCompanyId(COMPANY_ID); + existsCompanyRoleSet.setCompanyRole("ODEP"); + companyRoleSetImdg.insert(existsCompanyRoleSet); + + CompanyRoleSetUpdateRequest companyRoleSetUpdateRequest = new CompanyRoleSetUpdateRequest(); + companyRoleSetUpdateRequest.setId(ID); + companyRoleSetUpdateRequest.setCompanyId(COMPANY_ID); + companyRoleSetUpdateRequest.setCompanyRole("SETH"); + companyRoleSetUpdateRequest.setWorkflowStatus(WorkflowStatus.Active.getKey()); + + CompanyRoleSet predictableCompanyRS = new CompanyRoleSet(); + predictableCompanyRS.setId(ID); + predictableCompanyRS.setCompanyId(COMPANY_ID); + predictableCompanyRS.setCompanyRole("SETH"); + predictableCompanyRS.setWorkflowStatus("ACTV"); + + //ACT + String jsonString = getJsonStringForUpdate(companyRoleSetUpdateRequest, ID); + + addRecordToKafka((MockConsumer) companyRoleSetServiceListener.getConsumer(), DESTINATION_UPDATE, PARTITION, 0, jsonString); + + //ASSERT + waitingSendAndCheckRecord(ID, mockProducer); + + CompanyRoleSet resultUpdating = companyRoleSetImdg.getSingleObjectByID(ID); + COMPANY_ROLE_SET_MATCHER.assertMatch(resultUpdating, predictableCompanyRS); + + // CLEAN UP + companyRoleSetImdg.delete(existsCompanyRoleSet); + } + + + /** + * {@link CompanyRoleSetServiceListener#processDeleteCompanyRoleSetRequest(BaseRequest)} (BaseRequest)}
+ * Тест проверяет удаление сущности {@link CompanyRoleSet} в Hazelcast при передаче из Apache Kafka.
+ * Входной запрос {@link CommonDeleteRequest}:
+ * {@link CommonDeleteRequest#id} - Идентификатор записи
+ */ + @Test + void deleteCRS() { + //ARRANGE + final Long ID = 101L; + CompanyRoleSet existsCompanyRoleSet = new CompanyRoleSet(); + existsCompanyRoleSet.setId(ID); + existsCompanyRoleSet.setCompanyId(COMPANY_ID); + existsCompanyRoleSet.setCompanyRole("ODEP"); + companyRoleSetImdg.insert(existsCompanyRoleSet); + + CommonDeleteRequest commonDeleteRequest = new CommonDeleteRequest(); + commonDeleteRequest.setId(ID); + + //ACT + String jsonString = getJsonStringForDelete(commonDeleteRequest, ID); + addRecordToKafka((MockConsumer) companyRoleSetServiceListener.getConsumer(), Consts.DESTINATION_COMPANY_ROLE_SETS_DELETE, PARTITION, 0, jsonString); + + //ASSERT + waitingSendAndCheckRecord(ID, mockProducer); + + CompanyRoleSet resultDeleting = companyRoleSetImdg.getFirstObjectBySQL("id=" + ID); + Assertions.assertNull(resultDeleting); +// Assertions.assertEquals(WorkflowStatus.Blocked.getKey(), resultDeleting.getWorkflowStatus()); +// companyRoleSetImdg.delete(existsCompanyRoleSet); + } +} \ No newline at end of file diff --git a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/v2/CompanyServiceListenerTest.java b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/v2/CompanyServiceListenerTest.java index 32e0fc420..cebeee34c 100644 --- a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/v2/CompanyServiceListenerTest.java +++ b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/v2/CompanyServiceListenerTest.java @@ -32,10 +32,13 @@ import ru.spcex.clearing.company.config.validation.RelationValidationConfig; import ru.spcex.clearing.company.config.validation.ValidationConfig; import ru.spcex.clearing.company.error.CompanyErrors; import ru.spcex.clearing.company.service.AccountNotificationHelper; -import ru.spcex.clearing.company.service.CompanyService; -import ru.spcex.clearing.company.service.CompanySymbolService; -import ru.spcex.clearing.company.service.RelationService; +import ru.spcex.clearing.company.service.v2.facade.ClearingMemberCategoryServiceFacade; +import ru.spcex.clearing.company.service.v2.facade.CompanyInfoServiceFacade; import ru.spcex.clearing.company.service.v2.facade.CompanyServiceFacade; +import ru.spcex.clearing.company.service.v2.facade.CompanySymbolServiceFacade; +import ru.spcex.clearing.company.service.v2.facade.ContactServiceFacade; +import ru.spcex.clearing.company.service.v2.facade.ProfileDocumentServiceFacade; +import ru.spcex.clearing.company.service.v2.facade.RelationServiceFacade; import ru.spcex.clearing.company.service.v2.listeners.CompanyServiceListener; import ru.spcex.clearing.company.service.v2.validators.CompanyServiceValidator; import ru.spcex.clearing.imdg.IMDGDistributedNames; @@ -59,12 +62,17 @@ import ru.spcex.platform.imdg.api.ImdgProvider; CompanyValidationConfig.class, ValidationConfig.class, AccountNotificationHelper.class, - RelationService.class, + RelationServiceFacade.class, RelationValidationConfig.class, - CompanySymbolService.class, + CompanySymbolServiceFacade.class, CompanySymbolValidationConfig.class, + CompanyInfoServiceFacade.class, + ProfileDocumentServiceFacade.class, + ContactServiceFacade.class, + ClearingMemberCategoryServiceFacade.class, + KafkaTestConfig.class, ImdgTestConfig.class, BeanConfiguration.class}) @@ -121,7 +129,7 @@ public class CompanyServiceListenerTest { } /** - * {@link CompanyService#deleteCompany(BaseRequest)}
+ * {@link CompanyServiceListener#processDeleteCompanyRequest(BaseRequest)} (BaseRequest)}
* Тест проверяет удаление сущности {@link Company} в Hazelcast при передаче из Apache Kafka.
* Входной запрос {@link CommonDeleteRequest}:
* {@link CommonDeleteRequest#id} - Идентификатор записи
@@ -161,7 +169,7 @@ public class CompanyServiceListenerTest { /** - * {@link CompanyService#createCompany(BaseRequest)}
+ * {@link CompanyServiceListener#processNewCompanyRequest(BaseRequest)} (BaseRequest)}
* Тест проверяет удаление сущности {@link Company} в Hazelcast при передаче из Apache Kafka.
* Входной запрос {@link CommonDeleteRequest}:
* {@link CommonDeleteRequest#id} - Идентификатор записи
diff --git a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/v2/CompanySymbolServiceListenerTest.java b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/v2/CompanySymbolServiceListenerTest.java new file mode 100644 index 000000000..28471099a --- /dev/null +++ b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/v2/CompanySymbolServiceListenerTest.java @@ -0,0 +1,158 @@ +package ru.spcex.clearing.company.service.v2; + +import static ru.spcex.clearing.test.MatcherFactory.usingIgnoringFieldsComparator; +import static ru.spcex.clearing.test.TestUtils.addRecordToKafka; +import static ru.spcex.clearing.test.TestUtils.getJsonStringForUpdate; +import static ru.spcex.clearing.test.TestUtils.waitingSendAndCheckRecord; +import static ru.spcex.clearing.test.config.ImdgTestConfig.waitAvailableImdgProviderAndAddAdminWithDefaultId; + +import javax.annotation.PostConstruct; +import org.apache.kafka.clients.consumer.MockConsumer; +import org.apache.kafka.clients.producer.Producer; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit.jupiter.SpringExtension; +import ru.clearing.classes.statics.data.company.Company; +import ru.clearing.classes.statics.data.company.CompanySymbols; +import ru.clearing.platform.dictionary.CompanySymbolDictionary; +import ru.spcex.clearing.company.config.BeanConfiguration; +import ru.spcex.clearing.company.config.validation.CompanySymbolValidationConfig; +import ru.spcex.clearing.company.config.validation.CompanyValidationConfig; +import ru.spcex.clearing.company.config.validation.RelationValidationConfig; +import ru.spcex.clearing.company.config.validation.ValidationConfig; +import ru.spcex.clearing.company.service.AccountNotificationHelper; +import ru.spcex.clearing.company.service.v2.facade.ClearingMemberCategoryServiceFacade; +import ru.spcex.clearing.company.service.v2.facade.CompanyInfoServiceFacade; +import ru.spcex.clearing.company.service.v2.facade.CompanyServiceFacade; +import ru.spcex.clearing.company.service.v2.facade.CompanySymbolServiceFacade; +import ru.spcex.clearing.company.service.v2.facade.ContactServiceFacade; +import ru.spcex.clearing.company.service.v2.facade.ProfileDocumentServiceFacade; +import ru.spcex.clearing.company.service.v2.facade.RelationServiceFacade; +import ru.spcex.clearing.company.service.v2.listeners.CompanySymbolServiceListener; +import ru.spcex.clearing.company.service.v2.validators.CompanySymbolServiceValidator; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.domain.BaseRequest; +import ru.spcex.clearing.platform.messaging.domain.Consts; +import ru.spcex.clearing.platform.messaging.domain.cud.company.CompanySymbolUpdateRequest; +import ru.spcex.clearing.test.MatcherFactory; +import ru.spcex.clearing.test.config.ImdgTestConfig; +import ru.spcex.clearing.test.config.KafkaTestConfig; +import ru.spcex.platform.enumeration.CompanySymbol; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; + +@ExtendWith(SpringExtension.class) +@ContextConfiguration(classes = { + CompanySymbolServiceListener.class, + CompanySymbolServiceFacade.class, + CompanySymbolServiceValidator.class, + + CompanyInfoServiceFacade.class, + ProfileDocumentServiceFacade.class, + ContactServiceFacade.class, + ClearingMemberCategoryServiceFacade.class, + + CompanySymbolValidationConfig.class, + ValidationConfig.class, + BeanConfiguration.class, + + CompanyServiceFacade.class, + CompanyValidationConfig.class, + AccountNotificationHelper.class, + RelationServiceFacade.class, RelationValidationConfig.class, + + KafkaTestConfig.class, + ImdgTestConfig.class}) +class CompanySymbolServiceListenerTest { + public static final MatcherFactory.Matcher COMPANY_SYMBOL_MATCHER = usingIgnoringFieldsComparator(); + private static final int PARTITION = 0; + private static final String TOPIC_COMPANY_SYMBOL_UPDATE = Consts.DESTINATION_COMPANY_SYMBOL_UPDATE; + private static final Long ID = 0L; + + @Autowired + CompanySymbolServiceListener companySymbolServiceListener; + @Autowired + @Qualifier("hazelcastServiceTest") + private ImdgProvider hazelcastServiceTest; + private Imdg companySymbolsImdg; + + @Autowired + @Qualifier("mockProducer") + protected Producer mockProducer; + + @PostConstruct + private void init() { + waitAvailableImdgProviderAndAddAdminWithDefaultId(); + companySymbolsImdg = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class); + + + Imdg companySymbolDictionaryImdg = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_CompanySymbolDictionary, CompanySymbolDictionary.class); + { + CompanySymbolDictionary cSymbol = new CompanySymbolDictionary(); + cSymbol.setId(11L); + cSymbol.setCode(CompanySymbol.CLRC.getKey()); + cSymbol.setName(CompanySymbol.CLRC.getKey()); + cSymbol.setShortname(" CLRC key"); + companySymbolDictionaryImdg.insert(cSymbol); + CompanySymbolDictionary cioSymbol = new CompanySymbolDictionary(); + cioSymbol.setId(12L); + cioSymbol.setCode(CompanySymbol.CIO.getKey()); + cioSymbol.setName(CompanySymbol.CIO.getKey()); + companySymbolDictionaryImdg.insert(cioSymbol); + } + Imdg companyImdg = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_Company, Company.class); + { + Company company = new Company(); + company.setId(ID); + company.setShortName("TST"); + company.setWorkflowStatus("ACTV"); + companyImdg.insert(company); + } + } + + /** + * {@link CompanySymbolServiceListener#processUpdateCompanySymbolRequest(BaseRequest)} (BaseRequest)}
+ * Тест проверяет обновление сущности {@link CompanySymbols} в Hazelcast при передаче из Apache Kafka.
+ * Входной запрос {@link CompanySymbolUpdateRequest}:
+ * {@link CompanySymbolUpdateRequest#id} - Идентификатор записи
+ * {@link CompanySymbolUpdateRequest#getCompanyId()} - Идентификатор записи
+ * {@link CompanySymbolUpdateRequest#getCompanySymbol()} - 1234
+ * {@link CompanySymbolUpdateRequest#getCompanySymbolValue()} - new companySymbolValue
+ */ + @Test + void processUpdateCompanySymbolRequest() throws InterruptedException { + //ARRANGE + String companySymbolValue = "newCompanySymbolValue"; + CompanySymbols existsCompanySymbols = new CompanySymbols(); + existsCompanySymbols.setId(ID); + existsCompanySymbols.setCompanyId(ID); + existsCompanySymbols.setCompanySymbol("CIO"); + existsCompanySymbols.setCompanySymbolValue("CIO exists companySymbolValue"); + companySymbolsImdg.insert(existsCompanySymbols); + + CompanySymbolUpdateRequest companySymbolUpdateRequest = new CompanySymbolUpdateRequest(); + companySymbolUpdateRequest.setId(ID); + companySymbolUpdateRequest.setCompanyId(ID); + companySymbolUpdateRequest.setCompanySymbol("CIO"); + companySymbolUpdateRequest.setCompanySymbolValue(companySymbolValue); + + CompanySymbols predictableCompanySymbols = new CompanySymbols(); + predictableCompanySymbols.setId(ID); + predictableCompanySymbols.setCompanyId(ID); + predictableCompanySymbols.setCompanySymbol("CIO"); + predictableCompanySymbols.setCompanySymbolValue(companySymbolValue); + + //ACT + String jsonString = getJsonStringForUpdate(companySymbolUpdateRequest, ID); + addRecordToKafka((MockConsumer) companySymbolServiceListener.getConsumer(), TOPIC_COMPANY_SYMBOL_UPDATE, PARTITION, 0, jsonString); + + //ASSERT + waitingSendAndCheckRecord(ID, mockProducer); + + CompanySymbols resultUpdating = companySymbolsImdg.getFirstObjectBySQL(String.format("companySymbolValue = %s", companySymbolValue)); + COMPANY_SYMBOL_MATCHER.assertMatch(resultUpdating, predictableCompanySymbols); + } +} \ No newline at end of file diff --git a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/v2/ContactServiceListenerTest.java b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/v2/ContactServiceListenerTest.java new file mode 100644 index 000000000..68107ec26 --- /dev/null +++ b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/v2/ContactServiceListenerTest.java @@ -0,0 +1,155 @@ +package ru.spcex.clearing.company.service.v2; + +import static ru.spcex.clearing.test.MatcherFactory.usingIgnoringFieldsComparator; +import static ru.spcex.clearing.test.TestUtils.addRecordToKafka; +import static ru.spcex.clearing.test.TestUtils.getJsonStringForNew; +import static ru.spcex.clearing.test.TestUtils.getJsonStringForUpdate; +import static ru.spcex.clearing.test.TestUtils.waitingSendAndCheckRecord; +import static ru.spcex.clearing.test.config.ImdgTestConfig.waitAvailableImdgProviderAndAddAdminWithDefaultId; + +import javax.annotation.PostConstruct; +import org.apache.kafka.clients.consumer.MockConsumer; +import org.apache.kafka.clients.producer.Producer; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit.jupiter.SpringExtension; +import ru.clearing.classes.statics.data.company.Company; +import ru.clearing.classes.statics.data.profile.Contact; +import ru.clearing.platform.dictionary.ContactTypeDictionary; +import ru.spcex.clearing.company.config.BeanConfiguration; +import ru.spcex.clearing.company.config.validation.ContactValidationConfig; +import ru.spcex.clearing.company.config.validation.ValidationConfig; +import ru.spcex.clearing.company.service.v2.facade.ContactServiceFacade; +import ru.spcex.clearing.company.service.v2.listeners.ContactServiceListener; +import ru.spcex.clearing.company.service.v2.validators.ContactServiceValidator; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.domain.BaseRequest; +import ru.spcex.clearing.platform.messaging.domain.Consts; +import ru.spcex.clearing.platform.messaging.domain.cud.company.ContactNewRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.ContactUpdateRequest; +import ru.spcex.clearing.test.MatcherFactory; +import ru.spcex.clearing.test.config.ImdgTestConfig; +import ru.spcex.clearing.test.config.KafkaTestConfig; +import ru.spcex.platform.enumeration.ContactTypes; +import ru.spcex.platform.enumeration.WorkflowStatus; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; + +@ExtendWith(SpringExtension.class) +@ContextConfiguration(classes = { + BeanConfiguration.class, + ValidationConfig.class, + ContactValidationConfig.class, + ContactServiceListener.class, + ContactServiceFacade.class, + ContactServiceValidator.class, + KafkaTestConfig.class, + ImdgTestConfig.class}) +class ContactServiceListenerTest { + public static final MatcherFactory.Matcher CONTACT_MATCHER = usingIgnoringFieldsComparator(); + private static final int PARTITION = 0; + private static final String TOPIC_CONTACT_UPDATE = Consts.DESTINATION_CONTACT_UPDATE; + private static final String TOPIC_CONTACT_NEW = Consts.DESTINATION_CONTACT_NEW; + private static final Long ID = 0L; + + @Autowired + ContactServiceListener contactServiceListener; + + @Autowired + @Qualifier("hazelcastServiceTest") + private ImdgProvider hazelcastServiceTest; + private Imdg contactImdg; + + @Autowired + @Qualifier("mockProducer") + protected Producer mockProducer; + + private Company TEST_COMPANY; + private Long COMPANY_ID; + + @PostConstruct + private void init() { + waitAvailableImdgProviderAndAddAdminWithDefaultId(); + contactImdg = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_Contact, Contact.class); + + Imdg companyImdg = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_Company, Company.class); + TEST_COMPANY = new Company(); + TEST_COMPANY.setWorkflowStatus(WorkflowStatus.Active.getKey()); + COMPANY_ID = companyImdg.insert(TEST_COMPANY); + + ContactTypeDictionary contactTypeDictionary = new ContactTypeDictionary(); + contactTypeDictionary.setCode(ContactTypes.adrs.getKey()); + contactTypeDictionary.setName("name"); + Imdg contactTypeDictionaryImdg = hazelcastServiceTest.getImdg( + IMDGDistributedNames.Map_ContactTypeDictionary, ContactTypeDictionary.class + ); + contactTypeDictionaryImdg.insert(contactTypeDictionary); + } + @Test + void contactNew() throws InterruptedException { + //ARRANGE + ContactNewRequest contactNewRequest = new ContactNewRequest(); + contactNewRequest.setCompanyId(COMPANY_ID); + contactNewRequest.setContactType(ContactTypes.adrs.getKey()); + contactNewRequest.setContactValue("value"); + + Contact predictableContact = new Contact(); + predictableContact.setCompanyId(COMPANY_ID); + predictableContact.setContactType(ContactTypes.adrs.getKey()); + predictableContact.setContactValue("value"); + + //ACT + String jsonString = getJsonStringForNew(contactNewRequest, ID); + addRecordToKafka((MockConsumer) contactServiceListener.getConsumer(), TOPIC_CONTACT_NEW, PARTITION, 0, jsonString); + + //ASSERT + waitingSendAndCheckRecord(ID, mockProducer); + + Contact resultNew = contactImdg.getAllValues().iterator().next(); + predictableContact.setId(resultNew.getId()); + CONTACT_MATCHER.assertMatch(resultNew, predictableContact); + } + + /** + * {@link ContactServiceListener#processUpdateContactRequest(BaseRequest)} (BaseRequest)}
+ * Тест проверяет обновление сущности {@link Contact} в Hazelcast при передаче из Apache Kafka.
+ * Входной запрос {@link ContactUpdateRequest}:
+ * {@link ContactUpdateRequest#id} - Идентификатор записи
+ * {@link ContactUpdateRequest#getContactType()} - ADDR
+ * {@link ContactUpdateRequest#getContactValue()} - new ContactValue
+ */ + @Test + void contactUpdate() throws InterruptedException { + //ARRANGE + Long existContactID; + Contact existsContact = new Contact(); + existsContact.setCompanyId(COMPANY_ID); + existsContact.setContactType(ContactTypes.adrs.getKey()); + existsContact.setContactValue("exists ContactValue"); + existContactID = contactImdg.insert(existsContact); + + ContactUpdateRequest contactUpdateRequest = new ContactUpdateRequest(); + contactUpdateRequest.setId(existContactID); + contactUpdateRequest.setContactType(ContactTypes.adrs.getKey()); + contactUpdateRequest.setContactValue("new ContactValue"); + + Contact predictableContact = new Contact(); + predictableContact.setId(existContactID); + predictableContact.setCompanyId(COMPANY_ID); + predictableContact.setContactType(ContactTypes.adrs.getKey()); + predictableContact.setContactValue("new ContactValue"); + + //ACT + String jsonString = getJsonStringForUpdate(contactUpdateRequest, existContactID); + addRecordToKafka((MockConsumer) contactServiceListener.getConsumer(), TOPIC_CONTACT_UPDATE, PARTITION, 0, jsonString); + + //ASSERT + waitingSendAndCheckRecord(existContactID, mockProducer); + + Contact resultUpdating = contactImdg.getSingleObjectByID(existContactID); + CONTACT_MATCHER.assertMatch(resultUpdating, predictableContact); + } +} \ No newline at end of file diff --git a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/v2/MultiCompanyServiceListenerTest.java b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/v2/MultiCompanyServiceListenerTest.java index 6610d6749..e3f74eeba 100644 --- a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/v2/MultiCompanyServiceListenerTest.java +++ b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/v2/MultiCompanyServiceListenerTest.java @@ -30,18 +30,15 @@ import ru.spcex.clearing.company.config.validation.ProfileDocumentValidationConf import ru.spcex.clearing.company.config.validation.RelationValidationConfig; import ru.spcex.clearing.company.config.validation.ValidationConfig; import ru.spcex.clearing.company.service.AccountNotificationHelper; -import ru.spcex.clearing.company.service.ClearingMemberCategoryService; -import ru.spcex.clearing.company.service.CompanyInfoService; -import ru.spcex.clearing.company.service.CompanySymbolService; -import ru.spcex.clearing.company.service.ContactService; -import ru.spcex.clearing.company.service.ProfileDocumentService; -import ru.spcex.clearing.company.service.RelationService; +import ru.spcex.clearing.company.service.v2.facade.ClearingMemberCategoryServiceFacade; +import ru.spcex.clearing.company.service.v2.facade.CompanyInfoServiceFacade; import ru.spcex.clearing.company.service.v2.facade.CompanyServiceFacade; -import ru.spcex.clearing.company.service.v2.facade.MultiCompanyServiceFacade; +import ru.spcex.clearing.company.service.v2.facade.CompanySymbolServiceFacade; +import ru.spcex.clearing.company.service.v2.facade.ContactServiceFacade; +import ru.spcex.clearing.company.service.v2.facade.ProfileDocumentServiceFacade; +import ru.spcex.clearing.company.service.v2.facade.RelationServiceFacade; import ru.spcex.clearing.company.service.v2.listeners.CompanyServiceListener; -import ru.spcex.clearing.company.service.v2.listeners.MultiCompanyServiceListener; import ru.spcex.clearing.company.service.v2.validators.CompanyServiceValidator; -import ru.spcex.clearing.company.service.v2.validators.MultiCompanyServiceValidator; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.platform.messaging.domain.cud.company.CompanyGatewayRequest; import ru.spcex.clearing.platform.messaging.domain.cud.company.CompanyInfoUpdateRequest; @@ -60,28 +57,24 @@ import ru.spcex.platform.imdg.api.ImdgProvider; @ExtendWith(SpringExtension.class) @ContextConfiguration(classes = { - MultiCompanyServiceListener.class, - MultiCompanyServiceFacade.class, - MultiCompanyServiceValidator.class, - CompanyServiceListener.class, CompanyServiceFacade.class, CompanyServiceValidator.class, CompanyValidationConfig.class, ValidationConfig.class, - CompanySymbolService.class, + CompanySymbolServiceFacade.class, AccountNotificationHelper.class, - RelationService.class, + RelationServiceFacade.class, RelationValidationConfig.class, - CompanySymbolService.class, + CompanySymbolServiceFacade.class, CompanySymbolValidationConfig.class, - CompanyInfoService.class, - ProfileDocumentService.class, + CompanyInfoServiceFacade.class, + ProfileDocumentServiceFacade.class, ProfileDocumentValidationConfig.class, - ContactService.class, + ContactServiceFacade.class, ContactValidationConfig.class, - ClearingMemberCategoryService.class, + ClearingMemberCategoryServiceFacade.class, ClearingMemberCategoryValidationConfig.class, KafkaTestConfig.class, @@ -91,9 +84,7 @@ public class MultiCompanyServiceListenerTest { final Long COMPANY_ID = 123L; @Autowired - protected MultiCompanyServiceListener multiCompanyServiceListener; - @Autowired - protected MultiCompanyServiceFacade multiCompanyServiceFacade; + protected CompanyServiceFacade companyServiceFacade; @Autowired @Qualifier("hazelcastServiceTest") @@ -157,7 +148,7 @@ public class MultiCompanyServiceListenerTest { req.setCompanyId(COMPANY_ID); req.setDocumentType(DocumentTypes.form.getKey()); req.setIssueDate(LocalDate.now()); - ProfileDocument doc = multiCompanyServiceFacade.findCompanyDocument(req); + ProfileDocument doc = companyServiceFacade.findCompanyDocument(req); assertNotNull(doc); } @@ -167,11 +158,11 @@ public class MultiCompanyServiceListenerTest { req.setCompanyId(COMPANY_ID); req.setCompanySymbol(CompanySymbol.CLRC.getKey()); req.setCompanySymbolValue("CL-VALUE-2"); - assertNull(multiCompanyServiceFacade.findCompanySymbols(req)); + assertNull(companyServiceFacade.findCompanySymbols(req)); req.setCompanySymbol(CompanySymbol.INN.getKey()); req.setCompanySymbolValue("INN-VALUE"); - CompanySymbols symbol = multiCompanyServiceFacade.findCompanySymbols(req); + CompanySymbols symbol = companyServiceFacade.findCompanySymbols(req); assertNotNull(symbol); assertEquals("INN-VALUE", symbol.getCompanySymbolValue()); } @@ -182,7 +173,7 @@ public class MultiCompanyServiceListenerTest { req.setCompanyId(COMPANY_ID); req.setContactType(ContactTypes.adrs.getKey()); req.setContactValue("UAR, st.Uarus, anystreet st., house 2"); - Contact contact = multiCompanyServiceFacade.findContact(req); + Contact contact = companyServiceFacade.findContact(req); assertNotNull(contact); assertNotEquals(req.getContactValue(), contact.getContactValue()); } @@ -192,32 +183,32 @@ public class MultiCompanyServiceListenerTest { CompanyNewRequest req = new CompanyNewRequest(); req.setCompanySymbol(CompanySymbol.CLRC.getKey()); req.setCompanySymbolValue("CL-VALUE"); - assertNull(multiCompanyServiceFacade.getCompanyIdForCompanySymbols("SAMPLE-NO-uuid", req, null)); + assertNull(companyServiceFacade.getCompanyIdForCompanySymbols("SAMPLE-NO-uuid", req, null)); req.setCompanySymbolValue("INN-VALUE"); - assertNull(multiCompanyServiceFacade.getCompanyIdForCompanySymbols("SAMPLE-NO-uuid", req, null)); + assertNull(companyServiceFacade.getCompanyIdForCompanySymbols("SAMPLE-NO-uuid", req, null)); req.setCompanySymbol(CompanySymbol.INN.getKey()); - assertEquals(COMPANY_ID, multiCompanyServiceFacade.getCompanyIdForCompanySymbols("SAMPLE-NO-uuid", req, null)); + assertEquals(COMPANY_ID, companyServiceFacade.getCompanyIdForCompanySymbols("SAMPLE-NO-uuid", req, null)); req.setCompanySymbol(null); req.setCompanySymbolValue(null); - assertNull(multiCompanyServiceFacade.getCompanyIdForCompanySymbols(null, req, null)); + assertNull(companyServiceFacade.getCompanyIdForCompanySymbols(null, req, null)); List csReq=new ArrayList<>(); - assertNull(multiCompanyServiceFacade.getCompanyIdForCompanySymbols(null, req, null)); - assertNull(multiCompanyServiceFacade.getCompanyIdForCompanySymbols(null, req, csReq)); + assertNull(companyServiceFacade.getCompanyIdForCompanySymbols(null, req, null)); + assertNull(companyServiceFacade.getCompanyIdForCompanySymbols(null, req, csReq)); { CompanySymbolNewRequest cs=new CompanySymbolNewRequest(); cs.setCompanySymbol(CompanySymbol.CLRC.getKey()); cs.setCompanySymbolValue("INN-VALUE"); csReq.add(cs); } - assertNull(multiCompanyServiceFacade.getCompanyIdForCompanySymbols(null, req, csReq)); + assertNull(companyServiceFacade.getCompanyIdForCompanySymbols(null, req, csReq)); { CompanySymbolNewRequest cs=new CompanySymbolNewRequest(); cs.setCompanySymbol(CompanySymbol.INN.getKey()); cs.setCompanySymbolValue("INN-VALUE"); csReq.add(cs); } - assertEquals(COMPANY_ID, multiCompanyServiceFacade.getCompanyIdForCompanySymbols(null, req, csReq)); + assertEquals(COMPANY_ID, companyServiceFacade.getCompanyIdForCompanySymbols(null, req, csReq)); } @Test @@ -229,7 +220,7 @@ public class MultiCompanyServiceListenerTest { testReq.setCompanySymbols(null); testReq.setContacts(null); testReq.setClientCodes(null); - multiCompanyServiceFacade.fillCompanyId(testReq, COMPANY_ID); + companyServiceFacade.fillCompanyId(testReq, COMPANY_ID); assertEquals(COMPANY_ID, testReq.getCompany().getId()); assertNotNull(testReq.getProfileDocuments()); assertNotNull(testReq.getCompanySymbols()); @@ -240,7 +231,7 @@ public class MultiCompanyServiceListenerTest { CompanyGatewayRequest testReq = new CompanyGatewayRequest(); testReq.setCompany(new CompanyNewRequest()); testReq.setCompanyInfo(new CompanyInfoUpdateRequest()); - multiCompanyServiceFacade.fillCompanyId(testReq, COMPANY_ID); + companyServiceFacade.fillCompanyId(testReq, COMPANY_ID); assertEquals(COMPANY_ID, testReq.getCompany().getId()); } } diff --git a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/v2/ProfileDocumentServiceListenerTest.java b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/v2/ProfileDocumentServiceListenerTest.java new file mode 100644 index 000000000..d41b4cdb8 --- /dev/null +++ b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/v2/ProfileDocumentServiceListenerTest.java @@ -0,0 +1,280 @@ +package ru.spcex.clearing.company.service.v2; + +import static ru.spcex.clearing.test.MatcherFactory.usingIgnoringFieldsComparator; +import static ru.spcex.clearing.test.TestUtils.addRecordToKafka; +import static ru.spcex.clearing.test.TestUtils.getJsonStringForNew; +import static ru.spcex.clearing.test.TestUtils.getJsonStringForUpdate; +import static ru.spcex.clearing.test.TestUtils.waitingSendAndCheckRecord; +import static ru.spcex.clearing.test.config.ImdgTestConfig.currentID; +import static ru.spcex.clearing.test.config.ImdgTestConfig.waitAvailableImdgProviderAndAddAdminWithDefaultId; + +import java.time.LocalDate; +import java.time.temporal.ChronoUnit; +import javax.annotation.PostConstruct; +import org.apache.kafka.clients.consumer.MockConsumer; +import org.apache.kafka.clients.producer.Producer; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit.jupiter.SpringExtension; +import ru.clearing.classes.statics.data.company.Company; +import ru.clearing.classes.statics.data.profile.ProfileDocument; +import ru.clearing.platform.dictionary.DocumentTypeDictionary; +import ru.spcex.clearing.company.config.BeanConfiguration; +import ru.spcex.clearing.company.config.validation.CompanySymbolValidationConfig; +import ru.spcex.clearing.company.config.validation.CompanyValidationConfig; +import ru.spcex.clearing.company.config.validation.ProfileDocumentValidationConfig; +import ru.spcex.clearing.company.config.validation.RelationValidationConfig; +import ru.spcex.clearing.company.config.validation.ValidationConfig; +import ru.spcex.clearing.company.service.AccountNotificationHelper; +import ru.spcex.clearing.company.service.v2.facade.ClearingMemberCategoryServiceFacade; +import ru.spcex.clearing.company.service.v2.facade.CompanyInfoServiceFacade; +import ru.spcex.clearing.company.service.v2.facade.CompanyServiceFacade; +import ru.spcex.clearing.company.service.v2.facade.CompanySymbolServiceFacade; +import ru.spcex.clearing.company.service.v2.facade.ContactServiceFacade; +import ru.spcex.clearing.company.service.v2.facade.ProfileDocumentServiceFacade; +import ru.spcex.clearing.company.service.v2.facade.RelationServiceFacade; +import ru.spcex.clearing.company.service.v2.listeners.ProfileDocumentServiceListener; +import ru.spcex.clearing.company.service.v2.validators.ProfileDocumentServiceValidator; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.domain.BaseRequest; +import ru.spcex.clearing.platform.messaging.domain.Consts; +import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.ProfileDocumentNewRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.ProfileDocumentUpdateRequest; +import ru.spcex.clearing.test.MatcherFactory; +import ru.spcex.clearing.test.config.ImdgTestConfig; +import ru.spcex.clearing.test.config.KafkaTestConfig; +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; + +@ExtendWith(SpringExtension.class) +@ContextConfiguration(classes = { + BeanConfiguration.class, + ValidationConfig.class, + ProfileDocumentServiceListener.class, + ProfileDocumentServiceFacade.class, + ProfileDocumentServiceValidator.class, + AccountNotificationHelper.class, + ProfileDocumentValidationConfig.class, + + CompanyInfoServiceFacade.class, + ContactServiceFacade.class, + ClearingMemberCategoryServiceFacade.class, + + CompanyServiceFacade.class, CompanyValidationConfig.class, + CompanySymbolServiceFacade.class, CompanySymbolValidationConfig.class, + AccountNotificationHelper.class, + RelationServiceFacade.class, RelationValidationConfig.class, + + KafkaTestConfig.class, + ImdgTestConfig.class}) +class ProfileDocumentServiceListenerTest { + public static final MatcherFactory.Matcher PROFILE_DOCUMENT_MATCHER = usingIgnoringFieldsComparator(); + private static final int PARTITION = 0; + private static final String TOPIC_DESTINATION_PROFILE_DOCUMENT_NEW = Consts.DESTINATION_PROFILE_DOCUMENT_NEW; + private static final String TOPIC_DESTINATION_PROFILE_DOCUMENT_UPDATE = Consts.DESTINATION_PROFILE_DOCUMENT_UPDATE; + private static final String TOPIC_DESTINATION_PROFILE_DOCUMENT_DELETE = Consts.DESTINATION_PROFILE_DOCUMENT_DELETE; + + private static final Long ID = currentID.getAndIncrement(); + + @Autowired + ProfileDocumentServiceListener profileDocumentServiceListener; + + @Autowired + @Qualifier("hazelcastServiceTest") + private ImdgProvider hazelcastServiceTest; + + private Imdg profileDocumentMap; + private Imdg companyMap; + + @Autowired + @Qualifier("mockProducer") + protected Producer mockProducer; + + private long COMPANY_ID; + private Company TEST_COMPANY; + + private DocumentTypes TEST_DOCUMENT_TYPE = DocumentTypes.cio; + private String TEST_DOCUMENT_TYPE_ID = TEST_DOCUMENT_TYPE.getKey(); + + private DocumentTypes NEW_TEST_DOCUMENT_TYPE = DocumentTypes.edoc; + private String NEW_TEST_DOCUMENT_TYPE_ID = NEW_TEST_DOCUMENT_TYPE.getKey(); + + private final long PROFILE_DOCUMENT_ID = ID; + + @PostConstruct + private void init() { + waitAvailableImdgProviderAndAddAdminWithDefaultId(); + this.profileDocumentMap = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_ProfileDocument, ProfileDocument.class); + this.companyMap = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_Company, Company.class); + + TEST_COMPANY = new Company(); + TEST_COMPANY.setWorkflowStatus(WorkflowStatus.Active.getKey()); + COMPANY_ID = companyMap.insert(TEST_COMPANY); + + Imdg documentTypeDictionaryImdg = hazelcastServiceTest.getImdg( + IMDGDistributedNames.Map_DocumentTypeDictionary, + DocumentTypeDictionary.class + ); + + DocumentTypeDictionary documentTypeDictionary = new DocumentTypeDictionary(); + documentTypeDictionary.setCode(TEST_DOCUMENT_TYPE.getKey()); + documentTypeDictionary.setName("test_name"); + documentTypeDictionaryImdg.insert(documentTypeDictionary); + + DocumentTypeDictionary documentTypeDictionary1 = new DocumentTypeDictionary(); + documentTypeDictionary1.setCode(NEW_TEST_DOCUMENT_TYPE.getKey()); + documentTypeDictionary1.setName("new_test_name"); + documentTypeDictionaryImdg.insert(documentTypeDictionary1); + } + + /** + * {@link ProfileDocumentServiceListener#processNewProfileDocumentRequest(BaseRequest)}
+ * Тест проверяет обновление сущности {@link ProfileDocument} в Hazelcast при передаче из Apache Kafka.
+ * Входной запрос {@link ProfileDocumentNewRequest}:
+ */ + @Test + void newProfileDocument() { + //ARRANGE + ProfileDocumentNewRequest profileDocumentNewRequest = new ProfileDocumentNewRequest(); + profileDocumentNewRequest.setCompanyId(COMPANY_ID); + profileDocumentNewRequest.setDocumentType(TEST_DOCUMENT_TYPE_ID); + profileDocumentNewRequest.setIssueDate(LocalDate.now()); + profileDocumentNewRequest.setIssuePlace("place"); + profileDocumentNewRequest.setIssuer("issuer"); + profileDocumentNewRequest.setIssuerCode("issuerCode"); + profileDocumentNewRequest.setName("name"); + profileDocumentNewRequest.setNumber("number"); + profileDocumentNewRequest.setPlace("place"); + profileDocumentNewRequest.setValidFromDate(LocalDate.now()); + profileDocumentNewRequest.setValidToDate(LocalDate.now().plus(1, ChronoUnit.DAYS)); + profileDocumentNewRequest.setLink("link"); + + ProfileDocument predictableProfileDocument = new ProfileDocument(); + predictableProfileDocument.setId(PROFILE_DOCUMENT_ID); + predictableProfileDocument.setCompanyId(profileDocumentNewRequest.getCompanyId()); + predictableProfileDocument.setDocumentType(profileDocumentNewRequest.getDocumentType()); + predictableProfileDocument.setIssueDate(profileDocumentNewRequest.getIssueDate()); + predictableProfileDocument.setIssuePlace(profileDocumentNewRequest.getIssuePlace()); + predictableProfileDocument.setIssuer(profileDocumentNewRequest.getIssuer()); + predictableProfileDocument.setIssuerCode(profileDocumentNewRequest.getIssuerCode()); + predictableProfileDocument.setName(profileDocumentNewRequest.getName()); + predictableProfileDocument.setNumber(profileDocumentNewRequest.getNumber()); + predictableProfileDocument.setPlace(profileDocumentNewRequest.getPlace()); + predictableProfileDocument.setValidFromDate(profileDocumentNewRequest.getValidFromDate()); + predictableProfileDocument.setValidToDate(profileDocumentNewRequest.getValidToDate()); + predictableProfileDocument.setLink(profileDocumentNewRequest.getLink()); + + //ACT + String jsonString = getJsonStringForNew(profileDocumentNewRequest, ID); + + addRecordToKafka((MockConsumer) profileDocumentServiceListener.getConsumer(), TOPIC_DESTINATION_PROFILE_DOCUMENT_NEW, PARTITION, 0, jsonString); + + //ASSERT + waitingSendAndCheckRecord(ID, mockProducer); + ProfileDocument resultNew = profileDocumentMap.getFirstObjectBySQL(String.format("companyId = %d", COMPANY_ID)); + predictableProfileDocument.setId(resultNew.getId()); + PROFILE_DOCUMENT_MATCHER.assertMatch(resultNew, predictableProfileDocument); + } + + @Test + void updateProfileDocument() { + //ARRANGE + ProfileDocument existsProfileDocument = new ProfileDocument(); + existsProfileDocument.setId(ID); + existsProfileDocument.setCompanyId(COMPANY_ID); + existsProfileDocument.setDocumentType(TEST_DOCUMENT_TYPE_ID); + existsProfileDocument.setIssueDate(LocalDate.now()); + existsProfileDocument.setIssuePlace("place"); + existsProfileDocument.setIssuer("issuer"); + existsProfileDocument.setIssuerCode("issuerCode"); + existsProfileDocument.setName("name"); + existsProfileDocument.setNumber("number"); + existsProfileDocument.setPlace("place"); + existsProfileDocument.setValidFromDate(LocalDate.now()); + existsProfileDocument.setValidToDate(LocalDate.now().plus(1, ChronoUnit.DAYS)); + existsProfileDocument.setLink("link"); + profileDocumentMap.insert(existsProfileDocument); + + ProfileDocument predictableProfileDocument = new ProfileDocument(); + predictableProfileDocument.setId(PROFILE_DOCUMENT_ID); + predictableProfileDocument.setCompanyId(COMPANY_ID); + predictableProfileDocument.setDocumentType(NEW_TEST_DOCUMENT_TYPE_ID); + predictableProfileDocument.setIssueDate(LocalDate.now()); + predictableProfileDocument.setIssuePlace("new_place"); + predictableProfileDocument.setIssuer("new_issuer"); + predictableProfileDocument.setIssuerCode("new_issuerCode"); + predictableProfileDocument.setName("new_name"); + predictableProfileDocument.setNumber("new_number"); + predictableProfileDocument.setPlace("new_place"); + predictableProfileDocument.setValidFromDate(LocalDate.now()); + predictableProfileDocument.setValidToDate(LocalDate.now().plus(1, ChronoUnit.DAYS)); + predictableProfileDocument.setLink("new_link"); + + ProfileDocumentUpdateRequest profileDocumentUpdateRequest = new ProfileDocumentUpdateRequest(); + profileDocumentUpdateRequest.setId(PROFILE_DOCUMENT_ID); + profileDocumentUpdateRequest.setCompanyId(COMPANY_ID); + profileDocumentUpdateRequest.setDocumentType(NEW_TEST_DOCUMENT_TYPE_ID); + profileDocumentUpdateRequest.setIssueDate(LocalDate.now()); + profileDocumentUpdateRequest.setIssuePlace("new_place"); + profileDocumentUpdateRequest.setIssuer("new_issuer"); + profileDocumentUpdateRequest.setIssuerCode("new_issuerCode"); + profileDocumentUpdateRequest.setName("new_name"); + profileDocumentUpdateRequest.setNumber("new_number"); + profileDocumentUpdateRequest.setPlace("new_place"); + profileDocumentUpdateRequest.setValidFromDate(LocalDate.now()); + profileDocumentUpdateRequest.setValidToDate(LocalDate.now().plus(1, ChronoUnit.DAYS)); + profileDocumentUpdateRequest.setLink("new_link"); + + //ACT + String jsonString = getJsonStringForUpdate(profileDocumentUpdateRequest, ID); + + addRecordToKafka((MockConsumer) profileDocumentServiceListener.getConsumer(), TOPIC_DESTINATION_PROFILE_DOCUMENT_UPDATE, PARTITION, 0, jsonString); + + //ASSERT + waitingSendAndCheckRecord(ID, mockProducer); + ProfileDocument resultUpdate = profileDocumentMap.getFirstObjectBySQL(String.format("companyId = %d", COMPANY_ID)); +// predictableProfileDocument.setId(resultUpdate.getId()); + PROFILE_DOCUMENT_MATCHER.assertMatch(resultUpdate, predictableProfileDocument); + } + + + @Test + void deleteProfileDocument() { + //ARRANGE + ProfileDocument existsProfileDocument = new ProfileDocument(); + existsProfileDocument.setId(PROFILE_DOCUMENT_ID); + existsProfileDocument.setCompanyId(COMPANY_ID); + existsProfileDocument.setDocumentType(TEST_DOCUMENT_TYPE_ID); + existsProfileDocument.setIssueDate(LocalDate.now()); + existsProfileDocument.setIssuePlace("place"); + existsProfileDocument.setIssuer("issuer"); + existsProfileDocument.setIssuerCode("issuerCode"); + existsProfileDocument.setName("name"); + existsProfileDocument.setNumber("number"); + existsProfileDocument.setPlace("place"); + existsProfileDocument.setValidFromDate(LocalDate.now()); + existsProfileDocument.setValidToDate(LocalDate.now().plus(1, ChronoUnit.DAYS)); + existsProfileDocument.setLink("link"); + profileDocumentMap.insert(existsProfileDocument); + + CommonDeleteRequest profileDocumentDeleteRequest = new CommonDeleteRequest(); + profileDocumentDeleteRequest.setId(PROFILE_DOCUMENT_ID); + + //ACT + String jsonString = getJsonStringForUpdate(profileDocumentDeleteRequest, ID); + + addRecordToKafka((MockConsumer) profileDocumentServiceListener.getConsumer(), TOPIC_DESTINATION_PROFILE_DOCUMENT_DELETE, PARTITION, 0, jsonString); + + //ASSERT + waitingSendAndCheckRecord(ID, mockProducer); + ProfileDocument resultUpdate = profileDocumentMap.getSingleObjectByID(PROFILE_DOCUMENT_ID); + Assertions.assertNull(resultUpdate); + } +} \ No newline at end of file diff --git a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/v2/RelationServiceListenerTest.java b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/v2/RelationServiceListenerTest.java new file mode 100644 index 000000000..08a1754b9 --- /dev/null +++ b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/v2/RelationServiceListenerTest.java @@ -0,0 +1,229 @@ +package ru.spcex.clearing.company.service.v2; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static ru.spcex.clearing.test.MatcherFactory.usingIgnoringFieldsComparator; +import static ru.spcex.clearing.test.TestUtils.addRecordToKafka; +import static ru.spcex.clearing.test.TestUtils.clearAllInImdg; +import static ru.spcex.clearing.test.TestUtils.getJsonStringForNew; +import static ru.spcex.clearing.test.TestUtils.getJsonStringForUpdate; +import static ru.spcex.clearing.test.TestUtils.waitingSendAndCheckRecord; +import static ru.spcex.clearing.test.config.ImdgTestConfig.currentID; +import static ru.spcex.clearing.test.config.ImdgTestConfig.waitAvailableImdgProviderAndAddAdminWithDefaultId; + +import javax.annotation.PostConstruct; +import org.apache.kafka.clients.consumer.MockConsumer; +import org.apache.kafka.clients.producer.Producer; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit.jupiter.SpringExtension; +import ru.clearing.classes.statics.data.company.Company; +import ru.clearing.classes.statics.data.company.relation.Relation; +import ru.clearing.platform.dictionary.ClearingCategoryDictionary; +import ru.clearing.platform.dictionary.ServiceStatusDictionary; +import ru.clearing.platform.dictionary.WorkflowStatusDictionary; +import ru.spcex.clearing.company.config.BeanConfiguration; +import ru.spcex.clearing.company.config.validation.RelationValidationConfig; +import ru.spcex.clearing.company.config.validation.ValidationConfig; +import ru.spcex.clearing.company.service.AccountNotificationHelper; +import ru.spcex.clearing.company.service.v2.facade.RelationServiceFacade; +import ru.spcex.clearing.company.service.v2.listeners.RelationServiceListener; +import ru.spcex.clearing.company.service.v2.validators.RelationServiceValidator; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.domain.Consts; +import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.RelationNewRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.RelationUpdateRequest; +import ru.spcex.clearing.test.MatcherFactory; +import ru.spcex.clearing.test.config.ImdgTestConfig; +import ru.spcex.clearing.test.config.KafkaTestConfig; +import ru.spcex.platform.enumeration.ClearingCategory; +import ru.spcex.platform.enumeration.WorkflowStatus; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; + +@ExtendWith(SpringExtension.class) +@ContextConfiguration(classes = { + BeanConfiguration.class, + ValidationConfig.class, + RelationServiceListener.class, + RelationServiceFacade.class, + RelationServiceValidator.class, + AccountNotificationHelper.class, + RelationValidationConfig.class, + KafkaTestConfig.class, + ImdgTestConfig.class}) +class RelationServiceListenerTest { + + public static final MatcherFactory.Matcher RELATION_MATCHER = usingIgnoringFieldsComparator("created", "updated"); + private static final int PARTITION = 0; + + private static final Long ID = currentID.getAndIncrement(); + + @Autowired + RelationServiceListener relationServiceListener; + + @Autowired + @Qualifier("hazelcastServiceTest") + private ImdgProvider hazelcastServiceTest; + + private Imdg relationMap; + private Imdg companyMap; + + @Autowired + @Qualifier("mockProducer") + protected Producer mockProducer; + + private long COMPANY_ID; + + private final long RELATION_ID = ID; + + @PostConstruct + private void init() { + waitAvailableImdgProviderAndAddAdminWithDefaultId(); + this.relationMap = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_Relation, Relation.class); + this.companyMap = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_Company, Company.class); + + Company testCompany = new Company(); + testCompany.setWorkflowStatus(WorkflowStatus.Active.getKey()); + COMPANY_ID = companyMap.insert(testCompany); + + Imdg workflowStatusDictionaryImdg = hazelcastServiceTest.getImdg( + IMDGDistributedNames.Map_WorkflowStatusDictionary, + WorkflowStatusDictionary.class + ); + WorkflowStatusDictionary workflowStatusDictionary = new WorkflowStatusDictionary(); + workflowStatusDictionary.setId(1L); + workflowStatusDictionary.setCode(WorkflowStatus.Active.getKey()); + workflowStatusDictionary.setName("active"); + workflowStatusDictionaryImdg.insert(workflowStatusDictionary); + workflowStatusDictionary = new WorkflowStatusDictionary(); + workflowStatusDictionary.setId(2L); + workflowStatusDictionary.setCode(WorkflowStatus.Blocked.getKey()); + workflowStatusDictionary.setName("not active"); + workflowStatusDictionaryImdg.insert(workflowStatusDictionary); + + { + Imdg serviceStatusDictionaryImdg = hazelcastServiceTest.getImdg( + IMDGDistributedNames.Map_ServiceStatusDictionary, + ServiceStatusDictionary.class + ); + ServiceStatusDictionary status=new ServiceStatusDictionary(); + status.setId(1L); + status.setCode("ACTV"); + status.setName("\"ACTV\""); + serviceStatusDictionaryImdg.insert(status); + } + + Imdg clearingCategoryDictionaryImdg = hazelcastServiceTest.getImdg( + IMDGDistributedNames.Map_ClearingCategoryDictionary, + ClearingCategoryDictionary.class + ); + ClearingCategoryDictionary clearingCategoryDictionary = new ClearingCategoryDictionary(); + clearingCategoryDictionary.setId(1L); + clearingCategoryDictionary.setCode(ClearingCategory.I.getKey()); + clearingCategoryDictionary.setName("I"); + clearingCategoryDictionaryImdg.insert(clearingCategoryDictionary); + } + + + @Test + void newRelation() { + //ARRANGE + clearAllInImdg(relationMap); + RelationNewRequest relationNewRequest = new RelationNewRequest(); + relationNewRequest.setCompanyId(COMPANY_ID); + relationNewRequest.setServiceStatus("ACTV"); + relationNewRequest.setClearingMemberCategory("I"); + relationNewRequest.setComment(null); + + Relation predictableRelation = new Relation(); + predictableRelation.setId(RELATION_ID); + predictableRelation.setConsumerId(relationNewRequest.companyId); + predictableRelation.setService("MKR"); + predictableRelation.setServiceProduct("ZERO"); + predictableRelation.setSupplierId(1L); + predictableRelation.setServiceStatus("ACTV"); + + //ACT + String jsonString = getJsonStringForNew(relationNewRequest, ID); + + addRecordToKafka((MockConsumer) relationServiceListener.getConsumer(), Consts.DESTINATION_RELATION_NEW, PARTITION, 0, jsonString); + + //ASSERT + waitingSendAndCheckRecord(ID, mockProducer); + Relation resultNew = relationMap.getFirstObjectBySQL("serviceStatus=ACTV"); // String.format("supplierId = %d", COMPANY_ID)); + predictableRelation.setId(resultNew.getId()); + RELATION_MATCHER.assertMatch(resultNew, predictableRelation); + } + + @Test + void updateRelation() { + //ARRANGE + Relation existsRelation = new Relation(); + existsRelation.setId(ID); + existsRelation.setConsumerId(COMPANY_ID); + existsRelation.setSupplierId(1L); + existsRelation.setComment("Test ONE"); + existsRelation.setServiceStatus("ACTV"); + existsRelation.setServiceProduct("PROD"); + existsRelation.setService("MKR"); + relationMap.insert(existsRelation); + + Relation predictableRelation = new Relation(); + predictableRelation.setId(ID); + predictableRelation.setConsumerId(COMPANY_ID); + predictableRelation.setSupplierId(1L); + predictableRelation.setComment("Another Me - ONE"); + predictableRelation.setServiceStatus("ACTV"); + predictableRelation.setServiceProduct("PROD"); + predictableRelation.setService("MKR"); + + RelationUpdateRequest relationUpdateRequest = new RelationUpdateRequest(); + relationUpdateRequest.setId(RELATION_ID); + relationUpdateRequest.setComment("Another Me - ONE"); + relationUpdateRequest.setServiceStatus("ACTV"); + + //ACT + String jsonString = getJsonStringForUpdate(relationUpdateRequest, ID); + + addRecordToKafka((MockConsumer) relationServiceListener.getConsumer(), Consts.DESTINATION_RELATION_UPDATE, PARTITION, 0, jsonString); + + //ASSERT + waitingSendAndCheckRecord(ID, mockProducer); + Relation resultUpdate = relationMap.getFirstObjectBySQL(String.format("id = %d", RELATION_ID)); +// predictableProfileDocument.setId(resultUpdate.getId()); + RELATION_MATCHER.assertMatch(resultUpdate, predictableRelation); + } + + + @Test + void deleteProfileDocument() { + //ARRANGE + Relation existsRelation = new Relation(); + existsRelation.setId(ID); + existsRelation.setConsumerId(COMPANY_ID); + existsRelation.setSupplierId(1L); + existsRelation.setComment("Test ONE"); + existsRelation.setServiceStatus("ACTV"); + existsRelation.setServiceProduct("PROD"); + existsRelation.setService("MKR"); + relationMap.insert(existsRelation); + + CommonDeleteRequest profileDocumentDeleteRequest = new CommonDeleteRequest(); + profileDocumentDeleteRequest.setId(RELATION_ID); + + //ACT + String jsonString = getJsonStringForUpdate(profileDocumentDeleteRequest, ID); + + addRecordToKafka((MockConsumer) relationServiceListener.getConsumer(), Consts.DESTINATION_RELATION_DELETE, PARTITION, 0, jsonString); + + //ASSERT + waitingSendAndCheckRecord(ID, mockProducer); + Relation resultUpdate = relationMap.getSingleObjectByID(RELATION_ID); +// Assertions.assertNull(resultUpdate); + assertEquals(WorkflowStatus.Blocked.getKey(), resultUpdate.getServiceStatus()); + } +} \ No newline at end of file diff --git a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/v2/SettlementHousePropertiesServiceListenerTest.java b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/v2/SettlementHousePropertiesServiceListenerTest.java new file mode 100644 index 000000000..6985bf874 --- /dev/null +++ b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/v2/SettlementHousePropertiesServiceListenerTest.java @@ -0,0 +1,237 @@ +package ru.spcex.clearing.company.service.v2; + +import static ru.spcex.clearing.test.MatcherFactory.usingIgnoringFieldsComparator; +import static ru.spcex.clearing.test.TestUtils.addRecordToKafka; +import static ru.spcex.clearing.test.TestUtils.getJsonStringForDelete; +import static ru.spcex.clearing.test.TestUtils.getJsonStringForNew; +import static ru.spcex.clearing.test.TestUtils.getJsonStringForUpdate; +import static ru.spcex.clearing.test.TestUtils.waitingSendAndCheckRecord; +import static ru.spcex.clearing.test.config.ImdgTestConfig.waitAvailableImdgProviderAndAddAdminWithDefaultId; + +import java.time.Instant; +import java.util.Map; +import javax.annotation.PostConstruct; +import org.apache.kafka.clients.consumer.MockConsumer; +import org.apache.kafka.clients.producer.Producer; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit.jupiter.SpringExtension; +import ru.clearing.classes.statics.data.company.Company; +import ru.clearing.classes.statics.data.company.CompanyRoleSet; +import ru.clearing.classes.statics.data.company.SettlementHouseProperties; +import ru.clearing.classes.statics.data.profile.CompanyInfo; +import ru.clearing.platform.dictionary.AbstractDictionary; +import ru.clearing.platform.dictionary.AllowedDictionary; +import ru.clearing.platform.dictionary.CompanyRoleDictionary; +import ru.clearing.platform.dictionary.CompanySymbolDictionary; +import ru.clearing.platform.dictionary.WorkflowStatusDictionary; +import ru.spcex.clearing.company.config.BeanConfiguration; +import ru.spcex.clearing.company.config.validation.CompanySymbolValidationConfig; +import ru.spcex.clearing.company.config.validation.SettlementHousePropertiesValidationConfig; +import ru.spcex.clearing.company.config.validation.ValidationConfig; +import ru.spcex.clearing.company.service.v2.facade.SettlementHousePropertiesServiceFacade; +import ru.spcex.clearing.company.service.v2.listeners.SettlementHousePropertiesServiceListener; +import ru.spcex.clearing.company.service.v2.validators.SettlementHousePropertiesServiceValidator; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.domain.BaseRequest; +import ru.spcex.clearing.platform.messaging.domain.Consts; +import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.SettlementHousePropertyNewRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.SettlementHousePropertyUpdateRequest; +import ru.spcex.clearing.test.MatcherFactory; +import ru.spcex.clearing.test.config.ImdgTestConfig; +import ru.spcex.clearing.test.config.KafkaTestConfig; +import ru.spcex.platform.enumeration.CompanyRole; +import ru.spcex.platform.enumeration.CurrencyCode; +import ru.spcex.platform.enumeration.WorkflowStatus; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; + +@ExtendWith(SpringExtension.class) +@ContextConfiguration(classes = { + SettlementHousePropertiesServiceListener.class, + SettlementHousePropertiesServiceFacade.class, + SettlementHousePropertiesServiceValidator.class, + SettlementHousePropertiesValidationConfig.class, + CompanySymbolValidationConfig.class, + + ValidationConfig.class, + BeanConfiguration.class, + + KafkaTestConfig.class, + ImdgTestConfig.class}) +class SettlementHousePropertiesServiceListenerTest { + public static final MatcherFactory.Matcher SETTLEMENT_HOUSE_PROPERTIES_MATCHER = usingIgnoringFieldsComparator(); + private static final int PARTITION = 0; + private static final Long ID = 10L; + private static final Long COMPANY_ID = 105L; + + @Autowired + SettlementHousePropertiesServiceListener settlementHousePropertiesServiceListener; + + @Autowired + @Qualifier("hazelcastServiceTest") + private ImdgProvider hazelcastServiceTest; + + private Imdg companyImdg; + private Imdg companyRoleSetImdg; + private Imdg settlementHousePropertiesImdg; + + @Autowired + @Qualifier("mockProducer") + protected Producer mockProducer; + + @PostConstruct + private void init() { + waitAvailableImdgProviderAndAddAdminWithDefaultId(); + companyImdg = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_Company, Company.class); + companyRoleSetImdg = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_CompanyRoleSet, CompanyRoleSet.class); + settlementHousePropertiesImdg = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_SettlementHouseProperties, SettlementHouseProperties.class); + + // Словари для теста, применяются в ValidationConfig + putToDictionary(IMDGDistributedNames.Map_WorkflowStatusDictionary, new WorkflowStatusDictionary(), "ACTV"); + putToDictionary(IMDGDistributedNames.Map_CompanySymbolDictionary, new CompanySymbolDictionary(), "CLRC"); + putToDictionary(IMDGDistributedNames.Map_AllowedDictionary, new AllowedDictionary(), "ALWD"); + putToDictionary(IMDGDistributedNames.Map_CompanyRoleDictionary, new CompanyRoleDictionary(), "RPRT"); + putToDictionary(IMDGDistributedNames.Map_CompanyRoleDictionary, new CompanyRoleDictionary(), "SETH"); + putToDictionary(IMDGDistributedNames.Map_CurrencyCodeDictionary, new AllowedDictionary(), "RUB"); + putToDictionary(IMDGDistributedNames.Map_CurrencyCodeDictionary, new AllowedDictionary(), "AED"); + putToDictionary(IMDGDistributedNames.Map_CurrencyCodeDictionary, new AllowedDictionary(), "INR"); + + Company comp = new Company(); + comp.setId(COMPANY_ID); + comp.setCreated(Instant.now()); + comp.setFullName("Test LLC inc"); + comp.setShortName("Test LLC"); + comp.setProfile(new CompanyInfo()); + comp.setWorkflowStatus(WorkflowStatus.Active.getKey()); + companyImdg.insert(comp); + CompanyRoleSet crs = new CompanyRoleSet(); + crs.setId(COMPANY_ID); + crs.setCompanyId(COMPANY_ID); + crs.setCompanyRole(CompanyRole.SETH.getKey()); + crs.setWorkflowStatus(WorkflowStatus.Active.getKey()); + companyRoleSetImdg.insert(crs); + } + + private void putToDictionary(String mapName, D object, String code) { + Imdg dMap = (Imdg) hazelcastServiceTest.getImdg(mapName, object.getClass()); + object.setId(1000L + code.hashCode() % 1000); + object.setCode(code); + object.setName("name of " + code); +// assert dMap.getSingleObjectByID(object.getId()) == null; + dMap.insert(object); + } + + /** + * {@link SettlementHousePropertiesServiceListener#processNewSettlementHousePropertyRequest(BaseRequest)} (BaseRequest)}
+ * * Тест проверяет создание сущности {@link SettlementHouseProperties} в IMDG при передаче из Apache Kafka.
+ * * Входной запрос {@link SettlementHousePropertyNewRequest}:
+ * * {@link SettlementHousePropertyNewRequest#getCompanyId()} - COMPANY_ID
+ * * {@link SettlementHousePropertyNewRequest#getCurrencyCode()} - AED
+ */ + @Test + void settlementHousePropertiesNew1() { + //ARRANGE + final String DESTINATION_NEW = Consts.DESTINATION_SETTLEMENT_HOUSE_PROPERTY_NEW; + companyImdg.size(); + + SettlementHousePropertyNewRequest newRequest = new SettlementHousePropertyNewRequest(); + newRequest.setCompanyId(COMPANY_ID); + newRequest.setCurrencyCode("AED"); // RUB разрешён только для COMPANY_ID=2. + + //ACT + String jsonString = getJsonStringForNew(newRequest, ID); + addRecordToKafka((MockConsumer) settlementHousePropertiesServiceListener.getConsumer(), DESTINATION_NEW, PARTITION, 0, jsonString); + + //ASSERT + waitingSendAndCheckRecord(ID, mockProducer); + + SettlementHouseProperties resultNew = settlementHousePropertiesImdg.getFirstObjectByFieldValues(Map.of("companyId", COMPANY_ID)); + Assertions.assertNotNull(resultNew); + Assertions.assertEquals("AED", resultNew.getCurrencyCode()); + Assertions.assertEquals(COMPANY_ID, resultNew.getCompanyId()); + + // CLEAN UP + settlementHousePropertiesImdg.delete(resultNew); + } + + /** + * {@link SettlementHousePropertiesServiceListener#processUpdateSettlementHousePropertyRequest(BaseRequest)} (BaseRequest)}
+ * * Тест проверяет обновление сущности {@link SettlementHouseProperties} в IMDG при передаче из Apache Kafka.
+ * * Входной запрос {@link SettlementHousePropertyUpdateRequest}:
+ * * {@link SettlementHousePropertyUpdateRequest#getId()} - ID
+ * * {@link SettlementHousePropertyUpdateRequest#getCompanyId()} - COMPANY_ID
+ * * {@link SettlementHousePropertyUpdateRequest#getCurrencyCode()} - AED
+ */ + @Test + void companyRoleSetUpdate() { + final String DESTINATION_UPDATE = Consts.DESTINATION_SETTLEMENT_HOUSE_PROPERTY_UPDATE; + //ARRANGE + SettlementHouseProperties existsSettlementHouseProperties = new SettlementHouseProperties(); + existsSettlementHouseProperties.setId(ID); + existsSettlementHouseProperties.setCompanyId(COMPANY_ID); + existsSettlementHouseProperties.setCurrencyCode("INR"); // Индийская рупия + settlementHousePropertiesImdg.insert(existsSettlementHouseProperties); + + SettlementHousePropertyUpdateRequest settlementHousePropertyUpdateRequest = new SettlementHousePropertyUpdateRequest(); + settlementHousePropertyUpdateRequest.setId(ID); + settlementHousePropertyUpdateRequest.setCompanyId(COMPANY_ID); + settlementHousePropertyUpdateRequest.setCurrencyCode("AED"); + + SettlementHouseProperties predictableSHP = new SettlementHouseProperties(); + predictableSHP.setId(ID); + predictableSHP.setCompanyId(COMPANY_ID); + predictableSHP.setCurrencyCode("AED"); + + //ACT + String jsonString = getJsonStringForUpdate(settlementHousePropertyUpdateRequest, ID); + + addRecordToKafka((MockConsumer) settlementHousePropertiesServiceListener.getConsumer(), DESTINATION_UPDATE, PARTITION, 0, jsonString); + + //ASSERT + waitingSendAndCheckRecord(ID, mockProducer); + + SettlementHouseProperties resultUpdating = settlementHousePropertiesImdg.getSingleObjectByID(ID); + SETTLEMENT_HOUSE_PROPERTIES_MATCHER.assertMatch(resultUpdating, predictableSHP); + + // CLEAN UP + settlementHousePropertiesImdg.delete(resultUpdating); + } + + + /** + * {@link SettlementHousePropertiesServiceListener#processDeleteSettlementHousePropertyRequest(BaseRequest)} (BaseRequest)} (BaseRequest)}
+ * Тест проверяет удаление сущности {@link SettlementHouseProperties} в Hazelcast при передаче из Apache Kafka.
+ * Входной запрос {@link CommonDeleteRequest}:
+ * {@link CommonDeleteRequest#id} - Идентификатор записи
+ */ + @Test + void deleteSHP() throws InterruptedException { + //ARRANGE + final Long ID = 101L; + SettlementHouseProperties existsSettlementHouseProperties = new SettlementHouseProperties(); + existsSettlementHouseProperties.setId(ID); + existsSettlementHouseProperties.setCompanyId(COMPANY_ID); + existsSettlementHouseProperties.setCurrencyCode(CurrencyCode.RUR.getKey()); + settlementHousePropertiesImdg.insert(existsSettlementHouseProperties); + + CommonDeleteRequest commonDeleteRequest = new CommonDeleteRequest(); + commonDeleteRequest.setId(ID); + + //ACT + String jsonString = getJsonStringForDelete(commonDeleteRequest, ID); + addRecordToKafka((MockConsumer) settlementHousePropertiesServiceListener.getConsumer(), Consts.DESTINATION_SETTLEMENT_HOUSE_PROPERTY_DELETE, PARTITION, 0, jsonString); + + //ASSERT + waitingSendAndCheckRecord(ID, mockProducer); + + //Company resultDeleting = companyImdg.getSingleObjectByID(ID); + SettlementHouseProperties resultDeleting = settlementHousePropertiesImdg.getFirstObjectBySQL("id=" + ID); + Assertions.assertNull(resultDeleting); + } +} \ No newline at end of file diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/company/ClearingMemberCategoryUpdateRequest.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/company/ClearingMemberCategoryUpdateRequest.java index ecf772361..f7e246965 100644 --- a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/company/ClearingMemberCategoryUpdateRequest.java +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/company/ClearingMemberCategoryUpdateRequest.java @@ -23,4 +23,27 @@ public class ClearingMemberCategoryUpdateRequest { public void setClearingMemberCategory(String clearingMemberCategory) { this.clearingMemberCategory = clearingMemberCategory; } + + public static Builder builder() { + return new ClearingMemberCategoryUpdateRequest().new Builder(); + } + + public class Builder { + private Builder() { + } + + public Builder id(Long id) { + ClearingMemberCategoryUpdateRequest.this.id = id; + return this; + } + + public Builder clearingMemberCategory(String clearingMemberCategory) { + ClearingMemberCategoryUpdateRequest.this.clearingMemberCategory = clearingMemberCategory; + return this; + } + + public ClearingMemberCategoryUpdateRequest build() { + return ClearingMemberCategoryUpdateRequest.this; + } + } } diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/company/CompanySymbolUpdateRequest.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/company/CompanySymbolUpdateRequest.java index fb637060e..3ea38e9f1 100644 --- a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/company/CompanySymbolUpdateRequest.java +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/company/CompanySymbolUpdateRequest.java @@ -47,4 +47,37 @@ public class CompanySymbolUpdateRequest { public void setCompanySymbolValue(String companySymbolValue) { this.companySymbolValue = companySymbolValue; } + + public static Builder builder() { + return new CompanySymbolUpdateRequest().new Builder(); + } + + public class Builder { + private Builder() { + } + + public Builder id(Long id) { + CompanySymbolUpdateRequest.this.id = id; + return this; + } + + public Builder companyId(Long companyId) { + CompanySymbolUpdateRequest.this.companyId = companyId; + return this; + } + + public Builder companySymbol(String companySymbol) { + CompanySymbolUpdateRequest.this.companySymbol = companySymbol; + return this; + } + + public Builder companySymbolValue(String companySymbolValue) { + CompanySymbolUpdateRequest.this.companySymbolValue = companySymbolValue; + return this; + } + + public CompanySymbolUpdateRequest build() { + return CompanySymbolUpdateRequest.this; + } + } } diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/company/ContactUpdateRequest.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/company/ContactUpdateRequest.java index f03a0833d..dce5ef22e 100644 --- a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/company/ContactUpdateRequest.java +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/company/ContactUpdateRequest.java @@ -33,4 +33,32 @@ public class ContactUpdateRequest { public void setContactValue(String contactValue) { this.contactValue = contactValue; } + + public static Builder builder() { + return new ContactUpdateRequest().new Builder(); + } + + public class Builder { + private Builder() { + } + + public Builder id(Long id) { + ContactUpdateRequest.this.id = id; + return this; + } + + public Builder contactType(String contactType) { + ContactUpdateRequest.this.contactType = contactType; + return this; + } + + public Builder contactValue(String contactValue) { + ContactUpdateRequest.this.contactValue = contactValue; + return this; + } + + public ContactUpdateRequest build() { + return ContactUpdateRequest.this; + } + } } diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/company/ProfileDocumentUpdateRequest.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/company/ProfileDocumentUpdateRequest.java index c91937e63..43c58597f 100644 --- a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/company/ProfileDocumentUpdateRequest.java +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/company/ProfileDocumentUpdateRequest.java @@ -145,4 +145,82 @@ public class ProfileDocumentUpdateRequest { public void setId(Long id) { this.id = id; } + + public static Builder builder() { + return new ProfileDocumentUpdateRequest().new Builder(); + } + + public class Builder { + private Builder() { + } + + public Builder id(Long id) { + ProfileDocumentUpdateRequest.this.id = id; + return this; + } + + public Builder companyId(Long companyId) { + ProfileDocumentUpdateRequest.this.companyId = companyId; + return this; + } + + public Builder documentType(String documentType) { + ProfileDocumentUpdateRequest.this.documentType = documentType; + return this; + } + + public Builder issueDate(LocalDate issueDate) { + ProfileDocumentUpdateRequest.this.issueDate = issueDate; + return this; + } + + public Builder issuePlace(String issuePlace) { + ProfileDocumentUpdateRequest.this.issuePlace = issuePlace; + return this; + } + + public Builder issuer(String issuer) { + ProfileDocumentUpdateRequest.this.issuer = issuer; + return this; + } + + public Builder issuerCode(String issuerCode) { + ProfileDocumentUpdateRequest.this.issuerCode = issuerCode; + return this; + } + + public Builder name(String name) { + ProfileDocumentUpdateRequest.this.name = name; + return this; + } + + public Builder number(String number) { + ProfileDocumentUpdateRequest.this.number = number; + return this; + } + + public Builder place(String place) { + ProfileDocumentUpdateRequest.this.place = place; + return this; + } + + public Builder validFromDate(LocalDate validFromDate) { + ProfileDocumentUpdateRequest.this.validFromDate = validFromDate; + return this; + } + + public Builder validToDate(LocalDate validToDate) { + ProfileDocumentUpdateRequest.this.validToDate = validToDate; + return this; + } + + public Builder link(String link) { + ProfileDocumentUpdateRequest.this.link = link; + return this; + } + + public ProfileDocumentUpdateRequest build() { + return ProfileDocumentUpdateRequest.this; + } + } }