attributes['task_num'])) { $builder = ProjectTask::whereProjectId($this->id)->whereParentId(0)->whereNull('archived_at'); $this->attributes['task_num'] = $builder->count(); $this->attributes['task_complete'] = $builder->whereNotNull('complete_at')->count(); $this->attributes['task_percent'] = $this->attributes['task_num'] ? intval($this->attributes['task_complete'] / $this->attributes['task_num'] * 100) : 0; // $builder = ProjectTask::whereProjectId($this->id)->whereParentId(0)->whereNull('archived_at'); $this->attributes['task_my_num'] = $builder->whereUserid(User::token2userid())->count(); $this->attributes['task_my_complete'] = $builder->whereUserid(User::token2userid())->whereNotNull('complete_at')->count(); $this->attributes['task_my_percent'] = $this->attributes['task_my_num'] ? intval($this->attributes['task_my_complete'] / $this->attributes['task_my_num'] * 100) : 0; } } /** * 任务数量 * @return int */ public function getTaskNumAttribute() { $this->generateTaskData(); return $this->attributes['task_num']; } /** * 任务完成数量 * @return int */ public function getTaskCompleteAttribute() { $this->generateTaskData(); return $this->attributes['task_complete']; } /** * 任务完成率 * @return int */ public function getTaskPercentAttribute() { $this->generateTaskData(); return $this->attributes['task_percent']; } /** * 任务数量(我的) * @return int */ public function getTaskMyNumAttribute() { $this->generateTaskData(); return $this->attributes['task_my_num']; } /** * 任务完成数量(我的) * @return int */ public function getTaskMyCompleteAttribute() { $this->generateTaskData(); return $this->attributes['task_my_complete']; } /** * 任务完成率(我的) * @return int */ public function getTaskMyPercentAttribute() { $this->generateTaskData(); return $this->attributes['task_my_percent']; } /** * @param $value * @return int|mixed */ public function getDialogIdAttribute($value) { if ($value === 0) { $userid = $this->projectUser->pluck('userid')->toArray(); $dialog = WebSocketDialog::createGroup('', $userid, 'project'); if ($dialog) { $this->dialog_id = $value = $dialog->id; $this->save(); } } return $value; } /** * @return \Illuminate\Database\Eloquent\Relations\HasMany */ public function projectColumn(): \Illuminate\Database\Eloquent\Relations\HasMany { return $this->hasMany(projectColumn::class, 'project_id', 'id')->orderBy('sort')->orderBy('id'); } /** * @return \Illuminate\Database\Eloquent\Relations\HasMany */ public function projectLog(): \Illuminate\Database\Eloquent\Relations\HasMany { return $this->hasMany(projectLog::class, 'project_id', 'id')->orderByDesc('id'); } /** * @return \Illuminate\Database\Eloquent\Relations\HasMany */ public function projectUser(): \Illuminate\Database\Eloquent\Relations\HasMany { return $this->hasMany(projectUser::class, 'project_id', 'id')->orderBy('id'); } /** * 加入项目 * @param int $userid 加入的会员ID * @return bool */ public function joinProject($userid) { $result = AbstractModel::transaction(function () use ($userid) { ProjectUser::updateInsert([ 'project_id' => $this->id, 'userid' => $userid, ]); WebSocketDialogUser::updateInsert([ 'dialog_id' => $this->dialog_id, 'userid' => $userid, ]); }); return Base::isSuccess($result); } /** * 删除项目 * @return bool */ public function deleteProject() { $result = AbstractModel::transaction(function () { ProjectTask::whereProjectId($this->id)->delete(); ProjectColumn::whereProjectId($this->id)->delete(); WebSocketDialog::whereId($this->dialog_id)->delete(); if ($this->delete()) { return Base::retSuccess('success'); } else { return Base::retError('error'); } }); return Base::isSuccess($result); } }