From 6bb00569d3623b5708afdfeee0a34ee7cd8ccee8 Mon Sep 17 00:00:00 2001 From: AKurakin Date: Tue, 6 Jun 2023 13:04:16 +0300 Subject: [PATCH] =?UTF-8?q?company-service=20relation=20=D1=83=D0=B4=D0=B0?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=BE=20ClearingMemberC?= =?UTF-8?q?ategory=20(=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D1=8C=D0=BD?= =?UTF-8?q?=D0=BE=20=D0=BF=D0=BE=D0=BD=D1=8F=D0=BB=20=D0=A2=D0=97)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ClearingMemberCategoryService.java | 4 +- .../company/service/RelationService.java | 73 ++++++++++++------- 2 files changed, 48 insertions(+), 29 deletions(-) diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/ClearingMemberCategoryService.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/ClearingMemberCategoryService.java index ddaccb5fd..8bd977c78 100644 --- a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/ClearingMemberCategoryService.java +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/ClearingMemberCategoryService.java @@ -175,9 +175,9 @@ public class ClearingMemberCategoryService extends QueueConsumer implements Init transaction.beginTransaction(); boolean txOk = false; try { - companyService.relationService.cancelRelation(transaction, clearingMemberCategory.getCompanyId(), clearingMemberCategory); Imdg txClearingMemberCategoryMap = transaction.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class); - txClearingMemberCategoryMap.delete(clearingMemberCategory); + txClearingMemberCategoryMap.delete(clearingMemberCategory); // далить до cancelRelation внутри транзакции + companyService.relationService.cancelRelation(transaction, clearingMemberCategory.getCompanyId(), clearingMemberCategory); txOk = true; } finally { if (txOk) diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/RelationService.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/RelationService.java index aaca35f06..07b01d7bd 100644 --- a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/RelationService.java +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/RelationService.java @@ -272,8 +272,9 @@ public class RelationService extends QueueConsumer implements InitializingBean { return existRelation; } - Collection selectCompanyClearingMemberCategory(Long companyId) { - Collection companyCategory = clearingMemberCategoryImdg.getCollectionObjectsByFieldValues( + Collection selectCompanyClearingMemberCategory(ImdgTransaction tx, Long companyId) { + Imdg cmcMap = tx == null ? clearingMemberCategoryImdg : tx.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class); + Collection companyCategory = cmcMap.getCollectionObjectsByFieldValues( Map.of("companyId", companyId) ); return companyCategory.stream() @@ -325,7 +326,7 @@ public class RelationService extends QueueConsumer implements InitializingBean { Relation relation = relationMap.getSingleObjectByID(req.getId()); final Long companyId = relation.getConsumerId(); - Collection companyCMC = selectCompanyClearingMemberCategory(companyId); + Collection companyCMC = selectCompanyClearingMemberCategory(null, companyId); boolean companyCMCisBIV = companyCMC.contains(ClearingCategory.B.getKey()) || companyCMC.contains(ClearingCategory.I.getKey()) || companyCMC.contains(ClearingCategory.V.getKey()); boolean companyCMCisCF = companyCMC.contains(ClearingCategory.C.getKey()) || companyCMC.contains(ClearingCategory.F.getKey()); @@ -507,19 +508,20 @@ public class RelationService extends QueueConsumer implements InitializingBean { Relation relation = relationMap.getSingleObjectByID(req.getId()); Long companyId = relation.getConsumerId(); -//fixme relation.getService() // mkr/fond - это с учётом сервиса - на какой он удаляется и какие буквы остаются. Если ни одного CMC нету по этим буквам то удалить. - Collection companyCMC = selectCompanyClearingMemberCategory(companyId); + + Collection companyCMC = selectCompanyClearingMemberCategory(null, companyId); boolean companyCMCisBIV = companyCMC.contains(ClearingCategory.B.getKey()) || companyCMC.contains(ClearingCategory.I.getKey()) || companyCMC.contains(ClearingCategory.V.getKey()); boolean companyCMCisCF = companyCMC.contains(ClearingCategory.C.getKey()) || companyCMC.contains(ClearingCategory.F.getKey()); - String firstCMC = companyCMC.isEmpty() ? null : companyCMC.iterator().next(); - if (companyCMCisBIV) { + if (companyCMCisBIV && MKR.equalsByKey(relation.getService())) { // relation не изменяем - } else if (companyCMCisCF) { + } else if (companyCMCisCF && FOND.equalsByKey(relation.getService())) { // relation не изменяем + } else { + // удалить. } - // else ? todo bad logic! Проверить ТЗ. + // else { ImdgTransaction tx = imdgProvider.newTransaction(); boolean txOk = false; @@ -591,33 +593,50 @@ public class RelationService extends QueueConsumer implements InitializingBean { relationMap.insert(relation); } + /** + * Приходит от ClearingMemberCategory + */ protected void cancelRelation(ImdgTransaction transaction, Long companyId, ClearingMemberCategory clearingMemberCategory) { + log.debug("Cancelling relations for companyId={} and clearingMemberCategory {}", companyId, clearingMemberCategory == null ? null : clearingMemberCategory.getClearingMemberCategory()); Objects.requireNonNull(companyId, "companyId"); Imdg relationMap = transaction.getImdg(IMDGDistributedNames.Map_Relation, Relation.class); - String serviceStatus = null; - if (clearingMemberCategory == null) { - log.warn("clearingMemberCategory not set for companyId={}", companyId); - } else { - ClearingCategory clearingCategory = getEnumByKey(ClearingCategory.class, clearingMemberCategory.getClearingMemberCategory()); - serviceStatus = serviceForCMC(clearingCategory).getKey(); - } - /* -//todo here... +// String serviceStatus = null; +// if (clearingMemberCategory == null) { +// log.warn("clearingMemberCategory not set for companyId={}", companyId); +// } else { +// ClearingCategory clearingCategory = getEnumByKey(ClearingCategory.class, clearingMemberCategory.getClearingMemberCategory()); +// serviceStatus = serviceForCMC(clearingCategory).getKey(); +// } + + Collection companyCMC = selectCompanyClearingMemberCategory(null, companyId); + if (companyCMC.contains(clearingMemberCategory.getClearingMemberCategory())) { + // never + log.warn("ClearingMemberCategory \"{}\" already exist in set for company {}.", clearingMemberCategory.getClearingMemberCategory(), companyId); + } + boolean companyCMCisBIV = companyCMC.contains(ClearingCategory.B.getKey()) || companyCMC.contains(ClearingCategory.I.getKey()) + || companyCMC.contains(ClearingCategory.V.getKey()); + boolean companyCMCisCF = companyCMC.contains(ClearingCategory.C.getKey()) || companyCMC.contains(ClearingCategory.F.getKey()); + -1) коммент обновить. сейчас не обязательно. -2)это от КМК приходит. -*/ Relation relation = searchRelation(transaction, clearingMemberCategory.getClearingMemberCategory(), companyId); if (relation == null) { log.debug("Relation for clearingMemberCategory.id={} {} not found", clearingMemberCategory.getId(), clearingMemberCategory.getClearingMemberCategory()); - return; } else { - relation.setUpdated(Instant.now()); - log.debug("Update exist relation.id={}", relation.getId()); + if (companyCMCisBIV && MKR.equalsByKey(relation.getService())) { + // relation не изменяем + log.debug("Relation {} {} lost for ClearingMemberCategory \"{}\".", relation.getId(), relation.getService(), clearingMemberCategory.getClearingMemberCategory()); + } else if (companyCMCisCF && FOND.equalsByKey(relation.getService())) { + // relation не изменяем + log.debug("Relation {} {} lost for ClearingMemberCategory \"{}\".", relation.getId(), relation.getService(), clearingMemberCategory.getClearingMemberCategory()); + } else { + // удалить. + log.debug("Block exist relation.id={}", relation.getId()); + relation.setUpdated(Instant.now()); + relation.setServiceStatus(Closed.getKey()); + relationMap.update(relation); + log.debug("Relation[{}] updated (closed) by clearingMemberCategory[{}].", relation.getId(), clearingMemberCategory.getId()); + } } - relation.setServiceStatus(Closed.getKey()); - log.debug("Relation[{}] updated (closed) by clearingMemberCategory[{}].", relation.getId(), clearingMemberCategory.getId()); - relationMap.insert(relation); } protected void cancelAllRelationForCompany(ImdgTransaction transaction, Long companyId) {