/*
 * 文 件 名:  TaskHandler
 * 版    权:  华设设计集团股份有限公司
 * 描    述:  <描述>
 * 修 改 人:  lvwenbin
 * 修改时间:  2025/3/18
 * 跟踪单号:  <跟踪单号>
 * 修改单号:  <修改单号>
 * 修改内容:  <修改内容>
 */
package com.ruoyi.ems;

import com.ruoyi.ems.core.ObjectCache;
import com.ruoyi.ems.handle.BaseDevHandler;
import com.ruoyi.ems.handle.BaseMeterDevHandler;
import com.ruoyi.ems.handle.BaseMqttHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

/**
 * 任务调度
 * <功能详细描述>
 *
 * @author lvwenbin
 * @version [版本号, 2025/3/18]
 * @see [相关类/方法]
 * @since [产品/模块版本]
 */
@Service
public class TaskExecutor {
    /**
     * 日志服务
     */
    protected static final Logger log = LoggerFactory.getLogger(TaskExecutor.class);

    @Autowired
    private ObjectCache objectCache;

    @Qualifier("geekOpenCbHandler")
    @Resource
    private BaseMeterDevHandler geekOpenCbHandler;

    /**
     * 定时清理过期设备上报响应
     */
    @Scheduled(cron = "0 0/10 * * * ?")
    public void cleanDevResCache() {
        int cnt = objectCache.cleanDevResCache();
        log.debug("清理过期设备上报响应: {} 条", cnt);
    }

    /**
     * 定时刷新设备在线状态
     */
    @Scheduled(cron = "0 10 0/1 * * ?")
    public void refreshOnline() {
        geekOpenCbHandler.refreshOnline(2 * 60 * 60 * 1000);
    }

    /**
     * 每小时产出设备计量数据
     */
    @Scheduled(cron = "0 0 0/1 * * ?")
    public void meterHourProd() {
        int cnt = geekOpenCbHandler.meterHourProd();
        log.debug("产出设备计量数据: {} 条", cnt);
    }
}