代码优化
This commit is contained in:
@@ -135,14 +135,19 @@ class TrafficPoolSource extends Model
|
||||
/**
|
||||
* 获取流量的所有来源(带群归属信息)
|
||||
* @param int $poolCompanyId
|
||||
* @param int $limit 限制数量,0表示不限制
|
||||
* @return array
|
||||
*/
|
||||
public static function getSourcesWithOwners(int $poolCompanyId): array
|
||||
public static function getSourcesWithOwners(int $poolCompanyId, int $limit = 0): array
|
||||
{
|
||||
$sources = self::where('poolCompanyId', $poolCompanyId)
|
||||
->order('createTime DESC')
|
||||
->select()
|
||||
->toArray();
|
||||
$query = self::where('poolCompanyId', $poolCompanyId)
|
||||
->order('createTime DESC');
|
||||
|
||||
if ($limit > 0) {
|
||||
$query->limit($limit);
|
||||
}
|
||||
|
||||
$sources = $query->select()->toArray();
|
||||
|
||||
if (empty($sources)) {
|
||||
return [];
|
||||
@@ -325,6 +330,125 @@ class TrafficPoolSource extends Model
|
||||
|
||||
return $chatroom;
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页获取流量的来源(带群归属信息)
|
||||
* @param int $poolCompanyId
|
||||
* @param int $page 页码
|
||||
* @param int $pageSize 每页数量
|
||||
* @param string $keyword 搜索关键词(搜索来源名称)
|
||||
* @return array ['list' => [], 'total' => 0, 'page' => 1, 'pageSize' => 10]
|
||||
*/
|
||||
public static function getSourcesWithOwnersPaginated(int $poolCompanyId, int $page = 1, int $pageSize = 20, string $keyword = ''): array
|
||||
{
|
||||
$query = self::where('poolCompanyId', $poolCompanyId);
|
||||
|
||||
// 关键词搜索
|
||||
if (!empty($keyword)) {
|
||||
$query->where('sourceName', 'like', '%' . $keyword . '%');
|
||||
}
|
||||
|
||||
// 统计总数
|
||||
$total = $query->count();
|
||||
|
||||
// 分页查询
|
||||
$sources = $query->order('createTime DESC')
|
||||
->page($page, $pageSize)
|
||||
->select()
|
||||
->toArray();
|
||||
|
||||
if (empty($sources)) {
|
||||
return [
|
||||
'list' => [],
|
||||
'total' => 0,
|
||||
'page' => $page,
|
||||
'pageSize' => $pageSize
|
||||
];
|
||||
}
|
||||
|
||||
// 收集所有群ID
|
||||
$chatroomIds = [];
|
||||
foreach ($sources as $source) {
|
||||
if (!empty($source['sourceChatroomId'])) {
|
||||
$chatroomIds[] = $source['sourceChatroomId'];
|
||||
}
|
||||
}
|
||||
|
||||
// 查询群信息和归属客服
|
||||
$chatroomOwners = [];
|
||||
if (!empty($chatroomIds)) {
|
||||
$chatroomOwners = self::getChatroomOwners($chatroomIds);
|
||||
}
|
||||
|
||||
// 组装数据(按来源类型和关键标识去重)
|
||||
$result = [];
|
||||
$seenChatroomIds = []; // 用于群成员来源去重
|
||||
$seenFriendIds = []; // 用于好友添加来源去重
|
||||
|
||||
foreach ($sources as $source) {
|
||||
// 群成员来源去重:同一个群只保留一条记录
|
||||
if ($source['sourceType'] == self::SOURCE_TYPE_GROUP_MEMBER && !empty($source['sourceChatroomId'])) {
|
||||
$chatroomId = $source['sourceChatroomId'];
|
||||
if (isset($seenChatroomIds[$chatroomId])) {
|
||||
continue; // 跳过重复的群
|
||||
}
|
||||
$seenChatroomIds[$chatroomId] = true;
|
||||
}
|
||||
|
||||
// 好友添加来源去重:按来源微信ID或来源名称去重
|
||||
if ($source['sourceType'] == self::SOURCE_TYPE_FRIEND_ADD) {
|
||||
$friendAddKey = $source['sourceWechatId'] ?? ($source['sourceName'] ?? '');
|
||||
if (!empty($friendAddKey) && isset($seenFriendIds[$friendAddKey])) {
|
||||
continue; // 跳过重复的好友添加
|
||||
}
|
||||
$seenFriendIds[$friendAddKey] = true;
|
||||
}
|
||||
|
||||
$sourceData = $source;
|
||||
|
||||
// 设置显示ID
|
||||
if ($source['sourceType'] == self::SOURCE_TYPE_GROUP_MEMBER && !empty($source['sourceChatroomId'])) {
|
||||
$sourceData['displayId'] = "群ID:" . $source['sourceChatroomId'];
|
||||
} elseif ($source['sourceType'] == self::SOURCE_TYPE_FRIEND_ADD) {
|
||||
$sourceData['displayId'] = "好友ID:" . ($source['sourceWechatId'] ?? $source['sourceName'] ?? '-');
|
||||
} else {
|
||||
$sourceData['displayId'] = null;
|
||||
}
|
||||
|
||||
// 格式化时间(兼容时间戳和日期字符串)
|
||||
if (!empty($source['createTime'])) {
|
||||
if (is_numeric($source['createTime'])) {
|
||||
$sourceData['createTimeFormatted'] = date('Y-m-d H:i:s', (int)$source['createTime']);
|
||||
} else {
|
||||
$sourceData['createTimeFormatted'] = $source['createTime'];
|
||||
}
|
||||
} else {
|
||||
$sourceData['createTimeFormatted'] = null;
|
||||
}
|
||||
|
||||
// 添加来源类型名称
|
||||
$sourceData['sourceTypeName'] = self::SOURCE_TYPE_NAMES[$source['sourceType']] ?? '未知来源';
|
||||
|
||||
// 如果是群成员来源,添加群归属信息
|
||||
if ($source['sourceType'] == self::SOURCE_TYPE_GROUP_MEMBER && !empty($source['sourceChatroomId'])) {
|
||||
$chatroomId = $source['sourceChatroomId'];
|
||||
$sourceData['chatroomOwners'] = $chatroomOwners[$chatroomId] ?? [];
|
||||
$sourceData['chatroomInfo'] = self::getChatroomInfo($chatroomId);
|
||||
} else {
|
||||
$sourceData['chatroomOwners'] = [];
|
||||
$sourceData['chatroomInfo'] = null;
|
||||
}
|
||||
|
||||
$result[] = $sourceData;
|
||||
}
|
||||
|
||||
return [
|
||||
'list' => $result,
|
||||
'total' => $total,
|
||||
'page' => $page,
|
||||
'pageSize' => $pageSize
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user