package com.foreverwin.mesnac.dispatch.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.foreverwin.mesnac.common.dto.SfcDispatchDto;
import com.foreverwin.mesnac.dispatch.model.SfcDispatch;
import org.springframework.web.multipart.MultipartFile;

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

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author Leon.L
 * @since 2021-06-02
 */
public interface SfcDispatchService extends IService<SfcDispatch> {


    /**
     * 查询派工数据
     *
     * @param site
     * @param sfc
     * @param operation  非必须
     * @param stepId  非必须
     * @return
     */
    List<SfcDispatch> findSfcDispatch(String site, String sfc, String operation, String stepId);

    /**
     * 查询派工清单
     *
     * @param paramMap
     * @return
     */
    List<SfcDispatchDto> findSfcDispatchList(Map paramMap);

    /**
     * 派工保存
     *
     * @param site
     * @param user
     * @param message |派工保存返回提示
     * @param sfcDispatchList
     */
    Boolean saveDispatch(String site, String user, StringBuffer message, List<SfcDispatchDto> sfcDispatchList);

    /**
     * 派工发布
     *  1.可用状态包括（新建、暂挂）
     *  2.需校验资源、计划开始时间、计划结束时间不为空
     *  3.需校验派工资源的类型和需求资源类型一致
     *
     * @param site
     * @param user
     * @param message |派工保存返回提示
     * @param sfcDispatchList
     */
    Boolean releaseDispatch(String site, String user, StringBuffer message, List<SfcDispatchDto> sfcDispatchList);

    /**
     * 返回新建
     *  1.可用状态包括（暂挂、取消），
     *  2.需校验不允许存在领料信息
     *
     * @param user
     * @param sfcDispatchList
     */
    void returnToNew (String user, List<SfcDispatchDto> sfcDispatchList);

    /**
     * 暂挂
     * 可用状态包括（新建、发布）
     *
     * @param user
     * @param sfcDispatchList
     */
    void pause (String user, List<SfcDispatchDto> sfcDispatchList);

    /**
     * 取消
     * 1.可用状态（新建、发布、暂挂）
     * 2.需校验派工单领料状态为无需领料或未领料
     *
     * @param user
     * @param sfcDispatchList
     */
    void cancel (String user, List<SfcDispatchDto> sfcDispatchList);

    /**
     * 派工数据导入
     *
     * @param site
     * @param user
     * @param fileType
     * @param message
     * @param multipartFile
     */
    Boolean importDispatch(String site, String user, String fileType, StringBuffer message, MultipartFile multipartFile) throws Exception;

    /**
     * 甘特图数据查询
     *
     * @param site
     * @param paramMap
     * @return
     */
    Map<String, Object> ganttList(String site, Map paramMap);


}