From 3070602cb135c111fc0f0bfdf2e055f402fd3f33 Mon Sep 17 00:00:00 2001 From: Alan <3052806735@qq.com> Date: Mon, 12 Aug 2024 17:31:20 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E8=AF=BE=E7=A8=8B=E4=B8=8B?= =?UTF-8?q?=E9=9D=A2=E7=9A=84=E7=94=A8=E6=88=B7=E4=BF=A1=E6=81=AF=EF=BC=8C?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=9F=A5=E8=AF=A2=E9=80=BB=E8=BE=91=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/entity/umsAdmin/UmsStudent.java | 2 + .../model/vo/message/CourseUserInfVO.java | 2 - .../impl/courses/CoursesServiceImpl.java | 218 +++++++++++------- .../impl/message/UserInboxServiceImpl.java | 1 - .../backend/utils/Chapter/SheetHandler.java | 7 - 5 files changed, 137 insertions(+), 93 deletions(-) diff --git a/src/main/java/com/teaching/backend/model/entity/umsAdmin/UmsStudent.java b/src/main/java/com/teaching/backend/model/entity/umsAdmin/UmsStudent.java index 6608772..949204d 100644 --- a/src/main/java/com/teaching/backend/model/entity/umsAdmin/UmsStudent.java +++ b/src/main/java/com/teaching/backend/model/entity/umsAdmin/UmsStudent.java @@ -6,6 +6,8 @@ import java.time.LocalDate; import java.time.LocalDateTime; import com.baomidou.mybatisplus.annotation.TableId; import java.io.Serializable; + +import io.swagger.models.auth.In; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; diff --git a/src/main/java/com/teaching/backend/model/vo/message/CourseUserInfVO.java b/src/main/java/com/teaching/backend/model/vo/message/CourseUserInfVO.java index 364f456..87e7264 100644 --- a/src/main/java/com/teaching/backend/model/vo/message/CourseUserInfVO.java +++ b/src/main/java/com/teaching/backend/model/vo/message/CourseUserInfVO.java @@ -13,8 +13,6 @@ public class CourseUserInfVO { private String courseId; @ApiModelProperty(value = "课程name") private String courseName; - @ApiModelProperty(value = "与课程有关的用户信息集合") private List usersInf; - } diff --git a/src/main/java/com/teaching/backend/service/impl/courses/CoursesServiceImpl.java b/src/main/java/com/teaching/backend/service/impl/courses/CoursesServiceImpl.java index da9f0dc..0056187 100644 --- a/src/main/java/com/teaching/backend/service/impl/courses/CoursesServiceImpl.java +++ b/src/main/java/com/teaching/backend/service/impl/courses/CoursesServiceImpl.java @@ -52,6 +52,7 @@ import java.io.File; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; import static com.teaching.backend.constant.RoleConstants.TEACHER_ROLE; @@ -640,57 +641,76 @@ public class CoursesServiceImpl extends ServiceImpl impl } private List queryCourseUserForTeacher(Long userId) { - // 查询所有与该教师相关的课程 - List teacherCoursesInf = coursesMapper.selectList( - new LambdaQueryWrapper() - .apply("FIND_IN_SET({0}, teacher)", userId) - .select(Courses::getId, Courses::getTeacher) + // 1. 获取该教师负责的所有课程 + List teacherCoursesInf = coursesMapper.selectList(new LambdaQueryWrapper() + .apply("FIND_IN_SET({0}, teacher)", userId) + .select(Courses::getId, Courses::getTeacher, Courses::getName) ); + // 2. 提取所有课程的ID + Set courseIds = teacherCoursesInf.stream() + .map(Courses::getId) + .collect(Collectors.toSet()); + + // 3. 批量查询所有课程的学生ID + List studentCourses = studentCoursesMapper.selectList( + new LambdaQueryWrapper().in(StudentCourses::getCourse, courseIds) + ); + + // 4. 获取所有的学生ID + Set studentIds = studentCourses.stream() + .map(StudentCourses::getStudent) + .collect(Collectors.toSet()); + + // 5. 批量查询所有学生的信息 + List students = umsStudentMapper.selectList( + new LambdaQueryWrapper().in(UmsStudent::getUserId, studentIds) + ); + + // 6. 将学生信息缓存到Map中,Key为学生ID + Map studentMap = students.stream() + .collect(Collectors.toMap(UmsStudent::getUserId, Function.identity())); + + // 7. 处理教师信息并构建返回结果 List courseUserInfVOS = new ArrayList<>(); - for (Courses courses : teacherCoursesInf) { + for (Courses course : teacherCoursesInf) { CourseUserInfVO courseUserInfVO = new CourseUserInfVO(); + courseUserInfVO.setCourseId(course.getId()); + courseUserInfVO.setCourseName(course.getName()); + List userReadMessageTimeVOS = new ArrayList<>(); - courseUserInfVO.setCourseId(courses.getId()); - - // 查询与课程相关的所有学生 - List studentIds = studentCoursesMapper.selectList( - new LambdaQueryWrapper<>(StudentCourses.class) - .eq(StudentCourses::getCourse, courses.getId()) - ).stream().map(StudentCourses::getStudent).collect(Collectors.toList()); - - // 为每个学生创建一个新的 UserReadMessageTimeVO 对象 - for (Long studentId : studentIds) { - UmsStudent umsStudent = umsStudentMapper.selectOne( - new LambdaQueryWrapper<>(UmsStudent.class) - .eq(UmsStudent::getUserId, studentId) - .select(UmsStudent::getName) - ); - if (umsStudent == null) { - log.error("用户不存在: {}",studentId); - throw new BusinessException(ErrorCode.PARAMS_USER_NOTEXISTS); + + // 添加学生信息 + for (StudentCourses sc : studentCourses) { + if (sc.getCourse().equals(course.getId())) { + UmsStudent student = studentMap.get(sc.getStudent()); // 类型转换 + if (student != null) { + UserReadMessageTimeVO userReadMessageTimeVO = new UserReadMessageTimeVO(); + userReadMessageTimeVO.setId(student.getUserId()); + userReadMessageTimeVO.setReceiverName(student.getName()); + userReadMessageTimeVOS.add(userReadMessageTimeVO); + } else { + log.error("学生不存在: {}", sc.getStudent()); + throw new BusinessException(ErrorCode.PARAMS_USER_NOTEXISTS); + } } - UserReadMessageTimeVO userReadMessageTimeVO = new UserReadMessageTimeVO(); // 在循环中创建新对象 - userReadMessageTimeVO.setId(studentId); - userReadMessageTimeVO.setReceiverName(umsStudent.getName()); - userReadMessageTimeVOS.add(userReadMessageTimeVO); } - // 为每个教师创建一个新的 UserReadMessageTimeVO 对象 - String[] teacherUserIds = courses.getTeacher().split(","); + // 添加教师信息 + String[] teacherUserIds = course.getTeacher().split(","); for (String teacherId : teacherUserIds) { UmsTeacher umsTeacher = umsTeacherMapper.selectOne( - new LambdaQueryWrapper() - .eq(UmsTeacher::getUserId, teacherId) + new LambdaQueryWrapper().eq(UmsTeacher::getUserId, teacherId) ); - if (umsTeacher == null) { - log.error("教师不存在: {}",teacherId); + if (umsTeacher != null) { + UserReadMessageTimeVO userReadMessageTimeVO = new UserReadMessageTimeVO(); + userReadMessageTimeVO.setId(umsTeacher.getUserId()); + userReadMessageTimeVO.setReceiverName(umsTeacher.getName()); + userReadMessageTimeVOS.add(userReadMessageTimeVO); + } else { + log.error("教师不存在: {}", teacherId); throw new BusinessException(ErrorCode.PARAMS_USER_NOTEXISTS); } - UserReadMessageTimeVO userReadMessageTimeVO = new UserReadMessageTimeVO(); // 在循环中创建新对象 - userReadMessageTimeVO.setId(umsTeacher.getUserId()); - userReadMessageTimeVO.setReceiverName(umsTeacher.getName()); - userReadMessageTimeVOS.add(userReadMessageTimeVO); } courseUserInfVO.setUsersInf(userReadMessageTimeVOS); @@ -700,64 +720,94 @@ public class CoursesServiceImpl extends ServiceImpl impl } + + private List queryCourseUserForStudent(Long userId) { - // 查询学生所参与的所有课程 - List studentCoursesList = studentCoursesMapper.selectList( - new LambdaQueryWrapper() - .eq(StudentCourses::getStudent, userId) - .select(StudentCourses::getCourse) + // 1. 获取学生参与的所有课程 + List studentCourses = studentCoursesMapper.selectList( + new LambdaQueryWrapper().eq(StudentCourses::getStudent, userId) + ); + + // 2. 提取所有课程的ID + Set courseIds = studentCourses.stream() + .map(StudentCourses::getCourse) + .collect(Collectors.toSet()); + + // 3. 批量查询所有课程的信息 + List coursesList = coursesMapper.selectBatchIds(courseIds); + + // 4. 获取所有的教师ID + Set teacherIds = coursesList.stream() + .flatMap(course -> Arrays.stream(course.getTeacher().split(","))) + .map(Long::parseLong) + .collect(Collectors.toSet()); + + // 5. 批量查询所有教师的信息 + List teachers = umsTeacherMapper.selectList( + new LambdaQueryWrapper().in(UmsTeacher::getUserId, teacherIds) + ); + + // 6. 将教师信息缓存到Map中,Key为教师ID + Map teacherMap = teachers.stream() + .collect(Collectors.toMap(UmsTeacher::getUserId, Function.identity())); + + // 7. 批量查询所有课程的学生信息 + List allStudentCourses = studentCoursesMapper.selectList( + new LambdaQueryWrapper().in(StudentCourses::getCourse, courseIds) ); + // 8. 提取所有学生的ID + Set allStudentIds = allStudentCourses.stream() + .map(StudentCourses::getStudent) + .collect(Collectors.toSet()); + + // 9. 批量查询所有学生的信息 + List students = umsStudentMapper.selectList( + new LambdaQueryWrapper().in(UmsStudent::getUserId, allStudentIds) + ); + + // 10. 将学生信息缓存到Map中,Key为学生ID + Map studentMap = students.stream() + .collect(Collectors.toMap(UmsStudent::getUserId, Function.identity())); + + // 11. 处理课程信息并构建返回结果 List courseUserInfVOS = new ArrayList<>(); - for (StudentCourses studentCourse : studentCoursesList) { + for (Courses course : coursesList) { CourseUserInfVO courseUserInfVO = new CourseUserInfVO(); + courseUserInfVO.setCourseId(course.getId()); + courseUserInfVO.setCourseName(course.getName()); + List userReadMessageTimeVOS = new ArrayList<>(); - courseUserInfVO.setCourseId(studentCourse.getCourse()); - - // 查询与课程相关的所有学生 - List studentIds = studentCoursesMapper.selectList( - new LambdaQueryWrapper<>(StudentCourses.class) - .eq(StudentCourses::getCourse, studentCourse.getCourse()) - ).stream().map(StudentCourses::getStudent).collect(Collectors.toList()); - - // 为每个学生创建一个新的 UserReadMessageTimeVO 对象 - for (Long studentId : studentIds) { - UmsStudent umsStudent = umsStudentMapper.selectOne( - new LambdaQueryWrapper<>(UmsStudent.class) - .eq(UmsStudent::getUserId, studentId) - .select(UmsStudent::getName) - ); - if (umsStudent == null) { - log.error("用户不存在: {}", studentId); + + // 添加教师信息 + String[] courseTeacherIds = course.getTeacher().split(","); + for (String teacherId : courseTeacherIds) { + UmsTeacher umsTeacher = teacherMap.get(Long.valueOf(teacherId)); + if (umsTeacher != null) { + UserReadMessageTimeVO userReadMessageTimeVO = new UserReadMessageTimeVO(); + userReadMessageTimeVO.setId(umsTeacher.getUserId()); + userReadMessageTimeVO.setReceiverName(umsTeacher.getName()); + userReadMessageTimeVOS.add(userReadMessageTimeVO); + } else { + log.error("教师不存在: {}", teacherId); throw new BusinessException(ErrorCode.PARAMS_USER_NOTEXISTS); } - UserReadMessageTimeVO userReadMessageTimeVO = new UserReadMessageTimeVO(); // 在循环中创建新对象 - userReadMessageTimeVO.setId(studentId); - userReadMessageTimeVO.setReceiverName(umsStudent.getName()); - userReadMessageTimeVOS.add(userReadMessageTimeVO); } - // 查询与课程相关的所有教师 - Courses course = coursesMapper.selectById(studentCourse.getCourse()); - if (course != null) { - String[] teacherUserIds = course.getTeacher().split(","); - for (String teacherId : teacherUserIds) { - UmsTeacher umsTeacher = umsTeacherMapper.selectOne( - new LambdaQueryWrapper() - .eq(UmsTeacher::getUserId, teacherId) - ); - if (umsTeacher == null) { - log.error("教师不存在: {}", teacherId); + // 添加学生信息 + for (StudentCourses sc : allStudentCourses) { + if (sc.getCourse().equals(course.getId())) { + UmsStudent student = studentMap.get(sc.getStudent()); // 类型转换 + if (student != null) { + UserReadMessageTimeVO userReadMessageTimeVO = new UserReadMessageTimeVO(); + userReadMessageTimeVO.setId(student.getUserId()); + userReadMessageTimeVO.setReceiverName(student.getName()); + userReadMessageTimeVOS.add(userReadMessageTimeVO); + } else { + log.error("学生不存在: {}", sc.getStudent()); throw new BusinessException(ErrorCode.PARAMS_USER_NOTEXISTS); } - UserReadMessageTimeVO userReadMessageTimeVO = new UserReadMessageTimeVO(); // 在循环中创建新对象 - userReadMessageTimeVO.setId(umsTeacher.getUserId()); - userReadMessageTimeVO.setReceiverName(umsTeacher.getName()); - userReadMessageTimeVOS.add(userReadMessageTimeVO); } - } else { - log.error("课程不存在: {}", studentCourse.getCourse()); - throw new BusinessException(ErrorCode.PARAMS_COURSE_NOTEXISTS); } courseUserInfVO.setUsersInf(userReadMessageTimeVOS); @@ -766,6 +816,8 @@ public class CoursesServiceImpl extends ServiceImpl impl return courseUserInfVOS; } + + } diff --git a/src/main/java/com/teaching/backend/service/impl/message/UserInboxServiceImpl.java b/src/main/java/com/teaching/backend/service/impl/message/UserInboxServiceImpl.java index 3dd07ca..654eb61 100644 --- a/src/main/java/com/teaching/backend/service/impl/message/UserInboxServiceImpl.java +++ b/src/main/java/com/teaching/backend/service/impl/message/UserInboxServiceImpl.java @@ -56,7 +56,6 @@ public class UserInboxServiceImpl extends ServiceImpl queryReceiveMessages(MessagesQuery messagesQuery) { // 先按用户的id找到其的消息列表 默认看未删除的,(是否读 作为筛选条件后传进去) diff --git a/src/main/java/com/teaching/backend/utils/Chapter/SheetHandler.java b/src/main/java/com/teaching/backend/utils/Chapter/SheetHandler.java index d791fa6..9b1e47a 100644 --- a/src/main/java/com/teaching/backend/utils/Chapter/SheetHandler.java +++ b/src/main/java/com/teaching/backend/utils/Chapter/SheetHandler.java @@ -5,15 +5,8 @@ import com.teaching.backend.exception.BusinessException; import com.teaching.backend.mapper.chapter.TemporaryChapterMapper; import com.teaching.backend.model.dto.chapter.ChapterExcelDTO; import com.teaching.backend.service.chapter.IChapterService; - -import jdk.nashorn.internal.ir.IfNode; -import org.apache.poi.ss.util.CellRangeAddress; -import org.apache.poi.ss.util.CellReference; import org.apache.poi.xssf.eventusermodel.XSSFSheetXMLHandler; - import org.apache.poi.xssf.usermodel.XSSFComment; - -import org.apache.poi.xssf.usermodel.XSSFSheet; import org.springframework.transaction.annotation.Transactional; import java.util.*;