company-service http://jira.mfd.msk:8088/browse/CLS-259 исправления

This commit is contained in:
AKurakin 2023-05-05 12:48:07 +03:00
parent cdd6a0996f
commit 1b98981c9f
5 changed files with 66 additions and 10 deletions

View file

@ -73,7 +73,7 @@ public class ContactValidationConfig {
IMDGDistributedNames.Map_Contact,
Contact.class,
CompanyErrors.RequiredFieldEmpty,
CompanyErrors.CompanyNotFound,
CompanyErrors.ContactNotFound,
contact -> {
if (contactUpdateRequest.getContactType() == null) return null;
if (!contactUpdateRequest.getContactType().equalsIgnoreCase(contact.getContactType())) {

View file

@ -44,7 +44,7 @@ public class ProfileDocumentValidationConfig {
Company.class,
CompanyErrors.RequiredFieldEmpty,
CompanyErrors.CompanyNotFound,
company -> WorkflowStatus.Active.getKey().equals(company.getWorkflowStatus()) ? null : CompanyErrors.CompanyDisabled),
company -> WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus()) ? null : CompanyErrors.CompanyDisabled),
DictionaryPresentRule.instance("documentType",
ProfileDocumentNewRequest::getDocumentType,
IMDGDistributedNames.Map_DocumentTypeDictionary,
@ -138,7 +138,15 @@ public class ProfileDocumentValidationConfig {
IMDGDistributedNames.Map_ProfileDocument,
ProfileDocument.class,
CompanyErrors.RequiredFieldEmpty,
CompanyErrors.RecordNotFound)
CompanyErrors.RecordNotFound,
profileDoc -> {
Imdg<Company> companyImdg = context.obtainMap(IMDGDistributedNames.Map_Company, Company.class);
Company company = companyImdg.getSingleObjectByID(profileDoc.getCompanyId());
if (company == null) {
return CompanyErrors.CompanyNotFound;
}
return null;
})
);
};
}

View file

@ -22,14 +22,18 @@ import ru.spcex.clearing.util.security.UserRoleVerification;
import ru.spcex.clearing.validation.common.ValidationHelper;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.imdg.api.ImdgTransaction;
import ru.spcex.platform.utils.error.ValidationException;
import ru.spcex.platform.utils.validation.IValidator;
import java.time.Instant;
import java.util.Objects;
import java.util.function.Function;
@Service
public class CompanyInfoService extends QueueConsumer implements InitializingBean {
private final Logger log = LoggerFactory.getLogger(getClass());
private final ImdgProvider imdgProvider;
private final Imdg<Company> companyMap;
protected final CompanyService companyService;
private final RequestHelper requestHelper;
@ -46,6 +50,7 @@ public class CompanyInfoService extends QueueConsumer implements InitializingBea
Function<CompanyInfoUpdateRequest, IValidator> companyInfoUpdateRequestValidator) {
super(kafkaQueue, kafkaProducer);
this.companyService = companyService;
this.imdgProvider = imdgProvider;
this.companyMap = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
this.validationHelper = validationHelper;
this.userRoleVerification = userRoleVerification;
@ -56,16 +61,16 @@ public class CompanyInfoService extends QueueConsumer implements InitializingBea
@Override
public void afterPropertiesSet() {
callback(CompanyInfoUpdateRequest.class)
.setFunction(this::companyInfoUpdate)
.setFunction(request -> requestHelper.requestFunction(this::companyInfoUpdate, request))
.forDestination(Consts.DESTINATION_COMPANY_INFO_UPDATE, callbacks::put);
callback(CompanyInfoUpdateRequest.class)
.setFunction(this::companyInfoUpdate)
.setFunction(request -> requestHelper.requestFunction(this::companyInfoUpdate, request))
.forDestination(Consts.DESTINATION_COMPANY_INFO_NEW, callbacks::put); // логика заполнения одинакова с companyInfoUpdate
init();
}
public RequestInfoUpdate companyInfoUpdate(BaseRequest<CompanyInfoUpdateRequest> companyInfoReq) {
public RequestInfoUpdate companyInfoUpdate(BaseRequest<CompanyInfoUpdateRequest> companyInfoReq) throws ValidationException {
CompanyInfoUpdateRequest req = companyInfoReq.getRequestPayload();
log.debug("{} received", req.getClass().getSimpleName());
{ // Валидация, ValidationException
@ -81,6 +86,7 @@ public class CompanyInfoService extends QueueConsumer implements InitializingBea
log.trace("Company {} not found", req.getId());
return requestHelper.makeErrorResponse(companyInfoReq, CompanyErrors.CompanyNotFound, companyInfoReq.getId());
}
company.setUpdated(Instant.now());
CompanyInfo companyInfo = company.getProfile();
companyInfo.setCorporationSoleType(req.getCorporationSoleType());
@ -93,8 +99,39 @@ public class CompanyInfoService extends QueueConsumer implements InitializingBea
companyInfo.setShortNameEng(req.getShortNameEng());
companyInfo.setFullNameEng(req.getFullNameEng());
company.setUpdated(Instant.now());
companyMap.update(company);
company.setShortName(req.getShortName());
company.setFullName(req.getFullName());
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.relationHelper.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

@ -174,8 +174,10 @@ public class ProfileDocumentService extends QueueConsumer implements Initializin
ProfileDocument profileDocument = profileDocumentMap.getSingleObjectByID(profileDocumentUpdateRequest.getId());
String prevDocType = profileDocument.getDocumentType();
if (profileDocumentUpdateRequest.getCompanyId() != null)
profileDocument.setCompanyId(profileDocumentUpdateRequest.getCompanyId());
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());

View file

@ -12,6 +12,7 @@ import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.test.mock.mockito.SpyBean;
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;
@ -92,6 +93,14 @@ class CompanySymbolServiceTest {
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);
}
TestUtils.FutureRecordMetadata future = spy(TestUtils.FutureRecordMetadata.class);