package com.sunda.spmswms.service;

import com.alibaba.fastjson.JSONObject;
import com.sunda.spmscommon.ResponseResult;
import com.sunda.spmswms.entity.ShelfOnTask;
import com.baomidou.mybatisplus.extension.service.IService;
import com.sunda.spmswms.entity.ShelfOnTaskDtl;
import com.sunda.spmswms.entity.WhsOut;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 上架任务表 服务类
 * </p>
 *
 * @author Wayne
 * @since 2021-03-19
 */
public interface IShelfOnTaskService extends IService<ShelfOnTask> {

    /** 初始化上、下架任务表头，初始化上架任务明细 备件货 */
    int generateShelfOnTask(String userId, String createDate, String deliveryNoteSap,String taskType,String pdaSn);

    /** 初始化上、下架任务表头，初始化上架任务明细 备件货 */
    ShelfOnTask generateShelfOnTaskV1(String userId, String createDate, String deliveryNoteSap,String taskType,String pdaSn);

    // 完成上、下架任务，返回任务的uuid
    ShelfOnTask completeShelfOnTask(String userId,String deliveryNoteSap,String pdaSn,String taskType,String currentTaskStatus,String targetTaskStatus) throws Exception;

    // 完成上、下架任务，返回任务的uuid
    ShelfOnTask completeShelfOnTaskByUuid(String userId,String uuid,String pdaSn,String currentTaskStatus,String targetTaskStatus);

    //根据条件筛选上、下架任务表头信息
    List<Map<String, Object>> getShelfOnTask(String taskId, String createUserId, String werks, String whsLocationCode, String taskStatus, String updateUsername, String deliveryNoteSap, String pdaSN,String taskType);

   // 根据uuid调取上、下架任务详情
    Map<String,Object> getShelfOnTaskByUuid (String uuid);

    // 根据关联任务uuid获取下加任务明细
    ResponseResult getShelfOffWithDtlsByRelatedUUID(String uuid);

    // 更改上、下架任务状态
    ShelfOnTask updateShelfOnTask (String uuid,String currentTaskStatus,String targetTaskStatus);

    /** 出库任务初始化生成 下架任务，下架任务明细。下架任务按照箱码出货。 */
    int genShelfOnTask(String userId, String createDate, WhsOut whsOut)throws Exception ;

    /** 备件货按箱下架，临时保存下架任务过程明细数据，不扣减储位库存数据 */
    int tempSaveShelfOnTaskDtls(String userId, JSONObject doc)throws Exception ;

    /** 根据上架任务 uuid 获取上架任务表头信息 */
    ShelfOnTask getShelfOnTaskByTaskUuid(String uuid);

    /** 根据下架任务 uuid 删除下架任务明细 */
    int deleteShelfOnTaskDtl(String uuid);

    /** 新建下架任务详情 */
    int insertShelfOnTaskDtl(ShelfOnTaskDtl shelfOnTaskDtl);

    /** 更新下架任务状态 */
    int updateShelfOnTaskStatus(String uuid, String targetStatus);

    /** 出库任务执行过程中，已完成下架但未完成出库的任务重新生成上架任务 */
    int addShelfOnTask(ShelfOnTask shelfOnTask);

    /** 出库任务执行过程中，已完成下架但未完成出库的任务重新生成上架任务详情 */
    int addShelfOnTaskDtl(ShelfOnTaskDtl shelfOnTaskDtl);

    /** 查询上下架任务*/
    ResponseResult queryShelfOnTasks(JSONObject query);

    /** 根据下架任务uuid获取 下架任务类型 创建时间最新的一条下架任务 */
    ShelfOnTask getByRelateDocNumber(String relateDocNumber, String taskType);

    /**根据关联单号号，任务类型 获取上、下架任务*/
    List<ShelfOnTask> getTasksByRelatedDocId(String relateDocNumber, String taskType);
    List<ShelfOnTask> getTasksByRelatedDocId(String relateDocNumber);

    /** 根据上下架任务uuid获取任务明细 */
    List<ShelfOnTaskDtl> getDtlByUuid(String shelfOnTaskUuid);

    /**查看是否有任何未完成的上下架任务*/
    List<ShelfOnTask> getUnClosedTasks(String relateDocNumber);
}
