package com.engine.salary.service;

import com.engine.salary.entity.datacollection.AddUpSituation;
import com.engine.salary.entity.datacollection.dto.AddUpSituationDTO;
import com.engine.salary.entity.datacollection.dto.AddUpSituationRecordDTO;
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.Collection;
import java.util.Date;
import java.util.List;
import java.util.Map;

public interface AddUpSituationService {

    Map<String, Object> getSearchCondition();

    /**
     * 通过id获取单个累计情况
     *
     * @param id
     * @return
     */
    AddUpSituation getById(Long id);


    /**
     * 数据采集-累计情况列表
     *
     * @param queryParam
     * @return
     */
    PageInfo<AddUpSituationDTO> listPage(AddUpSituationQueryParam queryParam);

    /**
     * 获取数据采集-累计情况详情列表
     *
     * @param queryParam
     * @return
     */
    PageInfo<AddUpSituationRecordDTO> recordListPage(AddUpSituationQueryParam queryParam);

    /**
     * 获取累计情况
     *
     * @param taxYearMonth
     * @param employeeIds
     * @return
     */
    List<AddUpSituation> getAddUpSituationList(YearMonth taxYearMonth, List<Long> employeeIds);

    XSSFWorkbook export(AddUpSituationQueryParam queryParam);


    XSSFWorkbook exportDetail(AddUpSituationQueryParam queryParam);

    Map<String, Object> preview(AddUpSituationImportParam importParam);

    Map<String, Object> importAddUpSituation(AddUpSituationImportParam importParam);

    /**
     * 删除累计情况
     *
     * @return
     */
    boolean deleteAddUpSituationList(Date taxCycle,Long taxAgentId);

    XSSFWorkbook downloadTemplate(AddUpSituationQueryParam queryParam);

    boolean deleteByTaxYearMonthAndTaxAgentIds(YearMonth localDate2YearMonth, Collection<Long> taxAgentIds);

    void batchSave(List<AddUpSituation> list);

    /**
     * @description 编辑数据
     * @return void
     * @author Harryxzy
     * @date 2022/10/27 22:03
     */
    void editAddUpSituation(AddUpSituationParam addUpSituationParam);

    /**
     * @description 新建数据
     * @return void
     * @author Harryxzy
     * @date 2022/10/27 22:03
     */
    void createAddUpSituation(AddUpSituationParam addUpSituationParam);

    /**
     * @description 删除所选数据
     * @return void
     * @author Harryxzy
     * @date 2022/10/27 22:35
     */
    void deleteSelectAddUpSituation(AddUpSituationDeleteParam deleteParam);

    /**
     * @description 一键清空所有数据
     * @return null
     * @author Harryxzy
     * @date 2022/10/27 22:35
     */
    void deleteAllAddUpSituation(AddUpSituationDeleteParam addUpSituationDeleteParam);

    /**
     * @description 获取往期累计情况
     * @return void
     * @author Harryxzy
     * @date 2022/10/31 14:00
     */
    AddUpSituationRecordDTO getAddUpSituation(AddUpSituationParam addUpSituationParam);
}
