package com.wms_main.service.business;

import com.wms_main.constant.enums.wms.WmsLocationTypeEnums;
import com.wms_main.model.po.TAppLocation;
import com.wms_main.model.po.TAppOrderIn;
import com.wms_main.model.po.TAppTask;
import com.wms_main.model.po.TAppWcsTask;

import java.util.List;

/**
 * 堆垛机任务业务服务
 */
public interface IStackerTaskService {
    /**
     * 存WcsTask表
     * 更新WmsTask表
     * @param wcsInTask wcs任务
     */
    void saveWcsTaskAndUpdateWmsTask(TAppWcsTask wcsInTask);

    /**
     * 申请一个库位
     * @param locationFilter 申请条件
     * @param requestVehicleId 本次申请入库的载具号
     * @return 可用库位
     */
    TAppLocation requestOneLocation(TAppLocation locationFilter, String requestVehicleId);

    TAppLocation getEmptyLocation(Integer equipmentId, WmsLocationTypeEnums type);
    /**
     * 完成堆垛机入库任务
     * @param stackerInTasks 已完成的入库任务
     */
    void finishStackerInTasks(List<TAppOrderIn> stackerInTasks) throws InterruptedException;

    /**
     * 完成堆垛机入库任务---合并相同物料
     * @param stackerInTasks 已完成的入库任务
     */
    void finishStackerInTasksMergeSameGoods(List<TAppTask> stackerInTasks);

    /**
     * 完成堆垛机出库任务
     * @param stackerOutTasks 已完成的出库任务
     */
    void finishStackerOutTasks(List<TAppWcsTask> stackerOutTasks) throws InterruptedException;
}
