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 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 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(String pushDate);

    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);

    /**
     * 查询指定时间内存在考勤人员列表的日期
     * @param startDate
     * @param days
     * @return
     */
    List<String> getAttSettingDate(@Param("startDate") String startDate,@Param("days") int days);

    /**
     * 查询历史某天应考勤人员
     * @param currentDay
     * @return
     */
    List<AttGroupBean> getAttSettingHistoryDate(String currentDay);

    /**
     * 将历史某天应考勤人员插入到考勤人员列表
     * @param attList
     */
    void insertAttSettingHistoryData(List<AttGroupBean> attList);

    /**
     * 查询当天应考勤人员
     * @param pushDate
     * @return
     */
    List<AttDataBean> getAttPerson(String pushDate);

    void insertAttDataList(List<AttDataBean> listPerson);

    /**
     * 查询当天考勤模版人员
     * @param pushDate
     * @return
     */
    List<Long> getAttDataPerson(String pushDate);

    /***
     * 查询当天考勤状态为未打卡人员(att_data)
     * @param pushDate
     * @return
     */
    List<AttDataBean> getAttDataByStatus(@Param("pushDate") String pushDate,@Param("attType") String attType);

    /***
     * 查询当天考勤状态为未打卡人员(att_data_update)
     * @param pushDate
     * @return
     */
    List<AttDataBean> getAttDataUpdateByStatus(@Param("pushDate") String pushDate,@Param("attType") String attType);

    /**
     * 超过时间未打卡的补为旷工(att_data)
     * @param list
     */
    void updateAttDataList(List<AttDataBean> list);
    /**
     * 超过时间未打卡的补为旷工(att_data_update)
     * @param list
     */
    void updateAttDataUpdateList(List<AttDataBean> list);

    /**
     * 当日是否为法假
     * @param pushDate
     * @return
     */
    List<Holiday> selectHolidayByDay(String pushDate);

    /**
     * 请假数据更新--修改考勤状态
     * @param v
     */
    void updateLeaveData(@Param("v") AttDataBean v);

    /**
     * 查询月模版数据
     * @param pushDate
     * @return
     */
    List<AttMonthReportBean> selectAttMonthReportTemp(String pushDate);
    /**
     * 生成月模版数据
     * @param monthReportList
     * @return
     */
    void insertAttMonthReportTemp(List<AttMonthReportBean> monthReportList);
    /**
     * 修改月计划数据
     * @param monthReportList
     * @return
     */
    void updateAttMonthReport(List<AttMonthReportBean> monthReportList);

    /**
     * 查询已生成月报表人员
     * @param pushDate
     * @return
     */
    List<Long> getAttMonthReportPerson(String pushDate);
}
