package com.hw.mes.api;

import com.hw.common.core.constant.SecurityConstants;
import com.hw.common.core.constant.ServiceNameConstants;
import com.hw.common.core.domain.R;
import com.hw.mes.api.domain.MesBaseBarcodeInfo;
import com.hw.mes.api.domain.MesBaseMaterialInfo;
import com.hw.mes.api.domain.MesBaseStationInfo;
import com.hw.mes.api.domain.vo.MesBaseMaterialInfoVo;
import com.hw.mes.api.factory.RemoteMesFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@FeignClient(contextId = "remoteMesService", value = ServiceNameConstants.MES_SERVICE, fallbackFactory = RemoteMesFallbackFactory.class)
public interface RemoteMesService {

    /**
     * 通过条码查询条码信息
     *
     * @param barcodeInfo 条码信息
     * @param source      请求来源
     * @return 结果
     */
    @GetMapping("/barcode/getBarcode/{barcodeInfo}")
    public R<MesBaseBarcodeInfo> getBarcode(@PathVariable("barcodeInfo") String barcodeInfo, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);


    /**
     * 通过物料ID列表查询物料信息列表
     *
     * @param mesBaseMaterialInfo
     * @param source      请求来源
     * @return 结果
     */
    @PostMapping("/materialinfo/getMaterialsByMaterialIds")
    public R<List<MesBaseMaterialInfo>> getMaterialsByMaterialIds(@RequestBody MesBaseMaterialInfoVo mesBaseMaterialInfo, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);


    /**
     * 查询工位信息列表
     *
     * @param source      请求来源
     * @return 结果
     */
    @GetMapping("/baseStationInfo/getStations")
    public R<List<MesBaseStationInfo>> getStations(@RequestHeader(SecurityConstants.FROM_SOURCE) String source);



    /**
     * 通过绑定条码查询条码信息
     *
     * @param bindBarcode 绑定条码信息
     * @param source      请求来源
     * @return 结果
     */
    @GetMapping("/barcode/getBarcodeByBindBarcode/{bindBarcode}")
    public R<MesBaseBarcodeInfo> getBarcodeByBindBarcode(@PathVariable("bindBarcode") String bindBarcode, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);

}
