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


import com.sw.mes.base.factory.init.dto.SortingConfigDto;
import com.sw.mes.base.factory.init.dto.WarehouseDto;
import com.sw.mes.core.dto.RankResultDto;
import com.sw.mes.core.response.Result;
import com.sw.mes.production.dto.FormulaSchemeDto;
import com.sw.mes.yb.fls.dto.RecycledMaterialToAGVDto;
import com.sw.mes.yb.fls.dto.RecycledMaterialToAGVDtos;
import com.sw.mes.yb.mcs.dto.*;
import com.sw.mes.yb.mcs.dto.fillingMaterial.*;
import com.sw.mes.yb.mcs.utils.ResultDto;
import com.sw.mes.yb.plan.dto.PlanWaterLineManageToWmsDto;
import com.sw.mes.yb.turnstore.dto.ManualCallDto;

import java.util.List;

/**
 * @Author: GaoXinJian
 * @Date: 2022-01-10 13:25
 */
public interface YbMesToMcsService {
    /**
     * 圆棒托盘绑定接口
     *
     *
     * 截断完成，FLS将圆棒抓取至托盘，并将绑定信息发送给MES；
     * MES接收到信息后，将绑定信息及晶段基础信息发送至MCS
     * （托盘RFID、晶段SN、掺杂剂、导电型号、晶段类型
     * （标棒、非标、返切等）、晶段规格（223、247、295等）、单晶朝向）等）
     *
     * @param crystalTrayBindInfoDto 圆棒托盘绑定接口Dto
     * @return mcs返回结果
     */
    ResultDto crystalTrayBindInfo(CrystalTrayBindInfoDto crystalTrayBindInfoDto);



    ResultDto recycledMaterialToMcs(RecycledMaterialToAGVDtos recycledMaterialToAGVDto);


    ResultDto pullAgvTaskToMcs(AgvTaskDto agvTaskDto);


    Result recycledMaterialToMcsAndAGV(List<RecycledMaterialToAGVDto> recycledMaterialToAGVDto);


    /**
     * 圆棒评级结果下发
     *
     *
     * 托盘流转至检验区，MCS根据检验线点位将晶段上下检验信息发送给MES
     * @param rankResultDto 晶段检验过点上传接口dto
     * @return string
     */
    ResultDto rankResult(RankResultDto rankResultDto);

    /**
     * 订单水位下发
     *
     *
     * 订单水位变动后，MES将新的水位设置发送至MCS
     * @param orderConfigDtoList
     * @return
     */
    ResultDto orderConfig(List<OrderConfigDto> orderConfigDtoList);


    /**
     * 订单水位下发
     *
     *
     * 订单水位变动后，MES将新的水位设置发送至wms(mcs)
     * @param planWaterLineManageToWmsDto
     * @return
     */
    ResultDto planWaterLineManageToWmsDto(PlanWaterLineManageToWmsDto planWaterLineManageToWmsDto);

    /**
     * 拼棒托盘绑定
     *
     *
     * 拼棒完成FLS将托盘号、拼棒SN上传MES后，MES将托盘绑定信息上传MCS
     * @param spellBindingDto
     * @return
     */
    ResultDto spellBinding(SpellBindingDto spellBindingDto);

    /**
     * 分选口规格配置信息下发接口
     *
     * 分选口配置更改时,MES将分选口的规格配置下发MCS
     *
     * @param blankConfigDtoList
     * @return
     */
    ResultDto blankConfig(List<BlankConfigDto> blankConfigDtoList);

    ResultDto blankConfigForUpdateCheck(SortingConfigDto sortingConfigDto);

    ResultDto crystalTrayUnBindInfo(CrystalTrayUnBindInfoDto crystalTrayUnBindInfoDto);

    ResultDto addManualCall(ManualCallDto manualCallDto);

    Result pdaBing(PdaBingDto pdaBingDto);
    Result pdaBingFb(PdaBingDto pdaBingDto);

    //截断下料人工模式解绑
    Result unPdaBing(PdaBingDto pdaBingDto);
    Result unPdaBingFb(PdaBingDto pdaBingDto);

    Result updateWarehouse(WarehouseDto warehouseDto);

    /**
     * 配方信息推送mcs
     * @param formulaSchemeId 配方id
     * @return
     */
    Result<FormulaSchemeToMesDto> formulaSchemeToMcs(Long formulaSchemeId);

    /**
     * 生产任务信息下发mcs
     * <pre>
     * 当MES系统中的投料生产任务产生或者生产任务发生变动时调用MCS系统
     * 的下发生产任务接口传输生产任务信息。
     * </pre>
     */
    Result<IssueMoToMcsDto> issueMoInterface(Object obj);

    Result<List<CancelMoDistributionToMcsDto>> cancelMoDistributionInterface(Object obj);


    /**
     * mcs料盒托盘绑定下发mcs接口
     * @param dto
     * @return
     */
    Result moTrayBinding(MoTrayBindingDto dto);

    /**
     * 规格转换
     * @param productType 转换前规格
     * @return 转换后规格
     */
    String productTypeConversion(String productType);

    /**
     * 晶裂免检
     */
    Result exemption(PdaBingDto pdaBingDto);
    /**
     * mcs物料库位绑定下发mcs接口
     * @param dto
     * @return
     */
    Result moWarehousingBinding(MoWarehousingBindingDto dto);

}