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.*;
import com.sunda.spmsoversea.entity.OverseaOtherDtl;
import com.sunda.spmsoversea.entity.OverseaOtherTask;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 海外仓其他出入库 服务类
 * </p>
 *
 * @author Wayne
 * @since 2021-12-27
 */
public interface IOverseaOtherTaskService extends IService<OverseaOtherTask> {

    /** 获取其他出入库表头分页列表 */
    IPage getOtherTaskPage(OverseaOtherSearchDTO overseaOtherSearchDTO);

    /** 获取其他出入库表头简要信息 */
    OverseaOtherTask getOtherTask(String uuid);

    /** 获取其他出入库表头详细信息 */
    Map<String, Object> getOtherTaskInfo(String uuid);

    /** 获取其他出入库详细明细信息 */
    List<Map<String, Object>> getOtherDtlList(String uuid);

    /** 其他出入库任务关闭 1-0；3-0； 
     * @param cancelReason */
    ResponseResult closeOtherTask(String uuid, Integer dataVersion, String userId, String cancelReason);

    /** 创建其他出入库任务及明细 spmsStatus = 1 或 2； */
    ResponseResult createOtherTask(OverseaOtherDTO overseaOtherDTO, String userId)throws Exception ;

    /** 更新任务。1-1 保存修改；1-2 提交审批；2-4 审批通过：按行扣减/增加仓库库存；3-4； */
    ResponseResult updateOtherTask(OverseaOtherUpdateDTO overseaOtherUpdateDTO, String userId)throws Exception ;

    /** 其他出入库任务，增加指定行项目；状态 1、3 可用； */
    ResponseResult updateOtherDtlListI(List<OverseaOtherDtl> otherDtlList, String userId);

    /** 其他出入库任务，删除指定行项目；状态 1、3 可用； */
    ResponseResult updateOtherDtlListD(List<OverseaOtherDtl> otherDtlList, String userId);

    /** 提交SAP；4-5/6、5-5/6 */
    ResponseResult submitOtherTaskSap(String uuid, String costCenter, String postingDate, Integer dataVersion, String userId)throws Exception ;

    /** 任务回撤；2-3(审批不通过)、6-4、4/5-1(库存操作) */
    ResponseResult cancelOtherTask(String uuid, String cancelPostingDate, Integer dataVersion, String userId)throws Exception ;
    
    /** 根据SPMS单号查询其他出入库的详情 **/
	ResponseResult getOverseaOtherTaskHead(String spmsId);

    /** 根据EAM退库单号查询其他出入库集合 **/
    List<OverseaOtherTask> findListByRecord(String relateDocument);

    /** 根据EAM退库单生成其他出入库 **/
    ResponseResult generateOverseaOtherTask(OverseaOtherTaskGenerateDTO overseaOtherTaskGenerateDTO, String userId) throws Exception;

    /** 根据EAM旧货单生成其他出入库 **/
    ResponseResult generateFormerOtherTask(OverseaOtherTaskGenerateFormerDTO formerDTO, String userId) throws Exception;

}
