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

import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesShiftExt;
import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesShiftProd;
import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesShiftProdCenterRecord;
import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesWorkCenterExt;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.ShiftProdCenterModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.ShiftProdModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.bu.AndonShiftProdCenterRecordModel;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.impp.framework.boot.util.ResultBean;
import io.swagger.annotations.ApiOperation;

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

/**
 * @Author: wangjie
 * @CreateDate: 2021/01/19 15:06 下午
 * @Description:
 **/
public interface IBuShiftProdCenterRecordService {

    /**
     * 查询班次所有有效数据
     * @param shiftExt 班次信息
     * @return 班次集合
     */
    @ApiOperation(value = "查询班次所有有效数据", notes = "查询班次所有有效数据")
    List<MesShiftExt> queryShiftAll(MesShiftExt shiftExt);

    /**
     * 查询停开机记录页面展示数据
     * @param shiftExt 查询条件
     * @return 停开机记录页面展示数据
     */
    @ApiOperation(value = "查询停开机记录页面展示数据", notes = "查询停开机记录页面展示数据")
    ShiftProdCenterModel queryShiftProdCenterData(MesShiftExt shiftExt);

    /**
     * 停开机记录-结束班次
     * @param workCenter 产线信息
     */
    @ApiOperation(value = "停开机记录-结束班次", notes = "停开机记录-结束班次")
    ResultBean doShiftProdCenterStop(MesWorkCenterExt workCenter, String partNo, String notReachReason);

    /**
     * 停开机记录-启动班次
     * @param workCenter 产线信息
     */
    @ApiOperation(value = "停开机记录-启动班次", notes = "停开机记录-启动班次")
    void doShiftProdCenterStart(MesWorkCenterExt workCenter);

    /**
     * 新增停开机记录
     * @param record 停开机记录信息
     * @return 停开机记录信息
     */
    @ApiOperation(value = "新增停开机记录", notes = "新增停开机记录")
    MesShiftProdCenterRecord insertShiftProdCenterRecord(MesShiftProdCenterRecord record);

    /**
     * 编辑停开机记录
     * @param record 停开机记录信息
     * @return 停开机记录信息
     */
    @ApiOperation(value = "编辑停开机记录", notes = "编辑停开机记录")
    MesShiftProdCenterRecord updateShiftProdCenterRecord(MesShiftProdCenterRecord record);

    /**
     * 根据id删除停开机记录
     * @param id  停开机记录ID
     * @param modifyUser 操作人
     * @return 结果
     */
    @ApiOperation(value = "根据id删除停开机记录", notes = "根据id删除停开机记录")
    int deleteShiftProdCenterRecodeById(Long id, String modifyUser);

    /**
     * 按条件分页查询班次作业项目信息
     * @param shiftProd
     * @param pager
     * @return 班次作业项目信息分页集合
     */
    @ApiOperation(value = "按条件分页查询班次作业项目信息", notes = "按条件分页查询班次作业项目信息")
    ListPager<ShiftProdModel> queryShiftProdByPager(MesShiftProd shiftProd, Pager pager);

    /**
     * 根据班次获取生产日期
     * @param startTime 班次开始信息
     * @param endTime   班次结束信息
     * @return 生产日期
     */
    @ApiOperation(value = "根据班次获取生产日期", notes = "根据班次获取生产日期")
    String getWorkTime(String startTime, String endTime);

    /**
     * 安灯保存停开机记录
     * @param params andon参数
     * @return 停开机记录
     */
    @ApiOperation(value = "安灯保存停开机记录", notes = "安灯保存停开机记录")
    AndonShiftProdCenterRecordModel saveShiftProdCenterRecordFromAndon(Map<String, Object> params);

    /**
     * 获取开始时间
     * 1、白班和夜班第一条常规生产开始时间默认为班次开始时间
     * 2、当前班次第二条常规生产开始时间为上一常规生产的结束时间
     * @param record 停开机记录信息
     * @return 停开机记录信息
     */
    @ApiOperation(value = "获取开始时间", notes = "获取开始时间")
    String queryStartTime(MesShiftProdCenterRecord record);
}
