CourseServiceImpl.java 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. package nju.seec.helper.service.impl;
  2. import nju.seec.helper.dao.ChooseDAO;
  3. import nju.seec.helper.dao.CourseDAO;
  4. import nju.seec.helper.dto.ChooseDTO;
  5. import nju.seec.helper.dto.CourseDTO;
  6. import nju.seec.helper.dto.LoginUser;
  7. import nju.seec.helper.dto.modify.ModifyCourseDTO;
  8. import nju.seec.helper.entity.Choose;
  9. import nju.seec.helper.entity.Course;
  10. import nju.seec.helper.service.AuthUtil;
  11. import nju.seec.helper.service.CourseService;
  12. import nju.seec.helper.util.EncryptUtils;
  13. import nju.seec.helper.util.enums.ExceptionType;
  14. import nju.seec.helper.util.exception.HelperException;
  15. import nju.seec.helper.vo.CourseVO;
  16. import org.springframework.data.domain.Page;
  17. import org.springframework.data.domain.Pageable;
  18. import org.springframework.stereotype.Service;
  19. import org.springframework.transaction.annotation.Transactional;
  20. /**
  21. * @author cst
  22. */
  23. @Service
  24. public class CourseServiceImpl implements CourseService {
  25. private final CourseDAO courseDAO;
  26. private final ChooseDAO chooseDAO;
  27. public CourseServiceImpl(CourseDAO courseDAO, ChooseDAO chooseDAO) {
  28. this.courseDAO = courseDAO;
  29. this.chooseDAO = chooseDAO;
  30. }
  31. @Transactional(rollbackFor = Exception.class)
  32. @Override
  33. public CourseVO createCourse(LoginUser teacher, CourseDTO courseDTO) {
  34. // 检查
  35. checkSameCourseName(teacher.getId(), courseDTO.getName());
  36. Course course = new Course()
  37. .setTeacherId(teacher.getId())
  38. .setTeacherName(teacher.getName())
  39. .setName(courseDTO.getName())
  40. .setBio(courseDTO.getBio())
  41. .setCode(EncryptUtils.encode(courseDTO.getCode()));
  42. course = courseDAO.save(course);
  43. return new CourseVO(course);
  44. }
  45. @Override
  46. public CourseVO modifyCourse(LoginUser user, ModifyCourseDTO modifyCourseDTO) {
  47. Course course = courseDAO.findCourseById(modifyCourseDTO.getId());
  48. // 检查
  49. AuthUtil.checkDataAuth(user.getId(), course.getTeacherId(), "您无权修改该课程");
  50. checkSameCourseName(user.getId(), modifyCourseDTO.getName());
  51. course.setName(modifyCourseDTO.getName())
  52. .setBio(modifyCourseDTO.getBio())
  53. .setCode(EncryptUtils.encode(modifyCourseDTO.getCode()));
  54. course = courseDAO.save(course);
  55. return new CourseVO(course);
  56. }
  57. @Override
  58. public void removeCourse(LoginUser user, Integer courseId) {
  59. Course course = courseDAO.findCourseById(courseId);
  60. AuthUtil.checkDataAuth(user.getId(), course.getTeacherId(), "您无权删除该课程");
  61. course.setDeleteAt(System.currentTimeMillis());
  62. courseDAO.save(course);
  63. }
  64. @Transactional(rollbackFor = Exception.class)
  65. @Override
  66. public void chooseCourse(LoginUser student, ChooseDTO chooseDTO) {
  67. Integer studentId = student.getId();
  68. if (chooseDAO.existsByStudentIdAndCourseId(studentId, chooseDTO.getCourseId())) {
  69. throw HelperException.of(ExceptionType.FORBIDDEN, "您已选课");
  70. }
  71. Course course = courseDAO.findCourseById(chooseDTO.getCourseId());
  72. if (!course.getCode().equals(EncryptUtils.encode(chooseDTO.getCode()))) {
  73. throw HelperException.of(ExceptionType.FORBIDDEN, "选课码错误");
  74. }
  75. Choose choose = new Choose()
  76. .setCourseId(chooseDTO.getCourseId())
  77. .setStudentId(studentId);
  78. chooseDAO.save(choose);
  79. }
  80. @Transactional(readOnly = true)
  81. @Override
  82. public Page<CourseVO> getCourses(String key, Pageable pageable) {
  83. return courseDAO.findByKey(key, pageable).map(CourseVO::new);
  84. }
  85. @Transactional(readOnly = true)
  86. @Override
  87. public Page<CourseVO> teacherGetCourses(LoginUser teacher, String key, Pageable pageable) {
  88. return courseDAO.findByTeacherIdAndKey(teacher.getId(), key, pageable).map(CourseVO::new);
  89. }
  90. @Transactional(readOnly = true)
  91. @Override
  92. public Page<CourseVO> studentGetCourses(LoginUser student, String key, Pageable pageable) {
  93. return courseDAO
  94. .findByIdsAndKey(
  95. chooseDAO.findCourseIdsByStudentId(student.getId()),
  96. key,
  97. pageable)
  98. .map(CourseVO::new);
  99. }
  100. /**
  101. * 检查同名课程
  102. */
  103. private void checkSameCourseName(Integer teacherId, String name) {
  104. if (courseDAO.existsByTeacherIdAndName(teacherId, name)) {
  105. throw HelperException.of(ExceptionType.CONFLICT, "该课程名已使用");
  106. }
  107. }
  108. }