package com.njcn.device.pms.service.majornetwork;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.njcn.common.pojo.dto.SimpleDTO;
import com.njcn.device.biz.pojo.dto.DeptGetChildrenDTO;
import com.njcn.device.biz.pojo.dto.LineALLInfoDTO;
import com.njcn.device.biz.pojo.dto.LineDTO;
import com.njcn.device.biz.pojo.dto.LineDevGetDTO;
import com.njcn.device.biz.pojo.param.DeptGetLineParam;
import com.njcn.device.pms.pojo.dto.PmsMonitorBaseDTO;
import com.njcn.device.pms.pojo.dto.PmsMonitorDTO;
import com.njcn.device.pms.pojo.dto.PmsMonitorInfoDTO;
import com.njcn.device.pms.pojo.param.*;
import com.njcn.device.pms.pojo.param.gw.TypicalSourceParam;
import com.njcn.device.pms.pojo.po.Monitor;
import com.njcn.device.pms.pojo.vo.MonitorVO;
import com.njcn.device.pms.pojo.vo.PmsMonitorVO;
import com.njcn.device.biz.pojo.po.Overlimit;
import com.njcn.device.pms.pojo.vo.gw.TypicalSourceOnLine;
import com.njcn.device.biz.pojo.dto.PollutionLineDTO;
import com.njcn.user.pojo.po.Dept;
import org.springframework.web.multipart.MultipartFile;


import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author hongawen
 * @since 2022-10-14
 */
public interface IMonitorService extends IService<Monitor> {

    /***
     *
     * @author hongawen
     * @date 2022/10/17 11:36
     * @param deptIdList 部门索引
     * @param pmsDeviceInfoParam 前端查询条件
     * @return List<Monitor>
     */
    List<PmsMonitorBaseDTO> getMonitorByCondition(List<String> deptIdList, PmsDeviceInfoParam pmsDeviceInfoParam);

    /**
     * 获取指定的监测点信息
     *
     * @param pmsMonitorInfoParam 获取监测点详情数据入参
     * @return 指定的监测点信息
     */
    List<PmsMonitorInfoDTO> getMonitorInfo(PmsMonitorInfoParam pmsMonitorInfoParam);

    /***
     * 根据条件获取监测点信息列表
     * @author jianghaifei
     * @date 2022-10-20 22:55
     * @param pmsMonitorParam
     * @return java.util.List<com.njcn.device.pms.pojo.dto.PmsMonitorDTO>
     */
    List<PmsMonitorDTO> getMonitorInfoListByCond(PmsMonitorParam pmsMonitorParam);

    /***
     * 获取所有监测点信息
     * @author jianghaifei
     * @date 2022-10-24 20:01
     * @param
     * @return java.util.List<com.njcn.device.pms.pojo.vo.PmsMonitorVO>
     */
    List<PmsMonitorVO> getAllMonitorList();

    /**
     * 获取限值表信息
     * @param id 监测点id
     * @return 结果 Overlimit
     */
    Overlimit getOverLimitData(String id);


    List<Overlimit> getOverLimitDataByIds(List<String> ids);



    Page<Monitor> getAllMonitorPageList(TerminalQueryParam baseParam);

    Page<Monitor> getAllMainUserPageList(TerminalQueryParam baseParam);


    List<Monitor> getMonitorList(List<String> monitorIds);

    List<Monitor> getMonitorListByMid(List<String> midIds);


    List<LineDevGetDTO> getPmsCalMonitorList(List<String> monitorIds);


    Page<Monitor> getMonitorPage(TerminalQueryParam baseParam);

    List<Monitor> getMonitorListByParam(MonitorParam monitorParam);


    /**
     * 新增主网监测点
     * @author cdf
     * @date 2022/10/25
     * @param monitorParam 主网监测点
     * @return boolean
     */
    boolean addMonitor(MonitorParam monitorParam);

    /**
     * 新增主网监测点
     * @author cdf
     * @date 2022/10/25
     * @param monitorParam 主网监测点
     * @return boolean
     */
    boolean updateMonitor(MonitorParam monitorParam);

    /**
     * 新增主网监测点
     * @author cdf
     * @date 2022/10/25
     * @param monitorIds 主网监测点
     * @return boolean
     */
    boolean delMonitor(List<String> monitorIds);

    /**
     *
     * @author cdf
     * @date 2023/2/20
     */
    boolean retirementMonitor(Integer type, List<String> lineIds);


    /***
     *
     * 根据组织ID及条件，获取响应的变电站基础信息
     */
    List<SimpleDTO> getPmsPowerrInfoWithInOrg(List<String> orgIdList, PmsDeviceInfoParam pmsDeviceInfoParam);

    /**
     * 根据监测点id，修改数据状态
     * @param monitorParam
     * @return
     */
    boolean updateStatus(MonitorStatus monitorParam);

  /***
   * 获取台账和终端信息
   * @author wr
   * @date 2023-03-23 10:17
   * @param param
   * @return MonitorVO
   */
   MonitorVO monitorTerminal(MonitorTerminalParam param);


    /**
     * 根据部门id获取监测点信息
     * @return
     */
    List<DeptGetChildrenDTO> deptMonitor(DeptGetLineParam param);


    /**
     *
     * @author cdf
     * @date 2023/6/8
     */
    String importOracleLedgerToMysql(MultipartFile file, HttpServletResponse response);


    String importUpdateLedger(MultipartFile file, HttpServletResponse response);


    /**
     * @Description: 获取所有监测点限值
     * @param
     * @return: java.util.List<com.njcn.device.biz.pojo.po.Overlimit>
     * @Author: wr
     * @Date: 2023/9/21 11:07
     */
    List<Overlimit> getAllLineOverLimit();

    /**
     * @Description: 获取变电信息
     * @param devDataType
     * @return: java.util.Map<java.lang.String,java.util.List<java.lang.String>>
     * @Author: wr
     * @Date: 2023/9/21 13:19
     */
    Map<String, List<String>> getLineBySubstationRelation(Integer devDataType);

    /**
     * 根据监测点id获取监测点信息
     * @param id
     * @return
     */
    LineDTO getLineDetail(String id);

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


    /**
     * 获取部门树（存在监测点的）
     * @author cdf
     * @date 2024/2/26
     */
    List<Dept> existMonitorDeptTree();

    LineALLInfoDTO getLineAllDetail(String id);


    /**
     * @Description: 典型源荷下穿信息接口
     * @Author: wr
     * @Date: 2024/5/27 13:54
     */
    Page<TypicalSourceOnLine> monitorTypicalList(TypicalSourceParam param);


    List<PollutionLineDTO> getLineInfo(List<String> ids);
}
