package com.hzu.labbooking.service;

import java.util.List;

import com.baomidou.mybatisplus.extension.service.IService;
import com.hzu.labbooking.domain.LabRecord;
import com.hzu.labbooking.domain.vo.CollegeApplyVO;
import com.hzu.labbooking.domain.vo.LabRecordVO;
import com.hzu.labbooking.domain.vo.LabTableVO;
import com.hzu.labbooking.domain.vo.RecordVO;

/**
 * 实验室预约信息Service接口
 *
 * @author yezihao
 * @date 2021-04-29
 */
public interface ILabRecordService extends IService<LabRecord> {

    /**
     * 查询实验室预约信息列表
     *
     * @param labRecord 实验室预约信息
     * @return 实验室预约信息集合
     */
    public List<LabRecordVO> selectLabRecordList(LabRecord labRecord, long year, long term);

    /**
     * 添加预约到记录及周次
     *
     * @param vo     添加预约记录VO
     * @param userId 申请人ID
     * @return 结果
     */
    public int addRecordAndWeek(LabTableVO vo, Long userId);

    /**
     * 管理员审核实验室预约列表
     *
     * @param vos 审批预约VO列表
     * @return 结果
     */
    public Boolean approveBooking(List<RecordVO> vos);

    /**
     * 取消预约记录
     *
     * @param recordIdList 预约记录id
     * @return 实验室预约信息集合
     */
    public Boolean cancelBooking(List<Long> recordIdList);

    /**
     * 管理员查询实验室预约列表
     *
     * @param labRecord 预约记录
     * @param year 学年
     * @param term 学期
     * @return 结果
     */
    public List<LabRecordVO> selectManagerRecordList(LabRecord labRecord, long year, long term);

    /**
     * 管理员取消预约记录
     *
     * @param vos 预约记录VO列表
     * @return 结果
     */
    public Boolean managerCancelBooking(List<RecordVO> vos);

    /**
     * 查询实验室预约信息列表
     *
     * @param year 学年
     * @param term 学期
     * @return 查询实验室预约信息列表
     */
    public List<CollegeApplyVO> selectCollegeApply(Long year, Long term);

    /**
     * 新增实验室预约信息
     *
     * @param labRecord 实验室预约信息
     * @return 结果
     */
    public int insertLabRecord(LabRecord labRecord);

}
