package com.sunda.spmsoversea.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.sunda.spmscommon.ResponseResult;
import com.sunda.spmsoversea.dto.OverseaDnConfirmDTO;
import com.sunda.spmsoversea.dto.OverseaDnSapDTO;
import com.sunda.spmsoversea.dto.OverseaDnSearchDTO;
import com.sunda.spmsoversea.dto.OverseaDnUpdateDTO;
import com.sunda.spmsoversea.entity.OverseaDn;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 海外仓交货单表(空运人带/转储/本地采购) 服务类
 * </p>
 *
 * @author Wayne
 * @since 2021-12-14
 */
public interface IOverseaDnService extends IService<OverseaDn> {

    /** 获取转储交货单表头分页列表 */
    IPage getDnPage(OverseaDnSearchDTO overseaDnSearchDTO);

    /** 根据交货单号获取交货单表头信息 */
    OverseaDn getDn(String sapDeliveryNote);

    /** 根据交货单号获取交货单表头详细信息 */
    Map<String, Object> getDnInfo(String sapDeliveryNote);

    /** 根据交货单号获取交货单明细信息 */
    List<Map<String, Object>> getDnDtlList(String sapDeliveryNote);

    /** 确认到货，锁定DN、DN明细、PO、PO明细 四张表数据不再被更新；0-1； */
    ResponseResult confirmArrival(OverseaDnConfirmDTO overseaDnConfirmDTO, String userId)throws Exception ;

    /** 交货单关闭成废单；0-10；1-10； 
     * @param cancelReason */
    ResponseResult closeDn(String sapDeliveryNote, Integer dataVersion, String userId, String cancelReason);

    /** 交货单 保存 1-1、入库完成/提交审批 1-2、审批通过 2-3(SPMS按实收入库加库存) */
    ResponseResult updateDn(OverseaDnUpdateDTO overseaDnUpdateDTO, String userId) throws Exception ;

    /** 提交SAP */
    ResponseResult submitDnSap(OverseaDnSapDTO overseaDnSapDTO, String userId)  throws Exception ;

    /** 收货撤销 */
    ResponseResult cancelDn(OverseaDnSapDTO overseaDnSapDTO, String userId) throws Exception ;
    
    /** 根据SPMS单号查询其他收货详情信息 **/
	ResponseResult getOverseaDnHead(String spmsId);
	
	/**
	 * 完成收货
	 * @param sapDeliveryNote
	 * @param userId 
	 * @return
	 */
	ResponseResult completeReceipt(String sapDeliveryNote, String userId);
	
	/**
	 * 收货完成的单据重新打开
	 * @param sapDeliveryNote
	 * @param userId 
	 * @return
	 */
	ResponseResult openAgain(String sapDeliveryNote, String userId);

}
