package com.zt.plat.module.qms.resource.record.job;

import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import com.zt.plat.module.qms.resource.record.service.recordapply.RecordApplyService;
import com.zt.plat.module.qms.resource.record.service.recordpermission.RecordPermissionService;
import com.zt.plat.module.qms.resource.record.service.recordrecord.RecordRecordService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * 文件记录相关定时任务
 */
@Component
@Slf4j
public class RecordRecordJob {

    @Autowired
    private RecordRecordService recordRecordService;
    @Autowired
    private RecordPermissionService recordPermissionService;

    /**
     * 定时更新文件记录生效状态
     * 检测 effectiveDate <= 当前时间 且 recordStatus != 1 的记录，将其更新为已生效（recordStatus = 1）
     *
     * JobHandler 名称: updateRecordStatusJob
     * 推荐 Cron: 0 0 0 * * ?（每天零点执行）
     */
    @XxlJob("updateRecordStatusJob")
    public void updateRecordStatusJob() {
        log.info("[updateRecordStatusJob] 开始执行文件记录生效状态更新任务");
        try {
            Integer updateCount = recordRecordService.updateRecordStatus(); // 更新文件生效日期
            // 更新文件过期记录 TODO
            log.info("[updateRecordStatusJob] 任务执行成功，共更新 {} 条记录", updateCount);
            XxlJobHelper.handleSuccess(String.format("任务执行成功，共更新 %d 条记录", updateCount));
        } catch (Exception e) {
            log.error("[updateRecordStatusJob] 任务执行失败：{}", e.getMessage(), e);
            throw e;
        }
    }

    /**
     * 定时更新文件到期状态（到期自动作废）
     * 检测 expireDate <= 当前时间 ，将其更新为已过期，且自动作废（expireStatus = 1 cancelFlag = 1）
     *
     * JobHandler 名称: updateRecordStatusJob
     * 推荐 Cron: 0 0 0 * * ?（每天零点执行）
     */
    @XxlJob("updateExpireRecordJob")
    public void updateExpireRecordJob() {
        log.info("[updateDistributionPermissionJob] 开始执行文件记录生效状态更新任务");
        try {
            Integer updateCount = recordRecordService.updateExpireRecordJob();
            log.info("[updateExpireRecordJob] 任务执行成功，共更新 {} 条记录", updateCount);
            XxlJobHelper.handleSuccess(String.format("任务执行成功，共更新 %d 条记录", updateCount));
        } catch (Exception e) {
            log.error("[updateExpireRecordJob] 任务执行失败：{}", e.getMessage(), e);
            throw e;
        }
    }

    /**
     * 权限到期，定时回收权限
     * 检测 expireDate <= 当前时间 ，将其更新为已过期，且自动作废（expireStatus = 1 cancelFlag = 1）
     *
     * JobHandler 名称: updateRecordStatusJob
     * 推荐 Cron: 0 0 0 * * ?（每天零点执行）
     */
    @XxlJob("withdrawPermissionJob")
    public void withdrawPermissionJob() {
        log.info("[withdrawPermissionJob] 开始执行文件记录生效状态更新任务");
        try {
            Integer updateCount = recordPermissionService.withdrawPermissionJob();
            log.info("[withdrawPermissionJob] 任务执行成功，共更新 {} 条记录", updateCount);
            XxlJobHelper.handleSuccess(String.format("任务执行成功，共更新 %d 条记录", updateCount));
        } catch (Exception e) {
            log.error("[withdrawPermissionJob] 任务执行失败：{}", e.getMessage(), e);
            throw e;
        }
    }

}
