package com.persagy.dmp.rwd.digital.service;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.persagy.dmp.basic.dto.RequestData;
import com.persagy.dmp.common.model.response.CommonResult;
import com.persagy.dmp.digital.entity.ObjectDigital;

import java.io.IOException;
import java.util.List;
import java.util.Map;

/**
 * 对象数据 接口
 * @author Charlie Yu
 * @date 2021-07-08
 */
public interface IObjectDigitalService extends IService<ObjectDigital> {

    /**
     * 通过ID查询
     * @param id 主键
     * @return
     */
    ObjectDigital load(String id);

    /**
     * 按条件计数
     * @param queryWrapper 查询条件
     * @return 结果数量
     */
    Integer queryCount(Wrapper<ObjectDigital> queryWrapper);

    /**
     * 按条件查询
     * @param queryWrapper 查询条件
     * @return 列表
     */
    List<ObjectDigital> queryByCondition(Wrapper<ObjectDigital> queryWrapper);

    /**
     * 按条件查询
     * @param page 分页条件
     * @param queryWrapper 查询条件
     * @return 分页结果
     */
    Page queryByCondition(Page page, Wrapper<ObjectDigital> queryWrapper);

    /**
     * 新增
     * @param voList 待新增数据
     * @return 新增后数据
     */
    List<ObjectDigital> insert(List<ObjectDigital> voList);

    /**
     * 修改
     * @param voList 待修改数据
     * @return 修改后数据
     */
    List<ObjectDigital> update(List<ObjectDigital> voList);

    /**
     * 删除
     * @param idList 主键
     */
    void delete(List<String> idList) ;

    /**
     * 查询虚拟信息点
     * @param projectId
     * @param groupCode
     * @param ids
     * @return
     */
    Map<String, List<String>>  queryVirtualCodeMap(String projectId, String groupCode, List<String> ids);
    /***
     * Description: 根据上级id查询下级关联对象
     * @param requestData : 请求参数
     * @return : com.persagy.dmp.common.model.response.CommonResult<java.util.List<com.persagy.dmp.digital.entity.ObjectDigital>>
     * @author : lijie
     * @date :2021/8/24 16:37
     * Update By lijie 2021/8/24 16:37
     */
    CommonResult<List<ObjectDigital>> queryObjectListSuperiorId(RequestData requestData);
    /***
     * Description: 查询指定楼层下所有指定空间类型的空间
     * @param requestData : 请求参数
     * @return : com.persagy.dmp.common.model.response.CommonResult<java.util.List<com.persagy.dmp.digital.entity.ObjectDigital>>
     * @author : lijie
     * @date :2021/8/30 9:54
     * Update By lijie 2021/8/30 9:54
     */
    CommonResult<List<ObjectDigital>> querySpaceListByFloorIdAndRoomFuncType(RequestData requestData);
    /***
     * Description:查询指定空间下所有指定对象类型的设备
     * @param requestData : 请求参数
     * @return : com.persagy.dmp.common.model.response.CommonResult<java.util.List<com.persagy.dmp.digital.entity.ObjectDigital>>  
     * @author : lijie
     * @date :2021/8/30 17:03
     * Update By lijie 2021/8/30 17:03
     */
    CommonResult<List<ObjectDigital>> queryEquipListBySpaceIdAndClassCode(RequestData requestData);
    /***
     * Description: 按类型编码查询所有设备
     * @param requestData : 请求参数
     * @return : com.persagy.dmp.common.model.response.CommonResult<java.util.List<com.persagy.dmp.digital.entity.ObjectDigital>>
     * @author : lijie
     * @date :2021/8/30 9:41
     * Update By lijie 2021/8/30 9:41
     */
    CommonResult<List<ObjectDigital>> queryEquipListByClassCode(RequestData requestData);
    /***
     * Description: 按系统查询系统下所有设备
     * @param requestData : 请求参数
     * @return : com.persagy.dmp.common.model.response.CommonResult<java.util.List<com.persagy.dmp.digital.entity.ObjectDigital>>
     * @author : lijie
     * @date :2021/8/30 9:41
     * Update By lijie 2021/8/30 9:41
     */
    CommonResult<List<ObjectDigital>> queryEquipListBySystemId(RequestData requestData);
    /***
     * Description: 支持按指定空间功能类型查询此空间类型及其下级类型的所有空间列表
     * @param requestData : 请求参数
     * @return : com.persagy.dmp.common.model.response.CommonResult<java.util.List<com.persagy.dmp.digital.entity.ObjectDigital>>
     * @author : lijie
     * @date :2021/8/30 9:41
     * Update By lijie 2021/8/30 9:41
     */
    CommonResult<List<ObjectDigital>> querySpaceListByRoomFuncType(RequestData requestData);
    /***
     * Description: 根据图类型编码及关系类型编码查询对象及其关联对象
     * @param requestData : 请求参数
     * @return : com.persagy.dmp.common.model.response.CommonResult<java.util.List<com.persagy.dmp.digital.entity.ObjectDigital>>
     * @author : lijie
     * @date :2021/8/30 9:41
     * Update By lijie 2021/8/30 9:41
     */
    CommonResult<List<ObjectDigital>> queryObjectListByGraphCodeAndRelCode(RequestData requestData);
    /***
     * Description: 根据对象id批量更新对象的classCode
     * @param objectDigitals : 对象数组
     * @return : com.persagy.dmp.common.model.response.CommonResult<java.util.List<com.persagy.dmp.digital.entity.ObjectDigital>>
     * @author : lijie
     * @date :2021/9/27 17:46
     * Update By lijie 2021/9/27 17:46
     */
    CommonResult<List<ObjectDigital>> batchUpdateClassCodesByIds(List<ObjectDigital> objectDigitals);
}
