package com.njcn.device.line.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.njcn.device.biz.pojo.dto.LineDevGetDTO;
import com.njcn.device.biz.pojo.dto.SubGetBase;
import com.njcn.device.biz.pojo.dto.TerminalGetBase;
import com.njcn.device.biz.pojo.param.SubstationParam;
import com.njcn.device.pq.pojo.po.DeptLine;
import com.njcn.device.pq.pojo.vo.DevDetailVO;
import com.njcn.device.pq.pojo.vo.LineDeviceStateVO;
import com.njcn.web.pojo.param.DeptLineParam;

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

/**
 * @author denghuajun
 * @date 2022/1/12 17:30
 *
 */
public interface DeptLineService extends IService<DeptLine> {

    /**
     * 部门绑定监测点
     * @param deptLineParam 部门监测点的实体类
     * @return 绑定结果
     */
    void deptBindLine(DeptLineParam deptLineParam);


    /**
     * 部门解绑监测点
     * @param deptLineParam 部门监测点的实体类
     * @return 解绑结果
     */
    void deptDeleteBindLine(DeptLineParam deptLineParam);


    /**
     * 根据部门ids集合查询是否绑定监测点
     * @param ids 部门ids
     * @return 查询结果
     */
    List<DeptLine> selectDeptBindLines(List<String> ids);


    /**
     * 根据监测点id获取部门信息
     * @param ids
     * @return
     */
    List<DeptLine> selectDeptLine(List<String> ids);

    /**
     * 根据部门ids集合查询所有监测点id
     * @param ids 部门ids
     * @return 查询结果
     */
    List<String> getLineByDeptIds(List<String> ids,String manufacturer,List<Integer> runFlag,List<Integer> dataType,String objType);

    /**
     * 部门解除绑定监测点
     * @param id 部门id
     * @return 解绑结果
     */
    int removeBind(String id);

    /**
     * 功能描述: 根据部门id获取绑定的监测点
     *
     * @param id
     * @return java.util.List<java.lang.String>
     * @author xy
     * @date 2022/1/25 9:28
     */
    List<String> getLineByDeptId(String id);

    /**
     * 功能描述: 根据部门id获取绑定的监测点且再根据NewStation进行过滤
     * @param id,type
     * @author guofeihu
     * @date 2024/8/19
     */
    List<String> getLineByDeptIdAndNewStation(String id);

    /**
     * @Description: 根据部门id获取所有子集部门所包含的部门信息
     * @param id
     * @return: java.util.List<java.lang.String>
     * @Author: wr
     * @Date: 2023/11/8 14:54
     */
    List<String> getLineNodeByDeptId(String id);

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



    /**
     * 获取根据单位分组的监测点集合信息
     * param 系统类型  0暂态 1稳态 2 双类型
     * param type 台账类型 1监测点 2母线 3 装置
     * @author cdf
     * @date 2023/5/10
     */
    Map<String, List<LineDevGetDTO>> lineDevGet(List<Integer> devType,Integer type,Integer lineRunFlag);

    Map<String, List<LineDevGetDTO>> lineDevAllGet(List<Integer> devType,Integer type,Integer lineRunFlag, Integer lineType);

    /**
     * 获取根据单位分组的变电站集合信息
     * @author cdf
     * @date 2023/5/10
     */
    Map<String, List<TerminalGetBase>> orgSubStationGet(List<Integer> devType);


    List<TerminalGetBase.Extend> orgSubStationInfoGet(List<Integer> devType,Integer powerFlag,Integer lineRunFlag,Integer monitorFlag,String searchValue);

    List<SubGetBase> getSubStationList(SubstationParam substationParam);



    /**
     * 根据监测点id集合查询部门信息id
     * @param ids 部门ids
     * @return 查询结果
     */
    DeptLine getLineByLineIds(String ids);

    List<DeptLine> getDeptListByLineId(String id);

    List<LineDeviceStateVO> getLineDetailByDeptId(String id);


    /**
     * 根据部门id和终端id筛选信息
     * @param orgId
     * @return
     */
    List<DevDetailVO> getLineDetailByDeptIdAndDevIds(String orgId,Integer powerFlag, List<String> devIds);



}
