profileDocumentNewRequest

This commit is contained in:
akulikov 2023-04-04 12:09:22 +03:00
parent 7eb629f158
commit dcb517d300
3 changed files with 69 additions and 15 deletions

View file

@ -4,7 +4,9 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.generated.ClearingMemberCategory; import ru.clearing.classes.statics.data.generated.ClearingMemberCategory;
import ru.clearing.classes.statics.data.profile.ProfileDocument;
import ru.clearing.platform.dictionary.ClearingCategoryDictionary; import ru.clearing.platform.dictionary.ClearingCategoryDictionary;
import ru.clearing.platform.dictionary.DocumentTypeDictionary;
import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.validation.common.ValidationHelper; import ru.spcex.clearing.validation.common.ValidationHelper;
import ru.spcex.platform.classes.base.SpcexObjectBase; import ru.spcex.platform.classes.base.SpcexObjectBase;
@ -27,6 +29,8 @@ public class ValidationConfig {
addImdg.accept(IMDGDistributedNames.Map_Company, Company.class); addImdg.accept(IMDGDistributedNames.Map_Company, Company.class);
addImdg.accept(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class); addImdg.accept(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class);
addImdg.accept(IMDGDistributedNames.Map_ClearingCategoryDictionary, ClearingCategoryDictionary.class); addImdg.accept(IMDGDistributedNames.Map_ClearingCategoryDictionary, ClearingCategoryDictionary.class);
addImdg.accept(IMDGDistributedNames.Map_ProfileDocument, ProfileDocument.class);
addImdg.accept(IMDGDistributedNames.Map_DocumentTypeDictionary, DocumentTypeDictionary.class);
return imdg; return imdg;
} }

View file

@ -6,7 +6,9 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.lang.NonNull; import org.springframework.lang.NonNull;
import org.springframework.stereotype.Service;
import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.profile.ProfileDocument; import ru.clearing.classes.statics.data.profile.ProfileDocument;
import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.imdg.IMDGDistributedNames;
@ -14,10 +16,17 @@ import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
import ru.spcex.clearing.platform.messaging.domain.Consts; import ru.spcex.clearing.platform.messaging.domain.Consts;
import ru.spcex.clearing.platform.messaging.domain.cud.company.ProfileDocumentNewRequest; import ru.spcex.clearing.platform.messaging.domain.cud.company.ProfileDocumentNewRequest;
import ru.spcex.clearing.platform.messaging.service.QueueConsumer; import ru.spcex.clearing.platform.messaging.service.QueueConsumer;
import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate;
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender; import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
import ru.spcex.clearing.validation.common.ValidationHelper;
import ru.spcex.platform.enumeration.DocumentTypes;
import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider; import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.utils.validation.IValidator;
import java.util.function.Function;
@Service
public class ProfileDocumentService extends QueueConsumer implements InitializingBean { public class ProfileDocumentService extends QueueConsumer implements InitializingBean {
private final Logger log = LoggerFactory.getLogger(getClass()); private final Logger log = LoggerFactory.getLogger(getClass());
private Imdg<ProfileDocument> profileDocumentMap; private Imdg<ProfileDocument> profileDocumentMap;
@ -25,14 +34,21 @@ public class ProfileDocumentService extends QueueConsumer implements Initializin
private ImdgProvider imdgProvider; private ImdgProvider imdgProvider;
private KafkaSender kafkaReqProducer; private KafkaSender kafkaReqProducer;
private final Function<ProfileDocumentNewRequest, IValidator> profileDocumentNewRequestValidator;
private final ValidationHelper validationHelper;
@Autowired @Autowired
public ProfileDocumentService(Consumer<String, Object> kafkaQueue, public ProfileDocumentService(Consumer<String, Object> kafkaQueue,
Producer<String, Object> kafkaProducer, Producer<String, Object> kafkaProducer,
KafkaSender kafkaReqProducer, KafkaSender kafkaReqProducer,
ImdgProvider imdgProvider) { ImdgProvider imdgProvider,
@Qualifier("profileDocumentNewRequestValidation") Function<ProfileDocumentNewRequest, IValidator> profileDocumentNewRequestValidator,
ValidationHelper validationHelper) {
super(kafkaQueue, kafkaProducer); super(kafkaQueue, kafkaProducer);
this.imdgProvider = imdgProvider; this.imdgProvider = imdgProvider;
this.kafkaReqProducer = kafkaReqProducer; this.kafkaReqProducer = kafkaReqProducer;
this.profileDocumentNewRequestValidator = profileDocumentNewRequestValidator;
this.validationHelper = validationHelper;
} }
@Override @Override
@ -41,20 +57,22 @@ public class ProfileDocumentService extends QueueConsumer implements Initializin
this.companyMap = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); this.companyMap = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
callback(ProfileDocumentNewRequest.class) callback(ProfileDocumentNewRequest.class)
.setConsumer(this::newProfileDocument) .setConsumer(this::profileDocumentNew)
.forDestination(Consts.DESTINATION_PROFILE_DOCUMENT_NEW, callbacks::put); .forDestination(Consts.DESTINATION_PROFILE_DOCUMENT_NEW, callbacks::put);
init(); init();
} }
@NonNull @NonNull
private void newProfileDocument(BaseRequest<ProfileDocumentNewRequest> profileDocumentNewRequestBaseRequest) { private RequestInfoUpdate profileDocumentNew(BaseRequest<ProfileDocumentNewRequest> profileDocumentNewRequestBaseRequest) {
log.trace("Start processing ProfileDocumentNewRequest!"); log.trace("Start processing ProfileDocumentNewRequest!");
RequestInfoUpdate requestInfoUpdate = validationHelper.validateTillFirstError(
profileDocumentNewRequestBaseRequest,
profileDocumentNewRequestValidator
);
if (requestInfoUpdate != null) return requestInfoUpdate;
ProfileDocumentNewRequest profileDocumentNewRequest = profileDocumentNewRequestBaseRequest.getRequestPayload(); ProfileDocumentNewRequest profileDocumentNewRequest = profileDocumentNewRequestBaseRequest.getRequestPayload();
Long companyId = profileDocumentNewRequest.getCompanyId();
Company company = companyMap.getSingleObjectByID(companyId);
if (company != null && !company.getWorkflowStatus().equalsIgnoreCase("ACTV")) {
throw new IllegalStateException("Wrong company with ID " + companyId + " and workflow status " + company.getWorkflowStatus());
}
ProfileDocument profileDocument = new ProfileDocument(); ProfileDocument profileDocument = new ProfileDocument();
profileDocument.setCompanyId(profileDocumentNewRequest.getCompanyId()); profileDocument.setCompanyId(profileDocumentNewRequest.getCompanyId());
profileDocument.setDocumentType(profileDocumentNewRequest.getDocumentType()); profileDocument.setDocumentType(profileDocumentNewRequest.getDocumentType());
@ -69,9 +87,11 @@ public class ProfileDocumentService extends QueueConsumer implements Initializin
profileDocument.setValidToDate(profileDocumentNewRequest.getValidToDate()); profileDocument.setValidToDate(profileDocumentNewRequest.getValidToDate());
profileDocument.setLink(profileDocumentNewRequest.getLink()); profileDocument.setLink(profileDocumentNewRequest.getLink());
profileDocumentMap.insert(profileDocument); profileDocumentMap.insert(profileDocument);
if (profileDocument.getDocumentType().equalsIgnoreCase("XCNT")) {
//kafkaReqProducer.sendRequestToQueue(Consts.EXPORT_PROCESS, exportRequest); if (profileDocument.getDocumentType().equalsIgnoreCase(DocumentTypes.xcnt.getKey())) {
// kafkaReqProducer.sendRequestToQueue(Consts.EXPORT_PROCESS, exportRequest);
} }
return null;
} }
} }

View file

@ -14,18 +14,25 @@ import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.test.context.junit.jupiter.SpringExtension;
import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.profile.ProfileDocument; 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.HazelcastServiceTestConfiguration; import ru.spcex.clearing.company.config.HazelcastServiceTestConfiguration;
import ru.spcex.clearing.company.config.KafkaConfigTest; import ru.spcex.clearing.company.config.KafkaConfigTest;
import ru.spcex.clearing.company.config.validation.ProfileDocumentValidationConfig;
import ru.spcex.clearing.company.config.validation.ValidationConfig;
import ru.spcex.clearing.company.utils.MatcherFactory; import ru.spcex.clearing.company.utils.MatcherFactory;
import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.platform.messaging.domain.BaseRequest; import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
import ru.spcex.clearing.platform.messaging.domain.Consts; import ru.spcex.clearing.platform.messaging.domain.Consts;
import ru.spcex.clearing.platform.messaging.domain.cud.company.ProfileDocumentNewRequest; import ru.spcex.clearing.platform.messaging.domain.cud.company.ProfileDocumentNewRequest;
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.Imdg;
import ru.spcex.platform.imdg.iml.hazelcast.service.HazelcastService; import ru.spcex.platform.imdg.iml.hazelcast.service.HazelcastService;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import static ru.spcex.clearing.company.config.HazelcastServiceTestConfiguration.currentID; import static ru.spcex.clearing.company.config.HazelcastServiceTestConfiguration.currentID;
import static ru.spcex.clearing.company.utils.MatcherFactory.usingIgnoringFieldsComparator; import static ru.spcex.clearing.company.utils.MatcherFactory.usingIgnoringFieldsComparator;
@ -33,8 +40,11 @@ import static ru.spcex.clearing.company.utils.TestUtils.*;
@ExtendWith(SpringExtension.class) @ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = { @ContextConfiguration(classes = {
BeanConfiguration.class,
ValidationConfig.class,
ProfileDocumentService.class, ProfileDocumentService.class,
KafkaConfigTest.class, KafkaConfigTest.class,
ProfileDocumentValidationConfig.class,
HazelcastServiceTestConfiguration.class}) HazelcastServiceTestConfiguration.class})
class ProfileDocumentServiceTest { class ProfileDocumentServiceTest {
@ -55,11 +65,32 @@ class ProfileDocumentServiceTest {
@SpyBean @SpyBean
private MockProducer<String, Object> mockProducer; private MockProducer<String, Object> mockProducer;
private final long COMPANY_ID = 777L;
private Company TEST_COMPANY;
private DocumentTypes TEST_DOCUMENT_TYPE = DocumentTypes.cio;
private String TEST_DOCUMENT_TYPE_ID = TEST_DOCUMENT_TYPE.getKey();
@PostConstruct @PostConstruct
private void init() { private void init() {
hazelcastServiceTest.waitAvailable(); hazelcastServiceTest.waitAvailable();
this.profileDocumentMap = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_ProfileDocument, ProfileDocument.class); this.profileDocumentMap = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_ProfileDocument, ProfileDocument.class);
this.companyMap = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_Company, Company.class); this.companyMap = hazelcastServiceTest.getImdg(IMDGDistributedNames.Map_Company, Company.class);
TEST_COMPANY = new Company();
TEST_COMPANY.setId(COMPANY_ID);
TEST_COMPANY.setWorkflowStatus(WorkflowStatus.Active.getKey());
companyMap.insert(TEST_COMPANY);
DocumentTypeDictionary documentTypeDictionary = new DocumentTypeDictionary();
documentTypeDictionary.setCode(TEST_DOCUMENT_TYPE.getKey());
documentTypeDictionary.setName("test_name");
Imdg<DocumentTypeDictionary> documentTypeDictionaryImdg = hazelcastServiceTest.getImdg(
IMDGDistributedNames.Map_DocumentTypeDictionary,
DocumentTypeDictionary.class
);
documentTypeDictionaryImdg.insert(documentTypeDictionary);
} }
/** /**
@ -70,10 +101,9 @@ class ProfileDocumentServiceTest {
@Test @Test
void newProfileDocument() { void newProfileDocument() {
//ARRANGE //ARRANGE
Long companyId = 1234L;
ProfileDocumentNewRequest profileDocumentNewRequest = new ProfileDocumentNewRequest(); ProfileDocumentNewRequest profileDocumentNewRequest = new ProfileDocumentNewRequest();
profileDocumentNewRequest.setCompanyId(companyId); profileDocumentNewRequest.setCompanyId(COMPANY_ID);
profileDocumentNewRequest.setDocumentType("doc"); profileDocumentNewRequest.setDocumentType(TEST_DOCUMENT_TYPE_ID);
profileDocumentNewRequest.setIssueDate(LocalDate.now()); profileDocumentNewRequest.setIssueDate(LocalDate.now());
profileDocumentNewRequest.setIssuePlace("place"); profileDocumentNewRequest.setIssuePlace("place");
profileDocumentNewRequest.setIssuer("issuer"); profileDocumentNewRequest.setIssuer("issuer");
@ -82,7 +112,7 @@ class ProfileDocumentServiceTest {
profileDocumentNewRequest.setNumber("number"); profileDocumentNewRequest.setNumber("number");
profileDocumentNewRequest.setPlace("place"); profileDocumentNewRequest.setPlace("place");
profileDocumentNewRequest.setValidFromDate(LocalDate.now()); profileDocumentNewRequest.setValidFromDate(LocalDate.now());
profileDocumentNewRequest.setValidToDate(LocalDate.now()); profileDocumentNewRequest.setValidToDate(LocalDate.now().plus(1, ChronoUnit.DAYS));
profileDocumentNewRequest.setLink("link"); profileDocumentNewRequest.setLink("link");
ProfileDocument predictableProfileDocument = new ProfileDocument(); ProfileDocument predictableProfileDocument = new ProfileDocument();
@ -106,7 +136,7 @@ class ProfileDocumentServiceTest {
//ASSERT //ASSERT
waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord); waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord);
ProfileDocument resultNew = profileDocumentMap.getSingleObjectBySQL(String.format("companyId = %d", companyId)); ProfileDocument resultNew = profileDocumentMap.getSingleObjectBySQL(String.format("companyId = %d", COMPANY_ID));
predictableProfileDocument.setId(resultNew.getId()); predictableProfileDocument.setId(resultNew.getId());
PROFILE_DOCUMENT_MATCHER.assertMatch(resultNew, predictableProfileDocument); PROFILE_DOCUMENT_MATCHER.assertMatch(resultNew, predictableProfileDocument);
} }