提交代码
This commit is contained in:
1 parent
594d0c5df3
commit
f89d747952
13 files changed
+2655
No files matched your search
+87
@@ -0,0 +1,87 @@
|
||||
package org.dromara.xg.controller;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.dromara.common.web.core.BaseController;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.xg.domain.vo.XgDormApplicationVo;
|
||||
import org.dromara.xg.domain.vo.XgHolidayStayVo;
|
||||
import org.dromara.xg.domain.vo.XgStudentLeaveVo;
|
||||
import org.dromara.xg.domain.bo.XgDormApplicationBo;
|
||||
import org.dromara.xg.domain.bo.XgHolidayStayBo;
|
||||
import org.dromara.xg.domain.bo.XgStudentLeaveBo;
|
||||
import org.dromara.xg.service.IXgStudentDynamicsService;
|
||||
|
||||
/**
|
||||
* 学生动向信息管理(宿管员)
|
||||
*
|
||||
* @author zlwu
|
||||
* @date 2025-01-15
|
||||
*/
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/studentDynamics")
|
||||
public class XgStudentDynamicsController extends BaseController {
|
||||
|
||||
private final IXgStudentDynamicsService xgStudentDynamicsService;
|
||||
|
||||
/**
|
||||
* 查询宿管员权限内的学生调宿退宿申请列表
|
||||
*/
|
||||
@SaCheckPermission("studentDynamics:dormApplication:list")
|
||||
@GetMapping("/dormApplicationList")
|
||||
public TableDataInfo<XgDormApplicationVo> getDormApplicationList(XgDormApplicationBo bo, PageQuery pageQuery) {
|
||||
return xgStudentDynamicsService.queryDormApplicationPageList(bo, pageQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询宿管员权限内的学生假期留宿信息列表
|
||||
*/
|
||||
@SaCheckPermission("studentDynamics:holidayStay:list")
|
||||
@GetMapping("/holidayStayList")
|
||||
public TableDataInfo<XgHolidayStayVo> getHolidayStayList(XgHolidayStayBo bo, PageQuery pageQuery) {
|
||||
return xgStudentDynamicsService.queryHolidayStayPageList(bo, pageQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询宿管员权限内的学生请假信息列表
|
||||
*/
|
||||
@SaCheckPermission("studentDynamics:studentLeave:list")
|
||||
@GetMapping("/studentLeaveList")
|
||||
public TableDataInfo<XgStudentLeaveVo> getStudentLeaveList(XgStudentLeaveBo bo, PageQuery pageQuery) {
|
||||
return xgStudentDynamicsService.queryStudentLeavePageList(bo, pageQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取调宿退宿申请详细信息
|
||||
*/
|
||||
@SaCheckPermission("studentDynamics:dormApplication:query")
|
||||
@GetMapping("/dormApplication/{id}")
|
||||
public R<XgDormApplicationVo> getDormApplicationInfo(@NotNull(message = "主键不能为空") @PathVariable Long id) {
|
||||
return R.ok(xgStudentDynamicsService.queryDormApplicationById(id));
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取假期留宿详细信息
|
||||
*/
|
||||
@SaCheckPermission("studentDynamics:holidayStay:query")
|
||||
@GetMapping("/holidayStay/{id}")
|
||||
public R<XgHolidayStayVo> getHolidayStayInfo(@NotNull(message = "主键不能为空") @PathVariable Long id) {
|
||||
return R.ok(xgStudentDynamicsService.queryHolidayStayById(id));
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取学生请假详细信息
|
||||
*/
|
||||
@SaCheckPermission("studentDynamics:studentLeave:query")
|
||||
@GetMapping("/studentLeave/{id}")
|
||||
public R<XgStudentLeaveVo> getStudentLeaveInfo(@NotNull(message = "主键不能为空") @PathVariable Long id) {
|
||||
return R.ok(xgStudentDynamicsService.queryStudentLeaveById(id));
|
||||
}
|
||||
}
|
||||
+85
@@ -0,0 +1,85 @@
|
||||
package org.dromara.xg.mapper;
|
||||
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 学生动向信息管理(宿管员)Mapper接口
|
||||
*
|
||||
* @author zlwu
|
||||
* @date 2025-01-15
|
||||
*/
|
||||
public interface XgStudentDynamicsMapper {
|
||||
|
||||
/**
|
||||
* 检查用户是否有宿舍管理权限
|
||||
*
|
||||
* @param userId 用户ID
|
||||
* @return 管理员类型列表 (1全校管理员 2校区管理员 3宿舍区管理员 4宿舍楼管理员)
|
||||
*/
|
||||
List<String> checkUserDormManagerType(@Param("userId") Long userId);
|
||||
|
||||
/**
|
||||
* 获取全校管理员权限的所有楼栋ID列表
|
||||
*
|
||||
* @param userId 用户ID
|
||||
* @return 楼栋ID列表
|
||||
*/
|
||||
List<Long> getBuildingIdsBySchoolAdmin(@Param("userId") Long userId);
|
||||
|
||||
/**
|
||||
* 获取校区管理员权限的楼栋ID列表
|
||||
*
|
||||
* @param userId 用户ID
|
||||
* @return 楼栋ID列表
|
||||
*/
|
||||
List<Long> getBuildingIdsByCampusAdmin(@Param("userId") Long userId);
|
||||
|
||||
/**
|
||||
* 获取宿舍区管理员权限的楼栋ID列表
|
||||
*
|
||||
* @param userId 用户ID
|
||||
* @return 楼栋ID列表
|
||||
*/
|
||||
List<Long> getBuildingIdsByAreaAdmin(@Param("userId") Long userId);
|
||||
|
||||
/**
|
||||
* 获取宿舍楼管理员权限的楼栋ID列表
|
||||
*
|
||||
* @param userId 用户ID
|
||||
* @return 楼栋ID列表
|
||||
*/
|
||||
List<Long> getBuildingIdsByBuildingAdmin(@Param("userId") Long userId);
|
||||
|
||||
/**
|
||||
* 获取全校管理员权限的所有学生ID列表
|
||||
*
|
||||
* @param userId 用户ID
|
||||
* @return 学生ID列表
|
||||
*/
|
||||
List<Long> getStudentIdsBySchoolAdmin(@Param("userId") Long userId);
|
||||
|
||||
/**
|
||||
* 获取校区管理员权限的学生ID列表
|
||||
*
|
||||
* @param userId 用户ID
|
||||
* @return 学生ID列表
|
||||
*/
|
||||
List<Long> getStudentIdsByCampusAdmin(@Param("userId") Long userId);
|
||||
|
||||
/**
|
||||
* 获取宿舍区管理员权限的学生ID列表
|
||||
*
|
||||
* @param userId 用户ID
|
||||
* @return 学生ID列表
|
||||
*/
|
||||
List<Long> getStudentIdsByAreaAdmin(@Param("userId") Long userId);
|
||||
|
||||
/**
|
||||
* 获取宿舍楼管理员权限的学生ID列表
|
||||
*
|
||||
* @param userId 用户ID
|
||||
* @return 学生ID列表
|
||||
*/
|
||||
List<Long> getStudentIdsByBuildingAdmin(@Param("userId") Long userId);
|
||||
}
|
||||
+49
@@ -0,0 +1,49 @@
|
||||
package org.dromara.xg.service;
|
||||
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.xg.domain.vo.XgDormApplicationVo;
|
||||
import org.dromara.xg.domain.vo.XgHolidayStayVo;
|
||||
import org.dromara.xg.domain.vo.XgStudentLeaveVo;
|
||||
import org.dromara.xg.domain.bo.XgDormApplicationBo;
|
||||
import org.dromara.xg.domain.bo.XgHolidayStayBo;
|
||||
import org.dromara.xg.domain.bo.XgStudentLeaveBo;
|
||||
|
||||
/**
|
||||
* 学生动向信息管理(宿管员)Service接口
|
||||
*
|
||||
* @author zlwu
|
||||
* @date 2025-01-15
|
||||
*/
|
||||
public interface IXgStudentDynamicsService {
|
||||
|
||||
/**
|
||||
* 查询宿管员权限内的学生调宿退宿申请列表
|
||||
*/
|
||||
TableDataInfo<XgDormApplicationVo> queryDormApplicationPageList(XgDormApplicationBo bo, PageQuery pageQuery);
|
||||
|
||||
/**
|
||||
* 查询宿管员权限内的学生假期留宿信息列表
|
||||
*/
|
||||
TableDataInfo<XgHolidayStayVo> queryHolidayStayPageList(XgHolidayStayBo bo, PageQuery pageQuery);
|
||||
|
||||
/**
|
||||
* 查询宿管员权限内的学生请假信息列表
|
||||
*/
|
||||
TableDataInfo<XgStudentLeaveVo> queryStudentLeavePageList(XgStudentLeaveBo bo, PageQuery pageQuery);
|
||||
|
||||
/**
|
||||
* 根据主键查询调宿退宿申请详情
|
||||
*/
|
||||
XgDormApplicationVo queryDormApplicationById(Long id);
|
||||
|
||||
/**
|
||||
* 根据主键查询假期留宿详情
|
||||
*/
|
||||
XgHolidayStayVo queryHolidayStayById(Long id);
|
||||
|
||||
/**
|
||||
* 根据主键查询学生请假详情
|
||||
*/
|
||||
XgStudentLeaveVo queryStudentLeaveById(Long id);
|
||||
}
|
||||
+329
@@ -0,0 +1,329 @@
|
||||
package org.dromara.xg.service.impl;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.common.satoken.utils.LoginHelper;
|
||||
import org.dromara.xg.domain.vo.XgDormApplicationVo;
|
||||
import org.dromara.xg.domain.vo.XgHolidayStayVo;
|
||||
import org.dromara.xg.domain.vo.XgStudentLeaveVo;
|
||||
import org.dromara.xg.domain.bo.XgDormApplicationBo;
|
||||
import org.dromara.xg.domain.bo.XgHolidayStayBo;
|
||||
import org.dromara.xg.domain.bo.XgStudentLeaveBo;
|
||||
import org.dromara.xg.domain.XgDormApplication;
|
||||
import org.dromara.xg.domain.XgHolidayStay;
|
||||
import org.dromara.xg.domain.XgStudentLeave;
|
||||
import org.dromara.xg.mapper.XgDormApplicationMapper;
|
||||
import org.dromara.xg.mapper.XgHolidayStayMapper;
|
||||
import org.dromara.xg.mapper.XgStudentLeaveMapper;
|
||||
import org.dromara.xg.mapper.XgStudentDynamicsMapper;
|
||||
import org.dromara.xg.service.IXgStudentDynamicsService;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* 学生动向信息管理(宿管员)Service实现
|
||||
*
|
||||
* @author zlwu
|
||||
* @date 2025-01-15
|
||||
*/
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
public class XgStudentDynamicsServiceImpl implements IXgStudentDynamicsService {
|
||||
|
||||
private final XgDormApplicationMapper dormApplicationMapper;
|
||||
private final XgHolidayStayMapper holidayStayMapper;
|
||||
private final XgStudentLeaveMapper studentLeaveMapper;
|
||||
private final XgStudentDynamicsMapper studentDynamicsMapper;
|
||||
|
||||
/**
|
||||
* 查询宿管员权限内的学生调宿退宿申请列表
|
||||
*/
|
||||
@Override
|
||||
public TableDataInfo<XgDormApplicationVo> queryDormApplicationPageList(XgDormApplicationBo bo,
|
||||
PageQuery pageQuery) {
|
||||
// 获取当前登录用户ID
|
||||
Long currentUserId = LoginHelper.getUserId();
|
||||
|
||||
// 构建查询条件
|
||||
LambdaQueryWrapper<XgDormApplication> lqw = buildDormApplicationQueryWrapper(bo, currentUserId);
|
||||
|
||||
// 分页查询
|
||||
Page<XgDormApplicationVo> result = dormApplicationMapper.selectVoPage(pageQuery.build(), lqw);
|
||||
return TableDataInfo.build(result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询宿管员权限内的学生假期留宿信息列表
|
||||
*/
|
||||
@Override
|
||||
public TableDataInfo<XgHolidayStayVo> queryHolidayStayPageList(XgHolidayStayBo bo, PageQuery pageQuery) {
|
||||
// 获取当前登录用户ID
|
||||
Long currentUserId = LoginHelper.getUserId();
|
||||
|
||||
// 构建查询条件
|
||||
LambdaQueryWrapper<XgHolidayStay> lqw = buildHolidayStayQueryWrapper(bo, currentUserId);
|
||||
|
||||
// 分页查询
|
||||
Page<XgHolidayStayVo> result = holidayStayMapper.selectVoPage(pageQuery.build(), lqw);
|
||||
return TableDataInfo.build(result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询宿管员权限内的学生请假信息列表
|
||||
*/
|
||||
@Override
|
||||
public TableDataInfo<XgStudentLeaveVo> queryStudentLeavePageList(XgStudentLeaveBo bo, PageQuery pageQuery) {
|
||||
// 获取当前登录用户ID
|
||||
Long currentUserId = LoginHelper.getUserId();
|
||||
|
||||
// 构建查询条件
|
||||
LambdaQueryWrapper<XgStudentLeave> lqw = buildStudentLeaveQueryWrapper(bo, currentUserId);
|
||||
|
||||
// 分页查询
|
||||
Page<XgStudentLeaveVo> result = studentLeaveMapper.selectVoPage(pageQuery.build(), lqw);
|
||||
return TableDataInfo.build(result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据主键查询调宿退宿申请详情
|
||||
*/
|
||||
@Override
|
||||
public XgDormApplicationVo queryDormApplicationById(Long id) {
|
||||
return dormApplicationMapper.selectVoById(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据主键查询假期留宿详情
|
||||
*/
|
||||
@Override
|
||||
public XgHolidayStayVo queryHolidayStayById(Long id) {
|
||||
return holidayStayMapper.selectVoById(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据主键查询学生请假详情
|
||||
*/
|
||||
@Override
|
||||
public XgStudentLeaveVo queryStudentLeaveById(Long id) {
|
||||
return studentLeaveMapper.selectVoById(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建调宿退宿申请查询条件(带宿管员权限)
|
||||
*/
|
||||
private LambdaQueryWrapper<XgDormApplication> buildDormApplicationQueryWrapper(XgDormApplicationBo bo,
|
||||
Long currentUserId) {
|
||||
LambdaQueryWrapper<XgDormApplication> lqw = new LambdaQueryWrapper<>();
|
||||
|
||||
// 获取宿管员管理的楼栋ID列表
|
||||
List<Long> managedBuildingIds = getManagedBuildingIds(currentUserId);
|
||||
|
||||
if (managedBuildingIds.isEmpty()) {
|
||||
// 如果没有管理权限,返回空结果
|
||||
lqw.eq(XgDormApplication::getId, -1);
|
||||
return lqw;
|
||||
}
|
||||
|
||||
// 只查询宿管员权限内楼栋的学生申请
|
||||
lqw.in(XgDormApplication::getCurrentBuildingId, managedBuildingIds);
|
||||
|
||||
// 添加其他查询条件
|
||||
lqw.like(bo.getStudentName() != null, XgDormApplication::getStudentName, bo.getStudentName());
|
||||
lqw.like(bo.getStudentNo() != null, XgDormApplication::getStudentNo, bo.getStudentNo());
|
||||
lqw.like(bo.getCollegeName() != null, XgDormApplication::getCollegeName, bo.getCollegeName());
|
||||
lqw.like(bo.getMajorName() != null, XgDormApplication::getMajorName, bo.getMajorName());
|
||||
lqw.like(bo.getClassName() != null, XgDormApplication::getClassName, bo.getClassName());
|
||||
lqw.eq(bo.getApplicationType() != null, XgDormApplication::getApplicationType, bo.getApplicationType());
|
||||
lqw.eq(bo.getApplicationStatus() != null, XgDormApplication::getApplicationStatus, bo.getApplicationStatus());
|
||||
lqw.ge(bo.getApplyTime() != null, XgDormApplication::getApplyTime, bo.getApplyTime());
|
||||
|
||||
// 默认按创建时间倒序
|
||||
lqw.orderByDesc(XgDormApplication::getCreateTime);
|
||||
|
||||
return lqw;
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建假期留宿查询条件(带宿管员权限)
|
||||
*/
|
||||
private LambdaQueryWrapper<XgHolidayStay> buildHolidayStayQueryWrapper(XgHolidayStayBo bo, Long currentUserId) {
|
||||
LambdaQueryWrapper<XgHolidayStay> lqw = new LambdaQueryWrapper<>();
|
||||
|
||||
// 获取宿管员管理的楼栋ID列表
|
||||
List<Long> managedBuildingIds = getManagedBuildingIds(currentUserId);
|
||||
|
||||
if (managedBuildingIds.isEmpty()) {
|
||||
// 如果没有管理权限,返回空结果
|
||||
lqw.eq(XgHolidayStay::getId, -1);
|
||||
return lqw;
|
||||
}
|
||||
|
||||
// 只查询宿管员权限内楼栋的学生留宿
|
||||
lqw.in(XgHolidayStay::getBuildingId, managedBuildingIds);
|
||||
|
||||
// 添加其他查询条件
|
||||
lqw.like(bo.getStudentName() != null, XgHolidayStay::getStudentName, bo.getStudentName());
|
||||
lqw.like(bo.getStudentNo() != null, XgHolidayStay::getStudentNo, bo.getStudentNo());
|
||||
lqw.like(bo.getCollegeName() != null, XgHolidayStay::getCollegeName, bo.getCollegeName());
|
||||
lqw.like(bo.getMajorName() != null, XgHolidayStay::getMajorName, bo.getMajorName());
|
||||
lqw.like(bo.getClassName() != null, XgHolidayStay::getClassName, bo.getClassName());
|
||||
lqw.eq(bo.getHolidayType() != null, XgHolidayStay::getHolidayType, bo.getHolidayType());
|
||||
lqw.ge(bo.getApplyStartDate() != null, XgHolidayStay::getApplyStartDate, bo.getApplyStartDate());
|
||||
lqw.le(bo.getApplyEndDate() != null, XgHolidayStay::getApplyEndDate, bo.getApplyEndDate());
|
||||
|
||||
// 默认按创建时间倒序
|
||||
lqw.orderByDesc(XgHolidayStay::getCreateTime);
|
||||
|
||||
return lqw;
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建学生请假查询条件(带宿管员权限)
|
||||
*/
|
||||
private LambdaQueryWrapper<XgStudentLeave> buildStudentLeaveQueryWrapper(XgStudentLeaveBo bo, Long currentUserId) {
|
||||
LambdaQueryWrapper<XgStudentLeave> lqw = new LambdaQueryWrapper<>();
|
||||
|
||||
// 获取宿管员权限内的学生ID列表
|
||||
List<Long> managedStudentIds = getManagedStudentIds(currentUserId);
|
||||
|
||||
if (managedStudentIds.isEmpty()) {
|
||||
// 如果没有管理权限,返回空结果
|
||||
lqw.eq(XgStudentLeave::getId, -1);
|
||||
return lqw;
|
||||
}
|
||||
|
||||
// 只查询宿管员权限内的学生请假
|
||||
lqw.in(XgStudentLeave::getStudentId, managedStudentIds);
|
||||
|
||||
// 添加其他查询条件
|
||||
lqw.like(bo.getStudentName() != null, XgStudentLeave::getStudentName, bo.getStudentName());
|
||||
lqw.like(bo.getStudentNo() != null, XgStudentLeave::getStudentNo, bo.getStudentNo());
|
||||
lqw.like(bo.getCollegeName() != null, XgStudentLeave::getCollegeName, bo.getCollegeName());
|
||||
lqw.like(bo.getMajorName() != null, XgStudentLeave::getMajorName, bo.getMajorName());
|
||||
lqw.like(bo.getClassName() != null, XgStudentLeave::getClassName, bo.getClassName());
|
||||
lqw.like(bo.getLeaveTypeName() != null, XgStudentLeave::getLeaveTypeName, bo.getLeaveTypeName());
|
||||
lqw.eq(bo.getApprovalStatus() != null, XgStudentLeave::getApprovalStatus, bo.getApprovalStatus());
|
||||
lqw.ge(bo.getStartTime() != null, XgStudentLeave::getStartTime, bo.getStartTime());
|
||||
lqw.le(bo.getEndTime() != null, XgStudentLeave::getEndTime, bo.getEndTime());
|
||||
|
||||
// 默认按创建时间倒序
|
||||
lqw.orderByDesc(XgStudentLeave::getCreateTime);
|
||||
|
||||
return lqw;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取宿管员管理的楼栋ID列表(支持多级权限合并)
|
||||
*/
|
||||
private List<Long> getManagedBuildingIds(Long userId) {
|
||||
// 查询用户管理权限类型
|
||||
List<String> managerTypes = studentDynamicsMapper.checkUserDormManagerType(userId);
|
||||
|
||||
if (managerTypes == null || managerTypes.isEmpty()) {
|
||||
// 没有宿舍管理权限,返回空列表
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
// 存储所有权限的楼栋ID,使用Set去重
|
||||
Set<Long> buildingIdSet = new HashSet<>();
|
||||
|
||||
// 按照权限分别查询并合并结果(支持用户拥有多种角色的情况)
|
||||
if (managerTypes.contains("1")) {
|
||||
// 全校管理员,获取所有楼栋
|
||||
List<Long> allBuildings = studentDynamicsMapper.getBuildingIdsBySchoolAdmin(userId);
|
||||
if (allBuildings != null) {
|
||||
buildingIdSet.addAll(allBuildings);
|
||||
}
|
||||
// 全校管理员可以查看所有楼栋,直接返回
|
||||
return new ArrayList<>(buildingIdSet);
|
||||
}
|
||||
|
||||
// 对于非全校管理员,合并多种权限的结果
|
||||
if (managerTypes.contains("2")) {
|
||||
// 校区管理员,获取管理的校区下的楼栋
|
||||
List<Long> campusBuildings = studentDynamicsMapper.getBuildingIdsByCampusAdmin(userId);
|
||||
if (campusBuildings != null) {
|
||||
buildingIdSet.addAll(campusBuildings);
|
||||
}
|
||||
}
|
||||
|
||||
if (managerTypes.contains("3")) {
|
||||
// 宿舍区管理员,获取管理的宿舍区下的楼栋
|
||||
List<Long> areaBuildings = studentDynamicsMapper.getBuildingIdsByAreaAdmin(userId);
|
||||
if (areaBuildings != null) {
|
||||
buildingIdSet.addAll(areaBuildings);
|
||||
}
|
||||
}
|
||||
|
||||
if (managerTypes.contains("4")) {
|
||||
// 宿舍楼管理员,获取管理的楼栋
|
||||
List<Long> directBuildings = studentDynamicsMapper.getBuildingIdsByBuildingAdmin(userId);
|
||||
if (directBuildings != null) {
|
||||
buildingIdSet.addAll(directBuildings);
|
||||
}
|
||||
}
|
||||
|
||||
return new ArrayList<>(buildingIdSet);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取宿管员权限内的学生ID列表(支持多级权限合并)
|
||||
*/
|
||||
private List<Long> getManagedStudentIds(Long userId) {
|
||||
// 查询用户管理权限类型
|
||||
List<String> managerTypes = studentDynamicsMapper.checkUserDormManagerType(userId);
|
||||
|
||||
if (managerTypes == null || managerTypes.isEmpty()) {
|
||||
// 没有宿舍管理权限,返回空列表
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
// 存储所有权限的学生ID,使用Set去重
|
||||
Set<Long> studentIdSet = new HashSet<>();
|
||||
|
||||
// 按照权限分别查询并合并结果(支持用户拥有多种角色的情况)
|
||||
if (managerTypes.contains("1")) {
|
||||
// 全校管理员,获取所有学生
|
||||
List<Long> allStudents = studentDynamicsMapper.getStudentIdsBySchoolAdmin(userId);
|
||||
if (allStudents != null) {
|
||||
studentIdSet.addAll(allStudents);
|
||||
}
|
||||
// 全校管理员可以查看所有学生,直接返回
|
||||
return new ArrayList<>(studentIdSet);
|
||||
}
|
||||
|
||||
// 对于非全校管理员,合并多种权限的结果
|
||||
if (managerTypes.contains("2")) {
|
||||
// 校区管理员,获取管理的校区下的学生
|
||||
List<Long> campusStudents = studentDynamicsMapper.getStudentIdsByCampusAdmin(userId);
|
||||
if (campusStudents != null) {
|
||||
studentIdSet.addAll(campusStudents);
|
||||
}
|
||||
}
|
||||
|
||||
if (managerTypes.contains("3")) {
|
||||
// 宿舍区管理员,获取管理的宿舍区下的学生
|
||||
List<Long> areaStudents = studentDynamicsMapper.getStudentIdsByAreaAdmin(userId);
|
||||
if (areaStudents != null) {
|
||||
studentIdSet.addAll(areaStudents);
|
||||
}
|
||||
}
|
||||
|
||||
if (managerTypes.contains("4")) {
|
||||
// 宿舍楼管理员,获取管理的楼栋下的学生
|
||||
List<Long> buildingStudents = studentDynamicsMapper.getStudentIdsByBuildingAdmin(userId);
|
||||
if (buildingStudents != null) {
|
||||
studentIdSet.addAll(buildingStudents);
|
||||
}
|
||||
}
|
||||
|
||||
return new ArrayList<>(studentIdSet);
|
||||
}
|
||||
}
|
||||
+213
@@ -0,0 +1,213 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="org.dromara.xg.mapper.XgStudentDynamicsMapper">
|
||||
|
||||
<!-- 检查用户是否有宿舍管理权限 -->
|
||||
<select id="checkUserDormManagerType" resultType="String">
|
||||
SELECT
|
||||
DISTINCT manager_type
|
||||
FROM
|
||||
xg_dorm_manager
|
||||
WHERE
|
||||
user_id = #{userId}
|
||||
AND deleted = '0'
|
||||
AND status = '0'
|
||||
</select>
|
||||
|
||||
<!-- 获取全校管理员权限的所有楼栋ID列表 -->
|
||||
<select id="getBuildingIdsBySchoolAdmin" resultType="Long">
|
||||
SELECT
|
||||
id
|
||||
FROM
|
||||
xg_dorm_building
|
||||
WHERE
|
||||
deleted = '0'
|
||||
AND EXISTS (
|
||||
SELECT 1 FROM xg_dorm_manager m
|
||||
WHERE m.user_id = #{userId}
|
||||
AND m.manager_type = '1'
|
||||
AND m.deleted = '0'
|
||||
AND m.status = '0'
|
||||
)
|
||||
</select>
|
||||
|
||||
<!-- 获取校区管理员权限的楼栋ID列表 -->
|
||||
<select id="getBuildingIdsByCampusAdmin" resultType="Long">
|
||||
SELECT
|
||||
b.id
|
||||
FROM
|
||||
xg_dorm_building b
|
||||
WHERE
|
||||
b.deleted = '0'
|
||||
AND b.campus_id IN (
|
||||
SELECT
|
||||
s.auth_source
|
||||
FROM
|
||||
xg_dorm_manager m
|
||||
JOIN
|
||||
xg_dorm_manager_source s ON m.id = s.manager_id
|
||||
WHERE
|
||||
m.user_id = #{userId}
|
||||
AND m.manager_type = '2'
|
||||
AND m.deleted = '0'
|
||||
AND m.status = '0'
|
||||
AND s.deleted = '0'
|
||||
AND s.status = '0'
|
||||
)
|
||||
</select>
|
||||
|
||||
<!-- 获取宿舍区管理员权限的楼栋ID列表 -->
|
||||
<select id="getBuildingIdsByAreaAdmin" resultType="Long">
|
||||
SELECT
|
||||
b.id
|
||||
FROM
|
||||
xg_dorm_building b
|
||||
WHERE
|
||||
b.deleted = '0'
|
||||
AND b.area_id IN (
|
||||
SELECT
|
||||
s.auth_source
|
||||
FROM
|
||||
xg_dorm_manager m
|
||||
JOIN
|
||||
xg_dorm_manager_source s ON m.id = s.manager_id
|
||||
WHERE
|
||||
m.user_id = #{userId}
|
||||
AND m.manager_type = '3'
|
||||
AND m.deleted = '0'
|
||||
AND m.status = '0'
|
||||
AND s.deleted = '0'
|
||||
AND s.status = '0'
|
||||
)
|
||||
</select>
|
||||
|
||||
<!-- 获取宿舍楼管理员权限的楼栋ID列表 -->
|
||||
<select id="getBuildingIdsByBuildingAdmin" resultType="Long">
|
||||
SELECT
|
||||
b.id
|
||||
FROM
|
||||
xg_dorm_building b
|
||||
WHERE
|
||||
b.deleted = '0'
|
||||
AND b.id IN (
|
||||
SELECT
|
||||
s.auth_source
|
||||
FROM
|
||||
xg_dorm_manager m
|
||||
JOIN
|
||||
xg_dorm_manager_source s ON m.id = s.manager_id
|
||||
WHERE
|
||||
m.user_id = #{userId}
|
||||
AND m.manager_type = '4'
|
||||
AND m.deleted = '0'
|
||||
AND m.status = '0'
|
||||
AND s.deleted = '0'
|
||||
AND s.status = '0'
|
||||
)
|
||||
</select>
|
||||
|
||||
<!-- 获取全校管理员权限的所有学生ID列表 -->
|
||||
<select id="getStudentIdsBySchoolAdmin" resultType="Long">
|
||||
SELECT
|
||||
sm.id
|
||||
FROM
|
||||
xg_student_msg sm
|
||||
WHERE
|
||||
sm.deleted = 0
|
||||
AND EXISTS (
|
||||
SELECT 1 FROM xg_dorm_manager m
|
||||
WHERE m.user_id = #{userId}
|
||||
AND m.manager_type = '1'
|
||||
AND m.deleted = '0'
|
||||
AND m.status = '0'
|
||||
)
|
||||
</select>
|
||||
|
||||
<!-- 获取校区管理员权限的学生ID列表 -->
|
||||
<select id="getStudentIdsByCampusAdmin" resultType="Long">
|
||||
SELECT
|
||||
sm.id
|
||||
FROM
|
||||
xg_student_msg sm
|
||||
INNER JOIN
|
||||
xg_dorm_building db ON sm.dormitory_building = db.id
|
||||
WHERE
|
||||
sm.deleted = 0
|
||||
AND db.deleted = '0'
|
||||
AND db.campus_id IN (
|
||||
SELECT
|
||||
s.auth_source
|
||||
FROM
|
||||
xg_dorm_manager m
|
||||
JOIN
|
||||
xg_dorm_manager_source s ON m.id = s.manager_id
|
||||
WHERE
|
||||
m.user_id = #{userId}
|
||||
AND m.manager_type = '2'
|
||||
AND m.deleted = '0'
|
||||
AND m.status = '0'
|
||||
AND s.deleted = '0'
|
||||
AND s.status = '0'
|
||||
)
|
||||
</select>
|
||||
|
||||
<!-- 获取宿舍区管理员权限的学生ID列表 -->
|
||||
<select id="getStudentIdsByAreaAdmin" resultType="Long">
|
||||
SELECT
|
||||
sm.id
|
||||
FROM
|
||||
xg_student_msg sm
|
||||
INNER JOIN
|
||||
xg_dorm_building db ON sm.dormitory_building = db.id
|
||||
WHERE
|
||||
sm.deleted = 0
|
||||
AND db.deleted = '0'
|
||||
AND db.area_id IN (
|
||||
SELECT
|
||||
s.auth_source
|
||||
FROM
|
||||
xg_dorm_manager m
|
||||
JOIN
|
||||
xg_dorm_manager_source s ON m.id = s.manager_id
|
||||
WHERE
|
||||
m.user_id = #{userId}
|
||||
AND m.manager_type = '3'
|
||||
AND m.deleted = '0'
|
||||
AND m.status = '0'
|
||||
AND s.deleted = '0'
|
||||
AND s.status = '0'
|
||||
)
|
||||
</select>
|
||||
|
||||
<!-- 获取宿舍楼管理员权限的学生ID列表 -->
|
||||
<select id="getStudentIdsByBuildingAdmin" resultType="Long">
|
||||
SELECT
|
||||
sm.id
|
||||
FROM
|
||||
xg_student_msg sm
|
||||
INNER JOIN
|
||||
xg_dorm_building db ON sm.dormitory_building = db.id
|
||||
WHERE
|
||||
sm.deleted = 0
|
||||
AND db.deleted = '0'
|
||||
AND db.id IN (
|
||||
SELECT
|
||||
s.auth_source
|
||||
FROM
|
||||
xg_dorm_manager m
|
||||
JOIN
|
||||
xg_dorm_manager_source s ON m.id = s.manager_id
|
||||
WHERE
|
||||
m.user_id = #{userId}
|
||||
AND m.manager_type = '4'
|
||||
AND m.deleted = '0'
|
||||
AND m.status = '0'
|
||||
AND s.deleted = '0'
|
||||
AND s.status = '0'
|
||||
)
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
||||
Reference in new issue
Block a user