where('slug','like','%'.$mine_code.'%')->where('parent_id',0)->where('deleted_at',null)->first(); if (!$mine) { $result['status'] = false; $result['msg'] = '矿区名称不存在'; return $result; } $mine_list = DB::table('mine_list')->where('degree', 'like', $mine->id . '|' . '%')->where('deleted_at',null)->get(); $mine_array = []; foreach($mine_list as $k=>$v){ $mine_array[] = $v->id; } $query = CameraList::where('is_show', CameraEnum::IS_SHOW_YES)->where('deleted_at',null)->whereIn('mine_id',$mine_array)->where('camera_type',$camera_type)->orderBy('sort', 'desc')->get(); if (!$query) { $result['status'] = false; $result['msg'] = '矿区下没有摄像头'; return $result; } $result = []; foreach($query as $k=>$v){ $result[$k]['id'] = $v->id; $result[$k]['mine_id'] = $v->mine_id; $result[$k]['camera_name'] = $v->camera_name; $result[$k]['cover_picture'] = $v->cover_picture; $result[$k]['camera_status'] = $v->camera_status; $result[$k]['playback'] = $v->playback; } return self::successResponse($result); } //宁煤摄像头统计 public function getTotalNingmei(){ $result['status'] = true; $result['msg'] = ApiEnum::RETURN_SUCCESS; //宁煤集团 $ningmei = DB::table('mine_list')->where('title',config('mine_hls'))->get(); $mine_all = DB::table('mine_list')->where('deleted_at',null)->get();//所有区域 $mine_ningmei = [];//宁煤集团所有区域 foreach($mine_all as $k=>$v){ if(explode('|',$v->degree)[0] == $ningmei[0]->id){ $mine_ningmei[] = $v->id; } } //宁煤在离线数量 $data[$ningmei[0]->title]['total'] = DB::table('camera_list')->whereIn('mine_id',$mine_ningmei)->where('deleted_at',null)->count(); $data[$ningmei[0]->title]['total_online'] = DB::table('camera_list')->whereIn('mine_id',$mine_ningmei)->where('camera_status',1)->where('deleted_at',null)->count(); $data[$ningmei[0]->title]['total_offline'] = $data[$ningmei[0]->title]['total'] - $data[$ningmei[0]->title]['total_online']; //宁煤下各矿在离线数量 $mine_list = DB::table('mine_list')->where('parent_id',$ningmei[0]->id)->where('deleted_at',null)->get(); foreach($mine_list as $k => $v){ $mine_use = [];//宁煤下每个矿所有区域 foreach($mine_all as $key=>$value){ if(count(explode('|',$value->degree)) > 1){ if(explode('|',$value->degree)[0] == $ningmei[0]->id && explode('|',$value->degree)[1] == $v->id){ $mine_use[] = $value->id; } } } $data[$v->title]['total'] = DB::table('camera_list')->whereIn('mine_id',$mine_use)->where('deleted_at',null)->count(); $data[$v->title]['total_online'] = DB::table('camera_list')->whereIn('mine_id',$mine_use)->where('camera_status',1)->where('deleted_at',null)->count(); $data[$v->title]['total_offline'] = $data[$v->title]['total'] - $data[$v->title]['total_online']; } return self::successResponse($data); } //宁煤高风险摄像头 public function getRiskNingmei(){ $mine_code = Input::get('mine_code', ''); if (!$mine_code) { return self::errorResponse(ApiEnum::STATUS_CODE_EMPTY); } $result['status'] = true; $result['msg'] = ApiEnum::RETURN_SUCCESS; //宁煤集团 $ningmei = DB::table('mine_list')->where('title',config('mine_hls'))->get(); //宁煤集团下级单位 $mine = DB::table('mine_list') ->where('parent_id',$ningmei[0]->id) ->where('slug','like','%'.$mine_code.'%') ->where('deleted_at',null) ->get(); //子区域树形列表 $child_list = DB::table('mine_list')->where('parent_id',$mine[0]->id)->where('deleted_at',null)->orderBy('sort','desc')->get(); $risk_id = null; if(count($child_list)>0){ $risk_id = $this->mineTree($child_list); } $mine_list = []; if($risk_id != null){ $risk = DB::table('mine_list')->where('parent_id',$risk_id)->where('deleted_at',null)->get(); if(count($risk) > 0){ //有子区域 $mine_list = $this->riskTree($risk,[]); }else{ //没有子区域 $mine_list[] = $risk_id; } } $camera_list = DB::table('camera_list') ->select('camera_list.*','mine_list.title') ->leftJoin('mine_list','camera_list.mine_id','=','mine_list.id') ->where('camera_list.deleted_at',null) ->whereIn('camera_list.mine_id',$mine_list) ->orderBy('sort', 'desc')->get(); $result = []; foreach($camera_list as $k=>$v){ $result[$k]['parent_id'] = $ningmei[0]->id; $result[$k]['camera_id'] = $v->id; $result[$k]['mine_name'] = $v->title; $result[$k]['camera_name'] = $v->camera_name; $result[$k]['cover_picture'] = $v->cover_picture; $result[$k]['camera_status'] = $v->camera_status; $result[$k]['base64'] = $v->base64; } return self::successResponse($result); } public function mineTree($regions) { $arr = null; foreach ($regions as $key => $value) { $risk = explode('高风险作业',$value->title); if (count($risk)>1){ return $value->id; } $mine_child = DB::table('mine_list')->where('parent_id', $value->id)->where('deleted_at',null)->get(); if (count($mine_child) > 0) { $arr = self::mineTree($mine_child, $value->id); if($arr != null){ return $arr; } } } return $arr; } public function riskTree($regions,$risk_list) { foreach ($regions as $key => $value) { $risk_child = DB::table('mine_list')->where('parent_id', $value->id)->where('deleted_at',null)->get(); if (count($risk_child) > 0) { $risk_list = array_merge($risk_list,self::riskTree($risk_child,[])); }else{ $risk_list[] = $value->id; } } return $risk_list; } //高风险区域摄像头 public function getCameraByMinecode(){ $mine_code = Input::get('mine_code', ''); if (!$mine_code) { return self::errorResponse(ApiEnum::STATUS_CODE_EMPTY); } $result['status'] = true; $result['msg'] = ApiEnum::RETURN_SUCCESS; $mine = DB::table('mine_list')->where('slug','like','%'.$mine_code.'%')->where('parent_id',0)->where('deleted_at',null)->first(); if (!$mine) { $result['status'] = false; $result['msg'] = '矿区名称不存在'; return $result; } $mine_list = DB::table('mine_list')->where('degree', 'like', $mine->id . '|' . '%')->where('title','like','%高风险%')->where('deleted_at',null)->get(); $mine_array = []; foreach($mine_list as $k=>$v){ $mine_child = DB::table('mine_list')->where('degree', 'like','%' . $v->id . '%')->where('deleted_at',null)->get(); if(count($mine_child)>0){ for($i=0;$iid; } } } $query = DB::table('camera_list') ->select('camera_list.*','mine_list.title') ->leftJoin('mine_list','camera_list.mine_id','=','mine_list.id') ->where('camera_list.deleted_at',null) ->whereIn('camera_list.mine_id',$mine_array) ->orderBy('sort', 'desc')->get(); if (!$query) { $result['status'] = false; $result['msg'] = '矿区下没有摄像头'; return $result; } $result = []; foreach($query as $k=>$v){ $result[$k]['parent_id'] = $mine->id; $result[$k]['camera_id'] = $v->id; $result[$k]['mine_name'] = $v->title; $result[$k]['camera_name'] = $v->camera_name; $result[$k]['cover_picture'] = $v->cover_picture; $result[$k]['camera_status'] = $v->camera_status; } return self::successResponse($result); } /** * 作者: qiuzijian * 注释: 获取摄像头列表 * @return \App\Http\Controllers\Api\JsonResponse */ public function getCamerasList() { $parent_id = Input::get('parent_id', ''); $mine_id = Input::get('mine_id', ''); $camera_type = Input::get('camera_type', CameraEnum::CAMERA_TYPE_ALL); $surface_id = Input::get('surface_id', ''); if (!$parent_id) { return self::errorResponse(ApiEnum::STATUS_CODE_EMPTY); } if (!in_array($camera_type, [CameraEnum::CAMERA_TYPE_NORMAL, CameraEnum::CAMERA_TYPE_ALL]) && !$surface_id) { return self::errorResponse(ApiEnum::STATUS_CODE_EMPTY); } //判断是否使用海康视频服务器 // $is_hak = MineListExt::where('mine_id', $parent_id)->value('is_hak'); // if ($is_hak) { // $result = CameraServices::getHaiKangCamera($parent_id, $mine_id, $camera_type); // } else { $result = CameraServices::getCameraListByMineId($mine_id, $camera_type, $parent_id, $surface_id); // } return self::successResponse($result); } /** * 作者: qiuzijian * 注释: 获取摄像头播放地址 * @return \App\Http\Controllers\Api\JsonResponse */ public function getCamerasUrl() { $parent_id = Input::get('parent_id', ''); $camera_id = Input::get('camera_id', ''); if (!$parent_id || !$camera_id) { return self::errorResponse(ApiEnum::STATUS_CODE_EMPTY); } //判断摄像头来源是否为内网服务器 $camera_source = CameraList::where('id', $camera_id)->value('camera_source'); if ($camera_source == CameraEnum::CAMERA_SOURCE_3) { $result = CameraServices::getIntranetCameraUrl($camera_id); return self::successResponse($result); } //判断是否使用海康视频服务器 $is_hak = MineListExt::where('mine_id', $parent_id)->value('is_hak'); //判断是否生成摄像头请求链接 $camera_url = CameraList::where('id', $camera_id)->value('camera_url'); if ($is_hak && !$camera_url) { //判断是否是mine配置文件的矿区 $mine_res = DB::table('mine_list')->where('id',$parent_id)->get(); //天地伟业 if(isset($mine_res[0]->title) && in_array($mine_res[0]->title,config('mine'))){ $result = CameraServices::getRtspTianDi($camera_id,$parent_id); //宁煤集团 }elseif(isset($mine_res[0]->title) && in_array($mine_res[0]->title,config('mine_hls'))){ $result = CameraServices::getHkHls($camera_id,$parent_id); //信息技术中心测试ws协议 }elseif($mine_res[0]-> slug == 'XinXiJiShuZhongXin'){ $result = CameraServices::getHkWs($camera_id,$parent_id); //海康切片逻辑 }else{ $result = CameraServices::downloadCameraFiles($parent_id, $camera_id); } } else { //判断硬盘录像机的有没有封面图,有的走easydrawin,没有的走ffmpeg $cover_picture = CameraList::where('id', $camera_id)->value('cover_picture'); // if(!$cover_picture){ //ffmpeg拉流获取首帧图片 // $result = CameraServices::getCameraUrlByFfmpeg($camera_id); // }else{ $result = CameraServices::getCameraUrlByCameraId($camera_id); // } } return self::successResponse($result); } public function getCamerasLanUrl() { $parent_id = Input::get('parent_id', ''); $camera_id = Input::get('camera_id', ''); if (!$parent_id || !$camera_id) { return self::errorResponse(ApiEnum::STATUS_CODE_EMPTY); } //判断摄像头来源是否为内网服务器 $camera_source = CameraList::where('id', $camera_id)->value('camera_source'); if ($camera_source == CameraEnum::CAMERA_SOURCE_3) { $result = CameraServices::getIntranetCameraUrl($camera_id); return self::successResponse($result); } //判断是否使用海康视频服务器 $is_hak = MineListExt::where('mine_id', $parent_id)->value('is_hak'); //判断是否生成摄像头请求链接 $camera_url = CameraList::where('id', $camera_id)->value('camera_url'); if ($is_hak && !$camera_url) { //判断是否是mine配置文件的矿区 $mine_res = DB::table('mine_list')->where('id',$parent_id)->get(); //天地伟业 if(isset($mine_res[0]->title) && in_array($mine_res[0]->title,config('mine'))){ $result = CameraServices::getRtspTianDi($camera_id,$parent_id); //宁煤集团 }elseif(isset($mine_res[0]->title) && in_array($mine_res[0]->title,config('mine_hls'))){ $result = CameraServices::getHkHls($camera_id,$parent_id); }else{ $result = CameraServices::getLanCameraUrl($parent_id, $camera_id); } } else { //判断硬盘录像机的有没有封面图,有的走easydrawin,没有的走ffmpeg $cover_picture = CameraList::where('id', $camera_id)->value('cover_picture'); // if(!$cover_picture){ //ffmpeg拉流获取首帧图片 // $result = CameraServices::getCameraUrlByFfmpeg($camera_id); // }else{ $result = CameraServices::getCameraUrlByCameraId($camera_id); // } } return self::successResponse($result); } //获取海康rtsp流 public function getHikRtsp(){ $parent_id = Input::get('parent_id', ''); $camera_id = Input::get('camera_id', ''); if (!$parent_id || !$camera_id) { return self::errorResponse(ApiEnum::STATUS_CODE_EMPTY); } //判断是否使用海康视频服务器 $is_hak = MineListExt::where('mine_id', $parent_id)->value('is_hak'); //判断是否生成摄像头请求链接 $camera_url = CameraList::where('id', $camera_id)->value('camera_url'); if ($is_hak == 1 && !$camera_url) { $result = CameraServices::getHkRtsp($camera_id,$parent_id); return self::successResponse($result); }else{ return self::errorResponse(ApiEnum::HK_REQUEST_FAIL); } } //获取海康rtmp流 public function getHikRtmp(){ $parent_id = Input::get('parent_id', ''); $camera_id = Input::get('camera_id', ''); if (!$parent_id || !$camera_id) { return self::errorResponse(ApiEnum::STATUS_CODE_EMPTY); } //判断是否使用海康视频服务器 $is_hak = MineListExt::where('mine_id', $parent_id)->value('is_hak'); //判断是否生成摄像头请求链接 $camera_url = CameraList::where('id', $camera_id)->value('camera_url'); if ($is_hak == 1 && !$camera_url) { $result = CameraServices::getHkRtmp($camera_id,$parent_id); return self::successResponse($result); }else{ return self::errorResponse(ApiEnum::HK_REQUEST_FAIL); } } //海康摄像头easy_drawin方式获取url public function getCamerasRtsp() { $parent_id = Input::get('parent_id', ''); $camera_id = Input::get('camera_id', ''); if (!$parent_id || !$camera_id) { return self::errorResponse(ApiEnum::STATUS_CODE_EMPTY); } //判断摄像头来源是否为内网服务器 $camera_source = CameraList::where('id', $camera_id)->value('camera_source'); if ($camera_source == CameraEnum::CAMERA_SOURCE_3) { $result = CameraServices::getIntranetCameraUrl($camera_id); return self::successResponse($result); } //判断是否使用海康视频服务器 $is_hak = MineListExt::where('mine_id', $parent_id)->value('is_hak'); //判断是否生成摄像头请求链接 $camera_url = CameraList::where('id', $camera_id)->value('camera_url'); if ($is_hak && !$camera_url) { //判断是否是mine配置文件的矿区 $mine_res = DB::table('mine_list')->where('id',$parent_id)->get(); if(isset($mine_res[0]->title) && in_array($mine_res[0]->title,config('mine'))){ //天地伟业使用easy_drawin获取rtsp $result = CameraServices::getRtspTianDi($camera_id,$parent_id); }else{ //海康使用easy_drawin获取rtsp $result = CameraServices::getRtspHaiKang($camera_id, $parent_id); } } else { //硬盘录像机使用easy_drawin获取rtsp $result = CameraServices::getRtspYingPan($camera_id); } return self::successResponse($result); } /** * 作者: qiuzijian * 注释: 停止摄像头推流 * @return \App\Http\Controllers\Api\JsonResponse */ public function stopCamerasStream() { $camera_id = Input::get('camera_id', ''); $result = CameraServices::stopCameraStream(); return self::successResponse($result); } //回放列表 public function getPlaybackList(){ $camera_id = Input::get('camera_id', ''); $result['status'] = true; $result['msg'] = ApiEnum::RETURN_SUCCESS; if (!$camera_id) { $result['status'] = false; $result['msg'] = ApiEnum::STATUS_CODE_EMPTY; return $result; } $query = CameraList::where('id', $camera_id)->first(); if (!$query) { $result['status'] = false; $result['msg'] = ApiEnum::NO_CAMERA_URL; return $result; } if($query->playback == 0){ $result['status'] = false; $result['msg'] = ApiEnum::NO_SUPORT_PLAYBACK; return $result; } $playback = DB::table('playback')->where('camera_id',$query->id)->where('deleted_at',null)->get(); if(count($playback)>0){ for($i=0;$ititle; $result['data'][$i]['start_time'] = $playback[$i]->start_time; $result['data'][$i]['end_time'] = $playback[$i]->end_time; $result['data'][$i]['camera_id'] = $playback[$i]->camera_id; } }else{ $result['data'] = null; } return $result; } //回放URL public function getPlaybackUrl(){ $time['start_time'] = explode(' ',Input::get('start_time', ''))[1]; $time['end_time'] = explode(' ',Input::get('end_time', ''))[1]; $camera_id = Input::get('camera_id', ''); $start_time = Input::get('start_time', ''); $end_time = Input::get('end_time', ''); $result['status'] = true; $result['msg'] = ApiEnum::RETURN_SUCCESS; if (!$camera_id || !$start_time || !$end_time) { $result['status'] = false; $result['msg'] = ApiEnum::STATUS_CODE_EMPTY; return $result; } $query = CameraList::where('id', $camera_id)->first(); if (!$query) { $result['status'] = false; $result['msg'] = ApiEnum::NO_CAMERA_URL; return $result; } if($query->playback == 0){ $result['status'] = false; $result['msg'] = ApiEnum::NO_SUPORT_PLAYBACK; return $result; } $degree = MineList::where('id', $query->mine_id)->value('degree'); $degree = explode('|', $degree)[0]; $mine_res = DB::table('mine_list')->where('id',$degree)->get(); //判断摄像头是否是洗选中心的时间+34分钟 if($mine_res[0]->slug == 'XiXuanZhongXin'){ $start_time = date('Y-m-d H:i:s',strtotime($start_time.'+34 minutes')); $end_time = date('Y-m-d H:i:s',strtotime($end_time.'+34 minutes')); } $str = '.000+'; $start_time = date('c', strtotime($start_time));//2022-07-14T08:00:00.000+08:00 $start_time = explode('+',$start_time); $start_time = $start_time[0].$str.$start_time[1]; $end_time = date('c', strtotime($end_time)); $end_time = explode('+',$end_time); $end_time = $end_time[0].$str.$end_time[1]; //判断是否在配置文件里,在的不用走ffmpeg if(isset($mine_res[0]->title) && in_array($mine_res[0]->title,config('playback'))){ $result = CameraServices::getPlaybackRtsp($camera_id,$start_time,$end_time); return self::successResponse($result); }else{ $result = CameraServices::getPlaybackRtmp($camera_id,$start_time,$end_time,$time); return self::successResponse($result); } } //easydrawin回放URL public function getPlaybackUrlByEasy(){ $time['start_time'] = explode(' ',Input::get('start_time', ''))[1]; $time['end_time'] = explode(' ',Input::get('end_time', ''))[1]; $camera_id = Input::get('camera_id', ''); $start_time = Input::get('start_time', ''); $end_time = Input::get('end_time', ''); $result['status'] = true; $result['msg'] = ApiEnum::RETURN_SUCCESS; if (!$camera_id || !$start_time || !$end_time) { $result['status'] = false; $result['msg'] = ApiEnum::STATUS_CODE_EMPTY; return $result; } $query = CameraList::where('id', $camera_id)->first(); if (!$query) { $result['status'] = false; $result['msg'] = ApiEnum::NO_CAMERA_URL; return $result; } if($query->playback == 0){ $result['status'] = false; $result['msg'] = ApiEnum::NO_SUPORT_PLAYBACK; return $result; } $degree = MineList::where('id', $query->mine_id)->value('degree'); $degree = explode('|', $degree)[0]; $mine_res = DB::table('mine_list')->where('id',$degree)->get(); //判断摄像头是否是洗选中心的时间+34分钟 if($mine_res[0]->slug == 'XiXuanZhongXin'){ $start_time = date('Y-m-d H:i:s',strtotime($start_time.'+34 minutes')); $end_time = date('Y-m-d H:i:s',strtotime($end_time.'+34 minutes')); } $str = '.000+'; $start_time = date('c', strtotime($start_time));//2022-07-14T08:00:00.000+08:00 $start_time = explode('+',$start_time); $start_time = $start_time[0].$str.$start_time[1]; $end_time = date('c', strtotime($end_time)); $end_time = explode('+',$end_time); $end_time = $end_time[0].$str.$end_time[1]; //判断是否在配置文件里,在的不用走ffmpeg if(isset($mine_res[0]->title) && in_array($mine_res[0]->title,config('playback'))){ $result = CameraServices::getPlaybackRtsp($camera_id,$start_time,$end_time); return self::successResponse($result); }else{ $result = CameraServices::getPlaybackByEasy($camera_id,$start_time,$end_time,$time); return self::successResponse($result); } } /** * 作者: qiuzijian * 注释: 获取编码设备信息 * @return \App\Http\Controllers\Api\JsonResponse */ public function getTranscodeInfo() { $parent_id = Input::get('parent_id', ''); if (!$parent_id) { return self::errorResponse(ApiEnum::STATUS_CODE_EMPTY); } $result = CameraServices::getHaiKangTransCode($parent_id); return self::successResponse($result); } /** * 作者: qiuzijian * 注释: 获取大南湖摄像头列表 * @return \App\Http\Controllers\Api\JsonResponse */ public function getSouthLakeCamera() { $result = CameraServices::getLeChangeCamera(); return self::successResponse($result); } public function pictureBase64(){ $base64 = Input::get('base64', ''); $camera_id = Input::get('camera_id', ''); if (!$base64 || !$camera_id) { return self::errorResponse(ApiEnum::STATUS_CODE_EMPTY); } $data['base64'] = $base64; DB::table('camera_list')->where('id',$camera_id)->update($data); return self::successResponse(); } public function test(){ header("Access-Control-Allow-Origin: *"); $data = DB::table('goods')->get(); return $data; } }