作者 lyh

gx

@@ -2,10 +2,14 @@ @@ -2,10 +2,14 @@
2 2
3 namespace App\Http\Controllers\Api; 3 namespace App\Http\Controllers\Api;
4 4
  5 +use App\Enums\Common\Code;
5 use App\Exceptions\InquiryFilterException; 6 use App\Exceptions\InquiryFilterException;
6 use App\Models\SyncSubmitTask\SyncSubmitTask; 7 use App\Models\SyncSubmitTask\SyncSubmitTask;
  8 +use App\Models\Visit\Visit;
7 use App\Services\CosService; 9 use App\Services\CosService;
  10 +use App\Services\ProjectServer;
8 use Illuminate\Http\Request; 11 use Illuminate\Http\Request;
  12 +use Illuminate\Support\Facades\DB;
9 13
10 /** 14 /**
11 * Class InquiryController 15 * Class InquiryController
@@ -53,7 +57,37 @@ class InquiryController extends BaseController @@ -53,7 +57,37 @@ class InquiryController extends BaseController
53 } 57 }
54 58
55 /** 59 /**
56 - * param:domain,ip,date  
57 - *  
58 - */ 60 + * @remark :修改
  61 + * @name :editInquiryStatus
  62 + * @author :lyh
  63 + * @method :post
  64 + * @time :2024/3/22 15:41
  65 + */
  66 + public function editInquiryStatus(){
  67 + $this->request->validate([
  68 + 'project_id'=>'required',
  69 + 'ip'=>'required',
  70 + 'updated_date'=>'required',
  71 + ],[
  72 + 'project_id.required' => 'project_id不能为空',
  73 + 'ip.required' => 'ip不能为空',
  74 + 'updated_date.required' => '日期不能为空',
  75 + ]);
  76 + ProjectServer::useProject($this->param['project_id']);
  77 + $customerVisitModel = new Visit();
  78 + $info = $customerVisitModel->read([
  79 + 'ip'=>$this->param['ip'],
  80 + 'updated_date'=>$this->param['updated_date']
  81 + ]);
  82 + if($info === false){
  83 + $this->response('当前记录不存在',Code::SYSTEM_ERROR);
  84 + }
  85 + try {
  86 + $customerVisitModel->edit(['is_inquiry'=>1],['id'=>$info['id']]);
  87 + }catch (\Exception $e){
  88 + $this->response('操作失败',Code::SYSTEM_ERROR);
  89 + }
  90 + DB::disconnect('custom_mysql');
  91 + $this->response('success');
  92 + }
59 } 93 }
@@ -160,4 +160,95 @@ class ProductController extends BaseController @@ -160,4 +160,95 @@ class ProductController extends BaseController
160 } 160 }
161 return $category_id; 161 return $category_id;
162 } 162 }
  163 +
  164 + /**
  165 + * @param Request $request
  166 + * @author zbj
  167 + * @date 2024/1/22
  168 + */
  169 + protected function searchProduct(Request $request)
  170 + {
  171 + $project_id = $request->input('project_id');
  172 + $limit = $request->input('limit') ?: 5;
  173 + $text = $request->input('text');
  174 + $key = $request->input('key') ?: 'title';
  175 + $key_limit = $request->input('key_limit') ?: 15;
  176 +
  177 + $project = ProjectServer::useProject($project_id);
  178 + if (!$project) {
  179 + $this->response('项目不存在', Code::SYSTEM_ERROR);
  180 + }
  181 +
  182 + //匹配产品
  183 + $products = Product::with('category')
  184 + ->where("title", 'like', $text . '%')
  185 + ->where("status", 1)
  186 + ->orderBy("id", "DESC")
  187 + ->limit($limit)
  188 + ->select('title', 'thumb', 'id', 'route')
  189 + ->get()
  190 + ->toArray();
  191 +
  192 + //对应分类
  193 + $categories = [];
  194 + foreach ($products as &$product) {
  195 + foreach ($product['category'] as $category) {
  196 + $categories[$category['route']] = [
  197 + 'title' => $category['title'],
  198 + 'route' => '/' . $category['route'] . '/',
  199 + ];
  200 + }
  201 + unset($product['id']);
  202 + unset($product['category']);
  203 +
  204 + if(!empty($product['thumb']) && !empty($product['thumb']['url'])){
  205 + $product['thumb'] = getImageUrl($product['thumb']['url'],$project['storage_type'] ?? 0,$project['project_location']);
  206 + }
  207 +
  208 + $product['route'] = '/' . $product['route'] . '/';
  209 + }
  210 +
  211 + $data = [
  212 + 'products' => $products,
  213 + 'categories' => array_values($categories),
  214 + 'suggestions' => $this->searchSuggestion($text, $key, $key_limit)
  215 + ];
  216 +
  217 + $this->response('success', Code::SUCCESS, $data);
  218 +
  219 + }
  220 +
  221 + protected function searchSuggestion($text, $key, $key_limit): array
  222 + {
  223 + $model = new Product();
  224 + $columns = $model->getConnection()->getSchemaBuilder()->getColumnListing($model->getTable());
  225 +
  226 + //产品字段
  227 + if (in_array($key, $columns)) {
  228 + //匹配产品
  229 + $suggestions = Product::where("status", 1)
  230 + ->where($key, 'like', $text . '%')
  231 + ->orderBy("id", "DESC")
  232 + ->limit($key_limit)
  233 + ->select($key .' as title', 'route')
  234 + ->get()
  235 + ->toArray();
  236 + } else {
  237 + //扩展字段
  238 + $suggestions = Product::leftJoin('gl_product_extend_info as pei', 'gl_product.id', '=', 'pei.product_id')
  239 + ->where('pei.values', 'like', $text . '%')
  240 + ->where("gl_product.status", 1)
  241 + ->orderBy("gl_product.id", "DESC")
  242 + ->limit($key_limit)
  243 + ->select('pei.values','gl_product.route')
  244 + ->get()
  245 + ->toArray();
  246 + }
  247 +
  248 + foreach ($suggestions as &$suggestion){
  249 + $suggestion['route'] = '/' . $suggestion['route'] . '/';
  250 + }
  251 +
  252 + return $suggestions;
  253 + }
163 } 254 }
@@ -143,7 +143,7 @@ class ProductController extends BaseController @@ -143,7 +143,7 @@ class ProductController extends BaseController
143 $query = $query->where('status',$this->map['status']); 143 $query = $query->where('status',$this->map['status']);
144 } 144 }
145 if(!empty($this->param['start_at']) && !empty($this->param['end_at'])){ 145 if(!empty($this->param['start_at']) && !empty($this->param['end_at'])){
146 - $query->whereBetween('created_at', [$this->param['start_at'].' 00:00:00',$this->param['end_at'].' 59:59:59']); 146 + $query->where('created_at', '>=' ,$this->param['start_at'].' 00:00:00')->where('created_at', '<=' ,$this->param['end_at'].' 59:59:59');
147 } 147 }
148 return $query; 148 return $query;
149 } 149 }
@@ -4,6 +4,7 @@ namespace App\Models\Product; @@ -4,6 +4,7 @@ namespace App\Models\Product;
4 4
5 use App\Helper\Arr; 5 use App\Helper\Arr;
6 use App\Models\Base; 6 use App\Models\Base;
  7 +use Illuminate\Database\Eloquent\Relations\BelongsToMany;
7 use Illuminate\Database\Eloquent\SoftDeletes; 8 use Illuminate\Database\Eloquent\SoftDeletes;
8 9
9 /** 10 /**
@@ -209,4 +210,15 @@ class Product extends Base @@ -209,4 +210,15 @@ class Product extends Base
209 } 210 }
210 return $value; 211 return $value;
211 } 212 }
  213 +
  214 + /**
  215 + * 多对多关联
  216 + * @return BelongsToMany
  217 + * @author zbj
  218 + * @date 2024/1/22
  219 + */
  220 + public function category(): BelongsToMany
  221 + {
  222 + return $this->belongsToMany(Category::class, 'gl_product_category_related', 'product_id', 'cate_id');
  223 + }
212 } 224 }
@@ -23,7 +23,9 @@ Route::get('optimize_project_list', [\App\Http\Controllers\Api\PrivateController @@ -23,7 +23,9 @@ Route::get('optimize_project_list', [\App\Http\Controllers\Api\PrivateController
23 Route::get('get_project_route', [\App\Http\Controllers\Api\PrivateController::class, 'getProjectRoute'])->name('api.get_project_route'); 23 Route::get('get_project_route', [\App\Http\Controllers\Api\PrivateController::class, 'getProjectRoute'])->name('api.get_project_route');
24 Route::any('get_product_images', [\App\Http\Controllers\Api\ProductController::class, 'getImages'])->name('api.get_product_images'); 24 Route::any('get_product_images', [\App\Http\Controllers\Api\ProductController::class, 'getImages'])->name('api.get_product_images');
25 Route::any('saveProduct', [\App\Http\Controllers\Api\ProductController::class, 'saveProduct'])->name('api.saveProduct'); 25 Route::any('saveProduct', [\App\Http\Controllers\Api\ProductController::class, 'saveProduct'])->name('api.saveProduct');
  26 +Route::any('searchProduct', [\App\Http\Controllers\Api\ProductController::class, 'searchProduct'])->name('api.searchProduct');
26 Route::post('inquiry_submit', [\App\Http\Controllers\Api\InquiryController::class, 'submit'])->name('api.inquiry_submit'); 27 Route::post('inquiry_submit', [\App\Http\Controllers\Api\InquiryController::class, 'submit'])->name('api.inquiry_submit');
  28 +Route::post('editInquiryStatus', [\App\Http\Controllers\Api\InquiryController::class, 'editInquiryStatus'])->name('api.inquiry_editInquiryStatus');
27 Route::any('getOptimizationReport', [\App\Http\Controllers\Api\OptimizationReportController::class, 'getOptimizationReport'])->name('api.getOptimizationReport'); 29 Route::any('getOptimizationReport', [\App\Http\Controllers\Api\OptimizationReportController::class, 'getOptimizationReport'])->name('api.getOptimizationReport');
28 // 视频任务回调信息 30 // 视频任务回调信息
29 Route::post('video_task_callback', [\App\Http\Controllers\Api\NoticeController::class, 'videoTaskCallback'])->name('api.video_task_callback'); 31 Route::post('video_task_callback', [\App\Http\Controllers\Api\NoticeController::class, 'videoTaskCallback'])->name('api.video_task_callback');