TeacherClassRelationServiceImpl.java 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. package com.schoolinout.system.service.impl;
  2. import com.schoolinout.common.constant.DictConstants;
  3. import com.schoolinout.common.exception.ServiceException;
  4. import com.schoolinout.common.utils.DateUtils;
  5. import com.schoolinout.system.domain.Clazz;
  6. import com.schoolinout.system.domain.Teacher;
  7. import com.schoolinout.system.domain.TeacherClassRelation;
  8. import com.schoolinout.system.domain.dto.AddTeacherClassRelationDto;
  9. import com.schoolinout.system.domain.dto.BindClassTeacherMain;
  10. import com.schoolinout.system.domain.dto.RelationListDto;
  11. import com.schoolinout.system.domain.vo.TeacherClassInfoVo;
  12. import com.schoolinout.system.mapper.ClazzMapper;
  13. import com.schoolinout.system.mapper.TeacherClassRelationMapper;
  14. import com.schoolinout.system.mapper.TeacherMapper;
  15. import com.schoolinout.system.service.ITeacherClassRelationService;
  16. import org.springframework.beans.factory.annotation.Autowired;
  17. import org.springframework.stereotype.Service;
  18. import org.springframework.transaction.annotation.Transactional;
  19. import java.util.List;
  20. import java.util.Set;
  21. import java.util.stream.Collectors;
  22. /**
  23. * 老师-班级关系Service业务层处理
  24. *
  25. * @author sakura
  26. * @date 2024-01-04
  27. */
  28. @Service
  29. public class TeacherClassRelationServiceImpl implements ITeacherClassRelationService {
  30. @Autowired
  31. private TeacherClassRelationMapper teacherClassRelationMapper;
  32. @Autowired
  33. private TeacherMapper teacherMapper;
  34. @Autowired
  35. private ClazzMapper clazzMapper;
  36. /**
  37. * 查询老师-班级关系
  38. *
  39. * @param id 老师-班级关系主键
  40. * @return 老师-班级关系
  41. */
  42. @Override
  43. public TeacherClassRelation selectTeacherClassRelationById(Long id) {
  44. return teacherClassRelationMapper.selectTeacherClassRelationById(id);
  45. }
  46. /**
  47. * 查询老师-班级关系列表
  48. *
  49. * @param teacherClassRelation 老师-班级关系
  50. * @return 老师-班级关系
  51. */
  52. @Override
  53. public List<TeacherClassRelation> selectTeacherClassRelationList(TeacherClassRelation teacherClassRelation) {
  54. return teacherClassRelationMapper.selectTeacherClassRelationList(teacherClassRelation);
  55. }
  56. /**
  57. * 新增老师-班级关系
  58. *
  59. * @param teacherClassRelation 老师-班级关系
  60. * @return 结果
  61. */
  62. @Override
  63. public int insertTeacherClassRelation(TeacherClassRelation teacherClassRelation) {
  64. teacherClassRelation.setCreateTime(DateUtils.getNowDate());
  65. return teacherClassRelationMapper.insertTeacherClassRelation(teacherClassRelation);
  66. }
  67. /**
  68. * 修改老师-班级关系
  69. *
  70. * @param teacherClassRelation 老师-班级关系
  71. * @return 结果
  72. */
  73. @Override
  74. public int updateTeacherClassRelation(TeacherClassRelation teacherClassRelation) {
  75. teacherClassRelation.setUpdateTime(DateUtils.getNowDate());
  76. return teacherClassRelationMapper.updateTeacherClassRelation(teacherClassRelation);
  77. }
  78. /**
  79. * 批量删除老师-班级关系
  80. *
  81. * @param ids 需要删除的老师-班级关系主键
  82. * @return 结果
  83. */
  84. @Override
  85. public int deleteTeacherClassRelationByIds(Long[] ids) {
  86. return teacherClassRelationMapper.deleteTeacherClassRelationByIds(ids);
  87. }
  88. /**
  89. * 删除老师-班级关系信息
  90. *
  91. * @param id 老师-班级关系主键
  92. * @return 结果
  93. */
  94. @Override
  95. public int deleteTeacherClassRelationById(Long id) {
  96. return teacherClassRelationMapper.deleteTeacherClassRelationById(id);
  97. }
  98. @Override
  99. @Transactional(rollbackFor = {RuntimeException.class, ServiceException.class})
  100. public int bindTeacherClass(AddTeacherClassRelationDto form) {
  101. // 先查询原班级关系数据
  102. TeacherClassRelation queryRelation = new TeacherClassRelation();
  103. // 先查询当前教师包含的所有的关系
  104. queryRelation.setTeacherId(form.getTeacherId());
  105. queryRelation.setSchoolId(form.getSchoolId());
  106. List<TeacherClassRelation> existingRelations = teacherClassRelationMapper.selectTeacherClassRelationList(queryRelation);
  107. // 将现有关系映射为班级ID集合
  108. Set<Long> existingClassIds = existingRelations.stream()
  109. .map(TeacherClassRelation::getClassId)
  110. .collect(Collectors.toSet());
  111. List<Long> newClassIds = form.getClassId();
  112. if (newClassIds == null || newClassIds.isEmpty()) {
  113. teacherClassRelationMapper.deleteAllRelationsForClass(form.getSchoolId(), null, form.getTeacherId());
  114. } else if (existingClassIds == null || existingClassIds.isEmpty()) {
  115. teacherClassRelationMapper.insertRelationBatchForClassId(form.getSchoolId(), form.getTeacherId(), newClassIds);
  116. } else {
  117. // 计算要删除的id
  118. List<Long> classIdsToRemove = existingClassIds.stream()
  119. .filter(item -> !newClassIds.contains(item))
  120. .collect(Collectors.toList());
  121. // 计算要新增的id
  122. boolean classIdsToAdd = newClassIds.removeAll(classIdsToRemove);
  123. // 执行批量删除
  124. if (!classIdsToRemove.isEmpty()) {
  125. teacherClassRelationMapper.deleteRelationBatchForClassId(form.getSchoolId(), form.getTeacherId(), classIdsToRemove);
  126. }
  127. // 执行批量插入
  128. if (classIdsToAdd) {
  129. teacherClassRelationMapper.insertRelationBatchForClassId(form.getSchoolId(), form.getTeacherId(), newClassIds);
  130. }
  131. }
  132. return 1;
  133. }
  134. @Override
  135. public List<TeacherClassInfoVo> queryTeacherBindClassList(RelationListDto form) {
  136. return teacherClassRelationMapper.selectTeacherClass(form.getSchoolId(), form.getTeacherId(), form.getClassId());
  137. }
  138. @Override
  139. public String bindClassTeacherMain(BindClassTeacherMain form) {
  140. // step1:检测该学校下面是否存在对应的班级和教师
  141. Clazz clazz = clazzMapper.selectClazzByIdAndSchoolId(form.getClassId(), form.getSchoolId());
  142. if (clazz == null) {
  143. throw new ServiceException("当前学校不存在该班级");
  144. }
  145. // step2:判断是否是要绑定
  146. String teacherMain = form.getTeacherMain();
  147. String ans = "";
  148. if (DictConstants.SYS_DICT_YES.equals(teacherMain)) {
  149. if (form.getTeacherId() == null) {
  150. throw new ServiceException("教师不能为空");
  151. }
  152. Teacher teacher = teacherMapper.selectTeacherByIdAndSchoolId(form.getTeacherId(), form.getSchoolId());
  153. if (teacher == null) {
  154. throw new ServiceException("当前学校不存在该教师");
  155. }
  156. // step3:校验当前要绑定的教师是否已经绑定了其他班级的班主任
  157. TeacherClassRelation teacherMainRelation = teacherClassRelationMapper.selectTeacherMain(form.getSchoolId(), form.getTeacherId(), null);
  158. if (teacherMainRelation != null) {
  159. throw new ServiceException("当前教师已经绑定有其他班的班主任,无法再次绑定");
  160. }
  161. // step3:解绑和更新绑定的操作
  162. // 解绑
  163. teacherClassRelationMapper.updateTeacherMainBindRelation(form.getSchoolId(), form.getClassId(), null, form.getTeacherMain(), DictConstants.SYS_DICT_NO);
  164. // 更新绑定
  165. teacherClassRelationMapper.updateTeacherMainBindRelation(form.getSchoolId(), form.getClassId(), form.getTeacherId(), null, DictConstants.SYS_DICT_YES);
  166. ans = "绑定成功!";
  167. } else if (DictConstants.SYS_DICT_NO.equals(teacherMain)) { // step3:解绑操作
  168. // 解绑
  169. teacherClassRelationMapper.updateTeacherMainBindRelation(form.getSchoolId(), form.getClassId(), null, DictConstants.SYS_DICT_YES, DictConstants.SYS_DICT_NO);
  170. ans = "解绑成功";
  171. }
  172. return ans;
  173. }
  174. @Override
  175. public List<Long> listTeacherBindClass(Long teacherId) {
  176. return teacherClassRelationMapper.selectTeacherBindClass(teacherId);
  177. }
  178. }