package com.ruoyi.web.controller.dz; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; import javax.servlet.http.HttpServletResponse; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.dz.domain.DzClasses; import com.ruoyi.dz.domain.DzTeacher; import com.ruoyi.dz.domain.DzTeacherClass; import com.ruoyi.dz.service.IDzClassesService; import com.ruoyi.dz.service.IDzTeacherClassService; import com.ruoyi.dz.service.IDzAgentService; import com.ruoyi.dz.domain.DzAgent; import com.ruoyi.enums.UserTypeEnum; import com.ruoyi.system.service.ISysUserService; import org.apache.commons.collections.CollectionUtils; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.dz.service.IDzTeacherService; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.common.core.page.TableDataInfo; /** * 老师Controller * * @author ruoyi * @date 2025-09-12 */ @RestController @RequestMapping("/dz/teacher") public class DzTeacherController extends BaseController { @Autowired private IDzTeacherService dzTeacherService; @Autowired private ISysUserService userService; @Autowired private IDzClassesService dzClassesService; @Autowired private IDzTeacherClassService dzTeacherClassService; @Autowired private IDzAgentService agentService; /** * 查询老师列表 */ @PreAuthorize("@ss.hasPermi('dz:teacher:list')") @GetMapping("/list") public TableDataInfo list(DzTeacher dzTeacher) { SysUser sysUser = SecurityUtils.getLoginUser().getUser(); if (UserTypeEnum.isAgent(sysUser.getUserType())) { dzTeacher.setAgentId(sysUser.getUserTypeId()); } else if(!UserTypeEnum.isSys(sysUser.getUserType())){ dzTeacher.setDeptId(SecurityUtils.getLoginUser().getUser().getDeptId()); if (UserTypeEnum.isSchool(sysUser.getUserType())) { if(null == sysUser.getDeptId() || sysUser.getDeptId().equals(100L)) { dzTeacher.setSchoolId(sysUser.getUserTypeId()); } else { dzTeacher.setCampusId(sysUser.getUserTypeId()); } } } startPage(); List list = dzTeacherService.selectDzTeacherList(dzTeacher); list = processTeacherList(list); return getDataTable(list); } /** * 导出老师列表 */ @PreAuthorize("@ss.hasPermi('dz:teacher:export')") @Log(title = "老师", businessType = BusinessType.EXPORT) @PostMapping("/export") public void export(HttpServletResponse response, DzTeacher dzTeacher) { SysUser sysUser = SecurityUtils.getLoginUser().getUser(); if (UserTypeEnum.isAgent(sysUser.getUserType())) { dzTeacher.setAgentId(sysUser.getUserTypeId()); } else if(!UserTypeEnum.isSys(sysUser.getUserType())){ dzTeacher.setDeptId(SecurityUtils.getLoginUser().getUser().getDeptId()); if (UserTypeEnum.isSchool(sysUser.getUserType())) { if(null == sysUser.getDeptId() || sysUser.getDeptId().equals(100L)) { dzTeacher.setSchoolId(sysUser.getUserTypeId()); } else { dzTeacher.setCampusId(sysUser.getUserTypeId()); } } } List list = dzTeacherService.selectDzTeacherList(dzTeacher); list = processTeacherList(list); ExcelUtil util = new ExcelUtil(DzTeacher.class); util.exportExcel(response, list, "老师数据"); } /** * 获取老师详细信息 */ @PreAuthorize("@ss.hasPermi('dz:teacher:query')") @GetMapping(value = "/{teacherId}") public AjaxResult getInfo(@PathVariable("teacherId") Long teacherId) { return success(dzTeacherService.selectDzTeacherByTeacherId(teacherId)); } /** * 新增老师 */ @PreAuthorize("@ss.hasPermi('dz:teacher:add')") @Log(title = "老师", businessType = BusinessType.INSERT) @PostMapping public AjaxResult add(@RequestBody DzTeacher dzTeacher) { Long teacherId = dzTeacherService.insertDzTeacher(dzTeacher); processTeacherClass(dzTeacher); return AjaxResult.success(teacherId); } private void processTeacherClass(DzTeacher dzTeacher) { Long teacherId = dzTeacher.getTeacherId(); if (teacherId != null) { // 合并学校班级和校区班级ID List schoolClassIds = Arrays.asList(dzTeacher.getSchoolClassIds()); List campusClassIds = Arrays.asList(dzTeacher.getCampusClassIds()); // 如果有学校班级ID,则关联班级 if (!schoolClassIds.isEmpty()) { processTeacherClass(teacherId, dzTeacher.getSchoolId(), schoolClassIds); } // 如果有校区班级ID,则关联班级 if (!campusClassIds.isEmpty()) { processTeacherClass(teacherId, dzTeacher.getSchoolId(), campusClassIds); } } } private void processTeacherClass(Long teacherId,Long schoolId, List schoolClassIds) { if (teacherId != null) { // 如果有学校班级ID,则关联班级 if (!schoolClassIds.isEmpty()) { DzTeacherClass dzTeacherClass = new DzTeacherClass(); dzTeacherClass.setTeacherId(teacherId); dzTeacherClass.setClassIds(schoolClassIds.toArray(new Long[0])); dzTeacherClass.setSchoolId(schoolId); dzTeacherClassService.batchBindTeacherClass(dzTeacherClass); } } } /** * 修改老师 */ @PreAuthorize("@ss.hasPermi('dz:teacher:edit')") @Log(title = "老师", businessType = BusinessType.UPDATE) @PutMapping public AjaxResult edit(@RequestBody DzTeacher dzTeacher) { if (UserTypeEnum.isSys(SecurityUtils.getLoginUser().getUser().getUserType())) { dzTeacher.setCampusId(null); } else { dzTeacher.setSchoolId(null); } dzTeacherService.updateDzTeacher(dzTeacher); //处理班级关联 processTeacherClass(dzTeacher); //同时修改sys_user表的nickName SysUser user = userService.selectUserByUserName(String.valueOf(dzTeacher.getTeacherId())); if (null != user) { if (null == user.getNickName() || !user.getNickName().equalsIgnoreCase(dzTeacher.getName())) { user.setNickName(dzTeacher.getName()); userService.updateUserInfo(user); } } return AjaxResult.success(); } /** * 删除老师 */ @PreAuthorize("@ss.hasPermi('dz:teacher:remove')") @Log(title = "老师", businessType = BusinessType.DELETE) @DeleteMapping("/{teacherIds}") public AjaxResult remove(@PathVariable Long[] teacherIds) { return toAjax(dzTeacherService.deleteDzTeacherByTeacherIds(teacherIds)); } private List processTeacherList(List list) { // 批量查询用户信息,获取password2字段 if (CollectionUtils.isNotEmpty(list)) { List userIds = list.stream() .map(DzTeacher::getUserId).filter(userId -> userId != null) .distinct().collect(Collectors.toList()); if (!userIds.isEmpty()) { List users = userService.selectUserByUserIds(userIds); // 创建userId到SysUser的映射 Map userMap = users.stream() .filter(user -> user.getUserId() != null) .collect(Collectors.toMap( SysUser::getUserId, user -> user, (existing, replacement) -> existing )); // 设置每个teacher的password2 list.forEach(teacher -> { if (teacher.getUserId() != null && userMap.containsKey(teacher.getUserId())) { teacher.setPassword2(userMap.get(teacher.getUserId()).getPassword2()); //设置状态 teacher.setStatus(userMap.get(teacher.getUserId()).getStatus()); } }); } // 批量查询代理商信息,获取agentName字段 List agentIds = list.stream() .map(DzTeacher::getAgentId) .filter(agentId -> agentId != null) .distinct() .collect(Collectors.toList()); if (!agentIds.isEmpty()) { List agentList = agentService.selectDzAgentByAgentIds(agentIds); Map agentMap = agentList.stream() .filter(agent -> agent.getAgentId() != null && agent.getName() != null) .collect(Collectors.toMap( DzAgent::getAgentId, DzAgent::getName, (existing, replacement) -> existing )); list.forEach(teacher -> { if (teacher.getAgentId() != null && agentMap.containsKey(teacher.getAgentId())) { teacher.setAgentName(agentMap.get(teacher.getAgentId())); } }); } // 批量查询班级信息,获取schoolClass和campusClass字段 Set schoolIds = list.stream() .flatMap(teacher -> java.util.stream.Stream.of(teacher.getSchoolId(),teacher.getCampusId()).filter(id -> id != null)) .collect(Collectors.toSet()); Set teacherIds = list.stream().map(DzTeacher::getTeacherId).filter(id -> id != null).collect(Collectors.toSet()); // 按teacherId分组,得到Map>,key为teacherId,value为该教师关联的classId列表 Map> teacherClassMap = dzTeacherClassService.selectDzTeacherClassByTeacherIds(teacherIds).stream() .filter(tc -> tc.getTeacherId() != null && tc.getClassId() != null) .collect(Collectors.groupingBy(com.ruoyi.dz.domain.DzTeacherClass::getTeacherId, Collectors.mapping(com.ruoyi.dz.domain.DzTeacherClass::getClassId,Collectors.toList()) )); if (!schoolIds.isEmpty()) { List classesList = dzClassesService.selectDzClassesBySchoolIds(schoolIds); // 构建classId到DzClasses的映射 Map classIdMap = classesList.stream() .filter(clazz -> clazz.getClassId() != null) .collect(Collectors.toMap( DzClasses::getClassId, clazz -> clazz, (existing, replacement) -> existing )); // 设置每个teacher的schoolClass和campusClass list.forEach(teacher -> { if (teacherClassMap.containsKey(teacher.getTeacherId())) { List classIds = teacherClassMap.get(teacher.getTeacherId()); // 根据schoolId分组,分别处理schoolClass和campusClass List schoolClassNames = new java.util.ArrayList<>(); List campusClassNames = new java.util.ArrayList<>(); for (Long classId : classIds) { DzClasses clazz = classIdMap.get(classId); if (clazz != null && clazz.getName() != null) { if (teacher.getSchoolId() != null && clazz.getSchoolId() != null && clazz.getSchoolId().equals(teacher.getSchoolId())) { schoolClassNames.add(clazz.getName()); } if (teacher.getCampusId() != null && clazz.getSchoolId() != null && clazz.getSchoolId().equals(teacher.getCampusId())) { campusClassNames.add(clazz.getName()); } } } // 用英文逗号连接并设置 if (!schoolClassNames.isEmpty()) { teacher.setSchoolClass(String.join(",", schoolClassNames)); } if (!campusClassNames.isEmpty()) { teacher.setCampusClass(String.join(",", campusClassNames)); } } }); } } return list; } }