package jnpf.attendance.mapper;


import jnpf.entity.attendance.AttendanceBalanceRecordEntity;
import jnpf.entity.attendance.AttendanceStorageRest;
import jnpf.model.attendance.model.*;
import jnpf.model.attendance.vo.AttendanceBalanceRecordVo;
import jnpf.model.attendance.vo.UserBalanceVo;
import jnpf.model.attendance.vo.VacationVo;
import org.apache.ibatis.annotations.Param;

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

public interface AttendanceBalanceRecordMapper {

    /**
     * 余额管理列表
     *
     * @param balanceQueryDto 查询参数
     * @return java.util.List<jnpf.model.attendance.vo.UserBalanceVo>
     * @author hlp
     */
//    @Deprecated
//    List<UserBalanceVo> getBalanceList(@Param("balanceQueryDto") BalanceQueryDto balanceQueryDto, @Param("balanceSort") String balanceSort, @Param("paidBalanceSort") String paidBalanceSort, @Param("unpaidBalanceSort") String unpaidBalanceSort, @Param("adventBalance") String adventBalance);



    /**
     * 新增假期节假日劵
     *
     * @param id           主键id
     * @param userId       用户
     * @param holidayName  节假日名称
     * @param dayNum       总额
     * @param expiresTime  过期时间
     * @param unit         单位 :  1 :小时 2: 天
     * @param grantWay     发放方式  0.自动发放  1.手动发放
     * @param createUserId 创建人
     * @param paid         是否带薪（1带薪 2非带薪）
     * @param type         类型 : 1.节日 2.假日 3.加班
     * @param objectId     关联id和Type联合使用 节日时是节日id 假日是是假日id 加班时是加班id
     * @author hlp
     */
//    @Deprecated
//    void grantBalance(@Param("id") String id, @Param("userId") String userId, @Param("holidayName") String holidayName, @Param("dayNum") BigDecimal dayNum, @Param("expiresTime") Date expiresTime, @Param("unit") Integer unit, @Param("grantWay") Integer grantWay, @Param("createUserId") String createUserId, @Param("paid") Integer paid, @Param("type") Integer type, @Param("objectId") String objectId);

    /**
     * 余额记录列表
     *
     * @param balanceQueryDto 参数
     * @return java.util.List<jnpf.model.attendance.vo.AttendanceBalanceRecordVo>
     * @author hlp
     */
//    @Deprecated
//    List<AttendanceBalanceRecordVo> getUserBalance(@Param("balanceQueryDto") BalanceQueryDto balanceQueryDto);

    /**
     * 成员余额记录列表
     *
     * @param balanceQueryDto 参数
     * @return java.util.List<jnpf.model.attendance.vo.AttendanceBalanceRecordVo>
     * @author hlp
     */
//    @Deprecated
//    List<AttendanceBalanceRecordVo> getUserBalanceDetail(@Param("balanceQueryDto") BalanceQueryDto balanceQueryDto);

    /**
     * 修改指定劵的状态
     *
     * @param id    劵的id
     * @param state 状态 0 正常 1 过期 2已停用
     * @author hlp
     */
//    @Deprecated
//    void updateBalanceState(@Param("id") String id, @Param("state") Integer state, @Param("userId") String userId);

    /**
     * 获取用户余额
     *
     * @param userId 用户id
     * @return jnpf.model.attendance.vo.UserBalanceVo
     * @author hlp
     */
    @Deprecated
    UserBalanceVo getBalanceByUserId(@Param("userId") String userId);

    /**
     * 过期劵
     *
     * @author hlp
     */
    void invalidationCoupons(@Param("ids") List<String> ids);

    /**
     * 获取节日信息
     *
     * @param balanceId 节日id
     * @return jnpf.model.attendance.vo.VacationVo
     * @author hlp
     */
    VacationVo getFestivalSetting(@Param("balanceId") String balanceId);

    /**
     * 获取假日配置信息
     *
     * @param balanceId 假日id
     * @return jnpf.model.attendance.vo.VacationVo
     * @author hlp
     */
    VacationVo getHolidaySetting(@Param("balanceId") String balanceId);

    /**
     * 获取用户的劵过期的排前面
     *
     * @param userId 用户id
     * @param paid   是否带薪（1带薪 2非带薪）
     * @return java.util.List<jnpf.model.attendance.vo.AttendanceBalanceRecordVo>
     * @author hlp
     */
    @Deprecated
    List<AttendanceBalanceRecordVo> getBalanceRecordByUserId(@Param("userId") String userId, @Param("paid") List<Integer> paid);

    /**
     * 修改劵的使用情况
     *
     * @param id      主键id
     * @param balance 余额
     * @param over    是否使用完 0未使用完 1使用完
     * @author hlp
     */
    void updateBalance(@Param("id") String id, @Param("balance") BigDecimal balance, @Param("over") Integer over);

    /**
     * 获取用户指定类型假的余额总数
     *
     * @param userId 用户id
     * @param paid   是否带薪（1带薪 2非带薪）
     * @return java.math.BigDecimal
     * @author hlp
     */
//    BigDecimal getBalanceRecordCountByUserId(@Param("userId") String userId, @Param("paid") Integer paid);


    /**
     * 通过劵的id获取劵的详情
     *
     * @param balanceIds 劵的id
     * @return java.util.List<jnpf.model.attendance.vo.AttendanceBalanceRecordVo>
     * @author hlp
     */
    List<AttendanceBalanceRecordVo> getBalanceDetailList(@Param("balanceIds") List<String> balanceIds);

    /**
     * 验证出勤规则id有无发加班劵
     *
     * @param ruleId 出勤规则id
     * @return java.lang.Integer
     * @author hlp
     */
    Integer getBalanceByRuleId(@Param("ruleId") String ruleId);

    /**
     * 批量获取用户余额
     *
     * @param userIds 用户ids
     */
    List<UserBalanceVo> getBalanceByUserIds(@Param("userIds") List<String> userIds);

    /**
     * 根据申请id集合批量获取用户余额
     *
     * @param applyIds 申请id集合
     */
    List<BalanceRecord> getBalanceByApplyIds(@Param("applyIds") List<String> applyIds);

    /**
     * 获取用户余额
     *
     * @return
     */
    List<AttendanceStorageRest> getStraightBalanceList();


    /**
     * 删除当月存休
     */
    void deleteByYearMonth(@Param("lastMonthDate") String lastMonthDate);

    /**
     * 查询用户加班存休天数以及剩余天数
     *
     * @param userIds 用户id集合
     */
    List<OvertimeBalanceModel> getOvertimeBalanceInfo(@Param("startDate") Date startDate, @Param("endDate") Date endDate,
                                                      @Param("userIds") List<String> userIds);

    /**
     * 查询用户存休剩余天数
     *
     * @param userIds 用户id集合
     */
    List<SurplusDaysModel> getSurplusDaysInfo(@Param("userIds") List<String> userIds);

    /**
     * 查询用户节假日加班天数
     *
     * @param userIds 用户id集合
     */
    List<OvertimeHolidaysInfoModel> getOvertimeHolidaysInfo(@Param("startDate") Date startDate, @Param("endDate") Date endDate,
                                                            @Param("userIds") List<String> userIds);
    /**
     * 查询查询用户各个请假类型余额天数
     *
     * @param userIds 用户id集合
     */
    List<LeaveBalanceInfoModel> getLeaveBalanceInfo(@Param("startDate") Date startDate, @Param("endDate") Date endDate,
                                                    @Param("userIds") List<String> userIds);

    /**
     * 查询查询用户各个请假审批数据
     *
     * @param userIds 用户id集合
     */
    List<LeaveApprovalModel> getLeaveApprovalInfo(@Param("leaveIds") List<String> leaveIds,
                                                  @Param("userIds") List<String> userIds);

    List<AttendanceBalanceRecordEntity> selectInvalidationCoupons();

}