package cn.estsh.i3plus.ext.mes.api.busi.bu3;

import cn.estsh.i3plus.ext.mes.pojo.bean.MesOutPutStatistics;
import cn.estsh.i3plus.ext.mes.pojo.bean.MesWorkCenterNotReachReason;
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;

public interface ISxWorkCenterNotReachReasonService {

    /**
     * 产线未达成原因
     *
     * @param notReachReason 查询条件
     * @return 产线未达成原因
     */
    @ApiOperation(value = "产线未达成原因", notes = "产线未达成原因")
    ListPager<MesWorkCenterNotReachReason> querySxWorkCenterNotReachReasonByPager(MesWorkCenterNotReachReason notReachReason, Pager pager);

    void doStatisticsWorkCenterNotReachReason(String organizeCode, String workTime);

    /**
     * 保存产线未达成原因
     *
     * @param notReachReason 查询条件
     * @return 产线未达成原因
     */
    @ApiOperation(value = "保存产线未达成原因", notes = "保存产线未达成原因")
    void doSaveSxWorkCenterNotReachReason(MesWorkCenterNotReachReason notReachReason);

    /**
     * 保存产线未达成原因
     *
     * @param workTime 查询条件
     * @param workCenterNotReachReasonList 未达成原因集合
     * @param workCenterNotReachReasonMapByWo 未达成原因
     * @param workOrderMapByWorkCenterCode 根据产线代码分组的工单数据
     * @param outPutStatisticsByWorkCenterCodeMap 根据产线代码分组的产量统计数据
     * @param workCenterCode 产线代码
     * @return 添加未达成原因数据
     */
    @ApiOperation(value = "获取产线未达成原因数据", notes = "获取产线未达成原因数据")
    void addWorkCenterNotReachReasonList(String workTime, List<MesWorkCenterNotReachReason> workCenterNotReachReasonList,
                                                Map<String, MesWorkCenterNotReachReason> workCenterNotReachReasonMapByWo,
                                                Map<String, List<MesWorkOrder>> workOrderMapByWorkCenterCode,
                                                Map<String, List<MesOutPutStatistics>> outPutStatisticsByWorkCenterCodeMap,
                                                String workCenterCode);

    /**
     * 保存产线未达成原因
     *
     * @param workCenterCode 产线代码
     * @param workTime 作业时间
     * @param organizeCode 工厂代码
     * @return 获取根据产线代码分组的未达成原因数据
     */
    @ApiOperation(value = "获取根据产线代码分组的未达成原因数据", notes = "获取根据产线代码分组的未达成原因数据")
    Map<String, MesWorkCenterNotReachReason> getMesWorkCenterNotReachReasonMapByWorkCenterCode(String workCenterCode, String workTime, String organizeCode);

    /**
     * 获取根据产线分组的工单数据
     *
     * @param workCenterCode 产线代码
     * @param workTime 作业时间
     * @param organizeCode 工厂代码
     * @return 获取根据产线分组的工单数据
     */
    @ApiOperation(value = "获取根据产线分组的工单数据", notes = "获取根据产线分组的工单数据")
    Map<String, List<MesWorkOrder>> getMesWorkOrderMapByWorkCenterCode(String workCenterCode, String workTime, String organizeCode);

    /**
     * 获取根据产线分组的产量数据
     *
     * @param workCenterCode 产线代码
     * @param workTime 作业时间
     * @param organizeCode 工厂代码
     * @return 获取根据产线分组的产量数据
     */
    @ApiOperation(value = "获取根据产线分组的产量数据", notes = "获取根据产线分组的产量数据")
    Map<String, List<MesOutPutStatistics>> getMesOutPutStatisticsMapByWorkCenterCode(String workCenterCode, String workTime, String organizeCode);

    /**
     * 获取产线代码集合
     *
     * @param workOrderMapByWorkCenterCode 工单数据
     * @param outPutStatisticsByWorkCenterCodeMap 产量统计数据
     * @return 获取产线代码集合
     */
    @ApiOperation(value = "获取产线代码集合", notes = "获取产线代码集合")
    List<String> getWorkCenterCodeList(Map<String, List<MesWorkOrder>> workOrderMapByWorkCenterCode, Map<String, List<MesOutPutStatistics>> outPutStatisticsByWorkCenterCodeMap);
}
