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

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.persagy.dmp.basic.dto.RequestData;
import com.persagy.dmp.digital.entity.ObjectDigital;
import com.persagy.dmp.rwd.digital.domain.CalculatingDTO;
import com.persagy.dmp.rwd.digital.domain.FloorCalDTO;
import com.persagy.dmp.rwd.digital.domain.SpaceCalDTO;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Set;

/**
 * 对象数据 DAO
 * @author Charlie Yu
 * @date 2021-07-08
 */
public interface ObjectDigitalMapper extends BaseMapper<ObjectDigital> {
    /***
     * 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:40
     * Update By lijie 2021/8/24 16:40
     */
    Page<ObjectDigital> queryObjectDigitalsByProjectId(Page<ObjectDigital> page,@Param("param") RequestData requestData);
    /***
     * Description: 根据上级id查询对象列表
     * @param requestData : 请求参数
     * @return : java.util.List<java.util.List<com.persagy.dmp.digital.entity.ObjectDigital>>
     * @author : lijie
     * @date :2021/8/25 9:49
     * Update By lijie 2021/8/25 9:49
     */
    Page<ObjectDigital> queryObjectListBySuperiorId(Page<ObjectDigital> page, @Param("param") RequestData requestData);
    /***
     * Description: 查询指定楼层下所有指定空间类型的空间
     * @param requestData : 请求参数
     * @return : java.util.List<java.util.List<com.persagy.dmp.digital.entity.ObjectDigital>>
     * @author : lijie
     * @date :2021/8/30 10:26
     * Update By lijie 2021/8/30 10:26
     */
    Page<ObjectDigital> queryObjectListByFloorIdAndRoomFuncType(Page<ObjectDigital> page,@Param("param") 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
     */
    Page<ObjectDigital> queryObjectListByRelIdAndClassCode(Page<ObjectDigital> page,@Param("param") RequestData requestData);
    /***
     * Description: 按类型编码查询所有设备
     * @param requestData : 请求参数
     * @return : java.util.List<java.util.List<com.persagy.dmp.digital.entity.ObjectDigital>>
     * @author : lijie
     * @date :2021/8/30 17:44
     * Update By lijie 2021/8/30 17:44
     */
    Page<ObjectDigital> queryEquipListByClassCode(Page<ObjectDigital> page,@Param("param") RequestData requestData);
    /***
     * Description: 根据id,localId,name,localName,CADID及关系类型信息,对象分类信息创建关系
     * @param requestData : 请求参数
     * @return : java.util.List<com.persagy.dmp.digital.entity.ObjectDigital>  
     * @author : lijie
     * @date :2021/9/2 21:43
     * Update By lijie 2021/9/2 21:43
     */
    List<ObjectDigital> queryObjectListByIdOrNameOrCadId(@Param("param") 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
     */
    Page<ObjectDigital> queryObjectListByGraphCodeAndRelCode(Page<ObjectDigital> page,@Param("param") RequestData requestData);
    /***
     * Description: 查询去向数据
     * @param toIds : 去向id数组
     * @param toObjType : 去向对象分类
     * @param toInfoCode : 去向信息点code
     * @param calculatingDTO : 请求参数
     * @return : java.util.List<com.persagy.dmp.digital.entity.ObjectDigital>
     * @author : lijie
     * @date :2021/9/11 18:23
     * Update By lijie 2021/9/11 18:23
     */
    List<ObjectDigital> queryToData(@Param("toIds") Set<String> toIds,@Param("toObjType") String toObjType,
                                    @Param("toInfoCode") String toInfoCode, @Param("param") CalculatingDTO calculatingDTO);
    /***
     * Description: 查询来源数据
     * @param fromIds : 来源id集合
     * @param fromObjType : 来源对象分类
     * @param fromInfoCode : 来源信息点
     * @param calculatingDTO : 请求参数
     * @return : java.util.List<com.persagy.dmp.digital.entity.ObjectDigital>
     * @author : lijie
     * @date :2021/9/11 18:55
     * Update By lijie 2021/9/11 18:55
     */
    List<ObjectDigital> queryFromData(@Param("fromIds") Set<String> fromIds,@Param("fromObjType") String fromObjType,
                                      @Param("fromInfoCode")  String fromInfoCode, @Param("param") CalculatingDTO calculatingDTO);
    /***
     * Description: 根据对象id批量查询对象
     * @param objIds : 对象id
     * @return : java.util.List<com.persagy.dmp.digital.entity.ObjectDigital>  
     * @author : lijie
     * @date :2021/9/27 18:27
     * Update By lijie 2021/9/27 18:27
     */
    List<ObjectDigital> queryObjectListByIds(@Param("objIds") Set<String> objIds);
    /***
     * Description: 根据模型id查询门对象
     * @param modelIds : 模型id集合
     * @param calculatingDTO : 请求参数
     * @param classCode : 对象类型
     * @return : java.util.List<com.persagy.dmp.digital.entity.ObjectDigital>
     * @author : lijie
     * @date :2021/10/11 18:01
     * Update By lijie 2021/10/11 18:01
     */
    List<SpaceCalDTO> queryEquipmentsByModelIds(@Param("objIds") Set<String> modelIds,
                                                @Param("param") CalculatingDTO calculatingDTO,
                                                @Param("classCode") String classCode);
    /***
     * Description: 查询元空间
     * @param modelIds : 模型id集合
     * @param calculatingDTO : 请求参数
     * @return : java.util.List<com.persagy.dmp.rwd.digital.domain.SpaceCalDTO>
     * @author : lijie
     * @date :2021/10/11 22:09
     * Update By lijie 2021/10/11 22:09
     */
    List<SpaceCalDTO> queryIspacesByModelIds(@Param("modelIds") Set<String> modelIds,
                                             @Param("param") CalculatingDTO calculatingDTO);
    /***
     * Description: 根据项目id查询楼层
     * @param calculatingDTO : 请求参数
     * @return : java.util.List<com.persagy.dmp.rwd.digital.domain.FloorCalDTO>
     * @author : lijie
     * @date :2021/10/12 20:37
     * Update By lijie 2021/10/12 20:37
     */
    List<FloorCalDTO> queryFloorsByProjectId(@Param("param") CalculatingDTO calculatingDTO);
    /***
     * Description: 查询管道
     * @param groupCode : 集团编码
     * @param projectId : 项目id
     * @param modelId : 模型id
     * @param useType : 管道用途类型
     * @param classCode : 对象类型
     * @return : java.util.List<com.persagy.dmp.digital.entity.ObjectDigital>
     * @author : lijie
     * @date :2021/10/12 20:59
     * Update By lijie 2021/10/12 20:59
     */
    List<ObjectDigital> queryConnectors(@Param("groupCode") String groupCode,@Param("projectId") String projectId,
                                        @Param("modelId") String modelId,@Param("useType") String useType,
                                        @Param("classCode") String classCode);
    /***
     * Description: 查询模型元素(设备构件,部件构件,其他构件,连接件构件,水管构件,液体管构件)
     * @param groupCode : 集团编码
     * @param projectId : 项目id
     * @param modelId : 模型id
     * @return : java.util.List<com.persagy.dmp.digital.entity.ObjectDigital>  
     * @author : lijie
     * @date :2021/10/13 14:18
     * Update By lijie 2021/10/13 14:18
     */
    List<ObjectDigital> queryModelElements(String groupCode, String projectId, String modelId);

    /**
     * 查询对象中已存在的设备类型
     * @param requestData
     * @return
     */
    List<String> queryObjectClassCode(@Param("param") RequestData requestData);
    /***
     * Description: 根据项目id和楼层id查询设备的bimLocation
     * @param groupCode : 集团编码
     * @param projectId : 项目id
     * @param floorId : 楼层id
     * @return : java.util.List<com.persagy.dmp.digital.entity.ObjectDigital>
     * @author : lijie
     * @date :2021/11/24 10:15
     * Update By lijie 2021/11/24 10:15
     */
    List<ObjectDigital> queryEquipBimLocationsByProjectIdAndFloorId(@Param("groupCode") String groupCode,
                                                                    @Param("projectId") String projectId,
                                                                    @Param("floorId") String floorId);
    /***
     * Description: 根据项目id和楼层id查询空间的outLines
     * @param groupCode : 集团编码
     * @param projectId : 项目id
     * @param floorId : 楼层id
     * @return : java.util.List<com.persagy.dmp.digital.entity.ObjectDigital>
     * @author : lijie
     * @date :2021/11/24 10:15
     * Update By lijie 2021/11/24 10:15
     */
    List<ObjectDigital> querySpacesByProjectIdAndFloorId(@Param("groupCode") String groupCode,
                                                         @Param("projectId") String projectId,
                                                         @Param("floorId") String floorId);
}
