作者 刘锟

Merge remote-tracking branch 'origin/master' into akun

@@ -32,35 +32,34 @@ class SyncImage extends Command @@ -32,35 +32,34 @@ class SyncImage extends Command
32 protected $description = '同步图片与文件'; 32 protected $description = '同步图片与文件';
33 33
34 34
35 -// public function handle(){  
36 -// $str = $this->getProjectConfig(1808);  
37 -// $imageModel = new Image();  
38 -// $str_image = '/upload/p/1808/image_product/2024-09/ppp.png,/upload/p/1808/image_product/2024-09/86e4866b-7432-40c1-8c06-d335cd736e29.png,/upload/p/1808/image_product/2024-09/7fd109cc-56f4-457c-a9c4-c3fa8d8195b2.png,/upload/p/1808/image_product/2024-09/1.png,/upload/p/1808/image_product/2024-08/bxb12501-3-1.png,/upload/p/1808/image_product/2024-08/bxa10801-3-1.png,/upload/p/1808/image_product/2024-08/bxa007-3-1.png,/upload/p/1808/image_product/2024-08/auto-parts-rectifier-bxf1070-for-alternator-1-1.png,/upload/p/1808/image_product/2024-08/auto-parts-rectifier-bxd1102-for-alternator-2-1.png,/upload/p/1808/image_product/2024-08/11407-3-1.png,/upload/p/1808/image_product/2024-07/gfjty.jpg,/upload/p/1808/image_product/2024-07/bxn11508-g1-2.png,/upload/p/1808/image_product/2024-07/bxn11508-g1-1.png,/upload/p/1808/image_product/2024-07/bxb12501-2.png,/upload/p/1808/image_product/2024-07/bxb12501-1.png,/upload/p/1808/image_product/2024-07/bxb1209-2.png,/upload/p/1808/image_product/2024-07/bxb1209-1.png,/upload/p/1808/image_product/2024-07/bxa10801-2.png,/upload/p/1808/image_product/2024-07/bxa10801-1.png,/upload/p/1808/image_product/2024-07/bxa007-2.png,/upload/p/1808/image_product/2024-07/bxa007-1.png,/upload/p/1808/image_product/2024-07/auto-parts-rectifier-bxf6102-for-alternator-2.png,/upload/p/1808/image_product/2024-07/auto-parts-rectifier-bxf1070-for-alternator-3.png,/upload/p/1808/image_product/2024-07/auto-parts-rectifier-bxf1070-for-alternator-2.png,/upload/p/1808/image_product/2024-07/auto-parts-rectifier-bxd9410-for-alternator-1.png,/upload/p/1808/image_product/2024-07/auto-parts-rectifier-bxd1102-for-alternator-3.png,/upload/p/1808/image_product/2024-07/auto-parts-rectifier-bxd1102-for-alternator-1.png,/upload/p/1808/image_product/2024-07/auto-parts-rectifier-bxb12807-for-alternator-2.png,/upload/p/1808/image_product/2024-07/auto-parts-rectifier-bxb12807-for-alternator-1.png,/upload/p/1808/image_product/2024-07/11407-2.png,/upload/p/1808/image_product/2024-07/11407-1.png';  
39 -// $lists = explode(',',$str_image);  
40 -// $domain = 'http://globalso-v6-1309677403.cos.ap-hongkong.myqcloud.com';//cos域名  
41 -// foreach ($lists as $v){  
42 -// $url = $domain . $v.'?'.$str;  
43 -// echo date('Y-m-d H:i:s') . '水印路径:'. $url . PHP_EOL;  
44 -// $cdu_url = $this->coverOriginalImage($url,$v);  
45 -// echo date('Y-m-d H:i:s') . '返回的url:'. $cdu_url . PHP_EOL;  
46 -// }  
47 -// return true;  
48 -// }  
49 -  
50 public function handle(){ 35 public function handle(){
51 - $data = [];  
52 - $domain = 'https://ecdn6.globalso.com/'; 36 + $str = $this->getProjectConfig(4240);
53 $imageModel = new Image(); 37 $imageModel = new Image();
54 - $lists = $imageModel->list(['project_id'=>1808]);  
55 - foreach ($lists as $k => $v){  
56 - $url = $domain . $v['path'];  
57 - echo date('Y-m-d H:i:s') . '刷新路径:'. $url .',主键id:'. $v['id'] . PHP_EOL;  
58 - $data[] = $url; 38 + $lists = $imageModel->selectField(['project_id'=>4240],'path');
  39 + $domain = 'http://globalso-v6-1309677403.cos.ap-hongkong.myqcloud.com';//cos域名
  40 + foreach ($lists as $v){
  41 + $url = $domain . $v.'?'.$str;
  42 + echo date('Y-m-d H:i:s') . '水印路径:'. $url . PHP_EOL;
  43 + $cdu_url = $this->coverOriginalImage($url,$v);
  44 + echo date('Y-m-d H:i:s') . '返回的url:'. $cdu_url . PHP_EOL;
59 } 45 }
60 - $yunService = new UpyunService();  
61 - return $yunService->preheatPush($data); 46 + return true;
62 } 47 }
63 48
  49 +// public function handle(){
  50 +// $data = [];
  51 +// $domain = 'https://ecdn6.globalso.com/';
  52 +// $imageModel = new Image();
  53 +// $lists = $imageModel->list(['project_id'=>1808]);
  54 +// foreach ($lists as $k => $v){
  55 +// $url = $domain . $v['path'];
  56 +// echo date('Y-m-d H:i:s') . '刷新路径:'. $url .',主键id:'. $v['id'] . PHP_EOL;
  57 +// $data[] = $url;
  58 +// }
  59 +// $yunService = new UpyunService();
  60 +// return $yunService->preheatPush($data);
  61 +// }
  62 +
64 /** 63 /**
65 * @remark :添加水印后保存图片(覆盖/非覆盖的文件未存入数据库) 64 * @remark :添加水印后保存图片(覆盖/非覆盖的文件未存入数据库)
66 * @name :uploadImages 65 * @name :uploadImages
@@ -15,6 +15,7 @@ use App\Models\Blog\BlogCategory; @@ -15,6 +15,7 @@ use App\Models\Blog\BlogCategory;
15 use App\Models\News\NewsCategory; 15 use App\Models\News\NewsCategory;
16 use App\Models\Product\Category; 16 use App\Models\Product\Category;
17 use App\Models\Product\Keyword; 17 use App\Models\Product\Keyword;
  18 +use App\Models\RouteMap\RouteMap;
18 use App\Models\Ticket\TicketUploadData; 19 use App\Models\Ticket\TicketUploadData;
19 use App\Services\ProjectServer; 20 use App\Services\ProjectServer;
20 use Illuminate\Http\Request; 21 use Illuminate\Http\Request;
@@ -212,21 +213,33 @@ class TicketUploadDataController extends BaseController @@ -212,21 +213,33 @@ class TicketUploadDataController extends BaseController
212 'project_id.required' => 'project_id不能为空', 213 'project_id.required' => 'project_id不能为空',
213 'type.required' => 'type不能为空', 214 'type.required' => 'type不能为空',
214 ]); 215 ]);
215 - ProjectServer::useProject($this->param['project_id']);  
216 - if ($this->param['type'] == 1) { 216 + ProjectServer::useProject($this->map['project_id']);
  217 + if ($this->map['type'] == 1) {
217 //todo::搜索获取分类 218 //todo::搜索获取分类
218 $productCateModel = new Category(); 219 $productCateModel = new Category();
219 - if(!isset($this->param['search']) || empty($this->param['search'])){  
220 - $data = $productCateModel->lists(['status'=>1], 1, 20,'id',['id','title as name']);  
221 - }else{  
222 - $data = $productCateModel->lists(['status'=>1,'title' => ['like','%' . $this->param['search'] . '%']], 1, 20,'id',['id','title as name']); 220 + if(!empty($this->map['search']) && isset($this->map['search'])){
  221 + $this->map['name'] = ['like' , '%' . $this->map['search'] . '%'];
  222 + unset($this->param['search']);
  223 + }
  224 + unset($this->map['type']);
  225 + $cate_list = $productCateModel->list($this->map, 'sort',['id','title','pid']);
  226 + if ($cate_list === false) {
  227 + $this->response('无分类');
  228 + }
  229 + $data = [];
  230 + foreach ($cate_list as $v) {
  231 + $v = (array)$v;
  232 + if ($v['pid'] == 0) {
  233 + $v['sub'] = _get_child($v['id'], $cate_list);
  234 + $data[] = $v;
  235 + }
223 } 236 }
224 } else { 237 } else {
225 $keywordModel = new Keyword(); 238 $keywordModel = new Keyword();
226 - if(!isset($this->param['search']) || empty($this->param['search'])){ 239 + if(!isset($this->map['search']) || empty($this->map['search'])){
227 $data = $keywordModel->lists([], 1, 20,'id',['id','title as name']); 240 $data = $keywordModel->lists([], 1, 20,'id',['id','title as name']);
228 }else{ 241 }else{
229 - $data = $keywordModel->lists(['title' => ['like','%' . $this->param['search'] . '%']], 1, 20,'id',['id','title as name']); 242 + $data = $keywordModel->lists(['title' => ['like','%' . $this->map['search'] . '%']], 1, 20,'id',['id','title as name']);
230 } 243 }
231 } 244 }
232 DB::disconnect('custom_mysql'); 245 DB::disconnect('custom_mysql');
@@ -244,20 +257,29 @@ class TicketUploadDataController extends BaseController @@ -244,20 +257,29 @@ class TicketUploadDataController extends BaseController
244 { 257 {
245 $this->request->validate([ 258 $this->request->validate([
246 'project_id' => 'required', 259 'project_id' => 'required',
247 - 'search' => 'required'  
248 ], [ 260 ], [
249 'project_id.required' => 'project_id不能为空', 261 'project_id.required' => 'project_id不能为空',
250 - 'search.required' => '搜索参数不能为空',  
251 ]); 262 ]);
252 - ProjectServer::useProject($this->param['project_id']);  
253 - $blogCateModel = new BlogCategory();  
254 - if(!isset($this->param['search']) || empty($this->param['search'])){  
255 - $data = $blogCateModel->lists([], 1, 20,'id',['id','name']);  
256 - }else{  
257 - $data = $blogCateModel->lists(['name' => ['like' , '%' . $this->param['search'] . '%']], 1, 20,'id',['id','name']); 263 + ProjectServer::useProject($this->map['project_id']);
  264 + $newsCateModel = new NewsCategory();
  265 + if(!empty($this->map['search']) && isset($this->map['search'])){
  266 + $this->map['name'] = ['like' , '%' . $this->map['search'] . '%'];
  267 + unset($this->map['search']);
  268 + }
  269 + $cate_list = $newsCateModel->list($this->map, 'sort',['id','name as title','pid']);
  270 + if ($cate_list === false) {
  271 + $this->response('error', Code::USER_ERROR);
  272 + }
  273 + $list = [];
  274 + foreach ($cate_list as $v) {
  275 + $v = (array)$v;
  276 + if ($v['pid'] == 0) {
  277 + $v['sub'] = _get_child($v['id'], $cate_list);
  278 + $list[] = $v;
  279 + }
258 } 280 }
259 DB::disconnect('custom_mysql'); 281 DB::disconnect('custom_mysql');
260 - $this->response('success', Code::SUCCESS, $data); 282 + $this->response('success', Code::SUCCESS, $list);
261 } 283 }
262 284
263 /** 285 /**
@@ -271,19 +293,142 @@ class TicketUploadDataController extends BaseController @@ -271,19 +293,142 @@ class TicketUploadDataController extends BaseController
271 { 293 {
272 $this->request->validate([ 294 $this->request->validate([
273 'project_id' => 'required', 295 'project_id' => 'required',
274 - 'search' => 'required'  
275 ], [ 296 ], [
276 'project_id.required' => 'project_id不能为空', 297 'project_id.required' => 'project_id不能为空',
277 - 'search.required' => '搜索参数不能为空',  
278 ]); 298 ]);
279 - ProjectServer::useProject($this->param['project_id']); 299 + ProjectServer::useProject($this->map['project_id']);
280 $newsCateModel = new NewsCategory(); 300 $newsCateModel = new NewsCategory();
281 - if(!isset($this->param['search']) || empty($this->param['search'])){  
282 - $data = $newsCateModel->lists([], 1, 20,'id',['id','name']); 301 + if(!empty($this->map['search']) && isset($this->map['search'])){
  302 + $this->map['name'] = ['like' , '%' . $this->map['search'] . '%'];
  303 + unset($this->map['search']);
  304 + }
  305 + $cate_list = $newsCateModel->list($this->map, 'sort',['id','name as title','pid']);
  306 + if ($cate_list === false) {
  307 + $this->response('error', Code::USER_ERROR);
  308 + }
  309 + $list = [];
  310 + foreach ($cate_list as $v) {
  311 + $v = (array)$v;
  312 + if ($v['pid'] == 0) {
  313 + $v['sub'] = _get_child($v['id'], $cate_list);
  314 + $list[] = $v;
  315 + }
  316 + }
  317 + $this->response('success', Code::SUCCESS, $list);
  318 + }
  319 +
  320 + /**
  321 + * @remark :保存关键字
  322 + * @name :saveKeyword
  323 + * @author :lyh
  324 + * @method :post
  325 + * @time :2025/10/10 10:50
  326 + */
  327 + public function saveKeyword()
  328 + {
  329 + $this->request->validate([
  330 + 'project_id' => 'required',
  331 + 'title' => 'required'
  332 + ], [
  333 + 'project_id.required' => 'project_id不能为空',
  334 + 'title.required' => '分类标题不能为空',
  335 + ]);
  336 + ProjectServer::useProject($this->param['project_id']);
  337 + $keywordModel = new Keyword();
  338 + $id = $keywordModel->addReturnId(['project_id' => $this->param['project_id'], 'title' => $this->param['title']]);
  339 + $route = RouteMap::setRoute($this->param['title'],RouteMap::SOURCE_PRODUCT_KEYWORD,$id,$this->param['project_id']);
  340 + $keywordModel->edit(['route'=>$route],['id'=>$id]);
  341 + DB::disconnect('custom_mysql');
  342 + $this->response('success', Code::SUCCESS, ['id'=>$id,'title'=>$this->param['title']]);
  343 + }
  344 +
  345 + /**
  346 + * @remark :新增分类
  347 + * @name :saveCategory
  348 + * @author :lyh
  349 + * @method :post
  350 + * @time :2025/10/10 10:13
  351 + */
  352 + public function saveCategory()
  353 + {
  354 + $this->request->validate([
  355 + 'project_id' => 'required',
  356 + 'type' => 'required',
  357 + 'title' => 'required'
  358 + ], [
  359 + 'project_id.required' => 'project_id不能为空',
  360 + 'type.required' => '类型不能为空',
  361 + 'title.required' => '分类标题不能为空',
  362 + ]);
  363 + ProjectServer::useProject($this->param['project_id']);
  364 + if($this->param['type'] == 1){//增加产品分类
  365 + $data = $this->addProductCategory($this->param['title'],$this->param['project_id']);
  366 + }elseif ($this->param['type'] == 2){//增加blog分类
  367 + $data = $this->addBlogCategory($this->param['title'],$this->param['project_id']);
283 }else{ 368 }else{
284 - $data = $newsCateModel->lists(['name' => ['like' , '%' . $this->param['search'] . '%']], 1, 20,'id',['id','name']); 369 + $data = $this->addNewsCategory($this->param['title'],$this->param['project_id']);
285 } 370 }
286 DB::disconnect('custom_mysql'); 371 DB::disconnect('custom_mysql');
287 - $this->response('success', Code::SUCCESS, $data); 372 + $this->response('success',Code::SUCCESS, $data);
  373 + }
  374 +
  375 + /**
  376 + * @remark :新增分类
  377 + * @name :addProductCategory
  378 + * @author :lyh
  379 + * @method :post
  380 + * @time :2025/10/10 10:43
  381 + */
  382 + public function addProductCategory($title,$project_id){
  383 + $productCateModel = new Category();
  384 + $info = $productCateModel->read(['title'=>$title],['id','title']);
  385 + if($info !== false){
  386 + return $info;
  387 + }else{
  388 + $id = $productCateModel->addReturnId(['title'=>$title,'project_id'=>$project_id]);
  389 + $route = RouteMap::setRoute($title,RouteMap::SOURCE_PRODUCT_CATE,$id,$project_id);
  390 + $productCateModel->edit(['route'=>$route],['id'=>$id]);
  391 + return ['id'=>$id,'title'=>$title];
  392 + }
  393 + }
  394 +
  395 + /**
  396 + * @remark :新增blog分类
  397 + * @name :addBlogCategory
  398 + * @author :lyh
  399 + * @method :post
  400 + * @time :2025/10/10 10:44
  401 + */
  402 + public function addBlogCategory($title,$project_id){
  403 + $blogCateModel = new BlogCategory();
  404 + $info = $blogCateModel->read(['name'=>$title],['id','name as title']);
  405 + if($info !== false){
  406 + return $info;
  407 + }else{
  408 + $id = $blogCateModel->addReturnId(['name'=>$title,'project_id'=>$project_id]);
  409 + $route = RouteMap::setRoute($title,RouteMap::SOURCE_BLOG_CATE,$id,$project_id);
  410 + $blogCateModel->edit(['alias'=>$route],['id'=>$id]);
  411 + return ['id'=>$id,'title'=>$title];
  412 + }
  413 + }
  414 +
  415 + /**
  416 + * @remark :新增news分类
  417 + * @name :addNewsCategory
  418 + * @author :lyh
  419 + * @method :post
  420 + * @time :2025/10/10 10:46
  421 + */
  422 + public function addNewsCategory($title,$project_id){
  423 + $newsCateModel = new NewsCategory();//增加新闻分类
  424 + $info = $newsCateModel->read(['name'=>$title],['id','name as title']);
  425 + if($info !== false){
  426 + return $info;
  427 + }else{
  428 + $id = $newsCateModel->addReturnId(['name'=>$title,'project_id'=>$project_id]);
  429 + $route = RouteMap::setRoute($title,RouteMap::SOURCE_NEWS_CATE,$id,$project_id);
  430 + $newsCateModel->edit(['alias'=>$route],['id'=>$id]);
  431 + return ['id'=>$id,'title'=>$title];
  432 + }
288 } 433 }
289 } 434 }
@@ -102,5 +102,7 @@ Route::prefix('ticket_upload')->group(function () { @@ -102,5 +102,7 @@ Route::prefix('ticket_upload')->group(function () {
102 Route::any('/getProductCate', [\App\Http\Controllers\Api\WorkOrder\TicketUploadDataController::class, 'getProductCate'])->name('ticket_upload.getProductCate'); 102 Route::any('/getProductCate', [\App\Http\Controllers\Api\WorkOrder\TicketUploadDataController::class, 'getProductCate'])->name('ticket_upload.getProductCate');
103 Route::any('/getBlogCate', [\App\Http\Controllers\Api\WorkOrder\TicketUploadDataController::class, 'getBlogCate'])->name('ticket_upload.getBlogCate'); 103 Route::any('/getBlogCate', [\App\Http\Controllers\Api\WorkOrder\TicketUploadDataController::class, 'getBlogCate'])->name('ticket_upload.getBlogCate');
104 Route::any('/getNewsCate', [\App\Http\Controllers\Api\WorkOrder\TicketUploadDataController::class, 'getNewsCate'])->name('ticket_upload.getNewsCate'); 104 Route::any('/getNewsCate', [\App\Http\Controllers\Api\WorkOrder\TicketUploadDataController::class, 'getNewsCate'])->name('ticket_upload.getNewsCate');
  105 + Route::any('/saveCategory', [\App\Http\Controllers\Api\WorkOrder\TicketUploadDataController::class, 'saveCategory'])->name('ticket_upload.saveCategory');
  106 + Route::any('/saveKeyword', [\App\Http\Controllers\Api\WorkOrder\TicketUploadDataController::class, 'saveKeyword'])->name('ticket_upload.saveKeyword');
105 }); 107 });
106 108