| | |
| | | * 定时任务:每天凌晨1点执行 |
| | | * 排除今天刚入职的员工 |
| | | */ |
| | | // @Scheduled(cron = "0 0 1 * * ?") |
| | | @Scheduled(cron = "0/30 * * * * ?") |
| | | @Scheduled(cron = "0 0 1 * * ?") |
| | | public void generateAbsenceRecords() { |
| | | |
| | | try { |
| | | // 获取昨日日期 |
| | | LocalDate yesterday = LocalDate.now().minusDays(1); |
| | | log.info("生成日期:{} 的缺勤记录", yesterday); |
| | | |
| | | // 直接查询昨天没有考勤记录的在职员工(排除今天刚入职的) |
| | | List<StaffOnJob> staffWithoutAttendance = personalAttendanceRecordsMapper.selectStaffWithoutAttendanceRecord(yesterday); |
| | | LocalDateTime todayStart = LocalDate.now().atStartOfDay(); |
| | | List<StaffOnJob> staffWithoutAttendance = personalAttendanceRecordsMapper.selectStaffWithoutAttendanceRecordBeforeTime(yesterday, todayStart); |
| | | |
| | | |
| | | // 遍历没有考勤记录的员工,生成缺勤记录 |
| | | for (StaffOnJob staff : staffWithoutAttendance) { |
| | | try { |
| | | boolean exists = personalAttendanceRecordsMapper.existsAttendanceRecord(staff.getId(), yesterday); |
| | | if (exists) { |
| | | continue; |
| | | } |
| | | |
| | | PersonalAttendanceRecords absenceRecord = new PersonalAttendanceRecords(); |
| | | absenceRecord.setStaffOnJobId(staff.getId()); |
| | | absenceRecord.setDate(yesterday); |
| | | absenceRecord.setWorkStartAt(null); |
| | | absenceRecord.setWorkEndAt(null); |
| | | absenceRecord.setWorkHours(BigDecimal.ZERO); |
| | | absenceRecord.setStatus(4); // 设置状态为缺勤 |
| | | absenceRecord.setRemark("系统自动生成-缺勤"); |
| | | absenceRecord.setTenantId(staff.getTenantId()); |
| | | absenceRecord.setCreateTime(LocalDateTime.now()); |
| | | absenceRecord.setUpdateTime(LocalDateTime.now()); |
| | | personalAttendanceRecordsService.save(absenceRecord); |
| | | |
| | | } catch (Exception e) { |