From c7673b8c8f1d20c58c7265fa00c6fbf69caf994d Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期三, 04 十一月 2026 13:55:39 +0800
Subject: [PATCH] fix(shift): 修复排班与考勤的时间范围查询条件

---
 src/main/java/com/ruoyi/staff/service/impl/PersonalShiftServiceImpl.java |   19 ++++++++++++-------
 1 files changed, 12 insertions(+), 7 deletions(-)

diff --git a/src/main/java/com/ruoyi/staff/service/impl/PersonalShiftServiceImpl.java b/src/main/java/com/ruoyi/staff/service/impl/PersonalShiftServiceImpl.java
index 24d0511..9880ed5 100644
--- a/src/main/java/com/ruoyi/staff/service/impl/PersonalShiftServiceImpl.java
+++ b/src/main/java/com/ruoyi/staff/service/impl/PersonalShiftServiceImpl.java
@@ -53,19 +53,21 @@
         LocalDateTime endWeek = performanceShiftAddDto.getEndWeek();//缁撴潫鏃ユ湡
 
 
-        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
-        String formattedDateTime = performanceShiftAddDto.getStartWeek().format(formatter);
         String[] splitUserId = performanceShiftAddDto.getStaffOnJobId().split(",");
         for (String userId : splitUserId) {
             //鍒ゆ柇鏄惁璺ㄦ湀
             boolean isMonth = startWeek.getMonthValue() != endWeek.getMonthValue();
             if (isMonth){
                 //濡傛灉璺ㄦ湀,鍒欎袱涓湀閮藉垽鏂竴涓嬬湅鏁版嵁搴撴槸鍝釜鏈堜唤鐨勬暟鎹病鏈�
+                LocalDateTime startMonthBegin = startWeek.toLocalDate().withDayOfMonth(1).atStartOfDay();
+                LocalDateTime endMonthBegin = endWeek.toLocalDate().withDayOfMonth(1).atStartOfDay();
                 boolean exists1 = baseMapper.exists(Wrappers.<PersonalShift>lambdaQuery()
-                        .eq(PersonalShift::getWorkTime, startWeek)
+                        .ge(PersonalShift::getWorkTime, startMonthBegin)
+                        .lt(PersonalShift::getWorkTime, startMonthBegin.plusMonths(1))
                         .eq(PersonalShift::getStaffOnJobId, userId));
                 boolean exists2 = baseMapper.exists(Wrappers.<PersonalShift>lambdaQuery()
-                        .eq(PersonalShift::getWorkTime, endWeek)
+                        .ge(PersonalShift::getWorkTime, endMonthBegin)
+                        .lt(PersonalShift::getWorkTime, endMonthBegin.plusMonths(1))
                         .eq(PersonalShift::getStaffOnJobId, userId));
                 if (!exists1 && !exists2){
                     //涓や釜鏈堥兘涓嶅瓨鍦ㄦ暟鎹�
@@ -80,8 +82,10 @@
                 }
             }else {
                 //涓嶈法鏈�
+                LocalDateTime monthBegin = startWeek.toLocalDate().withDayOfMonth(1).atStartOfDay();
                 boolean exists = baseMapper.exists(Wrappers.<PersonalShift>lambdaQuery()
-                        .in(PersonalShift::getWorkTime, formattedDateTime)
+                        .ge(PersonalShift::getWorkTime, monthBegin)
+                        .lt(PersonalShift::getWorkTime, monthBegin.plusMonths(1))
                         .eq(PersonalShift::getStaffOnJobId, userId));
                 // 濡傛灉涓嶅瓨鍦ㄦ坊鍔犳暟鎹�
                 if (!exists) {
@@ -96,16 +100,17 @@
         // 鍐嶆鏇存柊
         List<LocalDateTime> datesBetween = getLocalDateTimesBetween(performanceShiftAddDto.getStartWeek(), performanceShiftAddDto.getEndWeek());
         for (LocalDateTime date : datesBetween) {
+            LocalDateTime dayBegin = date.toLocalDate().atStartOfDay();
             for (String s : splitUserId) {
                 PersonalShift personalShift = new PersonalShift();
                 personalShift.setPersonalAttendanceLocationConfigId(performanceShiftAddDto.getPersonalAttendanceLocationConfigId());
                 personalShift.setStaffOnJobId(Long.valueOf(s));
                 personalShift.setWorkTime(date);
-                String formatterDateTime = date.format(formatter);
                 baseMapper.update(new PersonalShift(), Wrappers.<PersonalShift>lambdaUpdate()
                         .set(PersonalShift::getPersonalAttendanceLocationConfigId, performanceShiftAddDto.getPersonalAttendanceLocationConfigId())
                         .eq(PersonalShift::getStaffOnJobId, s)
-                        .eq(PersonalShift::getWorkTime, formatterDateTime));
+                        .ge(PersonalShift::getWorkTime, dayBegin)
+                        .lt(PersonalShift::getWorkTime, dayBegin.plusDays(1)));
             }
         }
         return 0;

--
Gitblit v1.9.3