whereIn( 'name', ['parking_lot', 'information_setting'] )->exists(); if (!$exists) { DB::beginTransaction(); try { DB::table('admin_configs')->insert($this->data($created_at)); DB::commit(); } catch (\Exception $e) { DB::rollBack(); } } //创建告警数据 $exists = DB::table('parking_alarm_information')->where('id', '>=', 1) ->exists(); if (!$exists) { DB::beginTransaction(); try { $dataArr = $this->alarmDataArr($created_at); foreach ($dataArr as $value) { $translation = $value['translation']; $name = $value['name']; unset($value['translation']); DB::table('parking_alarm_information')->insert($value); $id = DB::table('parking_alarm_information')->where( 'name', $name )->value('id'); $this->createTranslation( $translation, $value, $id, $created_at ); } DB::commit(); } catch (\Exception $e) { DB::rollBack(); } } } // 获取配置信息数据 protected function data($created_at): array { return [ [ 'title' => '车场配置', 'name' => 'parking_lot', 'content' => json_encode([ [ 'name' => 'parking_lot_id', 'value' => 666 ], [ 'name' => 'parking_lot_sum', 'value' => 1000 ], [ 'name' => 'parking_lot_image_path', 'value' => '/home/wwwroot/test/saas-8' ], [ 'name' => 'zombie_car_parking_duration', 'value' => 10 ], [ 'name' => 'numberplate_fuzzy_search', 'value' => 1 ], [ 'name' => 'automatically_clear_photo_cycle', 'value' => 10 ], [ 'name' => 'report_data_switch', 'value' => 1 ], [ 'name' => 'third_parking_lot_id', 'value' => 666 ], [ 'name' => 'report_api_url', 'value' => 'https://xg-saas-8.icecloud-car.cc' ], [ 'name' => 'report_cycle', 'value' => 60 ], ]), 'status' => 1, 'created_at' => $created_at ], [ 'title' => '信息设定', 'name' => 'information_setting', 'content' => json_encode([ 'close_alert' => 0, 'close_all_alert' => 0 ]), 'status' => 1, 'created_at' => $created_at ] ]; } // 获取告警数据 protected function alarmDataArr($created_at): array { return [ [ 'name' => '模式切换', 'type' => 2, 'notice_type' => 1, 'level' => 5, 'condition' => '运行模式已切换', 'content' => '运行模式已切换至 [当前模式]。例如:运行模式已切换至「喜马模式」。', 'remark' => '仅在模式变化时通知;可下载该次切换巡检报告详情。', 'created_at' => $created_at, 'updated_at' => $created_at, 'translation' => [ ['Mode Switch', '模式切換'], ['Operating mode has changed', '運行模式已切換'], [ 'Operating mode has switched to [Current Mode]. Example: switched to "Event Mode".', '運行模式已切換至[當前模式]。 例如:運行模式已切換至「喜馬模式」。' ], [ 'Only notifies when the mode changes; the inspection report for this switch can be downloaded.', '僅在模式變化時通知; 可下載該次切換巡檢報告詳情。' ] ] ], [ 'name' => 'VIP 到达', 'type' => 2, 'notice_type' => 1, 'level' => 3, 'condition' => 'VIP 名单中的车辆到达车位', 'content' => 'VIP 车辆([车牌号])已到达车位 [车位号]。例如:VIP 车辆(VIP 0233)已到达 2-103 车位。', 'remark' => '仅 VIP 车辆到达时通知。', 'created_at' => $created_at, 'updated_at' => $created_at, 'translation' => [ ['VIP Arrival', 'VIP 到達'], [ 'A vehicle on the VIP list has arrived at the parking space', 'VIP 名單中的車輛到達車位' ], [ 'VIP vehicle ([Plate No.]) has arrived at space [Space No.]. Example: VIP vehicle (VIP 0233) has arrived at space 2-103.', 'VIP 車輛([車牌號])已到達車位[車位號]。 例如:VIP車輛(VIP 0233)已到達2-103車位。' ], [ 'Only notifies when a VIP vehicle arrives.', '僅 VIP 車輛到達時通知。' ] ] ], [ 'name' => '硬件设备无响应', 'type' => 1, 'notice_type' => 2, 'level' => 2, 'condition' => '硬件设备无响应', 'content' => '[设备类型] [设备ID] 无响应。例如:摄像头 001 无响应。', 'remark' => '设备恢复正常前每 5 分钟展示一次。', 'created_at' => $created_at, 'updated_at' => $created_at, 'translation' => [ ['Hardware Not Responding', '硬體設備無響應'], ['Hardware device is not responding', '硬體設備無響應'], [ '[Device Type] [Device ID] is not responding. Example: Camera 001 is not responding.', '[設備類型] [設備ID]無響應。 例如:監視器001無響應。' ], [ 'Displayed every 5 minutes until the device returns to normal.', '設備恢復正常前每5分鐘展示一次。' ] ] ], [ 'name' => '跨线停车', 'type' => 2, 'notice_type' => 1, 'level' => 4, 'condition' => '车辆已停放但超出车位线', 'content' => '在 [车位号] 存在跨线停车。例如:在 2-103 存在跨线停车。', 'remark' => '', 'created_at' => $created_at, 'updated_at' => $created_at, 'translation' => [ ['Line-Crossing Parking', '跨線停車'], [ 'Vehicle is parked beyond the parking space lines', '車輛已停放但超出車位線' ], [ 'Line-crossing parking detected at [Space No.]. Example: detected at space 2-103.', '在[車位號]存在跨線停車。 例如:在2-103存在跨線停車。' ], ['', ''] ] ], [ 'name' => '违规停车', 'type' => 2, 'notice_type' => 1, 'level' => 4, 'condition' => '车辆停放在错误的车位', 'content' => '在 [车位号] 存在违规停车。例如:在 2-103 存在违规停车。', 'remark' => '', 'created_at' => $created_at, 'updated_at' => $created_at, 'translation' => [ ['Illegal Parking', '違規停車'], ['Vehicle is parked in the wrong space', '車輛停放在錯誤的車位'], [ 'Illegal parking detected at [Space No.]. Example: detected at space 2-103.', '在[車位號]存在違規停車。 例如:在2-103存在違規停車。' ], ['', ''] ] ], [ 'name' => '设备故障告警', 'type' => 1, 'notice_type' => 2, 'level' => 2, 'condition' => '硬件掉线', 'content' => '[设备类型] [设备ID] 无响应。', 'remark' => '涵盖道闸、摄像头、余位屏、红绿指示灯、车道诱导屏等;需现场或远程排查。', 'created_at' => $created_at, 'updated_at' => $created_at, 'translation' => [ ['Device Fault Alarm', '設備故障告警'], ['Hardware disconnected', '硬體掉線'], [ '[Device Type] [Device ID] is not responding.', '[設備類型] [設備ID]無響應。' ], [ 'Covers barriers, cameras, occupancy displays, signal lights, lane guidance screens, etc.; requires on-site or remote troubleshooting.', '涵蓋道閘、監視器、餘比特、紅綠指示燈、車道誘導屏等; 需現場或遠程排查。' ] ] ], [ 'name' => '车辆重复进场', 'type' => 1, 'notice_type' => 1, 'level' => 2, 'condition' => '同一车牌入场且无对应出场记录', 'content' => '车牌 [车牌号] 重复入场,请核对出场记录。', 'remark' => '需人工确认系统误差或漏扫出场。', 'created_at' => $created_at, 'updated_at' => $created_at, 'translation' => [ ['Duplicate Entry', '車輛重複進場'], [ 'Same plate entered again with no matching exit record', '同一車牌入場且無對應出場記錄' ], [ 'Plate [Plate No.] has entered repeatedly. Please verify the exit record.', '車牌[車牌號]重複入場,請核對出場記錄。' ], [ 'Requires manual confirmation of system error or missed exit scan.', '需人工確認系統誤差或漏掃出場。' ] ] ], [ 'name' => '非法闯入/跟车', 'type' => 1, 'notice_type' => 1, 'level' => 1, 'condition' => '跟车闯关或强行闯入', 'content' => '车道 [车道编号] 检测到非法闯入或跟车行为。', 'remark' => '安全与营收风险高,需复核录像与道闸日志。', 'created_at' => $created_at, 'updated_at' => $created_at, 'translation' => [ ['Illegal Intrusion / Tailgating', '非法闖入/跟車'], [ 'Tailgating through the barrier or forced entry', '跟車闖關或强行闖入' ], [ 'Illegal intrusion or tailgating detected on lane [Lane No.].', '車道[車道編號]檢測到非法闖入或跟車行為。' ], [ 'High safety and revenue risk; review surveillance footage and barrier logs.', '安全與營收風險高,需覆核錄影與道閘日誌。' ] ] ], [ 'name' => '跨线/违规占用', 'type' => 1, 'notice_type' => 1, 'level' => 3, 'condition' => '跨线停放、燃油车占充电位、非 VIP 占用专属位等', 'content' => '车位 [车位号] 存在跨线或违规占用,请派员处理。', 'remark' => '需巡逻人员联系车主或到场处置。', 'created_at' => $created_at, 'updated_at' => $created_at, 'translation' => [ ['Line-Crossing / Illegal Occupancy', '跨線/違規佔用'], [ 'Line-crossing parking, fuel vehicles occupying charging spaces, non-VIP occupying reserved spaces, etc.', '跨線停放、燃油車占充電位、非VIP佔用專屬比特等' ], [ 'Line-crossing or illegal occupancy detected at space [Space No.]. Please dispatch staff.', '車位[車位號]存在跨線或違規佔用,請派員處理。' ], [ 'Patrol staff should contact the owner or handle it on site.', '需巡邏人員聯系車主或到場處置。' ] ] ], [ 'name' => '模式切换告警', 'type' => 1, 'notice_type' => 2, 'level' => 2, 'condition' => '模式切换时超过 20% 设备未成功切换', 'content' => '模式切换失败设备占比 [百分比],超过阈值 20%。', 'remark' => '需核对设备清单与下发日志。', 'created_at' => $created_at, 'updated_at' => $created_at, 'translation' => [ ['Mode Switch Alarm', '模式切換告警'], [ 'More than 20% of devices failed during mode switching', '模式切換時超過20%設備未成功切換' ], [ 'The proportion of devices that failed to switch mode is [Percentage], exceeding the 20% threshold.', '模式切換失敗設備占比[百分比],超過閾值20%。' ], [ 'Verify the device list and dispatch logs.', '需核對設備清單與下發日誌。' ] ] ], [ 'name' => '车道拥堵告警', 'type' => 1, 'notice_type' => 1, 'level' => 3, 'condition' => '车道平均车速低于设定阈值', 'content' => '车道 [车道编号] 平均车速低于阈值,可能存在拥堵。', 'remark' => '', 'created_at' => $created_at, 'updated_at' => $created_at, 'translation' => [ ['Lane Congestion Alarm', '車道擁堵告警'], [ 'Average lane speed is below the configured threshold', '車道平均車速低於設定閾值' ], [ 'Average speed on lane [Lane No.] is below the threshold. Congestion may exist.', '車道[車道編號]平均車速低於閾值,可能存在擁堵。' ], ['', ''] ] ], [ 'name' => '碰撞告警', 'type' => 1, 'notice_type' => 1, 'level' => 2, 'condition' => '场区内检测到疑似车辆碰撞', 'content' => '区域 [区域] 检测到疑似碰撞事件,请查看监控。', 'remark' => '', 'created_at' => $created_at, 'updated_at' => $created_at, 'translation' => [ ['Collision Alarm', '碰撞告警'], [ 'Suspected vehicle collision detected in the area', '場區內檢測到疑似車輛碰撞' ], [ 'A suspected collision has been detected in area [Area]. Please check the surveillance feed.', '區域[區域]檢測到疑似碰撞事件,請查看監控。' ], ['', ''] ] ], [ 'name' => '停车超时告警', 'type' => 1, 'notice_type' => 1, 'level' => 3, 'condition' => '车辆停放超过允许最长时间(如 48 小时)', 'content' => '车位 [车位号] 停车时长超过 [时长] 小时。', 'remark' => '用于识别「僵尸车」或漏扫出场。', 'created_at' => $created_at, 'updated_at' => $created_at, 'translation' => [ ['Overtime Parking Alarm', '停車超時告警'], [ 'Vehicle has parked longer than the allowed maximum duration (e.g. 48 hours)', '車輛停放超過允許最長時間(如48小時)' ], [ 'Parking duration at space [Space No.] has exceeded [Duration] hours.', '車位[車位號]停車時長超過[時長]小時。' ], [ 'Used to identify long-term parked vehicles or missed exit scans.', '用於識別「僵屍車」或漏掃出場。' ] ] ], [ 'name' => '准入权限拦截', 'type' => 2, 'notice_type' => 1, 'level' => 4, 'condition' => '非预约/无权限车辆尝试进入管制区域', 'content' => '车辆 [车牌号] 无准入权限,已自动拦截并记录。', 'remark' => '系统自动拦截并记日志,一般无需到场。', 'created_at' => $created_at, 'updated_at' => $created_at, 'translation' => [ ['Access Permission Blocked', '准入許可權攔截'], [ 'Unreserved / unauthorized vehicle attempted to enter a controlled area', '非預約/無許可權車輛嘗試進入管制區域' ], [ 'Vehicle [Plate No.] has no access permission and was automatically blocked and logged.', '車輛[車牌號]無准入許可權,已自動攔截並記錄。' ], [ 'Automatically blocked and logged by the system; usually no on-site action is required.', '系統自動攔截並記日誌,一般無需到場。' ] ] ], [ 'name' => '运行模式变更', 'type' => 2, 'notice_type' => 1, 'level' => 5, 'condition' => '系统按日程自动切换运行模式', 'content' => '系统已自动切换至 [当前模式](如赛事日模式)。', 'remark' => '', 'created_at' => $created_at, 'updated_at' => $created_at, 'translation' => [ ['Operating Mode Changed', '運行模式變更'], [ 'System automatically switched operating mode according to the schedule', '系統按日程自動切換運行模式' ], [ 'The system has automatically switched to [Current Mode] (e.g. Event Day Mode).', '系統已自動切換至[當前模式](如賽事日模式)。' ], ['', ''] ] ], [ 'name' => 'VIP 到达提醒', 'type' => 2, 'notice_type' => 1, 'level' => 3, 'condition' => '高等级会员或指定车辆进入', 'content' => 'VIP 车辆 [车牌号] 已进入,可提供礼宾服务。', 'remark' => '用于礼宾与接待协同。', 'created_at' => $created_at, 'updated_at' => $created_at, 'translation' => [ ['VIP Arrival Reminder', 'VIP 到達提醒'], [ 'High-tier member or specified vehicle has entered', '高等級會員或指定車輛進入' ], [ 'VIP vehicle [Plate No.] has entered. Concierge service can be prepared.', 'VIP 車輛[車牌號]已進入,可提供禮賓服務。' ], [ 'Used for concierge and reception coordination.', '用於禮賓與接待協同。' ] ] ], [ 'name' => '维修车位定时提醒', 'type' => 2, 'notice_type' => 1, 'level' => 5, 'condition' => '每日定时汇总', 'content' => '当前维修中车位共 [数量] 个,明细见附件/报表。', 'remark' => '', 'created_at' => $created_at, 'updated_at' => $created_at, 'translation' => [ ['Maintenance Space Scheduled Reminder', '維修車位定時提醒'], ['Daily scheduled summary', '每日定時匯總'], [ 'There are currently [Count] spaces under maintenance. See the attachment/report for details.', '當前維修中車位共[數量]個,明細見附件/報表。' ], ['', ''] ] ], [ 'name' => '数据更新', 'type' => 2, 'notice_type' => 1, 'level' => 5, 'condition' => '模式、车位数、活动、预约等数据发生更新', 'content' => '数据域 [名称] 已更新,版本 [版本号]。', 'remark' => '操作审计与变更留痕。', 'created_at' => $created_at, 'updated_at' => $created_at, 'translation' => [ ['Data Update', '數據更新'], [ 'Modes, space counts, activities, reservations, or other data have been updated', '模式、車位數、活動、預約等數據發生更新' ], [ 'Data domain [Name] has been updated to version [Version].', '數據域[名稱]已更新,版本[版本號]。' ], [ 'For operation audit and change traceability.', '操作稽核與變更留痕。' ] ] ] ]; } // 创建翻译 protected function createTranslation($translation, $item, $id, $created_at) { $values = []; foreach ($translation as $key => $value) { if (!empty($value[0])) { if ($key == 1) { $zh_cn = $item['condition']; } elseif ($key == 2) { $zh_cn = $item['content']; } elseif ($key == 3) { $zh_cn = $item['remark']; } else { $zh_cn = $item['name']; } $values[] = [ 'en' => $value[0], 'zh_cn' => $zh_cn, 'zh_tw' => $value[1], 'type_id' => $id, 'type' => '10' . $key, 'created_at' => $created_at ]; } } if ($values) { DB::table('admin_translation')->insert($values); } } }