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; 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.enums.NodeType;
import com.yunhai.bschclassmanage.model.dto.SchStudentDTO; import com.yunhai.bschclassmanage.model.dto.SchStudentDTO;
import com.yunhai.bschclassmanage.model.dto.SchTeacherDTO; 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); 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); BoaUser addStudent(SchStudent student, String pwd);
void deleteTeachers(List<Integer> teaIds,Integer groupId);
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() { 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.dto.SchStudentDTO;
import com.yunhai.bschclassmanage.model.entityField.EntityFieldNames; import com.yunhai.bschclassmanage.model.entityField.EntityFieldNames;
import com.yunhai.bschclassmanage.model.vo.SchStudentVO; import com.yunhai.bschclassmanage.model.vo.SchStudentVO;
import com.yunhai.bschclassmanage.service.ISyncUserBaseService;
import com.yunhai.bschclassmanage.utils.LogContextHolder; import com.yunhai.bschclassmanage.utils.LogContextHolder;
import com.yunhai.bschclassmanage.utils.ModelMapperUtil; import com.yunhai.bschclassmanage.utils.ModelMapperUtil;
import com.yunhai.bschclassmanage.utils.OtherUtil; import com.yunhai.bschclassmanage.utils.OtherUtil;
import com.yunhai.bschclassmanage.utils.UserContext; import com.yunhai.bschclassmanage.utils.UserContext;
import com.yunhai.platform.utils.exception.DException; import com.yunhai.platform.utils.exception.DException;
import com.yunhai.platform.utils.model.BoaUser;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
@@ -36,6 +38,10 @@ public class SchStudentInfoService {
@Autowired @Autowired
private SchStudentCacheService cacheService; private SchStudentCacheService cacheService;
@Autowired
private ISyncUserBaseService syncUserBaseService;
@Autowired @Autowired
private SchStudentLogService logService; private SchStudentLogService logService;
@@ -91,7 +97,6 @@ public class SchStudentInfoService {
throw new DException("学生名称已存在:" + name); throw new DException("学生名称已存在:" + name);
} }
entity.setGroupId(entity.getClassId()); entity.setGroupId(entity.getClassId());
entity.setStuId(0);
// 3. 执行保存 // 3. 执行保存
SchStudent savedEntity; SchStudent savedEntity;
@@ -100,7 +105,11 @@ public class SchStudentInfoService {
entity.setAbnormalStatus(StuAbnormalStatus.NORMAL.getId()); entity.setAbnormalStatus(StuAbnormalStatus.NORMAL.getId());
entity.setStatus(UserStatus.NORMAL.getId()); entity.setStatus(UserStatus.NORMAL.getId());
OtherUtil.setBaseEntityValue(user, entity); OtherUtil.setBaseEntityValue(user, entity);
BoaUser boaStudent= syncUserBaseService.addStudent(entity,entityDTO.getPwd());
entity.setGroupId( boaStudent.getId());
savedEntity = schStudentRepository.save(entity); savedEntity = schStudentRepository.save(entity);
} else { } else {
// 复制允许修改的字段 // 复制允许修改的字段
oldStudent = OtherUtil.deepCopy(existingForUpdate, SchStudent.class); oldStudent = OtherUtil.deepCopy(existingForUpdate, SchStudent.class);
@@ -113,6 +122,8 @@ public class SchStudentInfoService {
EntityFieldNames.transferStatus, EntityFieldNames.transferStatus,
EntityFieldNames.createDate, EntityFieldNames.createDate,
EntityFieldNames.createUserId); EntityFieldNames.createUserId);
syncUserBaseService.editStudent(existingForUpdate,entityDTO.getPwd());
savedEntity = schStudentRepository.save(existingForUpdate); savedEntity = schStudentRepository.save(existingForUpdate);
// 将保存后的ID回传给entity(用于返回) // 将保存后的ID回传给entity(用于返回)
entity.setId(savedEntity.getId()); entity.setId(savedEntity.getId());
@@ -169,5 +180,12 @@ public class SchStudentInfoService {
// 6. 清除每个班级的学生缓存 // 6. 清除每个班级的学生缓存
cacheService.clearClassStudentCaches(user.getSchId(), classIds); 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; package com.yunhai.bschclassmanage.service.impl.sync;
import com.yunhai.bschclassmanage.entity.SchStudent;
import com.yunhai.bschclassmanage.entity.SchTeacher; import com.yunhai.bschclassmanage.entity.SchTeacher;
import com.yunhai.bschclassmanage.enums.NodeType; import com.yunhai.bschclassmanage.enums.NodeType;
import com.yunhai.bschclassmanage.enums.UserRole; 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(); SysUserRequest user=new SysUserRequest();
user.setAccount(teacher.getAccount()); user.setAccount(teacher.getAccount());
user.setRealName(teacher.getName()); user.setRealName(teacher.getName());
user.setGender(teacher.getGender()); user.setGender(teacher.getGender());
user.setIdcard(teacher.getIdCard()); user.setIdcard(teacher.getIdCard());
user.setPhone(teacher.getTel()); user.setPhone(teacher.getTel());
user.setGroupId(teacher.getGroupId()); user.setGroupId(groupId);
user.setRoles(Arrays.asList(UserRole.TEACHER_USER.getValue())); user.setRoles(Arrays.asList(UserRole.TEACHER_USER.getValue()));
if (StringUtils.isNotBlank(teacher.getPwd())) { if (StringUtils.isNotBlank(pwd)) {
user.setPassword(teacher.getPwd()); user.setPassword(pwd);
} }
return YschBaseOpenApi.addUser(user); return YschBaseOpenApi.addUser(user);
} }
public BoaUser addStudent(SchStudentDTO student){ public BoaUser addStudent(SchStudent student,String pwd){
SysUserRequest user=new SysUserRequest(); SysUserRequest user=new SysUserRequest();
user.setAccount(student.getAccount()); user.setAccount(student.getAccount());
user.setRealName(student.getName()); user.setRealName(student.getName());
@@ -74,13 +75,13 @@ public class SyncUserBaseService implements ISyncUserBaseService {
user.setIdcard(student.getIdCard()); user.setIdcard(student.getIdCard());
user.setGroupId(student.getGroupId()); user.setGroupId(student.getGroupId());
user.setRoles(Arrays.asList(UserRole.STU_USER.getValue())); user.setRoles(Arrays.asList(UserRole.STU_USER.getValue()));
if (StringUtils.isNotBlank(student.getPwd())) { if (StringUtils.isNotBlank(pwd)) {
user.setPassword(student.getPwd()); user.setPassword(pwd);
} }
return YschBaseOpenApi.addUser(user); 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){ if (teacher.getTeaId()==null||teacher.getTeaId()<=0){
throw new DException("教师Id不允许为null"); throw new DException("教师Id不允许为null");
} }
@@ -90,17 +91,35 @@ public class SyncUserBaseService implements ISyncUserBaseService {
user.setGender(teacher.getGender()); user.setGender(teacher.getGender());
user.setIdcard(teacher.getIdCard()); user.setIdcard(teacher.getIdCard());
user.setPhone(teacher.getTel()); user.setPhone(teacher.getTel());
user.setGroupId(teacher.getGroupId()); user.setGroupId(groupId);
user.setRoles(Arrays.asList(UserRole.TEACHER_USER.getValue())); user.setRoles(Arrays.asList(UserRole.TEACHER_USER.getValue()));
if (StringUtils.isNotBlank(teacher.getPwd())) { if (StringUtils.isNotBlank(pwd)) {
user.setPassword(teacher.getPwd()); user.setPassword(pwd);
} }
return YschBaseOpenApi.editUser(teacher.getTeaId(),user); return YschBaseOpenApi.editUser(teacher.getTeaId(),user);
} }
public void deleteTeachers(List<Integer> teaIds,Integer groupId){ public BoaUser editStudent(SchStudent student,String pwd){
for (Integer teaId :teaIds) { if (student.getStuId()==null||student.getStuId()<=0){
YschBaseOpenApi.deleteUser(teaId,groupId); 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); BeanUtils.copyProperties(dto, teacher);
savedTeacher = schTeacherRepository.save(teacher); savedTeacher = schTeacherRepository.save(teacher);
BoaUser syncTeacher= syncUserBaseService.addTeacher(dto); BoaUser syncTeacher= syncUserBaseService.addTeacher(teacher,dto.getPwd(),dto.getGroupId());
Integer generatedId = syncTeacher.getId(); Integer generatedId = syncTeacher.getId();
savedTeacher.setTeaId(generatedId); savedTeacher.setTeaId(generatedId);
savedTeacher = schTeacherRepository.save(savedTeacher); savedTeacher = schTeacherRepository.save(savedTeacher);
@@ -142,7 +142,7 @@ public class SchTeacherInfoService {
EntityFieldNames.createUserId, EntityFieldNames.createUserId,
EntityFieldNames.status EntityFieldNames.status
); );
syncUserBaseService.editTeacher(dto); syncUserBaseService.editTeacher(existing,dto.getPwd(),dto.getGroupId());
schTeacherRepository.save(existing); schTeacherRepository.save(existing);
savedTeacher = existing; savedTeacher = existing;
} }