DzTeacherController.java 14 KB

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