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(); transaction.beginTransaction();
boolean txOk = false; boolean txOk = false;
try { try {
companyService.relationService.cancelRelation(transaction, clearingMemberCategory.getCompanyId(), clearingMemberCategory);
Imdg<ClearingMemberCategory> txClearingMemberCategoryMap = transaction.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class); 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; txOk = true;
} finally { } finally {
if (txOk) if (txOk)

View file

@ -272,8 +272,9 @@ public class RelationService extends QueueConsumer implements InitializingBean {
return existRelation; return existRelation;
} }
Collection<String> selectCompanyClearingMemberCategory(Long companyId) { Collection<String> selectCompanyClearingMemberCategory(ImdgTransaction tx, Long companyId) {
Collection<ClearingMemberCategory> companyCategory = clearingMemberCategoryImdg.getCollectionObjectsByFieldValues( Imdg<ClearingMemberCategory> cmcMap = tx == null ? clearingMemberCategoryImdg : tx.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class);
Collection<ClearingMemberCategory> companyCategory = cmcMap.getCollectionObjectsByFieldValues(
Map.of("companyId", companyId) Map.of("companyId", companyId)
); );
return companyCategory.stream() return companyCategory.stream()
@ -325,7 +326,7 @@ public class RelationService extends QueueConsumer implements InitializingBean {
Relation relation = relationMap.getSingleObjectByID(req.getId()); Relation relation = relationMap.getSingleObjectByID(req.getId());
final Long companyId = relation.getConsumerId(); 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()) boolean companyCMCisBIV = companyCMC.contains(ClearingCategory.B.getKey()) || companyCMC.contains(ClearingCategory.I.getKey())
|| companyCMC.contains(ClearingCategory.V.getKey()); || companyCMC.contains(ClearingCategory.V.getKey());
boolean companyCMCisCF = companyCMC.contains(ClearingCategory.C.getKey()) || companyCMC.contains(ClearingCategory.F.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()); Relation relation = relationMap.getSingleObjectByID(req.getId());
Long companyId = relation.getConsumerId(); 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()) boolean companyCMCisBIV = companyCMC.contains(ClearingCategory.B.getKey()) || companyCMC.contains(ClearingCategory.I.getKey())
|| companyCMC.contains(ClearingCategory.V.getKey()); || companyCMC.contains(ClearingCategory.V.getKey());
boolean companyCMCisCF = companyCMC.contains(ClearingCategory.C.getKey()) || companyCMC.contains(ClearingCategory.F.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 не изменяем // relation не изменяем
} else if (companyCMCisCF) { } else if (companyCMCisCF && FOND.equalsByKey(relation.getService())) {
// relation не изменяем // relation не изменяем
} else {
// удалить.
} }
// else ? todo bad logic! Проверить ТЗ. // else
{ {
ImdgTransaction tx = imdgProvider.newTransaction(); ImdgTransaction tx = imdgProvider.newTransaction();
boolean txOk = false; boolean txOk = false;
@ -591,33 +593,50 @@ public class RelationService extends QueueConsumer implements InitializingBean {
relationMap.insert(relation); relationMap.insert(relation);
} }
/**
* Приходит от ClearingMemberCategory
*/
protected void cancelRelation(ImdgTransaction transaction, Long companyId, ClearingMemberCategory 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"); Objects.requireNonNull(companyId, "companyId");
Imdg<Relation> relationMap = transaction.getImdg(IMDGDistributedNames.Map_Relation, Relation.class); Imdg<Relation> relationMap = transaction.getImdg(IMDGDistributedNames.Map_Relation, Relation.class);
String serviceStatus = null; // String serviceStatus = null;
if (clearingMemberCategory == null) { // if (clearingMemberCategory == null) {
log.warn("clearingMemberCategory not set for companyId={}", companyId); // log.warn("clearingMemberCategory not set for companyId={}", companyId);
} else { // } else {
ClearingCategory clearingCategory = getEnumByKey(ClearingCategory.class, clearingMemberCategory.getClearingMemberCategory()); // ClearingCategory clearingCategory = getEnumByKey(ClearingCategory.class, clearingMemberCategory.getClearingMemberCategory());
serviceStatus = serviceForCMC(clearingCategory).getKey(); // serviceStatus = serviceForCMC(clearingCategory).getKey();
} // }
/*
//todo here... 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); Relation relation = searchRelation(transaction, clearingMemberCategory.getClearingMemberCategory(), companyId);
if (relation == null) { if (relation == null) {
log.debug("Relation for clearingMemberCategory.id={} {} not found", clearingMemberCategory.getId(), clearingMemberCategory.getClearingMemberCategory()); log.debug("Relation for clearingMemberCategory.id={} {} not found", clearingMemberCategory.getId(), clearingMemberCategory.getClearingMemberCategory());
return;
} else { } else {
relation.setUpdated(Instant.now()); if (companyCMCisBIV && MKR.equalsByKey(relation.getService())) {
log.debug("Update exist relation.id={}", relation.getId()); // 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) { protected void cancelAllRelationForCompany(ImdgTransaction transaction, Long companyId) {