interestCircle = $interestCircle; $this->interestCircleMessage = $interestCircleMessage; $this->interestCirclePicture = $interestCirclePicture; $this->interestCircleMessageImg = $interestCircleMessageImg; $this->interestCircleUser = $interestCircleUser; $this->interestCircleMessageComment = $interestCircleMessageComment; $this->detectionService = $detectionService; } /** * 查询单个提问 * @param $id * @return mixed */ public function detail($id) { return $this->interestCircleMessage->find($id); } /** * 提问列表 */ public function lists($request) { $perPage = isset($request['per_page']) ? $request['per_page'] : 20; $where[] = ['circle_id', $request['id']]; return $this->interestCircleMessage ->where($where) ->with('imgs') ->orderBy('is_recommend', 'desc') ->orderBy('id', 'desc') ->paginate($perPage); } /** * 发布提问 */ public function create($request) { //验证小号 $userInfo = $this->getUserInfo(); // $userInfo['sns_status']=1; // $userInfo['uid']=268; if (empty($userInfo)) { return jsonError('获取用户信息失败'); } if (!$userInfo['sns_status']) { return jsonError('您已被禁言'); } $circleUser = $this->interestCircleUser ->where('circle_id', $request['circle_id']) ->where('uid', $userInfo['uid']) ->first(); if ($circleUser) { if ($circleUser->is_black) { return jsonError('您在本圈子内的权限受限'); } } else { return jsonError('抱歉,加入圈子才能互动'); } $oneHourTime = Carbon::now()->addHours(-1)->toDateTimeString(); $oneHourPostCount = $this->interestCircleMessage->where('uid', $userInfo['uid'])->where('created_at', '>', $oneHourTime)->count(); if ($oneHourPostCount > 5) { return jsonError('创作欲望太强啦,休息一下,看看其他用户的相册吧!'); } $detectionText = strip_tags($request['content']); $detectionTextResult = $this->detectionService->checkText($detectionText); if ($detectionTextResult['code'] < 0) { return jsonError('内容违规,请修正哦'); } $imgs = []; if (isset($request['imgs']) && $request['imgs']) { $imgs = json_decode($request['imgs'], true); $imgCount = count($imgs); if ($imgCount > 3) { return jsonError('最多上传3张'); } } if ($imgs) { $allImg = $imgs; foreach ($allImg as &$img) { if (Str::contains($img, '?')) { $img = $img . '&x-oss-process=image/resize,p_50/quality,Q_50'; } else { $img = $img . '?x-oss-process=image/resize,p_50/quality,Q_50'; } } $detectionImageResult = $this->detectionService->checkImg($allImg); if ($detectionImageResult['code'] < 0) { Log::debug('图片违规,请修正哦' . json_encode($detectionImageResult)); return jsonError('图片违规,请修正哦'); } } $fresh = (Carbon::now()->timestamp) - (Carbon::parse("2019-10-08 00:00:00")->timestamp); $score = ($fresh / 43200) * 14; $data = [ 'circle_id' => $request['circle_id'], 'uid' => $userInfo['uid'], 'content' => $request['content'], 'good' => 0, 'bad' => 0, 'comment_count' => 0, 'weight' => $score ]; $date = date('Y-m-d H:i:s'); DB::beginTransaction(); try { $message = $this->interestCircleMessage->create($data); if ($imgs) { $imgData = []; foreach ($imgs as $img) { $imgData[] = [ 'msg_id' => $message->id, 'circle_id' => $message->circle_id, 'image' => $img, 'created_at' => $date, 'updated_at' => $date ]; } $this->interestCircleMessageImg->insert($imgData); } $this->interestCircle->where('id', $request['circle_id'])->increment('message_count'); DB::commit(); Log::info('message_create:' . $message->id . ',post_author:' . $message->uid . ',author_ip:' . getClientIp()); return jsonSuccess(); } catch (QueryException $exception) { DB::rollBack(); Log::debug('发布提问失败:' . $exception->getMessage()); return jsonError('发布提问失败,请重试'); } } /** * 评论&回复 * @param $request * @return array */ public function createComment($request) { $userInfo = $this->getUserInfo(); // $userInfo['sns_status']=1; // $userInfo['uid']=268; // $userInfo['username']='测试用户'; // $userInfo['avatar']=''; if (empty($userInfo)) { return jsonError('获取用户信息失败'); } if (!$userInfo['sns_status']) { return jsonError('您已被禁言'); } $circleUser = $this->interestCircleUser ->where('circle_id', $request['circle_id']) ->where('uid', $userInfo['uid']) ->first(); if ($circleUser) { if ($circleUser->is_black) { return jsonError('您在本圈子内的权限受限'); } } else { return jsonError('抱歉,加入圈子才能互动'); } $oneHourTime = Carbon::now()->addHours(-1)->toDateTimeString(); $oneHourCommentCount = $this->interestCircleMessageComment->where('uid', $userInfo['uid'])->where('created_at', '>', $oneHourTime)->count(); if ($oneHourCommentCount > 59) { return jsonError('回复了这么多,休息休息,喝口水吧!'); } $detectionTextResult = $this->detectionService->checkText($request['content']); if ($detectionTextResult['code'] < 0) { return jsonError('内容违规,请修正哦'); } $post = $this->interestCircleMessage->find($request['msg_id']); if (!$post) { return jsonError('获取提问信息失败'); } $data = [ 'uid' => $userInfo['uid'], 'msg_id' => $request['msg_id'], 'parent_id' => 0, 'username' => $userInfo['username'], 'reply_uid' => 0, 'reply_username' => '', 'avatar' => $userInfo['avatar'] ?? '', 'content' => $request['content'], 'is_delete' => 0, ]; if (isset($request['parent_id']) && $request['parent_id'] != 0) { $comment = $this->interestCircleMessageComment->find($request['parent_id']); if (!$comment || $comment->msg_id != $post->id) { return jsonError('获取评论信息失败'); } if ($comment->parent_id) { return jsonError('只能回复评论'); } if ($comment->is_delete) { return jsonError('不能回复已删除评论'); } $data['parent_id'] = $request['parent_id']; if (isset($request['reply_uid']) && isset($request['reply_username'])) { $data['reply_uid'] = $request['reply_uid']; $data['reply_username'] = $request['reply_username']; } else { $data['reply_uid'] = 0; $data['reply_username'] = ''; } } DB::beginTransaction(); try { $newComment = $this->interestCircleMessageComment->create($data); if ($newComment->parent_id) { $this->interestCircleMessageComment->where('id', $newComment->parent_id)->increment('reply_count'); } DB::commit(); if ($newComment->parent_id) { Redis::DEL('circle_message_new_reply_' . $newComment->parent_id); } else { Redis::DEL('circle_message_new_comment_' . $newComment->post_id); } return jsonSuccess(['id' => $newComment->id], '评论成功'); } catch (QueryException $exception) { DB::rollBack(); Log::debug('评论内容失败:' . $exception->getMessage()); return jsonError('评论内容失败,请重试'); } } /** * 评论列表 */ public function commentList($request) { $perPage = isset($request['per_page']) ? $request['per_page'] : 20; return $this->interestCircleMessageComment ->where('msg_id', $request['msg_id']) ->where('parent_id', 0) ->orderBy('id', 'desc') ->paginate($perPage); } /** * 提问评论数 */ public function getCommentCount($id) { $commentCount = 0; $post = $this->interestCircleMessage->find($id); if ($post) { $commentCount = $this->interestCircleMessageComment->where('msg_id', $id)->count(); } return $commentCount; } /** * 回复列表 */ public function replyList($request) { $perPage = isset($request['per_page']) ? $request['per_page'] : 20; return $this->interestCircleMessageComment ->where('parent_id', $request['comment_id']) ->orderBy('id', 'desc') ->paginate($perPage); } /** * 提问顶踩 * @param $request * @return array */ public function messageAction($request) { $userInfo = $this->getUserInfo(); // $userInfo['sns_status'] = 1; // $userInfo['uid'] = 268; // $userInfo['username'] = '测试用户'; // $userInfo['avatar'] = ''; if (empty($userInfo)) { return jsonError('获取用户信息失败'); } $messageInfo = $this->interestCircleMessage->find($request['msg_id']); if (empty($messageInfo)) { return jsonError('该提问不存在'); } $circleUser = $this->interestCircleUser ->where('circle_id', $messageInfo->circle_id) ->where('uid', $userInfo['uid']) ->first(); if ($circleUser) { if ($circleUser->is_black) { return jsonError('您在本圈子内的权限受限'); } } else { return jsonError('抱歉,加入圈子才能互动'); } $actionRow = InterestCircleMessageRecord::where([['msg_id', $request['msg_id']], ['uid', $userInfo['uid']]])->first(); if ($actionRow) { return jsonSuccess(); } DB::beginTransaction(); try { $data['msg_id'] = $request['msg_id']; $data['uid'] = $userInfo['uid']; $data['action'] = $request['action']; InterestCircleMessageRecord::insert($data); if ($request['action'] == 1) { InterestCircleMessage::where('id', $request['msg_id'])->increment('good'); } elseif ($request['action'] == -1) { InterestCircleMessage::where('id', $request['msg_id'])->increment('bad'); } DB::commit(); return jsonSuccess(); } catch (QueryException $exception) { DB::rollBack(); Log::debug('顶踩提问失败:' . $exception->getMessage()); return jsonError('操作失败,请重试'); } } /** * 删除评论 */ public function commentDelete($request) { $userInfo = $this->getUserInfo(); if (empty($userInfo)) { return jsonError('获取用户信息失败'); } $comment = $this->interestCircleMessageComment->find($request['id']); if (!$comment) { return jsonError('获取评论信息失败'); } if ($userInfo['uid'] != $comment->uid) { return jsonError('只能删除自己的评论'); } if ($comment->is_delete == 1) { return jsonError('该评论已经删除'); } DB::beginTransaction(); try { $comment->is_delete = 1; $comment->save(); DB::commit(); if (!$comment->parent_id) { Redis::DEL('circle_message_new_comment_' . $comment->post_id); } else { Redis::DEL('circle_message_new_reply_' . $comment->id); } Redis::SADD('delete_circle_message_comment_ids', $comment->id); return jsonSuccess('删除评论成功'); } catch (QueryException $exception) { DB::rollBack(); Log::debug('删除评论:' . $request['id'] . $exception->getMessage()); return jsonError('删除评论失败'); } } /** * 删除提问 */ public function deleteMessage($request) { //验证用户信息 $userInfo = $this->getUserInfo(); if (empty($userInfo)) { return jsonError('获取用户信息失败'); } $post = $this->interestCircleMessage->find($request['id']); if (!$post) { return jsonError('获取提问信息失败'); } if ($post->uid != $userInfo['uid']) { return jsonError('只能删除自己发布的提问'); } DB::beginTransaction(); try { $post->delete(); DB::commit(); Redis::SADD('delete_circle_message_ids', $request['id']); Log::debug('删除提问失败:' . $request['id']); return jsonSuccess('删除提问成功'); } catch (QueryException $exception) { DB::rollBack(); Log::debug('删除提问失败:' . $request['id'] . $exception->getMessage()); return jsonError('删除提问失败,请重试'); } } /** * 创建相册 */ public function createPictures($request) { //验证小号 $userInfo = $this->getUserInfo(); // $userInfo['sns_status']=1; // $userInfo['uid']=268; if (empty($userInfo)) { return jsonError('获取用户信息失败'); } if (!$userInfo['sns_status']) { return jsonError('您已被禁言'); } $circleUser = $this->interestCircleUser ->where('circle_id', $request['circle_id']) ->where('uid', $userInfo['uid']) ->first(); if ($circleUser) { if ($circleUser->is_black) { return jsonError('您在本圈子内的权限受限'); } } else { return jsonError('抱歉,加入圈子才能互动'); } $oneHourTime = Carbon::now()->addHours(-1)->toDateTimeString(); $oneHourPostCount = $this->interestCirclePicture->where('uid', $userInfo['uid'])->where('created_at', '>', $oneHourTime)->count(); if ($oneHourPostCount > 5) { return jsonError('创作欲望太强啦,休息一下,看看其他用户的提问吧!'); } $imgs = json_decode($request['imgs'], true); $imgCount = count($imgs); if ($imgCount == 0 || $imgCount > 9) { return jsonError('所传图集必须1-9个'); } $allImg = $imgs; foreach ($allImg as &$img) { if (Str::contains($img, '?')) { $img = $img . '&x-oss-process=image/resize,p_50/quality,Q_50'; } else { $img = $img . '?x-oss-process=image/resize,p_50/quality,Q_50'; } } $detectionImageResult = $this->detectionService->checkImg($allImg); if ($detectionImageResult['code'] < 0) { Log::debug('图片违规,请修正哦' . json_encode($detectionImageResult)); return jsonError('图片违规,请修正哦'); } $date = date('Y-m-d H:i:s'); $patchNum = Str::random(32); DB::beginTransaction(); try { $imgData = []; foreach ($imgs as $k=>$img) { $isMain = 0; if($k==0){ $isMain=1; } $imgData[] = [ 'circle_id' => $request['circle_id'], 'uid' => $userInfo['uid'], 'image' => $img, 'patch_num' => $patchNum, 'is_main' => $isMain, 'created_at' => $date, 'updated_at' => $date ]; } $this->interestCirclePicture->insert($imgData); $this->interestCircle->where('id', $request['circle_id'])->increment('picture_count', $imgCount); $key = 'circle_picture_'.$patchNum; Redis::set($key,json_encode($imgs)); DB::commit(); return jsonSuccess(); } catch (QueryException $exception) { DB::rollBack(); Log::debug('上传相册失败:' . $exception->getMessage()); return jsonError('上传失败'); } } /** * 相册列表 */ public function pictureLists($request) { $perPage = isset($request['per_page']) ? $request['per_page'] : 20; $where[] = ['circle_id', $request['circle_id']]; $where[] = ['is_main', 1]; return $this->interestCirclePicture ->where($where) ->orderBy('id', 'desc') ->paginate($perPage); } /** * 删除相册图片 */ public function deletePicture($request) { $circle = $this->interestCirclePicture->where('patch_num', $request['id'])->first(); if (!$circle) { return jsonError('相册不存在'); } $userInfo = $this->getUserInfo(); // $userInfo['sns_status']=1; // $userInfo['uid']=268; if (empty($userInfo)) { return jsonError('获取用户信息失败'); } if ($userInfo['uid'] != $circle->uid) { return jsonError('只能删除自己的相册'); } DB::beginTransaction(); try { $this->interestCirclePicture->where('patch_num', $request['id'])->delete(); DB::commit(); return jsonSuccess(); } catch (QueryException $exception) { DB::rollBack(); Log::debug('删除相册图片:' . $request['id'] . $exception->getMessage()); return jsonError('操作失败,请重试'); } } }