public function get($f3) { // 权限检查 $this->requirePrivilege('manage_goods_edit_edit_get'); global $smarty; // 参数验证 $validator = new Validator($f3->get('GET')); $goods_id = $validator->required('商品ID不能为空')->digits()->min(1)->validate('goods_id'); // 商品信息 $goodsBasicService = new GoodsBasicService(); $goods = $goodsBasicService->loadGoodsById($goods_id); if ($goods->isEmpty()) { $this->addFlashMessage('商品ID[' . $goods . ']非法'); goto out_fail; } $pageNo = $validator->digits()->min(0)->validate('pageNo'); $pageSize = $validator->digits()->min(0)->validate('pageSize'); // 设置缺省值 $pageNo = isset($pageNo) && $pageNo > 0 ? $pageNo : 0; $pageSize = isset($pageSize) && $pageSize > 0 ? $pageSize : 20; if (!$this->validate($validator)) { goto out_fail; } //查询条件 $searchFormQuery = array(); $searchFormQuery['task_name'] = array('=', GoodsCronTask::$task_name); $searchFormQuery['search_param'] = array('=', $goods_id); // 建立查询条件 $searchParamArray = QueryBuilder::buildQueryCondArray($searchFormQuery); $cronTaskService = new CronTaskService(); $totalCount = $cronTaskService->countCronTaskArray($searchParamArray); if ($totalCount <= 0) { // 没任务,可以直接退出了 goto out_display; } $cronTaskArray = $cronTaskService->fetchCronTaskArray($searchParamArray, $pageNo * $pageSize, $pageSize); // 给模板赋值 $smarty->assign('totalCount', $totalCount); $smarty->assign('pageNo', $pageNo); $smarty->assign('pageSize', $pageSize); $smarty->assign('cronTaskArray', $cronTaskArray); out_display: $smarty->assign('goods', $goods->toArray()); $smarty->display('goods_edit_cron.tpl'); return; out_fail: RouteHelper::reRoute($this, '/Goods/Search'); }
public function Remove($f3) { // 权限检查 $this->requirePrivilege('manage_misc_cron'); // 参数验证 $validator = new Validator($f3->get('GET')); $task_id = $validator->required('任务ID不能为空')->digits('任务ID非法')->min(1)->filter('ValidatorIntValue')->validate('task_id'); if (!$this->validate($validator)) { goto out; } $cronTaskService = new CronTaskService(); if ($cronTaskService->removeCronTaskById($task_id)) { $this->addFlashMessage('定时任务删除成功'); } else { $this->addFlashMessage('定时任务删除失败'); } out: RouteHelper::reRoute($this, RouteHelper::getRefer(), false); }
/** * 取得当前时间需要执行的一个 Cron Task,注意这里是 load 方法,所以返回的结果是可以做 CRUD 操作的s * * @param int $currentTime 当前时间 * * @return \Core\Service\Cron\DataMapper|null */ public static function loadNextUnRunCronTask($currentTime) { $cronTaskInfo = ShareCache::get(self::getCronTaskCacheKey()); // 缓存表明目前没有任务,所以我们也就没必要再去查询数据库了 if (self::$cronTaskNoTaskMagic === $cronTaskInfo) { return null; } // 当前任务还没到执行的时候 if (is_array($cronTaskInfo) && $cronTaskInfo['task_time'] > $currentTime) { return null; } // 从数据库中取得任务 $cronTaskService = new CronTaskService(); $cronTask = $cronTaskService->loadNextUnRunCronTask($currentTime); // 数据库里面也没有任务,设置缓存为“无任务”就不用老去查找数据库了 if ($cronTask->isEmpty()) { ShareCache::set(self::getCronTaskCacheKey(), self::$cronTaskNoTaskMagic, 3600); return null; } // 这个任务还没到执行的时间,放到缓存里面 if ($cronTask->task_time > $currentTime) { ShareCache::set(self::getCronTaskCacheKey(), $cronTask->toArray(), 3600); return null; } // 清除缓存 ShareCache::clear(self::getCronTaskCacheKey()); // 返回需要执行的任务 return $cronTask; }