package com.sunda.spmswms.service;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.sunda.spmscommon.ResponseResult;
import com.sunda.spmswms.entity.SapPackageList;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * SAP装箱单表抬头 服务类
 * </p>
 *
 * @author Wayne
 * @since 2021-04-22
 */
public interface ISapPackageListService extends IService<SapPackageList> {

    /** 根据用户工号查询跟该用户所在仓库有关的装箱单/出库任务。只要装箱单明细中有一行跟用户所在仓库有关，就给用户显示该装箱单。 */
    List<Map<String, Object>> getSapPackageList(String userId, String packageList, String spmsStatus);

    /** 根据装箱单号查看装箱单详情数据，备件货带箱码信息 
     * @param goodsType */
    List<Map<String, Object>> getSapPackageListDtl(String packageList, String goodsType);

    ResponseResult checkSapPackageListCanBeSplit(String packageList);

    /** 更新装箱单表头状态为 targetStatus，更新前校验单据状态是否是 currentStatus */
    int updateSapPackageList(String userId, String packageList, String targetStatus, String currentStatus)throws Exception;

    /** 贸易货卸货入库，根据装箱单号查询装箱单结果详情数据 */
    List<Map<String, Object>> getSapPackageListDtlM(String packageList);

    /** 获取跟当前用户相关的装箱单任务表头信息，Map 分页 
     * @param planLoadingDate 
     * @param planLoadingDateEnd 
     * @param whsLocationCode 
     * @param werks */
    Page<Map<String, Object>> getSapPackageListPage(String userId, String packageList,
                                                    String spmsStatus, String planLoadingDateStart, String planLoadingDateEnd, int pageNo, int pageSize, String werks, String whsLocationCode);

    /** 1085上锁标识。SPMS系统同步SAP底表标记锁表信息，REST 方式。 */
    JSONObject lockSapPackageList(String packageList);

    /** 实时向SAP REST请求一次装箱单数据，返回箱单信息给前端用户显示 */
    ResponseResult getSapPackageListRest(String packageList,String userId);
    
    /**
     * 装箱单关闭后重新打开
     * @param packageList
     * @param userId 
     * @return
     */
	ResponseResult openSapPackageList(String packageList, String userId);
	
	/**
	 * SAP推送装箱单数据到SPMS接口
	 * @param doc
	 * @return
	 */
	ResponseResult zSapPackageListToSpms(JSONObject doc);
	
	/**
	 * SAP推送柜号信息到SPMS接口
	 * @param doc
	 * @return
	 */
	ResponseResult zsapCabinetNumberToSpms(JSONObject doc);
	
	/**
	 * 手动创建装箱单
	 * @param userId
	 * @param packageList
	 * @param werks
	 * @param whsLocationCode
	 * @param cabinetSerialNumber
	 * @param goodsType
	 * @return
	 */
	ResponseResult getSapDataToCreatePackageList(String userId, String packageList, String werks,
										String whsLocationCode, String cabinetSerialNumber, String goodsType) throws Exception;
	/**
	 * 根据装柜工厂获取出库任务中的相同的装柜工厂的收货主体收货工厂信息
	 * @param userId
	 * @param packageList
	 * @param werks
	 * @return
	 */
	ResponseResult selectReceivingWerks(String userId, String packageList, String werks);
	
	/**
	 * PDA生成出库任务接口
	 * @param userId
	 * @param obj
	 * @return
	 * @throws Exception 
	 */
	int updateSapPackageListByPda(String userId, JSONObject obj) throws Exception;
	
	/**
	 * PDA分页查询备件并且行项目有箱码的装箱单任务
	 * @param userId
	 * @param packageList
	 * @param spmsStatus
	 * @param planLoadingDateStart
	 * @param planLoadingDateEnd
	 * @param pageNo
	 * @param pageSize
	 * @param werks
	 * @param whsLocationCode
	 * @return
	 */
	Page<Map<String, Object>> getSapPackageListPageByPda(String userId, String packageList,
            String spmsStatus, String planLoadingDateStart, String planLoadingDateEnd, int pageNo, int pageSize, String werks, String whsLocationCode);
	
}
