package com.prolog.eis.service.core;

import com.prolog.eis.core.dto.route.CarryTaskCallbackDto;
import com.prolog.eis.model.container.ContainerTask;
import com.prolog.eis.model.outbound.BizOutboundTask;
import com.prolog.eis.outbound_dispatch.DispatchStrategy;
import com.prolog.eis.store_init.StoreInitStrategy;

import java.util.List;

public interface OutboundService {

    void wmsOutCallBack() throws Exception;

    void doOutboundCallBack(CarryTaskCallbackDto carryTaskCallbackDto) throws Exception;

    void composeOutTaskPackage() throws Exception;

    void checkStock() throws Exception;

    void saveContainerTask(BizOutboundTask waitTask);

    void dispatch(String billType, String warehouseArea, DispatchStrategy dispatchStrategy, StoreInitStrategy storeInitStrategy) throws Exception;

    void sendPmsCarryTask() throws Exception;

    void doEmptyOutboundCallBack(CarryTaskCallbackDto carryTaskCallbackDto);

    void doWmsOutTask(BizOutboundTask outTask, String containerNo, List<ContainerTask> containerTaskList) throws Exception;

    void doDismantleOutboundCallBack(CarryTaskCallbackDto carryTaskCallbackDto) throws Exception;

    void mergeOutBack(CarryTaskCallbackDto carryTaskCallbackDto);

    void doDismantleInCacheCallBack(CarryTaskCallbackDto carryTaskCallbackDto);

    String supplyTask(ContainerTask containerTask, BizOutboundTask outTask, List<ContainerTask> tempTask) throws Exception;

    void doGenTask(ContainerTask containerTask, List<BizOutboundTask> outTaskList, List<ContainerTask> containerTasks, List<String> sendTask) throws Exception;
}
