清除教师不存在的组
This commit is contained in:
@@ -341,10 +341,10 @@ public class SyncUserService implements ISyncUserService {
|
|||||||
schTeacherGroupRepository.saveAll(saveGroupList);
|
schTeacherGroupRepository.saveAll(saveGroupList);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(isAll){
|
// ---------- 1) 组级对账:清理本次下发教师的历史脏组(增量/全量均执行) ----------
|
||||||
// ---------- 1) 组级对账:清理本次下发教师的历史脏组 ----------
|
|
||||||
// groupMap 已加载本次教师(teaIds)在库中的全部历史组(含 IN/OUT、跨学校)。
|
// groupMap 已加载本次教师(teaIds)在库中的全部历史组(含 IN/OUT、跨学校)。
|
||||||
// 其中「仍为 IN、但组 key 已不在本次下发列表」的组即为脏数据(被用户中心移除/调离的组),标记转出。
|
// 每次下发的教师 groups 都是该教师的完整组快照,因此增量同步同样可安全对账。
|
||||||
|
// 「仍为 IN、但组 key 已不在本次下发列表」的组即为脏数据(被用户中心移除/调离的组),标记转出。
|
||||||
List<SchTeacherGroup> staleGroups = new ArrayList<>();
|
List<SchTeacherGroup> staleGroups = new ArrayList<>();
|
||||||
for (SchTeacherGroup g : groupMap.values()) {
|
for (SchTeacherGroup g : groupMap.values()) {
|
||||||
if (g == null || g.getTransferStatus() == null || g.getTransferStatus().intValue() != TransferStatus.IN.getId()) continue;
|
if (g == null || g.getTransferStatus() == null || g.getTransferStatus().intValue() != TransferStatus.IN.getId()) continue;
|
||||||
@@ -359,21 +359,29 @@ public class SyncUserService implements ISyncUserService {
|
|||||||
log.info("清理教师历史脏组(已不在用户中心下发):数量={}", staleGroups.size());
|
log.info("清理教师历史脏组(已不在用户中心下发):数量={}", staleGroups.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------- 2) 教师级对账:清理教师已不存在的组 ----------
|
// 受影响学校(缓存失效用):本次下发组学校 + 脏组学校
|
||||||
|
Set<Integer> affectedSchIds = new HashSet<>(schIds);
|
||||||
|
for (SchTeacherGroup g : staleGroups) {
|
||||||
|
if (g.getSchId() != null) affectedSchIds.add(g.getSchId());
|
||||||
|
}
|
||||||
|
|
||||||
|
if(isAll){
|
||||||
|
// ---------- 2) 教师级对账:清理教师已不存在的组(仅全量) ----------
|
||||||
// 教师整体已从用户中心删除(teaId 不在本次下发名单)时,其所有组都不在 groupMap 覆盖范围内,
|
// 教师整体已从用户中心删除(teaId 不在本次下发名单)时,其所有组都不在 groupMap 覆盖范围内,
|
||||||
// 需按学校维度查出该校 IN 组中 teaId 不在本次名单的组,一并标记转出。
|
// 需按学校维度查出该校 IN 组中 teaId 不在本次名单的组,一并标记转出。
|
||||||
|
// 增量(AddUser/UpdateUser)只下发部分教师,无法区分「教师不存在」与「教师未在本批」,故仅全量执行。
|
||||||
Set<Integer> teaIdSet = new HashSet<>(teaIds);
|
Set<Integer> teaIdSet = new HashSet<>(teaIds);
|
||||||
// 受影响学校 = 本次下发组学校 + 本次教师历史组学校(覆盖调离/删除后该校无其它下发的漏清)
|
|
||||||
Set<Integer> auditSchIds = new HashSet<>(schIds);
|
Set<Integer> auditSchIds = new HashSet<>(schIds);
|
||||||
for (SchTeacherGroup g : groupMap.values()) {
|
for (SchTeacherGroup g : groupMap.values()) {
|
||||||
if (g != null && g.getSchId() != null) auditSchIds.add(g.getSchId());
|
if (g != null && g.getSchId() != null) auditSchIds.add(g.getSchId());
|
||||||
}
|
}
|
||||||
setTransferTeacher(auditSchIds, teaIdSet);
|
setTransferTeacher(auditSchIds, teaIdSet);
|
||||||
|
affectedSchIds.addAll(auditSchIds);
|
||||||
|
}
|
||||||
|
|
||||||
// 同步后使受影响学校的教师缓存失效
|
// 同步后使受影响学校的教师缓存失效
|
||||||
if (!auditSchIds.isEmpty()) {
|
if (!affectedSchIds.isEmpty()) {
|
||||||
schTeacherCacheService.clearTeacherCaches(auditSchIds);
|
schTeacherCacheService.clearTeacherCaches(affectedSchIds);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user