package com.ruoyi.web.controller.info; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Set; import java.util.stream.Collectors; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; 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.annotation.RepeatSubmit; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.validate.AddGroup; import com.ruoyi.common.core.validate.EditGroup; import com.ruoyi.common.core.validate.QueryGroup; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.enums.FilePathSplicingType; import com.ruoyi.common.filepathsplicing.FilePathSplicing; import com.ruoyi.common.filepathsplicing.FilePathSplicingUtil; import com.ruoyi.common.utils.BeanCopyUtils; import com.ruoyi.common.utils.CollectionUtils; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.info.hospital.domain.vo.HospitalDepartmentVo; import com.ruoyi.info.hospital.domain.vo.HospitalVo; import com.ruoyi.info.hospital.service.IHospitalDepartmentService; import com.ruoyi.info.hospital.service.IHospitalService; import com.ruoyi.info.management.domain.TeacherDepartmentRel; import com.ruoyi.info.management.domain.bo.ManagementTeacherBo; import com.ruoyi.info.management.domain.bo.ManagementTeacherPageReqBo; import com.ruoyi.info.management.domain.vo.ManagementTeacherVo; import com.ruoyi.info.management.service.IManagementTeacherService; import com.ruoyi.info.management.service.ITeacherDepartmentRelService; import com.ruoyi.info.nursing.domain.bo.EnableStatusBo; import cn.dev33.satoken.annotation.SaCheckPermission; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import static com.ruoyi.common.utils.CollectionUtils.*; /** * 管理老师信息Controller * * @author baifc * @date 2025-09-30 */ @Validated @Api(value = "管理老师信息控制器", tags = {"管理老师信息管理"}) @RequiredArgsConstructor @RestController @RequestMapping("/info/managementTeacher") public class ManagementTeacherController extends BaseController { private final IManagementTeacherService iManagementTeacherService; private final FilePathSplicingUtil filePathSplicingUtil; private final ITeacherDepartmentRelService iTeacherDepartmentRelService; private final IHospitalService iHospitalService; private final IHospitalDepartmentService iHospitalDepartmentService; /** * 分页查询管理老师信息列表 */ @FilePathSplicing(type = FilePathSplicingType.RESPONSE) @ApiOperation("查询管理老师信息列表") @SaCheckPermission("info:managementTeacher:list") @GetMapping("/page") public TableDataInfo page(ManagementTeacherPageReqBo bo, PageQuery pageQuery) { return iManagementTeacherService.queryPageList(bo, pageQuery); } /** * 获取管理老师信息详细信息 */ @FilePathSplicing(type = FilePathSplicingType.RESPONSE) @ApiOperation("获取管理老师信息详细信息") @SaCheckPermission("info:managementTeacher:query") @GetMapping("/info/{id}") public R getInfo(@ApiParam("主键") @NotNull(message = "主键不能为空") @PathVariable("id") Long id) { ManagementTeacherVo managementTeacherVo = iManagementTeacherService.queryById(id); // 获取管理老师关联的医院和科室信息 List teacherDepartmentRelList = iTeacherDepartmentRelService.queryByTeacherId(id); if (CollUtil.isEmpty(teacherDepartmentRelList)) { return R.ok(managementTeacherVo); } // 处理老师关联的医院和科室信息 Set hospitalIds = convertSet(teacherDepartmentRelList, TeacherDepartmentRel::getHospitalId); List hospitalList = iHospitalService.queryListByIds(hospitalIds); List hospitalSimpleInfoList = BeanCopyUtils.copyList(hospitalList, ManagementTeacherVo.HospitalSimpleInfo.class); // 科室信息 for (ManagementTeacherVo.HospitalSimpleInfo hospitalSimpleInfo : hospitalSimpleInfoList) { Set departmentIds = teacherDepartmentRelList.stream() .filter(rel -> rel.getHospitalId().equals(hospitalSimpleInfo.getId())) .map(TeacherDepartmentRel::getDepartmentId) .collect(Collectors.toSet()); // 获取关联部门详情 List departmentSimpleInfoList = BeanCopyUtils.copyList(iHospitalDepartmentService.queryListByIds(departmentIds), ManagementTeacherVo.DepartmentSimpleInfo.class); hospitalSimpleInfo.setDepartmentList(departmentSimpleInfoList); } managementTeacherVo.setHospitalRelList(hospitalSimpleInfoList); return R.ok(managementTeacherVo); } /** * 新增管理老师信息 */ @FilePathSplicing(type = FilePathSplicingType.REQUEST) @ApiOperation("新增管理老师信息") @SaCheckPermission("info:managementTeacher:add") @Log(title = "管理老师信息", businessType = BusinessType.INSERT) @RepeatSubmit() @PostMapping("/add") public R add(@Validated(AddGroup.class) @RequestBody ManagementTeacherBo bo) { return toAjax(iManagementTeacherService.insertByBo(bo) ? 1 : 0); } /** * 修改管理老师信息 */ @FilePathSplicing(type = FilePathSplicingType.REQUEST) @ApiOperation("修改管理老师信息") @SaCheckPermission("info:managementTeacher:edit") @Log(title = "管理老师信息", businessType = BusinessType.UPDATE) @RepeatSubmit() @PostMapping("/edit") public R edit(@Validated(EditGroup.class) @RequestBody ManagementTeacherBo bo) { return toAjax(iManagementTeacherService.updateByBo(bo) ? 1 : 0); } /** * 启用/禁用 管理老师 */ @ApiOperation("启用/禁用 管理老师") @SaCheckPermission("info:managementTeacher:edit") @Log(title = "管理老师信息", businessType = BusinessType.UPDATE) @RepeatSubmit() @PostMapping("/update-status") public R updateStatus(@Validated @RequestBody EnableStatusBo bo) { iManagementTeacherService.updateStatus(bo); return R.ok(); } /** * 删除管理老师信息 */ @ApiOperation("删除管理老师信息") @SaCheckPermission("info:managementTeacher:remove") @Log(title = "管理老师信息", businessType = BusinessType.DELETE) @PostMapping("/del/{ids}") public R remove(@ApiParam("主键串") @NotEmpty(message = "主键不能为空") @PathVariable Long[] ids) { return toAjax(iManagementTeacherService.deleteWithValidByIds(Arrays.asList(ids), true) ? 1 : 0); } /** * 导出管理老师信息列表 */ @ApiOperation("导出管理老师信息列表") @SaCheckPermission("info:managementTeacher:export") @Log(title = "管理老师信息", businessType = BusinessType.EXPORT) @PostMapping("/export") public void export(ManagementTeacherPageReqBo bo, HttpServletResponse response) throws MalformedURLException { List list = iManagementTeacherService.queryList(bo); // 处理图片 for (ManagementTeacherVo managementTeacherVo : list) { String url = managementTeacherVo.getPhotographUrl(); if (StrUtil.isNotEmpty(url) && !url.startsWith("http")) { managementTeacherVo.setPhotograph(new URL(filePathSplicingUtil.getPrefix() + url)); } } ExcelUtil.exportExcel(list, "管理老师信息", ManagementTeacherVo.class, response); } }