package cn.iocoder.yudao.module.hrm.controller.admin.attendance.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; @Schema(description = "管理后台 - 我的考勤状态 Response VO") @Data public class HrmAttendanceMyStatusRespVO { @Schema(description = "登录用户ID", example = "464") private Long userId; @Schema(description = "员工档案ID", example = "233") private Long employeeId; @Schema(description = "员工姓名", example = "阿卜杜克热木·吾拉依木") private String employeeName; @Schema(description = "员工姓名(兼容旧版客户端)") private String userName; @Schema(description = "部门ID", example = "131") private Long deptId; @Schema(description = "部门名称", example = "钢结构车间") private String deptName; @Schema(description = "考勤日期", example = "2026-10-17") private LocalDate date; @Schema(description = "服务器时间", example = "2026-10-17 18:30:00") private LocalDateTime serverTime; @Schema(description = "是否工作日") private Boolean workDay; @Schema(description = "休息日原因,如:国庆节、周六") private String restDayReason; @Schema(description = "当前生效的考勤规则,未配置时为 null") private HrmAttendanceRuleRespVO rule; @Schema(description = "考勤规则名称(兼容旧版客户端)") private String ruleName; @Schema(description = "上班时间(兼容旧版客户端)") private LocalTime workStartTime; @Schema(description = "下班时间(兼容旧版客户端)") private LocalTime workEndTime; @Schema(description = "是否启用定位范围校验") private Boolean locationRequired; @Schema(description = "打卡地点名称") private String locationName; @Schema(description = "打卡地点地址") private String locationAddress; @Schema(description = "打卡中心经度(WGS84)") private BigDecimal longitude; @Schema(description = "打卡中心纬度(WGS84)") private BigDecimal latitude; @Schema(description = "允许打卡半径,单位米") private Integer radiusMeters; @Schema(description = "坐标系") private String coordinateSystem; @Schema(description = "当日考勤记录,未打卡时为 null") private HrmAttendanceRecordRespVO record; @Schema(description = "今日记录ID(兼容旧版客户端)") private Long recordId; @Schema(description = "上班打卡时间(兼容旧版客户端)") private LocalDateTime clockInTime; @Schema(description = "下班打卡时间(兼容旧版客户端)") private LocalDateTime clockOutTime; @Schema(description = "上班打卡类型(兼容旧版客户端)") private Integer clockInType; @Schema(description = "下班打卡类型(兼容旧版客户端)") private Integer clockOutType; @Schema(description = "是否已上班打卡(兼容旧版客户端)") private Boolean clockInDone; @Schema(description = "是否已下班打卡(兼容旧版客户端)") private Boolean clockOutDone; @Schema(description = "是否可上班打卡(兼容旧版客户端)") private Boolean canClockIn; @Schema(description = "是否可下班打卡(兼容旧版客户端)") private Boolean canClockOut; @Schema(description = "工作时长,小时(兼容旧版客户端)") private BigDecimal workHours; @Schema(description = "加班时长,小时(兼容旧版客户端)") private BigDecimal overtimeHours; @Schema(description = "打卡地点(兼容旧版客户端)") private String location; @Schema(description = "数据来源(兼容旧版客户端)") private Integer dataSource; @Schema(description = "当前可打卡状态") private Clockable clockable; @Schema(description = "打卡状态") @Data public static class Clockable { @Schema(description = "是否可上班打卡") private Boolean clockIn; @Schema(description = "是否可下班打卡") private Boolean clockOut; @Schema(description = "下一步动作:in-上班打卡,out-下班打卡,none-无需打卡") private String nextAction; @Schema(description = "提示文案", example = "已上班打卡,可下班打卡") private String message; } }