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);
} else {
$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));

View File

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

View File

@ -1413,7 +1413,7 @@ class ProjectTask extends AbstractModel
* @param int $userid
* @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);
$array = [
@ -1429,6 +1429,9 @@ class ProjectTask extends AbstractModel
if ($record) {
$array['record'] = $record;
}
if ($taskOnly) {
$array['task_only'] = $taskOnly;
}
$log = ProjectLog::createInstance($array);
$log->save();
return $log;

View File

@ -52,7 +52,7 @@ class ProjectTaskUser extends AbstractModel
*/
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 = [];
/** @var self $item */
foreach ($list as $item) {
@ -68,7 +68,7 @@ class ProjectTaskUser extends AbstractModel
$item->save();
}
if ($item->projectTask) {
$item->projectTask->addLog("移交{任务}身份", ['userid' => [$originalUserid, ' => ', $newUserid]]);
$item->projectTask->addLog("移交{任务}身份", ['userid' => [$originalUserid, ' => ', $newUserid]], 0, 1);
if (!in_array($item->task_pid, $tastIds)) {
$tastIds[] = $item->task_pid;
$item->projectTask->syncDialogUser();

View File

@ -13,6 +13,9 @@ class CreateComplaintsTable extends Migration
*/
public function up()
{
if (Schema::hasTable('complaints'))
return;
Schema::create('complaints', function (Blueprint $table) {
$table->bigIncrements('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]
quick
max_allowed_packet = 8192M
max_allowed_packet = 2048M
[mysql]
no-auto-rehash