package com.xjrsoft.module.room.mapper;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.base.MPJBaseMapper;
import com.xjrsoft.module.room.dto.AdjustBedPageDto;
import com.xjrsoft.module.room.dto.AdjustClassPageDto;
import com.xjrsoft.module.room.dto.DistributeClassPageDto;
import com.xjrsoft.module.room.dto.DistributeRoomBedDto;
import com.xjrsoft.module.room.dto.DistributeRoomBedPageDto;
import com.xjrsoft.module.room.dto.RoomBedPageDto;
import com.xjrsoft.module.room.entity.RoomBed;
import com.xjrsoft.module.room.vo.AdjustBedClassPageVo;
import com.xjrsoft.module.room.vo.AdjustBedClassStudentPageVo;
import com.xjrsoft.module.room.vo.AdjustBedStudentPageVo;
import com.xjrsoft.module.room.vo.ClassStudentCountVo;
import com.xjrsoft.module.room.vo.DistributeClassPageVo;
import com.xjrsoft.module.room.vo.DistributeResultListVo;
import com.xjrsoft.module.room.vo.DistributeRoomBedPageVo;
import com.xjrsoft.module.room.vo.NoBedStudentPageVo;
import com.xjrsoft.module.room.vo.RoomBedExcelVo;
import com.xjrsoft.module.room.vo.RoomBedInfoVo;
import com.xjrsoft.module.room.vo.RoomBedPageVo;
import com.xjrsoft.module.room.vo.RoomBedVo;
import com.xjrsoft.module.room.vo.StudentPayStatusVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
* @title: 寝室床位
* @Author dzx
* @Date: 2023-12-27
* @Version 1.0
*/
@Mapper
public interface RoomBedMapper extends MPJBaseMapper<RoomBed> {
    /**
     * 返回最大的序号
     * @return
     */
    Integer getMaxSortCode();

    /**
     * 分页查询
     * @param page
     * @param dto
     * @return
     */
    Page<RoomBedPageVo> getPage(Page<RoomBedPageVo> page, RoomBedPageDto dto);

    List<RoomBedExcelVo> getList(@Param("dto") RoomBedPageDto dto);

    Page<DistributeClassPageVo> getDistributeClassInfo(Page<DistributeClassPageDto> page, DistributeClassPageDto dto);

    Page<DistributeRoomBedPageVo> getDistributeRoomBedInfo(Page<DistributeRoomBedPageDto> page, DistributeRoomBedPageDto dto);

    List<RoomBedVo> getBedInfo(List<Long> ids);

    /**
     * 返回分配的结果
     * @param dto
     * @return
     */
    List<DistributeResultListVo> getDistributeResult(@Param("dto") DistributeRoomBedDto dto);

    /**
     * 调整床位，左边的班级学生信息
     * @param dto
     * @return
     */
    List<AdjustBedClassStudentPageVo> getClassStudetBed(@Param("dto") AdjustClassPageDto dto);

    /**
     * 调整床位，右边的床位学生信息
     * @param dto
     * @return
     */
    List<AdjustBedStudentPageVo> getBedStudentInfo(@Param("dto") AdjustBedPageDto dto);


    /**
     * 未分配床位的学生信息
     * @param page
     * @param dto
     * @return
     */
    Page<NoBedStudentPageVo> getNoBedStudent(Page<AdjustBedPageDto> page, AdjustBedPageDto dto);

    /* 查询分配床位班级列表的各个人数 - 开始 */

    /**
     * 查询班上需要住宿的人数
     */
    List<ClassStudentCountVo> getAllStayCount();

    /**
     * 查询班上需要住宿的男生人数
     */
    List<ClassStudentCountVo> getAllStayMaleCount();

    /**
     * 查询班上需要住宿的女生人数
     */
    List<ClassStudentCountVo> getAllStayFemaleCount();

    /**
     * 已安排的总人数
     */
    List<ClassStudentCountVo> getAllArrangedCount();

    /**
     * 已安排的男生人数
     */
    List<ClassStudentCountVo> getAllArrangedMaleCount();

    /**
     * 已安排的女生人数
     */
    List<ClassStudentCountVo> getAllArrangedFemaleCount();



    /* 查询分配床位班级列表的各个人数 - 结束 */

    /**
     * 根据用户id查询床位信息
     * @param id
     * @return
     */
    RoomBedInfoVo getBedInfoByUserId(Long id);

    /**
     * 查询学生的住宿费缴费状态
     * @param dto
     * @return
     */
    List<StudentPayStatusVo> getStudentPayStatus(@Param("dto") DistributeRoomBedDto dto);

    /**
     * 查询班级id、名称和班主任信息
     * @param dto
     * @return
     */
    List<AdjustBedClassPageVo> getClassTeacherInfo(@Param("dto") AdjustClassPageDto dto);

    String getRoomNameByStudentUserId(Long id);

}
