DzTeacherController.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  1. package com.ruoyi.web.controller.dz;
  2. import java.util.Arrays;
  3. import java.util.List;
  4. import java.util.Map;
  5. import java.util.Set;
  6. import java.util.stream.Collectors;
  7. import javax.servlet.http.HttpServletResponse;
  8. import com.ruoyi.common.core.domain.entity.SysUser;
  9. import com.ruoyi.common.utils.SecurityUtils;
  10. import com.ruoyi.dz.domain.DzClasses;
  11. import com.ruoyi.dz.domain.DzTeacher;
  12. import com.ruoyi.dz.domain.DzTeacherClass;
  13. import com.ruoyi.dz.service.IDzClassesService;
  14. import com.ruoyi.dz.service.IDzTeacherClassService;
  15. import com.ruoyi.enums.UserTypeEnum;
  16. import com.ruoyi.system.service.ISysUserService;
  17. import org.apache.commons.collections.CollectionUtils;
  18. import org.springframework.security.access.prepost.PreAuthorize;
  19. import org.springframework.beans.factory.annotation.Autowired;
  20. import org.springframework.web.bind.annotation.GetMapping;
  21. import org.springframework.web.bind.annotation.PostMapping;
  22. import org.springframework.web.bind.annotation.PutMapping;
  23. import org.springframework.web.bind.annotation.DeleteMapping;
  24. import org.springframework.web.bind.annotation.PathVariable;
  25. import org.springframework.web.bind.annotation.RequestBody;
  26. import org.springframework.web.bind.annotation.RequestMapping;
  27. import org.springframework.web.bind.annotation.RestController;
  28. import com.ruoyi.common.annotation.Log;
  29. import com.ruoyi.common.core.controller.BaseController;
  30. import com.ruoyi.common.core.domain.AjaxResult;
  31. import com.ruoyi.common.enums.BusinessType;
  32. import com.ruoyi.dz.service.IDzTeacherService;
  33. import com.ruoyi.common.utils.poi.ExcelUtil;
  34. import com.ruoyi.common.core.page.TableDataInfo;
  35. /**
  36. * 老师Controller
  37. *
  38. * @author ruoyi
  39. * @date 2025-09-12
  40. */
  41. @RestController
  42. @RequestMapping("/dz/teacher")
  43. public class DzTeacherController extends BaseController
  44. {
  45. @Autowired
  46. private IDzTeacherService dzTeacherService;
  47. @Autowired
  48. private ISysUserService userService;
  49. @Autowired
  50. private IDzClassesService dzClassesService;
  51. @Autowired
  52. private IDzTeacherClassService dzTeacherClassService;
  53. /**
  54. * 查询老师列表
  55. */
  56. @PreAuthorize("@ss.hasPermi('dz:teacher:list')")
  57. @GetMapping("/list")
  58. public TableDataInfo list(DzTeacher dzTeacher)
  59. {
  60. SysUser sysUser = SecurityUtils.getLoginUser().getUser();
  61. if(!UserTypeEnum.isSys(sysUser.getUserType())){
  62. dzTeacher.setDeptId(SecurityUtils.getLoginUser().getUser().getDeptId());
  63. if (UserTypeEnum.isSchool(sysUser.getUserType())) {
  64. if(null == sysUser.getDeptId() || sysUser.getDeptId().equals(100L)) {
  65. dzTeacher.setSchoolId(sysUser.getUserTypeId());
  66. } else {
  67. dzTeacher.setCampusId(sysUser.getUserTypeId());
  68. }
  69. }
  70. }
  71. startPage();
  72. List<DzTeacher> list = dzTeacherService.selectDzTeacherList(dzTeacher);
  73. list = processTeacherList(list);
  74. return getDataTable(list);
  75. }
  76. /**
  77. * 导出老师列表
  78. */
  79. @PreAuthorize("@ss.hasPermi('dz:teacher:export')")
  80. @Log(title = "老师", businessType = BusinessType.EXPORT)
  81. @PostMapping("/export")
  82. public void export(HttpServletResponse response, DzTeacher dzTeacher)
  83. {
  84. List<DzTeacher> list = dzTeacherService.selectDzTeacherList(dzTeacher);
  85. list = processTeacherList(list);
  86. ExcelUtil<DzTeacher> util = new ExcelUtil<DzTeacher>(DzTeacher.class);
  87. util.exportExcel(response, list, "老师数据");
  88. }
  89. /**
  90. * 获取老师详细信息
  91. */
  92. @PreAuthorize("@ss.hasPermi('dz:teacher:query')")
  93. @GetMapping(value = "/{teacherId}")
  94. public AjaxResult getInfo(@PathVariable("teacherId") Long teacherId)
  95. {
  96. return success(dzTeacherService.selectDzTeacherByTeacherId(teacherId));
  97. }
  98. /**
  99. * 新增老师
  100. */
  101. @PreAuthorize("@ss.hasPermi('dz:teacher:add')")
  102. @Log(title = "老师", businessType = BusinessType.INSERT)
  103. @PostMapping
  104. public AjaxResult add(@RequestBody DzTeacher dzTeacher)
  105. {
  106. Long teacherId = dzTeacherService.insertDzTeacher(dzTeacher);
  107. processTeacherClass(dzTeacher);
  108. return AjaxResult.success(teacherId);
  109. }
  110. private void processTeacherClass(DzTeacher dzTeacher) {
  111. Long teacherId = dzTeacher.getTeacherId();
  112. if (teacherId != null) {
  113. // 合并学校班级和校区班级ID
  114. List<Long> schoolClassIds = Arrays.asList(dzTeacher.getSchoolClassIds());
  115. List<Long> campusClassIds = Arrays.asList(dzTeacher.getCampusClassIds());
  116. // 如果有学校班级ID,则关联班级
  117. if (!schoolClassIds.isEmpty()) {
  118. processTeacherClass(teacherId, dzTeacher.getSchoolId(), schoolClassIds);
  119. }
  120. // 如果有校区班级ID,则关联班级
  121. if (!campusClassIds.isEmpty()) {
  122. processTeacherClass(teacherId, dzTeacher.getSchoolId(), campusClassIds);
  123. }
  124. }
  125. }
  126. private void processTeacherClass(Long teacherId,Long schoolId, List<Long> schoolClassIds) {
  127. if (teacherId != null) {
  128. // 如果有学校班级ID,则关联班级
  129. if (!schoolClassIds.isEmpty()) {
  130. DzTeacherClass dzTeacherClass = new DzTeacherClass();
  131. dzTeacherClass.setTeacherId(teacherId);
  132. dzTeacherClass.setClassIds(schoolClassIds.toArray(new Long[0]));
  133. dzTeacherClass.setSchoolId(schoolId);
  134. dzTeacherClassService.batchBindTeacherClass(dzTeacherClass);
  135. }
  136. }
  137. }
  138. /**
  139. * 修改老师
  140. */
  141. @PreAuthorize("@ss.hasPermi('dz:teacher:edit')")
  142. @Log(title = "老师", businessType = BusinessType.UPDATE)
  143. @PutMapping
  144. public AjaxResult edit(@RequestBody DzTeacher dzTeacher)
  145. {
  146. if (UserTypeEnum.isSys(SecurityUtils.getLoginUser().getUser().getUserType())) {
  147. dzTeacher.setCampusId(null);
  148. } else {
  149. dzTeacher.setSchoolId(null);
  150. }
  151. dzTeacherService.updateDzTeacher(dzTeacher);
  152. //处理班级关联
  153. processTeacherClass(dzTeacher);
  154. //同时修改sys_user表的nickName
  155. SysUser user = userService.selectUserByUserName(String.valueOf(dzTeacher.getTeacherId()));
  156. if (null != user) {
  157. if (null == user.getNickName() || !user.getNickName().equalsIgnoreCase(dzTeacher.getName())) {
  158. user.setNickName(dzTeacher.getName());
  159. userService.updateUserInfo(user);
  160. }
  161. }
  162. return AjaxResult.success();
  163. }
  164. /**
  165. * 删除老师
  166. */
  167. @PreAuthorize("@ss.hasPermi('dz:teacher:remove')")
  168. @Log(title = "老师", businessType = BusinessType.DELETE)
  169. @DeleteMapping("/{teacherIds}")
  170. public AjaxResult remove(@PathVariable Long[] teacherIds)
  171. {
  172. return toAjax(dzTeacherService.deleteDzTeacherByTeacherIds(teacherIds));
  173. }
  174. private List<DzTeacher> processTeacherList(List<DzTeacher> list) {
  175. // 批量查询用户信息,获取password2字段
  176. if (CollectionUtils.isNotEmpty(list)) {
  177. List<Long> userIds = list.stream()
  178. .map(DzTeacher::getUserId).filter(userId -> userId != null)
  179. .distinct().collect(Collectors.toList());
  180. if (!userIds.isEmpty()) {
  181. List<SysUser> users = userService.selectUserByUserIds(userIds);
  182. // 创建userId到SysUser的映射
  183. Map<Long, SysUser> userMap = users.stream()
  184. .filter(user -> user.getUserId() != null)
  185. .collect(Collectors.toMap(
  186. SysUser::getUserId,
  187. user -> user,
  188. (existing, replacement) -> existing
  189. ));
  190. // 设置每个teacher的password2
  191. list.forEach(teacher -> {
  192. if (teacher.getUserId() != null && userMap.containsKey(teacher.getUserId())) {
  193. teacher.setPassword2(userMap.get(teacher.getUserId()).getPassword2());
  194. //设置状态
  195. teacher.setStatus(userMap.get(teacher.getUserId()).getStatus());
  196. }
  197. });
  198. }
  199. // 批量查询班级信息,获取schoolClass和campusClass字段
  200. Set<Long> schoolIds = list.stream()
  201. .flatMap(teacher -> java.util.stream.Stream.of(teacher.getSchoolId(),teacher.getCampusId()).filter(id -> id != null))
  202. .collect(Collectors.toSet());
  203. Set<Long> teacherIds = list.stream().map(DzTeacher::getTeacherId).filter(id -> id != null).collect(Collectors.toSet());
  204. // 按teacherId分组,得到Map<Long, List<Long>>,key为teacherId,value为该教师关联的classId列表
  205. Map<Long, List<Long>> teacherClassMap = dzTeacherClassService.selectDzTeacherClassByTeacherIds(teacherIds).stream()
  206. .filter(tc -> tc.getTeacherId() != null && tc.getClassId() != null)
  207. .collect(Collectors.groupingBy(com.ruoyi.dz.domain.DzTeacherClass::getTeacherId,
  208. Collectors.mapping(com.ruoyi.dz.domain.DzTeacherClass::getClassId,Collectors.toList())
  209. ));
  210. if (!schoolIds.isEmpty()) {
  211. List<DzClasses> classesList = dzClassesService.selectDzClassesBySchoolIds(schoolIds);
  212. // 构建classId到DzClasses的映射
  213. Map<Long, DzClasses> classIdMap = classesList.stream()
  214. .filter(clazz -> clazz.getClassId() != null)
  215. .collect(Collectors.toMap(
  216. DzClasses::getClassId,
  217. clazz -> clazz,
  218. (existing, replacement) -> existing
  219. ));
  220. // 设置每个teacher的schoolClass和campusClass
  221. list.forEach(teacher -> {
  222. if (teacherClassMap.containsKey(teacher.getTeacherId())) {
  223. List<Long> classIds = teacherClassMap.get(teacher.getTeacherId());
  224. // 根据schoolId分组,分别处理schoolClass和campusClass
  225. List<String> schoolClassNames = new java.util.ArrayList<>();
  226. List<String> campusClassNames = new java.util.ArrayList<>();
  227. for (Long classId : classIds) {
  228. DzClasses clazz = classIdMap.get(classId);
  229. if (clazz != null && clazz.getName() != null) {
  230. if (teacher.getSchoolId() != null && clazz.getSchoolId() != null
  231. && clazz.getSchoolId().equals(teacher.getSchoolId())) {
  232. schoolClassNames.add(clazz.getName());
  233. }
  234. if (teacher.getCampusId() != null && clazz.getSchoolId() != null
  235. && clazz.getSchoolId().equals(teacher.getCampusId())) {
  236. campusClassNames.add(clazz.getName());
  237. }
  238. }
  239. }
  240. // 用英文逗号连接并设置
  241. if (!schoolClassNames.isEmpty()) {
  242. teacher.setSchoolClass(String.join(",", schoolClassNames));
  243. }
  244. if (!campusClassNames.isEmpty()) {
  245. teacher.setCampusClass(String.join(",", campusClassNames));
  246. }
  247. }
  248. });
  249. }
  250. }
  251. return list;
  252. }
  253. }