Zhouzhendong 6 лет назад
Родитель
Сommit
64db4b4926

+ 23 - 0
app/Http/Controllers/PackageController.php

@@ -4,11 +4,13 @@ namespace App\Http\Controllers;
 
 use App\Events\WeighedEvent;
 use App\Exports\WaybillExport;
+use App\Logistic;
 use App\Owner;
 use App\Package;
 use App\PaperBox;
 use Carbon\Carbon;
 use Illuminate\Http\Request;
+use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Gate;
 use Illuminate\Support\Facades\Validator;
 use Maatwebsite\Excel\Facades\Excel;
@@ -120,6 +122,27 @@ class PackageController extends Controller
         return redirect('package/create')->with('successTip','操作成功');
     }
 
+    public function statistics(Request $request){
+        $packages=Package::select(DB::raw('owner_id,logistic_id,COUNT(logistic_id) AS count'));
+        if($request->input('owner_id')){
+            $packages=$packages->where('owner_id',$request->input('owner_id'));
+        }
+        if($request->input('logistic_id')){
+            $packages=$packages->where('logistic_id',$request->input('logistic_id'));
+        }
+        if($request->input('date_start')){
+            $packages=$packages->where('created_at','<=',$request->input('date_start'));
+        }
+        if($request->input('date_end')){
+            $packages=$packages->where('created_at','>=',$request->input('date_end'));
+        }
+
+        $packages=$packages->groupBy(['owner_id','logistic_id'])->get();
+        $owners=Owner::get();
+        $logistics=Logistic::get();
+        return view('weight.package.statistics',["packages"=>$packages,'owners'=>$owners,'logistics'=>$logistics]);
+    }
+
     /**
      * Display the specified resource.
      *

+ 3 - 2
app/Http/Controllers/StoreController.php

@@ -72,7 +72,7 @@ class StoreController extends Controller
         $store->save();
         if ($WMSReflectReceive->skus){
             foreach ($WMSReflectReceive->skus as $sku){
-                $depository=Depository::where('code',$WMSReflectReceive->LOTATT05)->first();
+                $depository=Depository::where('code',$sku->LOTATT05)->first();
                 if (!$depository){
                     $depository=new Depository([
                         'name'=>$sku->LOTATT05,
@@ -158,10 +158,11 @@ class StoreController extends Controller
 
     public function validator(Request $request){
         $validator=Validator::make($request->input(),[
-            'asn_code'=>['required'],
+            'asn_code'=>['required','unique:stores,asn_code'],
             'quality'=>['required']
         ],[
             'required'=>':attribute 为必填项',
+            'unique'=>':attribute 已存在',
         ],[
             'asn_code'=>'ASN编号',
             'quality'=>'货物类型'

+ 3 - 0
resources/views/weight/menu.blade.php

@@ -8,6 +8,9 @@
                 </li>
                 <li class="nav-item">
                     <a class="nav-link" href="{{url('package/measureMonitor')}}" :class="{active:isActive('measureMonitor',2)}">设备</a>
+                </li>
+                <li class="nav-item">
+                    <a class="nav-link" href="{{url('package/statistics')}}" :class="{active:isActive('statistics',2)}">统计</a>
                 </li>@endcan
                 @can('称重管理-录入')
                 <li class="nav-item">

+ 207 - 0
resources/views/weight/package/statistics.blade.php

@@ -0,0 +1,207 @@
+
+@extends('layouts.app')
+@section('title')入库管理@endsection
+
+@section('content')
+    <span id="nav2">
+        @component('weight.menu')@endcomponent
+    </span>
+    <div class="d-none" id="statistics">
+        <div class="container-fluid mt-3">
+            <div class="">
+                <div>
+                    <form  method="GET" action="{{url('package/statistics')}}" 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('package/statistics')}}"><span class="btn btn-warning text-dark">清除过滤条件</span></a>
+                                    </div></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="date_start" type="date" v-model="filterData.created_at_start" class="form-control-sm">
+                                        <input style="width: 150px" type="date" name="date_end" v-model="filterData.created_at_end" class="form-control-sm">
+                                    </label>
+                                </td>
+                                <td class="form-inline">
+                                    <label >选择货主:</label>
+                                    <div style="max-height: 90px;width:100px;overflow-y: scroll;border: solid 1px #ddd;border-radius:5px;opacity:0.5;text-align: center;transform:scale(0.9)"  v-if="ownersCopy.length>0">
+                                        <ul class="list-group">
+                                            <li class="tooltipTarget" title="双击添加货主"   v-for="ownerCopy in ownersCopy"
+                                                @dblclick="selectedOwner(ownerCopy)" :style="ownerCopy.style ? selectedOwnerStyle :''" style="list-style: none"><a >@{{ ownerCopy.name }}</a></li>
+                                        </ul>
+                                    </div>
+                                </td>
+                                <td>
+                                    <label for="">物流公司:</label>
+                                    <input type="text" class="form-control-sm tooltipTarget" placeholder="查找"
+                                           style="width:70px" @input="logistic_seek"
+                                           title="输入关键词快速定位下拉列表,回车确定">
+                                    <select name="logistic_seek" v-model="filterData.owner_id"  class="form-control-sm tooltipTarget">
+                                        <option >    </option>
+                                        @foreach($logistics as $logistic)
+                                            <option value="{{$logistic->id}}">{{$logistic->name}}</option>
+                                        @endforeach
+                                    </select>
+                                    <input hidden type="submit" value="kk">
+                                </td>
+                        </table>
+                    </form>
+                </div>
+            <div class="">
+                <table class="table table-striped table-sm text-nowrap table-hover">
+                    <tr >
+                        <th>货主</th>
+                        <th v-for="logisticCopy in logisticsCopy">@{{ logisticCopy.name }}</th>
+                        <th>总计</th>
+                    </tr>
+                    <tr v-for="ownerModel in ownersModel">
+                        <th>@{{ ownerModel.name }}</th>
+                        <td v-for="logisticCopy in logisticsCopy">@{{ ownerModel.logistics[logisticCopy.name] }}</td>
+                        <td>@{{ ownerModel.sum }}</td>
+                    </tr>
+                </table>
+            </div>
+        </div>
+    </div>
+    </div>
+@endsection
+
+@section('lastScript')
+    <style>
+        li a:hover{background-color: #4aa0e6;display: block;cursor:pointer}
+    </style>
+    <script>
+        new Vue({
+            el:"#statistics",
+            data:{
+                packages:[
+                    @foreach($packages as $package)
+                    {owner_id:'{{$package->owner_id}}',logistic_id:'{{$package->logistic_id}}',count:'{{$package->count}}',
+                    owner_name:'',logistic_name:''},
+                    @endforeach
+                ],
+                owners:{
+                    @foreach($owners as $owner)
+                    '{{$owner->id}}' : "{{$owner->name}}",
+                    @endforeach
+                },
+                logistics:{
+                    @foreach($logistics as $logistic)
+                    '{{$logistic->id}}' : "{{$logistic->name}}",
+                    @endforeach
+                },
+                ownersCopy:[
+                    @foreach($owners as $owner)
+                    {id:'{{$owner->id}}',name:"{{$owner->name}}",style:false},
+                    @endforeach
+                ],
+                logisticsCopy:[],
+                ownersModel:[],
+                filterData:
+                    {owner_id:'',logistic_id:'',date_start:'',date_end:''},
+                selectedOwners:[],
+                selectedLogistics:[],
+                selectedOwnerStyle:'background-color: #a1cbef',
+            },
+            computed:{
+                isBeingFilterConditions:function(){
+
+                    for(let key in this.filterData){
+                        if(this.filterData[key]){
+                            return true
+                        }
+                    }
+                    return false;
+                },
+
+            },
+            mounted:function(){
+                $(".tooltipTarget").tooltip({'trigger':'hover'});
+                $('#statistics').removeClass('d-none');
+                let _this=this;
+                let owners=this.owners;
+                let logistics=this.logistics;
+                this.packages.forEach(function (package){
+                    if (owners[package.owner_id]){
+                        package.owner_name=owners[package.owner_id];
+                    }
+                    if (logistics[package.logistic_id]){
+                        package.logistic_name=logistics[package.logistic_id];
+                        let isLogistic=_this.logisticsCopy.every(function (logisticCopy) {
+                            if (logisticCopy.name==logistics[package.logistic_id]){
+                                return  false;
+                            }
+                            return true;
+                        });
+                        if (isLogistic){
+                            _this.logisticsCopy.push({'id':package.logistic_id,'name':package.logistic_name});
+                        }
+                    }
+                    let isEvery=true;
+                    if (_this.ownersModel) {
+                        isEvery=_this.ownersModel.every(function (ownerModel) {
+                            if (ownerModel.name==package.owner_name){
+                                ownerModel.logistics[package.logistic_name]=package.count;
+                                ownerModel.sum=parseInt(ownerModel.sum)+parseInt(package.count);
+                                return false;
+                            }
+                            return true;
+                        });
+                    }
+                    if (isEvery){
+                        let obj={};
+                        obj[package.logistic_name]=package.count;
+                        _this.ownersModel.push({'id':package.owner_id,'name':package.owner_name,'sum':package.count,'logistics':obj,});
+                    }
+                });
+            },
+            methods: {
+                owner_seek:function (e) {
+                    let _this=this;
+                    let $val=e.target.value;
+                    if($val==='')_this.filterData.owner_id='';
+                    else{
+                        @foreach($owners as $owner)
+                        if ("{{ $owner->name }}".includes($val)){
+                            _this.filterData.owner_id="{{ $owner->id }}";
+                        }
+                        @endforeach
+                    }
+                },
+                selectedOwner:function (e) {
+                    let selectedOwners=this.selectedOwners;
+                    let sign = true;
+                    for (let i=0;i<selectedOwners.length;i++){
+                        if (selectedOwners[i]==e.id){
+                            selectedOwners.splice(i,1);
+                            this.ownersCopy.every(function (ownerCopy) {
+                                if (ownerCopy.id==e.id) {
+                                    ownerCopy.style=false;
+                                    return false;
+                                }
+                                return  true;
+                            });
+                            sign=false;
+                            break;
+                        }
+                    }
+                    if (sign) {
+                        this.selectedOwners.push(e.id);
+                        this.ownersCopy.every(function (ownerCopy) {
+                            if (ownerCopy.id==e.id) {
+                                ownerCopy.style=true;
+                                return false;
+                            }
+                            return  true;
+                        });
+                    }
+                },
+            },
+        });
+    </script>
+@endsection

+ 2 - 1
routes/web.php

@@ -93,6 +93,7 @@ Route::any('package/measureMonitor/speech','MeasureMonitorController@speech');
 Route::post('package/measureMonitor/data','MeasureMonitorController@data');
 Route::resource('package/measureMonitor','MeasureMonitorController');
 Route::get('package/export/{id}','PackageController@export');
+Route::get('package/statistics','PackageController@statistics');
 Route::get('package/relating', function () {return view('weight.menuWeight');});
 Route::get('package/weightExcepted/indexCreate','WeighExceptedController@indexCreate');
 Route::get('package/weightExcepted/indexIssued','WeighExceptedController@indexIssued');
@@ -101,5 +102,5 @@ Route::resource('package','PackageController');
 
 Route::get('store','StoreController@index');
 Route::resource('store/fast','StoreController');
-Route::resource('store/storeItem','storeItemsController');
+Route::resource('store/storeItem','StoreItemsController');