package com.prolog.eis.service.shelves;

import com.prolog.eis.dto.inbound.*;
import com.prolog.eis.dto.item.ItemSyncVO;
import com.prolog.eis.dto.page.PageUtilDto;
import com.prolog.eis.dto.shelves.*;
import com.prolog.eis.model.inbound.BizInboundTask;
import com.prolog.eis.model.shelves.BizProperty;
import com.prolog.eis.vo.GoodsInfoVO;
import com.prolog.eis.vo.GoodsShelvesVO;
import com.prolog.eis.vo.InboundTaskVO;
import com.prolog.framework.common.message.RestMessage;
import com.prolog.framework.core.pojo.Page;

import java.text.ParseException;
import java.util.List;

public interface InboundTaskService {

    RestMessage<InboundTaskVO> checkStation(String stationNo) throws Exception;

    void scanContainerNo(ScanContainerNoDto dto) throws Exception;

    /**
     * 获取货架信息件数和品种数
     *
     * @param goodsShelvesVOList
     * @param itemSyncVOS
     * @return
     */
    List<PalletItemQtyInfoDto> genInfo(List<GoodsShelvesVO> goodsShelvesVOList, List<ItemSyncVO> itemSyncVOS);

    RestMessage<InboundTaskVO> getInboundTaskList(InboundRequestDto inbound) throws Exception;

    RestMessage<InboundTaskVO> getOneInboundTask(GoodsInfoVO param) throws Exception;

    void saveContainerStore(String containerNo, String containerSubNo, BizProperty bizProperty, int qty, String palletType) throws Exception;

    RestMessage<String> agvInboundConfirm(GoodsInfoVO inbound) throws Exception;

    RestMessage<?> shelfReturn(ShelfReturnDto dto) throws Exception;


    void taskHangUp(Long taskId) throws Exception;

    Page<GoodsInfoVO> findNowPalletNo(String palletNo, String itemId, String lotId, String packId, String ownerId, int pageSize, int pageNum) throws Exception;

    Page<GoodsInfoVO> findNewPalletNo(QueryLocationDto dto) throws Exception;

    Integer queryConfirmABC(String abcType, Long bizPropertyId, String palletNo, String palletLocation);

    void newPalletNoConfirm(NewPalletNoConfirmDto dto) throws Exception;

    void nowPalletNoConfirm(String stationNo, String palletNo, String planes, Long taskId, String palletLocation, String oldPalletLocation) throws Exception;

    RestMessage<String> getPallet(ScanContainerNoDto dto) throws Exception;

    void taskHangUpRelease(Long taskId) throws Exception;

    boolean callShelves(BizInboundTask inboundTask) throws Exception;

    List<GoodsInfoVO> queryHangUp(String itemCode, String cargoOwnerName, String itemName, String billNo, String hangUpUser, String startTime, String endTime) throws ParseException;

    List<ShelvesTaskListDto> shelvesTaskList(PageUtilDto pageUtilDto);

    List<ShelvesTaskDetailRespDto> shelvesTaskDetail(ShelvesTaskDetailReqDto req) throws Exception;

    void shelvesTaskSubmit(ShelvesTaskSubmitDto req) throws Exception;

    void shelfReturnPda(ShelvesReturnDto req, boolean checkTask) throws Exception;

    List<AgainListRespDto> againList(AgainListReqDto req) throws Exception;

    void againConfirm(AgainConfirmReqDto req) throws Exception;

    void locationChange(LocationChangeReqDto req) throws Exception;

}
