mirror of
https://github.com/kuaifan/dootask.git
synced 2025-12-10 18:02:55 +00:00
perf: 优化离职数据移交
This commit is contained in:
parent
6cdcd4e0dc
commit
13edea3449
@ -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));
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -40,6 +40,9 @@ use App\Module\Base;
|
||||
*/
|
||||
class ProjectLog extends AbstractModel
|
||||
{
|
||||
protected $hidden = [
|
||||
'task_only',
|
||||
];
|
||||
|
||||
/**
|
||||
* @param $value
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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');
|
||||
|
||||
@ -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");
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -47,7 +47,7 @@ innodb_write_io_threads = 2
|
||||
|
||||
[mysqldump]
|
||||
quick
|
||||
max_allowed_packet = 8192M
|
||||
max_allowed_packet = 2048M
|
||||
|
||||
[mysql]
|
||||
no-auto-rehash
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user