package com.ruoyi.system.service;

import com.ruoyi.system.domain.EpsInitialTrafficData;
import com.ruoyi.system.domain.EpsNodeBandwidth;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * EPS表创建服务接口
 * 定义定时创建分表的契约
 */
public interface EpsInitialTrafficDataService {

    /**
     * 创建下个月的三张分表
     * 每月25日0点自动执行
     */
    void createNextMonthTables();
    /**
     * 保存单条流量数据
     * @param data 流量数据
     */
    void save(EpsInitialTrafficData data);

    /**
     * 批量保存流量数据
     * @param dataList 流量数据列表
     */
    void saveBatch(EpsInitialTrafficData dataList);

    /**
     * 查询流量数据
     * @param queryParam 查询参数实体
     * @return 流量数据列表
     */
    List<EpsInitialTrafficData> query(EpsInitialTrafficData queryParam);

    /**
     * 查询多台设备的流量数据
     * @param queryParam
     * @return
     */
    List<EpsInitialTrafficData> getTrafficListByClientIds(EpsInitialTrafficData queryParam);

    /**
     * 查询初始流量信息
     * @param queryParam 查询参数实体
     * @return 初始流量数据列表
     */
    List<EpsInitialTrafficData> getAllTraficMsg(EpsInitialTrafficData queryParam);
    /**
     * 计算95带宽值-有效/日
     * @param queryParam 查询参数实体
     * @return 流量数据列表
     */
    void calculateBusiness95BandwidthDaily(EpsInitialTrafficData queryParam, String dailyStartTime, String dailyEndTime, String calculationMode);
    /**
     * 计算95带宽值-金山带宽/日
     * @param queryParam 查询参数实体
     * @return 流量数据列表
     */
    void calculate95ByJinShan(EpsInitialTrafficData queryParam, String dailyStartTime, String dailyEndTime, String calculationMode);

    /**
     * 重新计算服务器95带宽值
     * @param epsNodeBandwidth 95带宽值收益详情
     * @param dailyStartTime 开始时间
     * @param dailyEndTime 结束时间
     */
    void recalculateServer95Bandwidth(EpsNodeBandwidth epsNodeBandwidth, String dailyStartTime, String dailyEndTime, String calculationMode);

    /**
     * 计算服务器流量使用率（处理带单位的数据）
     * @return 包含总带宽、发送带宽和发送占比的Map
     */
    Map<String, Object> trafficRateByServer();
    /**
     * 当前在线服务器发送带宽总流量
     * @return
     */
    BigDecimal sumTrafficByServer();

    int updateMachineTraffic(EpsInitialTrafficData epsInitialTrafficData);

    List<Map<String, Object>> getServerGraphicalAnalysisDaily(EpsInitialTrafficData queryParam);

    List<Map<String, Object>> getServerGraphicalAnalysisMonthy(EpsInitialTrafficData queryParam);
}
