客服健康分提交
This commit is contained in:
@@ -18,6 +18,7 @@ use think\facade\Config;
|
||||
use think\facade\Log;
|
||||
use app\api\controller\FriendTaskController;
|
||||
use app\common\service\AuthService;
|
||||
use app\common\service\WechatAccountHealthScoreService;
|
||||
use app\api\controller\WebSocketController;
|
||||
use Workerman\Lib\Timer;
|
||||
|
||||
@@ -180,13 +181,11 @@ class Adapter implements WeChatServiceInterface
|
||||
->select();
|
||||
$taskData = array_merge($taskData, $tasks);
|
||||
}
|
||||
|
||||
if ($taskData) {
|
||||
|
||||
foreach ($taskData as $task) {
|
||||
$task_id = $task['task_id'];
|
||||
$task_info = $this->getCustomerAcquisitionTask($task_id);
|
||||
|
||||
if (empty($task_info['status']) || empty($task_info['reqConf']) || empty($task_info['reqConf']['device'])) {
|
||||
continue;
|
||||
}
|
||||
@@ -213,9 +212,86 @@ class Adapter implements WeChatServiceInterface
|
||||
continue;
|
||||
}
|
||||
|
||||
// 判断24h内加的好友数量,friend_task 先固定10个人 getLast24hAddedFriendsCount
|
||||
// 根据健康分判断24h内加的好友数量限制
|
||||
$healthScoreService = new WechatAccountHealthScoreService();
|
||||
$healthScoreInfo = $healthScoreService->getHealthScore($accountId);
|
||||
|
||||
// 如果健康分记录不存在,先计算一次
|
||||
if (empty($healthScoreInfo)) {
|
||||
try {
|
||||
$healthScoreService->calculateAndUpdate($accountId);
|
||||
$healthScoreInfo = $healthScoreService->getHealthScore($accountId);
|
||||
} catch (\Exception $e) {
|
||||
Log::error("计算健康分失败 (accountId: {$accountId}): " . $e->getMessage());
|
||||
// 如果计算失败,使用默认值5作为兜底
|
||||
$maxAddFriendPerDay = 5;
|
||||
}
|
||||
}
|
||||
|
||||
// 获取每日最大加人次数(基于健康分)
|
||||
$maxAddFriendPerDay = $healthScoreInfo['maxAddFriendPerDay'] ?? 5;
|
||||
|
||||
// 如果健康分为0或很低,不允许添加好友
|
||||
if ($maxAddFriendPerDay <= 0) {
|
||||
Log::info("账号健康分过低,不允许添加好友 (accountId: {$accountId}, wechatId: {$wechatId}, healthScore: " . ($healthScoreInfo['healthScore'] ?? 0) . ")");
|
||||
continue;
|
||||
}
|
||||
|
||||
// 检查频繁暂停限制:首次频繁或再次频繁,暂停24小时
|
||||
$lastFrequentTime = $healthScoreInfo['lastFrequentTime'] ?? null;
|
||||
$frequentCount = $healthScoreInfo['frequentCount'] ?? 0;
|
||||
if (!empty($lastFrequentTime) && $frequentCount > 0) {
|
||||
$frequentPauseHours = 24; // 频繁暂停24小时
|
||||
$frequentPauseTime = $lastFrequentTime + ($frequentPauseHours * 3600);
|
||||
$currentTime = time();
|
||||
|
||||
if ($currentTime < $frequentPauseTime) {
|
||||
$remainingHours = ceil(($frequentPauseTime - $currentTime) / 3600);
|
||||
Log::info("账号频繁,暂停添加好友 (accountId: {$accountId}, wechatId: {$wechatId}, frequentCount: {$frequentCount}, 剩余暂停时间: {$remainingHours}小时)");
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
// 检查封号暂停限制:封号暂停72小时
|
||||
$isBanned = $healthScoreInfo['isBanned'] ?? 0;
|
||||
if ($isBanned == 1) {
|
||||
// 查询封号时间(从s2_wechat_message表查询最近一次封号消息)
|
||||
$banMessage = Db::table('s2_wechat_message')
|
||||
->where('wechatAccountId', $accountId)
|
||||
->where('msgType', 10000)
|
||||
->where('content', 'like', '%你的账号被限制%')
|
||||
->where('isDeleted', 0)
|
||||
->order('createTime', 'desc')
|
||||
->find();
|
||||
|
||||
if (!empty($banMessage)) {
|
||||
$banTime = $banMessage['createTime'] ?? 0;
|
||||
$banPauseHours = 72; // 封号暂停72小时
|
||||
$banPauseTime = $banTime + ($banPauseHours * 3600);
|
||||
$currentTime = time();
|
||||
|
||||
if ($currentTime < $banPauseTime) {
|
||||
$remainingHours = ceil(($banPauseTime - $currentTime) / 3600);
|
||||
Log::info("账号封号,暂停添加好友 (accountId: {$accountId}, wechatId: {$wechatId}, 剩余暂停时间: {$remainingHours}小时)");
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 判断今天添加的好友数量,使用健康分计算的每日最大加人次数
|
||||
// 优先使用今天添加的好友数量(更符合"每日"限制)
|
||||
$todayAddedFriendsCount = $this->getTodayAddedFriendsCount($wechatId);
|
||||
if ($todayAddedFriendsCount >= $maxAddFriendPerDay) {
|
||||
Log::info("今天添加好友数量已达上限 (accountId: {$accountId}, wechatId: {$wechatId}, count: {$todayAddedFriendsCount}, max: {$maxAddFriendPerDay}, healthScore: " . ($healthScoreInfo['healthScore'] ?? 0) . ")");
|
||||
continue;
|
||||
}
|
||||
|
||||
// 如果今天添加数量未达上限,再检查24小时内的数量(作为额外保护)
|
||||
$last24hAddedFriendsCount = $this->getLast24hAddedFriendsCount($wechatId);
|
||||
if ($last24hAddedFriendsCount >= 20) {
|
||||
// 24小时内的限制可以稍微宽松一些,设置为每日限制的1.2倍(防止跨天累积)
|
||||
$max24hLimit = (int)ceil($maxAddFriendPerDay * 1.2);
|
||||
if ($last24hAddedFriendsCount >= $max24hLimit) {
|
||||
Log::info("24小时内添加好友数量已达上限 (accountId: {$accountId}, wechatId: {$wechatId}, count: {$last24hAddedFriendsCount}, max24h: {$max24hLimit}, maxDaily: {$maxAddFriendPerDay})");
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -828,6 +904,7 @@ class Adapter implements WeChatServiceInterface
|
||||
if (empty($deviceIds)) {
|
||||
return [];
|
||||
}
|
||||
|
||||
$records = Db::table('s2_wechat_account')
|
||||
->where('deviceAlive', 1)
|
||||
->where('wechatAlive', 1)
|
||||
|
||||
Reference in New Issue
Block a user