package jnpf.personnels.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import jnpf.model.personnels.dto.rewardspunishments.FtbEmployeeRewardRecordsQueryDTO;
import jnpf.model.personnels.dto.rewardspunishments.FtbPersonnelSalaryRewardDTO;
import jnpf.model.personnels.dto.rewardspunishments.FtbPersonnelsRewardsPunishmentQueryDTO;
import jnpf.model.personnels.dto.salary.FtbSalaryMetaDataQueryDto;
import jnpf.model.personnels.po.FtbPersonnelsRewardsPunishments;
import jnpf.model.personnels.vo.rewardspunishments.FtbEmployeeRewardRecordsVO;
import jnpf.model.personnels.vo.rewardspunishments.FtbPersonnelSalaryRewardVO;
import jnpf.model.personnels.vo.rewardspunishments.FtbPersonnelsRewardsPunishmentQueryVO;
import jnpf.model.personnels.vo.rewardspunishments.FtbXcEmployeeRewardRecordsVO;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;

/**
 * <p>
 * 人事奖惩表 Mapper 接口
 * </p>
 *
 * @author wcx
 * @since 2024-05-08
 */
public interface FtbPersonnelsRewardsPunishmentsMapper extends BaseMapper<FtbPersonnelsRewardsPunishments> {

    /**
     * 查询指定类型的排序最大值
     *
     * @return 最大排序值
     */
    Integer queryTheMaximumValueOfSorting();

    /**
     * 更新排序值
     *
     * @param sortValue 排序值
     * @return 更新的记录数
     */
    Integer updateSortValue(@Param("sortValue") Integer sortValue);

    /**
     * 查询奖励和处罚信息
     *
     * @param rewardsPunishmentQueryDTO 查询参数对象
     * @return 奖励和处罚信息列表
     */
    List<FtbPersonnelsRewardsPunishmentQueryVO> listQuery(@Param("params") FtbPersonnelsRewardsPunishmentQueryDTO rewardsPunishmentQueryDTO);

    /**
     * 向下更新排序范围
     *
     * @param minSort 最小排序值
     * @param maxSort 最大排序值
     * @param id 记录ID
     * @param type 排序类型
     * @return 更新的记录数
     */
    Integer updateSortDownward(@Param("minSort") Integer minSort, @Param("maxSort") Integer maxSort,
                               @Param("id") String id);

    /**
     * 向下更新排序范围
     *
     * @param minSort 最小排序值
     * @param maxSort 最大排序值
     * @param id 记录ID
     * @param type 排序类型
     * @return 更新的记录数
     */
    Integer updateSortDownwardS(@Param("minSort") Integer minSort, @Param("maxSort") Integer maxSort,
                                @Param("id") String id);

    /**
     * 查询总工资和奖励信息
     *
     * @param ftbPersonnelSalaryRewardDTO 查询参数对象
     * @return 总工资和奖励信息列表
     */
    List<FtbPersonnelSalaryRewardVO> queryTheTotalSalaryAndRewards(@Param("params") FtbPersonnelSalaryRewardDTO ftbPersonnelSalaryRewardDTO);

    /**
     * 查询总工资和处罚信息
     *
     * @param ftbPersonnelSalaryRewardDTO 查询参数对象
     * @return 总工资和处罚信息列表
     */
    List<FtbPersonnelSalaryRewardVO> queryTheTotalSalaryAndPenaltys(@Param("params") FtbPersonnelSalaryRewardDTO ftbPersonnelSalaryRewardDTO);

    BigDecimal salaryMetaDataQuery(FtbSalaryMetaDataQueryDto dto);


    List<FtbXcEmployeeRewardRecordsVO> salaryBatchMetaDataQuery(FtbSalaryMetaDataQueryDto dto);

    /**
     * 员工奖惩记录分页查询
     *
     * @param page 分页对象
     * @param queryDTO 查询参数对象
     * @return 员工奖惩记录分页数据
     */
    Page<FtbEmployeeRewardRecordsVO> employeeRewardAndPunishmentRecords(@Param("page") Page<FtbEmployeeRewardRecordsVO> page, @Param("params") FtbEmployeeRewardRecordsQueryDTO queryDTO);

    FtbEmployeeRewardRecordsVO queryDetail(@Param("id") String id);
}
