/** * 任务调度 * * @param string $no 任务编号 * @param \Closure $fun 任务函数(闭包) * @return Time */ public static function call(string $no, $fun) { if (!is_callable($fun)) { throw new \InvalidArgumentException("定时任务定义错误:call方法接收的fun不是有效函数"); } $redis_key = Base::getRedisKey($no); $taskInfo = Base::getTaskInfo($redis_key); $run_time = $taskInfo == '' ? 0 : $taskInfo['run_time']; $status = new Status(); if (empty($taskInfo)) { $status->newTask(); goto goto_return; } if ($taskInfo['is_running']) { $status->running(); goto goto_return; } if (time() >= $run_time) { Base::addHandleTaskFun($redis_key, $fun); $status->execTask(); goto goto_return; } goto_return: return new Time($redis_key, $status->status(), $run_time); }
/** * 开始刷新任务 * * @param \Phalcon\DI\FactoryDefault $di Phalcon的DI类 */ private function handleTaskRefresh(&$di) { $router = new \Phalcon\Mvc\Router(); $router->setDefaults(["namespace" => 'App\\Task', "controller" => 'Task', "action" => 'kernel']); $di->set('router', $router); $di->set('url', function () { $url = new \Phalcon\Mvc\Url(); $url->setBaseUri(QP_ROOT_PATH); return $url; }); $di->set('view', function () { $view = new \Phalcon\Mvc\View(); $view->setViewsDir(QP_VIEW_PATH); return $view; }); Task\BaseTask::flushTask(); Task\BaseTask::initData(); (new \Phalcon\Mvc\Application($di))->handle(); Task\BaseTask::handleTaskRefresh(); }