package jnpf.attendance.service;

import com.github.pagehelper.PageInfo;
import jnpf.base.service.SuperService;
import jnpf.entity.attendance.AttendanceConfirm;
import jnpf.model.attendance.dto.ConfirmPageListDto;
import jnpf.model.attendance.dto.ConfirmStatisticsDto;
import jnpf.model.attendance.vo.attendance.ConfirmDetailsVo;
import jnpf.model.attendance.vo.attendance.ConfirmPageListVo;
import jnpf.model.attendance.vo.attendance.ConfirmStatisticsVo;
import jnpf.model.thousandsfaces.TodayWorkVo;

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

/**
 * 考勤确认
 *
 * @author shitou
 * @email shitou@niujiekeji.com
 * @date 2024-11-07 09:33:43
 */
public interface AttendanceConfirmService extends SuperService<AttendanceConfirm> {
    /**
     * 获取考勤确认默认月份
     *
     * @return 月份
     */
    String getConfirmMonth();

    /**
     * 考勤确认列表展示
     *
     * @param dto 筛选条件
     * @return 考勤确认列表
     */
    PageInfo<ConfirmPageListVo> getPageList(ConfirmPageListDto dto);

    /**
     * 考勤确认聚合统计
     *
     * @param dto 筛选条件
     * @return 考勤确认列表
     */
    ConfirmStatisticsVo getStatistics(ConfirmStatisticsDto dto);

    /**
     * 考勤确认详情
     *
     * @param id 确认ID
     * @return 考勤确认详情
     */
    ConfirmDetailsVo getConfirmDetails(String id);

    /**
     * 获取App考勤确认详情
     *
     * @return 考勤确认详情
     */
    ConfirmDetailsVo getAppConfirmDetails(String id);

    /**
     * 自动生成考勤确认数据
     *
     * @return 生成是否成功
     */
    boolean autoCreateConfirm();

    /**
     * 生成考勤确认数据
     *
     * @param year           年份
     * @param month          月份
     * @param startTime      开始时间
     * @param slippageResult 逾期是否自动确认
     */
    void createConfirm(int year, int month, Date expectedTime, Date startTime, Integer slippageResult);

    /**
     * 逾期自动确认
     *
     * @return 逾期自动确认是否成功
     */
    boolean confirmAutoSlippage();

    /**
     * 温馨提示关闭
     *
     * @param id 考勤确认id
     * @return 关闭结果
     */
    Boolean tipsClos(String id);

    /**
     * 温馨提示关闭
     *
     * @param id 考勤确认id
     * @return 关闭结果
     */
    Boolean confirmDetailsSubmit(String id);

    /**
     * App已查看
     *
     * @param id 考勤确认id
     * @return 关闭结果
     */
    Boolean look(String id);

    /**
     * 今日工作-考勤确认列表(0-待确认 1-已确认 2-已逾期)
     *
     * @return 考勤确认列表
     */
    List<TodayWorkVo> getTodayWorkConfirmList();
}
