cqpCow 10 月之前
父节点
当前提交
9e59d49392
共有 1 个文件被更改,包括 173 次插入0 次删除
  1. 173 0
      app/Console/Commands/ReadCommand.php

+ 173 - 0
app/Console/Commands/ReadCommand.php

@@ -0,0 +1,173 @@
+<?php
+
+namespace App\Console\Commands;
+
+use App\Jobs\SendDataJob;
+use App\Model\BigKingCbj;
+use App\Service\DwyService;
+use App\Service\LabelDealService;
+use Illuminate\Console\Command;
+use Illuminate\Support\Facades\Cache;
+use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\Log;
+use Illuminate\Support\Facades\Redis;
+
+class ReadCommand extends Command
+{
+    /**
+     * The name and signature of the console command.
+     *
+     * @var string
+     */
+    protected $signature = 'command:tcp';
+
+    /**
+     * The console command description.
+     *
+     * @var string
+     */
+    protected $description = '读取文件';
+
+    /**
+     * Create a new command instance.
+     *
+     * @return void
+     */
+    public function __construct()
+    {
+        parent::__construct();
+    }
+
+    const inventory_port = 7880; //盘点设备端口
+
+    /**
+     * Execute the console command.
+     *
+     * @return mixed
+     */
+    public function handle()
+    {
+        $this->tcpServer();
+        $this->info('Your command executed!');
+    }
+
+    public function tcpServer(){
+        $host = "121.41.102.225";
+        $port = self::inventory_port;
+
+        // 创建一个TCP socket
+        $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
+        // 绑定到指定的主机和端口  第二个参数不写 默认局域网ipv4地址
+        socket_bind($socket, '', $port);
+        // 监听连接
+        socket_listen($socket);
+
+        // 初始内存使用量
+        $initialMemoryUsage = memory_get_usage();
+
+        echo date("Y-m-d H:i:s") . " 服务器" . $host . ":" . $port . "已启动监听\n";
+//        file_put_contents('C:\Users\Administrator\Desktop\record.txt',date("Y-m-d H:i:s") . "服务器已启动".PHP_EOL,8);
+
+        while (true) {
+            // 接受连接请求并创建新的套接字
+            $clientSocket = socket_accept($socket);
+
+            if ($clientSocket === false) {
+                // 错误处理
+                $error = socket_strerror(socket_last_error($socket));
+                echo "接受连接请求失败:{$error}\n";
+                continue; // 继续下一次循环
+            }
+
+            // 读取客户端发送的数据
+            $data = socket_read($clientSocket, 1024);
+//            file_put_contents('C:\Users\Administrator\Desktop\record2.txt',$data .PHP_EOL,8);
+
+            $this->byteParsingInventory($data);
+
+            // 发送响应给客户端
+//            $response = "服务器已接收到您的消息:" . $data;
+//            socket_write($clientSocket, $response, strlen($response));
+
+            $currentMemoryUsage = memory_get_usage();
+            $memoryDiff = $currentMemoryUsage - $initialMemoryUsage;
+
+            echo "内存使用量变化:" . $memoryDiff . " 字节\n";
+
+            $initialMemoryUsage = $currentMemoryUsage;
+
+            // 关闭当前连接的套接字
+            socket_close($clientSocket);
+
+            gc_collect_cycles();
+
+            sleep(5);
+        }
+
+        // 关闭服务器套接字
+        socket_close($socket);
+    }
+
+    //盘点设备 数据解析发送
+    // 5a55167fa90d010cbbdd8204000116010a000000000000476a69
+    // 5a55166dcd0d010cbbdd8204000116010a000000000000596a69
+    // 5a551679b50d010cbbdd8204000116010a0000000000004d6a69
+    //
+    public function byteParsingInventory($data){
+        Log::channel('request')->info('request', ['paramlog'=> $data]);
+
+        DB::table('test')->insert(['data' => $data]);
+        echo $data . PHP_EOL;
+        $hexData = bin2hex($data);
+        $hexData = str_replace(' ', '', $hexData);
+//        $toReplace = array("5a55167fa90d010cbbdd8204000116010a000000000000476a69", "5a55166dcd0d010cbbdd8204000116010a000000000000596a69","5a551679b50d010cbbdd8204000116010a0000000000004d6a69","5a551673c10d010cbbdd8204000116010a000000000000536a69","5a55167faa0d010cbbdd8204000116010a000000000000486a69","5a551679b60d010cbbdd8204000116010a0000000000004e6a69");
+        $toReplace = [];
+        $result = str_replace($toReplace, "", $hexData);
+
+    }
+
+    //获取本机ipv4地址
+    public function getMyIpV4(){
+        $ip = exec("ipconfig | findstr /i \"IPv4\"");
+        $parts = explode(": ", $ip);
+        $ipAddress = $parts[1];
+        return $ipAddress;
+    }
+
+    public function sendData($data){
+        $url = env('CLOUD_ADDRESS',null);
+
+        if(empty($url)) return;
+
+        $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 => $data,
+        ));
+        $response = curl_exec($curl);
+        curl_close($curl);
+    }
+
+    public function cbjSettle(){
+        $id = 0;
+        BigKingCbj::where('id',0);
+        $data = $this->data;
+        $dv = $data['key'];
+        $return = $box_list = [];
+        //处理数据
+        LabelDealService::getInstance()->clearData($data,$return,$box_list);
+
+        //调用外部方法
+        list($lead_bind,$lead_out) = DwyService::getInstance()->setBoxData($this->header,$dv,$return,$box_list,$data);
+
+        //调用保存接口
+        LabelDealService::getInstance()->boxOut($lead_bind,$lead_out,$this->header,$this->id);
+    }
+}