diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanyInfoService.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanyInfoService.java index 953bd35b8..84fd283e4 100644 --- a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanyInfoService.java +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanyInfoService.java @@ -22,11 +22,13 @@ public class CompanyInfoService extends QueueConsumer implements InitializingBea private final Logger log = LoggerFactory.getLogger(getClass()); // private final Imdg companyInfoMap; private final Imdg companyMap; + protected final CompanyService companyService; @Autowired public CompanyInfoService(Consumer kafkaQueue, Producer kafkaProducer, - ImdgProvider imdgProvider) { + ImdgProvider imdgProvider, CompanyService companyService) { super(kafkaQueue, kafkaProducer); + this.companyService = companyService; // this.companyInfoMap = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanyInfo, CompanyInfo.class); this.companyMap = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); } @@ -42,23 +44,25 @@ public class CompanyInfoService extends QueueConsumer implements InitializingBea public void companyInfoUpdate(BaseRequest userRequest) { CompanyInfoUpdateRequest req = userRequest.getRequestPayload(); log.debug("CompanyInfoUpdateRequest received"); + synchronized (companyService) { // CompanyInfo companyInfo = companyInfoMap.getSingleObjectByID(req.getId()); - Company company = companyMap.getSingleObjectByID(req.getId()); - CompanyInfo companyInfo = company == null ? null : company.getProfile(); + Company company = companyMap.getSingleObjectByID(req.getId()); + CompanyInfo companyInfo = company == null ? null : company.getProfile(); - companyInfo.setCorporationSoleType(req.getCorporationSoleType()); - companyInfo.setCountryCode(req.getCountryCode()); - companyInfo.setDescription(req.getDescription()); - companyInfo.setProfessionalSign(req.getProfessionalSign()); - companyInfo.setLegalKind(req.getLegalKind()); - companyInfo.setOrganizationType(req.getOrganizationType()); - companyInfo.setResidence(req.getResidence()); - companyInfo.setShortNameEng(req.getShortNameEng()); - companyInfo.setFullNameEng(req.getFullNameEng()); - companyInfo.setShortName(req.getShortName()); - companyInfo.setFullName(req.getFullName()); + companyInfo.setCorporationSoleType(req.getCorporationSoleType()); + companyInfo.setCountryCode(req.getCountryCode()); + companyInfo.setDescription(req.getDescription()); + companyInfo.setProfessionalSign(req.getProfessionalSign()); + companyInfo.setLegalKind(req.getLegalKind()); + companyInfo.setOrganizationType(req.getOrganizationType()); + companyInfo.setResidence(req.getResidence()); + companyInfo.setShortNameEng(req.getShortNameEng()); + companyInfo.setFullNameEng(req.getFullNameEng()); + companyInfo.setShortName(req.getShortName()); + companyInfo.setFullName(req.getFullName()); // companyInfoMap.update(companyInfo); - companyMap.update(company); - log.debug("successfully processed, id {}", companyInfo.getId()); + companyMap.update(company); + log.debug("successfully processed, id {}", companyInfo.getId()); + } } } diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanyService.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanyService.java index c6f80e00e..c155a2b55 100644 --- a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanyService.java +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanyService.java @@ -38,6 +38,8 @@ import java.util.function.Function; @Service public class CompanyService extends QueueConsumer implements InitializingBean { + protected static final Long SPVB_ID = 1L; // СПВБ + private final Logger log = LoggerFactory.getLogger(getClass()); private final RequestHelper requestHelper; private final Imdg companyMap; @@ -52,6 +54,8 @@ public class CompanyService extends QueueConsumer implements InitializingBean { private Function companyUpdateRequestValidator; private Function companyDeleteRequestValidator; + protected CompanySymbolService companySymbolService; + @Autowired public CompanyService(Consumer kafkaQueue, Producer kafkaProducer, ImdgProvider imdgProvider, @@ -63,7 +67,9 @@ public class CompanyService extends QueueConsumer implements InitializingBean { @Qualifier("companyUpdateRequestValidator") Function companyUpdateRequestValidator, @Qualifier("CompanyDeleteRequestValidator") - Function companyDeleteRequestValidator + Function companyDeleteRequestValidator, + + CompanySymbolService companySymbolService ) { super(kafkaQueue, kafkaProducer); this.messageResolver = messageResolver; @@ -77,6 +83,7 @@ public class CompanyService extends QueueConsumer implements InitializingBean { this.companyNewRequestValidator = companyNewRequestValidator; this.companyUpdateRequestValidator = companyUpdateRequestValidator; this.companyDeleteRequestValidator = companyDeleteRequestValidator; + this.companySymbolService = companySymbolService; } @Override @@ -122,32 +129,22 @@ public class CompanyService extends QueueConsumer implements InitializingBean { company.setFullName(req.getFullName()); if (req.getCompanySymbol() != null) { - CompanySymbols newSymbol = createCompanySymbol(company, req); + CompanySymbols newSymbol = companySymbolService.createCompanySymbol(company.getId(), req.getCompanySymbol(), req.getCompanySymbolValue()); updateCompanyBySymbol(company, newSymbol); - log.debug("Created new companySymbols.id={} for company {}", newSymbol.getId(), company.getId()); - companySymnbolsMap.insert(newSymbol); } - company.setWorkflowStatus(WorkflowStatus.Active.getKey()); + company.setWorkflowStatus(req.getWorkflowStatus()); companyMap.insert(company); log.debug("company-new request processed, BaseRequest.id = {}, company.id={}", companyNewRequestBaseRequest.getId(), company.getId()); createNewRelation(company); - + if (!(WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus()))) { // Block + onChangeWorkflowStatus(company, null, company.getWorkflowStatus()); + } return null; } - protected CompanySymbols createCompanySymbol(Company forCompany, CompanyNewRequest request) { - //todo see CompanySymbolService - CompanySymbols newSymbol = new CompanySymbols(); - newSymbol.setId(idSequence.nextId()); - newSymbol.setCompanyId(forCompany.getId()); - newSymbol.setCompanySymbol(request.getCompanySymbol()); - newSymbol.setCompanySymbolValue(request.getCompanySymbolValue()); - return newSymbol; - } - private synchronized RequestInfoUpdate updateCompany(BaseRequest companyUpdateRequestBaseRequest) throws ValidationException { CompanyNewRequest updateRequest = companyUpdateRequestBaseRequest.getRequestPayload(); @@ -173,26 +170,20 @@ public class CompanyService extends QueueConsumer implements InitializingBean { if (updateRequest.getCompanySymbol() != null || updateRequest.getCompanySymbolValue() != null) { log.trace("Request field CompanySymbol, CompanySymbolValue ignore for update company request."); } - CompanySymbols companySymbol = companySymnbolsMap.getSingleObjectByFieldValues(Map.of("companyId", company.getId())); - if (companySymbol == null) { - log.warn("CompanySymbols not found for companyId={}", company.getId()); +// CompanySymbols не обновляем + + + String prevStatus = company.getWorkflowStatus(); + if (updateRequest.getWorkflowStatus() != null) { + company.setWorkflowStatus(updateRequest.getWorkflowStatus()); + if (!Objects.equals(prevStatus, company.getWorkflowStatus())) { + onChangeWorkflowStatus(company, prevStatus, company.getWorkflowStatus()); + } else { + log.trace("Status was not changed"); + } } else { - log.trace("Found CompanySymbols.id={} for companyId={}", companySymbol.getId(), company.getId()); - updateCompanyBySymbol(company, companySymbol); + log.trace("Null new WorkflowStatus"); } - - -// String prevStatus = company.getWorkflowStatus(); -// if (updateRequest.getWorkflowStatus() != null) { -// company.setWorkflowStatus(updateRequest.getWorkflowStatus()); -// if (!Objects.equals(prevStatus, company.getWorkflowStatus())) { -// onChangeWorkflowStatus(company, prevStatus, company.getWorkflowStatus()); -// } else { -// log.trace("Status was not changed"); -// } -// } else { -// log.trace("Null new WorkflowStatus"); -// } return null; } @@ -215,10 +206,12 @@ public class CompanyService extends QueueConsumer implements InitializingBean { } } + protected void kafkaSentAccountNotification(Company aboutBlockCompany) { + log.debug("Send message to kafka..."); + //todo message to queue + } - protected static final Long SPVB_ID = 1L; // СПВБ - - private void createNewRelation(Company company) { + protected void createNewRelation(Company company) { Relation relation = new Relation(); relation.setId(idSequence.nextId()); relation.setCreated(Instant.now()); @@ -230,7 +223,7 @@ public class CompanyService extends QueueConsumer implements InitializingBean { relation.setService(ru.spcex.platform.enumeration.Service.MKR.getKey()); // MKR relation.setServiceProduct(ServiceProduct.ZERO.getKey()); log.debug("New Relation[{}] created.", relation.getId()); - relationMap.insert(relation); // todo use transaction! + relationMap.insert(relation); } /** @@ -239,7 +232,6 @@ public class CompanyService extends QueueConsumer implements InitializingBean { * @param newStatus WorkflowStatus.Active - при возобналвении; WorkflowStatus.Blocked - при блокировки/расторжении */ private void onChangeWorkflowStatus(Company company, String oldStatus, String newStatus) { - //todo в ТЗ упоминается: ри изменении (relation/put): //из соответствующего параметра полученного метода, если значение отличается от сохраненного ране log.debug("Company id={} status changed from {} to {}", company.getId(), oldStatus, company.getWorkflowStatus()); assert Objects.equals(newStatus, company.getWorkflowStatus()); @@ -267,6 +259,9 @@ public class CompanyService extends QueueConsumer implements InitializingBean { } } + if (WorkflowStatus.Blocked.equalsByKey(newStatus)) { + kafkaSentAccountNotification(company); + } } @@ -289,10 +284,6 @@ public class CompanyService extends QueueConsumer implements InitializingBean { log.warn("Company {} not found", request.getId()); return requestHelper.makeErrorResponse(companyBlockRequestBaseRequest, CompanyErrors.CompanyNotFound, request.getId()); } -// if (!WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus())) { -// log.trace("Company {} not active: {}", company.getId(), company.getWorkflowStatus()); -// return requestHelper.makeErrorResponse(companyBlockRequestBaseRequest, CompanyErrors.CompanyDisabled, request.getId()); -// } company.setUpdated(Instant.now()); @@ -306,11 +297,10 @@ public class CompanyService extends QueueConsumer implements InitializingBean { String prevStatus = company.getWorkflowStatus(); company.setWorkflowStatus(WorkflowStatus.Blocked.getKey()); - onChangeWorkflowStatus(company, prevStatus, company.getWorkflowStatus()); log.debug("Update company.id={}", company.getId()); companyMap.update(company); - // todo kafka send !!! Account. + onChangeWorkflowStatus(company, prevStatus, company.getWorkflowStatus()); return null; // Company company = companyMap.getSingleObjectByID(req.getId()); diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanySymbolService.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanySymbolService.java index 627c7b041..f52d1b24a 100644 --- a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanySymbolService.java +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanySymbolService.java @@ -15,18 +15,23 @@ import ru.spcex.clearing.platform.messaging.domain.Consts; import ru.spcex.clearing.platform.messaging.domain.cud.company.CompanySymbolUpdateRequest; import ru.spcex.clearing.platform.messaging.service.QueueConsumer; import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgId; import ru.spcex.platform.imdg.api.ImdgProvider; +import java.util.Objects; + @Service public class CompanySymbolService extends QueueConsumer implements InitializingBean { private final Logger log = LoggerFactory.getLogger(getClass()); private final Imdg companySymbolsMap; + private final ImdgId idSequence; @Autowired public CompanySymbolService(Consumer kafkaQueue, Producer kafkaProducer, ImdgProvider imdgProvider) { super(kafkaQueue, kafkaProducer); this.companySymbolsMap = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class); + this.idSequence = imdgProvider.getImdgIdGenerator(); } @Override @@ -47,4 +52,16 @@ public class CompanySymbolService extends QueueConsumer implements InitializingB companySymbolsMap.update(companySymbols); log.debug("successfully processed, id {}", companySymbols.getId()); } + + public CompanySymbols createCompanySymbol(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); + companySymbolsMap.insert(newSymbol); + return newSymbol; + } } diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/company/CompanyNewRequest.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/company/CompanyNewRequest.java index 87476c8e6..66b28a154 100644 --- a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/company/CompanyNewRequest.java +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/company/CompanyNewRequest.java @@ -7,7 +7,6 @@ public class CompanyNewRequest { private String shortName; @JsonProperty private String fullName; - @JsonProperty private String companySymbol; @JsonProperty @@ -15,7 +14,7 @@ public class CompanyNewRequest { @JsonProperty private String workflowStatus; - // for update, todo разобраться, это тот же тип запроса или надо отдельный на update сделать? + // for update, это поле может использоваться в gateway-api @JsonProperty private Long id; @@ -51,14 +50,6 @@ public class CompanyNewRequest { this.companySymbolValue = companySymbolValue; } - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - public String getWorkflowStatus() { return workflowStatus; } @@ -66,4 +57,12 @@ public class CompanyNewRequest { public void setWorkflowStatus(String workflowStatus) { this.workflowStatus = workflowStatus; } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } }