hasOne(Project::class, 'id', 'project_id'); } /** * 移交项目身份 * @param $originalUserid * @param $newUserid * @return void */ public static function transfer($originalUserid, $newUserid) { self::whereUserid($originalUserid)->chunkById(100, function ($list) use ($originalUserid, $newUserid) { /** @var self $item */ foreach ($list as $item) { $row = self::whereProjectId($item->project_id)->whereUserid($newUserid)->first(); if ($row) { // 已存在则删除原数据,判断改变已存在的数据 $row->owner = max($row->owner, $item->owner); $row->save(); $item->delete(); } else { // 不存在则改变原数据 $item->userid = $newUserid; $item->save(); } if ($item->project) { if ($item->project->personal) { $name = User::userid2nickname($originalUserid) ?: ('ID:' . $originalUserid); $item->project->name = "【{$name}】{$item->project->name}"; $item->project->save(); } $item->project->addLog("移交项目身份", ['userid' => [$originalUserid, ' => ', $newUserid]]); $item->project->syncDialogUser(); } } }); } /** * 退出项目 */ public function exitProject() { ProjectTaskUser::whereProjectId($this->project_id) ->whereUserid($this->userid) ->chunk(100, function ($list) { $tastIds = []; /** @var ProjectTaskUser $item */ foreach ($list as $item) { $item->delete(); if (!in_array($item->task_pid, $tastIds)) { $tastIds[] = $item->task_pid; $item->projectTask?->syncDialogUser(); } } }); $this->delete(); } }