---
resolved issues
This commit is contained in:
aalehin 2023-05-24 20:39:12 +03:00
parent 53e10b7527
commit 45f51a1b27
4 changed files with 101 additions and 19 deletions

View file

@ -9,6 +9,7 @@ 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.ClearingMemberCategory;
import ru.clearing.classes.statics.data.company.Company;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
import ru.spcex.clearing.platform.messaging.domain.Consts;
@ -21,20 +22,25 @@ 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.validation.IValidator;
import java.util.Map;
import java.util.function.Function;
@Service
public class ClearingMemberCategoryService extends QueueConsumer implements InitializingBean {
private final Logger log = LoggerFactory.getLogger(getClass());
private final Imdg<ClearingMemberCategory> clearingMemberCategoryMap;
private final Imdg<Company> companyMap;
private final ImdgProvider imdgProvider;
private final Function<ClearingMemberCategoryNewRequest, IValidator> clearingMemberCategoryNewRequestValidator;
private final Function<ClearingMemberCategoryUpdateRequest, IValidator> clearingMemberCategoryUpdateRequestValidator;
private final Function<CommonDeleteRequest, IValidator> clearingMemberCategoryDeleteRequestValidator;
private final ValidationHelper validationHelper;
private final UserRoleVerification userRoleVerification;
private final CompanyService companyService;
@Autowired
public ClearingMemberCategoryService(Consumer<String, Object> kafkaQueue,
@ -44,14 +50,18 @@ public class ClearingMemberCategoryService extends QueueConsumer implements Init
UserRoleVerification userRoleVerification,
@Qualifier("clearingMemberCategoryNewRequestValidator") Function<ClearingMemberCategoryNewRequest, IValidator> clearingMemberCategoryNewRequestValidator,
@Qualifier("clearingMemberCategoryUpdateRequestValidator") Function<ClearingMemberCategoryUpdateRequest, IValidator> clearingMemberCategoryUpdateRequestValidator,
@Qualifier("clearingMemberCategoryDeleteRequestValidator") Function<CommonDeleteRequest, IValidator> clearingMemberCategoryDeleteRequestValidator) {
@Qualifier("clearingMemberCategoryDeleteRequestValidator") Function<CommonDeleteRequest, IValidator> clearingMemberCategoryDeleteRequestValidator,
CompanyService companyService) {
super(kafkaQueue, kafkaProducer);
this.clearingMemberCategoryMap = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class);
this.companyMap = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
this.imdgProvider = imdgProvider;
this.clearingMemberCategoryNewRequestValidator = clearingMemberCategoryNewRequestValidator;
this.clearingMemberCategoryUpdateRequestValidator = clearingMemberCategoryUpdateRequestValidator;
this.clearingMemberCategoryDeleteRequestValidator = clearingMemberCategoryDeleteRequestValidator;
this.validationHelper = validationHelper;
this.userRoleVerification = userRoleVerification;
this.companyService = companyService;
}
@Override
@ -76,14 +86,28 @@ public class ClearingMemberCategoryService extends QueueConsumer implements Init
requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, clearingMemberCategoryNewRequestValidator);
if (requestInfoUpdate != null) return requestInfoUpdate;
ClearingMemberCategoryNewRequest req = userRequest.getRequestPayload();
ClearingMemberCategory newCategory = new ClearingMemberCategory();
newCategory.setCompanyId(req.getCompanyId());
newCategory.setClearingMemberCategory(req.getClearingMemberCategory());
clearingMemberCategoryMap.insert(newCategory);
log.debug("successfully processed, new category id {}", newCategory.getId());
synchronized (companyService) {
ImdgTransaction transaction = imdgProvider.newTransaction();
transaction.beginTransaction();
boolean txOk = false;
try {
companyService.relationService.createNewRelation(transaction, req.getCompanyId());
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;
}

View file

@ -143,7 +143,7 @@ public class CompanyService extends QueueConsumer implements InitializingBean {
companyMap.insert(company);
log.debug("company-new request processed, BaseRequest.id = {}, company.id={}",
companyNewRequestBaseRequest.getId(), company.getId());
relationService.createNewRelation(transaction, company);
relationService.createNewRelation(transaction, company.getId());
if (!(WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus()))) { // Block
relationService.onChangeWorkflowStatus(transaction, company, null, company.getWorkflowStatus());
}

View file

@ -9,6 +9,7 @@ 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.ClearingMemberCategory;
import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.profile.ProfileDocument;
import ru.spcex.clearing.company.error.CompanyErrors;
@ -27,6 +28,7 @@ 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;
@ -41,6 +43,7 @@ public class ProfileDocumentService extends QueueConsumer implements Initializin
private ImdgProvider imdgProvider;
private AccountNotificationHelper accountNotificationHelper;
private final CompanyService companyService;
private final Function<ProfileDocumentNewRequest, IValidator> profileDocumentNewRequestValidator;
private final Function<ProfileDocumentUpdateRequest, IValidator> profileDocumentUpdateRequestValidator;
private final Function<CommonDeleteRequest, IValidator> profileDocumentDeleteRequestValidator;
@ -60,7 +63,8 @@ public class ProfileDocumentService extends QueueConsumer implements Initializin
ValidationHelper validationHelper,
IMessageResolver messageResolver,
RequestHelper requestHelper,
AccountNotificationHelper accountNotificationHelper) {
AccountNotificationHelper accountNotificationHelper,
CompanyService companyService) {
super(kafkaQueue, kafkaProducer);
this.imdgProvider = imdgProvider;
this.accountNotificationHelper = accountNotificationHelper;
@ -71,6 +75,7 @@ public class ProfileDocumentService extends QueueConsumer implements Initializin
this.userRoleVerification = userRoleVerification;
this.messageResolver = messageResolver;
this.requestHelper = requestHelper.setLogger(log);
this.companyService = companyService;
}
@Override
@ -148,9 +153,22 @@ public class ProfileDocumentService extends QueueConsumer implements Initializin
log.debug("Company {} not active", profileDocument.getCompanyId());
return requestHelper.makeErrorResponse(deleteRequest, CompanyErrors.CompanyNotFound, profileDocument.getCompanyId());
}
profileDocumentMap.delete(profileDocument);
synchronized (companyService) {
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;

View file

@ -8,6 +8,7 @@ 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.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;
@ -29,6 +30,7 @@ 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;
import ru.spcex.platform.utils.validation.IValidator;
@ -38,6 +40,11 @@ import java.util.Map;
import java.util.Objects;
import java.util.function.Function;
import static ru.spcex.platform.enumeration.Service.FOND;
import static ru.spcex.platform.enumeration.Service.MKR;
import static ru.spcex.platform.enumeration.SessionStatus.CLOS;
import static ru.spcex.platform.utils.enumeration.IEnumKey.getEnumByKey;
@Service
public class RelationService extends QueueConsumer implements InitializingBean {
protected static final Long SPVB_ID = 1L; // СПВБ
@ -106,6 +113,14 @@ public class RelationService extends QueueConsumer implements InitializingBean {
private synchronized RequestInfoUpdate relationNew(BaseRequest<RelationNewRequest> relationNewBaseRequest) {
RelationNewRequest req = relationNewBaseRequest.getRequestPayload();
log.debug("relation-new request received, BaseRequest.id = {}", relationNewBaseRequest.getId());
{ //проверка заполнен ли serviceStatus
String serviceStatus = req.getServiceStatus();
if (serviceStatus == null || serviceStatus.isEmpty()) {
Company company = companyMap.getSingleObjectByFieldValues(Map.of("id", req.getCompanyId()));
req.setServiceStatus(company.getWorkflowStatus());
}
}
{ // Валидация
RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(relationNewBaseRequest);
if (requestInfoUpdate != null) return requestInfoUpdate;
@ -120,7 +135,7 @@ public class RelationService extends QueueConsumer implements InitializingBean {
Relation existRelation = searchRelation(req.getClearingMemberCategory(), req.getCompanyId());
if (existRelation != null && !WorkflowStatus.Blocked.equalsByKey(existRelation.getServiceStatus())) {
CompanyErrors errorType;
if (ru.spcex.platform.enumeration.Service.MKR.equalsByKey(existRelation.getService())) {
if (MKR.equalsByKey(existRelation.getService())) {
errorType = CompanyErrors.ClearingMemberCategoryOnMKRAlreadyExist;
} else if (ru.spcex.platform.enumeration.Service.FOND.equalsByKey(existRelation.getService())) {
errorType = CompanyErrors.ClearingMemberCategoryOnFONDAlreadyExist;
@ -160,7 +175,7 @@ public class RelationService extends QueueConsumer implements InitializingBean {
relation.setServiceStatus(toStatus);
}
}
relation.setService(ru.spcex.platform.enumeration.Service.MKR.getKey()); // MKR
relation.setService(MKR.getKey()); // MKR
relation.setServiceProduct(ServiceProduct.ZERO.getKey());
relation.setComment(req.getComment());
@ -176,7 +191,7 @@ public class RelationService extends QueueConsumer implements InitializingBean {
|| ClearingCategory.I.equalsByKey(clearingMemberCategory)
|| ClearingCategory.V.equalsByKey(clearingMemberCategory)
) {
svc = ru.spcex.platform.enumeration.Service.MKR.getKey();
svc = MKR.getKey();
} else if (ClearingCategory.C.equalsByKey(clearingMemberCategory)
|| ClearingCategory.F.equalsByKey(clearingMemberCategory)
) {
@ -265,21 +280,46 @@ public class RelationService extends QueueConsumer implements InitializingBean {
// --- internal API ---
protected void createNewRelation(ImdgTransaction transaction, Company company) {
protected void createNewRelation(ImdgTransaction transaction, Long companyId) {
Imdg<Relation> relationMap = transaction.getImdg(IMDGDistributedNames.Map_Relation, Relation.class);
Relation relation = new Relation();
// relation.setId(idSequence.nextId());
Company company = transaction.getImdg(IMDGDistributedNames.Map_Company, Company.class).getSingleObjectByFieldValues(Map.of("id", companyId));
ClearingMemberCategory clearingMemberCategory = transaction.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class).getSingleObjectByFieldValues(Map.of("companyId", companyId));
WorkflowStatus workflowStatus = getEnumByKey(WorkflowStatus.class, company.getWorkflowStatus());
ClearingCategory clearingCategory = getEnumByKey(ClearingCategory.class, clearingMemberCategory.getClearingMemberCategory());
String serviceStatus;
switch (Objects.requireNonNull(clearingCategory)){
case B:
case I:
case V:
serviceStatus = MKR.getKey();
break;
case C:
case F:
serviceStatus = FOND.getKey();
break;
default:
throw new IllegalStateException("Illegal state of clearingCategory");
}
relation.setCreated(Instant.now());
relation.setUpdated(relation.getCreated());
relation.setConsumerId(company.getId());
relation.setConsumerId(companyId);
relation.setSupplierId(SPVB_ID); // 1 СПВБ
relation.setServiceStatus(WorkflowStatus.Active.getKey());
relation.setService(ru.spcex.platform.enumeration.Service.MKR.getKey()); // MKR
relation.setServiceStatus(Objects.requireNonNull(workflowStatus).getKey());
relation.setService(serviceStatus);
relation.setServiceProduct(ServiceProduct.ZERO.getKey());
log.debug("New Relation[{}] created.", relation.getId());
Imdg<Relation> relationMap = transaction.getImdg(IMDGDistributedNames.Map_Relation, Relation.class);
relationMap.insert(relation);
}
protected void cancelingOfAgreementUpdateRelation(ImdgTransaction transaction, Long companyId) {
Imdg<Relation> relationMap = transaction.getImdg(IMDGDistributedNames.Map_Relation, Relation.class);
Relation relation = relationMap.getSingleObjectByFieldValues(Map.of("consumerId", companyId));
relation.setServiceStatus(CLOS.getKey());
relationMap.update(relation);
log.debug("New Relation[{}] updated.", relation.getId());
}
/**
* @param company