cqp 3 mesi fa
parent
commit
54c841a9b3

+ 7 - 0
app/Http/Controllers/Api/JobController.php

@@ -2,9 +2,16 @@
 
 namespace App\Http\Controllers\Api;
 
+use App\Jobs\ManDeviceJobLf;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Redis;
 
 class JobController extends BaseController
 {
+    //有人云(朗峰)
+    public function processDataJobAddDeviceManLf(Request $request){
+        dispatch(new ManDeviceJobLf($request->all()))->onQueue('man_device_lf');
+
+        echo $request->get('verify');die;
+    }
 }

+ 164 - 0
app/Jobs/ManDeviceJobLf.php

@@ -0,0 +1,164 @@
+<?php
+
+namespace App\Jobs;
+
+use App\Model\DeviceDataLf;
+use App\Model\LfDevice;
+use App\Service\ClearDataService;
+use Illuminate\Bus\Queueable;
+use Illuminate\Contracts\Queue\ShouldQueue;
+use Illuminate\Foundation\Bus\Dispatchable;
+use Illuminate\Queue\InteractsWithQueue;
+use Illuminate\Queue\SerializesModels;
+use Symfony\Component\Console\Output\OutputInterface;
+
+class ManDeviceJobLf implements ShouldQueue
+{
+    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
+
+    protected $data;
+    protected $url;
+
+    /**
+     * Create a new job instance.
+     *
+     * @return void
+     */
+    public function __construct($data)
+    {
+        $this->data = $data;
+        $this->url = config('ip.zslf');
+    }
+
+    /**
+     * Execute the job.
+     *
+     * @return void
+     */
+    public function handle()
+    {
+        try{
+            if(empty($this->data['data'])) return;
+
+            $device = LfDevice::select('data')->get()->toArray();
+            $device = array_column($device,'data');
+
+            $deviceId = $this->data['data']['deviceId'];
+            $deviceName = $this->data['data']['deviceName'];
+            $ip = self::getIP();
+            $data_type = 3;
+            if($this->data['type'] == "dataPoint"){
+                $insert = [];
+                foreach ($this->data['data']['dataPoints'] as $value){
+                    $dev_eui = $deviceId . $value['dataPointId'];
+
+                    if(! in_array($dev_eui,$device)) continue;
+
+                    if(empty($value['value'])) continue;
+
+                    //发送给朗峰
+                    $this->sendToDevice(['dev_eui' => $dev_eui, 'value' => $value['value']]);
+
+//                    $insert[] = [
+//                        'happening_data' => $value['value'],
+//                        'dev_eui' => $dev_eui,
+//                        'device_name' => $deviceName,
+//                        'source_ip' => $ip,
+//                        'data_type' => $data_type,
+//                        'crt_time' => time()
+//                    ];
+                }
+//                DeviceDataLf::insert($insert);
+            }
+        }catch (\Exception $exception){
+            file_put_contents('send_man_error_lf.txt',date("Y-m-d H:i:s").json_encode($this->data).PHP_EOL.$exception->getMessage().$exception->getLine().$exception->getFile().PHP_EOL,8);
+        }
+    }
+
+    public function sendToDevice($data){
+        list($status,$token) = ClearDataService::getTokenLf();
+        if(! $status) return;
+
+        $url = $this->url . "api/module-data/device_machine_record/device_machine_record";
+        $post = [
+            'bizId' => -1,
+            'bizTypeEk' => 'LOWCODE',
+            'data' => [
+                'device_machine_record' => [
+                    'machine_code' => $data['dev_eui'],
+                    'param_value' => $data['value'],
+                    'record_time' => $this->getNowDay()
+                ]
+            ],
+            'dynamicFormId' => '477743923368955904',
+            'showModelId' => '477745421456904192'
+        ];
+        $header = ["Authorization: Bearer {$token}","Content-Type:application/json"];
+
+        $curl = curl_init();
+        curl_setopt_array($curl, array(
+            CURLOPT_URL => $url,
+            CURLOPT_RETURNTRANSFER => true,
+            CURLOPT_ENCODING => '',
+            CURLOPT_MAXREDIRS => 10,
+            CURLOPT_TIMEOUT => 0,
+            CURLOPT_FOLLOWLOCATION => true,
+            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
+            CURLOPT_CUSTOMREQUEST => 'POST',
+            CURLOPT_POSTFIELDS => json_encode($post),
+            CURLOPT_SSL_VERIFYPEER => false,
+            CURLOPT_HTTPHEADER => $header,
+        ));
+        $response = curl_exec($curl);
+        if ($response === false) {
+            // 获取错误号
+            $errorNumber = curl_errno($curl);
+            // 获取错误信息
+            $errorMessage = curl_error($curl);
+            $message = "cURL Error #{$errorNumber}: {$errorMessage}";
+            file_put_contents('record_man_lf_error.txt',date('Y-m-d H:i:s'). PHP_EOL . $message .PHP_EOL,8);
+        }
+        curl_close($curl);
+
+        $res = json_decode($response,true);
+        if(isset($res['code'])){//报错了
+            file_put_contents('record_man_lf_error.txt',date('Y-m-d H:i:s'). PHP_EOL . $response .PHP_EOL.json_encode($post),8);
+        }
+    }
+
+    public static function getIP(){
+        if (getenv('HTTP_CLIENT_IP')) {
+            $ip = getenv('HTTP_CLIENT_IP');
+        }
+        elseif (getenv('HTTP_X_REAL_IP')) {
+            $ip = getenv('HTTP_X_REAL_IP');
+        } elseif (getenv('HTTP_X_FORWARDED_FOR')) {
+            $ip = getenv('HTTP_X_FORWARDED_FOR');
+            $ips = explode(',', $ip);
+            $ip = $ips[0];
+        } elseif (getenv('REMOTE_ADDR')) {
+            $ip = getenv('REMOTE_ADDR');
+        } else {
+            $ip = '0.0.0.0';
+        }
+        return $ip;
+    }
+
+    protected function echoMessage(OutputInterface $output)
+    {
+        $output->writeln($this->data);
+    }
+
+    function getNowDay(){
+        // 获取当前时间
+        $currentDateTime = new \DateTime();
+
+// 设置时区为 PRC
+        $currentDateTime->setTimezone(new \DateTimeZone('UTC'));
+
+// 格式化时间为 "2023-09-21T16:00:00.000Z" 的格式
+        $formattedDateTime = $currentDateTime->format('Y-m-d\TH:i:s.000\Z');
+
+        return $formattedDateTime;
+    }
+}

+ 14 - 0
app/Model/LfDevice.php

@@ -0,0 +1,14 @@
+<?php
+
+namespace App\Model;
+
+use Illuminate\Database\Eloquent\Model;
+
+class LfDevice extends Model
+{
+    protected $table = "lf_device"; //指定表
+    const CREATED_AT = null;
+    const UPDATED_AT = null;
+    protected $dateFormat = 'U';
+
+}

+ 58 - 0
app/Service/ClearDataService.php

@@ -0,0 +1,58 @@
+<?php
+
+namespace App\Service;
+
+
+use App\Model\DeviceData;
+use Illuminate\Support\Facades\Redis;
+
+class ClearDataService extends Service
+{
+    public static function getTokenLf(){
+        $token_key = 'lf_device_token';
+        $token = Redis::get($token_key);
+        if(! $token){
+            $url = config('ip.zslf');
+            $post = array("name" => "admin","password"=>"gzy#12345","rememberMe"=>true);
+            $header = ['Content-Type:application/json'];
+            $curl = curl_init();
+            curl_setopt_array($curl, array(
+                CURLOPT_URL => $url . 'jbl/api/mes/login',
+                CURLOPT_RETURNTRANSFER => true,
+                CURLOPT_ENCODING => '',
+                CURLOPT_MAXREDIRS => 10,
+                CURLOPT_TIMEOUT => 0,
+                CURLOPT_FOLLOWLOCATION => true,
+                CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
+                CURLOPT_CUSTOMREQUEST => 'POST',
+                CURLOPT_SSL_VERIFYPEER => false,
+                CURLOPT_POSTFIELDS => json_encode($post),
+                CURLOPT_HTTPHEADER =>  $header,
+            ));
+            $response = curl_exec($curl);
+            if ($response === false) {
+                // 获取错误号
+                $errorNumber = curl_errno($curl);
+                // 获取错误信息
+                $errorMessage = curl_error($curl);
+                $message = "cURL Error #{$errorNumber}: {$errorMessage}";
+                file_put_contents('lf_device_error.txt',date('Y-m-d H:i:s'). PHP_EOL . $message .PHP_EOL,8);
+            }
+
+            curl_close($curl);
+            $result = json_decode($response,true);
+            if(empty($result['token'])) {
+                file_put_contents('lf_device_error.txt',date('Y-m-d H:i:s'). PHP_EOL . $response .PHP_EOL,8);
+                return [false,''];
+            }else{
+                $token = $result['token'];
+                $expire_time = 1728000; //20天
+                Redis::set($token_key,$token);
+                Redis::expire($token_key, $expire_time);
+                return [true,$token];
+            }
+        }
+
+        return [true,$token];
+    }
+}

+ 1 - 0
config/ip.php

@@ -3,4 +3,5 @@
 return [
     'cs' => 'http://121.36.142.167:7774/', //测试
     'zs' => 'http://122.112.250.253:7774/', //正式
+    'zslf' => 'https://gzy.qingyaokeji.com/', //正式朗峰
 ];

+ 3 - 0
routes/api.php

@@ -32,6 +32,9 @@ Route::any('testdwyget','Api\TestController@testdwyget');
 Route::any('testdwyput','Api\TestController@testdwyput');
 Route::any('getFileData','Api\ImportController@getFileData');
 
+//朗峰
+Route::any('man_device_lf', 'Api\JobController@processDataJobAddDeviceManLf');
+
 //设备大屏 设备报表
 Route::any('deviceStatisticsReportChart', 'Api\ReportFormsController@deviceStatisticsReportChart');
 Route::any('deviceStatisticsReportOEEChart', 'Api\ReportFormsController@deviceStatisticsReportOEEChart');