作者 赵彬吉

update

<?php
namespace App\Http\Controllers\Api;
use App\Exceptions\InquiryFilterException;
use App\Models\SyncSubmitTask\SyncSubmitTask;
use App\Services\CosService;
use Illuminate\Http\Request;
/**
* Class InquiryController
* @package App\Http\Controllers\Api
* @author zbj
* @date 2024/2/2
*/
class InquiryController extends BaseController
{
/**
* 提交询盘
* C端部署自己服务器的
* @param Request $request
* @return false|string
* @author zbj
* @date 2024/2/2
*/
public function submit(Request $request){
$data = $request->post();
@file_put_contents(storage_path('logs/form_submit_' . date('Y-m-d') . '.log'), var_export(date('Y-m-d H:i:s') . "-询盘表单提交数据:" . json_encode($data), true) . PHP_EOL, FILE_APPEND);
try {
$files = $request->allFiles()['data'];
foreach ($files as $key => $file) {
$cos = new CosService();
$fileinfo = $cos->checkInquiryFile($file);
$fileName = uniqid().rand(10000,99999).'.'.$file->getClientOriginalExtension();
$path = $cos->uploadFile($file, '/inquiry/'. date('Ymd'), $fileName);
$data['data'][$key] = [
'path' => $path,
'original_name' => $fileinfo['name'],
];
}
}catch (InquiryFilterException $e){
return $this->error($e->getMessage());
}catch (\Exception $e){
return $this->error('File upload fail');
}
//异步处理
if(!SyncSubmitTask::addTask(SyncSubmitTask::TYPE_INQUIRY, $data)){
return $this->error();
}
return $this->success();
}
}
... ...
... ... @@ -28,4 +28,42 @@ class SyncSubmitTask extends Model
protected $casts = [
'data' => 'array',
];
/**
* @param $type
* @param $data
* @return bool
* @author zbj
* @date 2023/11/28
*/
public static function addTask($type, $data): bool
{
if (empty($data)) {
return false;
}
try {
$data = [
'data' => $data['data'],
'domain' => !empty($data['domain']) ? $data['domain'] : request()->getHost(),
'ip' => !empty($data['ip']) ? $data['ip'] : request()->getClientIp(),
'referer' => !empty($data['referer']) ? $data['referer'] : request()->header('Referer'),
'user_agent' => !empty($data['user_agent']) ? $data['user_agent'] : request()->header('user_agent'),
];
if(empty($data['referer']) || empty($data['user_agent']) || empty($data['data'])){
return false;
}
$model = new self();
$model->type = $type;
$model->data = $data;
!empty($data['submit_time']) && $model->created_at = $data['submit_time'];
$model->save();
} catch (\Exception $e) {
Log::error('SyncSubmitTask addTask error', ['msg' => $e->getMessage(), 'data' => $data]);
return false;
}
return true;
}
}
... ...
... ... @@ -2,6 +2,7 @@
namespace App\Services;
use App\Exceptions\InquiryFilterException;
use App\Utils\LogUtils;
use Qcloud\Cos\Client;
/**
... ... @@ -116,4 +117,28 @@ class CosService
}
}
/**
* @param $file
* @return array
* @throws \Exception
* @author zbj
* @date 2023/12/12
*/
public function checkInquiryFile($file){
$size = $file->getSize();
if($size/1024/1024 > 20){
throw new InquiryFilterException('Your file size exceeds the limit. Please upload a file no larger than 20MB.');
}
$extension = $file->getClientOriginalExtension();
// JPEG (JPG) PDF DWG STEP(STP)IGS word xlsx
if(!in_array(strtolower($extension), ['png','jpg','jpeg', 'pdf', 'dwg', 'step', 'stp', 'igs','doc','docx','xls','xlsx'])){
throw new InquiryFilterException('Please upload file in png, jpg, jpeg, pdf, dwg, step, stp, igs, doc, docx, xls or xlsx format.');
}
return [
'size' => $size,
'extension' => $extension,
'name' => $file->getClientOriginalName(),
'mime' => $file->getMimeType(),
];
}
}
... ...
... ... @@ -22,4 +22,5 @@ Route::any('traffic_visit', [\App\Http\Controllers\Api\NoticeController::class,
Route::get('optimize_project_list', [\App\Http\Controllers\Api\PrivateController::class, 'optimizeProjectList'])->name('api.optimize_project_list');
Route::get('get_project_route', [\App\Http\Controllers\Api\PrivateController::class, 'getProjectRoute'])->name('api.get_project_route');
Route::any('get_product_images', [\App\Http\Controllers\Api\ProductController::class, 'getImages'])->name('api.get_product_images');
Route::post('inquiry_submit', [\App\Http\Controllers\Api\InquiryController::class, 'submit'])->name('api.inquiry_submit');
... ...