Jelajahi Sumber

问题件 工作量

ajun 5 tahun lalu
induk
melakukan
62e40d2a51

+ 30 - 0
app/Http/Controllers/OrderIssuePerformanceController.php

@@ -2,11 +2,23 @@
 
 namespace App\Http\Controllers;
 
+use App\Owner;
+use App\Services\OrderIssuePerformanceService;
+use App\Services\OrderIssueWorkLoadService;
 use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\Gate;
 
 class OrderIssuePerformanceController extends Controller
 {
+
+    public function __construct()
+    {
+        app()->singleton('orderIssueWorkLoadService',OrderIssueWorkLoadService::class);
+        app()->singleton('service',OrderIssuePerformanceService::class);
+
+    }
+
     public function index(Request $request){
         if (!Gate::allows('订单管理-问题件-绩效统计')) {
             return redirect(url('/'));
@@ -16,8 +28,26 @@ class OrderIssuePerformanceController extends Controller
         $options = ['timeFrame'=>$request->input('timeFrame'),'create_start'=>$request->input('create_start')??'','create_end'=>$request->input('create_end')??''];
         return view('order.issue.performance',compact('performance','options'));
     }
+
     public function export(Request $request){
         $service  = app('orderIssuePerformanceService');
         return $service->exportPerformance($request->all());
     }
+
+    public function workLoadPage(Request $request){
+        if (!Gate::allows('订单管理-问题件-工作量')) {
+            return redirect(url('/'));
+        }
+        $workLoadService = app('orderIssueWorkLoadService');
+        $workLoads = $workLoadService->paginate($request->all());
+        $user = Auth::user();
+        $owner_ids = $user ? $user->getPermittingOwnerIdsAttribute() : [];
+        $owners = Owner::where('id',$owner_ids)->get();
+        $users = $workLoadService->getUsers();
+        return view('order/issue/workload',compact('workLoads','owners','users'));
+    }
+
+    public function exportWorkLoad(Request $request){
+
+    }
 }

+ 19 - 0
app/OrderIssue.php

@@ -17,6 +17,9 @@ class OrderIssue extends Model
 
     protected $appends = [
         'secondLogisticNumber',
+        'createLog',
+        'endLog',
+        'processingTime'
     ];
 
     public function order(){
@@ -50,6 +53,22 @@ class OrderIssue extends Model
     public function getSecondLogisticNumberAttribute(){
         return $this['secondOrder']['code'] ??'';
     }
+    public function getCreateLogAttribute(){
+        return $this->logs->where('type','创建')->first();
+    }
+    public function getEndLogAttribute(){
+        return $this->logs->where('type','完结')->first();
+    }
+    public function getProcessingTimeAttribute(){
+        $createLogs = $this->getCreateLogAttribute();
+        $endLogs =$this->getEndLogAttribute();
+        if( ($createLogs ?? false) && ($endLogs ?? false)){
+            $time = date_diff($createLogs->create_at,$endLogs->create_at);
+            return $time->format('H天I小时');
+        }
+        return null;
+    }
+
 
     public function delete()
     {

+ 8 - 3
app/Services/OrderIssuePerformanceService.php

@@ -9,6 +9,7 @@ use App\User;
 use App\Exports\Export;
 use Illuminate\Pagination\LengthAwarePaginator;
 use Illuminate\Pagination\Paginator;
+use Illuminate\Support\Facades\Auth;
 use Maatwebsite\Excel\Facades\Excel;
 
 
@@ -20,13 +21,17 @@ class OrderIssuePerformanceService
         $owner_id = $queryParam['owner_id'] ?? '';
         $timeFrame = $queryParam['timeFrame'] ?? '';
         unset($queryParam['owner_id'], $queryParam['user_id'], $queryParam['timeFrame'],$queryParam['_token']);
+        $user = Auth::user();
+        $owner_ids = $user ? $user->getPermittingOwnerIdsAttribute() : [];
         $orderIssueProcessLog = OrderIssueProcessLog::query()->with(['user' => function ($query) use ($user_id) {
             if ($user_id) {
                 $query->where('id', $user_id);
             }
-        }, 'orderIssue.order.owner' => function ($query) use ($owner_id) {
-            if ($owner_id) {
-                $query->where('id', $owner_id);
+        }, 'orderIssue.order.owner' => function ($query) use ($owner_id,$owner_ids) {
+            if ($owner_id && in_array($owner_id,$owner_ids) ) {
+                 $query->where('id', $owner_id);
+            }else{
+                $query->whereIn('id',$owner_ids);
             }
         }]);
         $columnQueryRules = [

+ 52 - 0
app/Services/OrderIssueWorkLoadService.php

@@ -0,0 +1,52 @@
+<?php
+
+namespace App\Services;
+
+use App\OrderIssue;
+use App\OrderIssueProcessLog;
+use App\Services\common\QueryService;
+use App\User;
+use Illuminate\Support\Facades\Auth;
+
+Class OrderIssueWorkLoadService
+{
+    public function getQuery(array $queryParam){
+        $user = Auth::user();
+        $owner_ids = $user ? $user->getPermittingOwnerIdsAttribute() : [];
+        $query = OrderIssue::with(['log.user'=>function($query) use (&$queryParam){
+            if($queryParam['create_user_id'] ?? false){
+                $query->where('type','创建')->where('user_id',$queryParam['create_user_id']);
+            }
+            if($queryParam['end_user_id'] ?? false){
+                $query->where('type','完结')->where('user_id',$queryParam['end_user_id']);
+            }
+        },'order'])->whereHas('order',function($query) use (&$queryParam,$owner_ids) {
+            if($queryParam['client_no'] ?? false){
+                $query->whereHas('client_no',$queryParam['client_no']);
+            }
+            if($queryParam['owner_id'] ?? false && in_array($queryParam['owner_id'],$owner_ids)){
+                $query->whereHas('owner_id',$queryParam['owner_id']);
+            }else{
+                $query->whereIn('owner_id',$owner_ids);
+            }
+        });
+        unset($queryParam['create_user_id'],$queryParam['end_user_id'],$queryParam['client_no'],$queryParam['owner_id']);
+        $columnQueryRules = [
+            'create_start' => ['alias' => 'created_at', 'startDate' => ' 00:00:00'],
+            'create_end' => ['alias' => 'created_at', 'endDate' => ' 23:59:59'],
+            'order_issue_id'=>['alias'=>'id']
+        ];
+        $query  = app(QueryService::class)->query($queryParam, $query, $columnQueryRules);
+        return $query;
+    }
+
+    public function paginate(array $params){
+        return $this->getQuery($params)->paginate($params['paginate'] ?? 50);
+    }
+
+    public function getUsers(){
+        $arr = OrderIssueProcessLog::all()->groupBy('user_id');
+        $user_ids = array_keys($arr->toArray());
+        return  User::whereIn('id',$user_ids)->get();
+    }
+}

+ 36 - 0
database/migrations/2020_08_31_115443_add_order_issue_work_load.php

@@ -0,0 +1,36 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class AddOrderIssueWorkLoad extends Migration
+{
+    protected $authNames = [ "订单管理-问题件-工作量"];
+
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        //
+        foreach ($this->authNames as $authName){
+            \App\Authority::create(['name'=>$authName,'alias_name'=>$authName,'permission'=>'允许']);
+        }
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        //
+        foreach ($this->authNames as $authName){
+            \App\Authority::where(['name'=>$authName,'alias_name'=>$authName])->delete();
+        }
+    }
+}

+ 5 - 0
resources/views/order/issue/menu.blade.php

@@ -19,6 +19,11 @@
                         <a class="nav-link" href="{{url('order/issue/excelImport')}}" :class="{active:isActive('excelImport',3)}">导入</a>
                     </li>
                 @endcan
+                @can('订单管理-问题件-工作量')
+                    <li class="nav-item" >
+                        <a class="nav-link" href="{{url('orderIssuePerformance/index')}}" :class="{active:isActive('orderIssuePerformance',1)}">工作量</a>
+                    </li>
+                @endcan
                 @can('订单管理-问题件-绩效统计')
                     <li class="nav-item" >
                         <a class="nav-link" href="{{url('orderIssuePerformance/index')}}" :class="{active:isActive('orderIssuePerformance',1)}">绩效统计</a>

+ 61 - 2
resources/views/order/issue/workload.blade.php

@@ -3,20 +3,79 @@
 
 @section('content')
     @component("order.issue.menu")@endcomponent
-    <div class="container-fluid" id="wave_div">
+    <div class="container-fluid d-none" id="workLoad_div">
         <div style="min-width: 2000px;">
             <div id="form_div" style="min-width: 1950px;" class="bg-white"></div>
+            <div class="form-inline mt-1 ">
+                <span class="dropdown">
+                    <button type="button"
+                            class="btn btn-outline-dark btn-sm form-control-sm dropdown-toggle tooltipTarget"
+                            :class="[checkData.length>0?'btn-dark text-light':'']"
+                            data-toggle="dropdown" title="导出所有页将会以搜索条件得到的筛选结果,将其全部记录(每一页)导出">导出Excel
+                    </button>
+                    <div class="dropdown-menu">
+                        <a class="dropdown-item" @click="exportSelected()" href="javascript:">导出勾选内容</a>
+                        <a class="dropdown-item" @click="exportAll()" href="javascript:">导出所有页</a>
+                    </div>
+                </span>
+            </div>
             <table class="table table-sm table-striped table-bordered table-hover card-body mt-2 ">
+                <tr>
+                    <th>
+                        <input type="checkbox" id="all" >
+                    </th>
+                    <th>序号</th>
+                    <th>问题件ID</th>
+                    <th>创建时间</th>
+                    <th>完结时间</th>
+                    <th>创建人</th>
+                    <th>结束人</th>
+                    <th>客户</th>
+                    <th>快递单号</th>
+                    <th>处理时效</th>
+                </tr>
 
-            </table>
+                <tr v-for=""></tr>
 
+            </table>
         </div>
     </div>
 
 @endsection
 @section('lastScript')
     <script type="text/javascript" src="{{asset('js/queryForm/queryForm.js')}}"></script>
+    <script type="text/javascript" src="{{asset('js/queryForm/export200818a.js')}}"></script>
+
     <script>
+        let workLoadVue = new Vue({
+            el:"#workLoad_div",
+            data:{
+                workLoads:{!! $workLoads->toJson() !!},
+                users:{!! $users !!},
+                owners:{!! $owners !!},
+                checkData:[],
+                query:{
+                    create_user_id:'{{$options['create_user_id']}}',
+                    end_user_id:'{{$options['end_user_id']}}',
+                    client_no:'{{$options['client_no']}}',
+                    owner_id:'{{{$options['owner_id']}}}',
+                    create_start:'{{$options['create_start']}}',
+                    create_end:'{{$options['create_end']}}',
+                    order_issue_id:'{{$options['order_issue_id']}}',
+                }
+            },
+            mounted:function(){
+                $('#workLoad_div').removeClass('d-none');
+                console.log(this.workLoads);
+            },
+            methods:{
+                exportSelected(){
+
+                },
+                exportAll(){
 
+                }
+            }
+        })
     </script>
 @endsection