【触客宝】 自动分配好友根群
This commit is contained in:
96
Server/application/job/AllotChatroomJob.php
Normal file
96
Server/application/job/AllotChatroomJob.php
Normal file
@@ -0,0 +1,96 @@
|
||||
<?php
|
||||
|
||||
namespace app\job;
|
||||
|
||||
use app\command\AllotChatroomCommand;
|
||||
use think\facade\Log;
|
||||
use think\facade\Cache;
|
||||
use think\Queue;
|
||||
use app\api\controller\AutomaticAssign;
|
||||
|
||||
class AllotChatroomJob
|
||||
{
|
||||
/**
|
||||
* 队列执行方法
|
||||
* @param $job 队列任务
|
||||
* @param $data 数据
|
||||
* @return bool
|
||||
*/
|
||||
public function fire($job, $data)
|
||||
{
|
||||
try {
|
||||
// 获取数据
|
||||
$toAccountId = $data['toAccountId'];
|
||||
$wechatAccountKeyword = $data['wechatAccountKeyword'];
|
||||
$isDeleted = $data['isDeleted'];
|
||||
$jobId = isset($data['jobId']) ? $data['jobId'] : '';
|
||||
$queueLockKey = isset($data['queueLockKey']) ? $data['queueLockKey'] : '';
|
||||
|
||||
// 记录日志
|
||||
Log::info('开始处理微信群聊自动分配任务: ' . json_encode([
|
||||
'toAccountId' => $toAccountId,
|
||||
'wechatAccountKeyword' => $wechatAccountKeyword,
|
||||
'isDeleted' => $isDeleted,
|
||||
'jobId' => $jobId,
|
||||
'queueLockKey' => $queueLockKey
|
||||
]));
|
||||
|
||||
// 如果没有提供队列锁键,生成一个
|
||||
if (empty($queueLockKey)) {
|
||||
$queueLockKey = "queue_lock:allot_chatroom:{$wechatAccountKeyword}";
|
||||
}
|
||||
|
||||
// 实例化控制器
|
||||
$automaticAssignController = new AutomaticAssign();
|
||||
|
||||
// 调用微信群聊自动分配方法
|
||||
$result = $automaticAssignController->autoAllotWechatChatroom($toAccountId, $wechatAccountKeyword, $isDeleted);
|
||||
$response = json_decode($result, true);
|
||||
|
||||
// 判断是否成功
|
||||
if ($response['code'] == 1) {
|
||||
Log::info("微信群聊自动分配成功: toAccountId={$toAccountId}, wechatAccountKeyword={$wechatAccountKeyword}");
|
||||
|
||||
// 释放队列锁
|
||||
Cache::rm($queueLockKey);
|
||||
Log::info("任务完成,释放队列锁: {$queueLockKey}");
|
||||
|
||||
$job->delete();
|
||||
return true;
|
||||
} else {
|
||||
// API调用出错,记录错误
|
||||
$errorMsg = isset($response['msg']) ? $response['msg'] : '未知错误';
|
||||
Log::error("微信群聊自动分配失败: {$errorMsg}");
|
||||
|
||||
if ($job->attempts() > 3) {
|
||||
// 超过重试次数,删除任务并释放队列锁
|
||||
Cache::rm($queueLockKey);
|
||||
Log::info("由于错误多次尝试失败,释放队列锁: {$queueLockKey}");
|
||||
$job->delete();
|
||||
} else {
|
||||
// 任务失败,重新放回队列
|
||||
Log::warning("微信群聊自动分配任务执行失败,重试次数: " . $job->attempts());
|
||||
$job->release(10); // 延迟10秒后重试
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
// 出现异常,记录错误并释放队列锁
|
||||
Log::error('微信群聊自动分配任务异常: ' . $e->getMessage());
|
||||
|
||||
if (!empty($queueLockKey)) {
|
||||
Cache::rm($queueLockKey);
|
||||
Log::info("由于异常释放队列锁: {$queueLockKey}");
|
||||
}
|
||||
|
||||
if ($job->attempts() > 3) {
|
||||
$job->delete();
|
||||
} else {
|
||||
$job->release(10);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user