mirror of
https://github.com/kuaifan/dootask.git
synced 2026-01-07 05:13:11 +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\WebSocketDialog;
|
||||||
use App\Models\UserCheckinRecord;
|
use App\Models\UserCheckinRecord;
|
||||||
use App\Models\WebSocketDialogMsg;
|
use App\Models\WebSocketDialogMsg;
|
||||||
|
use App\Models\WebSocketDialogUser;
|
||||||
use App\Models\UserTaskBrowse;
|
use App\Models\UserTaskBrowse;
|
||||||
use App\Models\UserFavorite;
|
use App\Models\UserFavorite;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
@ -1832,10 +1833,12 @@ class UsersController extends AbstractController
|
|||||||
// 获取子部门中的所有成员
|
// 获取子部门中的所有成员
|
||||||
$subDepartmentMembers = [];
|
$subDepartmentMembers = [];
|
||||||
foreach ($subDepartmentIds as $subId) {
|
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) {
|
foreach ($users as $user) {
|
||||||
if (!in_array($user->userid, $subDepartmentMembers)) {
|
if (!isset($subDepartmentMembers[$user->userid])) {
|
||||||
$subDepartmentMembers[] = $user->userid;
|
$subDepartmentMembers[$user->userid] = $user->userid;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1855,7 +1858,7 @@ class UsersController extends AbstractController
|
|||||||
AbstractModel::transaction(function () use ($id, $subDepartmentMembers, &$syncedCount, &$alreadyInDeptCount) {
|
AbstractModel::transaction(function () use ($id, $subDepartmentMembers, &$syncedCount, &$alreadyInDeptCount) {
|
||||||
foreach ($subDepartmentMembers as $userid) {
|
foreach ($subDepartmentMembers as $userid) {
|
||||||
$user = User::find($userid);
|
$user = User::find($userid);
|
||||||
if ($user) {
|
if ($user && $user->disable_at === null) {
|
||||||
$userDepartments = $user->department;
|
$userDepartments = $user->department;
|
||||||
if (!in_array($id, $userDepartments)) {
|
if (!in_array($id, $userDepartments)) {
|
||||||
$userDepartments[] = $id;
|
$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} 个成员";
|
$message = "同步完成,共同步 {$syncedCount} 个成员";
|
||||||
if ($alreadyInDeptCount > 0) {
|
if ($alreadyInDeptCount > 0) {
|
||||||
$message .= ",其中 {$alreadyInDeptCount} 个成员已在当前部门";
|
$message .= ",其中 {$alreadyInDeptCount} 个成员已在当前部门";
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user