package com.yc.ship.module.product.service.voyagestockdistribute;

import javax.validation.*;
import com.yc.ship.module.product.controller.admin.voyagestockdistribute.vo.*;
import com.yc.ship.module.product.controller.admin.voyagestockdistribute.vo.QueryCanSelectRoomListReqVO;
import com.yc.ship.module.product.dal.dataobject.voyagestockdistribute.VoyageStockDistributeDO;
import com.yc.ship.framework.common.pojo.PageResult;
import com.yc.ship.module.resource.api.room.dto.RoomRespDTO;

import java.util.List;

/**
 * 航次库存分配 Service 接口
 *
 * @author 管理员
 */
public interface VoyageStockDistributeService {

    /**
     * 创建航次库存分配
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    void createVoyageStockDistribute(@Valid List<VoyageStockDistributeSaveReqVO> createReqVO);

    /**
     * 更新航次库存分配
     *
     * @param updateReqVO 更新信息
     */
    void updateVoyageStockDistribute(@Valid VoyageStockDistributeSaveReqVO updateReqVO);

    /**
     * 删除航次库存分配
     *
     * @param id 编号
     */
    void deleteVoyageStockDistribute(Long id);

    /**
     * 获得航次库存分配
     *
     * @param id 编号
     * @return 航次库存分配
     */
    VoyageStockDistributeDO getVoyageStockDistribute(Long id);

    /**
     * 获得航次库存分配分页
     *
     * @param pageReqVO 分页查询
     * @return 航次库存分配分页
     */
    PageResult<VoyageStockDistributeRespPageVO> getVoyageStockDistributePage(VoyageStockDistributePageReqVO pageReqVO);

    /**
     * 根据航次获取房间库存分配列表
     * @param voyageId
     * @return
     */
    List<VoyageStockDistributeDO> getListByVoyageId(Long voyageId);

    /**
     * 查询已分配库存信息
     * @param voyageId
     * @return
     */
    VoyageStockDistributeTotalRespVO getVoyageStockDistributeTotal(Long voyageId);

    /**
     * 获取可选择的房间号
     * @param voyageId
     * @return
     */
    List<RoomRespDTO> getRoomList(Long voyageId);

    /**
     * 获取可以选择的房间号
     * @param reqVO
     * @return
     */
    List<RoomRespDTO> getCanSelectRoomList(QueryCanSelectRoomListReqVO reqVO);

    List<VoyageStockDistributeDO> getVoyageStockDistributeDetail(VoyageStockDistributeReqVO reqVO);
}