package cn.estsh.i3plus.ext.mes.api.base;

import cn.estsh.i3plus.ext.mes.pojo.model.*;
import cn.estsh.i3plus.ext.mes.pojo.bean.MesWorkOrderExt;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
import io.swagger.annotations.ApiOperation;

import java.util.List;

/**
 * @author yumingxing
 * @version 1.0
 * @date 2021/1/13 9:27
 **/
public interface IWorkOrderExtService {

    /**
     * 手动创建生成生产工单
     *
     * @param workOrderDto 生产工单
     */
    void insertManualGenerate(GenerateWorkOrderDto workOrderDto);

    /**
     * excel导入生成生产工单
     *
     * @param excelWorkOrderDtoList 上次的文件
     */
    void importGenerate(List<ExcelWorkOrderDto> excelWorkOrderDtoList);

    /**
     * sop同步接口生成生产工单 todo(同步接口还未开发)
     *
     * @param mesWorkOrderExtList 上次的文件
     */
    void sopGenerate(List<MesWorkOrderExt> mesWorkOrderExtList);

    /**
     * 调整工作顺序
     *
     * @param generateWorkOrderDto 生成工作单dto
     */
    void adjustWorkOrder(GenerateWorkOrderDto generateWorkOrderDto);


    /**
     * 生产工单 分页查询
     *
     * @param workOrderQueryDto 查询参数
     * @param pager        分页参数
     * @return 生产工单 分页数据
     */
    ListPager<WorkOrderPageVo> getListPageByCondition(WorkOrderQueryDto workOrderQueryDto, Pager pager);


    /**
     * 停止工作订单
     *
     * @param orderNo 订单编号
     */
    void stopWorkOrder(String orderNo);

    /**
     * 启动工单
     *
     * @param orderNo 订单编号
     */
    void startWorkOrder(String orderNo);

    /**
     * 关闭工单
     *
     * @param orderNo 订单没有
     */
    void closeWorkOrder(String orderNo);

    /**
     * 发布工作指令
     *
     * @param orderNo 订单编号
     */
    void releaseWorkOrder(String orderNo);

    /**
     * 更新seq
     *
     * @param workOrderSeq 工作订单seq
     */
    void updateSeq(WorkOrderSeq workOrderSeq);


    /**
     * 生产工单状态批量调整
     *
     * @param workOrderStatus 状态
     * @param orderNoList     工单号
     */
    void updateWorkOrderStatus(Integer workOrderStatus, List<String> orderNoList);
    void updateEpWorkOrderStatus(Integer workOrderStatus, List<String> orderNoList);

    GenerateWorkOrderDto getMesWorkOrderDetail(String orderNo);

    List<MesWorkOrderExt> findMesWorkOrderBySeqAsc(MesWorkOrder mesWorkOrder);


    /**
     * 根据产线工单信息，更新工单的计划开始时间，计划结束时间与顺序
     *
     * @param mesWorkOrderList 工单集合
     */
    @ApiOperation("根据产线工单信息，更新工单的计划开始时间，计划结束时间与顺序")
    void updateSortByMesWorkOrder(List<MesWorkOrderExt> mesWorkOrderList);

    /**
     * 获取工单seq
     * @param organizeCode
     * @param count
     * @return
     */
    @ApiOperation(value = "获取工单seq", notes = "获取工单seq")
    Double getWorkOrderExtMaxSeq(String organizeCode, Integer count);

    /**
     * WMS获取mes工单最大SEQ,根据生产版本获取生产线及区域代码
     * @param model wms入参
     * @return 工单最大SEQ,生产线信息集合
     */
    @ApiOperation(value = "WMS获取mes工单最大SEQ,根据生产版本获取生产线及区域代码", notes = "WMS获取mes工单最大SEQ,根据生产版本获取生产线及区域代码")
    SxWmsToMesWorkOrderModel doHandleWmsWorkOrder(SxWmsToMesWorkOrderModel model) throws Exception;
}
