瀏覽代碼

访问记录导出

任敬轩 3 年之前
父節點
當前提交
f4d558bbb1

+ 8 - 2
.idea/php.xml

@@ -72,7 +72,6 @@
       <path value="$PROJECT_DIR$/vendor/webmozart/assert" />
       <path value="$PROJECT_DIR$/vendor/monolog/monolog" />
       <path value="$PROJECT_DIR$/vendor/beyondcode/laravel-dump-server" />
-      <path value="$PROJECT_DIR$/vendor/league/mime-type-detection" />
       <path value="$PROJECT_DIR$/vendor/league/flysystem" />
       <path value="$PROJECT_DIR$/vendor/hamcrest/hamcrest-php" />
       <path value="$PROJECT_DIR$/vendor/nwidart/laravel-modules" />
@@ -114,12 +113,19 @@
       <path value="$PROJECT_DIR$/vendor/symfony/console" />
       <path value="$PROJECT_DIR$/vendor/symfony/polyfill-ctype" />
       <path value="$PROJECT_DIR$/vendor/symfony/polyfill-php80" />
+      <path value="$PROJECT_DIR$/vendor/phpoffice/phpspreadsheet" />
+      <path value="$PROJECT_DIR$/vendor/psr/http-client" />
+      <path value="$PROJECT_DIR$/vendor/maennchen/zipstream-php" />
+      <path value="$PROJECT_DIR$/vendor/ezyang/htmlpurifier" />
+      <path value="$PROJECT_DIR$/vendor/myclabs/php-enum" />
+      <path value="$PROJECT_DIR$/vendor/markbaker/complex" />
+      <path value="$PROJECT_DIR$/vendor/markbaker/matrix" />
     </include_path>
   </component>
   <component name="PhpProjectSharedConfiguration" php_language_level="7.1" />
   <component name="PhpUnit">
     <phpunit_settings>
-      <PhpUnitSettings load_method="CUSTOM_LOADER" configuration_file_path="$PROJECT_DIR$/phpunit.xml" custom_loader_path="$PROJECT_DIR$/vendor/autoload.php" use_configuration_file="true" />
+      <PhpUnitSettings configuration_file_path="$PROJECT_DIR$/phpunit.xml" custom_loader_path="$PROJECT_DIR$/vendor/autoload.php" use_configuration_file="true" />
     </phpunit_settings>
   </component>
 </project>

+ 7 - 0
.idea/video_system.iml

@@ -14,6 +14,7 @@
       <excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/deprecations" />
       <excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/event-manager" />
       <excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/lexer" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/ezyang/htmlpurifier" />
       <excludeFolder url="file://$MODULE_DIR$/vendor/firebase/php-jwt" />
       <excludeFolder url="file://$MODULE_DIR$/vendor/guzzlehttp/guzzle" />
       <excludeFolder url="file://$MODULE_DIR$/vendor/guzzlehttp/promises" />
@@ -23,11 +24,17 @@
       <excludeFolder url="file://$MODULE_DIR$/vendor/lcobucci/jwt" />
       <excludeFolder url="file://$MODULE_DIR$/vendor/league/event" />
       <excludeFolder url="file://$MODULE_DIR$/vendor/league/oauth2-server" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/maennchen/zipstream-php" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/markbaker/complex" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/markbaker/matrix" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/myclabs/php-enum" />
       <excludeFolder url="file://$MODULE_DIR$/vendor/nwidart/laravel-modules" />
       <excludeFolder url="file://$MODULE_DIR$/vendor/overtrue/pinyin" />
       <excludeFolder url="file://$MODULE_DIR$/vendor/phpdocumentor/type-resolver" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/phpoffice/phpspreadsheet" />
       <excludeFolder url="file://$MODULE_DIR$/vendor/phpseclib/phpseclib" />
       <excludeFolder url="file://$MODULE_DIR$/vendor/predis/predis" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/psr/http-client" />
       <excludeFolder url="file://$MODULE_DIR$/vendor/psr/http-factory" />
       <excludeFolder url="file://$MODULE_DIR$/vendor/psr/http-message" />
       <excludeFolder url="file://$MODULE_DIR$/vendor/ralouphie/getallheaders" />

+ 15 - 0
Modules/Admin/Resources/views/component/template_table_list.blade.php

@@ -125,6 +125,21 @@
                 @endif
             @endif
 
+            @if(checkBtn('/admin/'.$path.'/export_condition', $permissionsList))
+                @if(in_array('export_condition', $topActions))
+                    <button onclick="export_condition()" class="layui-btn">导出</button>
+                @endif
+                    <script>
+                        function export_condition(){
+                            var action = $('.layui-form').attr('action');
+                            var new_action = action+'/export_condition';
+                            $('.layui-form').attr('action',new_action);
+                            $('.layui-form').submit();
+                            $('.layui-form').attr('action',action);
+                        }
+                    </script>
+            @endif
+
             @if(checkBtn('/admin/'.$path.'/importTemplate', $permissionsList))
                 @if(in_array('importTemplate', $topActions))
                     <a href="/admin/{{ $path }}/importTemplate" class="layui-btn">下载导入模板</a>

+ 189 - 5
Modules/Log/Http/Controllers/LogController.php

@@ -8,6 +8,11 @@ use Illuminate\Routing\Controller;
 use DB;
 use Modules\Admin\Auxiliary\View\TableAuxiliary;
 use Modules\Admin\Http\Controllers\BaseController;
+use PhpOffice\PhpSpreadsheet\Spreadsheet;
+use PhpOffice\PhpSpreadsheet\Style\Alignment;
+use PhpOffice\PhpSpreadsheet\Style\Border;
+use PhpOffice\PhpSpreadsheet\Style\Fill;
+use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
 
 class LogController extends BaseController
 {
@@ -53,8 +58,20 @@ class LogController extends BaseController
             }
         }
 
-        if ($request->has('created_at') && $request->input('created_at')) {
-            $log_list = $log_list->where('log.created_at','like','%'.$request->input('created_at').'%');
+        if($request->input('start_time') != null && $request->input('end_time') != null){
+            $start_time = $request->input('start_time')." 00:00:00";
+            $end_time = $request->input('start_time')." 23:59:59";
+            $log_list = $log_list->whereBetween('log.created_at',[$start_time,$end_time]);
+        }
+
+        if($request->input('start_time') == null && $request->input('end_time') != null){
+            $end_time = $request->input('start_time')." 23:59:59";
+            $log_list = $log_list->where('log.created_at','<=',$request->input('end_time'));
+        }
+
+        if($request->input('start_time') != null && $request->input('end_time') == null){
+            $start_time = $request->input('start_time')." 00:00:00";
+            $log_list = $log_list->where('log.created_at','>=',$request->input('start_time'));
         }
 
         $log_list = $log_list->paginate(50);
@@ -78,12 +95,13 @@ class LogController extends BaseController
         $status = [1=>'正常',2=>'异常'];
 
         $tableObj = new TableAuxiliary('log', $log_list);
-        $tableObj->topActions = [];
+        $tableObj->topActions = ['export_condition'];
         $tableObj->actionBtns = [];
         $tableObj->search('select', 'mine_id', '选择矿区', $mine_search);
         $tableObj->search('input', 'camera_name', '摄像头名称');
         $tableObj->search('select', 'status', '摄像头状态', $status);
-        $tableObj->search('date', 'created_at', '操作时间');
+        $tableObj->search('date', 'start_time', '开始时间');
+        $tableObj->search('date', 'end_time', '结束时间');
         $tableObj->column('mine_name', '矿区名称');
         $tableObj->column('title', '区域名称');
         $tableObj->column('camera_id', '摄像头ID');
@@ -97,7 +115,173 @@ class LogController extends BaseController
             return $state;
         });
         $tableObj->column('log', '返回信息');
-        $tableObj->column('created_at', '操作时间');
+        $tableObj->column('created_at', '开始时间');
         return $this->tableList($tableObj);
     }
+
+    public function export(Request $request){
+        //查询当前登录用户权限内的区域
+        $user = DB::table('users')->where('staff_num',$request->user()->staff_num)->first();
+        $mine_array = explode(';',$user->mine_role);//权限内的矿区
+        $mine_all = DB::table('mine_list')->where('deleted_at',null)->get();//所有区域
+        $mine_use = [];//权限内矿区下所有区域
+        foreach($mine_all as $k=>$v){
+            if(in_array(explode('|',$v->degree)[0],$mine_array)){
+                $mine_use[] = $v->id;
+            }
+        }
+
+        $log_list = DB::table('log')
+            ->select('log.*','mine_list.title','mine_list.degree','camera_list.camera_name')
+            ->leftJoin('mine_list','mine_list.id','=','log.mine_id')
+            ->leftJoin('camera_list','camera_list.id','=','log.camera_id')
+            ->whereIn('log.mine_id',$mine_use)
+            ->orderBy('camera_list.camera_name', 'desc');
+
+        if ($request->has('mine_id') && $request->input('mine_id')) {
+            $log_list = $log_list->where('mine_list.degree','like',$request->input('mine_id').'|%');
+            $mine_export = DB::table('mine_list')->where('id',$request->input('mine_id'))->get()[0]->title;
+        }else{
+            $mine_export = '全矿';
+        }
+
+        if ($request->has('camera_name') && $request->input('camera_name')) {
+            $log_list = $log_list->where('camera_list.camera_name','like','%'.$request->input('camera_name').'%');
+        }
+
+        if ($request->has('status') && $request->input('status')) {
+            if($request->input('status') == 1){
+                $log_list = $log_list->where('log.status',0);
+                $status_export = '正常摄像头';
+            }elseif($request->input('status') == 2){
+                $log_list = $log_list->where('log.status',1);
+                $status_export = '异常摄像头';
+            }
+        }else{
+            $status_export = '';
+        }
+
+        if($request->input('start_time') != null && $request->input('end_time') != null){
+            $start_time = $request->input('start_time')." 00:00:00";
+            $end_time = $request->input('start_time')." 23:59:59";
+            $log_list = $log_list->whereBetween('log.created_at',[$start_time,$end_time]);
+            $time_export = $request->input('start_time').'到'.$request->input('end_time');
+        }
+
+        elseif($request->input('start_time') == null && $request->input('end_time') != null){
+            $end_time = $request->input('start_time')." 23:59:59";
+            $log_list = $log_list->where('log.created_at','<=',$request->input('end_time'));
+            $time_export = '截止'.$request->input('end_time').'前';
+        }
+
+        elseif($request->input('start_time') != null && $request->input('end_time') == null){
+            $start_time = $request->input('start_time')." 00:00:00";
+            $log_list = $log_list->where('log.created_at','>=',$request->input('start_time'));
+            $time_export = $request->input('end_time').'至今';
+        }
+
+        else{
+            $time_export = '';
+        }
+
+        $log_list = $log_list->get()->toArray();
+
+        if(count($log_list)>0){
+            for($i=0;$i<count($log_list);$i++){
+                $degree = explode('|',$log_list[$i]->degree);
+                $mine = DB::table('mine_list')->where('id',$degree[0])->get();
+                $log_list[$i]->mine_name = $mine[0]->title;
+                if($log_list[$i]->status == 0){
+                    $log_list[$i]->status = '正常';
+                }else{
+                    $log_list[$i]->status = '异常';
+                }
+            }
+        }
+
+        //去掉重复数据改为次数
+        $new_log_list = [];
+        foreach($log_list as $log){
+            $repeat = 0;//不在新数组
+            if(count($new_log_list)>0){
+                for($i=0;$i<count($new_log_list);$i++){
+                    if($log->camera_name==$new_log_list[$i]['camera_name'] && $log->status==$new_log_list[$i]['status']){
+                        $new_log_list[$i]['count']++;
+                        $repeat = 1;//在新数组
+                    }
+                }
+            }
+
+            if($repeat == 0){//不在新数组
+                $size = count($new_log_list);
+                $new_log_list[$size]['mine_name'] = $log->mine_name;
+                $new_log_list[$size]['title'] = $log->title;
+                $new_log_list[$size]['camera_id'] = $log->camera_id;
+                $new_log_list[$size]['camera_name'] = $log->camera_name;
+                $new_log_list[$size]['status'] = $log->status;
+                $new_log_list[$size]['log'] = $log->log;
+                $new_log_list[$size]['created_at'] = $log->created_at;
+                $new_log_list[$size]['count'] = 1;
+            }
+        }
+        $spreadsheet = new Spreadsheet();
+        $sheet       = $spreadsheet->getActiveSheet();
+        $sheet->getDefaultRowDimension()->setRowHeight(40);
+        $sheet->getColumnDimension('A')->setWidth(25);
+        $sheet->getColumnDimension('B')->setWidth(25);
+        $sheet->getColumnDimension('C')->setWidth(20);
+        $sheet->getColumnDimension('D')->setWidth(40);
+        $sheet->getColumnDimension('E')->setWidth(20);
+        $sheet->getColumnDimension('F')->setWidth(20);
+        $sheet->getColumnDimension('G')->setWidth(30);
+        $sheet->getColumnDimension('H')->setWidth(20);
+        $sheet->setCellValue('A1', $mine_export.$status_export.$time_export.'访问记录')
+            ->mergeCells('A1:H1')->getStyle('A1:H1')->getFont()->setSize(22)->setBold(true);
+        $sheet->setCellValue('A2', '矿区名称');
+        $sheet->setCellValue('B2', '区域名称');
+        $sheet->setCellValue('C2', '摄像头ID');
+        $sheet->setCellValue('D2', '摄像头名称');
+        $sheet->setCellValue('E2', '状态');
+        $sheet->setCellValue('F2', '返回信息');
+        $sheet->setCellValue('G2', '访问时间');
+        $sheet->setCellValue('H2', '次数');
+
+        $rowNum = 3;
+        $row_start = 3;
+        $row_end = 0;
+        if(count($new_log_list)>0){
+            for($i=0;$i<count($new_log_list);$i++){
+                $row_start = $rowNum;
+                $sheet->setCellValue('A'.$rowNum, $new_log_list[$i]['mine_name']);
+                $sheet->setCellValue('B'.$rowNum, $new_log_list[$i]['title']);
+                $sheet->setCellValue('C'.$rowNum, $new_log_list[$i]['camera_id']);
+                $sheet->setCellValue('D'.$rowNum, $new_log_list[$i]['camera_name']);
+                $sheet->setCellValue('E'.$rowNum, $new_log_list[$i]['status']);
+                $sheet->setCellValue('F'.$rowNum, $new_log_list[$i]['log']);
+                $sheet->setCellValue('G'.$rowNum, $new_log_list[$i]['created_at']);
+                $sheet->setCellValue('H'.$rowNum, $new_log_list[$i]['count']);
+                $rowNum++;
+            }
+            $row_end = $rowNum-1;
+            $sheet->mergeCells('A'.$row_start.':A'.$row_end.'')->mergeCells('B'.$row_start.':B'.$row_end.'')->mergeCells('C'.$row_start.':C'.$row_end.'')->mergeCells('D'.$row_start.':D'.$row_end.'')->mergeCells('E'.$row_start.':E'.$row_end.'')->mergeCells('F'.$row_start.':F'.$row_end.'')->mergeCells('G'.$row_start.':G'.$row_end.'')->mergeCells('H'.$row_start.':H'.$row_end.'');
+        }
+
+        $sheet->getStyle('A1:H' . ($rowNum-1))
+            ->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER)->setVertical(Alignment::VERTICAL_CENTER);
+        $sheet->getStyle('A2:H2' . ($rowNum))->getFont()->setSize(18);
+        $sheet->getStyle('A3:H' . ($rowNum))->getFont()->setSize(14);
+        $sheet->getStyle('A1:H1')->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB('FFD9D9D9');
+
+        header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');//告诉浏览器输出07Excel文件
+        header('Content-Disposition: attachment;filename='.$mine_export.$status_export.$time_export.'访问记录'.'.xlsx');//告诉浏览器输出浏览器名称
+        header('Cache-Control: max-age=0');//禁止缓存
+        $writer = new Xlsx($spreadsheet);
+        unset($spreadsheet);
+        $writer->save('php://output');
+//        return redirect('/admin/product/list');
+        dd($new_log_list);
+        dd($mine_export.$status_export.$time_export.'访问记录');
+
+
+    }
 }

+ 1 - 0
Modules/Log/Routes/web.php

@@ -13,4 +13,5 @@
 
 Route::prefix('admin')->group(function() {
     Route::get('/log', 'LogController@index');
+    Route::get('/log/export_condition', 'LogController@export');
 });

+ 1 - 1
composer.json

@@ -74,7 +74,7 @@
     "repositories": {
         "packagist": {
             "type": "composer",
-            "url": "https://mirrors.aliyun.com/composer/"
+            "url": "https://mirrors.cloud.tencent.com/composer/"
         }
     }
 }

文件差異過大導致無法顯示
+ 563 - 2057
composer.lock