From 79f9c8f092ccc4160e7732bf3f94a2b7ae750617 Mon Sep 17 00:00:00 2001
From: zouyu <2723363702@qq.com>
Date: 星期一, 25 五月 2026 11:17:06 +0800
Subject: [PATCH] 人员考勤:导出数据与天数不对应问题修复

---
 performance-server/src/main/java/com/ruoyi/performance/service/impl/StaffAttendanceTrackingRecordServiceImpl.java |   83 ++++++++++++++++++++++-------------------
 1 files changed, 44 insertions(+), 39 deletions(-)

diff --git a/performance-server/src/main/java/com/ruoyi/performance/service/impl/StaffAttendanceTrackingRecordServiceImpl.java b/performance-server/src/main/java/com/ruoyi/performance/service/impl/StaffAttendanceTrackingRecordServiceImpl.java
index e220e51..4ecc238 100644
--- a/performance-server/src/main/java/com/ruoyi/performance/service/impl/StaffAttendanceTrackingRecordServiceImpl.java
+++ b/performance-server/src/main/java/com/ruoyi/performance/service/impl/StaffAttendanceTrackingRecordServiceImpl.java
@@ -472,50 +472,55 @@
                 AtomicInteger maternityLeaveCount = new AtomicInteger(0);//浜у亣澶╂暟
                 AtomicInteger attendanceDayCount = new AtomicInteger(0);//鍑哄嫟澶╂暟
                 AtomicDouble attendanceWorkHourCount = new AtomicDouble(0D);//鍑哄嫟鎬绘椂闂�
-                for (int j = 0; j < shiftMapDtos.size(); j++) {
-                    PerformanceShiftMapDto shiftMapDto = shiftMapDtos.get(j);
-                    //缁熻鍚勫亣鏈熷拰鍏樊鐨勫ぉ鏁�
-                    if(StringUtils.contains(shiftMapDto.getShiftName(),holidayLeaveKeyword)){
-                        holidayCount.getAndIncrement();
-                    }else if(StringUtils.contains(shiftMapDto.getShiftName(),personalLeaveKeyword)){
-                        personalLeaveCount.getAndIncrement();
-                    }else if(StringUtils.contains(shiftMapDto.getShiftName(),annualLeaveKeyword)){
-                        annualLeaveCount.getAndIncrement();
-                    }else if(StringUtils.contains(shiftMapDto.getShiftName(),officialTripKeyword)){
-                        officialTripCount.getAndIncrement();
-                    }else if(StringUtils.contains(shiftMapDto.getShiftName(),marriageLeaveKeyword)){
-                        marriageLeaveCount.getAndIncrement();
-                    }else if(StringUtils.contains(shiftMapDto.getShiftName(),bereavementLeaveKeyword)){
-                        bereavementLeaveCount.getAndIncrement();
-                    }else if(StringUtils.contains(shiftMapDto.getShiftName(),sickLeaveKeyword)){
-                        sickLeaveCount.getAndIncrement();
-                    }else if(StringUtils.contains(shiftMapDto.getShiftName(),maternityLeaveKeyword)){
-                        maternityLeaveCount.getAndIncrement();
-                    }
-                    if(StringUtils.isAllBlank(shiftMapDto.getStartTime(),shiftMapDto.getEndTime())){
-                        shiftList.add(shiftMapDto.getShiftName());
-                    }else{
-                        //杩囨护褰撳墠浜哄憳鐨勭彮娆′俊鎭�
-                        StaffAttendanceVO vo = attendanceRecords.stream().filter(f->StringUtils.isNotBlank(f.getPersonCode())).filter(f -> StringUtils.equals(f.getPersonCode(), shiftMapDto.getPersonCode()) && f.getSwingDate().isEqual(shiftMapDto.getWorkTime())).findFirst().orElse(null);
-                        if(ObjectUtils.isEmpty(vo)){
-                            shiftList.add("");
+                for (int j = 0; j < attendanceDateList.size(); j++) {
+                    LocalDate localDate = attendanceDateList.get(j);
+                    PerformanceShiftMapDto shiftMapDto = shiftMapDtos.stream().filter(f -> f.getWorkTime().toLocalDate().equals(localDate)).findFirst().orElse(null);
+                    if(Objects.nonNull(shiftMapDto)){
+                        //缁熻鍚勫亣鏈熷拰鍏樊鐨勫ぉ鏁�
+                        if(StringUtils.contains(shiftMapDto.getShiftName(),holidayLeaveKeyword)){
+                            holidayCount.getAndIncrement();
+                        }else if(StringUtils.contains(shiftMapDto.getShiftName(),personalLeaveKeyword)){
+                            personalLeaveCount.getAndIncrement();
+                        }else if(StringUtils.contains(shiftMapDto.getShiftName(),annualLeaveKeyword)){
+                            annualLeaveCount.getAndIncrement();
+                        }else if(StringUtils.contains(shiftMapDto.getShiftName(),officialTripKeyword)){
+                            officialTripCount.getAndIncrement();
+                        }else if(StringUtils.contains(shiftMapDto.getShiftName(),marriageLeaveKeyword)){
+                            marriageLeaveCount.getAndIncrement();
+                        }else if(StringUtils.contains(shiftMapDto.getShiftName(),bereavementLeaveKeyword)){
+                            bereavementLeaveCount.getAndIncrement();
+                        }else if(StringUtils.contains(shiftMapDto.getShiftName(),sickLeaveKeyword)){
+                            sickLeaveCount.getAndIncrement();
+                        }else if(StringUtils.contains(shiftMapDto.getShiftName(),maternityLeaveKeyword)){
+                            maternityLeaveCount.getAndIncrement();
+                        }
+                        if(StringUtils.isAllBlank(shiftMapDto.getStartTime(),shiftMapDto.getEndTime())){
+                            shiftList.add(shiftMapDto.getShiftName());
                         }else{
-                            String actualWorkHours = Objects.toString(vo.getActualWorkHours(), "");
-                            Double diffHour = ObjectUtils.defaultIfNull(vo.getDiffHour(), 0D);
-                            if (StringUtils.isBlank(actualWorkHours)) {
+                            //杩囨护褰撳墠浜哄憳鐨勭彮娆′俊鎭�
+                            StaffAttendanceVO vo = attendanceRecords.stream().filter(f->StringUtils.isNotBlank(f.getPersonCode())).filter(f -> StringUtils.equals(f.getPersonCode(), shiftMapDto.getPersonCode()) && f.getSwingDate().isEqual(shiftMapDto.getWorkTime())).findFirst().orElse(null);
+                            if(ObjectUtils.isEmpty(vo)){
                                 shiftList.add("");
-                            } else {
-                                shiftList.add(Double.compare(diffHour, 0D) < 0 ? "-" + actualWorkHours : actualWorkHours);
-                                attendanceDayCount.getAndIncrement();
-                                attendanceWorkHourCount.getAndAdd(Double.parseDouble(actualWorkHours));
+                            }else{
+                                String actualWorkHours = Objects.toString(vo.getActualWorkHours(), "");
+                                Double diffHour = ObjectUtils.defaultIfNull(vo.getDiffHour(), 0D);
+                                if (StringUtils.isBlank(actualWorkHours)) {
+                                    shiftList.add("");
+                                } else {
+                                    shiftList.add(Double.compare(diffHour, 0D) < 0 ? "-" + actualWorkHours : actualWorkHours);
+                                    attendanceDayCount.getAndIncrement();
+                                    attendanceWorkHourCount.getAndAdd(Double.parseDouble(actualWorkHours));
+                                }
                             }
                         }
-                    }
-                    //鏈堝害缁熻鎵嶆彃鍏ユ壒娉ㄦ暟鎹�
-                    if(StringUtils.isNoneBlank(staffAttendanceDTO.getAttendanceReportType()) && StringUtils.equals(staffAttendanceDTO.getAttendanceReportType(), CalendarType.MONTH.name())){
-                        if(StringUtils.isNotBlank(shiftMapDto.getAnnotationText())){
-                            annotationTextList.add(new StaffAttendanceAnnotationTextExcelData(i,j,shiftMapDto.getAnnotationText()));
+                        //鏈堝害缁熻鎵嶆彃鍏ユ壒娉ㄦ暟鎹�
+                        if(StringUtils.isNoneBlank(staffAttendanceDTO.getAttendanceReportType()) && StringUtils.equals(staffAttendanceDTO.getAttendanceReportType(), CalendarType.MONTH.name())){
+                            if(StringUtils.isNotBlank(shiftMapDto.getAnnotationText())){
+                                annotationTextList.add(new StaffAttendanceAnnotationTextExcelData(i,j,shiftMapDto.getAnnotationText()));
+                            }
                         }
+                    }else{
+                        shiftList.add("");
                     }
                 }
                 if(StringUtils.isNoneBlank(staffAttendanceDTO.getAttendanceReportType()) && StringUtils.equals(staffAttendanceDTO.getAttendanceReportType(), CalendarType.MONTH.name())){

--
Gitblit v1.9.3