package com.njcn.device.line.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.njcn.device.biz.pojo.dto.LineALLInfoDTO;
import com.njcn.device.biz.pojo.dto.LineDTO;
import com.njcn.device.biz.pojo.dto.PollutionLineDTO;
import com.njcn.device.biz.pojo.dto.PollutionLineInfoDTO;
import com.njcn.device.biz.pojo.po.Overlimit;
import com.njcn.device.pq.pojo.dto.PollutionParamDTO;
import com.njcn.device.pq.pojo.dto.PollutionSubstationDTO;
import com.njcn.device.pq.pojo.param.*;
import com.njcn.device.pq.pojo.po.Line;
import com.njcn.device.pq.pojo.po.LineDetail;
import com.njcn.device.pq.pojo.po.TopMsgPO;
import com.njcn.device.pq.pojo.vo.*;
import org.springframework.web.bind.annotation.RequestParam;

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

/**
 * 监测点类
 * @author denghuajun
 * @date 2022/2/23
 *
 */
public interface LineService extends IService<Line> {
    /**
     * 获取监测点详情
     * @param id 监测点id
     * @return 结果
     */
    LineDetailDataVO getLineDetailData(String id);



    /**
     * 获取变电站信息
     * @param id 监测点id
     * @return 结果
     */
    List<SubstationDetailVO> getSubstationData(List<String> id);

    /**
     * 获取终端状态信息
     * @param id 监测点id
     * @param searchBeginTime 开始时间
     * @param searchEndTime 结束时间
     * @return 结果
     */
    CommunicateVO getComFlagInfoData(String id, String searchBeginTime, String searchEndTime);

    /**
     * 获取变电站id
     * @param id 监测点id
     * @return 结果
     */
    String getLineIdByDevId(String id);

    Set<String> getDevListByLineIdList(List<String> list);


    /**
     * 获取变电站信息
     * @param id 变电站id
     * @return 结果
     */
    PollutionSubstationDTO getSubstationInfo(String id);

    /**
     * 获取监测点信息
     * @param  pollutionParamDTO 监测点对象
     * @return 结果
     */
    List<PollutionLineDTO> getLineInfo(PollutionParamDTO pollutionParamDTO);

    /**
     * 获取监测点分布
     * @param deviceInfoParam 参数
     * @return 结果
     */
    List<LineDistributionVO> getLineDistribution(DeviceInfoParam deviceInfoParam);

    /**
     * 获取监测点统计
     * @param deviceInfoParam 参数
     * @return 结果
     */
    List<LineStatisticsDetailVO> getLineStatisticsDetail(DeviceInfoParam.BusinessParam deviceInfoParam);

    /**
     * 获取监测点统计
     * @param deviceInfoParam 参数
     * @return 结果
     */
    List<LineStatisticsTableVO> getLineStatisticsTable(DeviceInfoParam.BusinessParam deviceInfoParam);


    /**
     * 获取监测点限值信息
     * @param pollutionParamDTO 监测点集合
     * @return 结果
     */
    List<Overlimit> getOverLimitByList(PollutionParamDTO pollutionParamDTO);

    /**
     * 获取监测点区域详细信息(原基础上添加监测点区域经纬度信息)
     * @param lineIndex 监测点结合
     * @date 2022/6/29
     */
    List<AreaLineInfoVO> getBaseLineAreaInfo(List<String> lineIndex,String searchValue,Integer comFlag);

    /**
     * 获取监测点基本信息
     * @param lineIndex 监测点结合
     * @date 2022/6/29
     */
    List<Line> getBaseLineList(List<String> lineIndex);


    /**
     * @Description: 通过部门索引查询其下监测点数
     * @Param: [deviceInfoParam] 监测点查询条件
     * @return: java.util.List<com.njcn.device.pq.pojo.vo.DeptLineCountVO>
     * @Author: clam
     * @Date: 2022/10/10
     */
    List<DeptLineCountVO> getDeptLineCount(DeviceInfoParam deviceInfoParam);

    /**
     * @Description: 获取变电站和监测点的关系（分稳态暂态）
     * @Param: [devDataType]
     * @return: java.util.Map<java.lang.String,java.util.List<java.lang.String>>
     * @Author: clam
     * @Date: 2022/10/20
     */
    Map<String, List<String>> getLineBySubstationRelation(Integer devDataType);

    /**
     * 获取监测点基础详情
     * @param lineIds 监测点id集合
     * @return 监测点详情信息
     * @author cdf
     * @date 2022/10/26
     */
    List<LineDetailDataVO> getLineDetailList(List<String> lineIds);
    /**
     * @Description: 获取变电站下终端数
     * @Param: [subIndex]
     * @return: java.lang.Integer
     * @Author: clam
     * @Date: 2022/11/9
     */
    Integer getDeviceCountBySubstation(String subIndex);
    /**
     * @Description: 获取变电站下监测点数
     * @Param: [subIndex]
     * @return: java.lang.Integer
     * @Author: clam
     * @Date: 2022/11/9
     */
    Integer getLineCountBySubstation(String subIndex);

    Page<LineFlowMealDetailVO>getNewDeviceRunStatistics(PqsParam deviceInfoParam);

    Page<TopMsgPO> dailyDeviceAbnormalStatistics(PqsParam param);

    List<TopMsgPO> dailyDeviceAbnormal(DeviceInfoParam.BusinessParam conditionBusinessParam);

    Page<HalfReportVO> halfReport(TerminalMainQueryParam param);

    /**
     * @Description: 根据监测点获取监测点信息
     * @param id
     * @return: com.njcn.device.biz.pojo.dto.LineDTO
     * @Author: wr
     * @Date: 2023/9/22 10:46
     */
    LineDTO getLineDetail(String id);

    /**
     * 根据监测点批量获取监测点信息
     */
    List<LineDTO> getLineDetailBatch(List<String> ids);

    /**
     * @Description: 获取监测点集合(APP)
     * @param ids
     * @return: java.util.List<com.njcn.device.pq.pojo.vo.LineDetailVO.Detail>
     * @Author: wr
     * @Date: 2023/11/8 15:46
     */
    List<LineDetailVO.Detail> getLineDetailByIds(List<String> ids);

    LineALLInfoDTO getLineAllDetail(String id);

    DeviceVO getDeviceDetailData(String id);

    List<Line> getSubIndexLineDetail(String id);

    List<LineALLInfoDTO> getLineAllDetailList(List<String> ids);

    List<LineDetailVO.Detail> getDeptDeviceDetailData(DataParam param);

    List<LineDetailVO.noDataLineInfo> getNoDataLine();

    List<ReportLineInfoVo> getReportLineInfo(List<String> ids);

    List<LineDetail> getByName(LineBaseQueryParam param);

    /**
     * 获取部门下终端信息和终端下监测点信息
     * @param id
     * @return
     */
    List<DevAndLine> getByDeptDevLine(String id);

    List<String> getLevelMonitorByDept(@RequestParam("level") String level, @RequestParam("deptId")String deptId);


    List<LineDetail> getMonitorByObjId(String objId);

    List<PollutionSubstationDTO> getPowerStationByMonitorIds(List<String> ids);

    /**
     * 获取污区值监测点相关信息
     * @author hongawen
     */
    List<PollutionLineInfoDTO> getPollutionLineInfo(List<String> id);


    /**
     * 终端运行状态修改时，同时调整监测点的运行状态
     */
    void updateLineRunFlag(String id, Integer status);

    /**
     * 自动修改验证pids是否正确
     */
    void updatePids();

}
