<?php namespace App\Tasks; use Hhxsv5\LaravelS\Swoole\Task\Task; use Illuminate\Support\Facades\Log; class SendNoticeTask extends Task { private $data; private $PushTask = false; private $TaskNum; public function __construct($keyword, $data, $toUser, $TaskNum=1, $is_ignore=0) { if (is_array($data)) { $data = json_encode($data); } $this->data = [ 'data' => $data, 'touser'=> $toUser, 'is_ignore' => $is_ignore, 'keyword' => $keyword ]; $this->TaskNum = $TaskNum; } // 处理任务的逻辑,运行在Task进程中,不能投递任务 public function handle() { // return true; $time = date('H'); if (20 < $time || $time < 9) {//不发通知时段处理 return true; } try { $Url = config('website.IC_AUTH_API').'/hprose/HttpSendMsg'; $res = json_decode(reportCurl($Url, $this->data, true, ['MsgToken:fg368hjk4567wtbk8']), true); if (!isset($res['errcode']) || $res['errcode'] !== 0) { ErrorLog(ErrorCode(001, 9), '消息系统消息发送失败'); $this->PushTask = true; } return true; } catch (\Exception $e) { SendErrMsg($e); ErrorLog(ErrorCode(001, 9), '消息发送出现致命错误'); $this->PushTask = true;//重试任务 } } public function finish() { //消息推送失败,任务重试,第一次为4分钟后,第二次为10分钟后,第三次为18分钟后 if ($this->PushTask === true && $this->TaskNum < 4) { $this->TaskNum ++; $task = new SendNoticeTask( $this->data['keyword'], $this->data['data'], $this->data['touser'], $this->TaskNum, $this->data['is_ignore'] ); $task -> delay(60*2*$this->TaskNum); Task::deliver($task); } } }