ClearingMemberCategoryService, CompanyInfoService, CompanyRoleSetService, CompanySymbolService, ContactService, ProfileDocumentService, RelationService, SettlementHousePropertiesService refactored, new tests added

This commit is contained in:
Ivan Nikolaev-Axenov 2024-07-17 09:59:15 +03:00
parent 928a92fb69
commit 29dc91339d
64 changed files with 6475 additions and 2311 deletions

View file

@ -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<ClearingMemberCategoryNewRequest> 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<ClearingMemberCategory> 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<ClearingMemberCategoryUpdateRequest> 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<ClearingMemberCategory> 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<CommonDeleteRequest> 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<ClearingMemberCategory> 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<ClearingMemberCategoryNewRequest> 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<ClearingMemberCategory> 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<ClearingMemberCategoryUpdateRequest> 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<ClearingMemberCategory> 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<CommonDeleteRequest> 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<ClearingMemberCategory> 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;
// }
}

View file

@ -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<CompanyInfoUpdateRequest> 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<Company> 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<CompanyInfoUpdateRequest> 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<Company> 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;
// }
}

View file

@ -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<CompanyRoleSetNewRequest> companyRoleNewRequestBaseRequest) throws ValidationException {

View file

@ -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<Company> companyIMap;
protected UserRoleVerification userRoleVerification;
protected CompanySymbolService companySymbolService;
protected AccountNotificationHelper accountNotification;
protected RelationService relationService;
private final ValidationHelper validationHelper;
private final Function<CompanyNewRequest, IValidator> companyNewRequestValidator;
private final Function<CompanyNewRequest, IValidator> companyUpdateRequestValidator;
private final Function<CommonDeleteRequest, IValidator> companyDeleteRequestValidator;
// private final Logger log = LoggerFactory.getLogger(getClass());
// private final RequestHelper requestHelper;
// private final ImdgProvider imdgProvider;
// private final ImdgId idSequence;
// private final Imdg<Company> companyIMap;
// protected UserRoleVerification userRoleVerification;
// protected CompanySymbolService companySymbolService;
// protected AccountNotificationHelper accountNotification;
// protected RelationService relationService;
// private final ValidationHelper validationHelper;
// private final Function<CompanyNewRequest, IValidator> companyNewRequestValidator;
// private final Function<CompanyNewRequest, IValidator> companyUpdateRequestValidator;
// private final Function<CommonDeleteRequest, IValidator> companyDeleteRequestValidator;
@Autowired
public CompanyService(Consumer<String, Object> kafkaQueue, Producer<String, Object> kafkaProducer,
ImdgProvider imdgProvider,
RequestHelper requestHelper,
ValidationHelper validationHelper,
UserRoleVerification userRoleVerification,
@Qualifier("companyNewRequestValidator")
Function<CompanyNewRequest, IValidator> companyNewRequestValidator,
@Qualifier("companyUpdateRequestValidator")
Function<CompanyNewRequest, IValidator> companyUpdateRequestValidator,
@Qualifier("CompanyDeleteRequestValidator")
Function<CommonDeleteRequest, IValidator> companyDeleteRequestValidator,
CompanySymbolService companySymbolService,
AccountNotificationHelper accountNotification,
RelationService relationService) {
public CompanyService(Consumer<String, Object> kafkaQueue, Producer<String, Object> kafkaProducer
// ImdgProvider imdgProvider,
// RequestHelper requestHelper,
// ValidationHelper validationHelper,
// UserRoleVerification userRoleVerification,
// @Qualifier("companyNewRequestValidator")
// Function<CompanyNewRequest, IValidator> companyNewRequestValidator,
// @Qualifier("companyUpdateRequestValidator")
// Function<CompanyNewRequest, IValidator> companyUpdateRequestValidator,
// @Qualifier("CompanyDeleteRequestValidator")
// Function<CommonDeleteRequest, IValidator> 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<EnumMessage> 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<EnumMessage> 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<CompanySymbols> 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<Company> 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<EnumMessage> error = validator.tillFirstError();
if (error.isPresent()) {
throw new ValidationException(error.get());
}
}
ImdgTransaction transaction = imdgProvider.newTransaction();
transaction.beginTransaction();
boolean txOk = false;
try {
Imdg<Company> 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<EnumMessage> 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<Company> 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<CommonDeleteRequest> 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<Company> 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<CommonDeleteRequest> 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<EnumMessage> 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<CompanySymbols> 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<Company> 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<EnumMessage> error = validator.tillFirstError();
// if (error.isPresent()) {
// throw new ValidationException(error.get());
// }
// }
// ImdgTransaction transaction = imdgProvider.newTransaction();
// transaction.beginTransaction();
// boolean txOk = false;
// try {
// Imdg<Company> 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<Company> 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<CommonDeleteRequest> 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<Company> 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<AccountTerminationRequest> 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<Company> 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<CommonDeleteRequest> 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<Company> 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<AccountTerminationRequest> 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());
// }
}

View file

@ -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<EnumMessage> 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<CompanySymbols> companySymbolsTMap = transaction.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class);
companySymbolsTMap.update(newSymbol);
Imdg<Company> 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<CompanySymbolUpdateRequest> 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<CompanySymbols> 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<CommonDeleteRequest> 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<CompanySymbols> 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<EnumMessage> 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<CompanySymbols> companySymbolsTMap = transaction.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class);
// companySymbolsTMap.update(newSymbol);
//
// Imdg<Company> 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<CompanySymbolUpdateRequest> 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<CompanySymbols> 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<CommonDeleteRequest> 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<CompanySymbols> 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;
// }
}

View file

@ -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<ContactNewRequest> 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<ContactUpdateRequest> 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<CommonDeleteRequest> 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<ContactNewRequest> 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<ContactUpdateRequest> 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<CommonDeleteRequest> 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;
// }
}

View file

@ -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<CompanyGatewayRequest> 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<CompanySymbolNewRequest> additionalSymbols(CompanyNewRequest companyNewReq) {
BiFunction<String, String, Optional<CompanySymbolNewRequest>> 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<String, Comparable<?>> query = new HashMap<>();
query.put("companyId", partRequest.getCompanyId());
query.put("documentType", partRequest.getDocumentType());
query.put("issueDate", partRequest.getIssueDate()); // может быть null
Collection<ProfileDocument> 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<String, Comparable<?>> query = new HashMap<>();
query.put("companyId", partRequest.getCompanyId());
query.put("companySymbol", partRequest.getCompanySymbol());
Collection<CompanySymbols> 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<String, Comparable<?>> query = new HashMap<>();
query.put("companyId", partRequest.getCompanyId());
query.put("contactType", partRequest.getContactType());
Collection<Contact> 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<String, Comparable<?>> query = new HashMap<>();
query.put("companyId", partRequest.getCompanyId());
query.put("clearingMemberCategory", partRequest.getClearingMemberCategory());
Collection<ClearingMemberCategory> 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<CompanySymbolNewRequest> companySymbols) {
CompanySymbols companySymbol = null;
if (StringUtils.isNotEmpty(uuid)) {
log.trace("Search company by companySymbol uuid={}", uuid);
Collection<CompanySymbols> 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<CompanySymbols> 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<CompanySymbols> 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 <T> BaseRequest<T> wrapRequest(BaseRequest<?> template, T payload, ActionType action) {
BaseRequest<T> 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<CompanyGatewayRequest> 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<CompanySymbolNewRequest> additionalSymbols(CompanyNewRequest companyNewReq) {
// BiFunction<String, String, Optional<CompanySymbolNewRequest>> 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<String, Comparable<?>> query = new HashMap<>();
// query.put("companyId", partRequest.getCompanyId());
// query.put("documentType", partRequest.getDocumentType());
// query.put("issueDate", partRequest.getIssueDate()); // может быть null
// Collection<ProfileDocument> 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<String, Comparable<?>> query = new HashMap<>();
// query.put("companyId", partRequest.getCompanyId());
// query.put("companySymbol", partRequest.getCompanySymbol());
// Collection<CompanySymbols> 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<String, Comparable<?>> query = new HashMap<>();
// query.put("companyId", partRequest.getCompanyId());
// query.put("contactType", partRequest.getContactType());
// Collection<Contact> 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<String, Comparable<?>> query = new HashMap<>();
// query.put("companyId", partRequest.getCompanyId());
// query.put("clearingMemberCategory", partRequest.getClearingMemberCategory());
// Collection<ClearingMemberCategory> 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<CompanySymbolNewRequest> companySymbols) {
// CompanySymbols companySymbol = null;
// if (StringUtils.isNotEmpty(uuid)) {
// log.trace("Search company by companySymbol uuid={}", uuid);
// Collection<CompanySymbols> 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<CompanySymbols> 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<CompanySymbols> 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 <T> BaseRequest<T> wrapRequest(BaseRequest<?> template, T payload, ActionType action) {
// BaseRequest<T> 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);
// }
// }
}

View file

@ -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<ProfileDocumentNewRequest> 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<CommonDeleteRequest> 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<ProfileDocument> 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<ProfileDocumentUpdateRequest> 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<ProfileDocumentNewRequest> 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<CommonDeleteRequest> 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<ProfileDocument> 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<ProfileDocumentUpdateRequest> 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] согласно описанию с тегом "При расторжении".
// */
// }
}

View file

@ -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<RelationNewRequest> 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<Relation> 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<Relation> 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<Relation> relationMap = transaction.getImdg(IMDGDistributedNames.Map_Relation, Relation.class);
Relation relation = relationMap.getFirstObjectByFieldValues(Map.of("consumerId", companyId));
if (relation == null) {

View file

@ -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<SettlementHousePropertyNewRequest> 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<SettlementHousePropertyUpdateRequest> 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<CommonDeleteRequest> 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<SettlementHousePropertyNewRequest> 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<SettlementHousePropertyUpdateRequest> 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<CommonDeleteRequest> 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;
// }
}

View file

@ -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<ClearingMemberCategory> 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());
}
}

View file

@ -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<Company> 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<Company> 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;
}
}

View file

@ -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<CompanyRoleSet> 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;
}
}

View file

@ -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<Company> companyIMap;
public RelationService relationService;
private final Imdg<Company> companyImdg;
private final RelationServiceFacade relationServiceFacade;
final Imdg<CompanySymbols> companySymbolsImdg;
final Imdg<ProfileDocument> profileDocumentImdg;
final Imdg<Contact> contactImdg;
final Imdg<ClearingMemberCategory> 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<CompanySymbols> 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<CommonDeleteRequest> 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<CommonDeleteRequest> 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<AccountTerminationRequest> 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<CompanySymbolNewRequest> additionalSymbols(CompanyNewRequest companyNewReq) {
BiFunction<String, String, Optional<CompanySymbolNewRequest>> 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<String, Comparable<?>> query = new HashMap<>();
query.put("companyId", partRequest.getCompanyId());
query.put("documentType", partRequest.getDocumentType());
query.put("issueDate", partRequest.getIssueDate()); // может быть null
Collection<ProfileDocument> 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<String, Comparable<?>> query = new HashMap<>();
query.put("companyId", partRequest.getCompanyId());
query.put("companySymbol", partRequest.getCompanySymbol());
Collection<CompanySymbols> 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<String, Comparable<?>> query = new HashMap<>();
query.put("companyId", partRequest.getCompanyId());
query.put("contactType", partRequest.getContactType());
Collection<Contact> 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<String, Comparable<?>> query = new HashMap<>();
query.put("companyId", partRequest.getCompanyId());
query.put("clearingMemberCategory", partRequest.getClearingMemberCategory());
Collection<ClearingMemberCategory> 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<CompanySymbolNewRequest> companySymbols) {
CompanySymbols companySymbol = null;
if (StringUtils.isNotEmpty(uuid)) {
log.trace("Search company by companySymbol uuid={}", uuid);
Collection<CompanySymbols> 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<CompanySymbols> 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<CompanySymbols> 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);
}
}
}

View file

@ -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<CompanySymbols> companySymbolsTMap;
private final Imdg<Company> 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);
}
}
}

View file

@ -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<Contact> 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());
}
}

View file

@ -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<CompanySymbols> companySymbolsImdg;
final Imdg<ProfileDocument> profileDocumentImdg;
final Imdg<Contact> contactImdg;
final Imdg<ClearingMemberCategory> 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<CompanyGatewayRequest> 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<CompanyGatewayRequest> 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<CompanyGatewayRequest> 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<CompanyGatewayRequest> 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<CompanyGatewayRequest> 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<CompanySymbolNewRequest> additionalSymbols(CompanyNewRequest companyNewReq) {
BiFunction<String, String, Optional<CompanySymbolNewRequest>> 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<String, Comparable<?>> query = new HashMap<>();
query.put("companyId", partRequest.getCompanyId());
query.put("documentType", partRequest.getDocumentType());
query.put("issueDate", partRequest.getIssueDate()); // может быть null
Collection<ProfileDocument> 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<String, Comparable<?>> query = new HashMap<>();
query.put("companyId", partRequest.getCompanyId());
query.put("companySymbol", partRequest.getCompanySymbol());
Collection<CompanySymbols> 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<String, Comparable<?>> query = new HashMap<>();
query.put("companyId", partRequest.getCompanyId());
query.put("contactType", partRequest.getContactType());
Collection<Contact> 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<String, Comparable<?>> query = new HashMap<>();
query.put("companyId", partRequest.getCompanyId());
query.put("clearingMemberCategory", partRequest.getClearingMemberCategory());
Collection<ClearingMemberCategory> 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<CompanySymbolNewRequest> companySymbols) {
CompanySymbols companySymbol = null;
if (StringUtils.isNotEmpty(uuid)) {
log.trace("Search company by companySymbol uuid={}", uuid);
Collection<CompanySymbols> 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<CompanySymbols> 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<CompanySymbols> 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 <T> BaseRequest<T> wrapRequest(BaseRequest<?> template, T payload, ActionType action) {
BaseRequest<T> 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);
}
}
}

View file

@ -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<ProfileDocument> profileDocumentMap;
private final Imdg<Company> 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<ProfileDocument> 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] согласно описанию с тегом "При расторжении".
*/
}
}

View file

@ -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<Relation> relationMap;
private final Imdg<Company> companyMap;
private final Imdg<ClearingMemberCategory> 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<String> 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<String> 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<Relation> 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<Relation> 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<String> 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<Relation> relationMap = transaction.getImdg(IMDGDistributedNames.Map_Relation, Relation.class);
Collection<Relation> 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<Relation> 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<Relation> relationMap = transaction.getImdg(IMDGDistributedNames.Map_Relation, Relation.class);
Collection<Relation> 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<Relation> relations = relationMap.getCollectionObjectsByFieldValues(Map.of("consumerId", companyId, "service", service));
Optional<Relation> 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<Relation> 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<String> selectCompanyClearingMemberCategory(Long companyId) {
Collection<ClearingMemberCategory> 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());
}
}

View file

@ -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<SettlementHouseProperties> 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;
}
}

View file

@ -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<String, Object> kafkaQueue,
Producer<String, Object> 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<ClearingMemberCategoryNewRequest> 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<ClearingMemberCategoryUpdateRequest> 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<CommonDeleteRequest> request) {
log.debug("CommonDeleteRequest received {}", request.getId());
RequestInfoUpdate requestInfoUpdate = clearingMemberCategoryServiceValidator.deleteRequestValidation(request);
if (requestInfoUpdate != null) {
return requestInfoUpdate;
}
clearingMemberCategoryServiceFacade.delete(request.getRequestPayload());
return null;
}
}

View file

@ -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<String, Object> kafkaQueue,
Producer<String, Object> 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<CompanyInfoUpdateRequest> 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;
}
}

View file

@ -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<String, Object> kafkaQueue,
Producer<String, Object> 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<CompanyRoleSetNewRequest> 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<CompanyRoleSetUpdateRequest> 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<CommonDeleteRequest> 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;
}
}

View file

@ -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<String, Object> kafkaQueue,
Producer<String, Object> 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<CommonDeleteRequest> 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<CommonDeleteRequest> 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<CommonDeleteRequest> companyBlockRequestBaseRequest) throws ValidationException {
public RequestInfoUpdate processBlockCompanyRequest(BaseRequest<CommonDeleteRequest> 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<AccountTerminationRequest> accountTerminationRequestBaseRequest) throws ValidationException {
public RequestInfoUpdate processAccountTerminationRequest(BaseRequest<AccountTerminationRequest> 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<CompanyGatewayRequest> 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;
}
}

View file

@ -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<String, Object> kafkaQueue,
Producer<String, Object> 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<CompanySymbolNewRequest> 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<CompanySymbolUpdateRequest> 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<CommonDeleteRequest> 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;
}
}

View file

@ -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<String, Object> kafkaQueue,
Producer<String, Object> 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<ContactNewRequest> 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<ContactUpdateRequest> 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<CommonDeleteRequest> request) {
log.debug("CommonDeleteRequest received for contact service.");
RequestInfoUpdate requestInfoUpdate = contactServiceValidator.deleteRequestValidation(request);
if (requestInfoUpdate != null) {
return requestInfoUpdate;
}
contactServiceFacade.delete(request.getRequestPayload());
return null;
}
}

View file

@ -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<String, Object> kafkaQueue,
Producer<String, Object> 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<CompanyGatewayRequest> 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;
}
}

View file

@ -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<String, Object> kafkaQueue,
Producer<String, Object> 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<ProfileDocumentNewRequest> 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<ProfileDocumentUpdateRequest> 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<CommonDeleteRequest> 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;
}
}

View file

@ -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<String, Object> kafkaQueue,
Producer<String, Object> 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<RelationNewRequest> 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<RelationUpdateRequest> 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<CommonDeleteRequest> 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;
}
}

View file

@ -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<String, Object> kafkaQueue,
Producer<String, Object> 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<SettlementHousePropertyNewRequest> 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<SettlementHousePropertyUpdateRequest> 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<CommonDeleteRequest> 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;
}
}

View file

@ -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<ClearingMemberCategoryNewRequest, IValidator> clearingMemberCategoryNewRequestValidator;
private final Function<ClearingMemberCategoryUpdateRequest, IValidator> clearingMemberCategoryUpdateRequestValidator;
private final Function<CommonDeleteRequest, IValidator> clearingMemberCategoryDeleteRequestValidator;
public ClearingMemberCategoryServiceValidator(ValidationHelper validationHelper,
UserRoleVerification userRoleVerification,
@Qualifier("clearingMemberCategoryNewRequestValidator")
Function<ClearingMemberCategoryNewRequest, IValidator> clearingMemberCategoryNewRequestValidator,
@Qualifier("clearingMemberCategoryUpdateRequestValidator")
Function<ClearingMemberCategoryUpdateRequest, IValidator> clearingMemberCategoryUpdateRequestValidator,
@Qualifier("clearingMemberCategoryDeleteRequestValidator")
Function<CommonDeleteRequest, IValidator> clearingMemberCategoryDeleteRequestValidator) {
this.validationHelper = validationHelper;
this.userRoleVerification = userRoleVerification;
this.clearingMemberCategoryNewRequestValidator = clearingMemberCategoryNewRequestValidator;
this.clearingMemberCategoryUpdateRequestValidator = clearingMemberCategoryUpdateRequestValidator;
this.clearingMemberCategoryDeleteRequestValidator = clearingMemberCategoryDeleteRequestValidator;
}
public RequestInfoUpdate createRequestValidation(BaseRequest<ClearingMemberCategoryNewRequest> request) {
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(request);
if (requestInfoUpdate != null) return requestInfoUpdate;
requestInfoUpdate = validationHelper.validateTillFirstError(request, clearingMemberCategoryNewRequestValidator);
return requestInfoUpdate;
}
public RequestInfoUpdate updateRequestValidation(BaseRequest<ClearingMemberCategoryUpdateRequest> request) {
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(request);
if (requestInfoUpdate != null) return requestInfoUpdate;
requestInfoUpdate = validationHelper.validateTillFirstError(request, clearingMemberCategoryUpdateRequestValidator);
return requestInfoUpdate;
}
public RequestInfoUpdate deleteRequestValidation(BaseRequest<CommonDeleteRequest> request) {
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(request);
if (requestInfoUpdate != null) return requestInfoUpdate;
requestInfoUpdate = validationHelper.validateTillFirstError(request, clearingMemberCategoryDeleteRequestValidator);
return requestInfoUpdate;
}
}

View file

@ -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<CompanyInfoUpdateRequest, IValidator> companyInfoUpdateRequestValidator;
public CompanyInfoServiceValidator(UserRoleVerification userRoleVerification,
ValidationHelper validationHelper,
@Qualifier("CompanyInfoUpdateRequestValidator")
Function<CompanyInfoUpdateRequest, IValidator> companyInfoUpdateRequestValidator) {
this.userRoleVerification = userRoleVerification;
this.validationHelper = validationHelper;
this.companyInfoUpdateRequestValidator = companyInfoUpdateRequestValidator;
}
public RequestInfoUpdate updateRequestValidation(BaseRequest<CompanyInfoUpdateRequest> companyInfoReq) {
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(companyInfoReq);
if (requestInfoUpdate != null) {
return requestInfoUpdate;
}
requestInfoUpdate = validationHelper.validateTillFirstError(companyInfoReq, companyInfoUpdateRequestValidator);
return requestInfoUpdate;
}
}

View file

@ -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<CompanyRoleSetNewRequest, IValidator> companyRoleSetNewRequestValidator;
private final Function<CompanyRoleSetUpdateRequest, IValidator> companyRoleSetUpdateRequestValidator;
private final Function<CommonDeleteRequest, IValidator> companyRoleSetDeleteRequestValidator;
public CompanyRoleSetServiceValidator(UserRoleVerification userRoleVerification,
ValidationHelper validationHelper,
@Qualifier("CompanyRoleSetNewRequestValidator")
Function<CompanyRoleSetNewRequest, IValidator> companyRoleSetNewRequestValidator,
@Qualifier("CompanyRoleSetUpdateRequestValidator")
Function<CompanyRoleSetUpdateRequest, IValidator> companyRoleSetUpdateRequestValidator,
@Qualifier("CompanyRoleSetDeleteRequestValidator")
Function<CommonDeleteRequest, IValidator> companyRoleSetDeleteRequestValidator) {
this.userRoleVerification = userRoleVerification;
this.validationHelper = validationHelper;
this.companyRoleSetNewRequestValidator = companyRoleSetNewRequestValidator;
this.companyRoleSetUpdateRequestValidator = companyRoleSetUpdateRequestValidator;
this.companyRoleSetDeleteRequestValidator = companyRoleSetDeleteRequestValidator;
}
public RequestInfoUpdate createRequestValidation(BaseRequest<CompanyRoleSetNewRequest> request) {
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(request);
if (requestInfoUpdate != null) return requestInfoUpdate;
requestInfoUpdate = validationHelper.validateTillFirstError(request, companyRoleSetNewRequestValidator);
return requestInfoUpdate;
}
public RequestInfoUpdate updateRequestValidation(BaseRequest<CompanyRoleSetUpdateRequest> request) {
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(request);
if (requestInfoUpdate != null) return requestInfoUpdate;
requestInfoUpdate = validationHelper.validateTillFirstError(request, companyRoleSetUpdateRequestValidator);
return requestInfoUpdate;
}
public RequestInfoUpdate deleteRequestValidation(BaseRequest<CommonDeleteRequest> request) {
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(request);
if (requestInfoUpdate != null) return requestInfoUpdate;
requestInfoUpdate = validationHelper.validateTillFirstError(request, companyRoleSetDeleteRequestValidator);
return requestInfoUpdate;
}
}

View file

@ -20,7 +20,7 @@ public class CompanyServiceValidator {
private final Function<CompanyNewRequest, IValidator> companyNewRequestValidator;
private final Function<CompanyNewRequest, IValidator> companyUpdateRequestValidator;
private final Function<CommonDeleteRequest, IValidator> companyDeleteRequestValidator;
protected UserRoleVerification userRoleVerification;
private final UserRoleVerification userRoleVerification;
public CompanyServiceValidator(ValidationHelper validationHelper,
@Qualifier("companyNewRequestValidator")

View file

@ -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<CompanySymbolNewRequest, IValidator> companySymbolNewRequestValidator;
private final Function<CompanySymbolUpdateRequest, IValidator> companySymbolUpdateRequestValidator;
private final Function<CommonDeleteRequest, IValidator> companySymbolDeleteRequestValidator;
public CompanySymbolServiceValidator(ValidationHelper validationHelper,
UserRoleVerification userRoleVerification,
@Qualifier("companySymbolNewRequestValidator")
Function<CompanySymbolNewRequest, IValidator> companySymbolNewRequestValidator,
@Qualifier("companySymbolDeleteRequestValidator")
Function<CommonDeleteRequest, IValidator> companySymbolDeleteRequestValidator,
@Qualifier("companySymbolUpdateRequestValidator")
Function<CompanySymbolUpdateRequest, IValidator> companySymbolUpdateRequestValidator) {
this.validationHelper = validationHelper;
this.userRoleVerification = userRoleVerification;
this.companySymbolNewRequestValidator = companySymbolNewRequestValidator;
this.companySymbolUpdateRequestValidator = companySymbolUpdateRequestValidator;
this.companySymbolDeleteRequestValidator = companySymbolDeleteRequestValidator;
}
public RequestInfoUpdate createRequestValidation(BaseRequest<CompanySymbolNewRequest> request) {
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(request);
if (requestInfoUpdate != null) {
return requestInfoUpdate;
}
requestInfoUpdate = validationHelper.validateTillFirstError(request, companySymbolNewRequestValidator);
return requestInfoUpdate;
}
public RequestInfoUpdate updateRequestValidation(BaseRequest<CompanySymbolUpdateRequest> request) {
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(request);
if (requestInfoUpdate != null) return requestInfoUpdate;
requestInfoUpdate = validationHelper.validateTillFirstError(request, companySymbolUpdateRequestValidator);
return requestInfoUpdate;
}
public RequestInfoUpdate deleteRequestValidation(BaseRequest<CommonDeleteRequest> request) {
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(request);
if (requestInfoUpdate != null) return requestInfoUpdate;
requestInfoUpdate = validationHelper.validateTillFirstError(request, companySymbolDeleteRequestValidator);
return requestInfoUpdate;
}
}

View file

@ -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<ContactNewRequest, IValidator> contactNewRequestValidator;
private final Function<ContactUpdateRequest, IValidator> contactUpdateRequestValidator;
private final Function<CommonDeleteRequest, IValidator> contactDeleteRequestValidator;
public ContactServiceValidator(ValidationHelper validationHelper,
UserRoleVerification userRoleVerification,
@Qualifier("contactNewRequestValidator")
Function<ContactNewRequest, IValidator> contactNewRequestValidator,
@Qualifier("contactDeleteRequestValidator")
Function<CommonDeleteRequest, IValidator> contactDeleteRequestValidator,
@Qualifier("contactUpdateRequestValidator")
Function<ContactUpdateRequest, IValidator> contactUpdateRequestValidator) {
this.validationHelper = validationHelper;
this.userRoleVerification = userRoleVerification;
this.contactNewRequestValidator = contactNewRequestValidator;
this.contactUpdateRequestValidator = contactUpdateRequestValidator;
this.contactDeleteRequestValidator = contactDeleteRequestValidator;
}
public RequestInfoUpdate createRequestValidation(BaseRequest<ContactNewRequest> request) {
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(request);
if (requestInfoUpdate != null) return requestInfoUpdate;
requestInfoUpdate = validationHelper.validateTillFirstError(request, contactNewRequestValidator);
return requestInfoUpdate;
}
public RequestInfoUpdate updateRequestValidation(BaseRequest<ContactUpdateRequest> request) {
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(request);
if (requestInfoUpdate != null) return requestInfoUpdate;
requestInfoUpdate = validationHelper.validateTillFirstError(request, contactUpdateRequestValidator);
return requestInfoUpdate;
}
public RequestInfoUpdate deleteRequestValidation(BaseRequest<CommonDeleteRequest> request) {
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(request);
if (requestInfoUpdate != null) return requestInfoUpdate;
requestInfoUpdate = validationHelper.validateTillFirstError(request, contactDeleteRequestValidator);
return requestInfoUpdate;
}
}

View file

@ -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);
}
}

View file

@ -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<ProfileDocumentNewRequest, IValidator> profileDocumentNewRequestValidator;
private final Function<ProfileDocumentUpdateRequest, IValidator> profileDocumentUpdateRequestValidator;
private final Function<CommonDeleteRequest, IValidator> profileDocumentDeleteRequestValidator;
public ProfileDocumentServiceValidator(UserRoleVerification userRoleVerification,
ValidationHelper validationHelper,
@Qualifier("profileDocumentNewRequestValidation")
Function<ProfileDocumentNewRequest, IValidator> profileDocumentNewRequestValidator,
@Qualifier("profileDocumentUpdateRequestValidation")
Function<ProfileDocumentUpdateRequest, IValidator> profileDocumentUpdateRequestValidator,
@Qualifier("profileDocumentDeleteRequestValidation")
Function<CommonDeleteRequest, IValidator> profileDocumentDeleteRequestValidator) {
this.userRoleVerification = userRoleVerification;
this.validationHelper = validationHelper;
this.profileDocumentNewRequestValidator = profileDocumentNewRequestValidator;
this.profileDocumentUpdateRequestValidator = profileDocumentUpdateRequestValidator;
this.profileDocumentDeleteRequestValidator = profileDocumentDeleteRequestValidator;
}
public RequestInfoUpdate createRequestValidation(BaseRequest<ProfileDocumentNewRequest> request) {
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(request);
if (requestInfoUpdate != null) return requestInfoUpdate;
return validationHelper.validateTillFirstError(request, profileDocumentNewRequestValidator);
}
public RequestInfoUpdate updateRequestValidation(BaseRequest<ProfileDocumentUpdateRequest> request) {
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(request);
if (requestInfoUpdate != null) return requestInfoUpdate;
return validationHelper.validateTillFirstError(request, profileDocumentUpdateRequestValidator);
}
public RequestInfoUpdate deleteRequestValidation(BaseRequest<CommonDeleteRequest> request) {
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(request);
if (requestInfoUpdate != null) return requestInfoUpdate;
return validationHelper.validateTillFirstError(request, profileDocumentDeleteRequestValidator);
}
}

View file

@ -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<RelationNewRequest, IValidator> relationNewRequestValidator;
private final Function<RelationUpdateRequest, IValidator> relationUpdateRequestValidator;
private final Function<CommonDeleteRequest, IValidator> relationDeleteRequestValidator;
public RelationServiceValidator(UserRoleVerification userRoleVerification,
ValidationHelper validationHelper,
@Qualifier("relationNewRequestValidation")
Function<RelationNewRequest, IValidator> relationNewRequestValidator,
@Qualifier("relationUpdateRequestValidation")
Function<RelationUpdateRequest, IValidator> relationUpdateRequestValidator,
@Qualifier("relationDeleteRequestValidation")
Function<CommonDeleteRequest, IValidator> relationDeleteRequestValidator) {
this.userRoleVerification = userRoleVerification;
this.validationHelper = validationHelper;
this.relationNewRequestValidator = relationNewRequestValidator;
this.relationUpdateRequestValidator = relationUpdateRequestValidator;
this.relationDeleteRequestValidator = relationDeleteRequestValidator;
}
public RequestInfoUpdate createRequestValidation(BaseRequest<RelationNewRequest> request) {
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(request);
if (requestInfoUpdate != null) return requestInfoUpdate;
requestInfoUpdate = validationHelper.validateTillFirstError(request, relationNewRequestValidator);
return requestInfoUpdate;
}
public RequestInfoUpdate updateRequestValidation(BaseRequest<RelationUpdateRequest> request) {
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(request);
if (requestInfoUpdate != null) return requestInfoUpdate;
requestInfoUpdate = validationHelper.validateTillFirstError(request, relationUpdateRequestValidator);
return requestInfoUpdate;
}
public RequestInfoUpdate deleteRequestValidation(BaseRequest<CommonDeleteRequest> request) {
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(request);
if (requestInfoUpdate != null) return requestInfoUpdate;
requestInfoUpdate = validationHelper.validateTillFirstError(request, relationDeleteRequestValidator);
return requestInfoUpdate;
}
}

View file

@ -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<SettlementHousePropertyNewRequest, IValidator> settlementHousePropertyNewRequestValidator;
private final Function<SettlementHousePropertyUpdateRequest, IValidator> settlementHousePropertyUpdateRequestRequestValidator;
private final Function<CommonDeleteRequest, IValidator> settlementHousePropertiesDeleteRequestValidator;
public SettlementHousePropertiesServiceValidator(UserRoleVerification userRoleVerification,
ValidationHelper validationHelper,
@Qualifier("SettlementHousePropertyNewRequestValidator")
Function<SettlementHousePropertyNewRequest, IValidator> settlementHousePropertyNewRequestValidator,
@Qualifier("SettlementHousePropertyUpdateRequestValidator")
Function<SettlementHousePropertyUpdateRequest, IValidator> settlementHousePropertyUpdateRequestRequestValidator,
@Qualifier("SettlementHousePropertiesDeleteRequestValidator")
Function<CommonDeleteRequest, IValidator> settlementHousePropertiesDeleteRequestValidator) {
this.userRoleVerification = userRoleVerification;
this.validationHelper = validationHelper;
this.settlementHousePropertyNewRequestValidator = settlementHousePropertyNewRequestValidator;
this.settlementHousePropertyUpdateRequestRequestValidator = settlementHousePropertyUpdateRequestRequestValidator;
this.settlementHousePropertiesDeleteRequestValidator = settlementHousePropertiesDeleteRequestValidator;
}
public RequestInfoUpdate createRequestValidation(BaseRequest<SettlementHousePropertyNewRequest> request) {
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(request);
if (requestInfoUpdate != null) return requestInfoUpdate;
requestInfoUpdate = validationHelper.validateTillFirstError(request, settlementHousePropertyNewRequestValidator);
return requestInfoUpdate;
}
public RequestInfoUpdate updateRequestValidation(BaseRequest<SettlementHousePropertyUpdateRequest> request) {
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(request);
if (requestInfoUpdate != null) return requestInfoUpdate;
requestInfoUpdate = validationHelper.validateTillFirstError(request, settlementHousePropertyUpdateRequestRequestValidator);
return requestInfoUpdate;
}
public RequestInfoUpdate deleteRequestValidation(BaseRequest<CommonDeleteRequest> request) {
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(request);
if (requestInfoUpdate != null) return requestInfoUpdate;
requestInfoUpdate = validationHelper.validateTillFirstError(request, settlementHousePropertiesDeleteRequestValidator);
return requestInfoUpdate;
}
}

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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<Company> companyImdg = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_Company, Company.class);
Imdg<CompanySymbols> 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<CompanySymbolDictionary> 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<Contact> 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<ProfileDocument> 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<CompanySymbolNewRequest> 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<Company> companyImdg = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_Company, Company.class);
// Imdg<CompanySymbols> 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<CompanySymbolDictionary> 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<Contact> 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<ProfileDocument> 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<CompanySymbolNewRequest> 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());
// }
// }
}

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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<ClearingMemberCategory> 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<ClearingMemberCategory> memberCategoryImdg;
@Autowired
@Qualifier("mockProducer")
protected Producer<String, Object> 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<ClearingCategoryDictionary> clearingCategoryDictionaryImdg = hazelcastServiceTest.getImdg(
IMDGDistributedNames.Map_ClearingCategoryDictionary,
ClearingCategoryDictionary.class
);
Imdg<Company> 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)}<br>
* Тест проверяет обновление сущности {@link ClearingMemberCategory} в Hazelcast при передаче из Apache Kafka.<br>
* Входной запрос {@link ClearingMemberCategoryUpdateRequest}:<br>
* {@link ClearingMemberCategoryUpdateRequest#id} - Идентификатор записи<br>
* {@link ClearingMemberCategoryUpdateRequest#getClearingMemberCategory()} - 1234<br>
*/
@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)}<br>
* Тест проверяет удаление сущности {@link ClearingMemberCategory} в Hazelcast при передаче из Apache Kafka.<br>
* Входной запрос {@link CommonDeleteRequest}:<br>
* {@link CommonDeleteRequest#id} - Идентификатор записи<br>
*/
@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);
}
}

View file

@ -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<CompanyInfo> 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<Company> companyImdg;
@Autowired
@Qualifier("mockProducer")
protected Producer<String, Object> 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 <D extends AbstractDictionary /*SpcexObjectBase & Dictionary*/> void putToDictionary(String mapName, D object, String code) {
Imdg<D> 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)}<br>
* Тест проверяет обновление сущности {@link CompanyInfo} в Hazelcast при передаче из Apache Kafka.<br>
* Входной запрос {@link CompanyInfoUpdateRequest}:<br>
* {@link CompanyInfoUpdateRequest#id} - Идентификатор записи<br>
* {@link CompanyInfoUpdateRequest#getCorporationSoleType()} - GDIR<br>
* {@link CompanyInfoUpdateRequest#getCountryCode()} - RUS<br>
* {@link CompanyInfoUpdateRequest#getDescription()} - updated description<br>
* {@link CompanyInfoUpdateRequest#getProfessionalSign()} - ALWD<br>
* {@link CompanyInfoUpdateRequest#getLegalKind()} - JURD<br>
* {@link CompanyInfoUpdateRequest#getOrganizationType()} - NCRD<br>
* {@link CompanyInfoUpdateRequest#getResidence()} - RUS<br>
* {@link CompanyInfoUpdateRequest#getShortName()} - updated shortNameEng<br>
* {@link CompanyInfoUpdateRequest#getFullName()} - updated fullNameEng<br>
*/
@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);
}
}

View file

@ -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<CompanyRoleSet> 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<Company> companyImdg;
private Imdg<CompanyRoleSet> companyRoleSetImdg;
@Autowired
@Qualifier("mockProducer")
protected Producer<String, Object> 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 <D extends AbstractDictionary /*SpcexObjectBase & Dictionary*/> void putToDictionary(String mapName, D object, String code) {
Imdg<D> dMap = (Imdg<D>) 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)}<br>
* * Тест проверяет создание сущности {@link CompanyRoleSet} в IMDG при передаче из Apache Kafka.<br>
* * Входной запрос {@link CompanyRoleSetNewRequest}:<br>
* * {@link CompanyRoleSetNewRequest#getCompanyId()} - COMPANY_ID (105)<br>
* * {@link CompanyRoleSetNewRequest#getCompanyRole()} - SETH<br>
* * {@link CompanyRoleSetNewRequest#getWorkflowStatus()} - ACTV<br>
*/
@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)}<br>
* * Тест проверяет создание сущности {@link CompanyRoleSet} в IMDG при передаче из Apache Kafka.<br>
* * Входной запрос {@link CompanyRoleSetNewRequest}:<br>
* * {@link CompanyRoleSetNewRequest#getCompanyId()} - COMPANY_ID (105)<br>
* * {@link CompanyRoleSetNewRequest#getCompanyRole()} - SETH<br>
* * {@link CompanyRoleSetNewRequest#getWorkflowStatus()} - null<br>
*/
@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)}<br>
* * Тест проверяет обновление сущности {@link CompanyRoleSet} в IMDG при передаче из Apache Kafka.<br>
* * Входной запрос {@link CompanyRoleSetUpdateRequest}:<br>
* * {@link CompanyRoleSetUpdateRequest#getId()} - ID<br>
* * {@link CompanyRoleSetUpdateRequest#getCompanyId()} - COMPANY_ID<br>
* * {@link CompanyRoleSetUpdateRequest#getCompanyRole()} - SETH<br>
* * {@link CompanyRoleSetUpdateRequest#getWorkflowStatus()} - null<br>
*/
@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)}<br>
* Тест проверяет удаление сущности {@link CompanyRoleSet} в Hazelcast при передаче из Apache Kafka.<br>
* Входной запрос {@link CommonDeleteRequest}:<br>
* {@link CommonDeleteRequest#id} - Идентификатор записи<br>
*/
@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);
}
}

View file

@ -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)}<br>
* {@link CompanyServiceListener#processDeleteCompanyRequest(BaseRequest)} (BaseRequest)}<br>
* Тест проверяет удаление сущности {@link Company} в Hazelcast при передаче из Apache Kafka.<br>
* Входной запрос {@link CommonDeleteRequest}:<br>
* {@link CommonDeleteRequest#id} - Идентификатор записи<br>
@ -161,7 +169,7 @@ public class CompanyServiceListenerTest {
/**
* {@link CompanyService#createCompany(BaseRequest)}<br>
* {@link CompanyServiceListener#processNewCompanyRequest(BaseRequest)} (BaseRequest)}<br>
* Тест проверяет удаление сущности {@link Company} в Hazelcast при передаче из Apache Kafka.<br>
* Входной запрос {@link CommonDeleteRequest}:<br>
* {@link CommonDeleteRequest#id} - Идентификатор записи<br>

View file

@ -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<CompanySymbols> 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<CompanySymbols> companySymbolsImdg;
@Autowired
@Qualifier("mockProducer")
protected Producer<String, Object> mockProducer;
@PostConstruct
private void init() {
waitAvailableImdgProviderAndAddAdminWithDefaultId();
companySymbolsImdg = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class);
Imdg<CompanySymbolDictionary> 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<Company> 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)}<br>
* Тест проверяет обновление сущности {@link CompanySymbols} в Hazelcast при передаче из Apache Kafka.<br>
* Входной запрос {@link CompanySymbolUpdateRequest}:<br>
* {@link CompanySymbolUpdateRequest#id} - Идентификатор записи<br>
* {@link CompanySymbolUpdateRequest#getCompanyId()} - Идентификатор записи<br>
* {@link CompanySymbolUpdateRequest#getCompanySymbol()} - 1234<br>
* {@link CompanySymbolUpdateRequest#getCompanySymbolValue()} - new companySymbolValue<br>
*/
@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);
}
}

View file

@ -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> 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<Contact> contactImdg;
@Autowired
@Qualifier("mockProducer")
protected Producer<String, Object> mockProducer;
private Company TEST_COMPANY;
private Long COMPANY_ID;
@PostConstruct
private void init() {
waitAvailableImdgProviderAndAddAdminWithDefaultId();
contactImdg = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_Contact, Contact.class);
Imdg<Company> 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<ContactTypeDictionary> 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)}<br>
* Тест проверяет обновление сущности {@link Contact} в Hazelcast при передаче из Apache Kafka.<br>
* Входной запрос {@link ContactUpdateRequest}:<br>
* {@link ContactUpdateRequest#id} - Идентификатор записи<br>
* {@link ContactUpdateRequest#getContactType()} - ADDR<br>
* {@link ContactUpdateRequest#getContactValue()} - new ContactValue<br>
*/
@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);
}
}

View file

@ -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<CompanySymbolNewRequest> 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());
}
}

View file

@ -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<ProfileDocument> 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<ProfileDocument> profileDocumentMap;
private Imdg<Company> companyMap;
@Autowired
@Qualifier("mockProducer")
protected Producer<String, Object> 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<DocumentTypeDictionary> 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)} <br>
* Тест проверяет обновление сущности {@link ProfileDocument} в Hazelcast при передаче из Apache Kafka.<br>
* Входной запрос {@link ProfileDocumentNewRequest}:<br>
*/
@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);
}
}

View file

@ -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> 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<Relation> relationMap;
private Imdg<Company> companyMap;
@Autowired
@Qualifier("mockProducer")
protected Producer<String, Object> 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<WorkflowStatusDictionary> 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<ServiceStatusDictionary> 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<ClearingCategoryDictionary> 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());
}
}

View file

@ -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<SettlementHouseProperties> 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<Company> companyImdg;
private Imdg<CompanyRoleSet> companyRoleSetImdg;
private Imdg<SettlementHouseProperties> settlementHousePropertiesImdg;
@Autowired
@Qualifier("mockProducer")
protected Producer<String, Object> 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 <D extends AbstractDictionary /*SpcexObjectBase & Dictionary*/> void putToDictionary(String mapName, D object, String code) {
Imdg<D> dMap = (Imdg<D>) 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)}<br>
* * Тест проверяет создание сущности {@link SettlementHouseProperties} в IMDG при передаче из Apache Kafka.<br>
* * Входной запрос {@link SettlementHousePropertyNewRequest}:<br>
* * {@link SettlementHousePropertyNewRequest#getCompanyId()} - COMPANY_ID<br>
* * {@link SettlementHousePropertyNewRequest#getCurrencyCode()} - AED<br>
*/
@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)}<br>
* * Тест проверяет обновление сущности {@link SettlementHouseProperties} в IMDG при передаче из Apache Kafka.<br>
* * Входной запрос {@link SettlementHousePropertyUpdateRequest}:<br>
* * {@link SettlementHousePropertyUpdateRequest#getId()} - ID<br>
* * {@link SettlementHousePropertyUpdateRequest#getCompanyId()} - COMPANY_ID<br>
* * {@link SettlementHousePropertyUpdateRequest#getCurrencyCode()} - AED<br>
*/
@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)}<br>
* Тест проверяет удаление сущности {@link SettlementHouseProperties} в Hazelcast при передаче из Apache Kafka.<br>
* Входной запрос {@link CommonDeleteRequest}:<br>
* {@link CommonDeleteRequest#id} - Идентификатор записи<br>
*/
@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);
}
}

View file

@ -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;
}
}
}

View file

@ -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;
}
}
}

View file

@ -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;
}
}
}

View file

@ -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;
}
}
}