perf: 完善部门群组功能

This commit is contained in:
kuaifan
2022-11-17 20:49:47 +08:00
parent c817e5815f
commit 865ac80b99
13 changed files with 343 additions and 30 deletions

View File

@@ -502,6 +502,7 @@ class UsersController extends AbstractController
* - yes: 已认证
* - no: 未认证
* - 其他值: 全部(默认)
* - keys.department 部门ID(0表示默认部门,不赋值获取所有部门)
*
* @apiParam {Number} [page] 当前页,默认:1
* @apiParam {Number} [pagesize] 每页显示数量,默认:20,最大:50
@@ -560,6 +561,15 @@ class UsersController extends AbstractController
} elseif ($keys['email_verity'] === 'no') {
$builder->whereEmailVerity(0);
}
if (isset($keys['department'])) {
if ($keys['department'] == '0') {
$builder->where(function($query) {
$query->where("department", "")->orWhere("department", ",,");
});
} else {
$builder->where("department", "like", "%,{$keys['department']},%");
}
}
} else {
$builder->whereNull('disable_at');
}
@@ -580,6 +590,7 @@ class UsersController extends AbstractController
* @apiParam {String} [type] 操作
* - setadmin 设为管理员
* - clearadmin 取消管理员
* - department 修改部门(需要参数 department)
* - setdisable 设为离职(需要参数 disable_time、transfer_userid)
* - cleardisable 取消离职
* - delete 删除会员(需要参数 delete_reason)
@@ -588,6 +599,7 @@ class UsersController extends AbstractController
* @apiParam {String} [password] 新的密码
* @apiParam {String} [nickname] 昵称
* @apiParam {String} [profession] 职位
* @apiParam {String} [department] 部门
* @apiParam {String} [disable_time] 离职时间
* @apiParam {String} [transfer_userid] 离职交接人
* @apiParam {String} [delete_reason] 删除原因
@@ -622,6 +634,18 @@ class UsersController extends AbstractController
$upArray['identity'] = array_diff($userInfo->identity, ['admin']);
break;
case 'department':
if (!is_array($data['department'])) {
$data['department'] = [];
}
foreach ($data['department'] as $id) {
if (!UserDepartment::whereId($id)->exists()) {
return Base::retError('修改部门不存在');
}
}
$upArray['department'] = $data['department'];
break;
case 'setdisable':
if ($userInfo->userid === $user->userid) {
return Base::retError('不能操作自己离职');
@@ -660,6 +684,9 @@ class UsersController extends AbstractController
if (isset($upArray['identity'])) {
$upArray['identity'] = "," . implode(",", $upArray['identity']) . ",";
}
if (isset($upArray['department'])) {
$upArray['department'] = "," . implode(",", $upArray['department']) . ",";
}
// 邮箱
if (Arr::exists($data, 'email')) {
$email = trim($data['email']);
@@ -710,9 +737,29 @@ class UsersController extends AbstractController
}
if ($upArray) {
AbstractModel::transaction(function() use ($user, $type, $upArray, $userInfo, $transferUser) {
$exitIds = array_diff($userInfo->department, Base::explodeInt($upArray['department']));
$joinIds = array_diff(Base::explodeInt($upArray['department']), $userInfo->department);
$userInfo->updateInstance($upArray);
$userInfo->save();
if ($type === 'setdisable') {
if ($type === 'department') {
$userids = [$userInfo->userid];
// 退出群组
$exitDepartments = UserDepartment::whereIn('id', $exitIds)->get();
foreach ($exitDepartments as $exitDepartment) {
if ($exitDepartment->dialog_id > 0 && $exitDialog = WebSocketDialog::find($exitDepartment->dialog_id)) {
$exitDialog->exitGroup($userids, 'remove', false);
$exitDialog->pushMsg("groupExit", null, $userids);
}
}
// 加入群组
$joinDepartments = UserDepartment::whereIn('id', $joinIds)->get();
foreach ($joinDepartments as $joinDepartment) {
if ($joinDepartment->dialog_id > 0 && $joinDialog = WebSocketDialog::find($joinDepartment->dialog_id)) {
$joinDialog->joinGroup($userids, 0, true);
$joinDialog->pushMsg("groupJoin", null, $userids);
}
}
} elseif ($type === 'setdisable') {
$userTransfer = UserTransfer::createInstance([
'original_userid' => $userInfo->userid,
'new_userid' => $transferUser->userid,
@@ -1193,12 +1240,11 @@ class UsersController extends AbstractController
return Base::retError('请选择正确的部门负责人');
}
//
$userDepartment->updateInstance([
$userDepartment->saveDepartment([
'name' => $name,
'parent_id' => $parent_id,
'owner_userid' => $owner_userid,
]);
$userDepartment->saveDepartment();
//
return Base::retSuccess($parent_id > 0 ? '保存成功' : '新建成功');
}