<?php
/**
 * Created by 2020/4/28.
 * User: Joneq
 * Info: 2020/4/28
 * Time: 下午4:35
 */

namespace App\Http\Model\Logic;


use App\Http\Model\BoxModel;
use App\Http\Model\GoodsModel;
use App\Http\Model\OutStoreDetailModel;
use App\Http\Model\OutStoreModel;
use App\Http\Model\PalletModel;
use App\Http\Model\PickTaskDetailModel;
use App\Http\Model\PickTaskModel;

class PackCheckLogic
{
    static public $statusCn = [
        1=>'未打包复核',
        2=>'部份打包复核',
        3=>'完全打包复核',
    ];
    static public function getStatus($status)
    {
        if (empty($status)){
            return '暂无该种状态';
        }
        return array_get(self::$statusCn,$status,'状态异常!!');
    }

    //获取出库仓号
    static public function getPackCheckSn()
    {
        //CK+年后两位+月两位+日两位+10000
        $beginTime = strtotime(date('Y-m-d'));
        $endTime = $beginTime +86400;

        $todayNum = $outStoreSn = OutStoreModel::where('add_time','>=',$beginTime)->where('add_time','<=',$endTime)->count('out_store_id');

        if (empty($todayNum)){
            $todayNum = 10000;
        }else{
            $todayNum += 100001;
        }

        return 'DB'.substr(date('Ymd'),2,6).$todayNum;
    }


    public function right_pack_check($data)
    {
        //获取所有的out_store_detail_id
        $goodsType = substr($data['goods_name_box_id'],0,2);
        $pickTaskId = PickTaskModel::where('pick_task_sn',$data['pick_task_sn'])->value('pick_task_id');
        switch ($goodsType){
            case 'KB':
                $outStoreDetailIdArr = PalletModel::getWhereObj([])->where('pallet_sn',$data['goods_name_box_id'])->value('pallet_id');
                $outStoreDetailIdArr = OutStoreDetailModel::where('pick_task_id',$pickTaskId)->where('pallet_id',$outStoreDetailIdArr)->pluck('out_store_detail_id');
                break;
            case 'XB':
                $outStoreDetailIdArr = BoxModel::where('box_sn',$data['goods_name_box_id'])->value('box_id');
                $outStoreDetailIdArr = OutStoreDetailModel::where('pick_task_id',$pickTaskId)->where('box_id',$outStoreDetailIdArr)->pluck('out_store_detail_id');
                break;
            case 'FH':
                $fh = substr($data['goods_name_box_id'],2);
                $outStoreDetailIdArr = [$fh];
                break;
            default:
                $outStoreDetailIdArr = OutStoreDetailModel::where('goods_name',$data['goods_name_box_id'])->pluck('out_store_detail_id');
                break;
        }

        if (empty($outStoreDetailIdArr)){
            throw new \Exception('该拣货任务下没找到该型号');
        }

        //判断是否是未复核状态
        $packStatus = PickTaskDetailModel::whereIn('out_store_detail_id',$outStoreDetailIdArr)->value('pack_status');
        if ($packStatus !== 1 ){
            throw new \Exception('该型号没有在未复核状态中');
        }
        PickTaskDetailModel::whereIn('out_store_detail_id',$outStoreDetailIdArr)->update(['pack_status'=>2]);
        return [];
    }


    public function left_pack_check($data)
    {
        //获取所有的out_store_detail_id
        $goodsType = substr($data['goods_name_box_id'],0,2);
        $pickTaskId = PickTaskModel::where('pick_task_sn',$data['pick_task_sn'])->value('pick_task_id');
        switch ($goodsType){
            case 'KB':
                $outStoreDetailIdArr = PalletModel::getWhereObj([])->where('pallet_sn',$data['goods_name_box_id'])->value('pallet_id');
                $outStoreDetailIdArr = OutStoreDetailModel::where('pick_task_id',$pickTaskId)->where('pallet_id',$outStoreDetailIdArr)->pluck('out_store_detail_id');
                break;
            case 'XB':
                $outStoreDetailIdArr = BoxModel::where('box_sn',$data['goods_name_box_id'])->value('box_id');
                $outStoreDetailIdArr = OutStoreDetailModel::where('pick_task_id',$pickTaskId)->where('box_id',$outStoreDetailIdArr)->pluck('out_store_detail_id');
                break;
            case 'FH':
                $fh = substr($data['goods_name_box_id'],2);
                $outStoreDetailIdArr = [$fh];
                break;
            default:
                $outStoreDetailIdArr = OutStoreDetailModel::where('goods_name',$data['goods_name_box_id'])->pluck('out_store_detail_id');
                break;
        }

        if (empty($outStoreDetailIdArr)){
            throw new \Exception('该拣货任务下没找到该型号');
        }

        //判断是否是未复核状态
        $packStatus = PickTaskDetailModel::whereIn('out_store_detail_id',$outStoreDetailIdArr)->value('pack_status');
        if ($packStatus !== 2 ){
            throw new \Exception('该型号没有在复核状态中');
        }
        PickTaskDetailModel::whereIn('out_store_detail_id',$outStoreDetailIdArr)->update(['pack_status'=>1]);
        return [];
    }
}