package jnpf.model.attendance.model;

import lombok.Data;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

/**
 * 考勤统计列表返回类
 *
 * @author shitou
 * @date 2023/11/21
 */
@Data
public class UserStatistics {
    /**
     * 用户id
     */
    private String userId;
    /**
     * 应出勤天数
     */
    private Integer shouldAttendDays = 0;
    /**
     * 应出勤工时
     */
    private BigDecimal shouldAttendHours = BigDecimal.ZERO;
    /**
     * 实际出勤天数
     */
    private BigDecimal actualAttendDays = BigDecimal.ZERO;
    /**
     * 实际出勤工时
     */
    private BigDecimal actualAttendHours = BigDecimal.ZERO;
    /**
     * 有效出勤天数集合
     */
    private List<RealityAttendanceOneDays> effectiveAttendDaysList = new ArrayList<>();
    /**
     * 有效出勤天数
     */
    private BigDecimal effectiveAttendDays = BigDecimal.ZERO;
    /**
     * 有效出勤工时
     */
    private BigDecimal effectiveAttendHours = BigDecimal.ZERO;
    /**
     * 带薪假时长
     */
    private BigDecimal paidLeaveHours = BigDecimal.ZERO;
    /**
     * 非带薪假时长
     */
    private BigDecimal unpaidLeaveHours = BigDecimal.ZERO;
    /**
     * 请假天数
     */
    private BigDecimal leaveDays = BigDecimal.ZERO;

    /**
     * 请假次数
     */
    private Integer leaveTimes = 0;

    /**
     * 请假时长
     */
    private BigDecimal leaveHours = BigDecimal.ZERO;
    /**
     * 请假集合
     */
    private List<PersonDetail> askLeaveList = new ArrayList<>();

    /**
     * 未抵扣请假时长
     */
    private BigDecimal unDeductedLeaveHours = BigDecimal.ZERO;

    /**
     * 加班次数
     */
    private Integer overtimeTimes = 0;

    /**
     * 加班时长
     */
    private BigDecimal overtimeHours = BigDecimal.ZERO;

    /**
     * 外勤打卡次数
     */
    private Integer outworkClockTimes = 0;
    /**
     * 缺勤次数
     */
    private Integer absenceTimes = 0;
    /**
     * 缺勤小时数
     */
    private BigDecimal absenceHours = BigDecimal.ZERO;
    /**
     * 缺勤天数
     */
    private BigDecimal absenceDays = BigDecimal.ZERO;
    /**
     * 缺卡次数(考勤月度统计)
     */
    private Integer absenceCardTimes = 0;
    /**
     * 缺卡次数(薪酬统计-不包含加班缺卡)
     */
    private Integer salaryAbsenceCardTimes = 0;
    /**
     * 缺卡时长(薪酬统计-不包含加班缺卡)
     */
    private BigDecimal salaryAbsenceCardHours = BigDecimal.ZERO;
    /**
     * 缺卡天数(薪酬统计-不包含加班缺卡)
     */
    private BigDecimal salaryAbsenceCardDays = BigDecimal.ZERO;
    /**
     * 补卡次数
     */
    private Integer makeUpCardTimes = 0;
    /**
     * 迟到次数
     */
    private Integer lateTimes = 0;
    /**
     * 迟到累计分钟
     */
    private BigDecimal lateAccumulatedMinutes = BigDecimal.ZERO;
    /**
     * 迟到集合
     */
    private List<PersonDetail> late = new ArrayList<>();
    /**
     * 早退次数
     */
    private Integer earlyLeaveTimes = 0;
    /**
     * 早退累计分钟
     */
    private BigDecimal earlyLeaveAccumulatedMinutes = BigDecimal.ZERO;
    /**
     * 早退集合
     */
    private List<PersonDetail> leaveEarly = new ArrayList<>();
    /**
     * 借调次数
     */
    Integer secondTimes = 0;
    /**
     * 借调天数
     */
    BigDecimal secondDays = BigDecimal.ZERO;
    /**
     * 借调记录
     */
    List<TimeJson> secondRecordList;
    /**
     * 请假统计数据
     */
    private List<LeaveStatistics> leaveStatistics = new ArrayList<>();
    /**
     * 查询用户考勤情况
     */
    List<SituationData> situationDataList;
    /**
     * 考勤组出差申请次数
     */
    Integer busTimes = 0;
    /**
     * 考勤组出差申请工时
     */
    BigDecimal busHours = BigDecimal.ZERO;
    /**
     * 考勤组外出申请次数
     */
    Integer outTimes = 0;
    /**
     * 考勤组外出申请工时
     */
    BigDecimal outHours = BigDecimal.ZERO;
}
