package com.steerinfo.dil.feign;

import com.steerinfo.dil.util.BaseRESTfulController;
import com.steerinfo.framework.controller.RESTfulResult;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * @author luobang
 * @create 2021-09-17 14:13
 */
@FeignClient(value = "DAL-DAZHOU-WMS-DEV",url = "${openfeign.WMSFeign.url}")
public interface WMSFeign {
    /**
     * 钢材入库实绩
     * @param mapValue
     * @param apiId
     * @param pageNum
     * @param pageSize
     * @return
     */
    @RequestMapping(value = "/api/v1/wms/inboundResult/getWmsInboundResult",method = RequestMethod.POST)
    Map<String,Object> getWmsInboundResult(@RequestBody(required = false) Map<String, Object> mapValue,
                                      @RequestParam Integer apiId,
                                      @RequestParam Integer pageNum,
                                      @RequestParam Integer pageSize,
                                      @RequestParam String con);

    /**
     * 展示出库实绩
     * @param apiId
     * @param pageNum
     * @param pageSize
     * @return
     */
    @RequestMapping(value = "/api/v1/wms/wmspoutboundresults/getWmspOutboundResult",method = RequestMethod.POST)
    Map<String,Object> getWmspOutboundResult(@RequestBody(required = false) Map<String,Object> map,
                                             @RequestParam Integer apiId,
                                             @RequestParam Integer pageNum,
                                             @RequestParam Integer pageSize,
                                             @RequestParam String con);

    /**
     * 新增出库实绩
     * @param mapval
     * @return
     */
    @RequestMapping(value = "/api/v1/wms/wmspoutboundresults/insertWmspOutBoundResult",method = RequestMethod.POST)
    Map<String,Object> insertWmspOutBoundResult(@RequestBody(required = false) Map<String, Object> mapval);

    /**
     * 逻辑删除出库单
     * @param resultId
     * @return
     */
    @PostMapping(value = "/api/v1/wms/wmspoutboundresults/deletewmspOutboundResult")
    Map<String,Object> deleteWmspOutboundResult(@RequestParam Integer resultId);

    /**
     * 新增出库扫描实绩
     * @param map
     * @return
     */
    @PostMapping(value = "/api/v1/wms/wmspoutboundresults/insertwmspOutboundScanResult")
    Map<String,Object> insertwmspOutboundScanResult(@RequestBody(required = false) Map<String, Object> map);

    /**
     * 装卸工PDA前端点击出库
     * @param resultId
     * @return
     */
    @PostMapping("/api/v1/wms/wmspoutboundresults/outbountResultToSuccess")
    Map<String,Object> outbountResultToSuccess(@RequestParam Integer resultId);

    /**
     * 更新出库状态
     * @param resultId
     * @return
     */
    @PostMapping(value = "/api/v1/wms/wmspoutboundresults/updataResultStatus")
    Map<String,Object> updataResultStatus(@RequestBody(required = false)Integer resultId);

    @PostMapping(value = "/api/v1/wms/wmsoffsitelibaryoutbounds/getRmsMaterial")
    Map<String,Object> getRmsMaterial(@RequestBody(required = false)Map<String, Object> mapval);

    /**
     *  展示实时库存数据
     * @param apiId
     * @param pageNum
     * @param pageSize
     * @return
     */
    @RequestMapping(value = "/api/v1/wms/wmspgridmaterials/selectGridMaterialList",method = RequestMethod.POST)
    Map<String,Object> selectGridMaterialList(@RequestBody(required = false) Map<String,Object> map,
                                              @RequestParam Integer apiId,
                                              @RequestParam Integer pageNum,
                                              @RequestParam Integer pageSize,
                                              @RequestParam String con);

    /**
     *  通过成品仓库网格ID查询实时库存数据
     * @param gridId
     * @return
     */
    @RequestMapping(value = "/api/v1/wms/wmspgridmaterials/selectGridMaterialListByGridId",method = RequestMethod.POST)
    Map<String,Object> selectGridMaterialListByGridId(@RequestParam BigDecimal gridId);

    /**
     *  修改物资钢材表的质量是否合格字段和逻辑删除
     * @param map
     * @return
     */
    @PostMapping(value = "/api/v1/wms/wmspgridmaterials/updateRmsMaterialSteelDemotion")
    Map<String,Object> updateRmsMaterialSteelDemotion(@RequestBody Map<String,Object> map);

    /**
     * 钢材异地库出库扫描
     * @param map
     * @return
     */
    @PostMapping(value = "/api/v1/wms/wmsoffsitelibaryoutbounds/OutScanResultTag")
    Map<String,Object> OutScanResultTag(@RequestBody(required = false)Map<String,Object> map);

    /**
     * 获取钢材异地库出库数据
     * @param apiId
     * @param pageNum
     * @param pageSize
     * @return
     */
    @RequestMapping(value = "/api/v1/wms/wmsoffsitelibaryoutbounds/getWmsOffsiteLibaryOutboundList",method = RequestMethod.POST)
    Map<String,Object> getWmsOffsiteLibaryOutboundList(@RequestBody(required = false) Map<String,Object> map,
                                                       @RequestParam("pageNum") Integer pageNum,
                                                       @RequestParam("pageSize") Integer pageSize,
                                                       @RequestParam("apiId") Integer apiId,
                                                       @RequestParam("con") String con);

    /**
     * 展示钢材异地库入库实绩表
     * @param apiId
     * @param pageNum
     * @param pageSize
     * @return
     */
    @RequestMapping(value = "/api/v1/wms/wmsoffsitelibraryinbounds/getWmsOffsiteLibaryInboundList",method = RequestMethod.POST)
    Map<String,Object> getWmsOffsiteLibaryInboundList(@RequestBody(required = false) Map<String,Object> map,
                                                      @RequestParam Integer apiId,
                                                      @RequestParam Integer pageNum,
                                                      @RequestParam Integer pageSize,
                                                      @RequestParam String con);

    /**
     *   钢材异地库入库扫描新增异地库入库实绩
     * @param map
     * @return
     */
    @PostMapping(value = "/api/v1/wms/wmsoffsitelibraryinbounds/insertOffsiteLibraryInbound")
    Map<String,Object> insertOffsiteLibraryInbound(@RequestBody(required = false)Map<String,Object> map);

    /**
     *  //展示在途库存列表
     * @param apiId
     * @param pageNum
     * @param pageSize
     * @return
     */
    @RequestMapping(value = "/api/v1/wms/wmspintransitinventorys/getWmspIntransitInventory",method = RequestMethod.POST)
    Map<String,Object> getWmspIntransitInventory(@RequestBody(required = false)Map<String,Object>mapval,
                                                     @RequestParam Integer apiId,
                                                     @RequestParam Integer pageNum,
                                                     @RequestParam Integer pageSize,
                                                     @RequestParam String con);



    /**
     *新增倒库出库实绩
     * @param map
     * @return
     */
    @PostMapping(value = "/api/v1/wms/wmspoutboundresults/insertOutBoundResult")
    Map<String,Object> insertOutBoundResult(@RequestBody(required = false)Map<String,Object> map);

    /**
     * //新增倒库出库扫描实绩
     * @param mapval
     * @return
     */
    @PostMapping(value = "/api/v1/wms/wmspoutboundscanresults/AddWmspOutboundScanResult")
    Map<String,Object> AddWmspOutboundScanResult(@RequestBody(required = false)Map<String,Object> mapval);

    /**
     * 通过下拉框筛选数据
     * @param apiId
     * @param pageNum
     * @param pageSize
     * @param warehouseid
     * @param gradtionNumber
     * @param stackingId
     * @return
     */
    @PostMapping(value = "/api/v1/wms/wmsprestackmakeresults/getWmspRestackMakeResultList")
    Map<String,Object> getWmspRestackMakeResultList(@RequestBody(required = false) Map<String,Object> map,
                                                    @RequestParam Integer apiId,
                                                    @RequestParam Integer pageNum,
                                                    @RequestParam Integer pageSize,
                                                    @RequestParam Integer warehouseid,
                                                    @RequestParam Integer stackingId,
                                                    @RequestParam Integer gradtionNumber
    );

    /**
     *    添加倒垛单实绩
     * @param mapval
     * @return
     */
    @PostMapping(value = "/api/v1/wms/wmsprestackmakeresults/addRestackMakeResult")
    Map<String,Object> addRestackMakeResult(@RequestBody  Map<String,Object> mapval);


    @PostMapping("/api/v1/wms/wmsprestackdrivingresults/updateInstruction")
    Map<String, Object> updateInstruction(@RequestBody Map<String, Object> map);



    /**
     *   删除倒垛单
     * @param resultId
     * @return
     */
    @PostMapping(value = "/api/v1/wms/wmsprestackmakeresults/deleteByResultId/{resultId}")
    Map<String,Object> deleteByResultId(@PathVariable Integer resultId);

    /**
     * 下发倒垛单pc端
     * @param resultId
     * @return
     */
    @PostMapping(value = "/api/v1/wms/wmsprestackmakeresults/dispatchDistrubtionStatus/{resultId}")
    Map<String,Object> dispatchDistrubtionStatus(@PathVariable Integer resultId);

    /**
     * 下拉框获取层次
     * @param warehouseid
     * @param stackingId
     * @return
     */
    @GetMapping(value = "/api/v1/wms/wmsprestackmakeresults/selectGardationNumber")
    Map<String,Object> selectGardationNumber(@RequestParam Integer warehouseid,
                                             @RequestParam  Integer stackingId );

    /**
     *   下拉框获取垛位
     * @param warehouseid
     * @return
     */
    @GetMapping(value = "/api/v1/wms/wmsprestackmakeresults/selectStackingId")
    Map<String,Object> selectStackingId(@RequestParam Integer warehouseid);

    /**
     * 下拉框获取仓库名称
     * @return
     */
    @GetMapping(value = "/api/v1/wms/wmsprestackmakeresults/selectWarehouse")
    Map<String,Object> selectWarehouse();

    /**
     *展示倒垛单
     * @param apiId
     * @param pageNum
     * @param pageSize
     * @param DistrubtionStatus
     * @return
     */
    @PostMapping(value = "/api/v1/wms/wmsprestackmakeresults/selectRestackList")
    Map<String,Object>       selectRestackList     (@RequestBody(required = false) Map<String,Object> map,
                                                    @RequestParam Integer apiId,
                                                    @RequestParam Integer pageNum,
                                                    @RequestParam Integer pageSize,
                                                    @RequestParam Integer DistrubtionStatus
    );
    /**
     *  修改倒垛单
     * @param mapval
     * @return
     */
    @PostMapping(value = "/api/v1/wms/wmsprestackmakeresults/editRestackMakeResult")
    Map<String,Object> editRestackMakeResult(@RequestBody(required = false)Map<String,Object> mapval);
    /**
     *   渲染倒垛后的仓库信息
     * @param resultId
     * @return
     */
    @PostMapping(value = "/api/v1/wms/wmsprestackmakeresults/selectAfterWarehouseByResultId/{resultId}")
    Map<String,Object> selectAfterWarehouseByResultId(@PathVariable Integer resultId);
    /**
     *  渲染倒垛后的垛位信息
     * @param resultId
     * @return
     */
    @PostMapping(value = "/api/v1/wms/wmsprestackmakeresults/selectAfterstackingByResultId/{resultId}")
    Map<String,Object> selectAfterstackingByResultId(@PathVariable Integer resultId);

    /**
     * PDA展示倒垛单
     * @param map
     * @return
     */
    @PostMapping(value = "/api/v1/wms/wmsprestackmakeresults/selectRestackForPDA")
    Map<String,Object> selectRestackForPDA(@RequestBody(required = false)Map<String,Object> map);




    @PostMapping(value = "/api/v1/wms/wmsprestackmakeresults/getRestackInfoByResultId")
    public RESTfulResult getRestackInfoByResultId(@RequestBody(required = false) Map<String,Object> mapVal,
                                                  @RequestParam Integer pageNum,
                                                  @RequestParam Integer pageSize,
                                                  @RequestParam Integer apiId

    );
    /**
     * PDA根据实绩id查找物资信息
     * @param map
     * @return
     */
    @PostMapping(value = "/api/v1/wms/wmsprestackmakeresults/selectMaterialInfoByResultId")
    Map<String,Object> selectMaterialInfoByResultId(@RequestBody(required = false)Map<String,Object> map);
    /**
     * PDA根据仓库id查找倒垛单
     * @param map
     * @return
     */
    @PostMapping(value = "/api/v1/wms/wmsprestackmakeresults/selectRestackByWarehouseId")
    Map<String,Object> selectRestackByWarehouseId(@RequestBody(required = false)Map<String,Object> map);
    /**
     * 库管员扫描吊牌添加扫描实绩
     * @param mal
     * @return
     */

   @PostMapping(value = "/api/v1/wms/wmsprestackscanresults/ScanTagResult")
   Map<String,Object> ScanTagResult(@RequestBody(required = false)Map<String,Object> mal);



    @PostMapping(value = "/api/v1/wms/inboundScanResult/getScanResult")
    Map<String,Object> getScanResult(@RequestBody Map<String,Object> map);
    /**
     * 库管员下发倒垛单
     * @param mapList
     * @return
     */
    @PostMapping(value = "/api/v1/wms/wmsprestackscanresults/Issue")
    Map<String,Object> Issue(@RequestBody(required = false) List<Map<String, Object>> mapList);
    /**
     * 展示退库实绩
     * @param mapValue
     * @param apiId
     * @param pageNum
     * @param pageSize
     * @return
     */
    @RequestMapping(value = "/api/v1/wms/reboundResult/getWmsReboundResult",method = RequestMethod.POST)
    RESTfulResult getWmsReboundResult(@RequestBody(required = false) Map<String, Object> mapValue,
                                      @RequestParam Integer apiId,
                                      @RequestParam Integer pageNum,
                                      @RequestParam Integer pageSize,
                                      @RequestParam String con);


    @RequestMapping(value = "/api/v1/wms/inboundResult/selectScanResultByIboundResultId",method = RequestMethod.POST)
    RESTfulResult selectScanResultByIboundResultId(@RequestBody(required = false) Map<String, Object> mapValue,
                                                   @RequestParam Integer apiId,
                                                   @RequestParam Integer pageNum,
                                                   @RequestParam Integer pageSize,
                                                   @RequestParam Integer inboundId
                                                   );

    //根据物资信息查找暂存的垛位
    @PostMapping("/api/v1/wms/reboundResult/selectInfoByMaterialCode")
    Map<String,Object> selectInfoByMaterialCode(@RequestBody(required = false) Map<String,Object> mal);

    //根据仓库id查询未接收的垛位
    @PostMapping("/api/v1/wms/inboundScanResult/selectStackingInfoByWarehouseId")
    Map<String,Object> selectStackingInfoByWarehouseId(@RequestBody(required = false) Map<String,Object> mal);

    //更新垛位
    @PostMapping("/api/v1/wms/inboundScanResult/updateStatus")
    Map<String,Object> updateStatus(@RequestBody(required = false) Map<String,Object> mal);
    /**
     * 展示倒库实绩
     * @param mapValue
     * @param apiId
     * @param pageNum
     * @param pageSize
     * @return
     */
    @RequestMapping(value = "/api/v1/wms/inboundResult/getWmsIvboundResult",method = RequestMethod.POST)
    RESTfulResult getWmsIvboundResult(@RequestBody(required = false) Map<String, Object> mapValue,
                                      @RequestParam Integer apiId,
                                      @RequestParam Integer pageNum,
                                      @RequestParam Integer pageSize);




    /**
     * 展示倒库物资实绩
     * @param mapValue
     * @param apiId
     * @param pageNum
     * @param pageSize
     * @return
     */
    @RequestMapping(value = "/api/v1/wms/inboundScanResult/getWmsIvboundMaterial",method = RequestMethod.POST)
    RESTfulResult getWmsIvboundMaterial(@RequestBody(required = false) Map<String, Object> mapValue,
                                        @RequestParam Integer apiId,
                                        @RequestParam Integer pageNum,
                                        @RequestParam Integer pageSize);

    /**
     * 库存盘点实绩
     */
    @RequestMapping(value = "/api/v1/wms/inventoryCheck/getInventoryCheck",method = RequestMethod.POST)
    RESTfulResult getInventoryCheck(@RequestBody(required = false) Map<String, Object> mapValue,
                                    @RequestParam Integer apiId,
                                    @RequestParam Integer pageNum,
                                    @RequestParam Integer pageSize,
                                    @RequestParam String con);


    /**
     * 库存结转
     * @param mapValue
     * @param apiId
     * @param pageNum
     * @param pageSize
     * @return
     */
    @RequestMapping(value = "/api/v1/wms/inventoryClose/getInventoryClose",method = RequestMethod.POST)
    RESTfulResult getInventoryClose(@RequestBody(required = false) Map<String, Object> mapValue,
                                    @RequestParam Integer apiId,
                                    @RequestParam Integer pageNum,
                                    @RequestParam Integer pageSize,
                                    @RequestParam String con);

    /**
     * 收发存报表
     */
    @RequestMapping(value = "/api/v1/wms/sendReceive/getSendReceive",method = RequestMethod.POST)
    RESTfulResult getSendReceive(@RequestBody(required = false) Map<String, Object> mapValue,
                                 @RequestParam Integer apiId,
                                 @RequestParam Integer pageNum,
                                 @RequestParam Integer pageSize,
                                 @RequestParam String con);

    /**
     * 展示未下发吊钢工扫描吊牌实绩
     * @return
     */
    @PostMapping(value = "/api/v1/wms/inboundScanResult/getTagResult")
    Map<String,Object>  getTagResult();

    /**
     * 展示已入库吊钢工扫描吊牌实绩
     * @return
     */
    @RequestMapping(value = "/api/v1/wms/inboundScanResult/getIssuedTagResult",method = RequestMethod.POST)
    Map<String,Object>  getIssuedTagResult();

    /**
     * 展示异常入库吊钢工扫描吊牌实绩
     * @return
     */
    @RequestMapping(value = "/api/v1/wms/inboundScanResult/getIssuedTagNoResult",method = RequestMethod.POST)
    Map<String,Object>  getIssuedTagNoResult();

    /**
     * 展示退库已下发吊钢工扫描吊牌实绩
     * @return
     */
    @RequestMapping(value = "/api/v1/wms/reboundResult/getReIssuedResult",method = RequestMethod.POST)
    Map<String,Object>  getIssuedResult();

    /**
     * 展示未下发退库吊钢工扫描吊牌实绩
     * @return
     */
    @RequestMapping(value = "/api/v1/wms/reboundResult/getReTagResult",method = RequestMethod.POST)
    Map<String,Object>  getReTagResult();

    /**
     * 展示已倒库入库吊钢工扫描吊牌实绩
     * @return
     */
    @RequestMapping(value = "/api/v1/wms/inboundScanResult/getIvIssuedResult",method = RequestMethod.POST)
    Map<String,Object>  getIvIssuedResult();

    /**
     * 展示倒库入库未下发退库吊钢工扫描吊牌实绩
     * @return
     */
    @RequestMapping(value = "/api/v1/wms/inboundScanResult/getIvTagResult",method = RequestMethod.POST)
    Map<String,Object>  getIvTagResult();

    /**
     * 新增入库实绩,返回选择垛位
     * @param mapList
     * @return
     */
    @RequestMapping(value = "/api/v1/wms/inboundResult/insertInboundResult",method = RequestMethod.POST)
    Map<String,Object> insertInboundResult(@RequestBody List<Map<String, Object>> mapList);

    /**
     * 新增退库实绩,返回选择垛位
     * @param mapList
     * @return
     */
    @RequestMapping(value = "/api/v1/wms/reboundResult/insertReboundResult",method = RequestMethod.POST)
    String insertReboundResult(@RequestBody List<Map<String, Object>> mapList);

    /**
     * 新增倒库入库实绩,返回选择垛位
     * @param mapList
     * @return
     */
    @RequestMapping(value = "/api/v1/wms/inboundResult/insertIvboundResult",method = RequestMethod.POST)
    String insertIvboundResult(@RequestBody List<Map<String, Object>> mapList);
    /**
     * 行车工查看垛位
     * @param DriverId
     * @return
     */
    @RequestMapping(value = "/api/v1/wms/inboundStack/getInboundStack",method = RequestMethod.POST)
    Integer  getInboundStack(@RequestParam Integer DriverId);


    /**
     * 新增库存盘点
     * @param map
     * @return
     */
    @RequestMapping(value = "/api/v1/wms/inboundStack/getInboundStack",method = RequestMethod.POST)
    Map<String,Object>  inventoryCheck(@RequestBody Map<String,Object> map);


    /**
     * 新增入库扫描实绩
     * @param map
     * @return
     */
    @RequestMapping(value = "/api/v1/wms/inboundScanResult/insertResult",method = RequestMethod.POST)
    Map<String, Object> insertResult(@RequestBody  Map<String, Object> map);


    /**
     * 新增退库扫描实绩
     * @param map
     * @return
     */
    @RequestMapping(value = "/api/v1/wms/inboundScanResult/insertReboundScanResult",method = RequestMethod.POST)
    Map<String, Object> insertReboundScanResult(@RequestBody  Map<String, Object> map);


    /**
     *新增倒库入库扫描实绩
     * @param map
     * @return
     */
    @RequestMapping(value = "/api/v1/wms/inboundScanResult/insertIvboundScanResult",method = RequestMethod.POST)
    Map<String, Object> insertIvboundScanResult(@RequestBody  Map<String, Object> map);
    /**
     * 根据实绩id查找物资是否稽核完成
     *
     */
    @PostMapping(value = "/api/vi/wms/wmsprestackscanresults/selectMaterialSteelIdByReusltId")
    Map<String, Object> selectMaterialSteelIdByReusltId(@RequestBody(required = false) Map<String, Object> map);

    @RequestMapping(value = "/api/v1/wms/inboundResult/selectScanResultByIboundResultId",method = RequestMethod.POST)
    RESTfulResult selectScanResultByIboundResultId(@RequestBody(required = false) Map<String, Object> mapValue,
                                                   @RequestParam Integer apiId,
                                                   @RequestParam Integer pageNum,
                                                   @RequestParam Integer pageSize);

    @RequestMapping(value = "/api/v1/wms/wmspivboundmakeresult/getIvboundMakeResultList",method = RequestMethod.POST)
    RESTfulResult getIvboundMakeResultList(@RequestBody(required = false)Map<String, Object> mapValue,
                                           @RequestParam Integer pageNum,
                                           @RequestParam Integer pageSize,
                                           @RequestParam Integer apiId,
                                           @RequestParam String con);

    @PostMapping(value = "/api/v1/wms/wmspivboundmakeresult/addIvboundMakeResult")
    Map<String, Object> addIvboundMakeResult(@RequestBody Map<String, Object> mapValue);

    @PostMapping(value = "/api/v1/wms/wmspivboundmakeresult/deleteIvboundMakeResult/{resultId}")
    Map<String, Object> deleteIvboundMakeResult(@PathVariable("resultId") Integer resultId);

    @PostMapping(value = "/api/v1/wms/wmspivboundmakeresult/selectIvboundMakeResult/{resultId}")
    List<Map<String, Object>> selectIvboundMakeResult(@PathVariable("resultId") Integer resultId);

    @PostMapping(value = "/api/v1/wms/wmspivboundmakeresult/updateIvboundMakeResult")
    Map<String, Object> updateIvboundMakeResult(@RequestBody Map<String, Object> mapValue);


    //下发给行车工
    @PostMapping("/api/v1/wms/reboundResult/IssueToCrane")
    Map<String,Object> IssueToCrane(@RequestBody Map<String, Object> map);

}