cache = Factory::cache('default'); $params = self::cliParams(); if (empty($params)){ Logger::logs(E_USER_ERROR,'命令行参数为空',__CLASS__,__LINE__,$params,true); exit(); } $enterpriseId = isset($params['enterpriseId']) ? $params['enterpriseId'] : null; if (empty($enterpriseId)){ Logger::logs(E_USER_ERROR,'enterpriseId参数错误',__CLASS__,__LINE__,true); exit(); } $this->enterpriseId = $enterpriseId; } /** * Doc: (des="延时队列,取消订单") * User: XMing * Date: 2020/9/23 * Time: 2:36 下午 */ public function run() { while (true){ //从有序集合中拿到n秒以前的订单 //TODO 这里要解决每个企业配置不同的订单失效时间问题 (通过命令行传餐 每个企业运行独立的延迟队列) //TODO 不能放在初始化中查询企业配置,企业配置是动态的(5分钟查询一次当前企业最新配置) $orderIds = $this->cache->zrangebyscore($this->delayQueueCancelOrderKey.'::'.$this->enterpriseId, 0, time()-60, ['withscores' => TRUE]); if(empty($orderIds)){ sleep(1); continue; } //拿出的数据立马删除 foreach ($orderIds as $orderId => $taskTime) { $delRes = $this->cache->zrem($this->delayQueueCancelOrderKey.'::'.$this->enterpriseId, $orderId); if (!$delRes){ continue; } Logger::logs(E_USER_ERROR,'消费订单',__CLASS__,__LINE__,$orderId,true); } } } /** * Doc: (des="获取命令行下传递进来的参数") * User: XMing * Date: 2020/9/23 * Time: 4:09 下午 * @example php test.php -p3 -t=abc --opt=valopt --opt2 valopt2 * @return array */ private function cliParams() { $result = array(); $params = $GLOBALS['argv']; array_shift($params); do { $tmpEachResult = array_shift($params); if (!$tmpEachResult) { break; } $p = $tmpEachResult; if ($p{0} == '-') { $pname = substr($p, 1); $value = false; if ($pname{0} == '-') {// 长选项 (--) $pname = substr($pname, 1); if (strpos($p, '=') !== false) { // value specified inline (--=) list($pname, $value) = explode('=', substr($p, 2), 2); } } else {// 短选项 if (strpos($p, '=') !== false) { // value specified inline (-=) list($pname, $value) = explode('=', substr($p, 1), 2); } else if (strlen($p) > 1) { $pname = substr($p, 1, 1); $value = substr($p, 2); } } # 如果上面没有取到值,并且下一个不是以-开头的,则下一个值为当前参数的值 $nextparm = current($params); if ($value === false && $nextparm !== false && $nextparm{0} != '-' ) { $value = array_shift($params); } $result[$pname] = (string)$value;// 将 false转为空串,以便与http访问时对参数的处理一致 } else { # 不是以-指定开始的参数,一律丢弃 //$result[] = $p; } } while (true); return $result; } }