get('view')) { case 'sent-info': $table = SentPr::where('book_id', $request->get('book')) ->where('paragraph', $request->get('para')) ->where('word_start', $request->get('start')) ->where('word_end', $request->get('end')) ->where('channel_uid', $request->get('channel')); $all_count = $table->count(); $result = $table->orderBy('created_at', 'desc')->get(); break; } if ($result) { //修改notification 已读状态 $user = AuthApi::current($request); if ($user) { $id = array(); foreach ($result as $key => $row) { $id[] = $row->uid; } Notification::whereIn('res_id', $id) ->where('to', $user['user_uid']) ->update(['status' => 'read']); } return $this->ok([ "rows" => SentPrResource::collection($result), "count" => $all_count ]); } else { return $this->error("no data"); } } public function pr_tree(Request $request) { $output = []; $sentences = $request->get("data"); foreach ($sentences as $key => $sentence) { # 先查句子信息 $sentInfo = Sentence::where('book_id', $sentence['book']) ->where('paragraph', $sentence['paragraph']) ->where('word_start', $sentence['word_start']) ->where('word_end', $sentence['word_end']) ->where('channel_uid', $sentence['channel_id']) ->first(); $sentPr = SentPr::where('book_id', $sentence['book']) ->where('paragraph', $sentence['paragraph']) ->where('word_start', $sentence['word_start']) ->where('word_end', $sentence['word_end']) ->where('channel_uid', $sentence['channel_id']) ->select('content', 'editor_uid') ->orderBy('created_at', 'desc')->get(); if (count($sentPr) > 0) { if ($sentInfo) { $content = $sentInfo->content; } else { $content = "null"; } $output[] = [ 'sentence' => [ 'book' => $sentence['book'], 'paragraph' => $sentence['paragraph'], 'word_start' => $sentence['word_start'], 'word_end' => $sentence['word_end'], 'channel_id' => $sentence['channel_id'], 'content' => $content, 'pr_count' => count($sentPr), ], 'pr' => $sentPr, ]; } } return $this->ok(['rows' => $output, 'count' => count($output)]); } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { // $user = AuthApi::current($request); if (!$user) { return $this->error(__('auth.failed'), 401, 401); } $user_uid = $user['user_uid']; $data = $request->all(); #查询是否存在 #同样的内容只能提交一次 $exists = SentPr::where('book_id', $data['book']) ->where('paragraph', $data['para']) ->where('word_start', $data['begin']) ->where('word_end', $data['end']) ->where('content', $data['text']) ->where('channel_uid', $data['channel']) ->exists(); if ($exists) { return $this->error("已经存在同样的修改建议", 200, 200); } #不存在,新建 $new = new SentPr(); $new->id = app('snowflake')->id(); $new->uid = Str::uuid(); $new->book_id = $data['book']; $new->paragraph = $data['para']; $new->word_start = $data['begin']; $new->word_end = $data['end']; $new->channel_uid = $data['channel']; $new->editor_uid = $user_uid; $new->content = $data['text']; $new->language = Channel::where('uid', $data['channel'])->value('lang'); $new->status = 1; //未处理状态 $new->strlen = mb_strlen($data['text'], "UTF-8"); $new->create_time = time() * 1000; $new->modify_time = time() * 1000; $new->save(); $suggestionData = [ 'data' => new SentPrResource($new), 'token' => AuthApi::getToken($request), 'notification' => $request->get('notification', true), 'webhook' => $request->get('webhook', true), ]; Mq::publish( 'suggestion', $suggestionData ); $robotMessageOk = true; $webHookMessage = ""; #同时返回此句子pr数量 $info['book_id'] = $data['book']; $info['paragraph'] = $data['para']; $info['word_start'] = $data['begin']; $info['word_end'] = $data['end']; $info['channel_uid'] = $data['channel']; $count = SentPr::where('book_id', $data['book']) ->where('paragraph', $data['para']) ->where('word_start', $data['begin']) ->where('word_end', $data['end']) ->where('channel_uid', $data['channel']) ->count(); return $this->ok(["new" => $info, "count" => $count, "webhook" => ["message" => $webHookMessage, "ok" => $robotMessageOk]]); } /** * Display the specified resource. * @param \Illuminate\Http\Request $request * @param string $uid * @return \Illuminate\Http\Response */ public function show(Request $request, string $uid) { // $pr = SentPr::where('uid', $uid)->first(); if (!$pr) { return $this->error('no data', 404, 404); } //修改notification 已读状态 $user = AuthApi::current($request); if ($user) { Notification::where('res_id', $uid) ->where('to', $user['user_uid']) ->update(['status' => 'read']); } return $this->ok(new SentPrResource($pr)); } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param \App\Models\SentPr $sentPr * @return \Illuminate\Http\Response */ public function update(Request $request, string $id) { $user = AuthApi::current($request); if (!$user) { return $this->error(__('auth.failed'), 401, 401); } $sentPr = SentPr::find($id); if (!$sentPr) { return $this->error('no res'); } if ($sentPr->editor_uid !== $user['user_uid']) { return $this->error('not power', 403, 403); } $sentPr->content = $request->get('text'); $sentPr->modify_time = time() * 1000; $sentPr->save(); return $this->ok($sentPr); } /** * Remove the specified resource from storage. * * @param string $id * @return \Illuminate\Http\Response */ public function destroy(Request $request, string $id) { // $user = AuthApi::current($request); if (!$user) { return $this->error(__('auth.failed'), 401, 401); } $old = SentPr::where('id', $id)->first(); if (!$old) { return $this->error('no res'); } //鉴权 if ($old->editor_uid !== $user["user_uid"]) { return $this->error(__('auth.failed'), 403, 403); } $result = SentPr::where('id', $id) ->where('editor_uid', $user["user_uid"]) ->delete(); if ($result > 0) { #同时返回此句子pr数量 $count = SentPr::where('book_id', $old->book_id) ->where('paragraph', $old->paragraph) ->where('word_start', $old->word_start) ->where('word_end', $old->word_end) ->where('channel_uid', $old->channel_uid) ->count(); return $this->ok($count); } else { return $this->error('not power', 403, 403); } } }