diff --git a/src/main/java/com/yunhai/bschclassmanage/Repository/SchClassRepository.java b/src/main/java/com/yunhai/bschclassmanage/Repository/SchClassRepository.java index 78e7205..ca19dbf 100644 --- a/src/main/java/com/yunhai/bschclassmanage/Repository/SchClassRepository.java +++ b/src/main/java/com/yunhai/bschclassmanage/Repository/SchClassRepository.java @@ -93,4 +93,8 @@ public interface SchClassRepository extends JpaRepository, Jp @Query("UPDATE SchClass c SET c.graduate = true, c.updateDate = :now, c.updateUserId = 0 " + "WHERE c.schId = :schId AND c.gradeId = :maxGrade AND c.graduate = false") int batchGraduate(@Param("schId") Integer schId, @Param("maxGrade") Integer maxGrade, @Param("now") Date now); + + + Optional findByGroupId(Integer groupId); + } diff --git a/src/main/java/com/yunhai/bschclassmanage/controller/oapi/sync/SyncGroupController.java b/src/main/java/com/yunhai/bschclassmanage/controller/oapi/sync/SyncGroupController.java index e0fc9f0..30e1ddf 100644 --- a/src/main/java/com/yunhai/bschclassmanage/controller/oapi/sync/SyncGroupController.java +++ b/src/main/java/com/yunhai/bschclassmanage/controller/oapi/sync/SyncGroupController.java @@ -24,15 +24,15 @@ public class SyncGroupController { public void AddGroup(@RequestBody String jsonString) { log.info("AddGroup jsonString="+jsonString); //判断 2,"学校组" 4, "班级组" - SyncGroupDTO group = OtherUtil.jsonParseObject(jsonString, SyncGroupDTO.class); - syncGroupService.syncAddOrUpdate(group); + List groupList = OtherUtil.jsonParseList(jsonString, SyncGroupDTO.class); + syncGroupService.syncAddOrUpdate(groupList); } @PostMapping("UpdateGroup") public void UpdateGroup(@RequestBody String jsonString) { log.info("UpdateGroup jsonString="+jsonString); - SyncGroupDTO group = OtherUtil.jsonParseObject(jsonString, SyncGroupDTO.class); - syncGroupService.syncAddOrUpdate(group); + List groupList = OtherUtil.jsonParseList(jsonString, SyncGroupDTO.class); + syncGroupService.syncAddOrUpdate(groupList); } @PostMapping("DeleteGroup") @@ -44,8 +44,8 @@ public class SyncGroupController { @PostMapping("SyncGroup") public void SyncGroup(@RequestBody String jsonString) { log.info("SyncGroup jsonString="+jsonString); - SyncGroupDTO group = OtherUtil.jsonParseObject(jsonString, SyncGroupDTO.class); - syncGroupService.syncAddOrUpdate(group); + List groupList= OtherUtil.jsonParseList(jsonString, SyncGroupDTO.class); + syncGroupService.syncAddOrUpdate(groupList); } } diff --git a/src/main/java/com/yunhai/bschclassmanage/controller/oapi/sync/SyncUserController.java b/src/main/java/com/yunhai/bschclassmanage/controller/oapi/sync/SyncUserController.java index 2d5775d..842ba1b 100644 --- a/src/main/java/com/yunhai/bschclassmanage/controller/oapi/sync/SyncUserController.java +++ b/src/main/java/com/yunhai/bschclassmanage/controller/oapi/sync/SyncUserController.java @@ -23,14 +23,14 @@ public class SyncUserController { public void AddUser(@RequestBody String jsonString) { log.info("AddUser jsonString="+jsonString); List userlist = OtherUtil.jsonParseList(jsonString, SyncUserDTO.class); - syncUserService.syncAddOrUpdate(userlist); + syncUserService.syncAddOrUpdate(userlist,false); } @PostMapping("UpdateUser") public void UpdateUser(@RequestBody String jsonString) { log.info("UpdateUser jsonString="+jsonString); List userList = OtherUtil.jsonParseList(jsonString, SyncUserDTO.class); - syncUserService.syncAddOrUpdate(userList); + syncUserService.syncAddOrUpdate(userList,false); } @PostMapping("DeleteUser") @@ -44,6 +44,6 @@ public class SyncUserController { public void SyncUser(@RequestBody String jsonString) { log.info("SyncUser jsonString="+jsonString); List userList = OtherUtil.jsonParseList(jsonString, SyncUserDTO.class); - syncUserService.syncAddOrUpdate(userList); + syncUserService.syncAddOrUpdate(userList,true); } } diff --git a/src/main/java/com/yunhai/bschclassmanage/model/tool/SyncGroupDTO.java b/src/main/java/com/yunhai/bschclassmanage/model/tool/SyncGroupDTO.java index d04ddd6..1063ecc 100644 --- a/src/main/java/com/yunhai/bschclassmanage/model/tool/SyncGroupDTO.java +++ b/src/main/java/com/yunhai/bschclassmanage/model/tool/SyncGroupDTO.java @@ -5,6 +5,7 @@ import lombok.Data; import java.util.List; +//[{"id":22,"name":"同步","code":null,"type":7,"pid":4,"no":6,"children":null}] @Data @JsonIgnoreProperties(ignoreUnknown = true) public class SyncGroupDTO { diff --git a/src/main/java/com/yunhai/bschclassmanage/service/ISyncGroupService.java b/src/main/java/com/yunhai/bschclassmanage/service/ISyncGroupService.java index 57af8da..984635f 100644 --- a/src/main/java/com/yunhai/bschclassmanage/service/ISyncGroupService.java +++ b/src/main/java/com/yunhai/bschclassmanage/service/ISyncGroupService.java @@ -8,7 +8,7 @@ import java.util.List; @Service public interface ISyncGroupService { - void syncAddOrUpdate(SyncGroupDTO group); - void addOrUpdateSchool(SyncGroupDTO group); + void syncAddOrUpdate(List group); + void addOrUpdateSchool(List group); } diff --git a/src/main/java/com/yunhai/bschclassmanage/service/ISyncUserBaseService.java b/src/main/java/com/yunhai/bschclassmanage/service/ISyncUserBaseService.java new file mode 100644 index 0000000..6c42f30 --- /dev/null +++ b/src/main/java/com/yunhai/bschclassmanage/service/ISyncUserBaseService.java @@ -0,0 +1,27 @@ +package com.yunhai.bschclassmanage.service; + +import com.yunhai.bschclassmanage.model.tool.DeleteUser; +import com.yunhai.bschclassmanage.model.tool.SyncUserDTO; +import com.yunhai.platform.utils.model.BoaGroup; +import com.yunhai.platform.utils.model.BoaUser; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public interface ISyncUserBaseService { + +// BoaGroup addGroup(); +// +// void deleteGroup(List ids); +// +// BoaUser addUser(BoaUser user); +// +// void updateUser(BoaUser user); +// +// List addUserList(List user); +// +// void updateUserList(List user); +// +// void deleteUserList(List ids); +} diff --git a/src/main/java/com/yunhai/bschclassmanage/service/ISyncUserService.java b/src/main/java/com/yunhai/bschclassmanage/service/ISyncUserService.java index f59dccf..08041d9 100644 --- a/src/main/java/com/yunhai/bschclassmanage/service/ISyncUserService.java +++ b/src/main/java/com/yunhai/bschclassmanage/service/ISyncUserService.java @@ -9,7 +9,7 @@ import java.util.List; @Service public interface ISyncUserService { - void syncAddOrUpdate(List userList); + void syncAddOrUpdate(List userList,boolean isAll); void deleteUser(List deleteUserList); } diff --git a/src/main/java/com/yunhai/bschclassmanage/service/impl/SchBinSchsystemService.java b/src/main/java/com/yunhai/bschclassmanage/service/impl/SchBinSchsystemService.java index 82591be..a4c4d80 100644 --- a/src/main/java/com/yunhai/bschclassmanage/service/impl/SchBinSchsystemService.java +++ b/src/main/java/com/yunhai/bschclassmanage/service/impl/SchBinSchsystemService.java @@ -245,13 +245,8 @@ public class SchBinSchsystemService implements ISchBinSchsystemService { BoaGroup teaGroup= CreateGroup(NodeType.TEACHER.getId(),"教师组",schId,1); BoaGroup stuGroup= CreateGroup(NodeType.STUDENT.getId(),"学生组",schId,2); - { - Integer scort=1; - List deptNameSet = Arrays.asList("校长室","办公室","行政","信息"); - for (String name : deptNameSet) { - CreateGroup(NodeType.NORMAL.getId(), name, teaGroup.getId(),scort); - } - } + //创建校长室 + CreateGroup(NodeType.NORMAL.getId(),"校长室", teaGroup.getId(),1); //获取学制 List schsystemBinList=getSchBinSchsystemList(schId); diff --git a/src/main/java/com/yunhai/bschclassmanage/service/impl/classes/SchClassQueryService.java b/src/main/java/com/yunhai/bschclassmanage/service/impl/classes/SchClassQueryService.java index 607bc5c..72470d6 100644 --- a/src/main/java/com/yunhai/bschclassmanage/service/impl/classes/SchClassQueryService.java +++ b/src/main/java/com/yunhai/bschclassmanage/service/impl/classes/SchClassQueryService.java @@ -86,6 +86,8 @@ public class SchClassQueryService { return list; } + + public List getSchAllClassCacheFilter(Integer schId, List gradeIds, Integer classId) { List list = getSchAllClassCacheList(schId); if (schId != null && schId > 0) diff --git a/src/main/java/com/yunhai/bschclassmanage/service/impl/sync/SyncGroupService.java b/src/main/java/com/yunhai/bschclassmanage/service/impl/sync/SyncGroupService.java index 586f693..a8c9d26 100644 --- a/src/main/java/com/yunhai/bschclassmanage/service/impl/sync/SyncGroupService.java +++ b/src/main/java/com/yunhai/bschclassmanage/service/impl/sync/SyncGroupService.java @@ -1,19 +1,21 @@ package com.yunhai.bschclassmanage.service.impl.sync; +import com.yunhai.bschclassmanage.Repository.SchClassRepository; import com.yunhai.bschclassmanage.Repository.SchInfoRepository; +import com.yunhai.bschclassmanage.entity.SchClass; import com.yunhai.bschclassmanage.entity.SchInfo; import com.yunhai.bschclassmanage.enums.NodeType; import com.yunhai.bschclassmanage.model.tool.BaseGroup; import com.yunhai.bschclassmanage.model.tool.SyncGroupDTO; +import com.yunhai.bschclassmanage.service.IBaseSchsystemGradeService; +import com.yunhai.bschclassmanage.service.ISchClassService; import com.yunhai.bschclassmanage.service.ISyncGroupService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.List; -import java.util.Objects; -import java.util.Optional; -import java.util.UUID; +import javax.xml.crypto.Data; +import java.util.*; @Service public class SyncGroupService implements ISyncGroupService { @@ -21,27 +23,31 @@ public class SyncGroupService implements ISyncGroupService { @Autowired private SchInfoRepository schInfoRepository; + @Autowired + private ISchClassService schClassService; - public void syncAddOrUpdate(SyncGroupDTO group) { + @Autowired + private SchClassRepository schClassRepository; - //学校组-年级组-班级组 - if(Objects.equals(group.getType(),NodeType.SCHOOL.getId())){ - addOrUpdateSchool(group); - } + @Autowired + private IBaseSchsystemGradeService baseSchsystemGradeService; - if(Objects.equals(group.getType(),NodeType.CLASS.getId())){ - { - //添加班级组 需要 年级组id - //判断是否绑定了学制 - //判断年级组是哪个学制的 年级组名称(2026) 学制下的 年级id(grade_id) + public void syncAddOrUpdate(List groupList) { + addOrUpdateSchool(groupList); + } + + public void addOrUpdateSchool(List groupList) + { + for (SyncGroupDTO group: groupList) { + if(Objects.equals(group.getType(),NodeType.SCHOOL.getId())){ + addOrUpdateSchool(group); } - } } - public void addOrUpdateSchool(SyncGroupDTO group) + private void addOrUpdateSchool(SyncGroupDTO group) { Optional schOpt=schInfoRepository.findBySchId(group.getId()); if(schOpt.isPresent()){ diff --git a/src/main/java/com/yunhai/bschclassmanage/service/impl/sync/SyncUserBaseService.java b/src/main/java/com/yunhai/bschclassmanage/service/impl/sync/SyncUserBaseService.java new file mode 100644 index 0000000..efba75b --- /dev/null +++ b/src/main/java/com/yunhai/bschclassmanage/service/impl/sync/SyncUserBaseService.java @@ -0,0 +1,25 @@ +package com.yunhai.bschclassmanage.service.impl.sync; + +import com.yunhai.bschclassmanage.service.ISyncUserBaseService; +import com.yunhai.platform.utils.model.BoaGroup; +import com.yunhai.platform.utils.model.BoaUser; + +public class SyncUserBaseService implements ISyncUserBaseService { + + public BoaGroup addGroup(){ + + return new BoaGroup(); + } + + public void deleteGroup(){ + + } + + public BoaUser addUserList(){ + return new BoaUser(); + } + + public void deleteUserList(){ + + } +} diff --git a/src/main/java/com/yunhai/bschclassmanage/service/impl/sync/SyncUserService.java b/src/main/java/com/yunhai/bschclassmanage/service/impl/sync/SyncUserService.java index 731878d..5604070 100644 --- a/src/main/java/com/yunhai/bschclassmanage/service/impl/sync/SyncUserService.java +++ b/src/main/java/com/yunhai/bschclassmanage/service/impl/sync/SyncUserService.java @@ -48,7 +48,7 @@ public class SyncUserService implements ISyncUserService { @Override @Transactional(rollbackFor = Exception.class) - public void syncAddOrUpdate(List userList) { + public void syncAddOrUpdate(List userList,boolean isAll) { if (userList == null || userList.isEmpty()) return; // 按角色分组(每个用户只遍历一次 roleList) @@ -69,10 +69,10 @@ public class SyncUserService implements ISyncUserService { Date now = new Date(); if (!syncStudentList.isEmpty()) { - syncStudents(syncStudentList, now); + syncStudents(syncStudentList, now,isAll); } if (!syncTeacherList.isEmpty()) { - syncTeachers(syncTeacherList, now); + syncTeachers(syncTeacherList, now,isAll); } } @@ -164,7 +164,7 @@ public class SyncUserService implements ISyncUserService { // ==================== 学生同步 ==================== - private void syncStudents(List studentUsers, Date now) { + private void syncStudents(List studentUsers, Date now,boolean isAll) { List stuIds = studentUsers.stream().map(SyncUserDTO::getId).distinct().collect(Collectors.toList()); // 已有学生记录 (stuId, groupId) -> SchStudent @@ -205,14 +205,18 @@ public class SyncUserService implements ISyncUserService { schStudentRepository.saveAll(saveList); } - // 清理用户中心不存在的学生(与教师相同逻辑:标记转出,可逆向恢复) - Set schIds = classKeys.keySet(); - setTransferStudent(schIds, classKeys, incomingStudentKeys); + if(isAll) + { + // 清理用户中心不存在的学生(与教师相同逻辑:标记转出,可逆向恢复) + Set schIds = classKeys.keySet(); + setTransferStudent(schIds, classKeys, incomingStudentKeys); - // 同步后使受影响班级的学生缓存失效,避免读到旧数据 - if (!classKeys.isEmpty()) { - classKeys.forEach((schId, classIds) -> schStudentCacheService.clearClassStudentCaches(schId, classIds)); + // 同步后使受影响班级的学生缓存失效,避免读到旧数据 + if (!classKeys.isEmpty()) { + classKeys.forEach((schId, classIds) -> schStudentCacheService.clearClassStudentCaches(schId, classIds)); + } } + } /** @@ -277,7 +281,7 @@ public class SyncUserService implements ISyncUserService { // ==================== 教师同步 ==================== - private void syncTeachers(List teacherUsers, Date now) { + private void syncTeachers(List teacherUsers, Date now,boolean isAll) { List teaIds = teacherUsers.stream().map(SyncUserDTO::getId).distinct().collect(Collectors.toList()); @@ -337,17 +341,20 @@ public class SyncUserService implements ISyncUserService { schTeacherGroupRepository.saveAll(saveGroupList); } - // 清理用户中心不存在的教师: - // 学校已存在、但用户中心(teacherUsers)已不存在的教师,需从活跃名单中清理。 - // 对本次同步涉及的每所学校,将「当前为转入状态、但不在本次下发分组列表」的教师分组标记为转出(OUT)。 - // 这样既把已从用户中心移除/调离的教师清理出活跃名单,又保留转出记录、可随下次同步逆向恢复(重新 IN)。 - // 仅针对本次同步覆盖的学校,避免误删未参与本批次的其他学校教师。 - setTransferTeacher(schIds,incomingGroupKeys); + if(isAll){ + // 清理用户中心不存在的教师: + // 学校已存在、但用户中心(teacherUsers)已不存在的教师,需从活跃名单中清理。 + // 对本次同步涉及的每所学校,将「当前为转入状态、但不在本次下发分组列表」的教师分组标记为转出(OUT)。 + // 这样既把已从用户中心移除/调离的教师清理出活跃名单,又保留转出记录、可随下次同步逆向恢复(重新 IN)。 + // 仅针对本次同步覆盖的学校,避免误删未参与本批次的其他学校教师。 + setTransferTeacher(schIds,incomingGroupKeys); - // 同步后使受影响学校的教师缓存失效 - if (!schIds.isEmpty()) { - schTeacherCacheService.clearTeacherCaches(schIds); + // 同步后使受影响学校的教师缓存失效 + if (!schIds.isEmpty()) { + schTeacherCacheService.clearTeacherCaches(schIds); + } } + } private void setTransferTeacher( Set schIds,Set incomingGroupKeys)