package cn.estsh.i3plus.ext.mes.pcn.api.busi.jx;

import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesProduceSnExt;
import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesWorkOrderExt;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.jx.JxSnWorkCellScanModel;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import io.swagger.annotations.ApiOperation;

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

/**
 * @Author: wangjie
 * @CreateDate: 2021/01/18 11:22 上午
 * @Description:
 **/
public interface IJxProduceSnExtService {

    /**
     * 根据过程条码或者产品条码查询产品条码信息
     * @param organizeCode 组织代码
     * @param serialNumber 过程条码
     * @param productSn    产品条码
     * @return 产品条码信息
     */
    @ApiOperation(value = "根据过程条码或者产品条码查询产品条码信息", notes = "根据过程条码或者产品条码查询产品条码信息")
    MesProduceSnExt getProduceSnExtDb(String organizeCode, String serialNumber, String productSn);

    /**
     * 设置条码产线 工位 工序 下一道工序
     * @param reqBean        工位对象数据
     * @param produceSnExt   条码信息
     */
    @ApiOperation(value = "设置条码产线 工位 工序 下一道工序", notes = "设置条码产线 工位 工序 下一道工序")
    void doPackSnExtProcess(StationRequestBean reqBean, MesProduceSnExt produceSnExt);

    /**
     * 设置条码产线 工位 工序 下一道工序
     * @param reqBean        工位对象数据
     * @param produceSnExt   条码信息
     */
    @ApiOperation(value = "设置条码产线 工位 工序 下一道工序", notes = "设置条码产线 工位 工序 下一道工序")
    void doCheckIsNeedPackSnExtProcess(StationRequestBean reqBean, MesProduceSnExt produceSnExt);

    /**
     * 清空条码工序信息
     * @param produceSnExt 条码信息
     */
    @ApiOperation(value = "清空条码工序信息", notes = "清空条码工序信息")
    void clearProduceSnProcess(MesProduceSnExt produceSnExt);

    /**
     * 获取大于等于当前工位的工序代码集合,用于验证当前工位工序是否完成
     * @param requestBean 工位数据
     * @return 工序代码集合
     */
    @ApiOperation(value = "获取大于等于当前工位的工序代码集合,用于验证当前工位工序是否完成", notes = "获取大于等于当前工位的工序代码集合,用于验证当前工位工序是否完成")
    List<String> getBiggerCurProcessList(StationRequestBean requestBean);

    /**
     * 获取当前工序条码完成数量
     * @param produceSnList 产品条码信息集合
     * @param processCodeList 工序代码集合
     * @return 当前工序条码完成数量
     */
    @ApiOperation(value = "获取当前工序条码完成数量", notes = "获取当前工序条码完成数量")
    Integer getSnCompleteQtyByProcessList(List<MesProduceSnExt> produceSnList, List<String> processCodeList);

    /**
     * 封装工位扫描条码信息集合
     * @param produceSnList 产品条码信息集合
     * @param processCodeList 工序代码集合
     * @return 工位扫描条码信息集合
     */
    @ApiOperation(value = "封装工位扫描条码信息集合", notes = "封装工位扫描条码信息集合")
    List<JxSnWorkCellScanModel> packSnWorkCellScanListByProcessList(List<MesProduceSnExt> produceSnList, List<String> processCodeList);

    /**
     * 封装工位扫描展示信息
     * @param workOrderExt 生产工单信息
     * @param snCompleteQty 当前工序条码完成数量
     * @return 工位扫描展示信息
     */
    @ApiOperation(value = "封装工位扫描展示信息", notes = "封装工位扫描展示信息")
    Map<String, Object> packSnWorkCellScanResultMap(MesWorkOrderExt workOrderExt, Integer snCompleteQty);

    /**
     * 验证工位参数密码
     * @param reqBean    工位对象数据
     * @param pwd        密码
     * @return 结果
     */
    @ApiOperation(value = "验证工位参数密码", notes = "验证工位参数密码")
    Boolean checkPorceCenterPassPwd(StationRequestBean reqBean, String pwd);
}
