From b6a03c6ea1f7fd20418f2281b36771ce188acb86 Mon Sep 17 00:00:00 2001 From: chengxl Date: Fri, 30 May 2025 13:36:15 +0800 Subject: [PATCH] =?UTF-8?q?=E9=98=9F=E5=88=97=E7=9B=B8=E5=85=B3=E7=9A=84?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/api/job/WechatDraft.php | 62 +++++++++++++++++++++++ application/api/job/WechatQueryStatus.php | 61 ++++++++++++++++++++++ application/common/QueueJob.php | 48 ++++++++++++++++++ 3 files changed, 171 insertions(+) create mode 100644 application/api/job/WechatDraft.php create mode 100644 application/api/job/WechatQueryStatus.php create mode 100644 application/common/QueueJob.php diff --git a/application/api/job/WechatDraft.php b/application/api/job/WechatDraft.php new file mode 100644 index 0000000..4cc5118 --- /dev/null +++ b/application/api/job/WechatDraft.php @@ -0,0 +1,62 @@ +getRawBody())){ + $aJob = json_decode($job->getRawBody(), true); + $aParam = [ + 'job_id' => empty($aJob['id']) ? '' : $aJob['id'], + 'job_class' => get_class($this), + 'status' => 0, + 'create_time' => time(), + 'params' => json_encode($aJob, JSON_UNESCAPED_UNICODE) + ]; + $iLogId = $oQueueJob->addLog($aParam); + // 步骤1:上传素材(图片) + $iArticleId = empty($data['article_id']) ? 0 : $data['article_id']; + if (!empty($iArticleId)) { + //上传素材 + $oAiarticle = new Aiarticle; + $aResult = json_decode($oAiarticle->syncWechat($data),true); + $iStatus = empty($aResult['status']) ? 0 : $aResult['status']; + $sMsg = empty($aResult['msg']) ? '上传草稿箱失败' : $aResult['msg']; + } + } + $job->delete(); + + //更新任务状态 + $aParam = ['log_id' => $iLogId,'status' => 1,'update_time' => time(),'error' => $sMsg]; + $oQueueJob->updateLog($aParam); + // 记录日志 + \think\Log::info("WechatDraft-延迟任务执行成功: ".json_encode($data)); + } catch (\Exception $e) { + + //实例化 + $oQueueJob = new QueueJob; + //更新任务状态 + $sMsg = empty($e->getMessage()) ? '任务出错' : $e->getMessage(); + $aParam = ['log_id' => $iLogId,'status' => 2,'update_time' => time(),'error' => $sMsg]; + $oQueueJob->updateLog($aParam); + $job->delete(); + // 记录错误日志 + \think\Log::error("WechatDraft-延迟任务失败: ".$e->getMessage()); + }finally { + gc_collect_cycles(); // 强制垃圾回收 + } + } + +} \ No newline at end of file diff --git a/application/api/job/WechatQueryStatus.php b/application/api/job/WechatQueryStatus.php new file mode 100644 index 0000000..dbbf0de --- /dev/null +++ b/application/api/job/WechatQueryStatus.php @@ -0,0 +1,61 @@ +getRawBody())){ + $aJob = json_decode($job->getRawBody(), true); + $aParam = [ + 'job_id' => empty($aJob['id']) ? '' : $aJob['id'], + 'job_class' => get_class($this), + 'status' => 0, + 'create_time' => time(), + 'params' => json_encode($aJob, JSON_UNESCAPED_UNICODE) + ]; + $iLogId = $oQueueJob->addLog($aParam); + // 步骤1:上传素材(图片) + $iArticleId = empty($data['article_id']) ? 0 : $data['article_id']; + if (!empty($iArticleId)) { + //上传素材 + $oAiarticle = new Aiarticle; + $aResult = json_decode($oAiarticle->queryStatus($data),true); + $iStatus = empty($aResult['status']) ? 0 : $aResult['status']; + $sMsg = empty($aResult['msg']) ? '上传草稿箱失败' : $aResult['msg']; + } + } + $job->delete(); + + //更新任务状态 + $aParam = ['log_id' => $iLogId,'status' => 1,'update_time' => time(),'error' => $sMsg]; + $oQueueJob->updateLog($aParam); + // 记录日志 + \think\Log::info("WechatQueryStatus延迟任务执行成功: ".json_encode($data)); + } catch (\Exception $e) { + + //实例化 + $oQueueJob = new QueueJob; + //更新任务状态 + $sMsg = empty($e->getMessage()) ? '任务出错' : $e->getMessage(); + $aParam = ['log_id' => $iLogId,'status' => 2,'update_time' => time(),'error' => $sMsg]; + $oQueueJob->updateLog($aParam); + $job->delete(); + // 记录错误日志 + \think\Log::error("WechatQueryStatus延迟任务失败: ".$e->getMessage()); + }finally { + gc_collect_cycles(); // 强制垃圾回收 + } + } + +} \ No newline at end of file diff --git a/application/common/QueueJob.php b/application/common/QueueJob.php new file mode 100644 index 0000000..676a1ce --- /dev/null +++ b/application/common/QueueJob.php @@ -0,0 +1,48 @@ +aField; + $aInsert = []; + foreach ($aField as $key => $value) { + if(isset($aParam[$value])){ + $aInsert[$value] = $aParam[$value]; + } + } + $result = 0; + if(!empty($aInsert)){ + $result = DB::name('queue_job_logs')->insertGetId($aParam); + } + return $result; + } + + // 记录任务成功 + public function updateLog($aParam = []) { + + $iLogId = empty($aParam['log_id']) ? 0 : $aParam['log_id']; + if(empty($iLogId)){ + return false; + } + //数据处理 + $aField = $this->aField; + $aUpdate = []; + foreach ($aField as $key => $value) { + if(isset($aParam[$value])){ + $aUpdate[$value] = $aParam[$value]; + } + } + unset($aParam['log_id']); + $result = DB::name('queue_job_logs')->where('log_id',$iLogId)->limit(1)->update($aUpdate); + return $result; + } +} +?> \ No newline at end of file