package com.prolog.cs.biz.outbound.funcflow;

import com.prolog.cs.basic.warehouse.model.BaseWmsWhWorkstation;
import com.prolog.cs.biz.outbound.model.PickTaskH;
import com.prolog.cs.biz.outbound.model.vo.UpdateStockVO;
import com.prolog.cs.platform.power.model.Employee;
import com.prolog.function.annotation.Func;
import com.prolog.upcloud.base.wh.operate.vo.ReplenishDetailVO;

import java.util.List;
import java.util.Map;

public class OutBoundFunc {

    @FunctionalInterface
    @Func(name = "获取员工作业库区编码集合", category = "出库/拣选单管理/零货拣货", description = "获取员工作业库区编码集合")
    public interface getAreaCodes {
        List<String> getAreaCodes(String operatorCode, String warehouseId, String businesstype, String worktype);
    }

    @FunctionalInterface
    @Func(name = "查询待索取拣货任务", category = "出库/拣选单管理/零货拣货", description = "查询待索取拣货任务")
    public interface getPickTaskHList {
        List<PickTaskH> getPickTaskHList(String bldgId, String operatorCode, String warehouseId,String enterpriseId,Map<String, Object> returnMap);
    }

    @FunctionalInterface
    @Func(name = "查询待索取拣货任务", category = "出库/拣选单管理/功能库房拣货", description = "查询待索取拣货任务")
    public interface getPickTaskHListByBill {
        List<PickTaskH> getPickTaskHListByBill(String bldgId,String enterpriseId, String warehouseId, List<String> areaCodes,String type);
    }

    @FunctionalInterface
    @Func(name = "分配复核台", category = "出库/拣选单管理/零货拣货", description = "分配复核台")
    public interface getWorkstation {
        BaseWmsWhWorkstation getWorkstation(PickTaskH pickTaskH, Map<String,BaseWmsWhWorkstation> stationMap);
    }

    @FunctionalInterface
    @Func(name = "保存批拣单", category = "出库/拣选单管理/零货拣货", description = "保存批拣单")
    public interface savePickOrder {
        void savePickOrder(String pickOrderId, Employee employee, String warehouseId, int count,int pickTaskType);
    }

    @FunctionalInterface
    @Func(name = "保存批拣单", category = "出库/拣选单管理/功能库房拣货", description = "保存批拣单")
    public interface savePickOrder3 {
        void savePickOrder3(String pickOrderId, String operatorId, String operatorCode, String operatorName, String warehouseId, int count,int pickTaskType,int isPrint);
    }

    @FunctionalInterface
    @Func(name = "更新拣货任务主表", category = "出库/拣选单管理/零货拣货", description = "更新拣货任务主表")
    public interface updatePickTaskH {
        void updatePickTaskH(PickTaskH pickTaskH,String pickOrderId,BaseWmsWhWorkstation workstation);
    }

    @FunctionalInterface
    @Func(name = "更新拣货任务主表,保存外复核数据", category = "出库/拣选单管理/整件拣货", description = "更新拣货任务主表,保存外复核数据")
    public interface saveBarcode{
        boolean saveBarcode(
                List<PickTaskH> finalList,
                List<String> pickTaskDIds,
                String pickOrderId,
                String bldgId,
                String warehouseId,
                String enterpriseId
        );
    }

    @FunctionalInterface
    @Func(name = "下架确认,扣减库存", category = "出库/拣选单管理/零货拣货/拣货确认", description = "下架确认,扣减库存")
    public interface confirmReplenish{
        void confirmReplenish(List<String> lineIds,List<ReplenishDetailVO> replenishDetailVOList);
    }

    @FunctionalInterface
    @Func(name = "冲红调整库存", category = "出库/拣选单管理/零货拣货/拣货确认", description = "冲红调整库存")
    public interface updateStock{
        void updateStock(List<UpdateStockVO> stockVOList, String warehouseId,String locatorId);
    }

    @FunctionalInterface
    @Func(name = "回传ERP", category = "出库/拣选单管理/零货拣货/拣货确认", description = "回传ERP")
    public interface saveOutcomingRecord{
        void saveOutcomingRecord(List<String> omsBillIds);
    }

    @FunctionalInterface
    @Func(name = "冲红调整库存", category = "整件拣货确认", description = "冲红调整库存")
    public interface updateStock2{
        Map<String,Object> updateStock2(List<UpdateStockVO> stockVOList, String warehouseId,String locatorId,String redType);
    }

}
