'20K001', // 'ip' => '192.168.100.2' // ], // [ // 's' => '20K002', // 'ip' => '192.168.110.2' // ], // [ // 's' => '20K003', // 'ip' => '192.168.80.2' // ], // [ // 's' => '20K004', // 'ip' => '192.168.90.2' // ], // ]; // $t = Carbon::parse('2022-09-30 00:00:00'); // $arr=[]; // for($i = 0; $i < 1440 ;$i++){ // $r = rand(150,600); // if( $r > 550){ // $dt = $t->addSeconds(1); // } // else{ // $dt = $t; // } // array_push($arr,[ // 'ping_time'=>$dt->format('Y-m-d H:i:s').'.'.rand(150,600), // 'ip'=>$s[0]['ip'], // 'serialnumber'=>$s[0]['s'], // 'time' => 1 // ]); // if( $r > 550){ // $dt = $t->addSeconds(-1); // } // else{ // $dt = $t; // } // $t = $t->addMinutes(1); // } // // dd($arr); // foreach($arr as $a){ // PingIp::create($a); // } // $t = Carbon::parse('2022-09-30 00:00:00'); // $arr=[]; // for($i = 0; $i < 1440 ;$i++){ // $r = rand(150,600); // if( $r > 550){ // $dt = $t->addSeconds(1); // } // else{ // $dt = $t; // } // array_push($arr,[ // 'ping_time'=>$dt->format('Y-m-d H:i:s').'.'.rand(150,600), // 'ip'=>$s[1]['ip'], // 'serialnumber'=>$s[1]['s'], // 'time' => 1 // ]); // if( $r > 550){ // $dt = $t->addSeconds(-1); // } // else{ // $dt = $t; // } // $t = $t->addMinutes(1); // } // // dd($arr); // foreach($arr as $a){ // PingIp::create($a); // } // $t = Carbon::parse('2022-09-30 00:00:00'); // $arr=[]; // for($i = 0; $i < 1440 ;$i++){ // $r = rand(150,600); // if( $r > 550){ // $dt = $t->addSeconds(1); // } // else{ // $dt = $t; // } // array_push($arr,[ // 'ping_time'=>$dt->format('Y-m-d H:i:s').'.'.rand(150,600), // 'ip'=>$s[2]['ip'], // 'serialnumber'=>$s[2]['s'], // 'time' => 1 // ]); // if( $r > 550){ // $dt = $t->addSeconds(-1); // } // else{ // $dt = $t; // } // $t = $t->addMinutes(1); // } // // dd($arr); // foreach($arr as $a){ // PingIp::create($a); // } // $t = Carbon::parse('2022-09-30 00:00:00'); // $arr=[]; // for($i = 0; $i < 1440 ;$i++){ // $r = rand(150,600); // if( $r > 550){ // $dt = $t->addSeconds(1); // } // else{ // $dt = $t; // } // array_push($arr,[ // 'ping_time'=>$dt->format('Y-m-d H:i:s').'.'.rand(150,600), // 'ip'=>$s[3]['ip'], // 'serialnumber'=>$s[3]['s'], // 'time' => 1 // ]); // if( $r > 550){ // $dt = $t->addSeconds(-1); // } // else{ // $dt = $t; // } // $t = $t->addMinutes(1); // } // // dd($arr); // foreach($arr as $a){ // PingIp::create($a); // } $serialNumber = $this->serialNumber; return view('system.monitor.ping', compact('serialNumber')); } #region 輸出excel public function ExportExcel(Request $request, $status) { // dd($request->all(),$processcheckStatus); #region 設備限制 // $device = explode(',', auth()->user()->devicetype); #endregion [$draw, $totalRecords, $totalRecordswithFilter, $data_arr] = $this->getData($request, $status); $columns = ['ping_time', 'serialnumber', 'ip', 'time']; $columnTitle = [ ["【表單名稱】:". "前端攝影機設備狀態"], ["【日期區間】:". $request->searchByFromdate. " ~ ". $request->searchByTodate], ['檢測時間', '設備編號', 'IP', '延遲(ms)'] ]; // $data_arr = $data_arr->toArray(); $data = array_map(function ($row) use ($columns) { $data = array_merge(array_flip($columns), array_intersect_key($row, array_flip($columns))); return $data; }, $data_arr); $fileName = 'ping-' . Str::random(10) . '.xlsx'; try { DB::beginTransaction(); ExportFiles::create([ 'name' => $fileName, 'path' => 'public/exports/monitor/', 'type' => 'xlsx', 'status' => '1', 'remark' => "PingIP報表匯出", 'user_id' => auth('api')->user()->id, ]); $option = [ 'printDef' => $request->printDef ?? 0, 'showPN' => $request->showPN ?? 0, 'showBorder' => $request->showBorder ?? 0, ]; Excel::store(new ArrayExportH($data, $columnTitle, $option), 'public/exports/monitor/' . $fileName, 'local', \Maatwebsite\Excel\Excel::XLSX); DB::commit(); } catch (\Throwable $th) { Log::error("報表匯出失敗: " . $th->getMessage()); DB::rollBack(); } return response()->json(['url' => route('system.filedownload', ['path' => $fileName])], 200); } #endregion public function getDataTable(Request $request, $status) { [$draw, $totalRecords, $totalRecordswithFilter, $data_arr] = $this->getData($request, $status); $response = array( "draw" => intval($draw), "iTotalRecords" => $totalRecords, "iTotalDisplayRecords" => $totalRecordswithFilter, "aaData" => $data_arr ); echo json_encode($response); exit; } #region 取得資料 function getData($request, $status) { // 審查狀態 0 未審 1 已審查 2 不舉發 99清冊 // $status = 2; // dd($device, $request, $status); # 日期搜尋值 if (isset($request->searchByFromdate)) $searchByFromdate = $request->searchByFromdate; if (isset($request->searchByTodate)) $searchByTodate = $request->searchByTodate; //地點搜尋 if (isset($request->location)) $location = $request->location; #region DataTable 搜尋屬性 $draw = $request->get('draw'); $start = $request->get("start"); $rowperpage = $request->get("length"); // Rows display per page $columnIndex_arr = $request->get('order'); $columnName_arr = $request->get('columns'); $order_arr = $request->get('order'); $search_arr = $request->get('search'); if ($status != 999){ $columnIndex = $columnIndex_arr[0]['column']; // Column index $columnName = $columnName_arr[$columnIndex]['data']; // Column name $columnSortOrder = $order_arr[0]['dir']; // asc or desc $searchValue = $search_arr['value']; // Search value } #endregion // Fetch records if ($status == 99) { $serialNumber = $this->serialNumber; $records = []; foreach ($serialNumber as $s) { $p = PingIp::where("serialnumber", $s)->orderby('ping_time', 'desc')->first(); if (isset($p)) array_push($records, $p); } $totalRecords = count($records); $totalRecordswithFilter = count($records); } else { $records = PingIp::query(); $totalRecords = $records->count(); if (isset($columnName)) $records->orderBy($columnName, $columnSortOrder); // if (isset($searchValue)) // $records->where('carnumber', 'like', '%' . $searchValue . '%'); //已審未審 //時間限制 if (isset($searchByFromdate)) $records->where('ping_time', ">", $searchByFromdate . ' 00:00:00'); else $records->where('ping_time', ">", Carbon::now()->subMonths(36)); if (isset($searchByTodate)) $records->where('ping_time', "<", $searchByTodate . ' 23:59:59'); //地點篩選 if (isset($location)) $records->where('serialnumber', $location); $totalRecordswithFilter = $records->count(); $records->select('*'); if (isset($start)) $records->skip($start); if (isset($rowperpage)) $records->take($rowperpage); $records = $records->get(); } $data_arr = array(); $sno = $start + 1; // dd($records); foreach ($records as $record) { //還原用id $id = $record->id; //不舉發原因 $ip = $record->ip; $symbol = $record->symbol; $ping_time = $record->ping_time; $serialnumber = $record->serialnumber; $time = $record->time; $ttl = $record->ttl; $status = $record->status; $data_arr[] = array( "id" => $id, "ip" => $ip, "time" => $time, "symbol" => $symbol, "serialnumber" => $serialnumber, "ping_time" => $ping_time, "ttl" => $ttl, "status" => $status, // "searchByFromdate" => $searchByFromdate, // "searchByTodate"=> $searchByTodate ); } return [$draw, $totalRecords, $totalRecordswithFilter, $data_arr]; } #endregion }