package com.ruoyi.staff.task;
|
|
import com.ruoyi.staff.pojo.PersonalAttendanceRecords;
|
import com.ruoyi.staff.pojo.StaffOnJob;
|
import com.ruoyi.staff.service.PersonalAttendanceRecordsService;
|
import com.ruoyi.staff.mapper.PersonalAttendanceRecordsMapper;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.scheduling.annotation.Scheduled;
|
import org.springframework.stereotype.Component;
|
|
import java.math.BigDecimal;
|
import java.time.LocalDate;
|
import java.time.LocalDateTime;
|
import java.util.List;
|
|
/**
|
* 个人考勤记录定时任务
|
*
|
* @author 芯导软件(江苏)有限公司
|
* @since 2026-02-09
|
*/
|
@Slf4j
|
@Component
|
public class PersonalAttendanceRecordsTask {
|
|
@Autowired
|
private PersonalAttendanceRecordsMapper personalAttendanceRecordsMapper;
|
|
@Autowired
|
private PersonalAttendanceRecordsService personalAttendanceRecordsService;
|
|
/**
|
* 每天凌晨生成昨日的缺勤记录
|
* 定时任务:每天凌晨1点执行
|
* 排除今天刚入职的员工
|
*/
|
// @Scheduled(cron = "0 0 1 * * ?")
|
@Scheduled(cron = "0/30 * * * * ?")
|
public void generateAbsenceRecords() {
|
|
try {
|
// 获取昨日日期
|
LocalDate yesterday = LocalDate.now().minusDays(1);
|
log.info("生成日期:{} 的缺勤记录", yesterday);
|
|
// 直接查询昨天没有考勤记录的在职员工(排除今天刚入职的)
|
List<StaffOnJob> staffWithoutAttendance = personalAttendanceRecordsMapper.selectStaffWithoutAttendanceRecord(yesterday);
|
|
// 遍历没有考勤记录的员工,生成缺勤记录
|
for (StaffOnJob staff : staffWithoutAttendance) {
|
try {
|
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) {
|
log.error("为员工{}生成缺勤记录失败:{}", staff.getStaffName(), e.getMessage(), e);
|
}
|
}
|
|
log.info("昨日缺勤记录生成完成");
|
} catch (Exception e) {
|
log.error("生成昨日缺勤记录任务执行失败:{}", e.getMessage(), e);
|
}
|
}
|
}
|