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

import com.sooka.sponest.monitor.aidevicedept.domain.CenterdataTAidevicedept;
import com.sooka.sponest.monitor.camera.domain.*;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.ArrayList;
import java.util.List;

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

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

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

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

    ArrayList<CentermonitorTCameraImg> selectCentermonitorTCameraImgByCameraId(String id);

    ArrayList<CentermonitorTCameraImg> selectCentermonitorTCameraImgByCameraCode(String cameraCode);


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

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


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

    /**
     * 查询摄像头列表
     *
     * @param centermonitorTCameraStateLog 摄像头
     * @return 摄像头集合
     */
    List<CentermonitorTCameraStateLog> selectCentermonitorTCameraListStateLog(@Param("vo") CentermonitorTCameraStateLog centermonitorTCameraStateLog);

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

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

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

    /**
     * 新增摄像头图片
     *
     * @param images 新增摄像头图片
     * @return 结果
     */
    int insertCentermonitorTCameraImg(List<CentermonitorTCameraImg> images);

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

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

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

    /**
     * 修改摄像头
     *
     * @param centermonitorTCamera 摄像头
     * @return 结果
     */
    int updateCentermonitorTCamera(CentermonitorTCamera centermonitorTCamera);

    int updateCentermonitorTCameraImg(@Param("cameraImg") String cameraImg, @Param("id") String id);

    int updateCameraWorkingStatus(CentermonitorTCamera centermonitorTCamera);

    int updateAidevicedept(CenterdataTAidevicedept aidevicedept);

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

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

    /**
     * 查询附近摄像头列表
     */
    List<CentermonitorTCamera> selectFjsxt(CentermonitorTCamera centermonitorTCamera);

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

    /**
     * 根据部门ID获取摄像头列表
     */
    List<VisuForestCloudCameraBO> selectCameraByDepId(VisuForestMonitorCenterVO visuForestMonitorCenterVO);

    /**
     * 获取各部门摄像头数量
     */
    List<VisuForestCloudTodaySjfbBO> selectCameraGroupByDept(VisuForestMonitorCenterVO visuForestMonitorCenterVO);

    /**
     * 获取覆盖范围摄像头数量
     */
    List<VisuForestCloudMapVO> selectCameraByCoverage(VisuForestCloudMapVO visuForestCloudMapVO);

    /**
     * 获取各部门摄像头,传感器,云广播数量
     */
    List<VisuForestCloudMapDeviceBO> selectDeviceType(VisuForestCloudMapVO visuForestCloudMapVO);

    /**
     * 新增摄像头图片
     */
    int insertCentermonitorTCameraType(CentermonitorTCameraType type);

    /**
     * 根据摄像头id移除其id下的摄像头图片
     */
    int deleteCentermonitorTCameraTypeById(String cameraId);

    /**
     * 根据摄像头id查询其id下的摄像头图片
     */
    List<CentermonitorTCamera> SelectByIdcreameType(String cameraId);

    /**
     * 获取各部门摄像头,传感器,云广播数量
     */
    List<VisuForestCloudMapDeviceBO> selectDeviceTypeGong(VisuForestCloudMapVO visuForestCloudMapVO);

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

    /**
     * 电视墙 过期
     */
    List<VisuForestCloudCameraBO> selectCameraByDepIdGong(VisuForestCloudMapVO visuForestCloudMapVO);

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

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

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

    /**
     * 根据搜索的经纬度查询摄像头列表（摄像头半径包含当前经纬度点位的摄像头）
     *
     * @return
     * @Version 1.0
     * @author wang_xy
     * @since 2023/3/27 15:07
     */
    List<CentermonitorTCamera> findCameraByEventCoordinate(@Param("longitude") String longitude, @Param("latitude") String latitude, @Param("type") String type);

    /**
     * 根据搜索的经纬度查询摄像头列表
     *
     * @return
     * @Version 1.0
     * @author wang_xy
     * @since 2023/3/27 15:07
     */
    List<CentermonitorTCamera> findNearbyCameras(@Param("longitude") String longitude, @Param("latitude") String latitude, @Param("radius") 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(@Param("yearAndMonth") String yearAndMonth);

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

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

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

    /**
     * 根据摄像头id移除摄像头图片
     **/
    void deleteImageByCameraId(@Param("cameraId") String cameraId);

    /**
     * 接入设备情况-厂商-雷达图
     */
    List<CentermonitorTCamera> getAccessManufacturer(CentermonitorTCamera centermonitorTCamera);

    /**
     * 设备离线情况-设备型号
     */
    public List<CentermonitorTCamera> getDeviceOffline(CentermonitorTCamera centermonitorTCamera);

    /**
     * 设备离线情况-设备品牌
     */
    public List<CentermonitorTCamera> getDeviceBrand(CentermonitorTCamera centermonitorTCamera);

    /**
     * 设备离线情况-运营商
     */
    public List<CentermonitorTCamera> getOperator(CentermonitorTCamera centermonitorTCamera);

    /**
     * 设备离线类型
     */
    public List<CentermonitorTCamera> getOfflineType(CentermonitorTCamera centermonitorTCamera);

    Integer getEquipmentStatistics(CentermonitorTCamera centermonitorTCamera);

    List<CentermonitorTCameraVideoStatisticsDTO> getVideoCountyStatistics(CentermonitorTCamera centermonitorTCamera);

    /**
     * 视频目录统计
     */
    public List<CentermonitorTCamera> getVideoDirectory(CentermonitorTCamera centermonitorTCamera);

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

    /**
     * 根据cameraCode更新执法仪状态
     **/
    void updateLawEnforcementInstrumentState(@Param("status") String status, @Param("code") String code);

    /**
     * 根据部门ID获取执法记录仪列表
     */
    List<VisuForestCloudCameraBO> selectRecorderByDeptId(VisuForestCloudMapVO visuForestMonitorCenterVO);

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


    CentermonitorTCamera selectCameraInfoByChannelCode(@Param("channelCode") String channelCode);

}

