package cn.iocoder.yudao.module.system.dal.dataobject.attendance.punchrecord;

import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;

import java.time.LocalDateTime;

/**
 * 用户打卡记录 DO
 *
 * @author 艾楷
 */
@TableName("kq_attendance_punch_record")
@KeySequence("kq_attendance_punch_record_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库，可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class AttendancePunchRecordDO extends BaseDO {

    /**
     * 编号
     */
    @TableId
    private Long id;
    /**
     * 考勤用户id
     */
    private Long userId;
    /**
     * 部门id
     */
    private Long deptId;
    /**
     * 考勤组id
     */
    private Long attendanceGroupId;
    /**
     * 考勤组名称
     */
    private String attendanceGroupName;
    /**
     * 班次id
     */
    private Long attendanceGroupShiftId;
    /**
     * 班次名称
     */
    private String attendanceGroupShiftName;
    /**
     * 班次子表id
     */
    private Long attendanceGroupShiftItemId;
    /**
     * 考勤类型 1固定班制 2排班制
     */
    private Integer type;
    /**
     * 打卡类型 1考勤机 2小程序范围打卡
     */
    private Integer punchType;

    /**
     * 上下班类型 0上班 1下班
     */
    private Integer workType;

    /**
     * 级别 1到～
     */
    private Integer level;

    /**
     * 打卡状态 0正常 1迟到 2早退 3缺卡 4未打卡(还没到打卡时间) 5补卡 6请假
     */
    private Integer status;

    /**
     * 明天的打卡 0否 1是 (业务需要 先把明天的打卡统计出来)
     */
    private Integer nextDayFlag;

    /**
     * 是否外勤 0否 1是
     */
    private Integer fieldServiceFlag;
    /**
     * 日期yyyy-MM-dd格式 (归属于哪一天)
     */
    private String dayTime;

    /**
     * 日期yyyy-MM-dd格式 (实际是哪一天)
     */
    private String actualDayTime;
    /**
     * 打卡时间
     */
    private LocalDateTime punchTime;
    /**
     * 应打卡时间
     */
    private LocalDateTime shouldPunchTime;
    /**
     * 最晚打卡时间(超过即为缺卡)
     */
    private LocalDateTime latestPunchTime;
    /**
     * 打卡备注
     */
    private String remark;
    /**
     * 图片
     */
    private String image;

    /**
     * 用户打卡地点
     */
    private String punchAddress;

    /**
     * 迟到时长时间戳
     */
    private Long lateTime;

    /**
     * 早退时长时间戳
     */
    private Long leaveEarlyTime;

    /**
     * 下班加班时长时间戳
     */
    private Long downWorkOvertimeTime;

    /**
     * 上班加班时长时间戳
     */
    private Long upWorkOvertimeTime;

    /**
     * 是否已提醒 0否 1是
     */
    private Integer remindFlag;

    /**
     * 请假单id
     */
    private Long leaveId;

    /**
     * 请假类型
     */
    private String leaveType;

    @TableField(exist = false)
    private String deptName;

    /**
     * 补卡状态 0无补卡 1补卡中
     */
    @TableField(exist = false)
    private Integer replacementCardStatus = 0;
}
