Jelajahi Sumber

语音播放优化

Zhouzhendong 6 tahun lalu
induk
melakukan
ebe3f379ff

+ 3 - 1
app/Depository.php

@@ -6,5 +6,7 @@ use Illuminate\Database\Eloquent\Model;
 
 class Depository extends Model
 {
-    //
+    protected $fillable=[
+        'name','code'
+    ];
 }

+ 4 - 2
app/Http/Controllers/PackageController.php

@@ -86,7 +86,9 @@ class PackageController extends Controller
         $weight=$request->input('weight');
         $batch_number=$request->input('batch_number');
         $paper_box_id=$request->input('paper_box_id');
-        $package=Package::where('logistic_number',$logistic_number)->first();
+        $package=null;
+        if($batch_number)$package=Package::where('batch_number',$batch_number)->first();
+        if($logistic_number)$package=Package::where('logistic_number',$logistic_number)->first();
         if (!$package && !$logistic_number)return redirect('package/create')->with('successError','录入失败!没有填写快递单号!');
         if ($package){
             $accomplishToWMS=new \App\Http\Controllers\Api\thirdPart\flux\PackageController();
@@ -115,7 +117,7 @@ class PackageController extends Controller
         }
         $package->save();
         event(new WeighedEvent($package));
-        return redirect('package/create')->with('successTip','新记录“'.$logistic_number.'”录入成功');
+        return redirect('package/create')->with('successTip','操作成功');
     }
 
     /**

+ 69 - 10
app/Http/Controllers/StoreController.php

@@ -2,7 +2,12 @@
 
 namespace App\Http\Controllers;
 
+use App\Depository;
+use App\Owner;
 use App\Store;
+use App\StoreItems;
+use App\Warehouse;
+use App\WMSReflectReceive;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Validator;
 
@@ -16,7 +21,7 @@ class StoreController extends Controller
     public function index()
     {
         $stores=Store::orderBy('id','DESC')->paginate(50);
-        return view('store.fast.index',['stores'=>$stores]);
+        return view('store.index',['stores'=>$stores]);
     }
 
     /**
@@ -38,18 +43,72 @@ class StoreController extends Controller
     public function store(Request $request)
     {
         $this->validator($request);
-        $store=Store::with('storeItems')->where('asn_code',$request->input('asn_code'))->first();
-        if (!$store)return redirect('store/fast/create')->with('successError','ASN编号不存在!');
-        $store->status='已入库';
+        $WMSReflectReceive=WMSReflectReceive::with('skus')->where('ASNNO',$request->input('asn_code'))->first();
+        if (!$WMSReflectReceive)return redirect('store/fast/create')->with('successError','ASN编号不存在!');
+        $warehouse=Warehouse::where('code',$WMSReflectReceive->WAREHOUSEID)->first();
+        if (!$warehouse&&$WMSReflectReceive->WAREHOUSEID){
+            $warehouse=new Warehouse([
+                'name'=>$WMSReflectReceive->WAREHOUSEID,
+                'code'=>$WMSReflectReceive->WAREHOUSEID
+            ]);
+            $warehouse->save();
+        }
+        $owner=Owner::where('code',$WMSReflectReceive->CUSTOMERID)->first();
+        if (!$owner&&$WMSReflectReceive->CUSTOMERID){
+            $owner=new Warehouse([
+                'name'=>$WMSReflectReceive->CUSTOMERID,
+                'code'=>$WMSReflectReceive->CUSTOMERID
+            ]);
+            $owner->save();
+        }
+        $store=new Store([
+            'asn_code'=>$WMSReflectReceive->ASNNO,
+            'warehouse_id'=>$warehouse->id,
+            'owner_id'=>$owner->id,
+            'stored_method'=>'快速入库',
+            'status'=>'未入库',
+            'remark'=>$WMSReflectReceive->NOTES,
+        ]);
         $store->save();
-        if ($store->storeItems){
-            $quality=$request->input('quality');
-            $store->storeItems->each(function ($storeItem)use($quality){
-                $storeItem->status='已入库';
-                $storeItem->quality=$quality;
+        if ($WMSReflectReceive->skus){
+            foreach ($WMSReflectReceive->skus as $sku){
+                $depository=Depository::where('code',$WMSReflectReceive->LOTATT05)->first();
+                if (!$depository){
+                    $depository=new Depository([
+                        'name'=>$sku->LOTATT05,
+                        'code'=>$sku->LOTATT05
+                    ]);
+                    $depository->save();
+                }
+                $storeItem=new StoreItems([
+                    'store_id'=>$store->id,
+                    'asn_line_code'=>$sku->ASNLINENO,
+                    'name'=>$sku->SKUDESCRC,
+                    'sku'=>$sku->SKU,
+                    'barcode'=>$sku->ALTERNATE_SKU1,
+                    'depository_id'=>$depository->id,
+                    'quality'=>$request->input('quality'),
+                    'status'=>'未入库',
+                ]);
                 $storeItem->save();
-            });
+            }
+        }
+        $store=Store::with('storeItems')->where('asn_code',$request->input('asn_code'))->first();
+        $storeApi=new \App\Http\Controllers\Api\thirdPart\flux\StoreController();
+        $result=$storeApi->accomplishToWMS($store);
+        if ($result){
+            $store->status='已入库';
+            $store->save();
+            if ($store->storeItems){
+                $quality=$request->input('quality');
+                $store->storeItems->each(function ($storeItem)use($quality){
+                    $storeItem->status='已入库';
+                    $storeItem->quality=$quality;
+                    $storeItem->save();
+                });
+            }
         }
+        //TODO 回传WMS未作测试
     }
 
     /**

+ 6 - 1
app/Http/Controllers/StoreItemsController.php

@@ -2,6 +2,7 @@
 
 namespace App\Http\Controllers;
 
+use App\Package;
 use App\StoreItems;
 use Illuminate\Http\Request;
 
@@ -14,7 +15,11 @@ class StoreItemsController extends Controller
      */
     public function index()
     {
-        //
+        $storeItems=StoreItems::orderBy('id','DESC')->paginate(50);
+        $pickedPackage=Package::where('id',null)->select('id','delivery_number','status')->first();
+        dd(
+        );
+        return view('store.storeItem.index',['storeItems',$storeItems]);
     }
 
     /**

+ 164 - 0
app/Http/Controllers/api/thirdPart/flux/StoreController.php

@@ -0,0 +1,164 @@
+<?php
+
+namespace App\Http\Controllers\Api\thirdPart\flux;
+
+use App\Http\Controllers\Controller;
+use App\RejectedBillItem;
+use App\Store;
+use App\WMSReflectReceive;
+use App\WMSReflectReceiveSku;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Validator;
+use Zttp\Zttp;
+
+class StoreController extends Controller
+{
+
+    /**
+     * 入库回传给WMS
+     * @param Store $store
+     * @return bool
+     */
+    public function accomplishToWMS(Store $store)
+    {
+        $wmsReceiveds=WMSReflectReceive::where('ASNREFERENCE3',$store['asn_code'])
+            ->where('is_uploaded',0)->get();
+        if($wmsReceiveds->isEmpty()){
+            (new Controller())->log(__METHOD__,'error_'.__FUNCTION__,'没有WMS入库单');
+            return false;
+        }
+        $items=$store->items()->get();
+        $amountsItem=(function()use($items){
+            $result=[];
+            $items->each(function($item)use(&$result){
+                $result[$item['id']]= $item['amount'];
+            });
+            return $result;
+        })();
+        $success=true;
+        $wmsReceiveds->each(function ($wmsReceived)use(&$store,&$amountsItem,$items,&$success){
+            if(!$store && $store['is_loaded']!=0)return;
+
+            $wmsSkus=$wmsReceived->skus()->get();
+            $orderNumberCode=$wmsReceived['ASNREFERENCE1']??$store['order_number'];
+            $amountsSku=(function()use($wmsSkus){
+                $result=[];
+                $wmsSkus->each(function($sku)use(&$result){
+                    $result[$sku['id']]= $sku['EXPECTEDQTY_EACH'];
+                });
+                return $result;
+            })();
+            $skuStrList=[];
+            $customerCode=$store->owner()->first()['code'];
+            $wmsSkus->each(function(WMSReflectReceiveSku $sku)use(&$items,&$skuList,&$amountsItem,&$amountsSku,&$skuStrList,$wmsReceived,$customerCode){
+                $items->each(function(RejectedBillItem $item)use(&$sku,&$amountsItem,&$amountsSku,&$skuStrList,$wmsReceived,$customerCode){
+                    if($item['barcode_goods']!=$sku['ALTERNATE_SKU1'])return;
+                    if($amountsItem[$item['id']]==0||$amountsSku[$sku['id']]==0)return;
+                    $uploadingAmount=(function()use(&$item,&$sku,&$amountsItem,&$amountsSku){
+                        if($amountsItem[$item['id']]>$amountsSku[$sku['id']]){
+                            $amountsItem[$item['id']]-=$amountsSku[$sku['id']];
+                            $amount= $amountsSku[$sku['id']];
+                            $amountsSku[$sku['id']]=0;
+                            return $amount;
+                        }
+                        if($amountsItem[$item['id']]<$amountsSku[$sku['id']]){
+                            $amount=$amountsItem[$item['id']];
+                            $amountsSku[$sku['id']]-=$amount;
+                            $amountsItem[$item['id']]=0;
+                            return $amount;
+                        }
+                        $amount=$amountsItem[$item['id']];
+                        $amountsItem[$item['id']]=0;
+                        $amountsSku[$sku['id']]=0;
+                        return $amount;
+                    })();
+                    if($item['is_loaded']=='已入库'){return;}
+                    $STATUS=$item['id_quality_label']==1?'ZP':'CC';
+                    $STATUS_code=$item['id_quality_label']==1?'01':'02';
+                    $skuStr="
+                        {
+                            \"ORDERNUMBERCODE\": \"{$wmsReceived['ASNNO']}\",
+                            \"ASNLINENO\": \"{$sku['ASNLINENO']}\",
+                            \"SKUCODE\": \"{$sku['SKU']}\",
+                            \"QUANTITY\": \"{$uploadingAmount}\",
+                            \"LOTATT04\": \"{$sku['LOTATT04']}\",
+                            \"LOTATT05\": \"{$sku['LOTATT05']}\",
+                            \"STATUS\": \"{$STATUS}\",
+                            \"PRODUCTION DATE\": \"{$item['made_at']}\",
+                            \"EXPIRATION DATE\": \"{$item['validity_at']}\",
+                            \"USERDEFINE1\": \"{$customerCode}{$STATUS_code}\",
+                            \"USERDEFINE2\": \"\",
+                            \"USERDEFINE3\": \"\",
+                            \"UNIQUE_CODE_LIST\": [".
+//                                {
+//                                    \"ORDERNUMBERCODE\": \"{$wmsReceived['ASNNO']}\",
+//                                    \"SKUCODE\": \"{$sku['SKU']}\",
+//                                    \"STATUS\": \"{$STATUS}\",
+//                                    \"PRODUCTION DATE\": \"{$item['made_at']}\",
+//                                    \"EXPIRATION DATE\": \"{$item['validity_at']}\",
+//                                    \"LOTATT05\": \"{$sku['LOTATT05']}\",
+//                                    \"UNIQUE_CODE\": \"\"
+//                                }
+                            "]
+                        }
+                    ";
+                    $skuStrList[]=$skuStr;
+                });
+            });
+            if(count($skuStrList)==0)return;
+            $skuStrList = implode(',',$skuStrList);
+            $json="
+                {
+                    \"request\": [
+                        {
+                            \"ORDERNUMBERCODE\": \"{$wmsReceived['ASNNO']}\",
+                            \"CUSTOMERID\": \"{$customerCode}\",
+                            \"ASNTYPE\": \"{$wmsReceived['ASNTYPE']}\",
+                            \"ASNREFERENCE1\": \"{$orderNumberCode}\",
+                            \"ADDWHO\": \"WCS\",
+                            \"USERDEFINE1\": \"\",
+                            \"USERDEFINE2\": \"\",
+                            \"USERDEFINE3\": \"\",
+                            \"SKU_LIST\": [{$skuStrList}]
+                        }
+                    ]
+                }
+        ";
+
+            $sendingJson = json_decode($json,true);
+            $url=url(config('api.flux.receive.new'));
+            $response = Zttp::post($url, $sendingJson);
+            $noIssues=true;
+            $json = $response->json();
+            (new Controller())->log(__METHOD__,__FUNCTION__,$response->body().'|'.json_encode($sendingJson));
+            if(!$json||!isset($json['Response'])||!$json['Response']['return']['returnFlag']=='1'){
+                $noIssues=false;
+            }
+            if($json&&isset($json['Response'])){
+                if($json['Response']['return']['returnFlag']=='2'){
+                    return true;
+                }
+                if(isset($json['Response']['return']['returnDesc'])&&strpos($json['Response']['return']['returnDesc'],'唯一约束')!==false){
+                    (new Controller())->log(__METHOD__,'error_'.__FUNCTION__,$response->body().'|'.json_encode($sendingJson));
+                    return true;
+                }
+                if(isset($json['Response']['return']['errordescr'])&&strpos($json['Response']['return']['errordescr'],'已完成')!==false){
+                    (new Controller())->log(__METHOD__,'error_'.__FUNCTION__,$response->body().'|'.json_encode($sendingJson));
+                    return true;
+                }
+            }
+            if($noIssues&&$json['Response']['return']['returnFlag']=='1'){
+                $wmsReceived['is_uploaded']=1;
+                $wmsReceived->save();
+                return true;
+            }else{
+                $success=false;
+                (new Controller())->log(__METHOD__,'error_'.__FUNCTION__,$response->body().'|'.json_encode($sendingJson));
+            }
+        });
+
+
+        return $success;
+    }
+
+}

+ 2 - 3
app/Http/Controllers/api/thirdPart/weight/PackageController.php

@@ -43,8 +43,7 @@ class PackageController extends Controller
             $measuringMachineStatus=new MeasuringMachine();
             $measuringMachineStatus->changeStatus($measuringMachine);
         }
-        $measuringMachine->touch();
-        MeasuringMachineQueue::dispatch($measuringMachine)->delay(\Carbon\Carbon::now()->addMinutes(30));
+        MeasuringMachineQueue::dispatch($measuringMachine)->delay(Carbon::now()->addMinutes(30));
 
         $package=Package::where('logistic_number',$request['barcode'])->first();
         if (isset($request['length'])&&isset($request['width'])&&isset($request['height'])){
@@ -131,7 +130,7 @@ class PackageController extends Controller
             if ($logistic)$createPackage->logistic_id=$logistic->id;
             if ($createPackage->save()){
                 $measuringMachine->touch();
-                MeasuringMachineQueue::dispatch($measuringMachine)->delay(\Carbon\Carbon::now()->addMinutes(30));
+                MeasuringMachineQueue::dispatch($measuringMachine)->delay(Carbon::now()->addMinutes(30));
                 MarkPackageExcepted::dispatch($createPackage)->delay(Carbon::now()->addMinutes(1440));
                 event(new WeighedEvent($createPackage));
                 $response=["msg"=>"保存成功",

+ 10 - 1
app/Jobs/MarkPackageExcepted.php

@@ -2,6 +2,7 @@
 
 namespace App\Jobs;
 
+use App\Http\Controllers\Controller;
 use App\Package;
 use Illuminate\Bus\Queueable;
 use Illuminate\Queue\SerializesModels;
@@ -32,8 +33,16 @@ class MarkPackageExcepted implements ShouldQueue
      */
     public function handle()
     {
+        $controller= new Controller();
+        if (!$this->package){
+            $controller->log(__METHOD__,'error_'.__FUNCTION__,"队列传递的package为空",null);
+            return;
+        }
         $pickedPackage=Package::where('id',$this->package->id)->select('id','delivery_number','status')->first();
-        if(!$pickedPackage)return;
+        if(!$pickedPackage){
+            $controller->log(__METHOD__,'error_'.__FUNCTION__,"队列查询的package为空",null);
+            return;
+        }
         if (!$pickedPackage->delivery_number){
             $pickedPackage->status="下发异常";
             $pickedPackage->save();

+ 26 - 1
app/StoreItems.php

@@ -6,5 +6,30 @@ use Illuminate\Database\Eloquent\Model;
 
 class StoreItems extends Model
 {
-    //
+    protected $fillable=[
+        'store_id','asn_line_code','name',
+        'sku','barcode','depository_id','amount','quality','status',
+    ];
+    protected $appends=[
+        'store_asn_code',
+        'depository_name'
+    ];
+
+    public function depository(){
+        return $this->belongsTo('App\Depository','depository_id','id');
+    }
+    public function store(){
+        return $this->belongsTo('App\Store','store_id','id');
+    }
+
+
+    public function getStoreASNCodeAttribute()
+    {
+        return $this['store']?$this['store']['asn_code']:null;
+    }
+    public function getDepositoryNameAttribute()
+    {
+        return $this['depository']?$this['depository']['name']:null;
+    }
+
 }

+ 1 - 0
app/library/baidu-api-speech/lib/2a7552bdd1b678c303ad53645baeafce

@@ -0,0 +1 @@
+{"refresh_token":"25.4d53cf00633b3d4a1aac4042f9eece5b.315360000.1899260149.282335-18688250","expires_in":2592000,"session_key":"9mzdCKZyPT8dnHgqKTa2IKAbjeiTI6dKyllds7VEsgOWDGIjY2BEgLmOazFfJmWYYTC0\/RVFMWlS0krsTPpuSdMxopSCHw==","access_token":"24.3bc112d85964e45cab8f8b33c75ac42d.2592000.1586492149.282335-18688250","scope":"audio_voice_assistant_get brain_enhanced_asr audio_tts_post public brain_all_scope picchain_test_picchain_api_scope wise_adapt lebo_resource_base lightservice_public hetu_basic lightcms_map_poi kaidian_kaidian ApsMisTest_Test\u6743\u9650 vis-classify_flower lpq_\u5f00\u653e cop_helloScope ApsMis_fangdi_permission smartapp_snsapi_base iop_autocar oauth_tp_app smartapp_smart_game_openapi oauth_sessionkey smartapp_swanid_verify smartapp_opensource_openapi smartapp_opensource_recapi qatest_scope1 fake_face_detect_\u5f00\u653eScope vis-ocr_\u865a\u62df\u4eba\u7269\u52a9\u7406 idl-video_\u865a\u62df\u4eba\u7269\u52a9\u7406","session_secret":"7ed83fac7de4c020d1f1627700b9ab71","time":1583900148,"is_cloud_user":false}

+ 3 - 0
laravel-echo-server.lock

@@ -0,0 +1,3 @@
+{
+	"process": 12812
+}

+ 1 - 5
resources/views/store/fast/menuFast.blade.php

@@ -2,11 +2,7 @@
     <div class="container-fluid">
         <div class="card menu-third" style="background: #f9f0f0;transform: scale(0.95)">
             <ul class="nav nav-pills">
-                @can('测量设备')
-                    <li class="nav-item">
-                        <a class="nav-link text-dark" href="{{url('store/fast')}}" :class="{active:isActive('',3)}">记录</a>
-                    </li> @endcan
-                @can('纸箱')
+                @can('入库管理-快速入库-录入')
                     <li class="nav-item">
                         <a class="nav-link text-dark" href="{{url('store/fast/create')}}" :class="{active:isActive('create',3)}">录入</a>
                     </li> @endcan

+ 30 - 5
resources/views/store/fast/index.blade.php → resources/views/store/index.blade.php

@@ -4,7 +4,6 @@
 @section('content')
     <span id="nav2">
         @component('store.menu')@endcomponent
-        @component('store.fast.menuFast')@endcomponent
     </span>
     <div class="d-none" id="fast">
         <div class="container-fluid mt-3">
@@ -91,11 +90,11 @@
             <div class="">
                 <table class="table table-striped table-sm text-nowrap table-hover">
                     <tr>
-                        {{--<th>
+                        <th>
                             <label for="all">
                                 <input id="all" type="checkbox" @click="checkAll($event)">全选
                             </label>
-                        </th>--}}
+                        </th>
                         <th>序号</th>
                         <th>ID</th>
                         <th>ASN编号</th>
@@ -107,9 +106,9 @@
                         <th>生成时间</th>
                     </tr>
                     <tr v-for="(store,i) in stores">
-                        {{--<td>
+                        <td>
                             <input class="checkItem" type="checkbox" :value="store.id" v-model="checkData">
-                        </td>--}}
+                        </td>
                         <td>@{{ i+1  }}</td>
                         <td class="text-muted">@{{store.id}}</td>
                         <td>@{{store.asn_code}}</td>
@@ -138,12 +137,38 @@
                 {!! $store !!},
                 @endforeach
                 ],
+                checkData:[]
             },
             mounted:function(){
                 /*this.initInputs();
                 $(".tooltipTarget").tooltip({'trigger':'hover'});*/
                 $('#fast').removeClass('d-none');
             },
+            watch:{
+                checkData:{
+                    handler(){
+                        if (this.checkData.length === this.stores.length){
+                            document.querySelector('#all').checked = true;
+                        }else {
+                            document.querySelector('#all').checked = false;
+                        }
+                    },
+                    deep:true
+                }
+            },
+            methods:{
+                checkAll(e){
+                    if (e.target.checked){
+                        this.stores.forEach((el,i)=>{
+                            if (this.checkData.indexOf(el.id) == '-1'){
+                                this.checkData.push(el.id);
+                            }
+                        });
+                    }else {
+                        this.checkData = [];
+                    }
+                },
+            }
         });
     </script>
 @endsection

+ 9 - 1
resources/views/store/menu.blade.php

@@ -2,9 +2,17 @@
 <div class="container-fluid mt-3" id="nav2">
     <div class="card">
         <ul class="nav nav-pills">
+            @can('仓库管理')
+                <li class="nav-item">
+                    <a class="nav-link" href="{{url('store/fast')}}" :class="{active:isActive('',3)}">记录</a>
+                </li> @endcan
+            @can('仓库管理')
+                <li class="nav-item">
+                    <a class="nav-link" href="{{url('store/storeItem')}}" :class="{active:isActive('storeItem',2)}">子项</a>
+                </li> @endcan
             @can('入库管理-快速入库')
                 <li class="nav-item">
-                    <a class="nav-link" href="{{url('store/fast')}}" :class="{active:isActive('fast',2)}">快速入库</a>
+                    <a class="nav-link"  href="{{url('store/fast/create')}}" :class="{active:isActive('create',3)}">快速入库</a>
                 </li> @endcan
         </ul>
     </div>

+ 181 - 0
resources/views/store/storeItem/index.blade.php

@@ -0,0 +1,181 @@
+@extends('layouts.app')
+@section('title')称重管理@endsection
+
+@section('content')
+    <span id="nav2">
+        @component('store.menu')@endcomponent
+        @component('store.storeItem.menu')@endcomponent
+    </span>
+    <div class="d-none" id="item">
+        <div class="container-fluid mt-3">
+            <div class="">
+                <div>
+ {{--                   <form  method="GET" action="{{url('store/')}}" style="margin-top: 1%" id="optionSubmit">
+                        <table class="table  table-sm table-bordered text-nowrap ">
+                            <tr v-if="isBeingFilterConditions">
+                                <td colspan="10"><div class="col" style="padding:0">
+                                        <a  href="{{url('store')}}"><span class="btn btn-warning text-dark">清除过滤条件</span></a>
+                                    </div></td>
+                            </tr>
+                            <tr>
+                                <td>
+                                    <span class="text-muted">每页显示记录:</span>
+                                </td>
+                                <td  colspan="9">
+                                    <select name="paginate" v-model="filterData.paginate" class="tooltipTarget form-control-sm" style="vertical-align: middle" @change="setPaginate">
+                                        <option value="50">50行</option>
+                                        <option value="100">100行</option>
+                                        <option value="200">200行</option>
+                                        <option value="500">500行</option>
+                                        <option value="1000">1000行</option>
+                                    </select></td>
+                            </tr>
+                            <tr>
+                                <td rowspan="2">
+                                    <span class="text-muted">根据条件过滤:</span>
+                                </td>
+                                <td >
+                                    <label class="form-inline" style="width: 350px">时间:
+                                        <input style="width: 150px" name="created_at_start" type="date" v-model="filterData.created_at_start" class="form-control-sm">
+                                        <input style="width: 150px" type="date" name="created_at_end" v-model="filterData.created_at_end" class="form-control-sm">
+                                    </label>
+                                </td>
+                                --}}{{--<td > <label class="form-inline" style="width:200px;margin-left: 2%">货主:
+                                        <input class="form-control-sm" style="width: 80px" placeholder="搜索定位" @input="owner_seek">&nbsp;&nbsp;&nbsp;
+                                        <select name="owner_id" v-model="filterData.owner_id" class="form-control-sm"  @change="setOwner">
+                                            <option >    </option>
+                                            @foreach($owners as $owner)
+                                                <option value="{{$owner->id}}">{{$owner->name}}</option>
+                                            @endforeach
+                                        </select></label><input hidden type="submit" value="kk"></td>--}}{{--
+                                <td>
+                                    <label for="">客户:</label>
+                                    <input type="text" class="form-control-sm tooltipTarget" placeholder="查找"
+                                           style="width:70px" @input="owner_seek"
+                                           title="输入关键词快速定位下拉列表,回车确定">
+                                    <select name="owner_id" v-model="filterData.owner_id" @change="setOwner" class="form-control-sm tooltipTarget">
+                                        <option >    </option>
+                                        @foreach($owners as $owner)
+                                            <option value="{{$owner->id}}">{{$owner->name}}</option>
+                                        @endforeach
+                                    </select>
+                                    <input hidden type="submit" value="kk">
+                                </td>
+                                <td > <label class="form-inline" style="width:250px;margin-left: 2%">快递单号:
+                                        <input type="text" name="logistic_number" class="form-control-sm  " v-model="filterData.logistic_number" style="vertical-align: middle"></label></td>
+                                <td > <label  class="form-inline" style="width:250px;margin-left: 2%">发货单号:
+                                        <input type="text" name="delivery_number" class="form-control-sm  " v-model="filterData.delivery_number" style="vertical-align: middle"></label></td>
+                                <td colspan="5"></td>
+                            </tr>
+                            <tr>
+                                <td > <label class="form-inline" >波次号:
+                                        <input type="text" name="batch_number" class="form-control-sm  " v-model="filterData.batch_number" style="vertical-align: middle"></label></td>
+                            </tr>
+                            <tr>
+                                <td>
+                                    <span class="text-muted">操作选定记录:</span>
+                                </td>
+                                <td colspan="9">
+                                    <select @change="storeExport($event)" :class="[checkData>0?'btn-dark':'btn-outline-dark']"  class=" tooltipTarget form-control-sm" style=" vertical-align: middle"
+                                             title="导出所有页将会以搜索条件得到的过滤结果,将其全部记录(每一页)导出">
+                                        <option >导出Excel</option>
+                                        <option value="1">导出勾选内容</option>
+                                        <option value="2">导出所有页</option>
+                                    </select>
+                                    <input hidden type="submit" value="kk">
+                                </td>
+                            </tr>
+                        </table>
+                    </form>--}}
+                </div>
+            <div class="">
+                <table class="table table-striped table-sm text-nowrap table-hover">
+                    <tr>
+                        <th>
+                            <label for="all">
+                                <input id="all" type="checkbox" @click="checkAll($event)">全选
+                            </label>
+                        </th>
+                        <th>序号</th>
+                        <th>ID</th>
+                        <th>ASN编号</th>
+                        <th>ASN行号</th>
+                        <th>产品名</th>
+                        <th>单位</th>
+                        <th>条码</th>
+                        <th>属性仓</th>
+                        <th>总计</th>
+                        <th>质量</th>
+                        <th>状态</th>
+                        <th>创建时间</th>
+                    </tr>
+                    <tr v-for="(storeItem,i) in storeItems">
+                        <td>
+                            <input class="checkItem" type="checkbox" :value="storeItem.id" v-model="checkData">
+                        </td>
+                        <td>@{{ i+1  }}</td>
+                        <td class="text-muted">@{{storeItem.id}}</td>
+                        <td>@{{storeItem.store_asn_code}}</td>
+                        <td>@{{storeItem.asn_line_code}}</td>
+                        <td class="text-muted">@{{storeItem.name}}</td>
+                        <td class="text-muted">@{{storeItem.sku}}</td>
+                        <td class="text-muted">@{{storeItem.barcode}}</td>
+                        <td>@{{storeItem.depository_name}}</td>
+                        <td class="text-muted">@{{storeItem.amount}}</td>
+                        <td class="text-muted">@{{storeItem.quality}}</td>
+                        <td class="text-muted">@{{storeItem.status}}</td>
+                        <td class="text-muted">@{{storeItem.created_at}}</td>
+                    </tr>
+                </table>
+                {{$storeItems->links()}}
+            </div>
+        </div>
+    </div>
+    </div>
+@endsection
+
+@section('lastScript')
+    <script>
+        new Vue({
+            el:'#item',
+            data:{
+                storeItems:[
+                @foreach($storeItems as $storeItem)
+                {!! $storeItem !!},
+                @endforeach
+                ],
+                checkData:[]
+            },
+            mounted:function(){
+                /*this.initInputs();
+                $(".tooltipTarget").tooltip({'trigger':'hover'});*/
+                $('#item').removeClass('d-none');
+            },
+            watch:{
+                checkData:{
+                    handler(){
+                        if (this.checkData.length === this.storeItems.length){
+                            document.querySelector('#all').checked = true;
+                        }else {
+                            document.querySelector('#all').checked = false;
+                        }
+                    },
+                    deep:true
+                }
+            },
+            methods:{
+                checkAll(e){
+                    if (e.target.checked){
+                        this.storeItems.forEach((el,i)=>{
+                            if (this.checkData.indexOf(el.id) == '-1'){
+                                this.checkData.push(el.id);
+                            }
+                        });
+                    }else {
+                        this.checkData = [];
+                    }
+                },
+            }
+        });
+    </script>
+@endsection

+ 12 - 0
resources/views/store/storeItem/menu.blade.php

@@ -0,0 +1,12 @@
+<div id="nav2">
+    <div class="container-fluid">
+        <div class="card menu-third" style="background: #f9f0f0;transform: scale(0.95)">
+            <ul class="nav nav-pills">
+                @can('仓库管理')
+                    <li class="nav-item">
+                        <a class="nav-link text-dark" href="{{url('store/storeItem')}}" :class="{active:isActive('',3)}">查询</a>
+                    </li> @endcan
+            </ul>
+        </div>
+    </div>
+</div>

+ 33 - 15
resources/views/weight/measureMonitor/index.blade.php

@@ -8,7 +8,6 @@
             <section class="py-5">
                 <div class="row">
                     <div class="col-lg-12 mb-4">
-                        <audio id="audio" src="" autoplay></audio>
                         <div class="card">
                             <div class="card-header">
                                 <div class="form-inline">
@@ -95,8 +94,16 @@
                 otherMachine:'nav-item',
                 onColor:{color:'green'},
                 offColor:{color:'red'},
+                logisticAudioURL:{},
+                initAmount:1,
+                amount:3,
             },
             mounted(){
+                let body = $("#list");
+                for(let i=1;i<=this.amount;i++){
+                    let audioTag=$('<audio id="audio'+i+'" src="" autoplay></audio>');
+                    body.append(audioTag);
+                }
                 let _this=this;
                 _this.measuringMachines.forEach(function(machine){
                     _this.measuringMachinesIndex[machine.name]=machine;
@@ -106,7 +113,12 @@
                 Echo.channel('{{$laravelEchoPrefix}}package').listen('WeighedEvent',(e)=>{
                     let package=e.package;
                     let _this=this;
-                    let audio=document.getElementById('audio');
+                    let audio=document.getElementById("audio"+_this.initAmount);
+                    if (_this.initAmount==_this.amount){
+                        _this.initAmount=1;
+                    }else{
+                        _this.initAmount=_this.initAmount+1;
+                    }
                     if (package&& package.measuringMachine_name===_this.package.measuringMachine){
                         if (package.id===_this.package.id){
                             _this.package.measuringMachine_status=package.measuringMachine_status;
@@ -115,20 +127,26 @@
                             tempTip.showSuccess('暂无新数据');
                         }else {
                             _this.updateData(_this,package);
-                            axios.post('/package/measureMonitor/speech',{logistic:package.logistic_name})
-                                .then(function (response) {
-                                    if (response.data){
-                                        audio.src=response.data;
-                                        audio.play();
-                                    }else {
+                            if (_this.logisticAudioURL[package.logistic_number]){
+                                audio.src=_this.logisticAudioURL[package.logistic_number];
+                                audio.play();
+                            }else {
+                                axios.post('/package/measureMonitor/speech',{logistic:package.logistic_name})
+                                    .then(function (response) {
+                                        if (response.data){
+                                            _this.logisticAudioURL[_this.package.logistic_number]=response.data;
+                                            audio.src=response.data;
+                                            audio.play();
+                                        }else {
+                                            tempTip.setDuration(4000);
+                                            tempTip.showSuccess('文件名不规范!');
+                                        }
+                                    })
+                                    .catch(function (err) {
                                         tempTip.setDuration(4000);
-                                        tempTip.showSuccess('文件名不规范!');
-                                    }
-                                })
-                                .catch(function (err) {
-                                    tempTip.setDuration(4000);
-                                    tempTip.showSuccess('语音合成发生错误:'+err);
-                                });
+                                        tempTip.showSuccess('语音合成发生错误:'+err);
+                                    });
+                            }
                             tempTip.setDuration(4000);
                             tempTip.showSuccess('刷新成功!');
                         }

+ 1 - 0
routes/web.php

@@ -100,4 +100,5 @@ Route::get('package/weightExcepted/export/{id}','WeighExceptedController@export'
 Route::resource('package','PackageController');
 
 Route::resource('store/fast','StoreController');
+Route::resource('store/storeItem','storeItemsController');
 

+ 6 - 1
tests/webApi/test.http

@@ -8,9 +8,14 @@
 POST http://bswas/api/thirdPart/weight/new
 Content-Type: application/json
 
-{"barcode":"testA7","weight":"5","id":"564151","key":"2C7FACD3AFC3FFE547FC54CDA076A25D","time":"2020-2-26 14:17:07"}
+{"barcode":"t5","weight":"5","id":"test","key":"test","time":"2020-2-26 14:17:07"}
 
 ###
+POST http://bswas/api/thirdPart/weight/new
+Content-Type: application/json
+
+{"barcode":"t1","weight":"5","id":"test","key":"test","time":"2020-2-26 14:17:07"}
+###
 
 
 POST http://106.14.155.246:19192/datahub/FluxBSJsonApi/TASK