where('processcheck', 1); $records->where('postcheck', 0); // $records->where('datatime', '>', Carbon::now('Asia/Taipei')->subDays($days)); $records->where('datatime', '>', '2024-06-01'); $data = $records->select('id as multisys_id', 'picture as photo')->get()->toArray(); $values = []; foreach ($data as $row) { unset($row['law_type']); $values[] = '(\'' . implode('\',\'', $row) . '\')'; } // dd($values); if (count($values) > 0) { DB::transaction(function () use ($values, $records) { // 在這裡執行需要交易的資料庫操作,例如新增、修改、刪除等等 DB::insert('INSERT IGNORE INTO multisys_entry (multisys_id, photo) VALUES' . implode(',', $values)); $records->update(['postcheck' => 1]); }); } // DB::table('multisys_entry')->insertOrIgnore($data); Log::notice('路口多功能入案-資料收集 近' . $days . '天,共' . count($values) . '筆'); } // 取得要處理的資料 public static function get_multisys_entry_data($days = 1) { $ids = MultisysEntry::where('status', 0)->where('created_at', '>', Carbon::now('Asia/Taipei')->subDays($days))->pluck('multisys_id'); $data = Multisys::whereIn('id', $ids)->get(); // dd($data); $values = []; foreach ($data as $row) { $datetime = $row->datatime; $date = Carbon::parse($datetime)->toDateString(); $twYear = Carbon::parse($date)->format('Y') - 1911; // 取得民國年,即西元年減去1911 $twDate = $twYear . Carbon::parse($date)->format('md'); // 將民國年與日期合併 $time = Carbon::parse($datetime)->format('His'); $row_data = [ 'datatime' => $row->datatime, 'SN' => $row->id, 'ViolationDate' => $twDate, 'ViolationTime' => $time, 'UnitId' => User::where('account', $row->jsoncheck)->first()->leader, 'PoliceName' => User::where('account', $row->jsoncheck)->first()->name, 'LicensePlate' => $row->carnumber, 'VehicleType' => $row->cartype, 'RuleId' => $row->violationcode, 'Road' => $row->location, ]; array_push($values, $row_data); } return $values; } // 本機建檔備存 public static function multisys_entry_local($data = []) { if (count($data) > 0) { foreach ($data as $row_data) { $datetime = $row_data['datatime']; unset($row_data['datatime']); // 存放檔案的目錄路徑 $directory = 'entry/twosage/' . Carbon::now('Asia/Taipei')->format('Ymd'); // 如果目錄不存在,則建立該目錄 Storage::makeDirectory($directory); // 將資料轉換為 JSON 格式 $jsonData = json_encode($row_data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); // 將 JSON 資料寫入檔案 $row_date = Carbon::parse($datetime)->format('Ymd_His'); $fileName = 'Ts_' . $row_date . '_' . $row_data['SN'] . '.json'; Storage::put($directory . "/$fileName", $jsonData); } } Log::notice('路口多功能入案-資料組合備存,共' . count($data) . '筆'); } // 送出入案,紀錄回傳no public static function multisys_entry_post($data = []) { if (count($data) > 0) { foreach ($data as $row_data) { unset($row_data['datatime']); try { $client = new Client(['base_uri' => 'http://trafficfine.typd.gov.tw:88']); $response = $client->request('POST', '/X/sunhouse', ['form_params' => $row_data, 'connect_timeout' => 10]); // Here the code for successful request if ($response->getStatusCode() == "200") { $resp = $response->getBody(); $no = json_decode($resp, true)['No']; if(json_decode($resp, true)['Message'] == '新增完成'){ MultisysEntry::where('multisys_id', $row_data['SN'])->first()->update(['no' => $no, 'response' => $resp, 'status' => 1]); }else{ MultisysEntry::where('multisys_id', $row_data['SN'])->first()->update(['no' => $no, 'response' => $resp, 'status' => 3]); } } else { $resp = $response->getBody(); $no = json_decode($resp, true)['No']; MultisysEntry::where('multisys_id', $row_data['SN'])->first()->update(['no' => $no, 'response' => $resp, 'status' => 3]); } } catch (\Exception $e) { // There was another exception. Log::error('multisys_id: ' . $row_data['SN']); Log::error($e->getMessage()); } } } Log::notice('路口多功能入案-資料送往入案系統,共' . count($data) . '筆'); } // 送出佐證圖片 public static function multisys_entry_post_img() { $re_arr = []; $data = MultisysEntry::where('status', 1) ->where('created_at', '>', Carbon::now('Asia/Taipei')->subDays(3)) // ->whereIn('multisys_id', $re_arr) ->get(); if (count($data) > 0) { foreach ($data as $row_data) { try { // 使用 intervention/image 將檔案壓縮至500K以下 // 將圖片轉換為 base64 格式 不儲存 // Log::notice($row_data->photo); $img = Image::read(public_path('ParsingFiles/' . str_replace('*', '/', $row_data->photo))); // if ($width > $height) then width = 720, height = 720 * $height / $width // if ($height > $width) then height = 480, width = 480 * $width / $height $width = $img->width(); $height = $img->height(); if ($width > $height) { $img->resize(2560, 2560 * $height / $width); } else { $img->resize(1440 * $width / $height, 1440); } $base64 = base64_encode($img->encode()); $post_data = [ 'data' => $base64 ]; // Log::notice($post_data); $client = new Client(['base_uri' => 'http://trafficfine.typd.gov.tw:88']); $response = $client->request('POST', '/' . $row_data->no, ['form_params' => $post_data, 'connect_timeout' => 10]); // Here the code for successful request if ($response->getStatusCode() == "200") { $msg = json_decode($response->getBody(), true)['Message']; if ($msg == '上傳成功') { $row_data->status = 2; $row_data->save(); Log::notice($row_data->no . "-" . $msg); } else { $row_data->status = 4; $row_data->save(); Log::error($row_data->no . "-" . $msg); } } else { $row_data->status = 3; $row_data->save(); } } catch (\Exception $e) { // There was another exception. Log::error('multisys_id: ' . $row_data->id); Log::error($e->getMessage()); } } } Log::notice('路口多功能入案-佐證資料送往入案系統,共' . count($data) . '筆'); } #endregion #region 闖紅燈超速入案 public static function overspeedred_entry($days = 7) { $records = OverSpeedRed::query(); $records->where('processcheck', 1); $records->where('postcheck', 0); // $records->where('datatime', '>', Carbon::now('Asia/Taipei')->subDays($days)); $records->where('datatime', '>', '2024-06-01'); $data = $records->select('id as overspeedred_id', 'picture as photo', 'violationtype', 'datatime')->get()->toArray(); // 嚴重超速 $records2 = OverSpeedRed::query(); $records2->where('processcheck', 1); $records2->where('postcheck', 0); // $records->where('datatime', '>', Carbon::now('Asia/Taipei')->subDays($days)); $records2->where('datatime', '>', '2024-06-01'); $records2->whereIn('violationcode', ['4310240', '4310241', '4310242']); $data2 = $records2->select('id as overspeedred_id', 'picture as photo', 'violationtype', 'datatime')->get()->toArray(); $values = []; foreach ($data as $row) { // Log::notice($row); unset($row['law_type']); $violationtype = $row['violationtype']; $time = str_replace('-', '', explode(' ', $row['datatime'])[0]); $photoName = explode('*', $row['photo']); $photoName = end($photoName); $photoPath = "merge/$violationtype/$time/$photoName"; $row['photo'] = $photoPath; unset($row['violationtype']); unset($row['datatime']); $values[] = '(\'' . implode('\',\'', $row) . '\')'; } // 嚴重超速資料彙整 $values2 = []; foreach ($data2 as $row) { // Log::notice($row); unset($row['law_type']); $violationtype = $row['violationtype']; $time = str_replace('-', '', explode(' ', $row['datatime'])[0]); $photoName = explode('*', $row['photo']); $photoName = end($photoName); $photoPath = "merge/$violationtype/$time/$photoName"; $row['photo'] = $photoPath; unset($row['violationtype']); unset($row['datatime']); $values2[] = '(\'' . implode('\',\'', $row) . '\')'; } if (count($values) > 0) { DB::transaction(function () use ($values, $values2, $records) { // 在這裡執行需要交易的資料庫操作,例如新增、修改、刪除等等 DB::insert('INSERT IGNORE INTO overspeedred_entry (overspeedred_id, photo) VALUES' . implode(',', $values)); if (count($values2) > 0) { DB::insert('INSERT IGNORE INTO overspeedred_entry2 (overspeedred_id, photo) VALUES' . implode(',', $values2)); } $records->update(['postcheck' => 1]); }); } // DB::table('overspeedred_entry')->insertOrIgnore($data); Log::notice('闖紅燈超速入案-資料收集 近' . $days . '天,共' . count($values) . '筆'); } // 取得要處理的資料 public static function get_overspeedred_entry_data($days = 1) { $ids = OverSpeedRedEntry::where('status', 0)->where('created_at', '>', Carbon::now('Asia/Taipei')->subDays($days))->pluck('overspeedred_id'); $data = OverSpeedRed::whereIn('id', $ids)->get(); // dd($data); $values = []; foreach ($data as $row) { $datetime = $row->datatime; $date = Carbon::parse($datetime)->toDateString(); $twYear = Carbon::parse($date)->format('Y') - 1911; // 取得民國年,即西元年減去1911 $twDate = $twYear . Carbon::parse($date)->format('md'); // 將民國年與日期合併 $time = Carbon::parse($datetime)->format('His'); $row_data = [ 'datatime' => $row->datatime, 'SN' => $row->id, 'ViolationDate' => $twDate, 'ViolationTime' => $time, 'UnitId' => User::where('account', $row->jsoncheck)->first()->leader, 'PoliceName' => User::where('account', $row->jsoncheck)->first()->name, 'LicensePlate' => $row->carnumber, 'VehicleType' => $row->cartype, 'RuleId' => $row->violationcode, 'Road' => $row->location, ]; if ($row->violationtype == '超速') { $row_data['Speed'] = intval(str_replace('km/h', '', $row->speed)); $row_data['LimitSpeed'] = intval(str_replace('km/h', '', $row->limitspeed)); } array_push($values, $row_data); } return $values; } // 本機建檔備存 public static function overspeedred_entry_local($data = []) { if (count($data) > 0) { foreach ($data as $row_data) { $datetime = $row_data['datatime']; unset($row_data['datatime']); // 存放檔案的目錄路徑 $directory = 'entry/overspeedred/' . Carbon::now('Asia/Taipei')->format('Ymd'); // 如果目錄不存在,則建立該目錄 Storage::makeDirectory($directory); // 將資料轉換為 JSON 格式 $jsonData = json_encode($row_data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); // 將 JSON 資料寫入檔案 $row_date = Carbon::parse($datetime)->format('Ymd_His'); $fileName = 'OvO_' . $row_date . '_' . $row_data['SN'] . '.json'; Storage::put($directory . "/$fileName", $jsonData); } } Log::notice('闖紅燈超速入案-資料組合備存,共' . count($data) . '筆'); } // 送出入案,紀錄回傳no public static function overspeedred_entry_post($data = []) { if (count($data) > 0) { foreach ($data as $row_data) { unset($row_data['datatime']); try { $client = new Client(['base_uri' => 'http://trafficfine.typd.gov.tw:88']); $response = $client->request('POST', '/X/sunhouse', ['form_params' => $row_data, 'connect_timeout' => 10]); // Here the code for successful request if ($response->getStatusCode() == "200") { $resp = $response->getBody(); $no = json_decode($resp, true)['No']; if(json_decode($resp, true)['Message'] == '新增完成'){ OverSpeedRedEntry::where('overspeedred_id', $row_data['SN'])->first()->update(['no' => $no, 'response' => $resp, 'status' => 1]); } else{ OverSpeedRedEntry::where('overspeedred_id', $row_data['SN'])->first()->update(['no' => $no, 'response' => $resp, 'status' => 3]); } } else { $resp = $response->getBody(); $no = json_decode($resp, true)['No']; OverSpeedRedEntry::where('overspeedred_id', $row_data['SN'])->first()->update(['no' => $no, 'response' => $resp, 'status' => 3]); } } catch (\Exception $e) { // There was another exception. Log::error('overspeedred_id: ' . $row_data['SN']); Log::error($e->getMessage()); } // 如果 $row->violationcode 是 4310240 4310241 4310242 才執行的條件 if (in_array($row_data['RuleId'], ['4310240', '4310241', '4310242'])) { $row_data['RuleId'] = '4340068'; try { $client = new Client(['base_uri' => 'http://trafficfine.typd.gov.tw:88']); $response = $client->request('POST', '/X/sunhouse', ['form_params' => $row_data, 'connect_timeout' => 10]); // Here the code for successful request if ($response->getStatusCode() == "200") { $resp = $response->getBody(); $no = json_decode($resp, true)['No']; if(json_decode($resp, true)['Message'] == '新增完成'){ OverSpeedRedEntry2::where('overspeedred_id', $row_data['SN'])->first()->update(['no' => $no, 'response' => $resp, 'status' => 1]); } else{ OverSpeedRedEntry2::where('overspeedred_id', $row_data['SN'])->first()->update(['no' => $no, 'response' => $resp, 'status' => 3]); } } else { $resp = $response->getBody(); $no = json_decode($resp, true)['No']; OverSpeedRedEntry2::where('overspeedred_id', $row_data['SN'])->first()->update(['no' => $no, 'response' => $resp, 'status' => 3]); } } catch (\Exception $e) { // There was another exception. Log::error('處車主 overspeedred_id: ' . $row_data['SN']); Log::error($e->getMessage()); } } } } Log::notice('闖紅燈超速入案-資料送往入案系統,共' . count($data) . '筆'); } // 送出佐證圖片 public static function overspeedred_entry_post_img() { $re_arr = []; $data = OverSpeedRedEntry::where('status', 1) ->where('created_at', '>', Carbon::now('Asia/Taipei')->subDays(20)) // ->whereIn('overspeedred_id', $re_arr) ->get(); if (count($data) > 0) { foreach ($data as $row_data) { try { // 使用 intervention/image 將檔案壓縮至500K以下 // 將圖片轉換為 base64 格式 不儲存 $img = Image::read(public_path(str_replace('*', '/', $row_data->photo))); // if ($width > $height) then width = 720, height = 720 * $height / $width // if ($height > $width) then height = 480, width = 480 * $width / $height $width = $img->width(); $height = $img->height(); if ($width > $height) { $img->resize(2560, 2560 * $height / $width); } else { $img->resize(1440 * $width / $height, 1440); } $base64 = base64_encode($img->encode()); $post_data = [ 'data' => $base64 ]; $client = new Client(['base_uri' => 'http://trafficfine.typd.gov.tw:88']); $response = $client->request('POST', '/' . $row_data->no, ['form_params' => $post_data, 'connect_timeout' => 10]); // Here the code for successful request if ($response->getStatusCode() == "200") { $msg = json_decode($response->getBody(), true)['Message']; if ($msg == '上傳成功') { $row_data->status = 2; $row_data->save(); Log::notice($row_data->no . "-" . $msg); } else { $row_data->status = 4; $row_data->save(); Log::error($row_data->no . "-" . $msg); } } else { $row_data->status = 3; $row_data->save(); } } catch (\Exception $e) { // There was another exception. Log::error('overspeedred_id: ' . $row_data->id); Log::error($e->getMessage()); } } } $data2 = OverSpeedRedEntry2::where('status', 1) ->where('created_at', '>', Carbon::now('Asia/Taipei')->subDays(20)) // ->whereIn('overspeedred_id', $re_arr) ->get(); if (count($data2) > 0) { foreach ($data2 as $row_data) { try { // 使用 intervention/image 將檔案壓縮至500K以下 // 將圖片轉換為 base64 格式 不儲存 $img = Image::read(public_path(str_replace('*', '/', $row_data->photo))); // if ($width > $height) then width = 720, height = 720 * $height / $width // if ($height > $width) then height = 480, width = 480 * $width / $height $width = $img->width(); $height = $img->height(); if ($width > $height) { $img->resize(2560, 2560 * $height / $width); } else { $img->resize(1440 * $width / $height, 1440); } $base64 = base64_encode($img->encode()); $post_data = [ 'data' => $base64 ]; $client = new Client(['base_uri' => 'http://trafficfine.typd.gov.tw:88']); $response = $client->request('POST', '/' . $row_data->no, ['form_params' => $post_data, 'connect_timeout' => 10]); // Here the code for successful request if ($response->getStatusCode() == "200") { $msg = json_decode($response->getBody(), true)['Message']; if ($msg == '上傳成功') { $row_data->status = 2; $row_data->save(); Log::notice($row_data->no . "-" . $msg); } else { $row_data->status = 4; $row_data->save(); Log::error($row_data->no . "-" . $msg); } } else { $row_data->status = 3; $row_data->save(); } } catch (\Exception $e) { // There was another exception. Log::error('處車主 overspeedred_id: ' . $row_data->id); Log::error($e->getMessage()); } } } Log::notice('闖紅燈超速入案-佐證資料送往入案系統,共' . count($data) . '筆'); } #endregion }