mirror of
https://github.com/kuaifan/dootask.git
synced 2025-12-30 15:50:26 +00:00
feat: 增强用户部门成员管理功能
- 在 UsersController 中新增逻辑,自动将缺失的部门成员加入 WebSocket 对话组 - 优化部门成员同步流程,提升用户体验
This commit is contained in:
parent
6e6bd8a6be
commit
bef0d2d992
@ -29,6 +29,7 @@ use App\Models\UserDepartment;
|
||||
use App\Models\WebSocketDialog;
|
||||
use App\Models\UserCheckinRecord;
|
||||
use App\Models\WebSocketDialogMsg;
|
||||
use App\Models\WebSocketDialogUser;
|
||||
use App\Models\UserTaskBrowse;
|
||||
use App\Models\UserFavorite;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
@ -1832,10 +1833,12 @@ class UsersController extends AbstractController
|
||||
// 获取子部门中的所有成员
|
||||
$subDepartmentMembers = [];
|
||||
foreach ($subDepartmentIds as $subId) {
|
||||
$users = User::where("department", "like", "%,{$subId},%")->get();
|
||||
$users = User::where("department", "like", "%,{$subId},%")
|
||||
->whereNull('disable_at')
|
||||
->get();
|
||||
foreach ($users as $user) {
|
||||
if (!in_array($user->userid, $subDepartmentMembers)) {
|
||||
$subDepartmentMembers[] = $user->userid;
|
||||
if (!isset($subDepartmentMembers[$user->userid])) {
|
||||
$subDepartmentMembers[$user->userid] = $user->userid;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1855,7 +1858,7 @@ class UsersController extends AbstractController
|
||||
AbstractModel::transaction(function () use ($id, $subDepartmentMembers, &$syncedCount, &$alreadyInDeptCount) {
|
||||
foreach ($subDepartmentMembers as $userid) {
|
||||
$user = User::find($userid);
|
||||
if ($user) {
|
||||
if ($user && $user->disable_at === null) {
|
||||
$userDepartments = $user->department;
|
||||
if (!in_array($id, $userDepartments)) {
|
||||
$userDepartments[] = $id;
|
||||
@ -1869,6 +1872,25 @@ class UsersController extends AbstractController
|
||||
}
|
||||
});
|
||||
|
||||
if ($userDepartment->dialog_id > 0) {
|
||||
$departmentMemberIds = User::where("department", "like", "%,{$id},%")
|
||||
->whereNull('disable_at')
|
||||
->pluck('userid')
|
||||
->toArray();
|
||||
$departmentMemberIds = array_map('intval', $departmentMemberIds);
|
||||
|
||||
$existingGroupUserIds = WebSocketDialogUser::whereDialogId($userDepartment->dialog_id)
|
||||
->pluck('userid')
|
||||
->toArray();
|
||||
$existingGroupUserIds = array_map('intval', $existingGroupUserIds);
|
||||
$missingInGroup = array_values(array_diff($departmentMemberIds, $existingGroupUserIds));
|
||||
|
||||
if (!empty($missingInGroup) && $dialog = WebSocketDialog::find($userDepartment->dialog_id)) {
|
||||
$dialog->joinGroup($missingInGroup, 0, true);
|
||||
$dialog->pushMsg("groupJoin", null, $missingInGroup);
|
||||
}
|
||||
}
|
||||
|
||||
$message = "同步完成,共同步 {$syncedCount} 个成员";
|
||||
if ($alreadyInDeptCount > 0) {
|
||||
$message .= ",其中 {$alreadyInDeptCount} 个成员已在当前部门";
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user