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

import cn.estsh.i3plus.ext.mes.pojo.bean.MesUnbindProduceSn;
import cn.estsh.i3plus.ext.mes.pojo.bean.MesWorkOrderExt;
import cn.estsh.i3plus.ext.mes.pojo.model.*;
import cn.estsh.i3plus.ext.mes.pojo.model.bu3.SxOutPutStatisticsModel;
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;
import java.util.Map;

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

    /**
     * 手动创建生成生产工单
     *
     * @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 workOrderQueryDto 查询参数
     * @param pager        分页参数
     * @return 生产工单 分页数据
     */
    ListPager<WorkOrderPageVo> getWorkOrderListByPager(WorkOrderQueryDto workOrderQueryDto, Pager pager);

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

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

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

    List<MesWorkOrderExt> findMesWorkOrderBySeqAsc(MesWorkOrder mesWorkOrder);

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

    /**
     * 生产工单调序-bu
     * @param orderNo
     * @param nextOrderNo
     * @param organizeCode
     * @param userName
     */
    void updateOrderSeq(Long orderNo, Long nextOrderNo, String workCenterCode, String organizeCode, String userName);

    /**
     * 修改工单 是否使用完成数量
     * @param workOrderNo 工单号
     * @param workTime 作业时间
     * @param shiftCode 班次代码
     * @param outPutFlag 是否使用完工数量标志
     * @param organizeCode 工厂代码
     * @param userName 操作人
     */
    void doUpdateWorkOrderIsUseCompleteQty( String workOrderNo, String workTime, String shiftCode, String outPutFlag,  String organizeCode, String userName);

    /**
     * 修改工单 是否使用完成数量
     * @param workOrderNo 工单号
     * @param organizeCode 工厂代码
     */
    Map<String, Object> getProductionBatchByWorkOrderNo(String workOrderNo, String organizeCode);

    /**
     * 解绑条码查询
     *
     * @param produceSn 检索条件
     * @param pager     分页对象
     */
    List<MesUnbindProduceSn> queryMesUnbindSnList(MesUnbindProduceSn produceSn);

    /**
     * 绑定已解绑条码
     *
     * @param produceSnList 条码集合
     * @param orderNo   工单号
     */
    void doBindUnbindSnByOrderNo(List<String> produceSnList, String orderNo, String organizeCode, String userName);

}
