package com.sw.mes.yb.mcs.service;

import com.sw.mes.core.response.Result;
import com.sw.mes.yb.mcs.dto.*;
import com.sw.mes.yb.mcs.dto.fillingMaterial.McsMoWorkReportingDto;
import com.sw.mes.yb.mcs.vo.HiddenCrackDetectionVo;
import com.sw.mes.yb.production.entity.AgainTaskDetail;
import com.sw.mes.yb.production.entity.AgainTaskPrepare.AgainTaskPrepare;

import java.util.List;

/**
 * @Author: GaoXinJian
 * @Date: 2022-01-14 10:56
 */
public interface YbMcsToMesService {

    /**
     * 晶段检验过点上传
     * <p>
     * 托盘流转至检验区，MCS根据检验线点位将晶段上下检验信息发送给MES
     *
     * @param segmentCheckInfoDto
     * @return
     */
    Result segmentCheckInfo(SegmentCheckInfoDto segmentCheckInfoDto);

    /**
     * 圆棒检测结果上传
     * <p>
     * 圆棒所有项目检测完成后，将圆棒质检数据上传MES
     *
     * @param ybCheckResultDto
     * @return
     */
    Result ybCheckResult(YbCheckResultDto ybCheckResultDto);

    /**
     * 圆棒打码信息请求
     * <p>
     * MCS根据晶段SN向MES请求打码信息
     *
     * @param segmentNo
     * @return
     */
    Result skinCodingInfo(String segmentNo);



    /**
     * MCS根据BCS上料请求，同步向MES反馈单晶上料信息，MES完成载具车解绑功能
     * @param unbindInfoDto
     * @return
     */
    Result unbindInfo(UnbindInfoDto unbindInfoDto);

    /**
     * MCS上传MES托盘编号，MES下发MCS头尾料SN、类别；MCS控制装到哪个回收料箱
     *
     * 根据sn查询画线规则，获取参杂剂信息，电阻率、少子寿命、碳含量等信息待相关功能开发完成获取，
     *
     * 根据以上信息匹配分类规则（基础数据管理》数据配置》头尾料配置规则）
     * @param code
     * @return
     */
    HeadTailMaterialTypeDto getHeadTailMaterialType(String code);

    /**
     * 头尾料打托完成时（达到设定重量），MCS将箱子编码、评级、总重量、所有头尾料SN 上传 MES 系统；
     * @param headTailMaterialInfoDto
     */
    void headTailMaterialInfo(HeadTailMaterialInfoDto headTailMaterialInfoDto);

    /**
     * 获取晶段站点信息接口
     * @param skinCodingInfoDto
     * @return
     */
    Result sectionWipStorageInfo (SkinCodingInfoDto skinCodingInfoDto);


    /**
     * 操作晶棒过站（圆棒检验待进站->圆棒检验进站）
     * @param skinCodingInfoDto
     * @return
     */
    Result ybInspectStationIn (SkinCodingInfoDto skinCodingInfoDto);


    /**
     * 截断自动下料校验接口
     * @param pdaBingDto
     * @return
     */
    Result checkForAutoBind( PdaBingDto pdaBingDto);

    /**
     * mcs重新匹配方棒订单
     * @param SquareOrderDto
     * @return
     */
    Result squareOrder(SquareOrderMesDto SquareOrderDto);

    /**
     * 样片检测结果上传
     * @param sampleCheckInfoDto
     * @return
     */
    Result sampleInfo(SampleCheckInfoDto sampleCheckInfoDto);

    /**
     * 头尾料回收料绑定接口
     * @param recycledBindingInfoDto
     * @return
     */
    Result biddingRecycledMaterial(RecycledBindingInfoDto recycledBindingInfoDto);

    Result staggerPositionInfo(DislocationInfoDto dislocationDto);

    /**
     * 通过晶棒号查询托盘绑定信息
     * @param sectionNo
     * @return
     */
    CrystalTrayBindInfoResult findBindingInfoBySectionNo(SectionInfo sectionNo);

    Result uploadInventory(List<McsFbInventoryDto> fbInventoryDto);

    /**
     * 生产任务报工接口，mcs完成装罐料任务,上报mes罐料任务
     * @param dto
     * @param obj
     * @return
     */
    Result moWorkReportingInterface(McsMoWorkReportingDto dto, Object obj);

    /**
     * 预装料任务缓存库出库mcs上报mes
     * @param taskPrepare
     * @param task
     * @return
     */
    Result mcsMoWorkReporting(AgainTaskPrepare taskPrepare, AgainTaskDetail task);

    /**
     * 自动取晶车取单晶后自动绑定送验车
     * @param inspectionBindingInfoDto
     * @return
     */
    Result build(InspectionBindingInfoDto inspectionBindingInfoDto);

    /**
     * 圆棒面斜、隐裂检测数据上报MES
     * @param hiddenCrackDetectionDto
     */
    HiddenCrackDetectionVo hiddenCrackDetection(HiddenCrackDetectionDto hiddenCrackDetectionDto);
}
