zoukankan      html  css  js  c++  java
  • cache 订单队列

    使用cache实现一个简单粗糙的订单推送队列 

    Linux  定时任务 

    * * * * * /usr/bin/curl  http://tc.m.com/test.php

    /**
     * User: [一秋]
     * Date: 2017/9/18
     * Time: 上午8:56
     * Desc: 成功来源于点滴
     */
    
    namespace appapiservice;
    
    //订单队列
    use appapimodelOrder;
    
    class OrderQueue
    {
        private $order_queue;
        private $key;
        private $expire_time = 60;
    
        public $orderid;
    
    
        public function __construct()
        {
            $this->key = 'your key value';
            $this->order_queue = $this->queryNotReceiveOrder();
        }
    
        //查询未接订单
        private function queryNotReceiveOrder()
        {
            $data = cache($this->key);
    
            if (!$data) {
                $lists = Order::with('receiveOrder')
                    ->field('orderid')
                    ->order('ctime desc')
                    ->where('orderstatus', '=', 2)->page(1, 10)
                    ->select();
    
                $data = [];
                foreach ($lists as $key => $val) {
                    if ($val->receive_order == null) {
                        $data[] = $val->orderid;
                    }
                }
    
                if (!empty($data)) {
    
                    cache($this->key, $data, $this->expire_time);
    
                }
    
            }
    
            return $data;
        }
    
        //有新的订单 添加到队列中
        public function pushToQueue()
        {
    
            if (!$this->orderid) {
               return true;
            }
    
            if ($this->order_queue) {
    
                array_unshift($this->order_queue, $this->orderid);
    
            } else {
                $this->order_queue = ["$this->orderid"];
            }
            $this->order_queue = $this->array_unique();
    
            cache($this->key, $this->order_queue, $this->expire_time);
    
            return true;
    
    
        }
    
        //从订单队列中拉取数据 推送
        public function pullFromQueue()
        {
    
            if ($this->order_queue) {
                //提取第一个数据
    //            $first_orderid = array_shift($this->order_queue);
    //            Order::placeOrderGetuiList($first_orderid);
                //推送完毕 存放到数组最后
    //            array_push($this->order_queue, $first_orderid);
    
                foreach ($this->order_queue as $key=>$val){
                    Order::placeOrderGetuiList($val);//推送订单。
                    sleep(10);
                }
    
    //            cache($this->key) ? cache($this->key, null) : true;
    
            }
            return true;
        }
    
        //从订单队列中 移除
        public function clearOneOrder(){
    
            if($this->order_queue){
                $key = array_search($this->orderid,$this->order_queue);
                if(!$key && $key != 0){
                    return true;
                }
                unset($this->order_queue[$key]);
                cache($this->key,$this->order_queue,$this->expire_time);
            }
    
            return true;
    
        }
    
    
        //数组去重
        private function array_unique(){
            return array_unique($this->order_queue);
        }
    
        public function pushToList($order_arr){
    
            if(!is_array($order_arr)){
                return true;
            }
            foreach ($order_arr as $key=>$val){
                $this->orderid = $val;
                $this->pushToQueue();
            }
            return true;
        }
    
    }
  • 相关阅读:
    POJ2762 Going from u to v or from v to u?
    POJ3422或洛谷2045 Kaka's Matrix Travels
    LaTeX数学公式大全
    POJ1966 Cable TV Network
    转:Android中的Handler的机制与用法详解
    Httpservlet cannot be resolved to a type的原因与解决方法
    Textchangedlistener的用法
    contextMenu的使用
    转:android studio 一直卡在Gradle:Build Running的解决办法
    Sqlite操作的一些关键类的官方说明与Intent的startactivityforresult方法
  • 原文地址:https://www.cnblogs.com/wqy415/p/7592602.html
Copyright © 2011-2022 走看看