package com.ruoyi.info.collection.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.info.collection.domain.dto.CcdiStaffTransferAddDTO;
import com.ruoyi.info.collection.domain.dto.CcdiStaffTransferEditDTO;
import com.ruoyi.info.collection.domain.dto.CcdiStaffTransferQueryDTO;
import com.ruoyi.info.collection.domain.excel.CcdiStaffTransferExcel;
import com.ruoyi.info.collection.domain.vo.CcdiStaffTransferVO;
import com.ruoyi.common.exception.ServiceException;

import java.util.List;

/**
 * 员工调动记录 服务层
 *
 * @author ruoyi
 * @date 2026-02-10
 */
public interface ICcdiStaffTransferService {

    /**
     * 查询员工调动记录列表
     *
     * @param queryDTO 查询条件
     * @return 员工调动记录VO集合
     */
    List<CcdiStaffTransferVO> selectTransferList(CcdiStaffTransferQueryDTO queryDTO);

    /**
     * 分页查询员工调动记录列表
     *
     * @param page     分页对象
     * @param queryDTO 查询条件
     * @return 员工调动记录VO分页结果
     */
    Page<CcdiStaffTransferVO> selectTransferPage(Page<CcdiStaffTransferVO> page, CcdiStaffTransferQueryDTO queryDTO);

    /**
     * 查询员工调动记录详情
     *
     * @param id 主键ID
     * @return 员工调动记录VO
     */
    CcdiStaffTransferVO selectTransferById(Long id);

    /**
     * 新增员工调动记录
     *
     * @param addDTO 新增DTO
     * @return 结果
     */
    int insertTransfer(CcdiStaffTransferAddDTO addDTO);

    /**
     * 修改员工调动记录
     *
     * @param editDTO 编辑DTO
     * @return 结果
     */
    int updateTransfer(CcdiStaffTransferEditDTO editDTO);

    /**
     * 批量删除员工调动记录
     *
     * @param ids 需要删除的主键ID
     * @return 结果
     */
    int deleteTransferByIds(Long[] ids);

    /**
     * 查询员工调动记录列表（用于导出）
     *
     * @param queryDTO 查询条件
     * @return 员工调动记录Excel实体集合
     */
    List<CcdiStaffTransferExcel> selectTransferListForExport(CcdiStaffTransferQueryDTO queryDTO);

    /**
     * 导入员工调动记录数据（异步）
     *
     * @param excelList Excel实体列表
     * @return 任务ID
     */
    String importTransfer(List<CcdiStaffTransferExcel> excelList);

    /**
     * 新增时校验唯一性
     *
     * @param addDTO 新增DTO
     * @throws ServiceException 如果记录已存在
     */
    void checkUniqueForAdd(CcdiStaffTransferAddDTO addDTO);

    /**
     * 编辑时校验唯一性
     *
     * @param editDTO 编辑DTO
     * @throws ServiceException 如果记录已存在
     */
    void checkUniqueForEdit(CcdiStaffTransferEditDTO editDTO);
}
