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

import cn.estsh.i3plus.ext.mes.pojo.bean.MesShiftExt;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.mes.bean.MesShift;
import io.swagger.annotations.ApiOperation;

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

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

    /**
     * 按条件分页查询班次信息
     *
     * @param shiftExt 查询条件
     * @param pager 分页条件
     * @return 班次分页数据
     */
    @ApiOperation(value = "按条件分页查询班次信息", notes = "按条件分页查询班次信息")
    ListPager<MesShiftExt> queryShiftByPager(MesShiftExt shiftExt, Pager pager);

    /**
     * 新增班次信息
     * @param shiftExt 班次信息
     * @return 班次数据
     */
    @ApiOperation(value = "新增班次信息", notes = "新增班次信息")
    MesShiftExt insertShift(MesShiftExt shiftExt);

    /**
     * 更新班次信息
     * @param shiftExt 班次信息
     * @return 班次数据
     */
    @ApiOperation(value = "更新班次信息", notes = "更新班次信息")
    MesShiftExt updateShift(MesShiftExt shiftExt);

    /**
     * 根据id启用或禁用班次信息
     * @param id 班次信息ID
     * @param status 状态
     * @param userName 操作人
     */
    @ApiOperation(value = "根据id启用或禁用班次信息", notes = "根据id启用或禁用班次信息")
    void updateShiftValidById(Long id, Integer status, String userName);

    /**
     * 获取班次时长
     *
     * @param startTimeStr HH:mm:ss
     * @param endTimeStr   HH:mm:ss
     * @return 班次时长
     */
    @ApiOperation(value = "获取班次时长", notes = "获取班次时长")
    Double getShiftWorkTimes(String startTimeStr, String endTimeStr);

    /**
     * 查询班次集合
     * @param organizeCode 组织代码
     * @return 班次集合
     */
    @ApiOperation(value = "查询班次集合", notes = "查询班次集合")
    List<MesShift> queryShiftList(String organizeCode);

    /**
     * 查询班次集合
     * @param organizeCode 组织代码
     * @return 班次集合
     */
    @ApiOperation(value = "查询班次集合(k:v) k -> 产线代码&班次代码", notes = "产线代码&班次代码")
    Map<String, MesShift> queryShiftMap(String organizeCode);

    /**
     * 查询班次集合
     * @param organizeCode 组织代码
     * @return 班次集合
     */
    @ApiOperation(value = "查询班次集合(k:v) k -> 班次代码 v -> 班次名称", notes = "产线代码&班次代码")
    Map<String, String> queryShiftNameMapByWorkCenterCode(String organizeCode, String workCenterCode);
}
