perf: 优化离职数据移交

This commit is contained in:
kuaifan 2024-05-31 08:54:39 +08:00
parent 6cdcd4e0dc
commit 13edea3449
8 changed files with 84 additions and 7 deletions

View File

@ -2492,7 +2492,7 @@ class ProjectController extends AbstractController
$builder->whereTaskId($task->id); $builder->whereTaskId($task->id);
} else { } else {
$project = Project::userProject($project_id); $project = Project::userProject($project_id);
$builder->with(['projectTask:id,parent_id,name'])->whereProjectId($project->id); $builder->with(['projectTask:id,parent_id,name'])->whereProjectId($project->id)->whereTaskOnly(0);
} }
// //
$list = $builder->orderByDesc('created_at')->paginate(Base::getPaginate(100, 20)); $list = $builder->orderByDesc('created_at')->paginate(Base::getPaginate(100, 20));

View File

@ -28,6 +28,7 @@ use App\Models\WebSocketDialogMsg;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use App\Models\UserEmailVerification; use App\Models\UserEmailVerification;
use App\Module\AgoraIO\AgoraTokenGenerator; use App\Module\AgoraIO\AgoraTokenGenerator;
use Swoole\Coroutine;
/** /**
* @apiDefine users * @apiDefine users
@ -826,25 +827,30 @@ class UsersController extends AbstractController
} }
$userInfo->checkSystem(1); $userInfo->checkSystem(1);
// //
$msg = '修改成功';
$upArray = []; $upArray = [];
$upLdap = []; $upLdap = [];
$transferUser = null; $transferUser = null;
switch ($type) { switch ($type) {
case 'setadmin': case 'setadmin':
$msg = '设置成功';
$upArray['identity'] = array_diff($userInfo->identity, ['admin']); $upArray['identity'] = array_diff($userInfo->identity, ['admin']);
$upArray['identity'][] = 'admin'; $upArray['identity'][] = 'admin';
break; break;
case 'clearadmin': case 'clearadmin':
$msg = '取消成功';
$upArray['identity'] = array_diff($userInfo->identity, ['admin']); $upArray['identity'] = array_diff($userInfo->identity, ['admin']);
break; break;
case 'settemp': case 'settemp':
$msg = '设置成功';
$upArray['identity'] = array_diff($userInfo->identity, ['temp']); $upArray['identity'] = array_diff($userInfo->identity, ['temp']);
$upArray['identity'][] = 'temp'; $upArray['identity'][] = 'temp';
break; break;
case 'cleartemp': case 'cleartemp':
$msg = '取消成功';
$upArray['identity'] = array_diff($userInfo->identity, ['temp']); $upArray['identity'] = array_diff($userInfo->identity, ['temp']);
break; break;
@ -878,6 +884,7 @@ class UsersController extends AbstractController
break; break;
case 'setdisable': case 'setdisable':
$msg = '操作成功';
if ($userInfo->userid === $user->userid) { if ($userInfo->userid === $user->userid) {
return Base::retError('不能操作自己离职'); return Base::retError('不能操作自己离职');
} }
@ -898,11 +905,13 @@ class UsersController extends AbstractController
break; break;
case 'cleardisable': case 'cleardisable':
$msg = '操作成功';
$upArray['identity'] = array_diff($userInfo->identity, ['disable']); $upArray['identity'] = array_diff($userInfo->identity, ['disable']);
$upArray['disable_at'] = null; $upArray['disable_at'] = null;
break; break;
case 'delete': case 'delete':
$msg = '删除成功';
if ($userInfo->userid === $user->userid) { if ($userInfo->userid === $user->userid) {
return Base::retError('不能删除自己'); return Base::retError('不能删除自己');
} }
@ -1004,7 +1013,10 @@ class UsersController extends AbstractController
'new_userid' => $transferUser->userid, 'new_userid' => $transferUser->userid,
]); ]);
$userTransfer->save(); $userTransfer->save();
$userTransfer->start(); go(function () use ($userTransfer) {
Coroutine::sleep(0.1);
$userTransfer->start();
});
} elseif ($type === 'cleardisable') { } elseif ($type === 'cleardisable') {
// 取消离职重新加入全员群组 // 取消离职重新加入全员群组
if (Base::settingFind('system', 'all_group_autoin', 'yes') === 'yes') { if (Base::settingFind('system', 'all_group_autoin', 'yes') === 'yes') {
@ -1015,7 +1027,7 @@ class UsersController extends AbstractController
}); });
} }
// //
return Base::retSuccess('修改成功', $userInfo); return Base::retSuccess($msg, $userInfo);
} }
/** /**

View File

@ -40,6 +40,9 @@ use App\Module\Base;
*/ */
class ProjectLog extends AbstractModel class ProjectLog extends AbstractModel
{ {
protected $hidden = [
'task_only',
];
/** /**
* @param $value * @param $value

View File

@ -1413,7 +1413,7 @@ class ProjectTask extends AbstractModel
* @param int $userid * @param int $userid
* @return ProjectLog * @return ProjectLog
*/ */
public function addLog($detail, $record = [], $userid = 0) public function addLog($detail, $record = [], $userid = 0, $taskOnly = 0)
{ {
$detail = str_replace("{任务}", $this->parent_id ? "子任务" : "任务", $detail); $detail = str_replace("{任务}", $this->parent_id ? "子任务" : "任务", $detail);
$array = [ $array = [
@ -1429,6 +1429,9 @@ class ProjectTask extends AbstractModel
if ($record) { if ($record) {
$array['record'] = $record; $array['record'] = $record;
} }
if ($taskOnly) {
$array['task_only'] = $taskOnly;
}
$log = ProjectLog::createInstance($array); $log = ProjectLog::createInstance($array);
$log->save(); $log->save();
return $log; return $log;

View File

@ -52,7 +52,7 @@ class ProjectTaskUser extends AbstractModel
*/ */
public static function transfer($originalUserid, $newUserid) public static function transfer($originalUserid, $newUserid)
{ {
self::whereUserid($originalUserid)->chunk(100, function ($list) use ($originalUserid, $newUserid) { self::whereUserid($originalUserid)->chunkById(100, function ($list) use ($originalUserid, $newUserid) {
$tastIds = []; $tastIds = [];
/** @var self $item */ /** @var self $item */
foreach ($list as $item) { foreach ($list as $item) {
@ -68,7 +68,7 @@ class ProjectTaskUser extends AbstractModel
$item->save(); $item->save();
} }
if ($item->projectTask) { if ($item->projectTask) {
$item->projectTask->addLog("移交{任务}身份", ['userid' => [$originalUserid, ' => ', $newUserid]]); $item->projectTask->addLog("移交{任务}身份", ['userid' => [$originalUserid, ' => ', $newUserid]], 0, 1);
if (!in_array($item->task_pid, $tastIds)) { if (!in_array($item->task_pid, $tastIds)) {
$tastIds[] = $item->task_pid; $tastIds[] = $item->task_pid;
$item->projectTask->syncDialogUser(); $item->projectTask->syncDialogUser();

View File

@ -13,6 +13,9 @@ class CreateComplaintsTable extends Migration
*/ */
public function up() public function up()
{ {
if (Schema::hasTable('complaints'))
return;
Schema::create('complaints', function (Blueprint $table) { Schema::create('complaints', function (Blueprint $table) {
$table->bigIncrements('id'); $table->bigIncrements('id');
$table->bigInteger('dialog_id')->nullable()->default(0)->comment('对话ID'); $table->bigInteger('dialog_id')->nullable()->default(0)->comment('对话ID');

View File

@ -0,0 +1,56 @@
<?php
use App\Models\ProjectLog;
use App\Models\ProjectTaskUser;
use App\Models\UserTransfer;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use Swoole\Coroutine;
class ProjectLogsAddTaskOnly extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
$isAdd = false;
Schema::table('project_logs', function (Blueprint $table) use (&$isAdd) {
if (!Schema::hasColumn('project_logs', 'task_only')) {
$isAdd = true;
$table->index('project_id');
$table->index('task_id');
$table->integer('task_only')->index()->nullable()->default(0)->after('task_id')->comment('仅任务日志0否1是');
}
});
if ($isAdd) {
// 更新数据
go(function () {
Coroutine::sleep(0.1);
ProjectLog::whereDetail('移交子任务身份')->update(['task_only' => 1]);
ProjectLog::whereDetail('移交任务身份')->update(['task_only' => 1]);
UserTransfer::chunkById(100, function ($lists) {
/** @var UserTransfer $item */
foreach ($lists as $item) {
ProjectTaskUser::transfer($item->original_userid, $item->new_userid);
}
});
});
}
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('project_logs', function (Blueprint $table) {
$table->dropColumn("task_only");
});
}
}

View File

@ -47,7 +47,7 @@ innodb_write_io_threads = 2
[mysqldump] [mysqldump]
quick quick
max_allowed_packet = 8192M max_allowed_packet = 2048M
[mysql] [mysql]
no-auto-rehash no-auto-rehash