package com.yfd.platform.modules.basedata.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.yfd.platform.modules.basedata.domain.SubstationComponent;
import com.yfd.platform.modules.basedata.domain.SubstationMaindevice;
import com.yfd.platform.modules.basedata.domain.TreeNode;
import com.yfd.platform.system.domain.SysDictionaryItems;
import org.springframework.web.multipart.MultipartFile;

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

/**
 * <p>
 * 变电站_主设备 服务类
 * </p>
 *
 *
 * @since 2023-03-28
 */
public interface ISubstationMaindeviceService extends IService<SubstationMaindevice> {

    /**********************************
     * 用途说明: 获取主设备及部件树
     * 参数说明 name 参数名称
     * 返回值说明: java.util.List<java.util.Map<java.lang.String,java.lang.Object>>
     ***********************************/
    List<Map<String, Object>> getMainDeviceTree(String bayId, String name);

    /**********************************
     * 用途说明: 修改主设备状态
     * 参数说明 id 主设备id
     * 参数说明 dataStatus 修改的状态
     * 返回值说明: boolean
     ***********************************/
    boolean setMainDeviceStatus(String id, String dataStatus);

    /**********************************
     * 用途说明: 删除主设备
     * 参数说明 id 主设备id
     * 返回值说明: boolean
     ***********************************/
    boolean deleteMainDevice(String id);

    /**********************************
     * 用途说明: 新增部件
     * 参数说明 substationComponent 部件对象
     * 返回值说明: boolean
     ***********************************/
    boolean addComponent(SubstationComponent substationComponent);

    /**********************************
     * 用途说明: 根据Id获取部件
     * 参数说明 componentId 部件id
     * 返回值说明: com.yfd.platform.basedata.domain.SubstationComponent
     ***********************************/
    SubstationComponent getComponentById(String componentId);

    /**********************************
     * 用途说明: 修改部件
     * 参数说明 substationComponent 部件对象
     * 返回值说明: boolean
     ***********************************/
    boolean updateComponent(SubstationComponent substationComponent);

    /**********************************
     * 用途说明: 修改部件状态
     * 参数说明 componentId 部件id
     * 参数说明 dataStatus  修改的状态
     * 返回值说明: boolean
     ***********************************/
    boolean setComponentStatus(String componentId, String dataStatus);

    /**********************************
     * 用途说明: 删除部件
     * 参数说明 componentId 部件id
     * 返回值说明: boolean
     ***********************************/
    boolean deleteComponent(String componentId);

    /**********************************
     * 用途说明: 导入文件
     * 参数说明 file
     * 参数说明 type 主设备,部件
     * 返回值说明: java.lang.String
     ***********************************/
    String uploadExcel(MultipartFile file, String type) throws Exception;

    /**********************************
     * 用途说明: 获取部件
     * 参数说明
     * 返回值说明: java.util.List<java.util.Map<java.lang.String,java.lang.Object>>
     ***********************************/
    List<Map<String, Object>> getComponent(String mainDeviceId,String bayId,String componentName);

    /**********************************
     * 用途说明: 获取当前主设备类型
     * 参数说明 deviceType
     * 返回值说明: com.yfd.platform.system.domain.SysDictionaryItems
     ***********************************/
    SysDictionaryItems getMainDeviceType(String deviceType);

    /**********************************
     * 用途说明: 获取主设备类型集合
     * 参数说明
     * 返回值说明: java.util.List<java.util.Map<java.lang.String,java.lang.Object>>
     ***********************************/
    List<Map<String, Object>> getDeviceType();

    /**********************************
     * 用途说明: 获取间隔下的部件
     * 参数说明 bayId 间隔Id
     * 返回值说明: java.util.List<java.util.Map<java.lang.String,java.lang.Object>>
     ***********************************/
    List<Map<String, Object>> getComponentByBay(String bayId);


    /**********************************
     * 用途说明: 获取主设备导航树
     * 参数说明 stationCode
     * 返回值说明: java.util.List<java.util.Map<java.lang.String,java.lang.Object>>
     ***********************************/
    List<Map<String, Object>> getSubstationMainDeviceTree(String stationCode,String mainDeviceName);

    /**********************************
    * 用途说明: 获取主设备树（前台）
    * 参数说明 stationCode 变电站编号
    * 参数说明 mainDeviceName 主设备名称
    * 返回值说明: com.yfd.platform.modules.basedata.domain.TreeNode
    ***********************************/
    TreeNode getSubstationMainTree(String stationCode, String mainDeviceName);

    /**********************************
    * 用途说明: 获取信号树（前台）
    * 参数说明 stationCode 变电站编号
    * 参数说明 signalName 信号名称
    * 返回值说明: java.util.List<com.yfd.platform.modules.basedata.domain.TreeNode>
    ***********************************/
    List<TreeNode> getDeviceSignalTree(String stationCode,String signalName);

    /**********************************
    * 用途说明: 获取部件树（前台）
    * 参数说明 stationCode 变电站编号
    * 参数说明 componentName 部件名称
    * 返回值说明: java.util.List<com.yfd.platform.modules.basedata.domain.TreeNode>
    ***********************************/
    List<TreeNode> getComponentTree(String stationCode, String componentName);

}
