package com.itheima.service.impl;

import com.itheima.dao.DormRepairDao;  // 导入DormRepairDao接口，用于数据访问操作
import com.itheima.po.DormRepair;      // 导入DormRepair类，用于表示宿舍维修记录
import com.itheima.po.PageInfo;        // 导入PageInfo类，用于分页信息
import com.itheima.service.DormRepairService; // 导入DormRepairService接口，该类实现该接口
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-28 00:24
 **/
@Service("dormRepairService")  // 标注该类为一个Spring服务组件，名称为dormRepairService
@Transactional  // 启用事务管理，确保该类中数据库操作的原子性
public class DormRepairServiceImpl implements DormRepairService {

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

    // 分页查询维修记录的方法
    @Override
    public PageInfo<DormRepair> findPageInfo(Integer d_id, String d_dormbuilding, Integer pageIndex, Integer pageSize) {
        // 创建PageInfo对象，用于存储分页信息
        PageInfo<DormRepair> pi = new PageInfo<DormRepair>();
        pi.setPageIndex(pageIndex);  // 设置当前页码
        pi.setPageSize(pageSize);    // 设置每页显示的记录数

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

            // 计算当前页的起始位置，并查询当前页的维修记录列表
            // currentPage = (pageIndex - 1) * pageSize
            List<DormRepair> dormRepairList = dormRepairDao.getDormRepairList(
                    d_id, d_dormbuilding, 
                    (pi.getPageIndex() - 1) * pi.getPageSize(), pi.getPageSize()
            );
            pi.setList(dormRepairList); // 设置当前页的维修记录列表
        }

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

    // 获取所有维修记录的方法
    @Override
    public List<DormRepair> getAll() {
        // 调用DAO层获取所有维修记录，并返回列表
        List<DormRepair> dormRepairList = dormRepairDao.getAll();
        return dormRepairList;  // 返回维修记录列表
    }

    // 添加维修记录的方法
    @Override
    public int addDormRepair(DormRepair dormrepair) {
        // 调用DAO层的addDormRepair方法添加维修记录，并返回受影响的行数
        return dormRepairDao.addDormRepair(dormrepair);
    }

    // 通过维修记录ID删除维修记录的方法
    @Override
    public int deleteDormRepair(Integer r_id) {
        // 调用DAO层的deleteDormRepair方法删除指定ID的维修记录，并返回受影响的行数
        return dormRepairDao.deleteDormRepair(r_id);
    }

    // 修改维修记录的方法
    @Override
    public int updateDormRepair(DormRepair dormrepair) {
        // 调用DAO层的updateDormRepair方法更新维修记录，并返回受影响的行数
        return dormRepairDao.updateDormRepair(dormrepair);
    }

    // 根据维修记录ID查询单条维修记录的方法
    @Override
    public DormRepair findDormRepairById(Integer r_id) {
        // 调用DAO层的findDormRepairById方法根据ID查询维修记录
        DormRepair d = dormRepairDao.findDormRepairById(r_id);
        return d;  // 返回查询到的维修记录
    }

}
