package com.engine.salary.service;

import com.engine.salary.entity.salarysob.dto.SalarySobRangeListDTO;
import com.engine.salary.entity.salarysob.param.SalarySobRangeImportParam;
import com.engine.salary.entity.salarysob.param.SalarySobRangeQueryParam;
import com.engine.salary.entity.salarysob.param.SalarySobRangeSaveParam;
import com.engine.salary.entity.salarysob.po.SalarySobRangePO;
import com.engine.salary.util.page.PageInfo;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * 薪资账套人员范围
 * <p>Copyright: Copyright (c) 2022</p>
 * <p>Company: 泛微软件</p>
 *
 * @author qiantao
 * @version 1.0
 **/
public interface SalarySobRangeService {

    /**
     * 根据主键id查询薪资账套的人员范围
     *
     * @param ids       薪资账套的人员范围的主键id
     * @return
     */
    List<SalarySobRangePO> listByIds(Collection<Long> ids);

    /**
     * 根据薪资账套ID和类型查询薪资账套的人员范围
     *
     * @param salarySobId 薪资账套id
     * @param includeType 0-从范围中排除/1-关联人员范围
     * @return
     */
    List<SalarySobRangePO> listBySalarySobIdAndIncludeType(Long salarySobId, Integer includeType);

    /***
     * @description 获取所有的薪资账套的人员范围
     * @return List<SalarySangePO>
     * @author Harryxzy
     * @date 2022/10/8 16:12
     */
    List<SalarySobRangePO> listAllSalarySobRange();

    /**
     * 根据查询条件查询薪资账套的人员范围
     *
     * @param queryParam  查询条件
     * @param includeType 0-从范围中排除/1-关联人员范围
     * @return
     */
    PageInfo<SalarySobRangeListDTO> listPageByParamAndIncludeType(SalarySobRangeQueryParam queryParam, Integer includeType);

    /**
     * 保存
     *
     * @param saveParam  保存参数
     */
    void save(SalarySobRangeSaveParam saveParam);

    /**
     * 根据主键id删除薪资账套的人员范围
     *
     * @param ids       主键id
     */
    void deleteByIds(Collection<Long> ids);

    /**
     * 根据薪资账套id删除薪资账套的人员范围
     *
     * @param salarySobIds 薪资账套id
     */
    void deleteBySalarySobIds(Collection<Long> salarySobIds);

    /**
     * 更新人员状态从status中存到statuses中
     * @param item
     */
    void updateEmployeeStatuses(SalarySobRangePO item);

    /***
     * @description 下载人员范围导入模板
     * @return XSSFWorkbook
     * @author Harryxzy
     * @date 2023/1/9 11:34
     */
    XSSFWorkbook downloadTemplateRange();

    /***
     * @description 人员范围导入预览
     * @return Map<String,Object>
     * @author Harryxzy
     * @date 2023/1/9 13:39
     */
    Map<String, Object> preview(SalarySobRangeImportParam importParam);

    /**
     * @description 导入薪资账套人员范围
     * @return Map<String,Object>
     * @author Harryxzy
     * @date 2023/1/9 14:10
     */
    Map<String, Object> importData(SalarySobRangeImportParam importParam);
}
