wang jun 1 year ago
parent
commit
e845b9d814
2 changed files with 65 additions and 15 deletions
  1. 33 12
      application/common/server/ShOneanalysis.php
  2. 32 3
      application/workerman/ShTcp.php

+ 33 - 12
application/common/server/ShOneanalysis.php

@@ -186,6 +186,12 @@ class ShOneanalysis
                 ],
                 'kind' => 'back',
             ],
+            'OXYGEN' => [
+                'content' => [
+                    'command' => 'oxygen',
+                ],
+                'kind' => 'back',
+            ],
         ];
         if (!isset($data[$command])) {
             return false;
@@ -321,6 +327,14 @@ class ShOneanalysis
                 'kind' => 'tsend',
                 'need_back' => 1,
             ],
+            'OXYGEN' => [
+                'content' => [
+                    'command' => 'oxygen',
+                    'oxygen' => '',
+                ],
+                'kind' => 'tsend',
+                'need_back' => 1,
+            ],
         ];
         if (!isset($data[$command])) {
             return false;
@@ -410,6 +424,7 @@ class ShOneanalysis
         $finfo = $m_f->getInfo($where, ['id']);
         if (empty($finfo)) {
             throw new \Exception("设备信息错误:" . $device_id_code);
+            return false;
         }
         $id = $finfo['id'];
         return $id;
@@ -427,7 +442,9 @@ class ShOneanalysis
     {
         $infoarr = $this->gettsendcommandinfo($command);
         if (!$infoarr) {
-            throw new \Exception("无对应命令数据1:" . $command);
+            Log::write("无对应命令数据1:" . $command, 'shouhuan');
+            Log::write($data, 'shouhuan');
+            return false;
         }
         $data = $this->getdata($data, $command, $infoarr);
         $info_content = $data['info_content'];
@@ -537,7 +554,9 @@ class ShOneanalysis
         $command = $data[0];
         $infoarr = $this->gettsendcommandinfo($command);
         if (!$infoarr) {
-            throw new \Exception("无对应命令数据2:" . $command);
+            Log::write("无对应命令数据2:" . $command, 'shouhuan');
+            Log::write($data, 'shouhuan');
+            return false;
         }
         $data = $this->getdata($data, $data[0], $infoarr);
         $m_sri = new ShoneReceiveInfoModel();
@@ -556,6 +575,7 @@ class ShOneanalysis
         if (empty($sriinfo)) {
             $sriinsertData = $data;
             $sriinsertData['createtime'] = date('Y-m-d H:i:s');
+            $sriinsertData = $m_sri->formatinfo($sriinsertData);
             $sriid = $m_sri->insertData($sriinsertData);
             if (empty($sriid)) {
                 throw new \Exception("设备信息添加失败:" . $device_id_code);
@@ -566,6 +586,7 @@ class ShOneanalysis
             $sriid = $sriinfo['id'];
             $sriupdateData = $data;
             $sriupdateData['updatetime'] = date('Y-m-d H:i:s');
+            $sriupdateData = $m_sri->formatinfo($sriupdateData);
             $row = $m_sri->updateinfo(['id' => $sriid], $sriupdateData);
             if (empty($row)) {
                 throw new \Exception("设备信息修改失败:" . $device_id_code);
@@ -702,9 +723,13 @@ class ShOneanalysis
         $month = substr($date, 2, 2);
         $year = substr($date, 4, 2);
         $year1 = date('Y');
-        $year1 = substr($year1, 0, 2);
-        $year = $year1 . $year;
-        $day = $year . '-' . $month . '-' . $day;
+        $year2 = substr($year1, 0, 2);
+        $year = $year2 . $year;
+        if ($year != $year1) {
+            $day = date('Y-m-d');
+        } else {
+            $day = $year . '-' . $month . '-' . $day;
+        }
         return $day;
     }
     public function gettime($time)
@@ -739,15 +764,11 @@ class ShOneanalysis
     {
         $arr = explode("][", $data);
         foreach ($arr as $key => $value) {
-            $regex = "/^[^[].*$/";
-            preg_match($regex, $value, $mc0);
-            $regex = "/^.*[^]]$/";
-            preg_match($regex, $value, $mc1);
-            if ($mc0) {
+            if ($value[0] !== "[") {
                 $arr[$key] = '[' . $value;
             }
-            if ($mc1) {
-                $arr[$key] = $value . "]";
+            if ($value[mb_strlen($value) - 1] !== "]") {
+                $arr[$key] .= "]";
             }
         }
         return $arr;

+ 32 - 3
application/workerman/ShTcp.php

@@ -24,6 +24,7 @@ class ShTcp extends Server
     {
         define('HEARTBEAT_TIME', 1000);
         //异步处理
+        //发送
         $server_sa = new ShOneanalysis();
         Timer::add(1, function () use ($worker, $server_sa) {
             if (isset($worker->device_id_code)) {
@@ -44,6 +45,36 @@ class ShTcp extends Server
                 }
             }
         });
+        //解析
+        $server_sa->initanalysisShoneReceiveMsg();
+        Timer::add(10, function () use ($worker, $server_sa) {
+            $page = 1;
+            $size = 30;
+            $list = $server_sa->getreceivequeuelist($page, $size);
+            if ($list) {
+                $list = (array) $list;
+                foreach ($list as $key => $value) {
+                    try {
+                        $linedata = $server_sa->getline($value['msg']);
+                        //长度相等可解析
+                        $content = $linedata['content_str'];
+                        $device_id_code = $linedata['device_id_code'];
+                        $fid = $server_sa->getfacilityid($device_id_code);
+                        $content = $server_sa->getcommandcontent($content);
+                        $result = $server_sa->saveshinfo($fid, $device_id_code, $content, $value['msg']);
+                        if ($result) {
+                            $command = $content[0];
+                            $data = $server_sa->createbacksendmsg($fid, $device_id_code, $content, $command);
+                        }
+                        $server_sa->receivemsgsuccess($value);
+                    } catch (\Exception $e) {
+                        $msg = $e->getMessage();
+                        echo $msg . "\n";
+                        Log::write($msg, 'shouhuan');
+                    }
+                }
+            }
+        });
 
         Timer::add(1, function () use ($worker) {
             $time_now = time();
@@ -63,8 +94,7 @@ class ShTcp extends Server
     }
     public function onMessage($connection, $data)
     {
-        Log::write("ShTcp", 'shouhuan');
-
+        Log::write($data, 'shouhuan');
         $server_sa = new ShOneanalysis();
         $datas = (array) $server_sa->unpack($data);
         foreach ($datas as $key => $data) {
@@ -80,7 +110,6 @@ class ShTcp extends Server
                 Log::write($data, 'shouhuan');
                 Log::write($e->getMessage(), 'shouhuan');
                 var_dump($e->getMessage());
-                var_dump($e->getTraceAsString());
             }
         }
     }