cqpCow 1 рік тому
батько
коміт
3925e881b7

+ 38 - 0
app/Http/Controllers/Api/ScreenController.php

@@ -2,6 +2,7 @@
 
 namespace App\Http\Controllers\Api;
 
+use App\Model\Screen;
 use App\Service\ScreenService;
 use Illuminate\Http\Request;
 
@@ -121,4 +122,41 @@ class ScreenController extends BaseController
             return $this->json_return(201,$data);
         }
     }
+
+    public function screenGps(Request $request){
+        $service = new ScreenService();
+        $userData = $request->userData->toArray();
+        list($status,$data) = $service->screenGps($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+
+    public function uploadScreenFile(Request $request){
+        $service = new ScreenService();
+        $userData = $request->userData->toArray();
+        list($status,$data) = $service->uploadScreenFile($request->file('file'));
+
+        if($status){
+            return $this->json_return(200,'上传成功',['url' => $data]);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+
+    //获取文件的位置
+    public function getFile($file_name){
+        $path = storage_path() . "/app/public/screen/".$file_name;
+        $ext = '';
+        foreach (Screen::FILE_TYPE as $value){
+            if(file_exists($path. '.' . $value)){
+                $ext = $value;
+            }
+        }
+        if(empty($ext)) return '';
+        return response()->file($path.'.'.$ext);
+    }
 }

+ 8 - 0
app/Model/Screen.php

@@ -32,5 +32,13 @@ class Screen extends Model
         0 => '异常',
         1 => '正常'
     ];
+    //文件类型
+    const FILE_TYPE = [
+        'txt',
+        'jpg',
+        'png',
+        'gif',
+        'jpeg',
+    ];
 }
 

+ 3 - 0
app/Model/SystemL.php

@@ -23,4 +23,7 @@ class SystemL extends Model
         "5号热压机" => "01401422100800000342"
     ];
 
+    //高德地图调用密钥
+    const GaoDeMapKey = '3668a7fb4ad1f7d7b3efa0ead05e57a3';
+
 }

+ 65 - 1
app/Service/ScreenService.php

@@ -4,12 +4,12 @@ namespace App\Service;
 
 use App\Model\Device;
 use App\Model\DeviceType;
-use App\Model\Gateway;
 use App\Model\Screen;
 use App\Model\ScreenDevice;
 use App\Model\ScreenGateway;
 use App\Model\SystemL;
 use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\Storage;
 
 class ScreenService extends Service
 {
@@ -28,6 +28,7 @@ class ScreenService extends Service
             $model->remark = $data['remark'];
             $model->address = $data['address'] ?? '';
             $model->coordinate = $data['coordinate'] ?? '';
+            $model->img = $data['img'] ?? "";
             $model->save();
 
             ScreenGateway::where('screen_id',$data['id'])->update(['del_time' => time()]);
@@ -67,6 +68,7 @@ class ScreenService extends Service
             $model->remark = $data['remark'];
             $model->address = $data['address'] ?? '';
             $model->coordinate = $data['coordinate'] ?? '';
+            $model->img = $data['img'] ?? "";
             $model->save();
 
             if(isset($data['gateway_id'])){
@@ -383,4 +385,66 @@ class ScreenService extends Service
 
         return $data;
     }
+
+    public function screenGps($data){
+        if(empty($data['screen_id'])) return [false,'请选择仓'];
+
+        //gps类
+        $gps = ScreenDevice::from('screen_device as a')
+            ->leftJoin('device as b','b.id','a.device_id')
+            ->where('b.device_type_id',4)
+            ->where('a.del_time',0)
+            ->where('b.del_time',0)
+            ->select('b.code')
+            ->first();
+        if(empty($gps)) return [true,''];
+        $gps = $gps->toArray();
+
+        $sys_data = SystemL::where('device_no',$gps['code'])
+            ->orderBy('id','desc')
+            ->select('value')
+            ->first();
+        if(empty($sys_data)) return [true,''];
+        $location = $sys_data->value;//经纬度
+        $url = 'https://restapi.amap.com/v3/geocode/regeo?location='.$location.'&key='.SystemL::GaoDeMapKey;
+        try{
+            $return = $this->curlOpen($url);
+            $return = json_decode($return,true);
+            if(empty($return['status'])) return [false,'定位失败'];
+
+            $position = $return['regeocode']['addressComponent'] ?? [];
+            $result = [
+                'province' => $position['province'] ?? '',
+                'city' => $position['city'] ?? '',
+                'district' => $position['district'] ?? '',
+                'location' => $location
+            ];
+            return [true, $result];
+        }catch (\Exception $exception){
+            return [false,$exception->getMessage()];
+        }
+    }
+
+    public function uploadScreenFile($file){
+        // 获取文件相关信息
+        $ext = $file->getClientOriginalExtension();     // 扩展名
+        $realPath = $file->getRealPath();   //临时文件的绝对路径
+
+        $ext = strtolower($ext);
+        if (!in_array($ext, Screen::FILE_TYPE)){
+            $str = '文件格式为:';
+            foreach (Screen::FILE_TYPE as $value){
+                $str.= $value . ' ' ;
+            }
+            return [false,$str];
+        }
+
+        // 上传文件
+        $file_name = time().rand(1000,9999);
+        $filename =  $file_name.'.' . $ext;
+        // 使用我们新建的uploads本地存储空间(目录)
+        Storage::disk('public')->put('screen/'.$filename, file_get_contents($realPath));
+
+        return [true, '/api/screen/'.$file_name];
+    }
 }

+ 3 - 0
routes/api.php

@@ -20,6 +20,7 @@ Route::middleware('auth:api')->get('/user', function (Request $request) {
 Route::any('login', 'Api\LoginController@login');
 Route::any('getHeaderWord', 'Api\HeaderWordController@getHeaderWord');
 Route::any('getHeaderSetting', 'Api\HeaderWordController@getHeaderSettings');
+Route::any('screen/{file_name}', 'Api\ScreenController@getFile');
 
 //测试接口
 Route::any('test', 'Api\TestController@aa');
@@ -71,11 +72,13 @@ Route::group(['middleware'=> ['checkLogin']],function ($route){
     $route->any('screenEdit', 'Api\ScreenController@edit');
     $route->any('screenDel', 'Api\ScreenController@del');
     $route->any('screenList', 'Api\ScreenController@orderList');//仓列表
+    $route->any('uploadScreenFile', 'Api\ScreenController@uploadScreenFile');
     $route->any('screenDeviceList', 'Api\ScreenController@screenDeviceList');//仓绑定的设备列表
     $route->any('screenDevice', 'Api\ScreenController@screenDevice');//仓绑定设备
     $route->any('screenRemoveDevice', 'Api\ScreenController@screenRemoveDevice');//仓移除设备
     $route->any('screenDeviceDataRealTimeList', 'Api\ScreenController@screenDeviceDataRealTimeList');//仓设备实时数据列表
     $route->any('screenHistoryList', 'Api\ScreenController@screenHistoryList');//历史数据
+    $route->any('screenGps', 'Api\ScreenController@screenGps');//gps定位
 
     //操作日志
     $route->any('systemRecordList', 'Api\SystemRecordController@orderList');