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

import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesBadCellDetail;
import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesProdBindRecordExt;
import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesRepairRecordExt;
import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.MesWorkCenterExt;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.ProduceSnExtModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.RepairRequestModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.RepairWorkOrderModel;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.mes.bean.MesDefect;
import cn.estsh.i3plus.pojo.mes.bean.MesDefectCause;
import cn.estsh.i3plus.pojo.mes.bean.MesRepair;
import cn.estsh.i3plus.pojo.mes.model.DefectModel;
import io.swagger.annotations.ApiOperation;

import java.util.List;

/**
 * @Author: xiangming.liao
 * @CreateDate: 2021/02/26
 * @Description:
 **/
public interface ISxRepairWorkService {

    /**
     * 本体返修-提交-查询产品条码
     *
     * @param serialNumber 产品条码
     * @param organizeCode 组织代码
     * @return 产品条码
     */
    @ApiOperation(value = "本体返修-提交-查询产品条码", notes = "本体返修-提交-查询产品条码")
    ProduceSnExtModel getProduceSnFrozenBySn(String serialNumber, String organizeCode);

    /**
     * 本体返修-提交-查询不良明细
     *
     * @param serialNumber 产品条码
     * @param organizeCode 组织代码
     * @return 不良明细
     */
    @ApiOperation(value = "本体返修-提交-查询不良明细", notes = "本体返修-提交-查询不良明细")
    List<MesBadCellDetail> getMesBadCellDetailBySerialNumber(String serialNumber, String organizeCode);

    /**
     * 本体返修-提交-查询维修明细
     *
     * @param serialNumber 产品条码
     * @param organizeCode 组织代码
     * @return 维修明细
     */
    @ApiOperation(value = "本体返修-提交-查询维修明细", notes = "本体返修-提交-查询维修明细")
    List<MesRepairRecordExt> getMesRepairRecordBySerialNumber(String serialNumber, String organizeCode);

    /**
     * 组件返修-查询组件产线
     * @param organizeCode 组织代码
     * @return
     */
    @ApiOperation(value = "组件返修-查询组件产线", notes = "组件返修-查询组件产线")
    List<MesWorkCenterExt> queryWorkCenter(String organizeCode);

    /**
     * 组件返修-选择生产线-加载工单信息
     *
     * @param workCenterCode 生产线
     * @param organizeCode   组织代码
     * @return 工单信息
     */
    @ApiOperation(value = "组件返修-选择生产线-加载工单信息", notes = "组件返修-选择生产线-加载工单信息")
    List<RepairWorkOrderModel> queryWorkOrderByCenter(String workCenterCode, String organizeCode);

    /**
     * 组件返修-选择生产线-查询不良明细
     *
     * @param workOrderNo  工单编码
     * @param organizeCode 组织代码
     * @return 不良明细
     */
    @ApiOperation(value = "组件返修-选择生产线-查询不良明细", notes = "组件返修-选择生产线-查询不良明细")
    List<MesBadCellDetail> getMesBadCellDetailByWorkOrderNo(String workOrderNo, String organizeCode);

    /**
     * 组件返修-选择生产线-查询维修明细
     *
     * @param workOrderNo  工单编码
     * @param organizeCode 组织代码
     * @return 维修记录
     */
    @ApiOperation(value = "组件返修-选择生产线-查询维修明细", notes = "组件返修-选择生产线-查询维修明细")
    List<MesRepairRecordExt> getMesRepairRecordByOrderNo(String workOrderNo, String organizeCode);

    /**
     * 本体/组件返修-查询缺陷列表
     * @param organizeCode 组织代码
     * @return 缺陷列表
     */
    @ApiOperation(value = "本体/组件返修-查询缺陷列表", notes = "本体/组件返修-查询缺陷列表")
    List<DefectModel> getMesDefect(String organizeCode);

    /**
     * 本体/组件返修-选中缺陷列表数据
     *
     * @param defectCode 缺陷代码
     * @param defectName 缺陷名称
     * @param organizeCode 组织代码
     * @return 缺陷信息
     */
    @ApiOperation(value = "本体/组件返修-选中缺陷列表数据", notes = "本体/组件返修-选中缺陷列表数据")
    MesDefect getMesDefect(String defectCode, String defectName, String organizeCode);

    /**
     * 本体/组件返修-不良明细-新增
     * @param mesBadCellDetail 不良记录
     */
    @ApiOperation(value = "本体/组件返修-不良明细-新增", notes = "本体/组件返修-不良明细-新增")
    void insertMesBadCellDetail(MesBadCellDetail mesBadCellDetail);

    /**
     * 本体/组件返修-维修明细-新增
     *
     * @param repairRecord    维修记录
     */
    @ApiOperation(value = "本体/组件返修-维修明细-新增", notes = "本体/组件返修-维修明细-新增")
    void insertMesRepairRecord(MesRepairRecordExt repairRecord);

    /**
     * 本体/组件返修-维修明细-修改
     *
     * @param repairRecord    维修记录
     */
    @ApiOperation(value = "本体/组件返修-维修明细-修改", notes = "本体/组件返修-维修明细-修改")
    void updateMesRepairRecord(MesRepairRecordExt repairRecord);

    /**
     * 本体/组件返修-查询缺陷原因
     *
     * @param defectCause 查询条件
     * @param pager          分页条件
     * @return 缺陷原因
     */
    @ApiOperation(value = "本体/组件返修-查询缺陷原因", notes = "本体/组件返修-查询缺陷原因")
    ListPager<MesDefectCause> getMesDefectCause(MesDefectCause defectCause, Pager pager);

    /**
     * 本体/组件返修-查询措施代码
     *
     * @param repair 维修查询条件
     * @param pager     分页条件
     * @return 分页数据
     */
    @ApiOperation(value = "本体/组件返修-查询措施代码", notes = "本体/组件返修-查询措施代码")
    ListPager<MesRepair> getMesRepair(MesRepair repair, Pager pager);

    /**
     * 本体/组件返修-一步操作
     * @param requestModel  一步操作数据
     */
    @ApiOperation(value = "本体/组件返修-一步操作", notes = "本体/组件返修-一步操作")
    void insertMesRepairDefectRecord(RepairRequestModel requestModel);

    /**
     * 本体返修-维修完成
     *
     * @param serialNumber 产品条码
     * @param organizeCode 组织代码
     * @param modifyUser   修改人
     */
    @ApiOperation(value = "本体返修-维修完成", notes = "本体返修-维修完成")
    String updateRepairComplete(String serialNumber, String organizeCode, String modifyUser);


    /**
     * 组件返修-维修完成
     *
     * @param workOrderNo  工单编码
     * @param organizeCode 组织代码
     * @param modifyUser   修改人
     */
    @ApiOperation(value = "组件返修-维修完成", notes = "组件返修-维修完成")
    void updateRepairBatchComplete(String workOrderNo, Double defectQty, String organizeCode, String modifyUser);

    /**
     * 本体返修-换件作业查询
     *
     * @param serialNumber 产品条码
     * @param organizeCode 组织代码
     * @return 绑定记录集合
     */
    @ApiOperation(value = "本体返修-换件作业查询", notes = "本体返修-换件作业查询")
    List<MesProdBindRecordExt> getBindRecordData(String serialNumber, String organizeCode);

    /**
     * 本体返修-换件作业确认替换
     * @param id 产品绑定记录表ID
     * @param serialNumber 产品条码
     * @param keyBarCode   关键件条码
     * @param organizeCode 组织代码
     * @param modifyUser   修改人
     * @param itemPartNo   原材料编码
     */
    @ApiOperation(value = "本体返修-换件作业确认替换", notes = "本体返修-换件作业确认替换")
    void insertProdBindRecord(Long id, String serialNumber, String keyBarCode, String organizeCode, String modifyUser, String itemPartNo);
}
