Browse Source

Merge remote-tracking branch 'origin/master'

q 1 year atrás
parent
commit
37bdc0271e

+ 125 - 0
Modules/Admin/Http/Controllers/Api/ApiController.php

@@ -0,0 +1,125 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: qiuzijian
+ * Date: 6/22/24
+ * Time: 12:32 PM
+ */
+
+namespace Modules\Admin\Http\Controllers\Api;
+
+use App\Enum\ApiEnum;
+use App\Http\Controllers\Api\BaseController;
+use App\Http\Controllers\Controller;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Input;
+use Modules\Admin\Entities\User;
+use Modules\Admin\Http\Requests\TokenRequest;
+use Modules\Admin\Services\ApiService;
+use Modules\Staff\Entities\Staff;
+use Symfony\Component\HttpFoundation\Response;
+
+class ApiController extends BaseController
+{
+    //网格化录入
+    public function addConition(Request $request)
+    {
+        $params = Input::get();
+        if (!$params) {
+            return self::errorResponse(ApiEnum::STATUS_CODE_EMPTY);
+        }
+        $result = ApiService::addConition($params);
+        return self::successResponse($result);
+    }
+
+    //网格化人员轨迹查询条件
+    public function getQueryConition(Request $request)
+    {
+        $date = Input::get('date', '');
+        if (!$date) {
+            return self::errorResponse(ApiEnum::STATUS_CODE_EMPTY);
+        }
+        $result = ApiService::getQueryConitions($date);
+        return self::successResponse($result);
+    }
+
+    //网格化人员轨迹
+    public function getPersonTravel(Request $request)
+    {
+        $person_id = Input::get('person_id', '');
+        $depart = Input::get('depart', '');
+        $date = Input::get('date', '');
+        if (!$person_id || !$depart) {
+            return self::errorResponse(ApiEnum::STATUS_CODE_EMPTY);
+        }
+        $result = ApiService::getPersonTravel($person_id, $depart, $date);
+        return self::successResponse($result);
+    }
+
+    //网格化巡检记录查询条件
+    public function getResultConition()
+    {
+        $result = ApiService::getResultConition();
+        return self::successResponse($result);
+    }
+
+    //网格化巡检记录查询
+    public function getResultRecord()
+    {
+        $depart = Input::get('depart', 'all');
+        $date_type = Input::get('date_type', 'week');
+        $result = ApiService::getResultRecord($depart, $date_type);
+        return self::successResponse($result);
+    }
+
+    //网格化巡检记录列表
+    public function getResultList()
+    {
+        $person_id = Input::get('person_id', '');
+        $depart = Input::get('depart', 'all');
+        $date_type = Input::get('date_type', 'week');
+        if (!$person_id) {
+            return self::errorResponse(ApiEnum::STATUS_CODE_EMPTY);
+        }
+        $result = ApiService::getResultList($person_id, $depart, $date_type);
+        return self::successResponse($result);
+    }
+
+    //网格化巡检记录列表明细
+    public function getResultDlist()
+    {
+        $person_id = Input::get('person_id', '');
+        $depart = Input::get('depart', '');
+        $date = Input::get('date', '');
+        if (!$person_id || !$depart || !$date) {
+            return self::errorResponse(ApiEnum::STATUS_CODE_EMPTY);
+        }
+        $result = ApiService::getResultDlist($person_id, $depart, $date);
+        return self::successResponse($result);
+    }
+
+    //网格化巡检记录明细
+    public function getResultDetail()
+    {
+        $id = Input::get('id', '');
+        if (!$id) {
+            return self::errorResponse(ApiEnum::STATUS_CODE_EMPTY);
+        }
+        $result = ApiService::getResultDetails($id);
+        return self::successResponse($result);
+    }
+
+    //网格化巡检记录
+    public function getFinalList()
+    {
+        $start_date = Input::get('start_date', '');
+        $end_date = Input::get('end_date', '');
+        $depart = Input::get('depart', '');
+        $person = Input::get('person', '');
+        if (!$start_date || !$end_date) {
+            return self::errorResponse(ApiEnum::STATUS_CODE_EMPTY);
+        }
+        $result = ApiService::getFinalList($start_date, $end_date, $depart, $person);
+        return self::successResponse($result);
+    }
+}

+ 19 - 0
Modules/Admin/Routes/api.php

@@ -21,4 +21,23 @@ Route::namespace('Api')->group(function () {
     //获取api认证token
     Route::post('oauth/token', 'TokenController@token');
     Route::post('check_token', 'TokenController@checkToken');
+
+    //网格化录入
+    Route::post('fanwei/add_conition', 'ApiController@addConition');
+    //网格化人员轨迹查询条件
+    Route::post('fanwei/get_query_conition', 'ApiController@getQueryConition');
+    //网格化人员轨迹
+    Route::post('fanwei/get_person_travel', 'ApiController@getPersonTravel');
+    //网格化巡检记录查询条件
+    Route::post('fanwei/get_result_conition', 'ApiController@getResultConition');
+    //网格化巡检记录查询
+    Route::post('fanwei/get_result_record', 'ApiController@getResultRecord');
+    //网格化巡检记录列表
+    Route::post('fanwei/get_result_list', 'ApiController@getResultList');
+    //网格化巡检记录列表明细
+    Route::post('fanwei/get_result_dlist', 'ApiController@getResultDlist');
+    //网格化巡检记录明细
+    Route::post('fanwei/get_result_detail', 'ApiController@getResultDetail');
+    //网格化巡检记录
+    Route::post('fanwei/get_final_list', 'ApiController@getFinalList');
 });

+ 440 - 0
Modules/Admin/Services/ApiService.php

@@ -0,0 +1,440 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: qiuzijian
+ * Date: 6/22/24
+ * Time: 12:34 PM
+ */
+
+namespace Modules\Admin\Services;
+
+use App\Enum\ApiEnum;
+use Illuminate\Support\Facades\Cache;
+use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\Log;
+use Modules\Admin\Entities\Menu;
+
+class ApiService{
+
+    public function __construct()
+    {
+
+    }
+
+    //网格化录入
+    public static function addConition($params)
+    {
+        $result['status'] = true;
+        $result['msg']    = ApiEnum::RETURN_SUCCESS;
+        $result['data']   = [];
+
+        $insert = [
+            'lrr'  => $params['lrr'],
+            'dwmc' => $params['dwmc'],
+            'xjdw' => $params['xjdw'],
+            'jcqy' => $params['jcqy'],
+            'jclx' => $params['jclx'],
+            'lrsj' => $params['lrsj'],
+            'jcwt' => $params['jcwt'],
+            'wtms' => $params['wtms'],
+            'dkpz' => $params['dkpz'],
+        ];
+
+        $res = DB::connection('mysql_fwview')->table('uf_wghgl_new')->insert($insert);
+
+        return $result;
+    }
+
+    //网格化人员轨迹查询条件
+    public static function getQueryConitions($date = '')
+    {
+        $result['status'] = true;
+        $result['msg']    = ApiEnum::RETURN_SUCCESS;
+        $result['data']   = [];
+
+        if (!$date) {
+            $date = date('Y-m-d', time());
+        }
+
+        $depart = DB::connection('mysql_fwview')->table('hrmdepartment')
+                   ->where('subcompanyid1', 49)
+                   ->where('departmentname', 'like', '%' . '洗煤厂')
+                   ->where('id', '!=', 1602)->get();
+
+        $depart_arr = [];
+        foreach ($depart as $key => $val) {
+            $depart_name = str_replace('洗选中心', '', $val->DEPARTMENTNAME);
+            $depart_arr[$key] = [
+                'name' => $depart_name,
+
+            ];
+            $query = DB::connection('mysql_fwview')->table('uf_wghgl_new')
+                       ->join('hrmresource', 'uf_wghgl_new.lrr', '=', 'hrmresource.id')
+                       ->where('xjdw', $depart_name)
+                       ->where('lrsj', 'like', '%' . $date . '%')
+                       ->groupBy('lrr')->select(
+                            [
+                                'hrmresource.lastname as person_name',
+                                'uf_wghgl_new.lrr as person_id'
+                            ]
+                        )->get();
+            $query = json_decode($query);
+            $depart_arr[$key]['person_list'] = $query;
+        }
+
+        $result['data'] = $depart_arr;
+
+        return $result;
+    }
+
+    //网格化人员轨迹
+    public static function getPersonTravel($person_id, $depart, $date = '')
+    {
+        $result['status'] = true;
+        $result['msg']    = ApiEnum::RETURN_SUCCESS;
+        $result['data']   = [];
+
+        if (!$date) {
+            $date = date('Y-m-d', time());
+        }
+
+        $res = [];
+        $area_arr = [];
+
+        $query = DB::connection('mysql_fwview')->table('uf_wghgl_new')
+                   ->where('lrr', $person_id)
+                   ->where('lrsj', 'like', '%' . $date . '%')
+                   ->where('xjdw', $depart)
+                   ->orderBy('lrsj', 'asc')->get();
+        $query = json_decode($query);
+        if ($query) {
+            foreach ($query as $key => $val) {
+                $area_arr[] = $val->jcqy;
+                $res[] = [
+                    'area'    => $val->jcqy,
+                    'date'    => $val->lrsj,
+                    'data_id' => $val->id,
+                    'url'     => '/mobilemode/formbasebrowserview.jsp?billid=' . $val->id . '&modeId=580&formId=-976',
+                ];
+            }
+            $area_list = DB::connection('mysql_fwview')->table('formtable_main_974')
+                           ->whereNotIn('qymc', $area_arr)
+                           ->where('szxmc', $depart)->orderBy('areaid', 'asc')->get();
+            foreach ($area_list as $area) {
+                $res[] = [
+                    'area'    => $area->qymc,
+                    'date'    => '',
+                    'data_id' => '',
+                    'url'     => '',
+                ];
+            }
+
+            $result['data'] = $res;
+        }
+
+        return $result;
+    }
+
+    //网格化巡检记录查询条件
+    public static function getResultConition()
+    {
+        $result['status'] = true;
+        $result['msg']    = ApiEnum::RETURN_SUCCESS;
+        $result['data']   = [];
+
+        $depart = DB::connection('mysql_fwview')->table('hrmdepartment')
+                    ->where('subcompanyid1', 49)
+                    ->where('departmentname', 'like', '%' . '洗煤厂')
+                    ->where('id', '!=', 1602)->get();
+
+        $depart_arr = [];
+        foreach ($depart as $key => $val) {
+            $depart_name = str_replace('洗选中心', '', $val->DEPARTMENTNAME);
+            $depart_arr[$key] = $depart_name;
+        }
+
+        $result['data'] = $depart_arr;
+
+        return $result;
+    }
+
+    //网格化巡检记录查询
+    public static function getResultRecord($depart = 'all', $date_type = 'week')
+    {
+        $result['status'] = true;
+        $result['msg']    = ApiEnum::RETURN_SUCCESS;
+        $result['data']   = [];
+
+        $query = DB::connection('mysql_fwview')->table('uf_wghgl_new');
+
+        if ($depart != 'all') {
+            $query = $query->where('xjdw', $depart);
+        }
+
+        if ($date_type == 'month') {
+            $query = $query->where(DB::raw('MONTH(lrsj)'), DB::raw('MONTH(CURDATE())'));
+        } else if ($date_type == 'quarter') {
+            $query = $query->where(DB::raw('QUARTER(lrsj)'), DB::raw('QUARTER(CURDATE())'));
+        } else {
+            $query = $query->where(DB::raw('WEEK(lrsj)'), DB::raw('WEEK(CURDATE())'));
+        }
+
+        $query = $query->groupBy('lrdate', 'xjdw', 'lrr', 'dwmc')
+                   ->select(
+                       [
+                           DB::raw('DATE(lrsj) as lrdate'),
+                           'xjdw',
+                           'lrr',
+                           'dwmc'
+                       ]
+                   )
+                   ->get();
+
+        $data = [];
+        $pie  = [];
+        foreach ($query as $key => $val) {
+            $lastname = DB::connection('mysql_fwview')->table('hrmresource')
+                          ->where('id', $val->lrr)->value('lastname');
+            $allcount = DB::connection('mysql_fwview')->table('formtable_main_974')
+                          ->where('szxmc', $val->xjdw)->count();
+
+            $detail = DB::connection('mysql_fwview')->table('uf_wghgl_new')
+                        ->where('xjdw', $val->xjdw)
+                        ->where(DB::raw('DATE(lrsj)'), $val->lrdate)
+                        ->where('lrr', $val->lrr)->count();
+
+            if ($allcount <= 0) {
+                continue;
+            }
+
+            if ($detail >= $allcount) {
+                $data[$val->lrr] = [
+                    'department' => $val->dwmc,
+                    'lastname'   => $lastname,
+                    'person_id'  => $val->lrr,
+                    'count'      => isset($data[$val->lrr]['count']) ? $data[$val->lrr]['count'] + 1 : 1,
+                ];
+                $pie[$val->lrr] = [
+                    'name'  => $lastname,
+                    'value' => isset($data[$val->lrr]['value']) ? $data[$val->lrr]['value'] + 1 : 1,
+                ];
+            } else {
+                continue;
+            }
+        }
+
+        $data_arr = array_column($data, 'count');
+        array_multisort($data_arr, SORT_DESC, $data);
+
+        $pie_arr = array_column($pie, 'value');
+        array_multisort($pie_arr, SORT_DESC, $pie);
+
+        $result['data']['list'] = $data;
+        $result['data']['pie']  = $pie;
+
+        return $result;
+    }
+
+    //网格化巡检记录列表
+    public static function getResultList($person_id, $depart = 'all', $date_type = 'week')
+    {
+        $result['status'] = true;
+        $result['msg']    = ApiEnum::RETURN_SUCCESS;
+        $result['data']   = [];
+
+        $query = DB::connection('mysql_fwview')->table('uf_wghgl_new')->where('lrr', $person_id);
+
+        if ($depart != 'all') {
+            $query = $query->where('xjdw', $depart);
+        }
+
+        if ($date_type == 'month') {
+            $query = $query->where(DB::raw('MONTH(lrsj)'), DB::raw('MONTH(CURDATE())'));
+        } else if ($date_type == 'quarter') {
+            $query = $query->where(DB::raw('QUARTER(lrsj)'), DB::raw('QUARTER(CURDATE())'));
+        } else {
+            $query = $query->where(DB::raw('WEEK(lrsj)'), DB::raw('WEEK(CURDATE())'));
+        }
+
+        $query = $query->groupBy('lrdate', 'xjdw')
+                       ->select(
+                           [
+                               'xjdw',
+                               DB::raw('DATE(lrsj) as lrdate'),
+                           ]
+                       )
+                       ->get();
+
+        $data = [];
+        foreach ($query as $key => $val) {
+            $lastname = DB::connection('mysql_fwview')->table('hrmresource')
+                          ->where('id', $person_id)->value('lastname');
+
+            $allcount = DB::connection('mysql_fwview')->table('formtable_main_974')
+                          ->where('szxmc', $val->xjdw)->count();
+
+            $detail = DB::connection('mysql_fwview')->table('uf_wghgl_new')
+                        ->where('xjdw', $val->xjdw)
+                        ->where(DB::raw('DATE(lrsj)'), $val->lrdate)
+                        ->where('lrr', $person_id)->count();
+
+            if ($allcount <= 0) {
+                continue;
+            }
+
+            if ($detail >= $allcount) {
+                $data[] = [
+                    'lastname'   => $lastname,
+                    'person_id'  => $person_id,
+                    'depart'     => $val->xjdw,
+                    'date'       => $val->lrdate
+                ];
+            } else {
+                continue;
+            }
+        }
+
+        $data_arr = array_column($data, 'date');
+        array_multisort($data_arr, SORT_DESC, $data);
+
+        $result['data']['list'] = $data;
+
+        return $result;
+    }
+
+    //网格化巡检记录列表明细
+    public static function getResultDlist($person_id, $depart, $date)
+    {
+
+        $result['status'] = true;
+        $result['msg']    = ApiEnum::RETURN_SUCCESS;
+        $result['data']   = [];
+
+        $query = DB::connection('mysql_fwview')->table('uf_wghgl_new')
+                   ->join('hrmresource', 'uf_wghgl_new.lrr', '=', 'hrmresource.id')
+                   ->where('lrr', $person_id)
+                   ->where('xjdw', $depart)
+                   ->where('lrsj', 'like', $date . '%')
+                   ->orderBy('lrsj', 'desc')
+                   ->select(
+                       [
+                           'uf_wghgl_new.id',
+                           'lastname',
+                           'jcqy',
+                           'lrsj',
+                       ]
+                   )->get();
+
+        $query = json_decode($query);
+
+        $result['data'] = $query;
+
+        return $result;
+    }
+
+    //网格化巡检记录明细
+    public static function getResultDetails($id)
+    {
+        $result['status'] = true;
+        $result['msg']    = ApiEnum::RETURN_SUCCESS;
+        $result['data']   = [];
+
+        $query = DB::connection('mysql_fwview')->table('uf_wghgl_new')
+                   ->join('hrmresource', 'uf_wghgl_new.lrr', '=', 'hrmresource.id')
+                   ->where('uf_wghgl_new.id', $id)
+                   ->select(
+                       [
+                           'lastname',
+                           'dwmc',
+                           'xjdw',
+                           'jcqy',
+                           'jclx',
+                           'lrsj',
+                           'jcwt',
+                           'wtms',
+                           'dkpz'
+                       ]
+                   )->get();
+
+        $query = json_decode($query);
+
+        $result['data'] = $query;
+
+        return $result;
+    }
+
+    //网格化巡检记录
+    public static function getFinalList($start_date, $end_date, $depart = '', $person = '')
+    {
+        $result['status'] = true;
+        $result['msg']    = ApiEnum::RETURN_SUCCESS;
+        $result['data']   = [];
+
+        $query = DB::connection('mysql_fwview')->table('uf_wghgl_new');
+
+        if ($start_date == $end_date) {
+            $query = $query->where('lrsj', 'like', $start_date . '%');
+        } else {
+            $query = $query->where('lrsj', '>=', $start_date . ' 00:00:00')->where('lrsj', '<=', $end_date . ' 23:59:59');
+        }
+
+        if ($depart) {
+            $query = $query->where('xjdw', $depart);
+        }
+
+        if ($person) {
+            $person_id = DB::connection('mysql_fwview')->table('hrmresource')
+                           ->where('lastname', 'like', '%' . $person . '%')->pluck('id')->all();
+            $query = $query->whereIn('lrr', $person_id);
+        }
+
+        $query = $query->orderBy('lrdate', 'desc')->groupBy('lrdate', 'xjdw', 'lrr')
+                       ->select(
+                           [
+                               DB::raw('DATE(lrsj) as lrdate'),
+                               'xjdw',
+                               'lrr'
+                           ]
+                       )
+                       ->get();
+
+        $data = [];
+        foreach ($query as $key => $val) {
+            $lastname = DB::connection('mysql_fwview')->table('hrmresource')
+                          ->where('id', $val->lrr)->value('lastname');
+            $allcount = DB::connection('mysql_fwview')->table('formtable_main_974')
+                          ->where('szxmc', $val->xjdw)->count();
+
+            $detail = DB::connection('mysql_fwview')->table('uf_wghgl_new')
+                        ->where('xjdw', $val->xjdw)
+                        ->where(DB::raw('DATE(lrsj)'), $val->lrdate)
+                        ->where('lrr', $val->lrr)->count();
+
+            if ($allcount <= 0) {
+                continue;
+            }
+
+            if ($detail >= $allcount) {
+                $data[] = [
+                    'depart'      => $val->xjdw,
+                    'lastname'    => $lastname,
+                    'person_id'   => $val->lrr,
+                    'date'        => $val->lrdate,
+                    'is_complete' => 1
+                ];
+            } else {
+                $data[] = [
+                    'depart'      => $val->xjdw,
+                    'lastname'    => $lastname,
+                    'person_id'   => $val->lrr,
+                    'date'        => $val->lrdate,
+                    'is_complete' => 0
+                ];
+            }
+        }
+
+        $result['data'] = $data;
+
+        return $result;
+    }
+}

+ 6 - 0
Modules/Camera/Enum/CameraEnum.php

@@ -49,6 +49,9 @@ class CameraEnum
     const CAMERA_TYPE_COALYARD = 5;      //煤场
     const CAMERA_TYPE_RISK = 6;      //高风险作业
     const CAMERA_TYPE_PLACE = 7;      //培训场所
+    const CAMERA_TYPE_FIXED = 8;      //固定摄像头
+    const CAMERA_TYPE_MOVE = 9;      //移动摄像头
+    const CAMERA_TYPE_ENFORCE = 10;      //执法记录仪
 
     const CAMERA_TYPE_EXCHANGE = [
         self::CAMERA_TYPE_NORMAL   => '普通摄像头',
@@ -58,6 +61,9 @@ class CameraEnum
         self::CAMERA_TYPE_COALYARD => '煤场监控',
         self::CAMERA_TYPE_RISK => '高风险作业',
         self::CAMERA_TYPE_PLACE => '培训场所',
+        self::CAMERA_TYPE_FIXED => '固定摄像头',
+        self::CAMERA_TYPE_MOVE => '移动摄像头',
+        self::CAMERA_TYPE_ENFORCE => '执法记录仪'
     ];
 
     //调取海康接口类型

+ 671 - 0
Modules/Camera/Http/Controllers/Api/CameraApiController.php

@@ -16,6 +16,7 @@ use Illuminate\Support\Facades\Input;
 use Illuminate\Support\Facades\Log;
 use Modules\Camera\Entities\CameraList;
 use Modules\Camera\Enum\CameraEnum;
+use Modules\Camera\Http\Controllers\Api\TdwyController;
 use Modules\Camera\Services\CameraServices;
 use Modules\Mine\Entities\MineList;
 use Modules\Mine\Entities\MineListExt;
@@ -639,6 +640,12 @@ class CameraApiController extends BaseController
                 $result = CameraServices::getHkHls($camera_id,$parent_id);
 
             }
+            //大华摄像头
+            elseif($is_hak == 2){
+                //同步大华视频服务器摄像头
+                $tdwy = new TdwyController();
+                $result = $tdwy->dahuaRtsp($camera_id,$parent_id);
+            }
             //信息技术中心测试ws协议
 //            elseif($mine_res[0]-> slug == 'XinXiJiShuZhongXin'){
 //                $result = CameraServices::getHkWs($camera_id,$parent_id);
@@ -1306,4 +1313,668 @@ class CameraApiController extends BaseController
 
         return self::successResponse($camera_record);
     }
+
+    //摄像头下拉列表
+    public function cameraSelect(Request $request){
+        $result = '<select style="width:99%;" class="form-control" name="camera"><option value="0">-选择摄像头-</option>';
+
+        $mine_list = DB::table('mine_list')->where('parent_id',6356)->where('deleted_at',null)->get();
+
+        if(count($mine_list) > 0){
+            for($i=0;$i<count($mine_list);$i++){
+                $camera_list = DB::table('camera_list')->where('mine_id',$mine_list[$i]->id)->where('is_show',1)->where('deleted_at',null)->get();
+
+                if(count($camera_list) > 0){
+                    $result = $result . '<optgroup label="' . $mine_list[$i]->title . '">';
+
+                    for($j=0;$j<count($camera_list);$j++){
+                        $result = $result . '<option value="'.$camera_list[$j]->id.'|'.$mine_list[$i]->id.'|'.$camera_list[$j]->camera_name.'|'.$camera_list[$j]->camera_type.'">'.$camera_list[$j]->camera_name.'('.CameraEnum::CAMERA_TYPE_EXCHANGE[$camera_list[$j]->camera_type].')</option>';
+                    }
+
+                    $result = $result . '</optgroup>';
+                }
+            }
+        }
+
+        $result = $result . '</select>';
+
+        return json_encode($result);
+    }
+
+    //摄像头信息
+    public function cameraInfo(Request $request){
+        $params = $request->all();
+
+        $camera = DB::table('camera_list')->where('id',$params['camera_id'])->get();
+
+        $result['id'] = $camera[0]->id;
+        $result['camera_name'] = $camera[0]->camera_name;
+        $result['camera_url'] = $camera[0]->camera_url;
+        $result['camera_type'] = $camera[0]->camera_type;
+        $result['cover_picture'] = $camera[0]->cover_picture;
+        $result['parent_id'] = $camera[0]->mine_id;
+
+        return $result;
+    }
+
+    //使用说明
+    public function readme(Request $request){
+        $params = $request->all();
+
+        $result['coal_washery'] = DB::connection('task_xixuan')->table('xx_coal_washery')->orderBy('id')->get();
+
+        $mine_list = DB::table('mine_list')->where('parent_id',6356)->where('deleted_at',null)->get();
+
+        $result['camera_list'] = [];
+        if(count($mine_list) > 0){
+            for($i=0;$i<count($mine_list);$i++){
+                $camera_list = DB::table('camera_list')->where('mine_id',$mine_list[$i]->id)->where('is_show',1)->where('deleted_at',null)->get();
+                if(count($camera_list) > 0){
+                    $result['camera_list'][$i]['area'] = $mine_list[$i]->title;
+                    for($j=0;$j<count($camera_list);$j++){
+                        $result['camera_list'][$i]['camera_list'][$j] = $camera_list[$j]->id.':'.$camera_list[$j]->camera_name;
+                    }
+                }
+            }
+        }
+
+        return $result;
+    }
+
+    //主屏幕
+    public function mainHome(Request $request){
+        $gao = DB::connection('task_xixuan')->table('xx_risk_assignment')->whereDate('optdt', today())->where('risk_level',0)->count();
+        $zhong = DB::connection('task_xixuan')->table('xx_risk_assignment')->whereDate('optdt', today())->where('risk_level',1)->count();
+        $di = DB::connection('task_xixuan')->table('xx_risk_assignment')->whereDate('optdt', today())->where('risk_level',2)->count();
+
+        $result = [
+            [
+                'number' => $gao,
+                'unit'   => '项',
+                'title'  => '高风险作业',
+                'color'  => '#DA0000'
+            ],
+            [
+                'number' => $zhong,
+                'unit'   => '项',
+                'title'  => '中风险作业',
+                'color'  => '#FFBA00'
+            ],
+            [
+                'number' => $di,
+                'unit'   => '项',
+                'title'  => '低风险作业',
+                'color'  => '#2BB200'
+            ]
+        ];
+
+        return self::successResponse($result);
+    }
+
+    //风险作业占比
+    public function riskWorkPercent(Request $request){
+        $gao = DB::connection('task_xixuan')->table('xx_risk_assignment')->whereDate('optdt', today())->where('risk_level',0)->count();
+        $zhong = DB::connection('task_xixuan')->table('xx_risk_assignment')->whereDate('optdt', today())->where('risk_level',1)->count();
+        $di = DB::connection('task_xixuan')->table('xx_risk_assignment')->whereDate('optdt', today())->where('risk_level',2)->count();
+
+        $result = [
+            [
+                'value' => $gao,
+                'name'  => '高风险',
+            ],
+            [
+                'value' => $zhong,
+                'name'  => '中风险',
+            ],
+            [
+                'value' => $di,
+                'name'  => '低风险',
+            ]
+        ];
+
+        return self::successResponse($result);
+    }
+
+    //片区占比
+    public function areaPercent(Request $request){
+        $area = DB::connection('task_xixuan')->table('xx_area')->get();
+
+        if(count($area) > 0){
+            for($i=0;$i<count($area);$i++){
+                $coal_washery_id_list = DB::connection('task_xixuan')->table('xx_coal_washery')->where('area_id',$area[$i]->id)->pluck('id');
+                $result[$i]['value'] = DB::connection('task_xixuan')->table('xx_risk_assignment')->whereIn('coal_washery_id',$coal_washery_id_list)->whereDate('optdt', today())->count();
+                $result[$i]['name'] = $area[$i]->name;
+            }
+        }
+
+        return self::successResponse($result);
+    }
+
+    //地图数据
+    public function mapData(Request $request){
+        $coal_washery = DB::connection('task_xixuan')->table('xx_coal_washery')->get();
+        $coal_list = [
+            '灵新洗煤厂'=>'linxing',
+            '红柳洗煤厂'=>'hongliu',
+            '枣泉洗煤厂'=>'zaoquan',
+            '大武口洗煤厂'=>'dawukou',
+            '金凤洗煤厂'=>'jinfeng',
+            '检修车间'=>'jianxiuchejian',
+            '太西洗煤厂'=>'taixi',
+            '清水营洗煤厂'=>'qingshuiying',
+            '梅花井洗煤厂'=>'meihuajing',
+            '石槽村洗煤厂'=>'shicaocun',
+            '双马洗煤厂'=>'shuangma',
+            '羊场湾洗煤厂'=>'yangchangwan',
+            '羊场湾二分区洗煤厂'=>'yangchangwanerfenqu'
+        ];
+
+        if(count($coal_washery) > 0){
+            for($i=0;$i<count($coal_washery);$i++){
+                if(array_key_exists($coal_washery[$i]->name, $coal_list)) {
+                    $slog = $coal_list[$coal_washery[$i]->name];
+                    $result[$slog]['title'] = $coal_washery[$i]->name;
+                    $result[$slog]['data'] = [
+                        [
+                            'name' => '高风险作业',
+                            'value'=> DB::connection('task_xixuan')->table('xx_risk_assignment')->where('coal_washery_id',$coal_washery[$i]->id)->where('risk_level',0)->whereDate('optdt', today())->count()
+                        ],
+                        [
+                            'name' => '中风险作业',
+                            'value'=> DB::connection('task_xixuan')->table('xx_risk_assignment')->where('coal_washery_id',$coal_washery[$i]->id)->where('risk_level',1)->whereDate('optdt', today())->count()
+                        ],
+                        [
+                            'name' => '低风险作业',
+                            'value'=> DB::connection('task_xixuan')->table('xx_risk_assignment')->where('coal_washery_id',$coal_washery[$i]->id)->where('risk_level',2)->whereDate('optdt', today())->count()
+                        ]
+                    ];
+                }
+            }
+        }
+
+        return self::successResponse($result);
+    }
+
+    //时间段作业数
+    public function timeWorkCount(Request $request){
+        $params = $request->all();
+
+        if(isset($params['start_date']) && isset($params['end_date'])){
+            $start_date = $params['start_date'];
+            $end_date = $params['end_date'];
+        }else{
+            $start_date = date('Y-m-d', strtotime(date('Y-m-d') . ' -6 day'));
+            $end_date = date('Y-m-d');
+        }
+
+        $current_date = $start_date;
+        $i = 0;
+        $result = [];
+        $result['xAxis']['type'] = 'category';
+        $result['xAxis']['data'] = [];
+        $result['series'] = [
+            [
+                'name' => '高风险作业',
+                'type' => 'bar',
+                'stack'=> 'bar_1',
+                'data' => [],
+                'itemStyle' => [
+                    'color' => '#DA0000',
+                    'borderRadius' => [10,10,10,10]
+                ]
+            ],
+            [
+                'name' => '中风险作业',
+                'type' => 'bar',
+                'stack'=> 'bar_2',
+                'data' => [],
+                'itemStyle' => [
+                    'color' => '#FFBA00',
+                    'borderRadius' => [10,10,10,10]
+                ]
+            ],
+            [
+                'name' => '低风险作业',
+                'type' => 'bar',
+                'stack'=> 'bar_3',
+                'data' => [],
+                'itemStyle' => [
+                    'color' => '#2BB200',
+                    'borderRadius' => [10,10,10,10]
+                ]
+            ]
+        ];
+
+        while ($current_date <= $end_date) {
+            array_push($result['xAxis']['data'],$current_date);
+            array_push($result['series'][0]['data'],DB::connection('task_xixuan')->table('xx_risk_assignment')->whereDate('optdt', $current_date)->where('risk_level',0)->count());
+            array_push($result['series'][1]['data'],DB::connection('task_xixuan')->table('xx_risk_assignment')->whereDate('optdt', $current_date)->where('risk_level',1)->count());
+            array_push($result['series'][2]['data'],DB::connection('task_xixuan')->table('xx_risk_assignment')->whereDate('optdt', $current_date)->where('risk_level',2)->count());
+            $current_date = date('Y-m-d', strtotime($current_date . ' +1 day'));
+            $i++;
+        }
+
+        return self::successResponse($result);
+    }
+
+    //时间段片区统计
+    public function timeAreaTotal(Request $request){
+        $params = $request->all();
+
+        if (isset($params['area_id'])) {
+            $area_id = $params['area_id'];
+        }else{
+            $area_id = 1;
+        }
+
+        if(isset($params['start_date']) && isset($params['end_date'])){
+            $start_date = $params['start_date'];
+            $end_date = $params['end_date'];
+        }else{
+            $start_date = date('Y-m-d', strtotime(date('Y-m-d') . ' -6 day'));
+            $end_date = date('Y-m-d');
+        }
+
+        $coal_washery_id_list = DB::connection('task_xixuan')->table('xx_coal_washery')->where('area_id',$area_id)->pluck('id');
+
+        $result = [];
+        $current_date = $start_date;
+        $i = 0;
+
+        //当日片区数
+        $result['data'] = [
+            [
+                'number' => DB::connection('task_xixuan')->table('xx_risk_assignment')->whereIn('coal_washery_id',$coal_washery_id_list)->whereDate('optdt', date('Y-m-d'))->where('risk_level',0)->count(),
+                'unit'   => '项',
+                'title'  => '高风险作业',
+                'color'  => '#DA0000'
+            ],
+            [
+                'number' => DB::connection('task_xixuan')->table('xx_risk_assignment')->whereIn('coal_washery_id',$coal_washery_id_list)->whereDate('optdt', date('Y-m-d'))->where('risk_level',1)->count(),
+                'unit'   => '项',
+                'title'  => '中风险作业',
+                'color'  => '#FFBA00'
+            ],
+            [
+                'number' => DB::connection('task_xixuan')->table('xx_risk_assignment')->whereIn('coal_washery_id',$coal_washery_id_list)->whereDate('optdt', date('Y-m-d'))->where('risk_level',2)->count(),
+                'unit'   => '项',
+                'title'  => '低风险作业',
+                'color'  => '#2BB200'
+            ]
+        ];
+
+        $result['xAxis']['type'] = 'category';
+        $result['xAxis']['data'] = [];
+        $result['series'] = [
+            [
+                'name' => '高风险作业',
+                'type' => 'line',
+                'data' => [],
+                'itemStyle' => [
+                    'color' => '#DA0000',
+                    'borderRadius' => [10,10,10,10]
+                ]
+            ],
+            [
+                'name' => '中风险作业',
+                'type' => 'line',
+                'data' => [],
+                'itemStyle' => [
+                    'color' => '#FFBA00',
+                    'borderRadius' => [10,10,10,10]
+                ]
+            ],
+            [
+                'name' => '低风险作业',
+                'type' => 'line',
+                'data' => [],
+                'itemStyle' => [
+                    'color' => '#2BB200',
+                    'borderRadius' => [10,10,10,10]
+                ]
+            ]
+        ];
+
+        while ($current_date <= $end_date) {
+            array_push($result['xAxis']['data'],$current_date);
+            array_push($result['series'][0]['data'],DB::connection('task_xixuan')->table('xx_risk_assignment')->whereIn('coal_washery_id',$coal_washery_id_list)->whereDate('optdt', $current_date)->where('risk_level',0)->count());
+            array_push($result['series'][1]['data'],DB::connection('task_xixuan')->table('xx_risk_assignment')->whereIn('coal_washery_id',$coal_washery_id_list)->whereDate('optdt', $current_date)->where('risk_level',1)->count());
+            array_push($result['series'][2]['data'],DB::connection('task_xixuan')->table('xx_risk_assignment')->whereIn('coal_washery_id',$coal_washery_id_list)->whereDate('optdt', $current_date)->where('risk_level',2)->count());
+            $current_date = date('Y-m-d', strtotime($current_date . ' +1 day'));
+            $i++;
+        }
+
+        return self::successResponse($result);
+    }
+
+    //洗煤厂统计
+    public function coalWasheryTotal(Request $request){
+        $coal_washery = DB::connection('task_xixuan')->table('xx_coal_washery')->get();
+        if(count($coal_washery) > 0){
+            for($i=0;$i<count($coal_washery);$i++){
+                $result[$i]['unit_name'] = $coal_washery[$i]->name;
+                $result[$i]['data'] = [
+                    [
+                        'label' => '高',
+                        'value' => DB::connection('task_xixuan')->table('xx_risk_assignment')->where('coal_washery_id',$coal_washery[$i]->id)->where('risk_level',0)->whereDate('optdt', today())->count(),
+                        'color' => '#DA0000'
+                    ],
+                    [
+                        'label' => '中',
+                        'value' => DB::connection('task_xixuan')->table('xx_risk_assignment')->where('coal_washery_id',$coal_washery[$i]->id)->where('risk_level',1)->whereDate('optdt', today())->count(),
+                        'color' => '#FFBA00'
+                    ],
+                    [
+                        'label' => '低',
+                        'value' => DB::connection('task_xixuan')->table('xx_risk_assignment')->where('coal_washery_id',$coal_washery[$i]->id)->where('risk_level',2)->whereDate('optdt', today())->count(),
+                        'color' => '#2BB200'
+                    ],
+                ];
+            }
+        }
+
+        return self::successResponse($result);
+    }
+
+    //风险作业列表
+    public function riskWorkList(Request $request){
+        $params = $request->all();
+
+        if(isset($params['type'])){
+            $type = $params['type'];
+        }else{
+            $type = 0;
+        }
+
+        $coal_washery_list = DB::connection('task_xixuan')->table('xx_coal_washery')->get();
+        if(count($coal_washery_list) > 0){
+            for($i=0;$i<count($coal_washery_list);$i++){
+                $result['unit_list'][$i]['text'] = $coal_washery_list[$i]->name;
+                $result['unit_list'][$i]['value'] = $coal_washery_list[$i]->name;
+            }
+        }
+
+        $risk = DB::connection('task_xixuan')->table('xx_risk_assignment');
+        $risk = $risk->select('xx_risk_assignment.*','xx_coal_washery.name as coal_washery');
+        $risk = $risk->leftJoin('xx_coal_washery','xx_coal_washery.id','=','xx_risk_assignment.coal_washery_id');
+        $risk = $risk->whereDate('xx_risk_assignment.optdt', today());
+        if(isset($params['id'])){
+            $risk = $risk->where('xx_coal_washery.id',$params['id']);
+        }
+        $risk = $risk->where('risk_level',$type)->get();
+
+        $result['data'] = [];
+        if(count($risk) > 0){
+            for($i=0;$i<count($risk);$i++){
+                $result['data'][$i]['id'] = $risk[$i]->id;
+                $result['data'][$i]['unit_name'] = $risk[$i]->coal_washery;
+                $result['data'][$i]['place'] = $risk[$i]->work_location;
+                $result['data'][$i]['content'] = $risk[$i]->risk_name;
+            }
+        }
+
+        return self::successResponse($result);
+    }
+
+    //风险作业详情
+    public function riskWorkDetail(Request $request){
+        $params = $request->all();
+
+        if (!isset($params['id'])) {
+            return self::errorResponse(ApiEnum::STATUS_CODE_EMPTY);
+        }
+
+        $risk_type = ['高空坠落','起重伤害','触电','火灾','机械伤害','中毒和窒息'];
+        $risk_level = ['高风险','中风险','低风险'];
+
+        $risk = DB::connection('task_xixuan')->table('xx_risk_assignment')
+            ->select('xx_risk_assignment.*','xx_coal_washery.name as coal_washery')
+            ->leftJoin('xx_coal_washery','xx_coal_washery.id','=','xx_risk_assignment.coal_washery_id')
+            ->where('xx_risk_assignment.id',$params['id'])->get();
+
+        if(count($risk) > 0){
+            $camera_info = explode('|',$risk[0]->camera_id);
+
+            $is_hak = MineListExt::where('mine_id', $camera_info[1])->value('is_hak');
+            if($is_hak == 2){
+                $type = 'rtsp';
+            }else{
+                $type = 'm3u8';
+            }
+
+            if($risk[0]->risk_type != '' && $risk[0]->risk_type !=null){
+                $risk_type_value = $risk_type[$risk[0]->risk_type];
+            }else{
+                $risk_type_value = '';
+            }
+
+            $result['detail'] = [
+                [
+                    'label' => '风险类型:',
+                    'value' => $risk_type_value
+                ],
+                [
+                    'label' => '风险等级:',
+                    'value' => $risk_level[$risk[0]->risk_level]
+                ],
+                [
+                    'label' => '单位:',
+                    'value' => $risk[0]->coal_washery
+                ],
+                [
+                    'label' => '风险作业内容:',
+                    'value' => $risk[0]->risk_name
+                ],
+                [
+                    'label' => '人数:',
+                    'value' => $risk[0]->work_num
+                ],
+                [
+                    'label' => '地点:',
+                    'value' => $risk[0]->work_location
+                ],
+                [
+                    'label' => '现场负责人:',
+                    'value' => $risk[0]->work_people
+                ],
+                [
+                    'label' => '摄像头类型:',
+                    'value' => CameraEnum::CAMERA_TYPE_EXCHANGE[$camera_info[3]]
+                ],
+            ];
+
+            $camera_id = explode('|',$risk[0]->camera_id);
+
+            $result['camera']['camera_id'] = $camera_id[0];
+            $result['camera']['parent_id'] = $camera_id[1];
+            $result['camera']['camera_type'] = $type;
+        }
+
+        return self::successResponse($result);
+    }
+
+    //首頁信息
+    public function taskHome(Request $request){
+        $risk_type = ['高空坠落','起重伤害','触电','火灾','机械伤害','中毒和窒息'];
+        $risk_level = ['高风险','中风险','低风险'];
+
+        //高风险作业
+        $gaofengxian = DB::connection('task_xixuan')->table('xx_risk_assignment')
+            ->select('xx_risk_assignment.*','xx_coal_washery.name as coal_washery')
+            ->leftJoin('xx_coal_washery','xx_coal_washery.id','=','xx_risk_assignment.coal_washery_id')
+            ->whereDate('xx_risk_assignment.optdt', today())
+            ->where('risk_level',0)->get();
+        if(count($gaofengxian) > 0){
+            for($i=0;$i<count($gaofengxian);$i++){
+                if($gaofengxian[$i]->risk_type == ''){
+                    $gaofengxian[$i]->risk_type_name = '无';
+                }else{
+                    $gaofengxian[$i]->risk_type_name = $risk_type[$gaofengxian[$i]->risk_type];
+                }
+                $camera_info = explode('|',$gaofengxian[$i]->camera_id);
+                $gaofengxian[$i]->camera_type = CameraEnum::CAMERA_TYPE_EXCHANGE[$camera_info[3]];
+                $gaofengxian[$i]->risk_level_name = $risk_level[$gaofengxian[$i]->risk_level];
+            }
+        }
+        $result['gao_count'] = count($gaofengxian);
+        $result['gao'] = $gaofengxian;
+
+        //中风险作业
+        $zhongfengxian = DB::connection('task_xixuan')->table('xx_risk_assignment')
+            ->select('xx_risk_assignment.*','xx_coal_washery.name as coal_washery')
+            ->leftJoin('xx_coal_washery','xx_coal_washery.id','=','xx_risk_assignment.coal_washery_id')
+            ->whereDate('xx_risk_assignment.optdt', today())
+            ->where('risk_level',1)->get();
+        if(count($zhongfengxian) > 0){
+            for($i=0;$i<count($zhongfengxian);$i++){
+                if($zhongfengxian[$i]->risk_type == ''){
+                    $zhongfengxian[$i]->risk_type_name = '无';
+                }else{
+                    $zhongfengxian[$i]->risk_type_name = $risk_type[$zhongfengxian[$i]->risk_type];
+                }
+                $camera_info = explode('|',$zhongfengxian[$i]->camera_id);
+                $zhongfengxian[$i]->camera_type = CameraEnum::CAMERA_TYPE_EXCHANGE[$camera_info[3]];
+                $zhongfengxian[$i]->risk_level_name = $risk_level[$zhongfengxian[$i]->risk_level];
+            }
+        }
+        $result['zhong_count'] = count($zhongfengxian);
+        $result['zhong'] = $zhongfengxian;
+
+        //低风险作业
+        $difengxian = DB::connection('task_xixuan')->table('xx_risk_assignment')
+            ->select('xx_risk_assignment.*','xx_coal_washery.name as coal_washery')
+            ->leftJoin('xx_coal_washery','xx_coal_washery.id','=','xx_risk_assignment.coal_washery_id')
+            ->whereDate('xx_risk_assignment.optdt', today())
+            ->where('risk_level',2)->get();
+        if(count($difengxian) > 0){
+            for($i=0;$i<count($difengxian);$i++){
+                if($difengxian[$i]->risk_type == ''){
+                    $difengxian[$i]->risk_type_name = '无';
+                }else{
+                    $difengxian[$i]->risk_type_name = $risk_type[$difengxian[$i]->risk_type];
+                }
+                $camera_info = explode('|',$difengxian[$i]->camera_id);
+                $difengxian[$i]->camera_type = CameraEnum::CAMERA_TYPE_EXCHANGE[$camera_info[3]];
+                $difengxian[$i]->risk_level_name = $risk_level[$difengxian[$i]->risk_level];
+            }
+        }
+        $result['di_count'] = count($difengxian);
+        $result['di'] = $difengxian;
+
+        //片区作业数
+        $area = DB::connection('task_xixuan')->table('xx_area')->get();
+        $result['area_count'] = [];
+        if(count($area) > 0){
+            for($i=0;$i<count($area);$i++){
+                $result['area_count'][$i]['name'] = $area[$i]->name;
+                $coal_washery_id_list = DB::connection('task_xixuan')->table('xx_coal_washery')->where('area_id',$area[$i]->id)->pluck('id');
+                $result['area_count'][$i]['count'] = DB::connection('task_xixuan')->table('xx_risk_assignment')->whereIn('coal_washery_id',$coal_washery_id_list)->whereDate('optdt', today())->count();
+            }
+        }
+
+        //洗煤厂作业
+        $coal_washery = DB::connection('task_xixuan')->table('xx_coal_washery')->get();
+        $result['coal_washery_work_count'] = [];
+        if(count($coal_washery) > 0){
+            for($i=0;$i<count($coal_washery);$i++){
+                $result['coal_washery_work_count'][$i]['name'] = $coal_washery[$i]->name;
+                $result['coal_washery_work_count'][$i]['gao'] = DB::connection('task_xixuan')->table('xx_risk_assignment')->where('coal_washery_id',$coal_washery[$i]->id)->where('risk_level',0)->whereDate('optdt', today())->count();
+                $result['coal_washery_work_count'][$i]['zhong'] = DB::connection('task_xixuan')->table('xx_risk_assignment')->where('coal_washery_id',$coal_washery[$i]->id)->where('risk_level',1)->whereDate('optdt', today())->count();
+                $result['coal_washery_work_count'][$i]['di'] = DB::connection('task_xixuan')->table('xx_risk_assignment')->where('coal_washery_id',$coal_washery[$i]->id)->where('risk_level',2)->whereDate('optdt', today())->count();
+            }
+        }
+
+        //7天作业数
+        $result['seven_work_count'] = [];
+        for($i=0;$i<7;$i++){
+            $day = date('Y-m-d', strtotime('-'.$i.' day'));
+            $result['seven_work_count'][$i]['date'] = $day;
+            $result['seven_work_count'][$i]['gao'] = DB::connection('task_xixuan')->table('xx_risk_assignment')->whereDate('optdt', $day)->where('risk_level',0)->count();
+            $result['seven_work_count'][$i]['zhong'] = DB::connection('task_xixuan')->table('xx_risk_assignment')->whereDate('optdt', $day)->where('risk_level',1)->count();
+            $result['seven_work_count'][$i]['di'] = DB::connection('task_xixuan')->table('xx_risk_assignment')->whereDate('optdt', $day)->where('risk_level',2)->count();
+        }
+
+        //7天片区作业数
+        $result['seven_area_work_count'] = [];
+        if(count($area) > 0){
+            for($i=0;$i<count($area);$i++){
+                $result['seven_area_work_count'][$i]['name'] = $area[$i]->name;
+                $result['seven_area_work_count'][$i]['area_id'] = $area[$i]->id;
+                for($j=0;$j<7;$j++){
+                    $day = date('Y-m-d', strtotime('-'.$j.' day'));
+                    $result['seven_area_work_count'][$i]['work'][$j]['date'] = $day;
+                    $coal_washery_id_list = DB::connection('task_xixuan')->table('xx_coal_washery')->where('area_id',$area[$i]->id)->pluck('id');
+                    $result['seven_area_work_count'][$i]['work'][$j]['gao'] = DB::connection('task_xixuan')->table('xx_risk_assignment')->whereIn('coal_washery_id',$coal_washery_id_list)->whereDate('optdt', $day)->where('risk_level',0)->count();
+                    $result['seven_area_work_count'][$i]['work'][$j]['zhong'] = DB::connection('task_xixuan')->table('xx_risk_assignment')->whereIn('coal_washery_id',$coal_washery_id_list)->whereDate('optdt', $day)->where('risk_level',1)->count();
+                    $result['seven_area_work_count'][$i]['work'][$j]['di'] = DB::connection('task_xixuan')->table('xx_risk_assignment')->whereIn('coal_washery_id',$coal_washery_id_list)->whereDate('optdt', $day)->where('risk_level',2)->count();
+                }
+            }
+        }
+
+        return self::successResponse($result);
+    }
+
+    //首页作业查询
+    public function workSearch(Request $request){
+        $params = $request->all();
+
+        if (!isset($params['start_date'])) {
+            return self::errorResponse(ApiEnum::STATUS_CODE_EMPTY);
+        }
+
+        if (!isset($params['end_date'])) {
+            return self::errorResponse(ApiEnum::STATUS_CODE_EMPTY);
+        }
+
+        $result = [];
+        $start_date = $params['start_date'];
+        $end_date = $params['end_date'];
+        $current_date = $start_date;
+        $i = 0;
+        while ($current_date <= $end_date) {
+            $result[$i]['date'] = $current_date;
+            $result[$i]['gao'] = DB::connection('task_xixuan')->table('xx_risk_assignment')->whereDate('optdt', $current_date)->where('risk_level',0)->count();
+            $result[$i]['zhong'] = DB::connection('task_xixuan')->table('xx_risk_assignment')->whereDate('optdt', $current_date)->where('risk_level',1)->count();
+            $result[$i]['di'] = DB::connection('task_xixuan')->table('xx_risk_assignment')->whereDate('optdt', $current_date)->where('risk_level',2)->count();
+            $current_date = date('Y-m-d', strtotime($current_date . ' +1 day'));
+            $i++;
+        }
+
+        return self::successResponse($result);
+    }
+
+    //首页片区作业查询
+    public function areaWorkSearch(Request $request){
+        $params = $request->all();
+
+        if (!isset($params['start_date'])) {
+            return self::errorResponse(ApiEnum::STATUS_CODE_EMPTY);
+        }
+
+        if (!isset($params['end_date'])) {
+            return self::errorResponse(ApiEnum::STATUS_CODE_EMPTY);
+        }
+
+        if (!isset($params['area_id'])) {
+            return self::errorResponse(ApiEnum::STATUS_CODE_EMPTY);
+        }
+
+        $coal_washery_id_list = DB::connection('task_xixuan')->table('xx_coal_washery')->where('area_id',$params['area_id'])->pluck('id');
+        $result = [];
+        $start_date = $params['start_date'];
+        $end_date = $params['end_date'];
+        $current_date = $start_date;
+        $i = 0;
+
+        while ($current_date <= $end_date) {
+            $result[$i]['date'] = $current_date;
+            $result[$i]['gao'] = DB::connection('task_xixuan')->table('xx_risk_assignment')->whereIn('coal_washery_id',$coal_washery_id_list)->whereDate('optdt', $current_date)->where('risk_level',0)->count();
+            $result[$i]['zhong'] = DB::connection('task_xixuan')->table('xx_risk_assignment')->whereIn('coal_washery_id',$coal_washery_id_list)->whereDate('optdt', $current_date)->where('risk_level',1)->count();
+            $result[$i]['di'] = DB::connection('task_xixuan')->table('xx_risk_assignment')->whereIn('coal_washery_id',$coal_washery_id_list)->whereDate('optdt', $current_date)->where('risk_level',2)->count();
+            $current_date = date('Y-m-d', strtotime($current_date . ' +1 day'));
+            $i++;
+        }
+
+        return self::successResponse($result);
+    }
 }

+ 189 - 0
Modules/Camera/Http/Controllers/Api/TdwyController.php

@@ -8,11 +8,15 @@
 
 namespace Modules\Camera\Http\Controllers\Api;
 
+use Illuminate\Http\Request;
 use App\Http\Controllers\Api\BaseController;
 use Illuminate\Support\Facades\Cache;
+use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Input;
+use Modules\Camera\Entities\CameraList;
 use Modules\Camera\Enum\CameraEnum;
 use Modules\Mine\Entities\MineList;
+use Modules\Mine\Enum\MineEnum;
 use Modules\Mine\Services\MineServices;
 
 
@@ -226,4 +230,189 @@ class TdwyController extends BaseController
         curl_close($ch);
         return $data;
     }
+
+    //同步大华视频服务器摄像头
+    public function dahuaCamera(){
+        //大华需要同步的区域
+        $dahua_ext = DB::table('mine_list_ext')
+            ->where('is_hak',MineEnum::IS_HAK_DH)
+            ->where('deleted_at',null)->get();
+        if(count($dahua_ext) > 0){
+            for($i=0;$i<count($dahua_ext);$i++){
+                $ip = $dahua_ext[$i]->ip.':'.$dahua_ext[$i]->port;
+
+                //获取public_key
+                $url = '/evo-apigw/evo-oauth/1.0.0/oauth/public-key';
+                $result = $this->httpRequest($ip.$url);
+                if($result['data']['publicKey']){
+                    $public_key = $result['data']['publicKey'];
+                }else{
+                    return;
+                }
+
+                //获取access_token
+                $url2 = '/evo-apigw/evo-oauth/1.0.0/oauth/extend/token';
+                $username_password = explode('|',$dahua_ext[$i]->sOrgId);
+                if(count($username_password) != 2){
+                    return;
+                }
+                $password = $this->rsaEncode($username_password[1],$public_key);
+                $params = [
+                    'grant_type'=>'password',
+                    'username'=>$username_password[0],
+                    'password'=>$password,
+                    'client_id'=>$dahua_ext[$i]->key,
+                    'client_secret'=>$dahua_ext[$i]->secret,
+                    'public_key'=>$public_key
+                ];
+                $result2 = $this->httpRequest($ip.$url2,'post',$params);
+                if($result2['data']['access_token']){
+                    $access_token = $result2['data']['access_token'];
+                }else{
+                    return;
+                }
+
+                //获取摄像头列表
+                $url3 = '/evo-apigw/evo-brm/1.2.0/device/channel/subsystem/page';
+                $params2 = [
+                    'pageNum'=>1,
+                    'pageSize'=>1000,
+                    'sortType'=>'ASC',
+                    'sort'=>'channelSn',
+                ];
+                $result3 = $this->httpRequest($ip.$url3,'post',$params2,$access_token);
+
+//                DB::table('camera_list')->where('mine_id',$dahua_ext[$i]->mine_id)->delete();
+                if($result3['data']['pageData']){
+                    $camera_list = $result3['data']['pageData'];
+                    if(count($camera_list) > 0){
+                        for($j=0;$j<count($camera_list);$j++){
+                            $param['mine_id'] = $dahua_ext[$i]->mine_id;
+                            $param['revert_id'] = 'NullId';
+                            $param['sort'] = 1;
+                            $param['camera_name'] = $camera_list[$j]['channelName'];
+                            $param['camera_source'] = 2;
+                            $param['index_code'] = $camera_list[$j]['channelCode'];
+                            $param['video_recorder'] = 2;
+//                            $param['created_at'] = date('Y-m-d H:i:s');
+//                            $param['updated_at'] = date('Y-m-d H:i:s');
+//                            DB::table('camera_list')->insert($param);
+                            CameraList::updateOrCreate(['index_code' => $camera_list[$j]['channelCode']], $param);
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    //大华rtsp
+    public function dahuaRtsp($camera_id,$parent_id){
+        $dahua_ext = DB::table('mine_list_ext')
+            ->where('mine_id',$parent_id)
+            ->where('deleted_at',null)->get();
+        if(count($dahua_ext) > 0){
+            $ip = $dahua_ext[0]->ip.':'.$dahua_ext[0]->port;
+
+            //获取public_key
+            $url = '/evo-apigw/evo-oauth/1.0.0/oauth/public-key';
+            $result1 = $this->httpRequest($ip.$url);
+            if($result1['data']['publicKey']){
+                $public_key = $result1['data']['publicKey'];
+            }else{
+                return;
+            }
+
+            //获取access_token
+            $url2 = '/evo-apigw/evo-oauth/1.0.0/oauth/extend/token';
+            $username_password = explode('|',$dahua_ext[0]->sOrgId);
+            if(count($username_password) != 2){
+                return;
+            }
+            $password = $this->rsaEncode($username_password[1],$public_key);
+            $params = [
+                'grant_type'=>'password',
+                'username'=>$username_password[0],
+                'password'=>$password,
+                'client_id'=>$dahua_ext[0]->key,
+                'client_secret'=>$dahua_ext[0]->secret,
+                'public_key'=>$public_key
+            ];
+            $result2 = $this->httpRequest($ip.$url2,'post',$params);
+            if($result2['data']['access_token']){
+                $access_token = $result2['data']['access_token'];
+            }else{
+                return;
+            }
+
+            $camera = DB::table('camera_list')->where('id',$camera_id)->get();
+
+            $url4 = '/evo-apigw/admin/API/MTS/Video/StartVideo';
+            $params3['data'] = [
+                'channelId'=>$camera[0]->index_code,
+                'dataType'=>'1',
+                'streamType'=>'1'
+            ];
+            $result4 = $this->httpRequest($ip.$url4,'post',$params3,$access_token);
+            if($result4['data']['url'] && $result4['data']['token']){
+                $rtsp = explode('|',$result4['data']['url']);
+                if($rtsp[1]){
+                    $result['data'] = [
+                        'camera_id' => $camera_id,
+                        'url' => $rtsp[1].'?token='.$result4['data']['token']
+                    ];
+                    return $result;
+                }
+            }
+        }
+    }
+
+    //接口第三方调用
+    public function httpRequest($url, $format = 'get', $data = null, $token = null){
+        //设置头信息
+        $headerArray =array("Content-type:application/json;","Accept:application/json");
+
+        if ($token) {
+            $headerArray[] = "Authorization:bearer " . $token;
+        }
+
+        $curl=curl_init();
+        curl_setopt($curl, CURLOPT_URL, $url);
+        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
+        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
+        if ($format == 'post') {
+            //post传值设置post传参
+            curl_setopt($curl, CURLOPT_POST, 1);
+            if ($data) {
+                $data = json_encode($data);
+                curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
+            }
+        }
+        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
+        curl_setopt($curl,CURLOPT_HTTPHEADER,$headerArray);
+        $data=json_decode(curl_exec($curl), true);
+        curl_close($curl);
+        //返回接口返回数据
+        return $data;
+    }
+
+    public function rsaEncode($password,$rsa_public_key)
+    {
+        // 要执行的代码
+        $rsa_public = "-----BEGIN PUBLIC KEY-----\n";
+        $rsa_public = $rsa_public.$rsa_public_key;
+        $rsa_public = $rsa_public."\n-----END PUBLIC KEY-----";
+        $key = openssl_pkey_get_public($rsa_public);
+        if (!$key) {
+            echo "公钥不可用\n";
+            echo $rsa_public;
+        }
+        //openssl_public_encrypt 第一个参数只能是string
+        //openssl_public_encrypt 第二个参数是处理后的数据
+        //openssl_public_encrypt 第三个参数是openssl_pkey_get_public返回的资源类型
+        $return_en = openssl_public_encrypt($password, $crypted, $key);
+        if (!$return_en) {
+            echo "加密失败,请检查RSA秘钥";
+        }
+        return base64_encode($crypted);
+    }
 }

+ 23 - 0
Modules/Camera/Routes/api.php

@@ -38,6 +38,8 @@ Route::middleware('auth:api')->namespace('Api')->group(function () {
     Route::post('testadd', 'CameraApiController@testadd');
     Route::post('testupdate', 'CameraApiController@testupdate');
     Route::get('testdel', 'CameraApiController@testdel');
+
+
 });
 
 Route::namespace('Api')->group(function () {
@@ -54,4 +56,25 @@ Route::namespace('Api')->group(function () {
     Route::post('type_list','CameraApiController@typeList');//分类列表
     Route::post('camera_record_insert','CameraApiController@cameraRecordInsert');//摄像托访问记录入库
     Route::post('camera_record_list','CameraApiController@cameraRecordList');//摄像托访问记录列表
+
+    //洗选高风险录入
+    Route::post('camera/camera_select', 'CameraApiController@cameraSelect');//摄像头下拉列表
+    Route::post('camera/camera_info', 'CameraApiController@cameraInfo');//摄像头信息
+    Route::post('camera/readme', 'CameraApiController@readme');//使用说明
+
+    Route::post('task_xixuan/main_home', 'CameraApiController@mainHome');//主屏幕
+    Route::post('task_xixuan/risk_work_percent', 'CameraApiController@riskWorkPercent');//风险作业占比
+    Route::post('task_xixuan/area_percent', 'CameraApiController@areaPercent');//片区占比
+    Route::post('task_xixuan/map_data', 'CameraApiController@mapData');//地图数据
+    Route::post('task_xixuan/time_work_count', 'CameraApiController@timeWorkCount');//时间段作业数
+    Route::post('task_xixuan/time_area_total', 'CameraApiController@timeAreaTotal');//时间段片区统计
+    Route::post('task_xixuan/coal_washery_total', 'CameraApiController@coalWasheryTotal');//洗煤厂统计
+    Route::post('task_xixuan/risk_work_list', 'CameraApiController@riskWorkList');//风险作业列表
+    Route::post('task_xixuan/risk_work_detail', 'CameraApiController@riskWorkDetail');//风险作业详情
+    Route::post('task_xixuan/home', 'CameraApiController@taskHome');//首頁接口
+    Route::post('task_xixuan/work_search', 'CameraApiController@workSearch');//首頁作业查询
+    Route::post('task_xixuan/area_work_search', 'CameraApiController@areaWorkSearch');//首頁片区作业查询
+
+    //大华视频接口
+    Route::post('task_xixuan/dahua_camera','TdwyController@dahuaCamera');//大华手动同步
 });

+ 38 - 0
Modules/Camera/Services/CameraServices.php

@@ -1830,6 +1830,44 @@ class CameraServices
         return $result;
     }
 
+    //大华切片逻辑
+    public static function dahuafiles($parent_id, $camera_id){
+        $result['status'] = true;
+        $result['msg']    = ApiEnum::RETURN_SUCCESS;
+
+        $camera = CameraList::find($camera_id);
+
+        $degree = MineList::where('id', $camera->mine_id)->value('degree');
+        $degree = explode('|', $degree);
+
+        $path = '';
+        foreach ($degree as $key => $val) {
+            $path .= MineList::where('id', $val)->value('title') . '/';
+        }
+        $path .= $camera->camera_name . '/' . date('Ymd');
+
+        //标记摄像头为在线状态
+        CameraList::where('id', $camera_id)->update(['camera_status' => CameraEnum::CAMERA_STATUS_ONLINE]);
+
+        //如果m3u8文件已拉取,直接返回播放链接
+        if ($camera->revert_id == CameraEnum::CAMERA_FILE_EXIST) {
+            $result['data'] = [
+                'camera_id' => $camera_id,
+                'url' => env('VIDEO_SYSTEM_URL') . CameraEnum::M3U8_FILE_PATH . '/' . $path . '/' . CameraEnum::M3U8_FILE_NAME . '?' . time(),
+            ];
+            return $result;
+        }
+
+        $tdwy = new TdwyController();
+        $tdwy->dahuaRtsp($camera_id,$parent_id);
+        $rtsp = $tdwy->dahuaRtsp($camera_id,$parent_id);
+
+        $res = self::getVideoStream($rtsp, $path, $camera_id);
+        $result['data'] = $res['data'];
+        return $result;
+    }
+
+
     //通过rtmp同步m3u8文件并返回url
     public static function downloadCameraFiles($parent_id, $camera_id)
     {

+ 380 - 0
app/Console/Commands/UpdateAreaList.php

@@ -0,0 +1,380 @@
+<?php
+
+namespace App\Console\Commands;
+
+use Illuminate\Console\Command;
+use Illuminate\Support\Facades\Input;
+use Modules\Camera\Entities\CameraList;
+use Modules\Camera\Enum\CameraEnum;
+use Modules\Camera\Services\CameraServices;
+use Modules\Camera\Http\Controllers\Api\TdwyController;
+use Modules\Mine\Entities\MineList;
+use Modules\Mine\Entities\MineListExt;
+use Modules\Mine\Enum\MineEnum;
+use Modules\Mine\Services\MineServices;
+use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\Log;
+
+class UpdateAreaList extends Command
+{
+    /**
+     * The name and signature of the console command.
+     *
+     * @var string
+     */
+    protected $signature = 'arealist:update';
+
+    /**
+     * The console command description.
+     *
+     * @var string
+     */
+    protected $description = '同步海康区域';
+
+    /**
+     * Create a new command instance.
+     *
+     * @return void
+     */
+    public function __construct()
+    {
+        parent::__construct();
+    }
+
+    /**
+     * Execute the console command.
+     *
+     * @return mixed
+     */
+    public function handle()
+    {
+        $start_time = time();
+        echo '开始时间:'.date('Y-m-d H:i:s');
+        $this->updateAreaList();
+//        $this->updateCameraList();
+        echo '时长:'.number_format(((time()-$start_time)/60),2).'分钟';
+    }
+
+    //同步区域列表
+    public function updateAreaList()
+    {
+        //查询使用海康服务器的矿区id
+        $mine_id_list = MineListExt::where('is_hak', 1)->pluck('mine_id')->all();
+
+        //海康区域同步开始时间
+//        $syn['hk_area_start_time'] = date('Y-m-d H:i:s');
+
+        foreach ($mine_id_list as $key => $val) {
+//            if($val == 968){
+//                //宁煤区域同步开始时间
+//                $syn['nm_area_start_time'] = date('Y-m-d H:i:s');
+//
+//                MineServices::getHaiKangArea($val, CameraEnum::REQUEST_TYPE_LOCAL);
+//
+//                //宁煤区域同步结束时间
+//                $syn['nm_area_end_time'] = date('Y-m-d H:i:s');
+//            }else{
+            MineServices::getHaiKangArea($val, CameraEnum::REQUEST_TYPE_LOCAL);
+//            }
+        }
+
+        //海康区域同步结束时间
+//        $syn['hk_area_end_time'] = date('Y-m-d H:i:s');
+        //天地区域同步开始时间
+//        $syn['td_area_start_time'] = date('Y-m-d H:i:s');
+
+        //同步天地伟业矿区区域
+        $mine_list_ext = DB::table('mine_list_ext')
+            ->select('mine_list_ext.*','mine_list.parent_id')
+            ->leftJoin('mine_list','mine_list.id','=','mine_list_ext.mine_id')
+            ->where('mine_list.parent_id',0)
+            ->where('mine_list_ext.is_hak',MineEnum::IS_HAK_TD)
+            ->where('mine_list_ext.ip','!=','')
+            ->where('mine_list_ext.port','!=','')
+            ->where('mine_list_ext.key','!=','')
+            ->where('mine_list_ext.secret','!=','')
+            ->where('mine_list_ext.deleted_at',null)->get();
+
+        if(sizeof($mine_list_ext)>0){
+            for($i=0;$i<sizeof($mine_list_ext);$i++){//循环同步所有天地伟业矿区
+
+                Input::replace(
+                    [
+                        'parentOrgIds'   => $mine_list_ext[$i]->sOrgId,
+                        'url'      => $mine_list_ext[$i]->ip.":".$mine_list_ext[$i]->port,
+                        'username' => $mine_list_ext[$i]->key,
+                        'password' => $mine_list_ext[$i]->secret,
+                        'sysId'     => 'PG',
+                    ]
+                );
+                $tdwy = new TdwyController();
+                $region = $tdwy->getRegionByOrgId();
+                $mine_id = $mine_list_ext[$i]->mine_id;
+                //更新区域
+                $result['data']['list'] = $tdwy->saveTrees($region, $mine_id);
+            }
+        }
+
+        //天地区域同步结束时间
+//        $syn['td_area_end_time'] = date('Y-m-d H:i:s');
+//        DB::table('syn')->insert($syn);
+    }
+
+    public function updateCameraList()
+    {
+        //海康
+        //查询存在index_code列表
+        $index_code_list = MineList::where('index_code', '!=', null)->get();
+
+        //不在线矿区
+        $mine_list_ext = DB::table('mine_list_ext')->where('deleted_at',null)->where('ip','!=',null)->get();
+        for($i=0;$i<count($mine_list_ext);$i++){
+            $ip = explode('://',$mine_list_ext[$i]->ip)[1];
+            $port = $mine_list_ext[$i]->port;
+            if($fp = @fsockopen($ip,$port,$errno,$errstr,1)){
+                fclose($fp);
+            }else{
+                $arr[] = $mine_list_ext[$i]->mine_id;
+            }
+        }
+
+        //去掉不在线矿区
+        foreach($index_code_list as $k=>$v){
+            $degree = explode('|',$v->degree);
+            if(isset($arr)){
+                for($i=0;$i<count($arr);$i++){
+                    if($degree[0] == $arr[$i]){
+                        unset($index_code_list[$k]);
+                    }
+                }
+            }
+        }
+
+        //去掉洗选
+//        foreach($index_code_list as $k=>$v){
+//            $degree = explode('|',$v->degree);
+//            if($degree[0] == 66){
+//                unset($index_code_list[$k]);
+//            }
+//        }
+
+        //天地伟业矿区
+        $mine_ext = DB::table('mine_list_ext')
+            ->select('mine_list_ext.*','mine_list.parent_id')
+            ->leftJoin('mine_list','mine_list.id','=','mine_list_ext.mine_id')
+            ->where('mine_list.parent_id',0)
+            ->where('mine_list_ext.is_hak',MineEnum::IS_HAK_TD)
+            ->where('mine_list_ext.ip','!=','')
+            ->where('mine_list_ext.port','!=','')
+            ->where('mine_list_ext.key','!=','')
+            ->where('mine_list_ext.secret','!=','')
+            ->where('mine_list_ext.deleted_at',null)->get();
+
+        $mine_id_list = [];
+        foreach($mine_ext as $k=>$v){
+            $mine_id_list[$k] = $v->mine_id;
+        }
+        //清除天地伟业的区域
+        if(count($mine_id_list) > 0){
+            foreach($index_code_list as $k=>$v){
+                if(in_array(explode('|',$v->degree)[0],$mine_id_list)){
+                    unset($index_code_list[$k]);
+                }
+            }
+        }
+
+        //海康摄像头同步开始时间
+//        $syn_id = DB::table('syn')->orderBy('id','desc')->pluck('id')->first();
+//        $syn1['hk_camera_start_time'] = date('Y-m-d H:i:s');
+//        DB::table('syn')->where('id',$syn_id)->update($syn1);
+
+//        $nm_camera_time = 0;
+        foreach ($index_code_list as $key => $val) {
+
+            //宁煤同步摄像头开始时间
+//            $nm_start_time = time();
+//            $timetotal['mine_id'] = $val->id;
+//            $timetotal['interface_start_time'] = date('Y-m-d H:i:s');
+
+            $degree       = explode('|', $val->degree);
+//            $trans_result = CameraServices::getHaiKangTransList($degree[0]);
+            $result       = CameraServices::getHaiKangCamera($degree[0], $val->index_code, CameraEnum::CAMERA_TYPE_ALL);
+
+//            $info = DB::table('syn')->select('interface','handle')->orderBy('id','desc')->first();
+//            $syn2['interface'] = $info->interface . $val->id . ':' . (time() - $nm_start_time) . ';';
+//            $timetotal['interface_end_time'] = date('Y-m-d H:i:s');
+//            $timetotal['handle_start_time'] = date('Y-m-d H:i:s');
+//            DB::table('syn')->where('id',$syn_id)->update($syn2);
+
+//            $handle_start = time();
+
+            if ($result['status']) {
+                $trans_arr = [];
+//                foreach ($trans_result['data'] as $tk => $tv) {
+//                    $trans_arr[$tv['indexCode']]['ip'] = $tv['ip'];
+//                }
+
+                $index_code_arr = [];
+//                $arr_count = count($result['data']);
+                foreach ($result['data'] as $k => $v) {
+                    $ip         = '';
+                    $port       = '';
+                    $com_number = '';
+//                    if (isset($trans_arr[$v['trans_code']])) {
+//                        $ip         = $trans_arr[$v['trans_code']]['ip'];
+//                        $port       = CameraEnum::HAK_DEFAULT_PORT;
+//                        $com_number = $v['com_number'];
+//                    }
+
+                    //当前摄像头index_code数组
+                    $index_code_arr[$k] = $v['camera_id'];
+
+                    //更新时间距当前时间天数
+//                    $update_time = strtotime($v['updateTime']);
+//                    $update_time = number_format((time() - $update_time)/(60*60*24),2);
+
+                    $params = [
+                        'mine_id'       => $val->id,
+                        'camera_name'   => $this->transformCameraName($v['camera_name']),
+                        'index_code'    => $v['camera_id'],
+                        'revert_id'     => CameraEnum::CAMERA_DEFAULT_REVERT_ID,
+                        'camera_source' => CameraEnum::CAMERA_SOURCE_2,
+                        'ip'            => $ip,
+                        'port'          => $port,
+                        'com_number'    => $com_number,
+                        //'sort'          => $arr_count - $k,
+//                        'camera_status'        => $v['camera_status'],
+                    ];
+
+//                    if($result['is_update'] == true){
+                    CameraList::updateOrCreate(['index_code' => $v['camera_id']], $params);
+//                    }elseif($update_time < 10){
+//                        CameraList::updateOrCreate(['index_code' => $v['camera_id']], $params);
+//                    }
+
+                }
+
+                //删除不存在的摄像头
+                CameraList::where('mine_id', $val->id)->where('index_code', '!=', NULL)->whereNotIn('index_code', $index_code_arr)->delete();
+            }
+
+//            $syn2['handle'] = $info->handle . $val->id . ':' . (time() - $handle_start) . ';';
+//            $timetotal['handle_end_time'] = date('Y-m-d H:i:s');
+//            DB::table('syn')->where('id',$syn_id)->update($syn2);
+//            DB::table('timetotal')->insert($timetotal);
+
+//            if($val->parent_id == 968){
+//                //宁煤同步摄像头时间
+//                $nm_camera_time += time() - $nm_start_time;
+//            }
+
+        }
+
+//        $syn['nm_camera_time'] = $nm_camera_time;//宁煤单个区域同步时间
+//        DB::table('syn')->where('id',$syn_id)->update($syn);
+
+        //海康摄像头同步结束时间
+//        $syn['hk_camera_end_time'] = date('Y-m-d H:i:s');
+//        DB::table('syn')->where('id',$syn_id)->update($syn);
+
+        //天地伟业需要同步的矿区
+        $mine_list_ext = DB::table('mine_list_ext')
+            ->select('mine_list_ext.*','mine_list.parent_id')
+            ->leftJoin('mine_list','mine_list.id','=','mine_list_ext.mine_id')
+            ->where('mine_list.parent_id',1)//0,先不同步天地伟业摄像头
+            ->where('mine_list_ext.is_hak',MineEnum::IS_HAK_TD)
+            ->where('mine_list_ext.ip','!=','')
+            ->where('mine_list_ext.port','!=','')
+            ->where('mine_list_ext.key','!=','')
+            ->where('mine_list_ext.secret','!=','')
+            ->where('mine_list_ext.deleted_at',null)->get();
+
+        //天地摄像头同步开始时间
+//        $syn['td_camera_start_time'] = date('Y-m-d H:i:s');
+//        DB::table('syn')->where('id',$syn_id)->update($syn);
+
+        if(sizeof($mine_list_ext)>0){
+            for($i=0;$i<sizeof($mine_list_ext);$i++){//循环同步所有天地伟业矿区
+                //矿区下所有区域
+                $mine_list = DB::table('mine_list')
+                    ->where('degree','like',$mine_list_ext[$i]->mine_id.'|%')
+                    ->where('index_code','!=',null)->get();
+                foreach($mine_list as $k=>$v){
+                    $mine_id = $v->id;
+                    Input::replace(
+                        [
+                            'parentOrgIds'   => $v->index_code,
+                            'url'      => $mine_list_ext[$i]->ip.":".$mine_list_ext[$i]->port,
+                            'username' => $mine_list_ext[$i]->key,
+                            'password' => $mine_list_ext[$i]->secret,
+                            'sysId'     => 'PG',
+                        ]
+                    );
+                    //获取区域下的子区域
+                    $tdwy = new TdwyController();
+                    $region = $tdwy->getRegionByOrgId();
+
+                    //获取最底层区域摄像头列表
+                    if (empty($region['content'])) {
+                        Input::replace(
+                            [
+                                'url'      => $mine_list_ext[$i]->ip.":".$mine_list_ext[$i]->port,
+                                'username' => $mine_list_ext[$i]->key,
+                                'password' => $mine_list_ext[$i]->secret,
+                                'sysId'     => 'PG',
+                                'sOrgId'   => $v->index_code,
+                                'ip'       => $mine_list_ext[$i]->ip,
+                                'port'     => $mine_list_ext[$i]->port,
+                            ]
+                        );
+                        //获取设备列表
+                        $tdwy = new TdwyController();
+                        $device_list = $tdwy->queryDeviceList();
+                        $device_index_code = [];
+                        //删除区域下所有摄像头
+//                        DB::table('camera_list')->where('mine_id',$v->id)->delete();
+                        if(isset($device_list['content']) && sizeof($device_list['content'])>0){
+                            for($j=0;$j<sizeof($device_list['content']);$j++){//循环添加区域下所有摄像头
+                                if(isset($device_list['content'][$j]['sId'])){//筛选有sId的摄像头
+                                    if($device_list['content'][$j]['onlineStatus'] == 0){
+                                        $device_list['content'][$j]['onlineStatus'] = 2;
+                                    }
+                                    $params = [
+                                        'mine_id'       => $v->id,
+                                        'ip'            => $mine_list_ext[$i]->ip,
+                                        'port'          => 1554,
+                                        'revert_id'     => CameraEnum::CAMERA_DEFAULT_REVERT_ID,
+                                        'sort'          => sizeof($device_list['content']) - $j,
+                                        'camera_name'   => $device_list['content'][$j]['sName'],
+                                        'camera_source' => CameraEnum::CAMERA_SOURCE_2,
+                                        'index_code'    => $device_list['content'][$j]['sId'],
+                                        'video_recorder'=> CameraEnum::VIDEO_RECORDER_TD,
+                                        'camera_status' => $device_list['content'][$j]['onlineStatus'],
+                                    ];
+                                    CameraList::updateOrCreate(['index_code' => $device_list['content'][$j]['sId']], $params);
+                                }
+                                $device_index_code[$j] = $device_list['content'][$j]['sId'];
+                            }
+                        }
+                        //删除不存在的摄像头
+                        CameraList::where('mine_id', $mine_id)->where('index_code', '!=', NULL)->whereNotIn('index_code', $device_index_code)->delete();
+                    }
+                }
+            }
+        }
+
+        //天地摄像头同步结束时间
+//        $syn['td_camera_end_time'] = date('Y-m-d H:i:s');
+//        DB::table('syn')->where('id',$syn_id)->update($syn);
+    }
+
+    //转义摄像头名称中的特殊字符
+    public function transformCameraName($camera_name)
+    {
+        $camera_name = trim($camera_name);
+        $camera_name = str_replace('#', '号', $camera_name);
+        $camera_name = str_replace(' ', '-', $camera_name);
+        $camera_name = str_replace('+', '', $camera_name);
+        return $camera_name;
+    }
+}

+ 5 - 1
app/Console/Commands/UpdateHkList.php

@@ -50,7 +50,7 @@ class UpdateHkList extends Command
     {
         $start_time = time();
         echo '开始时间:'.date('Y-m-d H:i:s');
-        $this->updateAreaList();
+//        $this->updateAreaList();
         $this->updateCameraList();
         echo '时长:'.number_format(((time()-$start_time)/60),2).'分钟';
     }
@@ -366,6 +366,10 @@ class UpdateHkList extends Command
         //天地摄像头同步结束时间
 //        $syn['td_camera_end_time'] = date('Y-m-d H:i:s');
 //        DB::table('syn')->where('id',$syn_id)->update($syn);
+
+        //同步大华视频服务器摄像头
+        $tdwy = new TdwyController();
+        $tdwy->dahuaCamera();
     }
 
     //转义摄像头名称中的特殊字符

+ 37 - 4
app/Http/Controllers/TestsController.php

@@ -30,9 +30,6 @@ class TestsController {
 
     public function test()
     {
-        $res = DB::connection('etl_zaoquan')->select("select * from news_column_list")->get();
-        dd($res);
-
         //宁煤洗选重复摄像头
         //$this->xixuan_repeat();
 
@@ -63,8 +60,44 @@ class TestsController {
 
     //区域下摄像头接口测试
     public function camera_list(){
-        $result = CameraServices::getHaiKangCamera(968, '64018112582160000010', CameraEnum::CAMERA_TYPE_ALL);
+        $result = CameraServices::getHaiKangCamera(968, '64018155582160000014', CameraEnum::CAMERA_TYPE_ALL);
+
         dd($result);
+        //同步区域下摄像头
+        if ($result['status']) {
+            $trans_arr = [];
+            $index_code_arr = [];
+            foreach ($result['data'] as $k => $v) {
+                $ip         = '';
+                $port       = '';
+                $com_number = '';
+                //当前摄像头index_code数组
+                $index_code_arr[$k] = $v['camera_id'];
+                $params = [
+                    'mine_id'       => 4840,
+                    'camera_name'   => $this->transformCameraName($v['camera_name']),
+                    'index_code'    => $v['camera_id'],
+                    'revert_id'     => CameraEnum::CAMERA_DEFAULT_REVERT_ID,
+                    'camera_source' => CameraEnum::CAMERA_SOURCE_2,
+                    'ip'            => $ip,
+                    'port'          => $port,
+                    'com_number'    => $com_number,
+                ];
+                CameraList::updateOrCreate(['index_code' => $v['camera_id']], $params);
+            }
+            //删除不存在的摄像头
+            CameraList::where('mine_id', $val->id)->where('index_code', '!=', NULL)->whereNotIn('index_code', $index_code_arr)->delete();
+        }
+    }
+
+    //转义摄像头名称中的特殊字符
+    public function transformCameraName($camera_name)
+    {
+        $camera_name = trim($camera_name);
+        $camera_name = str_replace('#', '号', $camera_name);
+        $camera_name = str_replace(' ', '-', $camera_name);
+        $camera_name = str_replace('+', '', $camera_name);
+        return $camera_name;
     }
 
     //直播列表

+ 37 - 0
config/database.php

@@ -204,6 +204,43 @@ return [
             ]) : [],
         ],
 
+        'task_xixuan' => [
+            'driver'         => 'mysql',
+            'host'           => env('DB_TASK_XIXUAN_HOST', '127.0.0.1'),
+            'port'           => env('DB_TASK_XIXUAN_PORT', '3306'),
+            'database'       => env('DB_TASK_XIXUAN_DATABASE', 'task_xixuan'),
+            'username'       => env('DB_TASK_XIXUAN_USERNAME', ''),
+            'password'       => env('DB_TASK_XIXUAN_PASSWORD', ''),
+            'unix_socket'    => '',
+            'charset'        => 'utf8mb4',
+            'collation'      => 'utf8mb4_general_ci',
+            'prefix'         => '',
+            'prefix_indexes' => true,
+            'strict'         => true,
+            'engine'         => null,
+            'options'        => extension_loaded('pdo_mysql') ? array_filter([
+                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
+            ]) : [],
+        ],
+
+        'mysql_fwview' => [
+            'driver'         => env('DB_JJQKUANGYA_CONNECTION', 'mysql'),
+            'host'           => env('DB_JJQKUANGYA_HOST', '10.186.134.143'),
+            'port'           => env('DB_JJQKUANGYA_PORT', '3306'),
+            'database'       => env('DB_JJQKUANGYA_DATABASE', 'ecology'),
+            'username'       => env('DB_JJQKUANGYA_USERNAME', 'ecology'),
+            'password'       => env('DB_JJQKUANGYA_PASSWORD', 'Weavere9_2021'),
+            'unix_socket'    => '',
+            'charset'        => 'utf8mb4',
+            'collation'      => 'utf8mb4_general_ci',
+            'prefix'         => '',
+            'prefix_indexes' => true,
+            'strict'         => true,
+            'engine'         => null,
+            'options'        => extension_loaded('pdo_mysql') ? array_filter([
+                                                                                 PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
+                                                                             ]) : [],
+        ],
     ],
 
     /*

+ 218 - 0
public/inspection_record.html

@@ -0,0 +1,218 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+    <meta charset="UTF-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>Document</title>
+    <script src="https://unpkg.com/vue@2/dist/vue.js"></script>
+    <script src="https://unpkg.com/element-ui@2.15.14/lib/index.js"></script>
+	<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
+	<style>
+		@import url("https://unpkg.com/element-ui@2.15.14/lib/theme-chalk/index.css");
+		*{
+			margin:0;
+			padding:0;
+		}
+		.el-calendar__header{
+			border:none;
+		}
+		.el-calendar__body{
+			margin-top:-24px;
+		}
+		td{
+			text-align:center;
+		}
+		.el-calendar-table .el-calendar-day{
+			height:auto;
+		}
+		.el-calendar-table td{
+			border:none;
+		}
+		.el-calendar-table tr td:first-child{
+			border:none;
+		}
+		.el-calendar-table .el-calendar-day{
+			padding:6px;
+		}
+		.el-calendar-table tr:first-child td{
+			border:none;
+		}
+		.el-calendar-day span{
+			font-size:14px;
+		}
+		.form{
+			display:flex;
+			justify-content: space-between;
+			padding:0 20px;
+			margin-top:-20px;
+			margin-bottom:-20px;
+		}
+		.form input{
+			background:#F6F6F6;
+			border:none;
+			border-radius: 10px;
+			width:120px;
+			padding:5px 10px;
+		}
+		.form button{
+			border:none;
+			color:white;
+			background:#3B70FE;
+			border-radius: 10px;
+			width:60px;
+			height:40px;
+		}
+		.list{
+			padding:20px;
+		}
+		.list .item{
+			display:flex;
+			justify-content: space-between;
+			align-items: center;
+			margin-bottom:20px;
+		}
+		.list .item .left{
+			display:flex;
+			align-items: center;
+			position:relative;
+		}
+		.list .item .left .shu{
+			border-left:1px solid #DADADA;
+			width:1px;
+			height:30px;
+			position:absolute;
+			left:5px;
+			top:16px;
+		}
+		.list .item span{
+			color:#DADADA;
+		}
+		.list .item .left .yuan{
+			width:10px;
+			height:10px;
+			border-radius: 50%;
+			border:1px solid #DBDBDB;
+			margin-right:10px;
+		}
+		.list .item .left .through{
+			background:#3F6EFE;
+		}
+	</style>
+</head>
+
+<body>
+    <div id="app">
+        <el-calendar v-model="val">
+        </el-calendar>
+		<div class="form">
+			<!-- <input type="text" v-model="section" placeholder="单位名称"> -->
+			<!-- <input type="text" v-model="name" placeholder="姓名"> -->
+			<el-form :inline="true" class="demo-form-inline">
+			  <el-form-item>
+			    <el-select v-model="section" placeholder="单位名称" @change="handleSectionChange">
+			      <el-option v-for="(item,index) in select_list" :key="index" :label="item.name" :value="item.name"></el-option>
+			    </el-select>
+			  </el-form-item>
+			  <el-form-item>
+			    <el-select v-model="name" placeholder="姓名">
+			      <el-option v-for="(item,index) in name_select" :key="index" :label="item.person_name" :value="item.person_id"></el-option>
+			    </el-select>
+			  </el-form-item>
+			</el-form>
+			<button @click="search">搜索</button>
+		</div>
+		<div class="list">
+			<div class="item" v-for="(item,index) in record_list" :key="index" @click="page_dump(item.url)">
+				<div class="left">
+					<div class="yuan" :class="{ 'through': item.date }"></div>
+					<div class="shu"></div>
+					<p>{{item.area}}</p>
+				</div>
+				<span>{{item.date}}</span>
+			</div>
+		</div>
+    </div>
+
+    <script>
+        var Main = {
+            data() {
+              return {
+                val: new Date(),
+				section:'',
+				name:'',
+				ind:0,
+				select_list:[],
+				name_select:[],
+				record_list:[]
+              }
+            },
+			created(){
+				this.get_select()
+			},
+			watch: {
+			    val(newValue, oldValue) {
+			      this.get_select()
+			      // 在这里可以处理选中日期改变的逻辑
+			      // 例如:
+			      // this.fetchEvents(newValue); // 拉取新选中日期的事件
+			    },
+			  },
+			methods:{
+				search(){
+					this.get_select()
+					const date = new Date(this.val);
+					const year = date.getFullYear();
+					const month = ('0' + (date.getMonth() + 1)).slice(-2);  // 月份从0开始,需要加1并补零
+					const day = ('0' + date.getDate()).slice(-2);           // 获取日并补零
+					const formattedDate = `${year}-${month}-${day}`;
+					const loading = this.$loading({
+					  lock: true,
+					  text: '数据加载中',
+					  spinner: 'el-icon-loading',
+					  background: 'rgba(0, 0, 0, 0.7)'
+					});
+					axios.post('http://anvideo.nxmy.com:8011/api/fanwei/get_person_travel',{'person_id':this.name,'date':formattedDate,'depart':this.section})
+						.then( (response)=> {
+							this.record_list = response.data.content.data
+							loading.close()
+						})
+						.catch(function (error) {
+							console.log(error);
+							loading.close()
+						});
+				},
+				get_select() {
+					const date = new Date(this.val);
+					const year = date.getFullYear();
+					const month = ('0' + (date.getMonth() + 1)).slice(-2);  // 月份从0开始,需要加1并补零
+					const day = ('0' + date.getDate()).slice(-2);           // 获取日并补零
+					const formattedDate = `${year}-${month}-${day}`;
+					
+					axios.post('http://anvideo.nxmy.com:8011/api/fanwei/get_query_conition',{'date':formattedDate})
+						.then( (response)=> {
+							this.select_list = response.data.content.data
+						})
+						.catch(function (error) {
+							console.log(error);
+						});
+				},
+				handleSectionChange() {
+					this.name = ''
+					this.ind = this.select_list.findIndex(item => item.name === this.section)
+					this.name_select = this.select_list[this.ind].person_list
+				},
+				page_dump(url){
+					if(url != ''){
+						window.location.href = 'http://10.186.132.147'+url
+					}
+				}
+			}
+          }
+        var Ctor = Vue.extend(Main)
+        new Ctor().$mount('#app')
+    </script>
+</body>
+
+</html>