This commit is contained in:
2026-08-19 15:46:59 +08:00
parent 72baf66d59
commit 34a55668e5
5 changed files with 89 additions and 22 deletions
@@ -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<Integer> teaIds,Integer groupId);
BoaUser addStudent(SchStudent student, String pwd);
BoaUser editStudent(SchStudent student, String pwd);
void deleteUsers(List<Integer> userIds,Integer groupId);
}
@@ -213,6 +213,34 @@ public class ComSchTreeService implements IComSchTreeService {
}
}
public List<BoaGroup> getCacheSchGroupTree(Integer schId) {
String cacheKey= RedisConstants.SYSTEM_GROUP_TREE+"_"+schId;
List<BoaGroup> 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<BoaGroup> list=Collections.singletonList(schGroup);
// 4. 仅缓存非空结果;空结果不缓存,防止空缓存污染(穿透风险可忽略)
if (!list.isEmpty()) {
redisUtil.set(cacheKey,list, RedisConstants.CACHE_EXPIRE_1M);
}
return list;
}
}
public List<SelectIntVO> getSchoolList() {
@@ -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<Integer> stuIds=students.stream().filter(s->s.getClassId().equals(classId)).map(s->s.getStuId()).collect(Collectors.toList());
if(stuIds.size()>0){
syncUserBaseService.deleteUsers(stuIds, classId);
}
}
}
}
@@ -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<Integer> 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<Integer> userIds,Integer groupId){
for (Integer userId :userIds) {
YschBaseOpenApi.deleteUser(userId,groupId);
}
}
@@ -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;
}