package com.prolog.eis.service.shelves;

import com.prolog.eis.dto.shelves.*;
import com.prolog.eis.vo.GoodsInfoVO;
import com.prolog.framework.common.message.RestMessage;
import com.prolog.framework.core.pojo.Page;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

/**
 * 货架服务类
 *
 * @author zhanghan
 */
public interface ShelvesService {

    /**
     * 分页查询货架信息
     *
     * @param page 分页参数
     * @return Page<ShelvesInfoDTO>
     */
    Page<ShelvesInfoDTO> findShelvesInfoPage(ShelvesInfoPage page);

    /**
     * 新增货架
     *
     * @param dto 货架配置
     */
    void addShelves(ShelvesConfigureDTO dto);

    /**
     * 查询货格详情
     *
     * @param palletNo 货架号
     * @return PalletLocationDTO
     */
    PalletLocationDTO findCargoInformationDetail(String palletNo);

    /**
     * 修改货架
     *
     * @param dto 货架信息
     */
    void updateShelves(PalletLocationDTO dto);

    /**
     * 删除货架
     *
     * @param palletNo 货架号
     */
    void deleteShelves(String palletNo);

    /**
     * 设置模板货架
     *
     * @param dto 模版货架
     */
    void setTemplateShelves(TemplateShelvesDTO dto);

    /**
     * 批量导入
     *
     * @param file 导入文件
     */
    void batchImport(MultipartFile file) throws IOException;

    /**
     * 验证工作站
     *
     * @param stationNo 站台号
     * @param taskType  作业类型
     * @return RestMessage<Object>
     */
    RestMessage<Object> validateStation(String stationNo, Integer taskType);

    /**
     * 查询货架分页
     *
     * @param page 分页参数
     * @return Page<GoodsInfoDTO>
     */
    Page<GoodsInfoVO> findShelvesPage(ShelvesPage page) throws Exception;

    /**
     * 调出货架
     *
     * @param dto 调出货架参数
     */
    void callOutShelves(CallOutShelvesDTO dto) throws Exception;

    /**
     * 查询原货位
     * @param
     * @return
     * @throws Exception
     */
    GoodsInfoVO querySourcePalletLocationInfo(QueryLocationDto dto)  throws Exception ;

    /**
     * 查询目标货位
     * @param dto
     * @return
     */
    GoodsInfoVO queryTargetPalletLocationInfo(QueryLocationDto dto);

    void confirmAdjust(ConfirmAdjustDto dto) throws Exception;


    RestMessage<String> returnGoodsShelf(ReturnGoodsShelfDto dto)  throws Exception;



}
