package com.sooka.sponest.monitor.camera.service;

import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.system.api.domain.SysDept;
import com.sooka.sponest.monitor.camera.domain.*;

import java.util.List;
import java.util.Map;

/**
 * 摄像头Service接口
 *
 * @author ruoyi
 * @date 2022-06-08
 */
public interface ICentermonitorTCameraService
{
    /**
     * 查询摄像头
     *
     * @param cameraCode 摄像头编码
     * @return 摄像头
     */
     CentermonitorTCamera selectCentermonitorTCameraByCameraCode(String cameraCode);

    /**
     * 查询摄像头
     *
     * @param channelCode 通道编码
     * @return 摄像头
     */
     CentermonitorTCamera selectCentermonitorTCameraByChannelCode(String channelCode);

    /**
     * 查询摄像头
     *
     * @param id 摄像头主键
     * @return 摄像头
     */
     CentermonitorTCamera selectCentermonitorTCameraById(String id);

    /**
     * 获取摄像头详细信息(多个)
     */
     List<CentermonitorTCamera> selectIdTCameraById(String[] ids);

    /**
     * 通过摄像头账号获取摄像头详细信息
     */
     CentermonitorTCamera selectCentermonitorTCameraByCameraAccount(String cameraAccount);

    /**
     * 查询摄像头列表
     *
     * @param centermonitorTCamera 摄像头
     * @return 摄像头集合
     */
     List<CentermonitorTCamera> selectCentermonitorTCameraList(CentermonitorTCamera centermonitorTCamera);

    /**
     * 根据部门ID和工作状态查询摄像头列表
     *
     * @param centermonitorTCamera 摄像头
     * @return 摄像头集合
     */
     List<CentermonitorTCamera> selectCameraListByDeptIdAndWorkingStatus(CentermonitorTCamera centermonitorTCamera);

    /**
     * 查询状态日志
     *
     * @param centermonitorTCameraStateLog 状态日志
     * @return 状态日志
     */
     List<CentermonitorTCameraStateLog> selectCentermonitorTCameraListStateLog(CentermonitorTCameraStateLog centermonitorTCameraStateLog);

    /**
     * 查询摄像头列表
     *
     * @param centermonitorTCamera 摄像头
     * @return 摄像头集合
     */
     List<CentermonitorTCamera> selectCentermonitorTCameraListForApp(CentermonitorTCamera centermonitorTCamera);

    /**
     * 新增摄像头
     *
     * @param centermonitorTCamera 摄像头
     * @return 结果
     */
     int insertCentermonitorTCamera(CentermonitorTCamera centermonitorTCamera);

    /**
     * 新增摄像头离线日志
     * @param cameraStateLog 摄像头离线日志
     * @return 结果
     * */
     int insertCentermonitorTCameraStateLog(CentermonitorTCameraStateLog cameraStateLog);

    /**
     * 查询摄像头离线日志
     * @param cameraId 摄像头ID
     * @return 结果
     * */
     List<CentermonitorTCamera> selectCentermonitorTCameraStateLog(String cameraId);

    /**
     * 校验摄像头IP唯一
     *
     * @param centermonitorTCamera 摄像头
     * @return 结果
     */
     String checkIpUnique(CentermonitorTCamera centermonitorTCamera);

    /**
     * 校验摄像头编码唯一
     *
     * @param centermonitorTCamera 摄像头
     * @return 结果
     */
     String checkCodeUnique(CentermonitorTCamera centermonitorTCamera);

    /**
     * 修改摄像头
     *
     * @param centermonitorTCamera 摄像头
     * @return 结果
     */
     int updateCentermonitorTCamera(CentermonitorTCamera centermonitorTCamera);
     void updateCameraWorkingStatus(CentermonitorTCamera centermonitorTCamera, CentermonitorTCameraStateLog stateLog);

    /**
     * 批量删除摄像头
     *
     * @param ids 需要删除的摄像头主键集合
     * @return 结果
     */
     int deleteCentermonitorTCameraByIds(String[] ids);

    /**
     * 删除摄像头信息
     *
     * @param id 摄像头主键
     * @return 结果
     */
     int deleteCentermonitorTCameraById(String id);

    /**
     * 查询附近摄像头列表
     */
     List<CentermonitorTCamera>selectFjsxt(String longitude,  String latitude, String type);

    /**
     * 根据设备用途查询摄像头列表
     */
     List<CentermonitorTCamera>selectCentermonitorTCameraListByCameraUse(String cameraUse);

    /**
     * 根据部门ID获取摄像头列表
     */
     AjaxResult selectCameraByDepId(VisuForestCloudMapVO visuForestMonitorCenterVO);

    /**
     * 获取覆盖范围摄像头数量
     */
     AjaxResult selectCameraByCoverage(VisuForestCloudMapVO visuForestMonitorCenterVO);

    /**
     * 获取各部门摄像头数量
     */
     AjaxResult selectCameraGroupByDept(VisuForestMonitorCenterVO vo);

    /**
     * 获取各部门摄像头,传感器,云广播数量
     */
     AjaxResult selectDeviceType(VisuForestCloudMapVO visuForestMonitorCenterVO);

    /**
     * 根据类别获取摄像头数量
     */
     List<VisuForestCloudMapDeviceBO> selectDeviceTypeR(VisuForestCloudMapVO visuForestMonitorCenterVO);

    /**
     * 可视化前端根据不同入参查询摄像头、传感器、大喇叭、无人机等设备的数量、列表、部门分组数量
     * @param visuForestCloudMapVO
     * @return
     */
     AjaxResult selectDeviceTypeGong(VisuForestCloudMapVO visuForestCloudMapVO);

    /**
     * 电视墙 过期
     * */
     AjaxResult selectCameraByDepIdGong(VisuForestCloudMapVO visuForestCloudMapVO);

    /**
     * 根据摄像头事件类别查询海康摄像头列表高清通道
     * */
     AjaxResult cameraTVHaiKangList(VisuForestCloudMapVO visuForestCloudMapVO);

    /**
     * 根据部门查询摄像头列表
     */
     AjaxResult selectCameraGroupByDeptGong(VisuForestCloudMapVO visuForestCloudMapVO);

     boolean isLatLng(String longitude,  String latitude);

    /**
     * 获取正常工作摄像头数量
     */
     CameraVO cameraCount();

    /**
     * 根据搜索的部门查询摄像头列表（摄像头半径包含当前部门点位的摄像头）
     * @Version 1.0
     * @return
     * @author wang_xy
     * @since 2023/3/27 15:07
     */
     List<CentermonitorTCamera> findCameraByDept(VisuForestCloudMapVO visuForestCloudMapVO);

    /**
     * 根据搜索的经纬度查询摄像头列表（摄像头半径包含当前经纬度点位的摄像头）
     *
     */
     List<CentermonitorTCamera> findCameraByEventCoordinate(String longitude,String latitude,String type);

    /**
     * 根据搜索的经纬度查询摄像头列表
     *
     */
     List<CentermonitorTCamera> findNearbyCameras(String longitude,String latitude,String radius);
     CentermonitorTCamera getCameraByChannelNum(String channelNum);

    /**
     * 监控中心首页-右上角四个数
     *
     *
     */
     List<CentermonitorTCamera> selectAlldeviceCountAndDetailCount(CentermonitorTCamera centermonitorTCamera);

    /**
     * 监控中心首页-当前设备状态
     */
     List<CentermonitorTCamera> selectDeviceAndCameraOnlineAndOfflineList(CentermonitorTCamera centermonitorTCamera);

    /**
     * 区县离线设备扇形图
     */
     List<CentermonitorTCamera> selectQxOfflineDeviceCount(CentermonitorTCamera centermonitorTCamera);

    /**
     * 设备类型扇形图
     */
     List<CentermonitorTCamera> selectQxOfflineDeviceTypeCount(CentermonitorTCamera centermonitorTCamera);

    /**
     * 监控中心首页-日离线设备折线图
     * **/
     List<IndexLineChartsVo> dayLineChart(String yearAndMonth);

    /**
     * 监控中心首页-月离线设备折线图
     */
     List<IndexLineChartsVo> monthlyLineChart(String year);

    /**
     * 监控中心首页-季度离线设备折线图
     */
     List<IndexLineChartsVo> quarterLineChart(String year);

    /**
     * 监控中心首页-年离线设备折线图
     */
     List<IndexLineChartsVo> yearLineChart(String year);

    /**
     * 查询全部摄像头用于和检测设备一对多绑定
     * **/
    List<CameraCodeAndNameVO> selectAllCameraList();

    R saveCameraCallLog(JSONObject deviceCode);
    /**
     * 接入设备情况-厂商-雷达图
     */
    Map<String, List> getAccessManufacturer(Long deptId);

    /**
     * 设备离线情况-设备型号
     */
    Map<String, List> getDeviceOffline(Long deptId);

    /**
     * 设备离线情况-设备品牌
     */
    Map<String, List> getDeviceBrand(Long deptId);

    /**
     * 设备离线情况-运营商
     */
    Map<String, List> getOperator(Long deptId);

    /**
     * 设备离线类型
     */
    Map<String, List> getOfflineType(Long deptId);

    /**
     * 视频目录统计
     */
    Map<String, List> getVideoDirectory(Long deptId);


    Map<String, List> getCameraCallDepartmentLogOneStatistics(List<SysDept> sysDeptList);

    Map<String, List> getCameraCallDepartmentLogTwoStatistics(List<SysDept> sysDeptList);

    Map<String, List> getCameraCallLogStatistics(Long deptId);

    Map<String, List> getEquipmentStatistics(List<SysDept> sysDeptList);

    List<CentermonitorTCameraVideoStatisticsVO> getVideoCountyStatistics(List<SysDept> sysDeptList);

    List<GiveAnAlarmResultDTO> selectEventGjnums(List<SysDept> sysDeptList);

    R getVideoFusionUnifyInlet(Long deptId);

    /**
     * 根据部门ID获取执法记录仪列表
     * **/
    AjaxResult selectRecorderByDeptId(VisuForestCloudMapVO vo);

    /**
     * 根据部门ID获取执法记录仪在离线状态数量
     */
    RecorderCountVO selectRecorderCountByDeptId(VisuForestCloudMapVO visuForestMonitorCenterVO);

    /**
     * 根据通道编码查询摄像头信息
     *
     * @param channelCode 通道编码
     *
     */
    public CentermonitorTCamera selectCameraInfoByChannelCode(String channelCode);
}






