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.UnitDto;
import com.sptg.estate.api.entity.Unit;

import java.util.List;

/**
 * title: UnitServiceInterface
 * package: com.sptg.estate.biz.security
 * description: 单元 服务层接口
 *
 *
 *
 */
public interface UnitServiceInterface extends IService<Unit> {

    /**
     * 功能描述:单元列表查询
     * @param unitDto 单元业务对象（含分页及查询条件）
     * @return ResultBean<Page<Unit>>
     *
     *
     */
    ResultBean<Page<Unit>> showUnitList(UnitDto unitDto);

    /**
     * 功能描述:新增单元
     * @param unitDto 单元业务对象
     * @return ResultBean<Boolean>
     *
     *
     */
    ResultBean<UnitDto> addUnit(UnitDto unitDto);

    /**
     * 功能描述:根据Id查找单元
     * @param id 必填
     * @return Unit
     *
     *
     */
    Unit findUnitById(Long id);

    /**
     * 功能描述:编辑单元
     * @param unitDto 单元业务对象
     * @return ResultBean<Boolean>
     *
     *
     */
    ResultBean<Boolean> updateUnit(UnitDto unitDto);

    /**
     * 功能描述:删除单元
     * @param unitDto 单元业务对象
     * @return ResultBean<Boolean>
     *
     *
     */
    ResultBean<Boolean> deleteUnit(UnitDto unitDto);

    /**
     * 功能描述:单元放入垃圾箱
     * @param unitDto 单元业务对象
     * @return ResultBean<Boolean>
     *
     *
     */
    ResultBean<Boolean> trashOrRecover(UnitDto unitDto);

    /**
     * 功能描述:根据Id集合批量删除单元
     * @param unitDto 单元业务对象
     * @throws Exception
     * @return ResultBean<Boolean>
     *
     *
     */
    ResultBean<Boolean> deleteUnitList(UnitDto unitDto) throws  Exception;

    /**
     * 功能描述:根据位置查找单元
     * @param unitDto 单元业务对象
     * @return ResultBean<Unit>
     *
     *
     */
    ResultBean<Unit> findListByPosition(UnitDto unitDto);

    /**
     * 功能描述:根据父节点查找单元
     * @param unitDto 单元业务对象
     * @return ResultBean<Unit>
     *
     *
     */
    ResultBean<Unit>findListByPid(UnitDto unitDto);

    /**
     * 功能描述:导入单元
     * @param unitDto 单元业务对象
     * @return ResultBean<Boolean>
     *
     *
     */
    ResultBean<Boolean> importUnitList(UnitDto unitDto);

    /**
     * 功能描述:根据名称或者编号查找单元
     * @param unitDto 单元业务对象
     * @return Unit
     *
     *
     */
    Unit findUnitByNameAndNumber(UnitDto unitDto);

    /**
     * 功能描述:根据位置查询单元数量
     * @param unitDto
     * {
     *    orgPosition : 位置信息
     *    isAllType : 查询类型
     * }
     * @return int
     *
     *
     */
    int getUnitAccount(UnitDto unitDto);

    /**
     * 功能描述:根据条件查询单元数量
     * @param unitDto 单元业务对象
     * @return int 数量
     *
     *
     */
    int findUnitByCondition(UnitDto unitDto);

    /**
     * 功能描述:导入生成单元
     * @param unit 单元业务对象
     * @return Unit
     *
     *
     */
    Unit addUnitByImport(Unit unit);

    List<Unit> getListByLikeName(UnitDto dto);

    Unit findByUnitNumber(String unitNumber);

    Unit findByOldId(String oldId);

    int addUnitSync(Unit unit);

    int updateUnitSync(Unit unit);

    List<Unit> getListByBuildingId(Long buildingId);

    List<Unit> getListByCondition(UnitDto unitDto);
}
