聊天消息记录状态 + 表格导出底层

This commit is contained in:
wong
2025-11-27 17:09:53 +08:00
parent 7e2dd2914d
commit 637dcddee2
5 changed files with 256 additions and 93 deletions

View File

@@ -23,7 +23,7 @@ class WechatFriendController extends BaseController
$total = $query->count();
$list = $query->page($page, $limit)->select();
// 提取所有好友ID
// 提取所有好友ID
$friendIds = array_column($list, 'id');
$aiTypeData = [];
@@ -67,7 +67,7 @@ class WechatFriendController extends BaseController
$friend = Db::table('s2_wechat_friend')
->where(['id' => $friendId, 'isDeleted' => 0])
->find();
if (empty($friend)) {
return ResponseHelper::error('好友不存在');
}
@@ -78,11 +78,11 @@ class WechatFriendController extends BaseController
$friend['createTime'] = !empty($friend['createTime']) ? date('Y-m-d H:i:s', $friend['createTime']) : '';
$friend['updateTime'] = !empty($friend['updateTime']) ? date('Y-m-d H:i:s', $friend['updateTime']) : '';
$friend['passTime'] = !empty($friend['passTime']) ? date('Y-m-d H:i:s', $friend['passTime']) : '';
// 获取AI类型设置
$aiTypeSetting = FriendSettings::where('friendId', $friendId)->find();
$friend['aiType'] = $aiTypeSetting ? $aiTypeSetting['type'] : 0;
return ResponseHelper::success(['detail' => $friend]);
}
@@ -183,87 +183,38 @@ class WechatFriendController extends BaseController
if (empty($accountId)) {
return ResponseHelper::error('请先登录');
}
// 直接使用operatorAccountId查询添加好友任务记录
$query = Db::table('s2_friend_task')
->where('operatorAccountId', $accountId)
->order('createTime desc');
// 如果指定了状态筛选
if ($status !== '' && $status !== null) {
$query->where('status', $status);
}
$total = $query->count();
$tasks = $query->page($page, $limit)->select();
// 提取所有任务的phone和wechatId用于查询好友信息获取通过时间
$taskPhones = [];
$taskWechatIds = [];
foreach ($tasks as $task) {
if (!empty($task['phone'])) {
$taskPhones[] = $task['phone'];
}
if (!empty($task['wechatId'])) {
$taskWechatIds[] = $task['wechatId'];
}
}
// 查询好友信息,获取通过时间
$friendPassTimeMap = [];
if (!empty($taskPhones) || !empty($taskWechatIds)) {
// 分别通过phone和wechatId查询确保都能匹配到
$friendsByPhone = [];
$friendsByWechatId = [];
if (!empty($taskPhones)) {
$friendsByPhone = Db::table('s2_wechat_friend')
->where('accountId', $accountId)
->where('isDeleted', 0)
->where('phone', 'in', $taskPhones)
->field('phone,wechatId,passTime,nickname')
->select();
}
if (!empty($taskWechatIds)) {
$friendsByWechatId = Db::table('s2_wechat_friend')
->where('accountId', $accountId)
->where('isDeleted', 0)
->where('wechatId', 'in', $taskWechatIds)
->field('phone,wechatId,passTime,nickname')
->select();
}
// 合并结果并构建映射表优先使用phone作为key
$allFriends = array_merge($friendsByPhone, $friendsByWechatId);
foreach ($allFriends as $friend) {
// 使用phone作为key如果存在
if (!empty($friend['phone'])) {
$friendPassTimeMap[$friend['phone']] = [
'passTime' => $friend['passTime'] ?? 0,
'nickname' => $friend['nickname'] ?? '',
];
}
// 同时使用wechatId作为key如果存在且phone为空
if (!empty($friend['wechatId']) && empty($friend['phone'])) {
$friendPassTimeMap[$friend['wechatId']] = [
'passTime' => $friend['passTime'] ?? 0,
'nickname' => $friend['nickname'] ?? '',
];
}
}
}
// 处理任务数据
$list = [];
foreach ($tasks as $task) {
$taskKey = !empty($task['phone']) ? $task['phone'] : ($task['wechatId'] ?? '');
$friendInfo = isset($friendPassTimeMap[$taskKey]) ? $friendPassTimeMap[$taskKey] : null;
// 提取所有任务的phone、wechatId用于查询好友信息获取通过时间
$friendInfo = Db::table('s2_wechat_friend')
->where(['isDeleted' => 0, 'ownerWechatId' => $task['wechatId']])
->where(function ($query) use ($task) {
$query->whereLike('phone', '%'.$task['phone'].'%')->whereOr('alias', $task['phone'])->whereOr('wechatId', $task['phone']);
})->field('phone,wechatId,alias,passTime,nickname')->find();
$item = [
'taskId' => $task['id'] ?? 0,
'phone' => $task['phone'] ?? '',
'wechatId' => $task['wechatId'] ?? '',
'alias' => $task['alias'] ?? '',
// 添加者信息
'adder' => [
'avatar' => $task['wechatAvatar'] ?? '', // 添加者头像
@@ -276,6 +227,7 @@ class WechatFriendController extends BaseController
'status' => [
'code' => $task['status'] ?? 0, // 状态码0执行中1执行成功2执行失败
'text' => $this->getTaskStatusText($task['status'] ?? 0), // 状态文本
'extra' => ''
],
// 时间信息
'time' => [
@@ -299,10 +251,10 @@ class WechatFriendController extends BaseController
'labels' => !empty($task['labels']) ? explode(',', $task['labels']) : [], // 标签
]
];
$list[] = $item;
}
return ResponseHelper::success(['list' => $list, 'total' => $total]);
}
@@ -319,7 +271,7 @@ class WechatFriendController extends BaseController
1 => '执行成功',
2 => '执行失败',
];
return isset($statusMap[$status]) ? $statusMap[$status] : '未知状态';
}
}