package com.xiaopeng.maintenance.service;
import com.xiaopeng.api.model.maintenance.XpClockIn;
import com.baomidou.mybatisplus.extension.service.IService;
import com.xiaopeng.common.core.domain.R;
import com.xiaopeng.common.core.web.page.PageInfo;
import com.xiaopeng.maintenance.dto.*;
import com.xiaopeng.maintenance.vo.ClockInStatisticsDetailsVo;
import com.xiaopeng.maintenance.vo.ClockInStatisticsVo;
import org.springframework.web.bind.annotation.RequestBody;
import javax.servlet.http.HttpServletResponse;
import java.time.LocalDate;
/**
*
* 打卡明细 服务类
*
*
* @author mitao
* @since 2026-02-03
*/
public interface IXpClockInService extends IService {
/**
* 验证打卡范围
*
* @param dto
* @return
*/
Boolean verifyRange(VerifyRangeDTO dto);
/**
* 打卡
*
* @param dto
* @return
*/
R clockIn(ClockDTO dto);
/**
* 下班打卡
*
* @param dto
* @return
*/
R clockOut(ClockDTO dto);
/**
* 补充上班缺卡记录
*
* @param appUserId 用户ID
* @param shiftId 班次ID
* @param attendanceDate 考勤日期
* @return 是否新增成功
*/
boolean createMissingClockInIfAbsent(Long appUserId, Long shiftId, LocalDate attendanceDate);
/**
* 检查用户是否上班中
* @param appUserId 用户ID
* @return true=上班中(只打了上班卡), false=未上班或已下班
*/
Integer checkWorkStatus(Long appUserId);
/**
* 获取打卡统计
* @param query
* @return
*/
PageInfo getClockInStatistics(ClockInStatisticsVo query);
/**
* 导出打卡统计
* @param vo
* @param response
*/
void exportClockInStatistics(ClockInStatisticsVo vo, HttpServletResponse response);
/**
* 获取打卡统计详情
* @param query
* @return
*/
GetClockInStatisticsDetailsDto getClockInStatisticsDetails(ClockInStatisticsDetailsVo query);
/**
* 导出打卡统计详情
* @param vo
* @param response
*/
void exportClockInStatisticsDetails(ClockInStatisticsDetailsVo vo, HttpServletResponse response);
}