package com.njcn.mapper.configuration;


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

import com.njcn.pojo.commons.device.LineDetailInfo;
import com.njcn.pojo.commons.device.LineInfo;
import com.njcn.pojo.configuration.LineDetail;
import org.apache.ibatis.annotations.Param;

import com.njcn.pojo.commons.DeviceType;
import com.njcn.pojo.commons.device.MachineAccount;
import com.njcn.pojo.commons.device.Tree;
import com.njcn.pojo.configuration.Line;
import com.njcn.pojo.data.Detailed;
import com.njcn.pojo.data.IndexsCount;
import com.njcn.pojo.data.InfoData;
import com.njcn.pojo.data.Legder;
import com.njcn.pojo.excelBody.LineExcelBody;
import com.njcn.pojo.responsibility.ResponsibilityData;
import com.njcn.pojo.user.Depts;

import tk.mybatis.mapper.common.Mapper;

public interface LineMapper extends Mapper<Line> {


    //根据终端索引获取所有的监测点索引
    List<Integer> getLineIndex(@Param("list") List<Integer> devIndexs);

    //根据终端索引获取所有的监测点索引
    List<Integer> getLineIndexSingle(@Param("devIndexs") Integer devIndexs, @Param("lineIndex") List<Integer> lineIndex);

    //根据电压等级,终端索引获取合理的监测点索引
    List<Integer> getLineIndexs(@Param("list") List<Integer> devLindexs, @Param("dicIndex") String dicIndex);

    //根据电压等级,终端索引获取合理的终端索引
    List<Integer> getDeviceIndexs(@Param("list") List<Integer> devLindexs, @Param("dicIndex") String dicIndex);

    //根据干扰源类型终,终端索引获取合理的监测点索引
    List<Integer> getLineIndexsByLoadType(@Param("list") List<Integer> devIndexs, @Param("dicIndex") String dicIndex);

    //根据干扰源类型终,终端索引获取合理的终端索引
    List<Integer> getDeviceIndexsByLoadType(@Param("list") List<Integer> devIndexs, @Param("dicIndex") String dicIndex);

    Line queryLineData(Long lineid);

    int updateScale(@Param("scale") String scale,@Param("jzCmp") Float jzCmp,@Param("pt") Float pt, @Param("subvName") String subvName, @Param("subvIndex") Long subvIndex);

    //根据现有的监测点筛选出国网监测点
    List<Integer> getGWLines(@Param("list") List<Integer> subList);

    List<Integer> getAllGWLines(@Param("list") List<Integer> subList);

    String selectLineName(String name);

    //获取该表所有数据，提供excel导出
    List<LineExcelBody> selectAllExcelData();

    //根据事件获取监测点数据
    Line getLineByEventDetailIndex(String eventIndex);

    String getNodeIpbylineIndex(@Param("lineIndex") Long lineIndex);

    String getNodeIpbyDevIndex(@Param("lineIndex") Long lineIndex);

    List<Line> testName(@Param("name") String name, @Param("subvIndex") Long subvIndex, @Param("lineIndex") Long lineIndex);

    //根据监测点获取测量间隔
    int getIntervalByIndex(Integer lineIndex);

    //根据监测点查询该监测点的所有信息，比如 供电公司名 变电站名 装置名 IP等
    ResponsibilityData queryByLineIndex(Integer lineIndex);

    List<Line> getLinesByPro(@Param("proIndex") int proIndex);

    //稳态离线管理监测点
    List<Integer> getOffLineIndexWT(String systype);

    int getRole(@Param("url") String url, @Param("role") List<String> role);

    List<Integer> listAllIndex();

    MachineAccount getLineName(@Param("lineId") Integer lineId);

    /**
     * 根据系统类型获取所有的国网监测点索引
     */
    List<Integer> getGwLinesByDeviceType(@Param("type") List<Integer> dataType);

    List<Integer> getDeptsLineIndex(@Param("deptsIndex") String deptsIndex, @Param("sysIndex") String sysIndex, @Param("flag") boolean flag);

    List<Integer> getDeptsLineIndexs(@Param("deptsIndex") String deptsIndex, @Param("sysIndex") String sysIndex, @Param("flag") boolean flag);

    List<Depts> getSubDeptsIndex(@Param("parentDeptsIndex") String parentDeptsIndex, @Param("listArea") List<String> listArea);

    List<Legder.Data> getVoltageData(@Param("list") List<Integer> list, @Param("listVoltage") List<String> listVoltage, @Param("nature") Integer nature);

    List<Legder.Data> getTypeData(@Param("list") List<Integer> list, @Param("listType") List<String> listType, @Param("nature") Integer nature);

    List<Legder.Data> getFactoryData(@Param("list") List<Integer> list, @Param("listFactory") List<String> listFactory, @Param("nature") Integer nature);

    List<Legder.Data> getMonitorData(@Param("list") List<Integer> list, @Param("appear") String appear, @Param("nature") Integer nature);

    List<Integer> siftLineIndexs(@Param("list") List<Integer> list, @Param("scale") String scale, @Param("manc") String manc, @Param("loadtype") String loadtype, @Param("monitorNature") Integer monitorNature);

    List<Integer> siftLineIndexsByLineGrade(@Param("list") List<Integer> list, @Param("scale") String scale, @Param("manc") String manc, @Param("loadtype") String loadtype,@Param("lineGrade") Integer lineGrade);

    List<IndexsCount> siftAllIndexs(@Param("list") List<Integer> list, @Param("scale") String scale, @Param("manc") String manc, @Param("loadtype") String loadtype, @Param("devLocation") String devLocation);

    List<IndexsCount> siftAllIndexsByLineGrade(@Param("list") List<Integer> list, @Param("scale") String scale, @Param("manc") String manc, @Param("loadtype") String loadtype,@Param("lineGrade") Integer lineGrade);

    List<Integer> getPointIndexbyVoltage(@Param("deptsIndex") String deptsIndex, @Param("sysIndex") String sysType, @Param("guid") String guid);

    List<Integer> getPointIndexbyType(@Param("deptsIndex") String deptsIndex, @Param("sysIndex") String sysType, @Param("guid") String guid);

    List<Integer> getPointbyMonitor(@Param("deptsIndex") String deptsIndex, @Param("sysIndex") String sysType, @Param("guid") String guid);

    List<Detailed> getDetailed(@Param("start") Date start, @Param("end") Date end, @Param("listLine") List<Integer> listLine, @Param("list") List<Integer> list);

    List<Tree> getTreeBySubv(@Param("subvIndex") Long subvIndex, @Param("list") List<Integer> list);

    List<InfoData> getAreaBytimeOne(@Param("list") List<Integer> list, @Param("typeName") String typName, @Param("start") Date start, @Param("end") Date end, @Param("sysType") Integer sysType, @Param("index") String index);

    List<InfoData> getAreaBytimeZero(@Param("list") List<Integer> list, @Param("typeName") String typName, @Param("start") Date start, @Param("end") Date end, @Param("sysType") Integer sysType, @Param("index") String index);

    List<InfoData> getVoltage(@Param("list") List<Integer> list);

    List<InfoData> getLoadType(@Param("list") List<Integer> list);

    List<InfoData> getVoltageBytimeOne(@Param("list") List<Integer> list, @Param("typeName") String typName, @Param("start") Date start, @Param("end") Date end, @Param("sysType") Integer sysType);

    List<InfoData> getVoltageBytimeZero(@Param("list") List<Integer> list, @Param("typeName") String typName, @Param("start") Date start, @Param("end") Date end, @Param("sysType") Integer sysType);

    List<InfoData> getLoadTypeBytimeOne(@Param("list") List<Integer> list, @Param("typeName") String typName, @Param("start") Date start, @Param("end") Date end, @Param("sysType") Integer sysType);

    List<InfoData> getLoadTypeBytimeZero(@Param("list") List<Integer> list, @Param("typeName") String typName, @Param("start") Date start, @Param("end") Date end, @Param("sysType") Integer sysType);

    List<InfoData> getMonitorBytimeOne(@Param("list") List<Integer> list, @Param("typeName") String typName, @Param("start") Date start, @Param("end") Date end, @Param("sysType") Integer sysType);

    List<InfoData> getMonitorBytimeZero(@Param("list") List<Integer> list, @Param("typeName") String typName, @Param("start") Date start, @Param("end") Date end, @Param("sysType") Integer sysType);

    //根据变电站id获取变电站名称
    String getSubNameById(@Param("id") Long id);

    /**
     * 根据系统类型获取所有的国网监测点索引(电度)
     */
    List<Integer> getGwLinesByDevicePlateType(@Param("type") List<Integer> dataType);

    /**
     * 根据监测点id集合判断设备号是否重复
     * @author cdf
     * @date 2021/8/12
     */
    Integer getDevSumForLine(@Param("list") Set<Integer> list);

    LineInfo getLineObject(@Param("lineIndex")Integer lineIndex);

    Integer getDeviceIndex(@Param("lineIndex")Integer lineIndex);

    /**
     * 根据母线id获取母线下所有监测点
     * @author cdf
     * @date 2021/11/17
     */
    List<Line> getLineListBySubVId(@Param("subVindex")Long subVindex);

    /***
     * 获取监测点等级
     * @author hongawen
     * @date 2023/7/31 10:35
     */
    String getLineGradeById(@Param("lineIndex") Long lineIndex);

    /**
     * 装置调整状态时，将监测点状态也调整为装置状态
     * @param status        装置状态
     * @param devIndex      装置ID
     * @return
     */
    int updateLineStatus(@Param("status") Integer status, @Param("devIndex") Long devIndex);

}
