package com.bonus.system.att.dao;

import com.bonus.common.datasource.annotation.Slave;
import com.bonus.system.att.entity.*;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;

/**
 * 考勤数据来源 数据层
 *
 * @author zys
 */
@Repository("attSourceDataDao")
public interface AttSourceDataDao {

    /**
     * 查出黔送的考勤
     * @return list bean
     */
    List<AttSourceDataBean> getQsyAttendances(@Param("pushDate")String pushDate, @Param("pushType")int pushType);

    /**
     * 新增考勤到考勤来源表
     * @param attSourceList listbean
     */
    void insertAttSourceData(List<AttSourceDataBean> attSourceList);

    /**
     * 查出绑定考勤组的所有人员
     * @return list bean
     */
    List<AttDataBean> getAllPerson(String pushDate);

    /**
     * 新增到考勤数据表
     * @param attDataBean 参数
     */
    void insertAttData(AttDataBean attDataBean);

    /**
     * 查询三天的每日考勤情况
     * @return list bean
     */
    List<AttDayReportBean> selectAttDayReport(@Param("pushDate")String pushDate, @Param("pushType")int pushType);

    /**
     * 新增日报表
     * @param dayReportList list bean
     */
    void insertAttDayReport(List<AttDayReportBean> dayReportList);

    /**
     * 查询月考勤情况
     * @return list bean
     */
    List<AttMonthReportBean> selectAttMonthReport(@Param("pushDate")String pushDate);

    /**
     * 新增月报表
     * @param monthReportList list bean
     */
    void insertAttMonthReport(List<AttMonthReportBean> monthReportList);

    /**
     * 新增节假日
     * @param holiday 对象
     */
    void insertHoliday(Holiday holiday);

    /**
     * 查询一个月的节假日
     * @return list bean
     */
    List<Holiday> selectHolidayByMonth(@Param("pushDate")String pushDate, @Param("pushType")int pushType);

    /**
     * 查询人员的请假数据
     * @param bean 参数
     * @return list bean
     */
    Integer getPersonLeaveApplyStatus(AttSourceDataBean bean);

    /**
     * 查出最近三天的人员考勤记录
     * @return list bean
     */
    List<AttSourceDataBean> getSourceAttData(@Param("pushDate")String pushDate, @Param("pushType")int pushType);

    /**
     * 修改考勤数据
     * @param list list bean
     */
    void updateAttStatusData(List<AttSourceDataBean> list);

    /**
     * 查询att数据是否存在
     * @param v 参数
     * @return true|false
     */
    Boolean selectAttIsExist(AttDataBean v);

    /**
     * 查询att_update数据是否存在
     * @param v 参数
     * @return true|false
     */
    Boolean selectAttUpdateIsExist(AttDataBean v);

    /**
     * 新增到考勤修改表
     * @param attDataBean 参数
     */
    void insertAttUpdateData(AttDataBean attDataBean);

    /**
     * 修改考勤表的考勤状态
     * @param v 参数
     * @param type 0直接修改1考勤状态为未打卡才可修改
     */
    void updateAttData(@Param("v") AttDataBean v, @Param("type") int type);

    /**
     * 修改考勤修改表的考勤状态
     * @param v 参数
     * @param type 0直接修改1考勤状态为未打卡才可修改
     */
    void updateAttUpdateData(@Param("v") AttDataBean v, @Param("type") int type);

    @Slave
    List<AttSourceDataBean> getMachineAttendances(@Param("pushDate")String pushDate, @Param("pushType")int pushType);

    /**
     * 查询所有的请假数据
     * @return list bean
     */
    List<LeaveBean> getLeaveData();

    void updateHisData(String date);

    void delHisData(String date);

    /**
     * 查询人员固定时间请假消息
     * @param attSourceDataBean
     * @return
     */
    int getLeaveDataByUserId(AttSourceDataBean attSourceDataBean);

    /**
     * 插入工作异常
     * @param longBreakRecords
     */
    void insertWorkAbnormal(List<AttSourceDataBean> longBreakRecords);

    int getFirstAttendanceData(String date);

    void deleteAttMonthReport(String pushDate);
}
