From 690b713454828f34f901bc1e3a5f7bcc35a31b30 Mon Sep 17 00:00:00 2001
From: liu <2021943741@qq.com>
Date: 星期一, 26 十月 2026 17:52:05 +0800
Subject: [PATCH] feat(hrm): 支持定位范围打卡

---
 yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/attendance/vo/HrmAttendanceRuleSaveReqVO.java |   35 ++++++++++++++++++++++++++++++++++-
 1 files changed, 34 insertions(+), 1 deletions(-)

diff --git a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/attendance/vo/HrmAttendanceRuleSaveReqVO.java b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/attendance/vo/HrmAttendanceRuleSaveReqVO.java
index 8c244a8..5ca2c9f 100644
--- a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/attendance/vo/HrmAttendanceRuleSaveReqVO.java
+++ b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/attendance/vo/HrmAttendanceRuleSaveReqVO.java
@@ -5,7 +5,9 @@
 
 import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.AssertTrue;
 import java.math.BigDecimal;
+import java.time.LocalDate;
 import java.time.LocalTime;
 
 @Schema(description = "绠$悊鍚庡彴 - 鑰冨嫟瑙勫垯鏂板/淇敼 Request VO")
@@ -39,10 +41,41 @@
     @Schema(description = "鍔犵彮璧风畻鏃堕暱锛堝皬鏃讹級", example = "1")
     private BigDecimal overtimeThreshold;
 
+    @Schema(description = "鐢熸晥寮�濮嬫棩鏈燂紙绌鸿〃绀轰笉闄愶級", example = "2026-01-01")
+    private LocalDate effectiveStartDate;
+
+    @Schema(description = "鐢熸晥缁撴潫鏃ユ湡锛堢┖琛ㄧず涓嶉檺锛�", example = "2026-12-31")
+    private LocalDate effectiveEndDate;
+    @Schema(description = "鎵撳崱鍦扮偣鍚嶇О")
+    private String locationName;
+    @Schema(description = "鎵撳崱鍦扮偣鍦板潃")
+    private String locationAddress;
+    @Schema(description = "鍦扮偣缁忓害锛圵GS84锛�")
+    private BigDecimal longitude;
+    @Schema(description = "鍦扮偣绾害锛圵GS84锛�")
+    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;
 
-}
\ No newline at end of file
+}

--
Gitblit v1.9.3