package com.sptg.estate.biz.service;

import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.IService;
import com.sptg.common.core.beans.ResultBean;
import com.sptg.estate.api.dto.RoomDto;
import com.sptg.estate.api.entity.Room;
import com.sptg.estate.api.entity.Unit;

import java.util.List;

/**
 * title: RoomServiceInterface
 * package: com.sptg.estate.biz.security
 * description: 房间 服务层接口
 *
 *
 *
 */
public interface RoomServiceInterface extends IService<Room> {

    /**
     * 功能描述:房间列表查询
     * @param roomDto 房间业务对象（含分页及查询条件）
     * @return ResultBean<Page<Room>>
     *
     *
     */
    ResultBean<Page<Room>> showRoomList(RoomDto roomDto);

    /**
     * 功能描述:新增房间
     * @param roomDto 房间业务对象
     * @return ResultBean<Boolean>
     *
     *
     */
    ResultBean<Room> addRoom(RoomDto roomDto);

    /**
     * 功能描述:根据Id查找房间
     * @param id 必填
     * @return Room
     *
     *
     */
    Room findRoomById(Long id);

    /**
     * 功能描述:编辑房间
     * @param roomDto 房间业务对象
     * @return ResultBean<Boolean>
     *
     *
     */
    ResultBean<Boolean> updateRoom(RoomDto roomDto);

    /**
     * 功能描述:删除房间
     * @param roomDto 单元传输对象
     * @return ResultBean<Boolean>
     *
     *
     */
    ResultBean<Boolean> deleteRoom(RoomDto roomDto);

    /**
     * 功能描述:房间放入垃圾箱
     * @param roomDto 单元传输对象
     * @return ResultBean<Boolean>
     *
     *
     */
    ResultBean<Boolean> trashOrRecover(RoomDto roomDto);

    /**
     * 功能描述:根据Id集合批量删除房间
     * @param roomDto 房间业务对象
     * @throws Exception
     *
     *
     */
    ResultBean<Boolean> deleteRoomList(RoomDto roomDto) throws Exception;

    /**
     * 功能描述:根据位置查找房间
     * @param roomDto 房间业务对象
     * @return  ResultBean<Room>
     *
     *
     */
    ResultBean<Room> findListByPosition (RoomDto roomDto);

    /**
     * 功能描述:导入房间
     * @param roomDto 房间业务对象
     * @return ResultBean<Boolean>
     *
     *
     */
    ResultBean<Boolean> importRoomList(RoomDto roomDto);

    /**
     * 功能描述:查询单元下的房间
     * @param unitId
     * @return
     *
     *
     */
    ResultBean<Room> getByUnitId(Long unitId);

    /**
     * 功能描述:根据位置查询房间数量
     * @param roomDto
     * {
     *    orgPosition : 位置信息
     *    isAllType : 查询类型
     * }
     * @return int
     *
     *
     */
    int getRoomAccount(RoomDto roomDto);

    /**
     * 功能描述:根基roomId查询房间
     * @param roomIds
     * @return List<Room>
     *
     *
     */
    List<Room> getListByRoomId(List<Long> roomIds);

    /**
     * 功能描述:根基roomId查询房间-分页
     * @param roomDto
     * @return List<Room>
     *
     *
     */
    Page<Room> pagingByIds(RoomDto roomDto);

    /**
     * 功能描述:根据条件查询房间数量
     * @param roomDto 房间业务对象
     * @return int
     *
     *
     */
    int findRoomByCondition(RoomDto roomDto);

    /**
     * 功能描述:根据房间名称和门牌号查询房间
     * @param roomDto 房间业务对象
     * @return Room
     *
     *
     */
    Room findRoomByNameAndNumber(RoomDto roomDto);

    /**
     * 功能描述:导入生成房间
     * @param room
     * @return Room
     *
     *
     */
    Room addRoomByImport(Room room);


    List<Room> getListByLikeName(RoomDto dto);

    /**
     * 功能描述:根据房间编号查询房间
     * @param roomNumber
     * @return Room
     *
     *
     */
    Room findByRoomNumber(String roomNumber);

    List<Room> getListByCondition(RoomDto roomDto);

    Room findByOldId(String oldId);

    int addRoomSync(Room room);

    int updateRoomSync(Room room);
}
