Переглянути джерело

解决教师考勤统计,实到人数重复的问题

dzx 9 місяців тому
батько
коміт
316393b3d6

+ 11 - 3
src/main/java/com/xjrsoft/module/attendance/controller/StatisticsController.java

@@ -35,7 +35,10 @@ import java.math.RoundingMode;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 /**
 * @title: 考勤消息设置
@@ -92,9 +95,13 @@ public class StatisticsController {
                     new QueryWrapper<TeacherOutInRecord>().lambda()
                             .between(TeacherOutInRecord::getRecordTime, startTime, endTime)
                             .eq(TeacherOutInRecord::getStatus, 1)
+                            .orderByAsc(TeacherOutInRecord::getRecordTime)
             );
+
+            List<Long> collect = outInRecords.stream().map(TeacherOutInRecord::getUserId).collect(Collectors.toList());
+            Set<Long> userIds = new HashSet<>(collect);
             //实到人数
-            statisticsVo.setActualCount(Long.valueOf(outInRecords.size()));
+            statisticsVo.setActualCount(Long.valueOf(userIds.size()));
 
             //查询教师请假人数
             Long leaveCount = wfTeacherleaveService.getLeaveCount(startTime, endTime);
@@ -102,12 +109,13 @@ public class StatisticsController {
                 leaveCount = 0L;
             }
             statisticsVo.setLeaveCount(leaveCount);
-
             //通过考勤规则和实到人数信息,计算迟到的
+            userIds = new HashSet<>();
             Long lateCount = 0L;
             for (TeacherOutInRecord outInRecord : outInRecords) {
-                if("迟到".equals(outInRecord.getAttendanceStatus())){
+                if("迟到".equals(outInRecord.getAttendanceStatus()) && !userIds.contains(outInRecord.getUserId())){
                     lateCount ++;
+                    userIds.add(outInRecord.getUserId());
                 }
             }
             statisticsVo.setLateCount(lateCount);