| | |
| | | |
| | | import cn.hutool.core.collection.CollectionUtil; |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import com.ruoyi.approve.mapper.HolidaySettingsMapper; |
| | | import com.ruoyi.approve.pojo.HolidaySettings; |
| | | import com.ruoyi.staff.dto.PerformanceShiftAddDto; |
| | | import com.ruoyi.staff.mapper.PersonalAttendanceLocationConfigMapper; |
| | | import com.ruoyi.staff.mapper.PersonalAttendanceRecordsMapper; |
| | |
| | | private final PersonalAttendanceLocationConfigMapper personalAttendanceLocationConfigMapper; |
| | | private final StaffOnJobMapper staffOnJobMapper; |
| | | private final PersonalShiftService personalShiftService; |
| | | private final HolidaySettingsMapper holidaySettingsMapper; |
| | | |
| | | /** |
| | | * 每天凌晨生成昨日的缺勤记录 |
| | |
| | | try { |
| | | // 获取昨日日期 |
| | | LocalDate yesterday = LocalDate.now().minusDays(1); |
| | | |
| | | // 周末、法定节假日是休息日,不生成缺勤记录 |
| | | if (!isWorkingDay(yesterday)) { |
| | | log.info("昨日{}为周末或法定节假日,跳过缺勤记录生成", yesterday); |
| | | return; |
| | | } |
| | | |
| | | // 直接查询昨天没有考勤记录的在职员工(排除今天刚入职的) |
| | | LocalDateTime todayStart = LocalDate.now().atStartOfDay(); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 判断某天是否为工作日。 |
| | | * 假期设置里“调休上班”(adjustment) 算工作日;其他假期(法定节假日等)算休息日; |
| | | * 没有配置假期的日期按自然周判断,周六、周日休息。 |
| | | */ |
| | | private boolean isWorkingDay(LocalDate date) { |
| | | List<HolidaySettings> holidays = holidaySettingsMapper.selectList( |
| | | Wrappers.<HolidaySettings>lambdaQuery() |
| | | .eq(HolidaySettings::getStatus, "active") |
| | | .le(HolidaySettings::getStartDate, date) |
| | | .ge(HolidaySettings::getEndDate, date)); |
| | | if (CollectionUtil.isNotEmpty(holidays)) { |
| | | return holidays.stream().anyMatch(h -> "adjustment".equals(h.getType())); |
| | | } |
| | | return date.getDayOfWeek().getValue() < 6; |
| | | } |
| | | |
| | | /** |
| | | * 定时任务,每个月1号的00:00:00给下一个月排班 |
| | | * 给每个人都进行排班(默认早班) |
| | | */ |