From 5a44076859d807d61aa44a06364c619a6b877f07 Mon Sep 17 00:00:00 2001 From: weifashi <605403358@qq.com> Date: Tue, 9 Jan 2024 17:26:03 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=20=E5=B9=B4=E5=BA=A6=E6=B1=87=E6=8A=A5?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E8=BF=94=E5=9B=9E=E7=94=A8=E6=88=B7=E5=A4=B4?= =?UTF-8?q?=E5=83=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/Api/UsersController.php | 80 +++++++++++++------- 1 file changed, 53 insertions(+), 27 deletions(-) diff --git a/app/Http/Controllers/Api/UsersController.php b/app/Http/Controllers/Api/UsersController.php index 034d0c02d..f8a226bf6 100755 --- a/app/Http/Controllers/Api/UsersController.php +++ b/app/Http/Controllers/Api/UsersController.php @@ -2053,8 +2053,60 @@ class UsersController extends AbstractController ->whereNotNull('t.start_at') ->whereNotNull('t.complete_at'); + // 最多聊天用户 + $longestChat = DB::table('web_socket_dialogs as d') + ->selectRaw(" + {$prefix}d.id, + {$prefix}d.name as dialog_name, + {$prefix}d.type as dialog_type, + {$prefix}d.group_type as dialog_group_type, + {$prefix}m.chat_num, + {$prefix}u.userid, + {$prefix}u.email as user_email, + {$prefix}u.nickname as user_nickname, + ifnull({$prefix}d.avatar, {$prefix}u.userimg) as avatar + ") + ->leftJoinSub(function ($query) use ($user, $year) { + $query->select('web_socket_dialog_msgs.dialog_id', DB::raw('count(*) as chat_num')) + ->from('web_socket_dialog_msgs') + ->where('web_socket_dialog_msgs.userid', $user->userid) + ->whereYear('web_socket_dialog_msgs.created_at', $year) + ->groupBy('web_socket_dialog_msgs.dialog_id'); + }, 'm', 'm.dialog_id', '=', 'd.id') + ->leftJoin('web_socket_dialog_users as du', function ($query) use ($user) { + $query->on('d.id', '=', 'du.dialog_id'); + $query->where('du.userid', '!=', $user->userid); + $query->where('d.type', 'user'); + }) + ->leftJoin('users as u', 'du.userid', '=', 'u.userid') + ->where('d.type', '!=', 'user') + ->orWhere('u.bot', 0) + ->orderByDesc('m.chat_num') + ->first(); + if (!empty($longestChat)) { + if ($longestChat->avatar) { + $longestChat->avatar = url($longestChat->avatar); + } else if ($longestChat->dialog_type == 'user') { + $longestChat->avatar = User::getAvatar($longestChat->userid, $longestChat->avatar, $longestChat->user_email, $longestChat->user_nickname); + } else { + $longestChat->avatar = match ($longestChat->dialog_group_type) { + 'department' => url("images/avatar/default_group_department.png"), + 'project' => url("images/avatar/default_group_project.png"), + 'task' => url("images/avatar/default_group_task.png"), + default => url("images/avatar/default_group_people.png"), + }; + } + } + // $_A["__annual__report_".$user->userid] = [ + // 本人信息 + 'user' => [ + 'userid' => $user->userid, + 'email' => $user->email, + 'nickname' => $user->nickname, + 'avatar' => User::getAvatar($user->userid, $user->userimg, $user->email, $user->nickname) + ], // 入职时间(年月日) 'hire_date' => date("Y-m-d", $hireTimestamp), // 在职时间(天为单位) @@ -2074,33 +2126,7 @@ class UsersController extends AbstractController })->max('report_time') ), // 跟谁聊天最多(发消息的次数。可以是群、私聊、机器人除外) - 'longest_chat_user' => DB::table('web_socket_dialogs as d') - ->selectRaw(" - {$prefix}d.id, - {$prefix}d.name as dialog_name, - {$prefix}d.type as dialog_type, - {$prefix}d.group_type as dialog_group_type, - {$prefix}m.chat_num, - {$prefix}u.userid, - {$prefix}u.email as user_email, - {$prefix}u.nickname as user_nickname - ") - ->leftJoinSub(function ($query) use ($user, $year) { - $query->select('web_socket_dialog_msgs.dialog_id', DB::raw('count(*) as chat_num')) - ->from('web_socket_dialog_msgs') - ->where('web_socket_dialog_msgs.userid', $user->userid) - ->whereYear('web_socket_dialog_msgs.created_at', $year) - ->groupBy('web_socket_dialog_msgs.dialog_id'); - }, 'm', 'm.dialog_id', '=', 'd.id') - ->leftJoin('web_socket_dialog_users as du', function ($query) { - $query->on('d.id', '=', 'du.dialog_id'); - $query->where('d.type', 'user'); - }) - ->leftJoin('users as u', 'du.userid', '=', 'u.userid') - ->where('d.type', '!=', 'user') - ->orWhere('u.bot', 0) - ->orderByDesc('m.chat_num') - ->first(), + 'longest_chat_user' => $longestChat, // 跟所有ai机器人聊天的次数 'chat_al_num' => DB::table('web_socket_dialog_msgs as m') ->join('web_socket_dialogs as d', 'd.id', '=', 'm.dialog_id')