company-service relation удаление по ClearingMemberCategory (правильно понял ТЗ)

This commit is contained in:
AKurakin 2023-06-06 13:04:16 +03:00
parent 41c414497d
commit 6bb00569d3
2 changed files with 48 additions and 29 deletions

View file

@ -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<ClearingMemberCategory> 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)

View file

@ -272,8 +272,9 @@ public class RelationService extends QueueConsumer implements InitializingBean {
return existRelation;
}
Collection<String> selectCompanyClearingMemberCategory(Long companyId) {
Collection<ClearingMemberCategory> companyCategory = clearingMemberCategoryImdg.getCollectionObjectsByFieldValues(
Collection<String> selectCompanyClearingMemberCategory(ImdgTransaction tx, Long companyId) {
Imdg<ClearingMemberCategory> cmcMap = tx == null ? clearingMemberCategoryImdg : tx.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class);
Collection<ClearingMemberCategory> 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<String> companyCMC = selectCompanyClearingMemberCategory(companyId);
Collection<String> 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<String> companyCMC = selectCompanyClearingMemberCategory(companyId);
Collection<String> 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<Relation> 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<String> 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) {