提交代码

This commit is contained in:
zlwu committed 2025-10-25 12:25:01 +08:00
1 parent 594d0c5df3
commit f89d747952
13 files changed
+2655

No files matched your search

@@ -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));
}
}
@@ -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);
}
@@ -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);
}
@@ -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);
}
}
@@ -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>