initializeMobile($request); if ($response !== null) { return $response; } $page = $this->intValue($request->get('page', 1), 1); $pageSize = $this->intValue($request->get('page_size', 20), 20); $paginate = OperationNotice::where('status', 1)->order('id', 'desc')->paginate([ 'page' => $page, 'list_rows' => $pageSize, ]); $noticeIds = []; foreach ($paginate->items() as $row) { $noticeIds[] = $row->id; } $readRows = []; if ($noticeIds !== []) { $readRows = UserNoticeRead::where('user_id', $this->auth->id)->whereIn('notice_id', $noticeIds)->column('notice_id'); } $readMap = array_flip($readRows); $list = []; foreach ($paginate->items() as $row) { $list[] = [ 'notice_id' => $row->id, 'title' => $row->title, 'notice_type' => $this->intValue($row->notice_type, 0) === 1 ? 'popout' : 'silent', 'is_read' => isset($readMap[$row->id]), 'publish_time' => $row->publish_at, ]; } return $this->mobileSuccess(['list' => $list]); } public function noticeDetail(Request $request): Response { $response = $this->initializeMobile($request); if ($response !== null) { return $response; } $id = $this->intValue($request->get('id', 0), 0); if ($id < 1) { return $this->mobileError(1001, 'Missing parameters'); } $notice = OperationNotice::where('id', $id)->where('status', 1)->find(); if (!$notice) { return $this->mobileError(2004, 'Notice does not exist'); } return $this->mobileSuccess([ 'notice_id' => $notice->id, 'title' => $notice->title, 'content' => $notice->content, 'notice_type' => $this->intValue($notice->notice_type, 0) === 1 ? 'popout' : 'silent', 'must_confirm' => $this->intValue($notice->notice_type, 0) === 1, 'publish_time' => $notice->publish_at, ]); } public function noticeConfirm(Request $request): Response { $response = $this->initializeMobile($request); if ($response !== null) { return $response; } $noticeId = $this->intValue($request->post('notice_id', 0), 0); if ($noticeId < 1) { return $this->mobileError(1001, 'Missing parameters'); } $notice = OperationNotice::where('id', $noticeId)->where('status', 1)->find(); if (!$notice) { return $this->mobileError(2004, 'Notice does not exist'); } $exists = UserNoticeRead::where('user_id', $this->auth->id)->where('notice_id', $noticeId)->find(); $now = time(); if ($exists) { $exists->save([ 'confirmed' => 1, 'read_at' => $now, ]); } else { UserNoticeRead::create([ 'user_id' => $this->auth->id, 'notice_id' => $noticeId, 'confirmed' => 1, 'read_at' => $now, 'create_time' => $now, ]); } return $this->mobileSuccess([ 'notice_id' => $noticeId, 'confirmed' => true, 'confirm_time' => $now, ]); } private function intValue($value, int $default): int { $result = filter_var($value, FILTER_VALIDATE_INT); if ($result === false) { return $default; } return $result; } }