package com.engine.salary.service;

import com.engine.salary.entity.salaryBill.param.SalaryBillItemNameSaveParam;
import com.engine.salary.entity.salaryBill.po.SalaryBillItemNamePO;

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

/**
 * @author Harryxzy
 * @ClassName SalaryBillItemNameService
 * @date 2023/07/18 16:15
 * @description 工资单薪资项目展示名称
 */
public interface SalaryBillItemNameService {
    /**
     * 查询所有记录
     *
     * @return 返回集合，没有返回空List
     */
    List<SalaryBillItemNamePO> listAll();


    /**
     * 根据主键查询
     *
     * @param id 主键
     * @return 返回记录，没有返回null
     */
    SalaryBillItemNamePO getById(Long id);

    /**
     * 新增，忽略null字段
     *
     * @param salaryBillItemNamePO 新增的记录
     * @return 返回影响行数
     */
    int insertIgnoreNull(SalaryBillItemNamePO salaryBillItemNamePO);

    /**
     * 修改，修改所有字段
     *
     * @param salaryBillItemNamePO 修改的记录
     * @return 返回影响行数
     */
    int update(SalaryBillItemNamePO salaryBillItemNamePO);

    /**
     * 修改，忽略null字段
     *
     * @param salaryBillItemNamePO 修改的记录
     * @return 返回影响行数
     */
    int updateIgnoreNull(SalaryBillItemNamePO salaryBillItemNamePO);

    /**
     * 删除记录
     *
     * @param id 待删除的记录id
     * @return 返回影响行数
     */
    int delete(Long id);

    /**
     * 根据工资单模板id和工资单类型获取 设置的项目名称信息
     * @param build
     * @return
     */
    List<SalaryBillItemNamePO> ListByTemplateAndType(SalaryBillItemNamePO build);

    /**
     * 设置工资单薪资项目显示名
     * @param saveList
     */
    void saveItemShowName(List<SalaryBillItemNameSaveParam> saveList);

    /**
     * 批量更新
     * @param needUpdateList
     */
    void batchUpdate(List<SalaryBillItemNamePO> needUpdateList);

    /**
     * 批量插入
     * @param needInsertList
     */
    void batchInsert(List<SalaryBillItemNamePO> needInsertList);

    /**
     * 根据id批量删除
     * @param needDeleteIds
     */
    void deleteByIds(List<Long> needDeleteIds);

    /**
     * 根据工资单模板id删除
     * @param ids
     */
    void deleteByTemplateIds(Collection<Long> ids);
}
