package com.engine.salary.mapper.siarchives;

import com.engine.salary.entity.siarchives.po.InsuranceArchivesEmployeePO;
import com.engine.salary.entity.siarchives.po.InsuranceArchivesOtherSchemePO;
import org.apache.ibatis.annotations.Param;

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

/**
 * @Author weaver_cl
 * 
 * @Date 2022/3/15
 * @Version V1.0
 **/
public interface OtherSchemeMapper {

    /**
     * 根据员工id获取
     * @param employeeId
     * @return
     */
    List<InsuranceArchivesOtherSchemePO> getOtherByEmployeeId(@Param("employeeIds")List<Long> employeeId);

    /**
     * 根据人员id和个税扣缴人id获取记录
     * @param insuranceArchivesEmployeePO
     * @return
     */
    List<InsuranceArchivesOtherSchemePO> getOtherByEmployeeIdAndPayOrg(@Param("param") InsuranceArchivesEmployeePO insuranceArchivesEmployeePO);

    /**
     * 根据id获取
     * @param ids
     * @return
     */
    List<InsuranceArchivesOtherSchemePO> getOtherById(@Param("ids")List<Long> ids);

    /**
     * 根据id获取单条
     * @param id
     * @return
     */
    InsuranceArchivesOtherSchemePO getOneById(@Param("id")Long id);

    /**
     * 批量删除
     * @param singletonList
     */
    void batchDeleteByEmployeeIds(@Param("employeeIds") Collection<Long> singletonList);

    /**
     * 根据人员id和个税扣缴义务人删除档案
     * @param insuranceArchivesOtherSchemePO
     */
    void deleteByEmployeeIdAndPayOrg(@Param("param") InsuranceArchivesOtherSchemePO insuranceArchivesOtherSchemePO);
    /**
     * 批量保存
     * @param singletonList
     */
    void batchSave(@Param("otherSchemePOS") List<InsuranceArchivesOtherSchemePO> singletonList);

    /**
     * 根据个税扣缴义务人id获取目标账单月可以进行缴纳的人员id
     * 筛选条件为账单月是否在起始缴纳月和最后缴纳月之间
     * @param paymentOrganization
     * @return
     */
    List<Long> listCanPayEmpIds(@Param("paymentOrganization")Long paymentOrganization, @Param("billMonth")String billMonth);

    List<InsuranceArchivesOtherSchemePO> listAll();

    int batchUpdate(@Param("collection") List<InsuranceArchivesOtherSchemePO> pos);

    /**
     * 批量更新最后缴纳月
     * @param ids
     * @param endTime
     */
    void batchUpdateEndTime(@Param("ids")List<Long> ids, @Param("endTime")String endTime);

    int updateById(InsuranceArchivesOtherSchemePO insuranceArchivesOtherSchemePO);

    /**
     * 批量更新最后缴纳月为null
     * @param ids
     */
    void batchUpdateEndTimeToNull(@Param("ids")List<Long> ids);

    /**
     * 根据id删除
     * @param otherArchiveDelIds
     */
    void deleteByIds(@Param("ids") List<Long> otherArchiveDelIds);

    /**
     * 新增
     * @param insuranceArchivesOtherSchemePO
     */
    void insert(InsuranceArchivesOtherSchemePO insuranceArchivesOtherSchemePO);

    /**
     * 更新最后缴纳月
     * @param id
     * @param endTime
     */
    void updateEndTime(@Param("id")Long id, @Param("endTime")String endTime);
}
