package org.dromara.elevator.service;

import org.dromara.elevator.domain.bo.ELargeScreenBo;
import org.dromara.elevator.domain.bo.ELargeScreenRepairBo;
import org.dromara.elevator.domain.bo.ELargeScreenRescueBo;
import org.dromara.elevator.domain.vo.*;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;

import java.util.Collection;
import java.util.List;

/**
 * 监控大屏;Service接口
 *
 * @author zy
 * @date 2024-11-04
 */
public interface IELargeScreenService {

    /**
     * 查询监控大屏;
     *
     * @param id 主键
     * @return 监控大屏;
     */
    ELargeScreenVo queryById(Long id);

    /**
     * 分页查询监控大屏;列表
     *
     * @param bo        查询条件
     * @param pageQuery 分页参数
     * @return 监控大屏;分页列表
     */
    TableDataInfo<ELargeScreenVo> queryPageList(ELargeScreenBo bo, PageQuery pageQuery);

    /**
     * 查询符合条件的监控大屏;列表
     *
     * @param bo 查询条件
     * @return 监控大屏;列表
     */
    List<ELargeScreenVo> queryList(ELargeScreenBo bo);

    /**
     * 新增监控大屏;
     *
     * @param bo 监控大屏;
     * @return 是否新增成功
     */
    Boolean insertByBo(ELargeScreenBo bo);

    /**
     * 修改监控大屏;
     *
     * @param bo 监控大屏;
     * @return 是否修改成功
     */
    Boolean updateByBo(ELargeScreenBo bo);

    /**
     * 校验并批量删除监控大屏;信息
     *
     * @param ids     待删除的主键集合
     * @param isValid 是否进行有效性校验
     * @return 是否删除成功
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);

    /**
     * 监控大屏电梯总数统计
     * @return 电梯数量统计
     */
    ElevatorQuantityStatisticsVo queryElevatorQuantityStatistics();

    /**
     * 监控大屏维保数量统计
     *
     * @return 维保数量统计
     */
    ElevatorMaintenanceStatisticsVo queryMaintenanceStatistics();

    /**
     * 监控大屏电梯统计
     *
     * @return 电梯统计
     */
    ELargeScreenElevatorVo queryElevatorStatistics();

    /**
     * 大屏(保养页)维保统计
     *
     * @param maintenanceName 维保单位名称
     * @return 大屏(保养页)维保统计
     */
    ELargeScreenMaintenanceVo queryMaintenanceTaskStatistics(String maintenanceName);

    /**
     * 大屏维修趋势图
     *
     * @return 趋势图数据
     */
    List<ELargeScreenRepairTrendChartVo> queryRepairTrendChart();

    /**
     * 大屏维修饼图
     *
     * @param bo 参数
     * @return 维修饼图数据
     */
    List<ELargeScreenRepairPieChartVo> queryRepairPieChart(ELargeScreenRepairBo bo);

    /**
     * 大屏维修柱状图
     *
     * @param bo 参数
     * @return 维修柱状图数据
     */
    List<ELargeScreenRepairBarChartVo> queryRepairBarChart(ELargeScreenRepairBo bo);

    /**
     * 查询当前电梯详情信息
     *
     * @param elevatorNum 电梯编号
     * @return 详情
     */
    ELargeScreenElevatorInfoVo queryElevatorDetail(String elevatorNum);

    /**
     * 查询当前电梯详情历史故障统计
     *
     * @param elevatorNum 电梯编号
     * @return 历史故障统计
     */
    List<ELargeScreenDetailFaultStatisticsVo> queryElevatorDetailFaultStatistics(String elevatorNum);

    /**
     * 年度救援统计
     *
     * @return 年度救援统计
     */
    List<ELargeScreenRescueStatisticsVo> queryRescueYearStatistics();

    /**
     * 区域救援次数统计
     *
     * @param bo 查询参数
     * @return 救援区域救援次数统计
     */
    List<ELargeScreenRescueAreaStatisticsVo> queryRescueAreaStatistics(ELargeScreenRescueBo bo);

    /**
     * 救援时间占比统计
     *
     * @param bo 查询参数
     * @return 救援时间占比统计
     */
    ELargeScreenRescueTimeStatisticsVo queryRescueTimeStatistics(ELargeScreenRescueBo bo);

    /**
     * 救援故障原因统计
     *
     * @param bo 查询参数
     * @return 故障原因统计
     */
    List<ELargeScreenRescueFaultStatisticsVo> queryRescueFaultCauseStatistics(ELargeScreenRescueBo bo);

    /**
     * 救援维保排名统计
     *
     * @param bo 查询参数
     * @return 救援维保排名统计
     */
    List<ELargeScreenRescueRankStatisticsVo> queryRescueMaintenanceRankStatistics(ELargeScreenRescueBo bo);
}
