| | |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.google.common.util.concurrent.AtomicDouble; |
| | | import com.ruoyi.common.core.domain.entity.User; |
| | | import com.ruoyi.common.enums.ClockInState; |
| | | import com.ruoyi.common.enums.EnterOrExitType; |
| | | import com.ruoyi.common.enums.CalendarType; |
| | | import com.ruoyi.common.enums.SyncStatus; |
| | | import com.ruoyi.common.enums.*; |
| | | import com.ruoyi.common.utils.api.icc.IccApiUtil; |
| | | import com.ruoyi.common.utils.api.icc.model.GetResultPageRequest; |
| | | import com.ruoyi.common.utils.api.icc.model.GetResultPageResponse; |
| | |
| | | if (!enterRecords.isEmpty()) { |
| | | // 上班时间和状态 |
| | | StaffAttendanceTrackingRecord enterRecord = enterRecords.stream() |
| | | .filter(s -> !s.getSwingTime().isAfter(currentShiftStartDateTime) && !s.getSwingTime().isBefore(boundaryTime)) |
| | | .filter(s -> (!s.getSwingTime().isAfter(currentShiftStartDateTime) && !s.getSwingTime().isBefore(boundaryTime)) || StringUtils.equals(s.getWorkStateFlag(), StaffWorkStateFlag.WORK.getValue())) |
| | | .max(Comparator.comparing(StaffAttendanceTrackingRecord::getSwingTime)) |
| | | .orElse(new StaffAttendanceTrackingRecord()); |
| | | if (BeanUtil.isEmpty(enterRecord)) { |
| | | enterRecord = enterRecords.stream() |
| | | .filter(s -> (s.getSwingTime().isAfter(currentShiftStartDateTime) |
| | | && s.getSwingTime().isBefore(currentShiftEndDateTime))) |
| | | && s.getSwingTime().isBefore(currentShiftEndDateTime)) || StringUtils.equals(s.getWorkStateFlag(), StaffWorkStateFlag.WORK.getValue())) |
| | | .min(Comparator.comparing(StaffAttendanceTrackingRecord::getSwingTime)) |
| | | .orElse(new StaffAttendanceTrackingRecord()); |
| | | workDateTime = enterRecord.getSwingTime(); |
| | |
| | | if (!exitRecords.isEmpty()) { |
| | | // 下班时间和状态 |
| | | StaffAttendanceTrackingRecord exitRecord = exitRecords.stream() |
| | | .filter(s -> !s.getSwingTime().isBefore(currentShiftEndDateTime) |
| | | && s.getSwingTime().isBefore(nextShiftStartDateTime)) |
| | | .filter(s -> (!s.getSwingTime().isBefore(currentShiftEndDateTime) |
| | | && s.getSwingTime().isBefore(nextShiftStartDateTime)) || StringUtils.equals(s.getWorkStateFlag(), StaffWorkStateFlag.OFF_WORK.getValue())) |
| | | .min(Comparator.comparing(StaffAttendanceTrackingRecord::getSwingTime)) |
| | | .orElse(new StaffAttendanceTrackingRecord()); |
| | | if (BeanUtil.isEmpty(exitRecord) && !now.isBefore(currentShiftEndDateTime)) { |
| | | exitRecord = exitRecords.stream() |
| | | .filter(s -> (s.getSwingTime().isAfter(currentShiftStartDateTime) |
| | | && s.getSwingTime().isBefore(currentShiftEndDateTime))) |
| | | && s.getSwingTime().isBefore(currentShiftEndDateTime)) || StringUtils.equals(s.getWorkStateFlag(), StaffWorkStateFlag.OFF_WORK.getValue())) |
| | | .max(Comparator.comparing(StaffAttendanceTrackingRecord::getSwingTime)) |
| | | .orElse(new StaffAttendanceTrackingRecord()); |
| | | offWorkDateTime = exitRecord.getSwingTime(); |