package com.engine.salary.service;

import com.engine.salary.entity.datacollection.dto.AttendQuoteDataBaseDTO;
import com.engine.salary.entity.datacollection.dto.AttendQuoteDataDTO;
import com.engine.salary.entity.datacollection.param.*;
import com.engine.salary.util.page.PageInfo;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.time.YearMonth;
import java.util.List;
import java.util.Map;

/**
 * 数据采集-考勤引用数据
 * <p>Copyright: Copyright (c) 2022</p>
 * <p>Company: 泛微软件</p>
 *
 * @author qiantao
 * @version 1.0
 **/
public interface AttendQuoteDataService {

    /**
     * 查看数据采集-考勤引用数据列表（分页）
     *
     * @param queryParam
     * @return
     */
    PageInfo<AttendQuoteDataBaseDTO> listPage(AttendQuoteDataQueryParam queryParam);


    /**
     * 导出考勤数据
     * @param queryParam
     * @return
     */
    XSSFWorkbook export(AttendQuoteDataQueryParam queryParam);

    /**
     * 同步引用考勤数据
     * @param syncParam
     * @return
     */
    String syncAttendQuoteData(AttendQuoteDataSyncParam syncParam);

    /**
     * 获取考勤引用数据
     * @param salaryYearMonth
     * @param salarySobId
     * @param employeeIds
     * @return
     */
    List<AttendQuoteDataDTO> getAttendQuoteData(YearMonth salaryYearMonth, Long salarySobId, List<Long> employeeIds);

    /**
     * 导出考勤数据作为模板
     * @param exportParam
     * @return
     */
    XSSFWorkbook downloadTemplate(AttendQuoteDataExportTemplateParam exportParam);

    /**
     * 获取考勤数据最终结果
     *
     * @param attendQuoteDataBases
     * @return
     */
    List<Map<String, Object>> getListMaps(List<AttendQuoteDataBaseDTO> attendQuoteDataBases);

    /**
     * 预览
     * @param param
     * @return
     */
    Map<String, Object> preview(AttendQuoteDataImportParam param);

    /**
     * 导入
     * @param param
     * @return
     */
    Map<String, Object> importAttendQuoteData(AttendQuoteDataImportParam param);

    /**
     * 编辑数据
     * @param attendQuoteDataEditParam
     */
    void editData(AttendQuoteDataEditParam attendQuoteDataEditParam);

    /**
     * 获取数据
     * @param attendQuoteDataEditParam
     */
    Map<String, Object> getData(AttendQuoteDataEditParam attendQuoteDataEditParam);
}
