diff --git a/app/Http/Controllers/Api/ProjectController.php b/app/Http/Controllers/Api/ProjectController.php index 5685067a..286982ff 100755 --- a/app/Http/Controllers/Api/ProjectController.php +++ b/app/Http/Controllers/Api/ProjectController.php @@ -236,9 +236,11 @@ class ProjectController extends AbstractController $array[] = $uid; } } - $delete = ProjectUser::whereProjectId($project->id)->whereNotIn('userid', $array); - $deleteUser = $delete->pluck('userid'); - $delete->delete(); + $deleteRows = ProjectUser::whereProjectId($project->id)->whereNotIn('userid', $array)->get(); + $deleteUser = $deleteRows->pluck('userid'); + foreach ($deleteRows as $row) { + $row->exitProject(); + } $project->syncDialogUser(); $project->addLog("修改项目成员"); return $deleteUser->toArray(); @@ -358,7 +360,8 @@ class ProjectController extends AbstractController } // AbstractModel::transaction(function() use ($user, $project) { - ProjectUser::whereProjectId($project->id)->whereUserid($user->userid)->delete(); + $row = ProjectUser::whereProjectId($project->id)->whereUserid($user->userid)->first(); + $row && $row->exitProject(); $project->syncDialogUser(); $project->addLog("会员ID:" . $user->userid . " 退出项目"); $project->pushMsg('delete', null, $user->userid); diff --git a/app/Models/Project.php b/app/Models/Project.php index 6f8ab786..b0829499 100644 --- a/app/Models/Project.php +++ b/app/Models/Project.php @@ -36,7 +36,7 @@ use Request; * @property-read int|null $project_log_count * @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\ProjectUser[] $projectUser * @property-read int|null $project_user_count - * @method static \Illuminate\Database\Eloquent\Builder|Project authData($user = null) + * @method static \Illuminate\Database\Eloquent\Builder|Project authData($userid = null) * @method static \Illuminate\Database\Eloquent\Builder|Project newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|Project newQuery() * @method static \Illuminate\Database\Query\Builder|Project onlyTrashed() @@ -85,9 +85,9 @@ class Project extends AbstractModel $this->appendattrs['task_complete'] = $builder->whereNotNull('complete_at')->count(); $this->appendattrs['task_percent'] = $this->appendattrs['task_num'] ? intval($this->appendattrs['task_complete'] / $this->appendattrs['task_num'] * 100) : 0; // - $builder = ProjectTask::whereProjectId($this->id)->whereParentId(0)->whereNull('archived_at'); - $this->appendattrs['task_my_num'] = $builder->whereUserid(User::userid())->count(); - $this->appendattrs['task_my_complete'] = $builder->whereUserid(User::userid())->whereNotNull('complete_at')->count(); + $builder = ProjectTask::whereProjectId($this->id)->whereParentId(0)->authData(User::userid())->whereNull('archived_at'); + $this->appendattrs['task_my_num'] = $builder->count(); + $this->appendattrs['task_my_complete'] = $builder->whereNotNull('complete_at')->count(); $this->appendattrs['task_my_percent'] = $this->appendattrs['task_my_num'] ? intval($this->appendattrs['task_my_complete'] / $this->appendattrs['task_my_num'] * 100) : 0; } } @@ -212,14 +212,14 @@ class Project extends AbstractModel /** * 查询自己的项目 * @param self $query - * @param null $user + * @param null $userid * @return self */ - public function scopeAuthData($query, $user = null) + public function scopeAuthData($query, $userid = null) { - $user = $user ?: User::auth(); + $userid = $userid ?: User::userid(); $query->join('project_users', 'projects.id', '=', 'project_users.project_id') - ->where('project_users.userid', $user->userid); + ->where('project_users.userid', $userid); return $query; } diff --git a/app/Models/ProjectTask.php b/app/Models/ProjectTask.php index cf5c0602..2580c82b 100644 --- a/app/Models/ProjectTask.php +++ b/app/Models/ProjectTask.php @@ -52,7 +52,7 @@ use Request; * @property-read int|null $task_tag_count * @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\ProjectTaskUser[] $taskUser * @property-read int|null $task_user_count - * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask authData($user = null) + * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask authData($userid = null) * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask newQuery() * @method static \Illuminate\Database\Query\Builder|ProjectTask onlyTrashed() @@ -265,14 +265,14 @@ class ProjectTask extends AbstractModel /** * 查询自己的任务 * @param self $query - * @param null $user + * @param null $userid * @return self */ - public function scopeAuthData($query, $user = null) + public function scopeAuthData($query, $userid = null) { - $user = $user ?: User::auth(); - $query->whereIn('id', function ($qy) use ($user) { - $qy->select('task_pid')->from('project_task_users')->where('userid', $user->userid); + $userid = $userid ?: User::userid(); + $query->whereIn('id', function ($qy) use ($userid) { + $qy->select('task_pid')->from('project_task_users')->where('userid', $userid); }); return $query; } diff --git a/app/Models/ProjectUser.php b/app/Models/ProjectUser.php index 1bc0d966..aabe5920 100644 --- a/app/Models/ProjectUser.php +++ b/app/Models/ProjectUser.php @@ -36,4 +36,19 @@ class ProjectUser extends AbstractModel { return $this->hasOne(Project::class, 'id', 'project_id'); } + + /** + * 退出项目 + */ + public function exitProject() + { + $tasks = ProjectTask::whereProjectId($this->project_id)->authData($this->userid)->get(); + foreach ($tasks as $task) { + if (ProjectTaskUser::whereTaskId($task->id)->whereUserid($this->userid)->delete()) { + $task->pushMsg('update'); + $task->syncDialogUser(); + } + } + $this->delete(); + } }