ayHaru 4 年之前
父節點
當前提交
4bf3c22c6c
共有 2 個文件被更改,包括 142 次插入0 次删除
  1. 50 0
      extend/queue.logic.php
  2. 92 0
      extend/queue.php

+ 50 - 0
extend/queue.logic.php

@@ -0,0 +1,50 @@
+<?php
+
+use think\facade\Log;
+class queue_logic
+{
+    public function OpenBox($params) {
+        Log::record($params);
+        $box_list[] = $params['box_number'];
+        $postData['cabinet_code']       = $params['cabinet_number'];
+        $postData['box_position_list']  = $box_list;
+        $postData['delay_time']         = 0;
+        $return = http_post($params['req_url'] , $postData);
+        $return['code'] = 'ok';
+        if($return['code'] != 0){
+            $return['value'] = 'error';
+        }
+        $this->push_queue_return($params['ret_queue'] , $config['net_queue']['host'] , $config['net_queue']['port'] , $return);
+    }
+
+    public function LockBox($params) {
+        $box_list[] = $params['box_number'];
+        $postData['cabinet_code']       = $params['cabinet_number'];
+        $postData['box_position_list']  = $box_list;
+        $postData['delay_time']         = 0;
+        $return = http_post($params['req_url'] , $postData);
+        $return['code'] = 'ok';
+        if($return['code'] != 0){
+            $return['value'] = 'error';
+        }
+        $this->push_queue_return($params['ret_queue'] , $config['net_queue']['host'] , $config['net_queue']['port'] , $return);
+    }
+
+    public function UnLockBox($params) {
+        $box_list[] = $params['box_number'];
+        $postData['cabinet_code']       = $params['cabinet_number'];
+        $postData['box_position_list']  = $box_list;
+        $postData['delay_time']         = 0;
+        $return = http_post($params['req_url'] , $postData);
+        $return['code'] = 'ok';
+        if($return['code'] != 0){
+            $return['value'] = 'error';
+        }
+        $this->push_queue_return($params['ret_queue'] , $config['net_queue']['host'] , $config['net_queue']['port'] , $return);
+    }
+
+    private function push_queue_return($queue_name,$host,$port,$params){
+        $worker = new QueueDB($queue_name,$host,$port);
+        $worker->push($params);
+    }
+}

+ 92 - 0
extend/queue.php

@@ -0,0 +1,92 @@
+<?php
+declare(strict_types=1);
+
+/**
+ * 队列处理
+ *
+ *
+ * @package    
+ */
+
+class QueueClient
+{
+    private static $queuedb;
+
+    public static function push($queue_name,$host,$port, $value)
+    {
+        if (!is_object(self::$queuedb)) {
+            self::$queuedb = new QueueDB($queue_name,$host,$port);
+        }
+        return self::$queuedb->push(serialize($value));
+    }
+}
+
+class QueueServer
+{
+    private $_queuedb;
+    
+    public function __construct($queue_name,$host,$port) {
+        $this->_queuedb = new QueueDB($queue_name,$host,$port);
+    }
+
+    public function pop($key,$time)
+    {
+        $result = $this->_queuedb->pop($key,$time);
+        if($result != null) {
+            return unserialize($result);
+        } else {
+            return false;
+        }
+    }
+
+    public function scan() {
+        return $this->_queuedb->scan();
+    }
+}
+
+class QueueDB
+{
+    private $_redis;
+
+    private $queue_name = '';
+    //存定义存储表的数量,系统会随机分配存储
+
+    public function __construct($name,$host,$port)
+    {
+        $this->queue_name = $name;
+        if ( !extension_loaded('redis') ) {
+            return new Exception('redis failed to load');
+        }
+        $this->_redis = new Redis();
+        $this->_redis->connect($host,$port,20);
+        $this->_redis->setOption(Redis::OPT_READ_TIMEOUT, 10);
+    }
+
+    public function push($value)
+    {
+        try {
+            return $this->_redis->lPush($this->queue_name,$value);
+        } catch(Exception $e) {
+             return new Exception($e->getMessage());
+        }
+    }
+
+    public function scan()
+    {
+        return $this->queue_name;
+    }
+
+    public function pop($key, $time)
+    {
+        $result = $this->_redis->brPop($key, $time);
+        if ($result) {
+            return $result[1];
+        } else {
+            return null;
+        }
+    }
+
+    public function clear() {
+        $this->_redis->flushAll();
+    }
+}