first(); if (! $channel) { return false; } if ($channel->owner_uid !== $userId) { // 判断是否为协作 $power = ShareApi::getResPower($userId, $channel->uid, 2); if ($power < 20) { return false; } } $this->channel = $channel; $this->auth = true; return true; } public function store($sent, $user, $copy = false) { $row = Sentence::firstOrNew([ 'book_id' => $sent['book_id'], 'paragraph' => $sent['paragraph'], 'word_start' => $sent['word_start'], 'word_end' => $sent['word_end'], 'channel_uid' => $this->channel->uid, ], [ 'id' => app('snowflake')->id(), 'uid' => Str::uuid(), ]); $row->content = $sent['content']; $row->strlen = mb_strlen($sent['content'], 'UTF-8'); $row->language = $this->channel->lang; $row->status = $this->channel->status; if ($copy) { // 复制句子,保留原作者信息 $row->editor_uid = $sent['editor_uid']; $row->acceptor_uid = $user['user_uid']; $row->pr_edit_at = $sent['updated_at']; } else { $row->editor_uid = $user['user_uid']; $row->acceptor_uid = null; $row->pr_edit_at = null; } $row->create_time = time() * 1000; $row->modify_time = time() * 1000; $row->save(); // 保存历史记录 if ($copy) { $this->saveHistory($row->uid, $sent['editor_uid'], $sent['content']); } else { $this->saveHistory($row->uid, $user['user_uid'], $sent['content']); } // 清除缓存 $sentId = "{$sent['book_id']}-{$sent['paragraph']}-{$sent['word_start']}-{$sent['word_end']}"; $hKey = "/sentence/res-count/{$sentId}/"; Redis::del($hKey); } private function saveHistory($uid, $editor, $content) { $newHis = new SentHistory; $newHis->id = app('snowflake')->id(); $newHis->sent_uid = $uid; $newHis->user_uid = $editor; if (empty($content)) { $newHis->content = ''; } else { $newHis->content = $content; } $newHis->create_time = time() * 1000; $newHis->save(); } }