package cn.iocoder.yudao.module.pms.service.iotstoragearea;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
import cn.iocoder.yudao.module.pms.controller.admin.iotstoragearea.vo.IotStorageAreaPageReqVO;
import cn.iocoder.yudao.module.pms.controller.admin.iotstoragearea.vo.IotStorageAreaSaveReqVO;
import cn.iocoder.yudao.module.pms.dal.dataobject.iotstoragearea.IotStorageAreaDO;
import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO;

import javax.validation.Valid;
import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * PMS 库区 Service 接口
 *
 * @author ruiqi
 */
public interface IotStorageAreaService {

    /**
     * 创建PMS 库区
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createIotStorageArea(@Valid IotStorageAreaSaveReqVO createReqVO);

    /**
     * 更新PMS 库区
     *
     * @param updateReqVO 更新信息
     */
    void updateIotStorageArea(@Valid IotStorageAreaSaveReqVO updateReqVO);

    /**
     * 删除PMS 库区
     *
     * @param id 编号
     */
    void deleteIotStorageArea(Long id);

    /**
     * 获得PMS 库区
     *
     * @param id 编号
     * @return PMS 库区
     */
    IotStorageAreaDO getIotStorageArea(Long id);

    /**
     * 获得PMS 库区分页
     *
     * @param pageReqVO 分页查询
     * @return PMS 库区分页
     */
    PageResult<IotStorageAreaDO> getIotStorageAreaPage(IotStorageAreaPageReqVO pageReqVO);

    /**
     * 获得库区信息数组
     *
     * @param ids 库区编号数组
     * @return 库区信息数组
     */
    List<IotStorageAreaDO> getStorageAreaList(Collection<Long> ids);

    /**
     * 获得指定编号的库区 Map
     *
     * @param ids 库区编号数组
     * @return 库区 Map
     */
    default Map<Long, IotStorageAreaDO> getStorageAreaMap(Collection<Long> ids) {
        List<IotStorageAreaDO> list = getStorageAreaList(ids);
        return CollectionUtils.convertMap(list, IotStorageAreaDO::getId);
    }

    /**
     * 获得库区精简列表
     *
     * @param statuses 筛选的状态
     * @return 库区列表
     */
    List<IotStorageAreaDO> getStorageAreaListByStatus(Collection<Integer> statuses);

}