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