diff --git a/src/main/java/com/yunhai/bschclassmanage/service/ISyncUserBaseService.java b/src/main/java/com/yunhai/bschclassmanage/service/ISyncUserBaseService.java index ca00fb7..e2b9e7e 100644 --- a/src/main/java/com/yunhai/bschclassmanage/service/ISyncUserBaseService.java +++ b/src/main/java/com/yunhai/bschclassmanage/service/ISyncUserBaseService.java @@ -1,5 +1,7 @@ package com.yunhai.bschclassmanage.service; +import com.yunhai.bschclassmanage.entity.SchStudent; +import com.yunhai.bschclassmanage.entity.SchTeacher; import com.yunhai.bschclassmanage.enums.NodeType; import com.yunhai.bschclassmanage.model.dto.SchStudentDTO; import com.yunhai.bschclassmanage.model.dto.SchTeacherDTO; @@ -18,13 +20,13 @@ public interface ISyncUserBaseService { void editGroup(Integer id,String name,Integer parentId,Integer sort, NodeType type); - BoaUser addTeacher(SchTeacherDTO teacher); + BoaUser addTeacher(SchTeacher teacher, String pwd, Integer groupId); - BoaUser addStudent(SchStudentDTO student); + BoaUser editTeacher(SchTeacher teacher,String pwd, Integer groupId); - BoaUser editTeacher(SchTeacherDTO teacher); - - void deleteTeachers(List teaIds,Integer groupId); + BoaUser addStudent(SchStudent student, String pwd); + BoaUser editStudent(SchStudent student, String pwd); + void deleteUsers(List userIds,Integer groupId); } diff --git a/src/main/java/com/yunhai/bschclassmanage/service/com/ComSchTreeService.java b/src/main/java/com/yunhai/bschclassmanage/service/com/ComSchTreeService.java index f9c14c7..9bec70e 100644 --- a/src/main/java/com/yunhai/bschclassmanage/service/com/ComSchTreeService.java +++ b/src/main/java/com/yunhai/bschclassmanage/service/com/ComSchTreeService.java @@ -213,6 +213,34 @@ public class ComSchTreeService implements IComSchTreeService { } + } + + public List getCacheSchGroupTree(Integer schId) { + String cacheKey= RedisConstants.SYSTEM_GROUP_TREE+"_"+schId; + List cached = redisUtil.getList(cacheKey, BoaGroup.class); + if (cached != null && !cached.isEmpty()) { + return cached; + } + + // 2. 加锁防止缓存击穿 + 双重检查 + synchronized (this) { + cached = redisUtil.getList(cacheKey, BoaGroup.class); + if (cached != null && !cached.isEmpty()) { + return cached; + } + + // 3. 从数据库查询 + BoaGroup schGroup = YschBaseOpenApi.getGroupById(schId,true); + List list=Collections.singletonList(schGroup); + + // 4. 仅缓存非空结果;空结果不缓存,防止空缓存污染(穿透风险可忽略) + if (!list.isEmpty()) { + redisUtil.set(cacheKey,list, RedisConstants.CACHE_EXPIRE_1M); + } + return list; + } + + } public List getSchoolList() { diff --git a/src/main/java/com/yunhai/bschclassmanage/service/impl/student/SchStudentInfoService.java b/src/main/java/com/yunhai/bschclassmanage/service/impl/student/SchStudentInfoService.java index 507a58a..22b760e 100644 --- a/src/main/java/com/yunhai/bschclassmanage/service/impl/student/SchStudentInfoService.java +++ b/src/main/java/com/yunhai/bschclassmanage/service/impl/student/SchStudentInfoService.java @@ -8,11 +8,13 @@ import com.yunhai.bschclassmanage.enums.UserStatus; import com.yunhai.bschclassmanage.model.dto.SchStudentDTO; import com.yunhai.bschclassmanage.model.entityField.EntityFieldNames; import com.yunhai.bschclassmanage.model.vo.SchStudentVO; +import com.yunhai.bschclassmanage.service.ISyncUserBaseService; import com.yunhai.bschclassmanage.utils.LogContextHolder; import com.yunhai.bschclassmanage.utils.ModelMapperUtil; import com.yunhai.bschclassmanage.utils.OtherUtil; import com.yunhai.bschclassmanage.utils.UserContext; import com.yunhai.platform.utils.exception.DException; +import com.yunhai.platform.utils.model.BoaUser; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; @@ -36,6 +38,10 @@ public class SchStudentInfoService { @Autowired private SchStudentCacheService cacheService; + + @Autowired + private ISyncUserBaseService syncUserBaseService; + @Autowired private SchStudentLogService logService; @@ -91,7 +97,6 @@ public class SchStudentInfoService { throw new DException("学生名称已存在:" + name); } entity.setGroupId(entity.getClassId()); - entity.setStuId(0); // 3. 执行保存 SchStudent savedEntity; @@ -100,7 +105,11 @@ public class SchStudentInfoService { entity.setAbnormalStatus(StuAbnormalStatus.NORMAL.getId()); entity.setStatus(UserStatus.NORMAL.getId()); OtherUtil.setBaseEntityValue(user, entity); + + BoaUser boaStudent= syncUserBaseService.addStudent(entity,entityDTO.getPwd()); + entity.setGroupId( boaStudent.getId()); savedEntity = schStudentRepository.save(entity); + } else { // 复制允许修改的字段 oldStudent = OtherUtil.deepCopy(existingForUpdate, SchStudent.class); @@ -113,6 +122,8 @@ public class SchStudentInfoService { EntityFieldNames.transferStatus, EntityFieldNames.createDate, EntityFieldNames.createUserId); + + syncUserBaseService.editStudent(existingForUpdate,entityDTO.getPwd()); savedEntity = schStudentRepository.save(existingForUpdate); // 将保存后的ID回传给entity(用于返回) entity.setId(savedEntity.getId()); @@ -169,5 +180,12 @@ public class SchStudentInfoService { // 6. 清除每个班级的学生缓存 cacheService.clearClassStudentCaches(user.getSchId(), classIds); + + for (Integer classId:classIds) { + List stuIds=students.stream().filter(s->s.getClassId().equals(classId)).map(s->s.getStuId()).collect(Collectors.toList()); + if(stuIds.size()>0){ + syncUserBaseService.deleteUsers(stuIds, classId); + } + } } } \ No newline at end of file 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 index 55d2bd3..49ac2e9 100644 --- a/src/main/java/com/yunhai/bschclassmanage/service/impl/sync/SyncUserBaseService.java +++ b/src/main/java/com/yunhai/bschclassmanage/service/impl/sync/SyncUserBaseService.java @@ -1,5 +1,6 @@ package com.yunhai.bschclassmanage.service.impl.sync; +import com.yunhai.bschclassmanage.entity.SchStudent; import com.yunhai.bschclassmanage.entity.SchTeacher; import com.yunhai.bschclassmanage.enums.NodeType; import com.yunhai.bschclassmanage.enums.UserRole; @@ -50,23 +51,23 @@ public class SyncUserBaseService implements ISyncUserBaseService { } - public BoaUser addTeacher(SchTeacherDTO teacher){ + public BoaUser addTeacher(SchTeacher teacher,String pwd, Integer groupId){ SysUserRequest user=new SysUserRequest(); user.setAccount(teacher.getAccount()); user.setRealName(teacher.getName()); user.setGender(teacher.getGender()); user.setIdcard(teacher.getIdCard()); user.setPhone(teacher.getTel()); - user.setGroupId(teacher.getGroupId()); + user.setGroupId(groupId); user.setRoles(Arrays.asList(UserRole.TEACHER_USER.getValue())); - if (StringUtils.isNotBlank(teacher.getPwd())) { - user.setPassword(teacher.getPwd()); + if (StringUtils.isNotBlank(pwd)) { + user.setPassword(pwd); } return YschBaseOpenApi.addUser(user); } - public BoaUser addStudent(SchStudentDTO student){ + public BoaUser addStudent(SchStudent student,String pwd){ SysUserRequest user=new SysUserRequest(); user.setAccount(student.getAccount()); user.setRealName(student.getName()); @@ -74,13 +75,13 @@ public class SyncUserBaseService implements ISyncUserBaseService { user.setIdcard(student.getIdCard()); user.setGroupId(student.getGroupId()); user.setRoles(Arrays.asList(UserRole.STU_USER.getValue())); - if (StringUtils.isNotBlank(student.getPwd())) { - user.setPassword(student.getPwd()); + if (StringUtils.isNotBlank(pwd)) { + user.setPassword(pwd); } return YschBaseOpenApi.addUser(user); } - public BoaUser editTeacher(SchTeacherDTO teacher){ + public BoaUser editTeacher(SchTeacher teacher,String pwd, Integer groupId){ if (teacher.getTeaId()==null||teacher.getTeaId()<=0){ throw new DException("教师Id不允许为null"); } @@ -90,17 +91,35 @@ public class SyncUserBaseService implements ISyncUserBaseService { user.setGender(teacher.getGender()); user.setIdcard(teacher.getIdCard()); user.setPhone(teacher.getTel()); - user.setGroupId(teacher.getGroupId()); + user.setGroupId(groupId); user.setRoles(Arrays.asList(UserRole.TEACHER_USER.getValue())); - if (StringUtils.isNotBlank(teacher.getPwd())) { - user.setPassword(teacher.getPwd()); + if (StringUtils.isNotBlank(pwd)) { + user.setPassword(pwd); } return YschBaseOpenApi.editUser(teacher.getTeaId(),user); } - public void deleteTeachers(List teaIds,Integer groupId){ - for (Integer teaId :teaIds) { - YschBaseOpenApi.deleteUser(teaId,groupId); + public BoaUser editStudent(SchStudent student,String pwd){ + if (student.getStuId()==null||student.getStuId()<=0){ + throw new DException("学生Id不允许为null"); + } + SysUserRequest user=new SysUserRequest(); + user.setAccount(student.getAccount()); + user.setRealName(student.getName()); + user.setGender(student.getGender()); + user.setIdcard(student.getIdCard()); + user.setGroupId(student.getGroupId()); + user.setRoles(Arrays.asList(UserRole.STU_USER.getValue())); + if (StringUtils.isNotBlank(pwd)) { + user.setPassword(pwd); + } + return YschBaseOpenApi.editUser(student.getStuId(),user); + } + + + public void deleteUsers(List userIds,Integer groupId){ + for (Integer userId :userIds) { + YschBaseOpenApi.deleteUser(userId,groupId); } } diff --git a/src/main/java/com/yunhai/bschclassmanage/service/impl/teacher/SchTeacherInfoService.java b/src/main/java/com/yunhai/bschclassmanage/service/impl/teacher/SchTeacherInfoService.java index 4e8efca..e57a4cc 100644 --- a/src/main/java/com/yunhai/bschclassmanage/service/impl/teacher/SchTeacherInfoService.java +++ b/src/main/java/com/yunhai/bschclassmanage/service/impl/teacher/SchTeacherInfoService.java @@ -95,7 +95,7 @@ public class SchTeacherInfoService { BeanUtils.copyProperties(dto, teacher); savedTeacher = schTeacherRepository.save(teacher); - BoaUser syncTeacher= syncUserBaseService.addTeacher(dto); + BoaUser syncTeacher= syncUserBaseService.addTeacher(teacher,dto.getPwd(),dto.getGroupId()); Integer generatedId = syncTeacher.getId(); savedTeacher.setTeaId(generatedId); savedTeacher = schTeacherRepository.save(savedTeacher); @@ -142,7 +142,7 @@ public class SchTeacherInfoService { EntityFieldNames.createUserId, EntityFieldNames.status ); - syncUserBaseService.editTeacher(dto); + syncUserBaseService.editTeacher(existing,dto.getPwd(),dto.getGroupId()); schTeacherRepository.save(existing); savedTeacher = existing; }