package com.njcn.cssystem.service;

/**
 * @author xy
 */
public interface IDataTaskService {

    /**
     * 稳态事件算法
     * 1、计算所有监测点越限的次数 查询limit_rate表，按监测点、日期生成单独的一条数据；
     * 2、根据监测点获取到设备，根据设备再获取哪些用户有这个设备的权限，然后将用户id收集起来。(主用户、子用户、管理员id集合)
     * 3、将cs_harmonic生成的记录，存储到cs_event_user表中，标记为未读
     * @param time
     */
    void channelHarmonic(String time);

    /**
     运行告警算法
     1、每天生成一条记录，查询所有的设备，获取设备中断数据、告警数据；
     2、根据设备获取哪些用户有这个设备的权限，然后将用户id收集起来。(主用户、子用户、管理员id集合)；
     3、将cs_alarm生成的记录，存储到cs_event_user表中，标记为未读
     * @param time
     */
    void channelRunAlarm(String time);

    /**
     运行告警算法
     1、每天生成一条记录，查询所有的设备，获取设备告警数据、设备的在线率和完整性，在线率根据设备来判断，完整性根据监测点来判断(多个监测点取最小值)；
        告警判断逻辑：(这个数据是根据一个表配置的，先查询阈值配置表)
        a.完整性 < 90(可变动)
        b.完整性 > 90(可变动) && 在线率 < 60(可变动)
     2、根据设备获取哪些用户有这个设备的权限，然后将用户id收集起来。(主用户、子用户、管理员id集合)；
     3、将cs_alarm生成的记录，存储到cs_event_user表中，标记为未读
     * @param time
     */
    void channelRunDataAlarm(String time);

    /**
     * 推送App消息
     * 只推送稳态事件、运行告警数据
     * 1、查询所有用户-设备关系
     * 2、剔除没有devCode的用户，没有devCode的用户没法推送
     * 3、剩余用户再筛选 是否打开消息推送，只推送那些打开通知的用户
     * 4、剩余用户，根据设备查询告警数据
     * 5、剩余用户，根据监测点查询稳态越限数据
     * 6、短信模板：2026年4月2日发生稳态事件xx次，点击查看详情；2026年4月2日发生告警事件xx次，点击查看详情；
     * @param time
     */
    void pushAppMsg(String time);

}
