package com.yonyou.hrcloud.attentrpt.dao;

import com.yonyou.hrcloud.adder.ext.annotation.MBDao;
import com.yonyou.hrcloud.adder.model.query.Condition;
import com.yonyou.hrcloud.attentrpt.model.AttendDayRptVO;
import com.yonyou.hrcloud.attentrpt.model.AttendMonthRptVO;
import com.yonyou.hrcloud.attentrpt.model.AttendRptBVO;
import com.yonyou.hrcloud.attentrpt.model.AttendRptBaseVO;
import org.apache.ibatis.annotations.Param;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 日月报数据更新服务
 * Created by hongwei.xu on 2017/8/18.
 */
@MBDao
public interface IAttendRptCalDao {

    /**
     * 批量插入日报数据
     *
     * @param colnums - 列
     * @param values  - 值
     */
    void batchInsert4Day(@Param("colnums") String colnums, @Param("values") List values);

    /**
     * 批量插入月报数据
     *
     * @param colnums - 列
     * @param values  - 值
     */
    void batchInsert4Mon(@Param("colnums") String colnums, @Param("values") List values);

    /**
     * 批量插入日月报子表数据
     *
     * @param list
     */
    void batchInsertRptBVOs(List<AttendRptBVO> list);

    /**
     * 删除烤漆日报数据
     *
     * @param ids
     */
    void batchDel4Day(List ids);
    /**
     * 删除烤漆日报数据
     *
     * @param list
     */
    void batchDel4DayCondition(List<AttendDayRptVO> list);
    /**
     * 删除考勤月报数据
     *
     * @param ids
     */
    void batchDel4Mon(List ids);
    /**
     * 删除考勤月报数据
     *
     * @param list
     */
    void batchDel4MonCondition(List<AttendMonthRptVO> list);
    /**
     * 删除日月报子表 根据主表ID
     *
     * @param ids
     */
    void batchDel4RptBByPid(List ids);

    /**
     * 判断是否被日月报引用
     * @param tableName
     * @param whereSql
     * @return
     */
    AttendRptBaseVO isReferencing(@Param("tableName") String tableName, @Param("whereSql") String whereSql);
    Page<AttendRptBaseVO> isReferencing(@Param("tableName") String tableName, @Param("whereSql") String whereSql,Pageable pageable);

    List<String> queryDayRptByCondition(@Param("staffids") List staffids, @Param("begindate") Date begindate, @Param("enddate") Date enddate);

    /***
     * 使用临时表查询
     * @param cond
     * @return
     */
    List<String> queryDayRptByConditionTempTable(@Param("cond") Condition cond);

    List<String> queryMonRptByCondition(@Param("staffids") List staffids, @Param("year") String year, @Param("month") String month,@Param("deptIds") List deptIds);

    /***
     * 使用临时表查询
     * @param cond
     * @return
     */
    List<String> queryMonRptTempTable(@Param("cond") Condition cond);

    List<String> queryMonRptByOrgCondition(@Param("staffids") List staffids, @Param("year") String year, @Param("month") String month,@Param("orgIds") List orgIds);
    List<Map> queryMonthRptInfoByCondition(@Param("cond") Condition cond);

    /**
     * 删除日报不考勤数据
     * @param begindate
     * @param enddate
     */
    void delNoAttendDayRpts(@Param("begindate") String begindate, @Param("enddate") String enddate);

    /**
     * 删除月报不考勤数据
     * @param year
     * @param month
     */
    void delNoAttendMonRpts(@Param("year") String year, @Param("month") String month);

    List<String> queryApproveMonthRptInfo(@Param("staffids") List staffids, @Param("begindate") String begindate, @Param("enddate") String enddate);

    /**
     * 删除日报数根据条件
     */
    void batchDel4Day4Task(@Param("begindate") String begindate, @Param("enddate") String enddate);

    /**
     * 删除日月报子表 根据条件
     */
    void batchDel4RptB4Task(@Param("begindate") String begindate, @Param("enddate") String enddate, @Param("year") String year, @Param("month") String month, @Param("rptType") Integer rptType);

    /***
     * 使用临时表查询
     * @param cond
     * @return
     */
    void delDayByCondition(@Param("cond") Condition cond);
    /***
     * 使用临时表查询
     * @param cond
     * @return
     */
    void delRptBByCondition(@Param("cond") Condition cond);
    
    /**
     * 查询人员信息子表数据
     * @param pk_psndoc
     * @param year
     * @param month
     * @return
     */
    List<Map> queryGlbdef3(@Param("pk_psndoc")String pk_psndoc,@Param("year")String year,@Param("month")String month);
    
    /**
     * 查询人员信息子表数据
     * @param pk_psndoc
     * @param year
     * @param month
     * @return
     */
    List<Map> queryYearGlbdef3(@Param("pk_psndoc")String pk_psndoc,@Param("year")String year);
    
    /**
     * 查询考勤项目对应的id
     * @return
     */
    List<Map> queryKQItem();
}
