liu
14 小时以前 5611b19e904ec0daa96ea5f648500cf6205c9385
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package cn.iocoder.yudao.module.hrm.controller.admin.attendance.vo;
 
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
 
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.AssertTrue;
import java.math.BigDecimal;
import java.time.LocalTime;
 
@Schema(description = "管理后台 - 考勤规则新增/修改 Request VO")
@Data
public class HrmAttendanceRuleSaveReqVO {
 
    @Schema(description = "规则ID(修改时必填)", example = "1")
    private Long id;
 
    @Schema(description = "规则名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "标准考勤规则")
    @NotBlank(message = "规则名称不能为空")
    private String name;
 
    @Schema(description = "适用部门ID(空表示全局)", example = "1")
    private Long deptId;
 
    @Schema(description = "上班时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "09:00:00")
    @NotNull(message = "上班时间不能为空")
    private LocalTime workStartTime;
 
    @Schema(description = "下班时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "18:00:00")
    @NotNull(message = "下班时间不能为空")
    private LocalTime workEndTime;
 
    @Schema(description = "迟到允许分钟数", example = "10")
    private Integer lateAllowMinutes;
 
    @Schema(description = "早退允许分钟数", example = "10")
    private Integer earlyAllowMinutes;
 
    @Schema(description = "加班起算时长(小时)", example = "1")
    private BigDecimal overtimeThreshold;
 
    @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 Boolean locationRequired;
    @Schema(description = "坐标系,仅支持 WGS84")
    private String coordinateSystem;
 
    @AssertTrue(message = "启用定位打卡时,地点名称、经纬度和10~5000米打卡半径必须完整配置")
    public boolean isLocationConfigValid() {
        if (!Boolean.TRUE.equals(locationRequired)) {
            return true;
        }
        return locationName != null && !locationName.isBlank()
                && longitude != null && latitude != null && radiusMeters != null
                && radiusMeters >= 10 && radiusMeters <= 5000
                && "WGS84".equalsIgnoreCase(coordinateSystem);
    }
 
    @Schema(description = "状态:0-启用,1-禁用", example = "0")
    private Integer status;
 
    @Schema(description = "备注", example = "适用于研发部门")
    private String remark;
 
}