<?php


namespace Meibuyu\Rpc\Service\Interfaces\OutsideFactory;


use App\Services\Production\ProductionExceptionService;

interface FactoryServiceInterface
{


    /**
     * 打印工艺单信息 返回导出地址
     * @param $craftInfo
     * @return String
     */
    public function productCraftPrint($craftInfo) ;

    /**
     * 打印发货单
     * @param $deliveryNo 发货单号
     * @return mixed
     */
    public function downDeliveryRecord($deliveryNo);
    /**
     * 获取对应的工厂信息
     * @param array $factoryIds
     * @param array|string[] $columns
     * @return mixed
     */
    public function getFactories(array $factoryIds = [], array $columns = ['*']);

    /**
     * 根据筛选条件获取对应的工厂信息
     * @param array $filters 筛选条件
     * @param array|string[] $columns 查询字段
     * @return mixed
     */
    public function getFactoriesByFilters(array $filters = [], array $columns = ['*']);

    /**
     * 生产端留言投递到工厂端订单表
     * @param array $production_no  生产单号
     * @return mixed
     */
    public function toProductOrderMessage(array $post);

    /**
     *  工厂列表
     * @param string  $id 工厂id
     * @return array  $list
     */
    public function factoryList();

    /**
     *  子工厂列表
     * @return array  $list
     */
    public function  childFactoryList($id);


    /**
     *  工厂树状列表
     * @return array  $list
     */
    public function treeFactoryList();


    /**
     * 获取分派详情通过来源订单号
     * @param $originalProductionNos
     * @return array|mixed
     * @author Liu lu
     * date 2022-09-19
     */
    public function getApportionInfoListByNos($originalProductionNos);


    /**
     * Notes: 分派订单取消
     * User: carlos
     * @param string $type cancel|delete
     * DateTime: 2022/9/21 14:24
     */
    public function cancelOrder($orderNo, $type = 'cancel');

    /**
     * Notes: 获取订单信息
     * User: carlos
     * DateTime: 2022/9/22 16:21
     * @param $orderNo
     */
    public function getProductionOrder($orderNo, $columns =['*'],$with=[]);



    /**
     * 获取供应链获取工厂端生产对账单
     * @param $searchConditions 搜索条件
     * @param bool $isExport 是否导出
     * @return array|\Hyperf\Contract\LengthAwarePaginatorInterface|mixed
     * @author Liu lu
     * date 2022-09-27
     */
    public function getProductionAccountStatement($searchConditions,$isExport=false);


    /**
     * 供应链获取工厂端生产对账单数量
     * @param $searchConditions 搜索条件
     * @return int
     * @author Liu lu
     */
    public function getProductionAccountCount($searchConditions);


    /**
     * Notes: 生产订单完结
     * User: carlos
     * DateTime: 2022/9/29 9:52
     */
    public function finishProductionOrder($orderSn);

    /**
     * Notes: 确认收货
     * User: carlos
     * DateTime: 2022/11/21 14:14
     */
    public function confirmDelivery($params);


    /**
     * Notes: 通过最小订单号批量获取原始订单号
     * @param $orderNoArr
     * @param string[] $columns
     * @param $with[] $with
     * @return array
     */
    public function getProductionListByOrderNo($orderNoArr, $columns =['*'],$with=[]);

    /**
     * Notes: 少货处理
     * User: carlos
     * DateTime: 2022/11/21 19:03
     */
    public function shortageProcess($delivery_no, $shortageProduct);


    /**
     * Notes: 退回返修
     * User: carlos
     * DateTime: 2022/11/23 11:43
     * @param $params
     */
    public function repairReturn($delivery_no, $repairProducts);

    /**
     * Notes: 处理到仓返修异常
     * User: carlos
     * DateTime: 2022/11/27 9:23
     */
    public function processWarehouseRepair($params);



    /**
     * 推送供应商数据到工厂系统
     * @author Liu lu
     * @param $post demo
        {
        `name` '工厂名称',
        `abbreviation`  '简称',
        `code`  '代码',
        `manager_id`  '管理者id',
        `phone` '电话',
        `address`  '地址',
        `score`  '平均评分',
        `creator_id` '创建人id',
        `type_id`  '类型',
        `remark` '备注',
        `can_invoice`  '能否开发票,默认为 0,可以开票为 1',
        `status`  '状态 1:正常 0:停用',
        `is_transfer`  '能否转派 1:能 0:不能'
        }
     * @return int 主键id
     */
    public function pushSupplyDataToFactory($post);

    /**
     * Notes: 发货状态
     * User: carlos
     * DateTime: 2022/12/5 10:08
     */
    public function updateDeliveryStatus($params);


    /***
     * 账单标记结算
     * 发货表与返修出库表标记已结算
     * @param $params
     * @author Liu lu
     * date 2022-12-19
     */
    public function billMarkSettled($params);


    /**
     * 生产通知单下载
     * @param $originProductionNo
     * @author Liu lu
     * date 2023-02-02
     */
    public function productionNoticeDownload($originProductionNo);

    /**
     * 获取工艺单地址
     * @param $deliveryNo 发货单号
     * @author Jack
     * date 2023-02-17
     */
    public function getCraftDocAddressByDeliveryNo($deliveryNo);


    /**
     * 通过名称获取工厂信息
     * @param $params
     * @return mixed
     */
    public function getFactoryInfoByNames($params);


    /**
     * 通过供应链生产单号批量获取工厂端分派生产单号数据
     * @param array $productionNo
     * @param string[] $columns
     * @param array $with
     * @return array|mixed|null
     * @author Liu lu
     * date 2023-04-26
     */
    public function getApportionListByProductionNo(array $productionNo,$columns=['*'],$with=[]);


    /**
     * 判断是否为工厂的sku
     * @param $params
     */
    public function isFactoryWithSku($params);


    /**
     * 按sku或按工厂
     * @param $params
     * @return array
     */
    public function getFactoryStockList($params);



    /**
     * 通过sku查询子sku可用库存和生产中库存
     * @param $skuList
     * @return array
     */
    public function UsefulStockAndProducingStockBySku($skuList);



    /**
     * 供应链工厂自主备货看板
     */
    public function selfFactoryStock();


    /**
     * 通过sku查询主sku可用库存和生产中库存
     * @param $skuList
     * @return array
     */
    public function getSkuStockBySku($skuList);

    /**
     * Notes: 锁定库存
     * User: carlos
     * DateTime: 2023/5/17 14:18
     * @param $params
     * @return bool
     */
    public function lockStockCount($params);

    /**
     * Notes: 锁定工厂库存
     * User: carlos
     * DateTime: 2023/5/17 14:19
     */
    public function lockFactoryStockCount($params);

    /**
     * Notes: 解锁库存
     * User: carlos
     * DateTime: 2023/5/17 15:35
     * @param $params
     */
    public function unlockStockCount($params);

    /**
     * Notes: 更新清点数量
     * User: carlos
     * DateTime: 2023/6/12 14:42
     * @param $params
     * @return mixed
     */
    public function updateCheckDeliveryCount($params);

    /**
     * Notes: 异常销毁工厂更新
     * User: carlos
     * DateTime: 2023/6/15 10:02
     * @param $params
     */
    public function updateExceptionDestroy($params);


    /**
     * 查询是否为分派订单信息,返回跟单员、订单类型、合作方式
     * @param $orderNoArr
     * @param int $type  //type = 1生产订单、 type = 2服装对账单结算
     * @return array
     */
    public function getProductionApportionInfo($orderNoArr,$type = 1);
}