package cn.iocoder.yudao.module.system.job.attendance;

import cn.hutool.core.date.LocalDateTimeUtil;
import cn.iocoder.yudao.framework.tenant.core.job.TenantJob;
import cn.iocoder.yudao.module.system.service.attendance.punchrecord.AttendancePunchRecordService;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.Collections;

@Component
@Slf4j
public class AttendanceStatisticsJob {

    // TODO: 2024/4/22  - 每天凌晨1点执行 将明天需要考勤的人员统计到数据库中先

    /**
     * / -- 把明天的考勤先入进去 会有什么问题？
     * / -- 1.考勤人员调整？ -- 用户更换考勤组/新人进入考勤组 -
     * （两种 -
     * 1.立即生效 / 删除该用户在前考勤组的明天记录 - 并且新增立即插入当前考勤组规则到表中
     * 2.明天生效 / 不需要处理）
     * / -- 2.调整考勤类型？ -- 调整考勤组考勤类型？（固定/排版）  （两种情况 - 同上解决）
     * / -- 3.调整固定/排版考勤设置  -- （两种情况 - 同上解决）
     * / -- 4.什么时候把未打卡改为缺卡？  定时任务更新 - 未打卡 的并且 时间大于应该打卡时间的
     * / -- 5. 如果我凌晨1点 跑 明天的数据 会有什么问题吗？  好像没什么问题 - 嗯
     */
    @Resource
    private AttendancePunchRecordService attendancePunchRecordService;

    @XxlJob("attendanceStatisticsJob")
    @TenantJob // --- ⚠️ 这个注解 会将租户列表拉出来 完了后逐个租户执行 定时任务需要注意
    public ReturnT<String> execute() throws Exception {
        log.info("开始 考勤预设");
        LocalDateTime tomorrowLocalDateTime = LocalDateTimeUtil.offset(LocalDateTime.now(), 1, ChronoUnit.DAYS);
        attendancePunchRecordService.defaultPersistence(Collections.emptyList(), tomorrowLocalDateTime);
        log.info("结束 考勤预设");
        // 返回执行成功
        return ReturnT.SUCCESS;
    }

}
