mkdir(); // 写入日志文件 $filename = RUNTIME_PATH . 'storage/queue/shopro.log'; file_put_contents($filename, date('Y-m-d H:i:s')); $job->delete(); } /** * 高优先级队列测试 */ public function shoproHigh(Job $job, $data) { // 创建目录 $this->mkdir(); // 写入日志文件 $filename = RUNTIME_PATH . 'storage/queue/shopro-high.log'; file_put_contents($filename, date('Y-m-d H:i:s')); $job->delete(); } /** * 创建目录 */ private function mkdir() { $dir = RUNTIME_PATH . 'storage/queue/'; if (!is_dir($dir)) { @mkdir($dir, 0755, true); } } /** * 周期性活动创建比赛 */ public function zy(Job $job, $data) { Db::startTrans(); try { $_actModel = new \app\admin\model\zy\game\Activity(); $_gameModel = new \app\admin\model\zy\game\Game(); $dateTime = date('Y-m-d H:i:s'); //当前星期 $week = date('w'); //当前星期 $current = time(); //当前时间 $activity = (clone $_actModel)::where('pid', 0)->select(); //周期性主活动 foreach ($activity as $act) { $act = $act->toArray(); $publicTime = json_decode($act['public_time'] ?? '[]', true); $publicBefore = intval($publicTime['before'] ?? 0); //提前几天 $PublicWeek = $act['week'] - $publicBefore; //设定应该发布的星期 if ($PublicWeek != $week && ($PublicWeek + 7) != $week) { print_r('星期不对'); continue; // 星期不对 } $public_time = strtotime($publicTime['time']); //设定的时间 if ($current < $public_time) { print_r('时间未到'); continue; //时间未到 } $act['public_time'] = date('Y-m-d H:i:s', $public_time - $publicBefore * 86400); //设定的时间 $act['date'] = date('Y-m-d', $public_time - $publicBefore * 86400); //设定的日期 $query = (clone $_gameModel)::where('act_id', $act['id']); if ($act['type'] == 0) { //一次性活动 $query->where('public_time', $act['public_time'])->where('date', $act['date']); } $games = $query->select(); if (!empty($games)) { print_r('已存在'); continue; // 已存在 } $joinStartTime = json_decode($act['join_start_time'] ?? '[]', true); $act['join_start_time'] = date('Y-m-d H:i:s', strtotime($joinStartTime['time']) - intval($joinStartTime['before']) * 86400); $joinEndTime = json_decode($act['join_end_time'] ?? '[]', true); $act['join_end_time'] = date('Y-m-d H:i:s', strtotime($joinEndTime['time']) - intval($joinEndTime['before']) * 86400); $quitTime = json_decode($act['quit_time'] ?? '[]', true); $act['quit_time'] = date('Y-m-d H:i:s', strtotime($quitTime['time']) - intval($quitTime['before']) * 86400); $act['act_id'] = $act['id']; unset($act['id']); $res = (clone $_gameModel)->allowField(true)->save($act); $subs = (clone $_actModel)::where('pid', $act['act_id'])->select(); foreach ($subs as $sub) { //存在子活动 $sub = $sub->toArray(); $sub['public_time'] = $act['public_time']; $sub['join_start_time'] = $act['join_start_time']; $sub['join_end_time'] = $act['join_end_time']; $sub['quit_time'] = $act['quit_time']; $sub['act_id'] = $act['act_id']; $sub['date'] = $act['date']; unset($sub['id']); $res = (clone $_gameModel)->allowField(true)->save($sub); } } //处理已生成的比赛 $games = (clone $_gameModel)::where('join_start_time', '>=', $dateTime)->where('status', '<', 2)->select(); foreach ($games as $g) { if ($g['join_start_time'] <= $dateTime && $g['join_end_time'] > $dateTime) { $g->save(['status' => 1]); //开始报名 } elseif ($g['join_end_time'] <= $dateTime) { $g->save(['status' => 2]); //报名截止,活动进行中 } } Db::commit(); } catch (ValidateException | PDOException | Exception $e) { Db::rollback(); format_log_error($e, 'zy.activity create game'); } $job->release(600); //$delay为延迟时间 } }