error data
This commit is contained in:
@@ -64,8 +64,8 @@ public interface SchTeacherGroupRepository extends JpaRepository<SchTeacherGroup
|
||||
* 适用场景:全局删除(如教师彻底注销)
|
||||
*/
|
||||
@Modifying
|
||||
@Query("DELETE FROM SchTeacherGroup g WHERE g.teaId IN :teaIds")
|
||||
int deleteByTeaIdIn(@Param("teaIds") List<Integer> teaIds);
|
||||
@Query("DELETE FROM SchTeacherGroup g WHERE g.teaId IN :teaIds AND g.groupId = :groupId")
|
||||
int deleteByGroupIdAndTeaIds(@Param("teaIds") List<Integer> teaIds,Integer groupId);
|
||||
|
||||
/**
|
||||
* 根据 teaId 列表和学校 ID 删除关联(推荐)
|
||||
|
||||
@@ -130,6 +130,7 @@ public class ControllerUserContextAspect {
|
||||
if (boaUser != null) {
|
||||
UserContext.setUserId(boaUser.getId());
|
||||
UserContext.setUserName(boaUser.getName() != null ? boaUser.getName() : "unknown");
|
||||
UserContext.setSchId(boaUser.getSchool()==null?null:boaUser.getSchool().getId());
|
||||
log.debug("UserContext set from parameter/session: id={}, name={}", boaUser.getId(), boaUser.getName());
|
||||
} else {
|
||||
UserContext.setUserName("anonymous");
|
||||
|
||||
+18
@@ -1,6 +1,9 @@
|
||||
package com.yunhai.bschclassmanage.controller.Handler;
|
||||
|
||||
import com.yunhai.platform.utils.exception.DException;
|
||||
import com.yunhai.platform.utils.exception.ErrorCode;
|
||||
import org.springframework.core.Ordered;
|
||||
import org.springframework.core.annotation.Order;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.http.converter.HttpMessageNotReadableException;
|
||||
@@ -13,9 +16,24 @@ import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.*;
|
||||
|
||||
@Order(Ordered.HIGHEST_PRECEDENCE)
|
||||
@RestControllerAdvice
|
||||
public class ValidationExceptionHandler {
|
||||
|
||||
/**
|
||||
* 兜底 DException:平台 GlobalExceptionHandler 只返回 code/msg,会丢掉 data。
|
||||
* 本项目优先捕获,把业务异常里的 data(如导入错误列表)透传给前端。
|
||||
*/
|
||||
@ExceptionHandler(DException.class)
|
||||
public ResponseEntity<Map<String, Object>> handleDException(DException ex) {
|
||||
Map<String, Object> response = new LinkedHashMap<>();
|
||||
response.put("code", ex.getCode() != null ? ex.getCode().getCode() : ErrorCode.CUSTOM.getCode());
|
||||
response.put("msg", ex.getMessage());
|
||||
response.put("data", ex.getData());
|
||||
response.put("timeNow", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
|
||||
return new ResponseEntity<>(response, HttpStatus.OK);
|
||||
}
|
||||
|
||||
@ExceptionHandler(MethodArgumentNotValidException.class)
|
||||
public ResponseEntity<Map<String, Object>> handleValidationExceptions(MethodArgumentNotValidException ex) {
|
||||
List<String> msgList = new ArrayList<>();
|
||||
|
||||
@@ -60,12 +60,6 @@ public class SchTeacherController extends BaseController {
|
||||
schTeacherService.saveTeacher(UserContext.getCurrentUser(),model);
|
||||
}
|
||||
|
||||
@PostMapping("delete/{ids}")
|
||||
public void deleteTeacher(@PathVariable String ids ) {
|
||||
schTeacherService.deleteTeacher(UserContext.getCurrentUser(),ids);
|
||||
}
|
||||
|
||||
|
||||
@PostMapping("moveGroup")
|
||||
public void moveGroup(@Valid @RequestBody TeaTransferGroupDTO model) {
|
||||
schTeacherService.moveGroup(UserContext.getCurrentUser(),model);
|
||||
@@ -76,6 +70,11 @@ public class SchTeacherController extends BaseController {
|
||||
schTeacherService.setTeacherStatus(UserContext.getCurrentUser(),ids,status);
|
||||
}
|
||||
|
||||
@PostMapping("delete")
|
||||
public void deleteTeacher(String ids ,Integer groupId) {
|
||||
schTeacherService.deleteTeacher(UserContext.getCurrentUser(),ids,groupId);
|
||||
}
|
||||
|
||||
@GetMapping("groupSelect") // 当前用户
|
||||
public List<SelectIntVO> toTeacherGroupSelect() {
|
||||
return schTeacherService.toTeacherGroupSelect(UserContext.getSchId());
|
||||
|
||||
@@ -29,7 +29,7 @@ public interface ISchTeacherService {
|
||||
|
||||
void saveTeacher(UserContext.UserInfo user, SchTeacherDTO dto);
|
||||
|
||||
void deleteTeacher(UserContext.UserInfo user,String ids);
|
||||
void deleteTeacher(UserContext.UserInfo user,String ids,Integer groupId);
|
||||
|
||||
Map<Integer, String> toIdAndNameMap(Integer schId);
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ public interface ISyncUserBaseService {
|
||||
|
||||
BoaUser editTeacher(SchTeacherDTO teacher);
|
||||
|
||||
void deleteTeacherList(List<SchTeacherDTO> teacherList);
|
||||
void deleteTeachers(List<Integer> teaIds,Integer groupId);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -273,8 +273,8 @@ public class SchTeacherService implements ISchTeacherService {
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void deleteTeacher(UserContext.UserInfo user, String ids) {
|
||||
infoService.deleteTeacher(user, ids);
|
||||
public void deleteTeacher(UserContext.UserInfo user, String ids,Integer groupId) {
|
||||
infoService.deleteTeacher(user, ids,groupId);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -98,9 +98,9 @@ public class SyncUserBaseService implements ISyncUserBaseService {
|
||||
return YschBaseOpenApi.editUser(teacher.getTeaId(),user);
|
||||
}
|
||||
|
||||
public void deleteTeacherList(List<SchTeacherDTO> teacherList){
|
||||
for (SchTeacherDTO teacher :teacherList) {
|
||||
YschBaseOpenApi.deleteUser(teacher.getTeaId(),teacher.getGroupId());
|
||||
public void deleteTeachers(List<Integer> teaIds,Integer groupId){
|
||||
for (Integer teaId :teaIds) {
|
||||
YschBaseOpenApi.deleteUser(teaId,groupId);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+18
-11
@@ -151,7 +151,7 @@ public class SchTeacherInfoService {
|
||||
cacheService.clearTeacherCache(schId);
|
||||
}
|
||||
|
||||
public void deleteTeacher(UserContext.UserInfo user, String ids) {
|
||||
public void deleteTeacher(UserContext.UserInfo user, String ids,Integer groupId) {
|
||||
if (StringUtils.isBlank(ids)) {
|
||||
throw new DException("教师ID列表不能为空");
|
||||
}
|
||||
@@ -180,26 +180,33 @@ public class SchTeacherInfoService {
|
||||
}
|
||||
|
||||
// 校验班主任/副班主任(SchClass.firstTeacherId/secondTeacherId 存的是 teaId)
|
||||
List<Integer> teacherTeaIds = teachers.stream()
|
||||
.map(SchTeacher::getTeaId)
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toList());
|
||||
if (!teacherTeaIds.isEmpty()) {
|
||||
long classCount = schClassRepository.countByFirstTeacherIdInOrSecondTeacherIdInAndSchId(teacherTeaIds, schId);
|
||||
if (classCount > 0) {
|
||||
throw new DException("选中的教师中有 " + classCount + " 个班级的班主任/副班主任,请先更换");
|
||||
if(teachers.size()==1)
|
||||
{
|
||||
List<Integer> teacherTeaIds = teachers.stream()
|
||||
.map(SchTeacher::getTeaId)
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toList());
|
||||
if (!teacherTeaIds.isEmpty()) {
|
||||
long classCount = schClassRepository.countByFirstTeacherIdInOrSecondTeacherIdInAndSchId(teacherTeaIds, schId);
|
||||
if (classCount > 0) {
|
||||
throw new DException("选中的教师中有 " + classCount + " 个班级的班主任/副班主任,请先更换");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
String groupName=comSchTreeService.getTeaGroupName(schId,groupId);
|
||||
|
||||
// 删除关联组关系(先异步日志,再删除)
|
||||
List<Integer> teaIds = teachers.stream()
|
||||
.map(SchTeacher::getTeaId)
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
if (!teaIds.isEmpty()) {
|
||||
// 异步记录删除日志(由 LogService 处理)
|
||||
logService.deleteTeacherLogs(user, teachers);
|
||||
schTeacherGroupRepository.deleteByTeaIdIn(teaIds);
|
||||
logService.deleteTeacherLogs(user, teachers,groupName);
|
||||
syncUserBaseService.deleteTeachers(teaIds,groupId);
|
||||
schTeacherGroupRepository.deleteByGroupIdAndTeaIds(teaIds,groupId);
|
||||
}
|
||||
|
||||
// 清除缓存
|
||||
|
||||
+3
-3
@@ -133,18 +133,18 @@ public class SchTeacherLogService {
|
||||
}
|
||||
|
||||
@Async("logExecutor")
|
||||
public void deleteTeacherLogs(UserContext.UserInfo user, List<SchTeacher> teachers) {
|
||||
public void deleteTeacherLogs(UserContext.UserInfo user, List<SchTeacher> teachers,String groupName) {
|
||||
try {
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
List<OperationLogRecord> logs = new ArrayList<>();
|
||||
for (SchTeacher teacher : teachers) {
|
||||
OperationLogRecord log = logService.buildLogRecord(user, LogModule.TEACHER, "删除[" + teacher.getName() + "] 教师成功", now);
|
||||
OperationLogRecord log = logService.buildLogRecord(user, LogModule.TEACHER, "删除["+groupName+"-" + teacher.getName() + "] 教师成功", now);
|
||||
logs.add(log);
|
||||
}
|
||||
if (logs != null && !logs.isEmpty()) {
|
||||
logService.saveAllLogAsync(logs);
|
||||
}
|
||||
log.debug("操作人:{},删除教师日志:{}", user.getUserName(), JSON.toJSONString(teachers));
|
||||
log.debug("操作人:{},删除教师日志:{}", groupName+"-"+user.getUserName(), JSON.toJSONString(teachers));
|
||||
} catch (Exception e) {
|
||||
log.error("操作人:" + user.getUserName() + ",删除教师日志失败: {}", e.getMessage(), e);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user