package com.itheima.service.impl;

import com.itheima.dao.StudentCleanDao;  // 导入StudentCleanDao接口，用于数据访问操作
import com.itheima.po.PageInfo;          // 导入PageInfo类，用于封装分页信息
import com.itheima.po.StudentClean;     // 导入StudentClean类，用于表示学生宿舍卫生记录
import com.itheima.service.StudentCleanService; // 导入StudentCleanService接口，该类实现该接口
import org.springframework.beans.factory.annotation.Autowired; // 导入自动注入的注解
import org.springframework.stereotype.Service; // 导入Service注解，标识这是一个Service类
import org.springframework.transaction.annotation.Transactional; // 导入事务管理注解

import java.util.List;  // 导入List类，用于存储多个学生宿舍卫生记录对象

/**
 * @program: dormitorySystem
 * @description: 学生卫生接口实现类
 * @author: Joyrocky
 * @create: 2019-04-25 12:16
 **/
@Service("studentCleanService")  // 标注该类为一个Spring服务组件，名称为studentCleanService
@Transactional  // 启用事务管理，确保该类中数据库操作的原子性
public class StudentCleanServiceImpl implements StudentCleanService {

    // 自动注入StudentCleanDao，DAO层用于与数据库交互
    @Autowired
    private StudentCleanDao studentCleanDao;

    // 分页查询学生宿舍卫生记录的方法
    @Override
    public PageInfo<StudentClean> findPageInfo(Integer s_studentid, String s_name, Integer s_dormitoryid, Integer pageIndex, Integer pageSize) {
        // 创建PageInfo对象，用于存储分页信息
        PageInfo<StudentClean> pi = new PageInfo<StudentClean>();
        pi.setPageIndex(pageIndex);  // 设置当前页码
        pi.setPageSize(pageSize);    // 设置每页显示的记录数

        // 获取符合条件的总记录数
        Integer totalCount = studentCleanDao.totalCount(s_studentid, s_name, s_dormitoryid);
        
        // 如果总记录数大于0，进行分页查询
        if (totalCount > 0) {
            pi.setTotalCount(totalCount);  // 设置总记录数

            // 计算当前页的起始位置，并查询当前页的学生宿舍卫生记录列表
            // currentPage = (pageIndex - 1) * pageSize
            List<StudentClean> studentCleanList = studentCleanDao.getStudentCleanList(
                    s_studentid, s_name, s_dormitoryid, 
                    (pi.getPageIndex() - 1) * pi.getPageSize(), pi.getPageSize()
            );
            pi.setList(studentCleanList);  // 设置当前页的学生宿舍卫生记录列表
        }

        return pi;  // 返回包含分页信息的PageInfo对象
    }

    // 获取所有学生宿舍卫生记录的方法
    @Override
    public List<StudentClean> getAll() {
        // 调用DAO层获取所有学生宿舍卫生记录，并返回列表
        List<StudentClean> studentCleanList = studentCleanDao.getAll();
        return studentCleanList;  // 返回学生宿舍卫生记录列表
    }

    // 添加学生宿舍卫生记录的方法
    @Override
    public int addStudentClean(StudentClean studentclean) {
        // 调用DAO层的addStudentClean方法添加新的学生宿舍卫生记录，并返回受影响的行数
        return studentCleanDao.addStudentClean(studentclean);
    }

    // 通过ID删除学生宿舍卫生记录的方法
    @Override
    public int deleteStudentClean(Integer g_id) {
        // 调用DAO层的deleteStudentClean方法删除指定ID的学生宿舍卫生记录，并返回受影响的行数
        return studentCleanDao.deleteStudentClean(g_id);
    }

    // 修改学生宿舍卫生记录的方法
    @Override
    public int updateStudentClean(StudentClean studentclean) {
        // 调用DAO层的updateStudentClean方法更新学生宿舍卫生记录，并返回受影响的行数
        return studentCleanDao.updateStudentClean(studentclean);
    }

    // 根据ID查询学生宿舍卫生记录的方法
    @Override
    public StudentClean findStudentCleanById(Integer g_id) {
        // 调用DAO层的findStudentCleanById方法根据ID查询学生宿舍卫生记录
        StudentClean d = studentCleanDao.findStudentCleanById(g_id);
        return d;  // 返回查询到的学生宿舍卫生记录
    }
}
