service = new UsedCarService(); } /** * 列表页数据格式化 * * @param array $data * @return array */ protected function indexFormat($data) { if (isset($data['created_at'])) $data['created_at'] = date('Y-m-d H:i:s', $data['created_at']); if (isset($data['updated_at'])) $data['updated_at'] = date('Y-m-d H:i:s', $data['updated_at']); if (!empty($data['images'])){ $images = explode(',', $data['images']); $ossService = new OssService(); $images_pull = []; foreach ($images as $image){ $images_pull[] = $ossService->generatePrivateUrl($image); } $data['images_pull'] = $images_pull; } return $data; } /** * 列表页数据格式化 * * @param array $data * @return array */ protected function showFormat($data) { if (isset($data['created_at'])) $data['created_at'] = date('Y-m-d H:i:s', $data['created_at']); if (isset($data['updated_at'])) $data['updated_at'] = date('Y-m-d H:i:s', $data['updated_at']); if (!empty($data['images'])){ $images = explode(',', $data['images']); $ossService = new OssService(); $images_pull = []; foreach ($images as $image){ $images_pull[] = $ossService->generatePrivateUrl($image); } $data['images_pull'] = $images_pull; }else{ $data['images_pull'] = []; } if (!empty($data['attachment'])){ //$attachments = explode(',', $data['attachment']); $attachments = json_decode($data['attachment'], true); $ossService = new OssService(); $attachment_pull = []; foreach ($attachments as $attachment){ $attachment_pull[] = [ 'name'=>$attachment['name'], 'src'=>$ossService->generatePrivateUrl($attachment['src']) ]; } $data['attachment_pull'] = $attachment_pull; }else{ $data['attachment_pull'] = []; } return $data; } public function crawlKeyword(Request $request){ try { // $keyword = $request->get('keyword'); $data = $this->service->crawlKeyword($request); return $this->success($data); } catch (\Throwable $e) { return $this->error($e->getMessage()); } } /** * 生成pdf * @param Request $request * @return \support\Response */ public function producePdf(Request $request){ try { $price = $request->get('price'); if(empty($price)){ throw new BusinessException("请输入生成pdf中的价格"); } $raw = $this->service->serviceShow($request); $data = $this->transformData($raw, method_exists($this, 'showFormat') ? [$this, 'showFormat'] : null); $images = []; foreach ($data['images_pull'] as $image){ $images[] = $this->service->downloadImage($image); } $data['images'] = $images; $attachments = []; foreach ($data['attachment_pull'] as $attachment){ // 方法1:使用 pathinfo $path = parse_url($attachment['src'], PHP_URL_PATH); // 获取路径部分 $extension = pathinfo($path, PATHINFO_EXTENSION); // 获取扩展名 if (strtolower($extension) === 'pdf') { //如果是pdf则下载到本地 $attachments[] = $this->service->downloadAttachment($attachment['src']); } } $data['attachment'] = $attachments; $data['price'] = $price; $pdf = (new MpdfDriver())->exportUsedCarPdf($data); UsedCar::where('id', $data['id'])->update(['pdf_src' => $pdf]); array_map('unlink', glob(runtime_path('pdf/images/*.jpg'))); array_map('unlink', glob(runtime_path('pdf/attachment/*.pdf'))); UsedCarPdfLog::create([ 'user_id' => $request->user['id'], 'used_car_id' => $request->get('id'), 'price_snapshot' => $price, 'pdf_path' => $pdf, ]); return $this->success($pdf); } catch (\Throwable $e) { return $this->error($e->getMessage()); } } public function downloadPdf(Request $request){ $raw = $this->service->serviceShow($request); $filePath = runtime_path('pdf') .'/'. $raw['pdf_src']; if (!file_exists($filePath)) { return response($filePath.'文件不存在', 404); } return response()->download( $filePath, $raw['product_name'].'-'.$raw['id'].'.pdf' // 下载时显示的文件名 ); } public function getPdf(Request $request) { try { $raw = $this->service->serviceShow($request); $filePath = runtime_path('pdf') . '/' . $raw['pdf_src']; if (empty($raw['pdf_src']) || !file_exists($filePath)) { throw new BusinessException('文件不存在'); } // 确保 public/pdf 存在 $publicDir = public_path('pdf'); if (!is_dir($publicDir)) { mkdir($publicDir, 0755, true); } // 拷贝到 public 目录 $publicFile = $publicDir . '/' . $raw['pdf_src']; if (!file_exists($publicFile)) { copy($filePath, $publicFile); } // 返回访问地址 $baseUrl = 'https://' . request()->header('host'); $url = $baseUrl . '/pdf/' . $raw['pdf_src']; return $this->success([ 'pdf_url' => $url, 'file_name' => $raw['product_name'] . '-' . $raw['id'] . '.pdf' ]); } catch (\Throwable $e) { return $this->error($e->getMessage()); } } }