company-service: refactoring CompanyService

This commit is contained in:
AKurakin 2023-04-05 16:36:13 +03:00
parent dec7f44e48
commit c53374be1e
4 changed files with 81 additions and 71 deletions

View file

@ -22,11 +22,13 @@ public class CompanyInfoService extends QueueConsumer implements InitializingBea
private final Logger log = LoggerFactory.getLogger(getClass());
// private final Imdg<CompanyInfo> companyInfoMap;
private final Imdg<Company> companyMap;
protected final CompanyService companyService;
@Autowired
public CompanyInfoService(Consumer<String, Object> kafkaQueue, Producer<String, Object> 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<CompanyInfoUpdateRequest> 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());
}
}
}

View file

@ -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<Company> companyMap;
@ -52,6 +54,8 @@ public class CompanyService extends QueueConsumer implements InitializingBean {
private Function<CompanyNewRequest, IValidator> companyUpdateRequestValidator;
private Function<CommonDeleteRequest, IValidator> companyDeleteRequestValidator;
protected CompanySymbolService companySymbolService;
@Autowired
public CompanyService(Consumer<String, Object> kafkaQueue, Producer<String, Object> kafkaProducer,
ImdgProvider imdgProvider,
@ -63,7 +67,9 @@ public class CompanyService extends QueueConsumer implements InitializingBean {
@Qualifier("companyUpdateRequestValidator")
Function<CompanyNewRequest, IValidator> companyUpdateRequestValidator,
@Qualifier("CompanyDeleteRequestValidator")
Function<CommonDeleteRequest, IValidator> companyDeleteRequestValidator
Function<CommonDeleteRequest, IValidator> 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<CompanyNewRequest /* todo type CompanyUpdateRequest*/> 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());

View file

@ -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<CompanySymbols> companySymbolsMap;
private final ImdgId idSequence;
@Autowired
public CompanySymbolService(Consumer<String, Object> kafkaQueue, Producer<String, Object> 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;
}
}

View file

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