package com.zcloud.safetyDutyList.job;

import com.jjb.saas.framework.job.Job;
import com.jjb.saas.framework.job.annotation.JobRegister;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.annotation.XxlJob;
import com.zcloud.safetyDutyList.api.tasklist.TaskListServiceI;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

/**
 * 安全责任清单 - 定时任务：反馈异常检测
 * <p>
 * 执行周期：每月1日0时（cron = "0 0 0 1 * ?"）
 * <p>
 * 业务场景：
 *   每个任务都有对应的反馈周期（每月/每季度/每半年/每年），任务负责人需要按照周期提交反馈。
 *   如果在某个周期内没有提交任何反馈，则判定为反馈异常，需要记录到反馈异常表中。
 * <p>
 * 调用层级：Job → TaskListServiceI → TaskListServiceImpl → FeedbackExceptionCheckExe → Gateway
 * <p>
 * 遵循COLA架构规范，Job仅负责调度入口，业务逻辑由Exe执行器处理。
 */
@RequiredArgsConstructor
@Component
@Slf4j
public class SendTodoMessageJob implements Job {

    /** 安全责任清单服务接口，用于调用定时任务业务方法 */
    private final TaskListServiceI taskListService;

    /**
     * 定时任务入口方法
     * <p>
     * 由XXL-Job调度框架调用，执行反馈异常检测逻辑。
     * 执行成功返回SUCCESS，异常时返回FAIL及错误信息。
     */
    @Override
    @JobRegister(cron = "0 0 8 1 * ?", jobDesc = "安全责任清单-发送待办消息", triggerStatus = 1)
    @XxlJob("com.zcloud.safetyDutyList.job.SendTodoMessageJob")
    public ReturnT<String> execute(String param) {
        log.info("【安全责任清单】开始执行发送待办消息定时任务");
        try {
            taskListService.sendTodoMessage();
            log.info("【安全责任清单】发送待办消息任务执行完成");
        } catch (Exception e) {
            log.error("【安全责任清单】发送待办消息定时任务执行异常", e);
            return new ReturnT<>(ReturnT.FAIL_CODE, e.getMessage());
        }
        return ReturnT.SUCCESS;
    }
}
