Merge remote-tracking branch 'origin/master' into akun
正在显示
21 个修改的文件
包含
368 行增加
和
165 行删除
| @@ -58,6 +58,7 @@ class VideoTask extends Command | @@ -58,6 +58,7 @@ class VideoTask extends Command | ||
| 58 | */ | 58 | */ |
| 59 | public function handle() | 59 | public function handle() |
| 60 | { | 60 | { |
| 61 | + echo '开始:'.PHP_EOL; | ||
| 61 | Log::info('开始视频推广任务'); | 62 | Log::info('开始视频推广任务'); |
| 62 | $this->createSubTask(); | 63 | $this->createSubTask(); |
| 63 | $this->sendSubTask(); | 64 | $this->sendSubTask(); |
| @@ -81,10 +82,17 @@ class VideoTask extends Command | @@ -81,10 +82,17 @@ class VideoTask extends Command | ||
| 81 | if (empty($task_project)){ | 82 | if (empty($task_project)){ |
| 82 | break; | 83 | break; |
| 83 | } | 84 | } |
| 85 | + $domainModel = new DomainInfo(); | ||
| 86 | + $domainInfo = $domainModel->read(['project_id'=>$task_project->project_id]); | ||
| 87 | + if($domainInfo === false){ | ||
| 88 | + $task_project->status = KeywordVideoTask::STATUS_CLOSE; | ||
| 89 | + $task_project->save(); | ||
| 90 | + continue; | ||
| 91 | + } | ||
| 84 | ProjectServer::useProject($task_project->project_id); | 92 | ProjectServer::useProject($task_project->project_id); |
| 85 | - $keyword = $this->getProjectKeyword(); | 93 | + $keyword = $this->getProjectKeyword($task_project->number); |
| 86 | // 已经没有需要生成视频的关键词 | 94 | // 已经没有需要生成视频的关键词 |
| 87 | - if (FALSE == $keyword->isEmpty()) { | 95 | + if (!$keyword) { |
| 88 | $task_project->status = KeywordVideoTask::STATUS_CLOSE; | 96 | $task_project->status = KeywordVideoTask::STATUS_CLOSE; |
| 89 | $task_project->save(); | 97 | $task_project->save(); |
| 90 | continue; | 98 | continue; |
| @@ -94,7 +102,7 @@ class VideoTask extends Command | @@ -94,7 +102,7 @@ class VideoTask extends Command | ||
| 94 | if ($log){ | 102 | if ($log){ |
| 95 | continue; | 103 | continue; |
| 96 | } | 104 | } |
| 97 | - $keywordInfo = $this->getKeywordImage($val->id,$task_project->project_id); | 105 | + $keywordInfo = $this->getKeywordImage($val->id,$task_project->project_id,$domainInfo['domain']); |
| 98 | $array = [ | 106 | $array = [ |
| 99 | 'project_id' => $task_project->project_id, | 107 | 'project_id' => $task_project->project_id, |
| 100 | 'keyword_id' => $val->id, | 108 | 'keyword_id' => $val->id, |
| @@ -123,7 +131,7 @@ class VideoTask extends Command | @@ -123,7 +131,7 @@ class VideoTask extends Command | ||
| 123 | if ($subTask->isEmpty()) | 131 | if ($subTask->isEmpty()) |
| 124 | return true; | 132 | return true; |
| 125 | foreach ($subTask as $val) { | 133 | foreach ($subTask as $val) { |
| 126 | - $valData = json_decode($val->data); | 134 | + $valData = (array)json_decode($val->data); |
| 127 | $task_id = 'v6-' . uniqid(); | 135 | $task_id = 'v6-' . uniqid(); |
| 128 | $data = [ | 136 | $data = [ |
| 129 | 'project_data' => [ | 137 | 'project_data' => [ |
| @@ -139,7 +147,7 @@ class VideoTask extends Command | @@ -139,7 +147,7 @@ class VideoTask extends Command | ||
| 139 | $result = Http::post('http://216.250.255.116:7866/create_task', $data); | 147 | $result = Http::post('http://216.250.255.116:7866/create_task', $data); |
| 140 | $val->task_id = $task_id; | 148 | $val->task_id = $task_id; |
| 141 | $val->status = KeywordVideoTaskLog::STATUS_RUNNING; | 149 | $val->status = KeywordVideoTaskLog::STATUS_RUNNING; |
| 142 | - $val->request_result = $result; | 150 | + $val->result_info = $result; |
| 143 | $val->save(); | 151 | $val->save(); |
| 144 | } | 152 | } |
| 145 | return true; | 153 | return true; |
| @@ -147,11 +155,14 @@ class VideoTask extends Command | @@ -147,11 +155,14 @@ class VideoTask extends Command | ||
| 147 | 155 | ||
| 148 | /** | 156 | /** |
| 149 | * 获取未生成页面的关键词 | 157 | * 获取未生成页面的关键词 |
| 158 | + * @param $number | ||
| 150 | * @return mixed | 159 | * @return mixed |
| 151 | */ | 160 | */ |
| 152 | - public function getProjectKeyword() | 161 | + public function getProjectKeyword($number) |
| 153 | { | 162 | { |
| 154 | - $keyword = Keyword::where('video', null)->whereNotNull('keyword_content')->inRandomOrder()->take(100)->get(); | 163 | + $keyword_arr_id = Keyword::where('video', null)->whereNotNull('keyword_content')->pluck('id')->toArray(); |
| 164 | + $keyword_id = array_rand($keyword_arr_id, $number); | ||
| 165 | + $keyword = Keyword::whereIn("id", $keyword_id)->get(); | ||
| 155 | return $keyword; | 166 | return $keyword; |
| 156 | } | 167 | } |
| 157 | 168 | ||
| @@ -173,19 +184,14 @@ class VideoTask extends Command | @@ -173,19 +184,14 @@ class VideoTask extends Command | ||
| 173 | * @method :post | 184 | * @method :post |
| 174 | * @time :2024/2/23 16:28 | 185 | * @time :2024/2/23 16:28 |
| 175 | */ | 186 | */ |
| 176 | - public function getKeywordImage($keyword_id,$project_id){ | 187 | + public function getKeywordImage($keyword_id,$project_id,$domain){ |
| 177 | $keywordModel = new Keyword(); | 188 | $keywordModel = new Keyword(); |
| 178 | $keywordInfo = $keywordModel->read(['id'=>$keyword_id]); | 189 | $keywordInfo = $keywordModel->read(['id'=>$keyword_id]); |
| 179 | //TODO::所有产品 | 190 | //TODO::所有产品 |
| 180 | $thumb = $this->getRecommendAndHotProducts($keywordInfo['route'],$project_id); | 191 | $thumb = $this->getRecommendAndHotProducts($keywordInfo['route'],$project_id); |
| 181 | - $domainModel = new DomainInfo(); | ||
| 182 | - $domainInfo = $domainModel->read(['project_id'=>$project_id]); | ||
| 183 | - if(!empty($domainInfo)){ | ||
| 184 | - $keywordInfo['route'] = $domainInfo['domain'].'/'.$keywordInfo['route']; | ||
| 185 | - } | ||
| 186 | $keyword_arr = Keyword::where("project_id",$project_id)->where("status",1)->inRandomOrder()->take(10)->pluck('title')->toArray();; | 192 | $keyword_arr = Keyword::where("project_id",$project_id)->where("status",1)->inRandomOrder()->take(10)->pluck('title')->toArray();; |
| 187 | $data = [ | 193 | $data = [ |
| 188 | - 'url'=>$keywordInfo['route'], | 194 | + 'url'=>$domain.'/'.$keywordInfo['route'], |
| 189 | 'title'=>$keywordInfo['title'], | 195 | 'title'=>$keywordInfo['title'], |
| 190 | 'keyword_title'=>$keywordInfo['keyword_title'], | 196 | 'keyword_title'=>$keywordInfo['keyword_title'], |
| 191 | 'keyword_content'=>$keywordInfo['keyword_content'], | 197 | 'keyword_content'=>$keywordInfo['keyword_content'], |
| @@ -209,13 +215,17 @@ class VideoTask extends Command | @@ -209,13 +215,17 @@ class VideoTask extends Command | ||
| 209 | $productIds[] = $item->id; | 215 | $productIds[] = $item->id; |
| 210 | } | 216 | } |
| 211 | if (count($productIds)<7){ | 217 | if (count($productIds)<7){ |
| 212 | - $randomData = Product::where("project_id", $project_id)->where("status",1)->whereNotIn('id', $productIds)->inRandomOrder()->take(13-count($productIds))->get(); | 218 | + $product_all_id = Product::where("project_id", $project_id)->whereNotIn('id', $productIds)->where("status",1)->pluck('id')->toArray(); |
| 219 | + $product_id = array_rand($product_all_id, 13-count($productIds)); | ||
| 220 | + $randomData = Product::where("project_id", $project_id)->whereIn("id", $product_id)->get(); | ||
| 213 | $products = $productsQuery->merge($randomData); | 221 | $products = $productsQuery->merge($randomData); |
| 214 | }else{ | 222 | }else{ |
| 215 | $products = $productsQuery; | 223 | $products = $productsQuery; |
| 216 | } | 224 | } |
| 217 | }else{ | 225 | }else{ |
| 218 | - $products = Product::where("project_id", $project_id)->where("status",1)->inRandomOrder()->take(13)->get(); | 226 | + $product_all_id = Product::where("project_id", $project_id)->where("status",1)->pluck('id')->toArray(); |
| 227 | + $product_id = array_rand($product_all_id, 13); | ||
| 228 | + $products = Product::where("project_id", $project_id)->whereIn("id", $product_id)->get(); | ||
| 219 | } | 229 | } |
| 220 | } | 230 | } |
| 221 | $data = []; | 231 | $data = []; |
| @@ -18,6 +18,8 @@ use App\Models\Manage\EntryPosition; | @@ -18,6 +18,8 @@ use App\Models\Manage\EntryPosition; | ||
| 18 | use App\Models\Manage\ManageHr; | 18 | use App\Models\Manage\ManageHr; |
| 19 | use App\Models\Product\Keyword; | 19 | use App\Models\Product\Keyword; |
| 20 | use App\Models\Product\Product; | 20 | use App\Models\Product\Product; |
| 21 | +use App\Models\Project\DeployOptimize; | ||
| 22 | +use App\Models\Project\MinorLanguages; | ||
| 21 | use App\Models\Project\Project; | 23 | use App\Models\Project\Project; |
| 22 | use App\Models\WebSetting\WebSettingService; | 24 | use App\Models\WebSetting\WebSettingService; |
| 23 | use App\Services\ProjectServer; | 25 | use App\Services\ProjectServer; |
| @@ -260,76 +262,49 @@ class Demo extends Command | @@ -260,76 +262,49 @@ class Demo extends Command | ||
| 260 | // | 262 | // |
| 261 | // print_r($include); | 263 | // print_r($include); |
| 262 | // } | 264 | // } |
| 263 | - | ||
| 264 | public function handle(){ | 265 | public function handle(){ |
| 265 | -// $projectModel = new Project(); | ||
| 266 | -// $list = $projectModel->list(['delete_status'=>0]); | ||
| 267 | -// foreach ($list as $v){ | ||
| 268 | - ProjectServer::useProject(150); | ||
| 269 | - $this->getKeywordImage(); | ||
| 270 | - DB::disconnect('custom_mysql'); | ||
| 271 | -// } | ||
| 272 | - } | ||
| 273 | - | ||
| 274 | - /** | ||
| 275 | - * @remark :根据关键字获取产品主图 | ||
| 276 | - * @name :getKeywordList | ||
| 277 | - * @author :lyh | ||
| 278 | - * @method :post | ||
| 279 | - * @time :2024/2/23 16:28 | ||
| 280 | - */ | ||
| 281 | - public function getKeywordImage($keyword_id = 1,$project_id = 150){ | ||
| 282 | - $keywordModel = new Keyword(); | ||
| 283 | - $keywordInfo = $keywordModel->read(['id'=>$keyword_id]); | ||
| 284 | - //TODO::所有产品 | ||
| 285 | - $thumb = $this->getRecommendAndHotProducts($keywordInfo['route'],$project_id); | ||
| 286 | - $domainModel = new DomainInfo(); | ||
| 287 | - $domainInfo = $domainModel->read(['project_id'=>$project_id]); | ||
| 288 | - if(!empty($domainInfo)){ | ||
| 289 | - $keywordInfo['route'] = $domainInfo['domain'].'/'.$keywordInfo['route']; | ||
| 290 | - } | ||
| 291 | - $data = [ | ||
| 292 | - 'url'=>$keywordInfo['route'], | ||
| 293 | - 'title'=>$keywordInfo['title'], | ||
| 294 | - 'keyword_title'=>$keywordInfo['keyword_title'], | ||
| 295 | - 'keyword_content'=>$keywordInfo['keyword_content'], | ||
| 296 | - 'product_list'=>$thumb ?? [] | ||
| 297 | - ]; | ||
| 298 | - dd($data); | ||
| 299 | - return $data; | ||
| 300 | - } | ||
| 301 | - | ||
| 302 | - /** | ||
| 303 | - * 关键词聚合页-推荐&热门产品 | ||
| 304 | - */ | ||
| 305 | - public function getRecommendAndHotProducts($route,$project_id): ?array | ||
| 306 | - { | ||
| 307 | - $productIds = []; | ||
| 308 | - $productKeyword = Keyword::where("project_id",$project_id)->where("route",$route)->first(); | ||
| 309 | - if (!empty($productKeyword)){ | ||
| 310 | - $productsQuery = Product::where("project_id", $project_id)->where("status",1)->where("keyword_id","like","%,".$productKeyword->id.",%")->limit(7)->get(); | ||
| 311 | - if (!empty($productsQuery)){ | ||
| 312 | - foreach ($productsQuery as $item){ | ||
| 313 | - $productIds[] = $item->id; | ||
| 314 | - } | ||
| 315 | - if (count($productIds)<7){ | ||
| 316 | - $randomData = Product::where("project_id", $project_id)->where("status",1)->whereNotIn('id', $productIds)->inRandomOrder()->take(13-count($productIds))->get(); | ||
| 317 | - $products = $productsQuery->merge($randomData); | ||
| 318 | - }else{ | ||
| 319 | - $products = $productsQuery; | 266 | + $projectModel = new Project(); |
| 267 | + $list = $projectModel->list(['type'=>['in',[2,3]]]); | ||
| 268 | + foreach ($list as $k => $v){ | ||
| 269 | + $domainModel = new DomainInfo(); | ||
| 270 | + if(empty($v['uptime'])){ | ||
| 271 | + //获取项目域名的时间 | ||
| 272 | + $domainInfo = $domainModel->read(['project_id'=>$v['id']]); | ||
| 273 | + if($domainInfo !== false){ | ||
| 274 | +// dd($domainInfo); | ||
| 275 | + $projectModel->edit(['uptime'=>$domainInfo['created_at']],['id'=>$v['id']]); | ||
| 276 | + echo date('Y-m-d H:i:s') . 'project_id:'.$v['id'] . PHP_EOL; | ||
| 320 | } | 277 | } |
| 321 | - }else{ | ||
| 322 | - $products = Product::where("project_id", $project_id)->where("status",1)->inRandomOrder()->take(13)->get(); | ||
| 323 | } | 278 | } |
| 324 | } | 279 | } |
| 325 | - $data = []; | ||
| 326 | - if (!empty($products)){ | ||
| 327 | - foreach ($products as $item){ | ||
| 328 | - $data[] = !empty($item->thumb) && $item->thumb['url'] != "" ? getImageUrl($item->thumb['url']) : ""; | ||
| 329 | - } | ||
| 330 | - } | ||
| 331 | - return $data; | ||
| 332 | } | 280 | } |
| 281 | +// public function handle(){ | ||
| 282 | +// $projectModel = new DeployOptimize(); | ||
| 283 | +// $list = $projectModel->list(['project_id'=>['<',187]]); | ||
| 284 | +// foreach ($list as $v){ | ||
| 285 | +// echo date('Y-m-d H:i:s') . 'end'.json_encode($v) . PHP_EOL; | ||
| 286 | +// $data = []; | ||
| 287 | +// if(!empty($v['minor_languages']) && is_array($v['minor_languages'])){ | ||
| 288 | +// foreach ($v['minor_languages'] as $k1=> $v1){ | ||
| 289 | +// if(!empty($v1['tl']) && !empty($v1['type'])){ | ||
| 290 | +// $data[] = [ | ||
| 291 | +// 'language'=>$v1['tl'], | ||
| 292 | +// 'type'=>$v1['type'], | ||
| 293 | +// 'keywords'=>$v1['keywords'], | ||
| 294 | +// 'service_day'=>$v1['service_day'], | ||
| 295 | +// 'project_id'=>$v['project_id'], | ||
| 296 | +// 'created_at'=>date('Y-m-d H:i:s'), | ||
| 297 | +// 'updated_at'=>date('Y-m-d H:i:s') | ||
| 298 | +// ]; | ||
| 299 | +// } | ||
| 300 | +// } | ||
| 301 | +// } | ||
| 302 | +// $languageModel = new MinorLanguages(); | ||
| 303 | +// $languageModel->insert($data); | ||
| 304 | +// } | ||
| 305 | +// | ||
| 306 | +// } | ||
| 307 | + | ||
| 333 | public function printMessage() | 308 | public function printMessage() |
| 334 | { | 309 | { |
| 335 | $client = new Client(); | 310 | $client = new Client(); |
| @@ -55,7 +55,7 @@ class UpdateRoute extends Command | @@ -55,7 +55,7 @@ class UpdateRoute extends Command | ||
| 55 | */ | 55 | */ |
| 56 | public function handle(){ | 56 | public function handle(){ |
| 57 | $projectModel = new Project(); | 57 | $projectModel = new Project(); |
| 58 | - $list = $projectModel->list(['id'=>264]); | 58 | + $list = $projectModel->list(['id'=>917]); |
| 59 | $data = []; | 59 | $data = []; |
| 60 | foreach ($list as $v){ | 60 | foreach ($list as $v){ |
| 61 | echo date('Y-m-d H:i:s') . 'project_id:'.$v['id'] . PHP_EOL; | 61 | echo date('Y-m-d H:i:s') . 'project_id:'.$v['id'] . PHP_EOL; |
| @@ -8,6 +8,7 @@ use App\Models\Product\Product; | @@ -8,6 +8,7 @@ use App\Models\Product\Product; | ||
| 8 | use App\Models\Project\OnlineCheck; | 8 | use App\Models\Project\OnlineCheck; |
| 9 | use App\Models\Project\Project; | 9 | use App\Models\Project\Project; |
| 10 | use App\Models\Template\BCustomTemplate; | 10 | use App\Models\Template\BCustomTemplate; |
| 11 | +use App\Models\WebSetting\WebLanguage; | ||
| 11 | use App\Services\ProjectServer; | 12 | use App\Services\ProjectServer; |
| 12 | use Carbon\Carbon; | 13 | use Carbon\Carbon; |
| 13 | use GuzzleHttp\Client; | 14 | use GuzzleHttp\Client; |
| @@ -130,6 +131,19 @@ class WebTraffic extends Command | @@ -130,6 +131,19 @@ class WebTraffic extends Command | ||
| 130 | 'https://search.yahoo.com/' => 5, | 131 | 'https://search.yahoo.com/' => 5, |
| 131 | 'https://www.facebook.com/' => 5, | 132 | 'https://www.facebook.com/' => 5, |
| 132 | ]; | 133 | ]; |
| 134 | + | ||
| 135 | + //俄语 | ||
| 136 | + protected $eylyzb = [ | ||
| 137 | + 'https://www.yandex.com/' => 630, | ||
| 138 | + 'https://www.google.com/' => 30, | ||
| 139 | + 'http://www.google.com/' => 30, | ||
| 140 | + 'http://www.bing.com/' => 20, | ||
| 141 | + 'https://www.bing.com/' => 5, | ||
| 142 | + 'https://www.youtube.com/' => 5, | ||
| 143 | + 'https://search.yahoo.com/' => 5, | ||
| 144 | + 'https://www.facebook.com/' => 5, | ||
| 145 | + ]; | ||
| 146 | + | ||
| 133 | protected $otherzb = [700, 300]; //模拟访问来源占比 (非美国) google.com|google.其他后缀 | 147 | protected $otherzb = [700, 300]; //模拟访问来源占比 (非美国) google.com|google.其他后缀 |
| 134 | 148 | ||
| 135 | protected $pc_ua = [ | 149 | protected $pc_ua = [ |
| @@ -230,7 +244,7 @@ class WebTraffic extends Command | @@ -230,7 +244,7 @@ class WebTraffic extends Command | ||
| 230 | 'ip' => $ips[$project_key]['ip'], | 244 | 'ip' => $ips[$project_key]['ip'], |
| 231 | 'url' => $project['visit_urls'][$j], | 245 | 'url' => $project['visit_urls'][$j], |
| 232 | 'device_port' => $project['device_port'], | 246 | 'device_port' => $project['device_port'], |
| 233 | - 'referrer_url' => $this->getReferer($ips[$project_key]['ip_area']), | 247 | + 'referrer_url' => $this->getReferer($ips[$project_key]['ip_area'], $project['lang']), |
| 234 | 'user_agent' => $project['user_agent'], | 248 | 'user_agent' => $project['user_agent'], |
| 235 | ]; | 249 | ]; |
| 236 | Log::channel('traffic')->info('traffic project_id:' . $project['project_id'], $data); | 250 | Log::channel('traffic')->info('traffic project_id:' . $project['project_id'], $data); |
| @@ -293,12 +307,15 @@ class WebTraffic extends Command | @@ -293,12 +307,15 @@ class WebTraffic extends Command | ||
| 293 | $startTime = Carbon::now()->addMonths(-9)->startOfDay()->toDateTimeString(); | 307 | $startTime = Carbon::now()->addMonths(-9)->startOfDay()->toDateTimeString(); |
| 294 | $query->where('pdo.start_date', '<', $startTime); | 308 | $query->where('pdo.start_date', '<', $startTime); |
| 295 | } | 309 | } |
| 296 | - })->select('pdo.project_id')->forPage($page, 500)->get(); | 310 | + })->select(['pdo.project_id','gl_project.main_lang_id'])->forPage($page, 500)->get(); |
| 297 | //其他地方在引流的域名 | 311 | //其他地方在引流的域名 |
| 298 | $other = DB::connection('projects_mysql')->table('projects')->where('switch', 1)->pluck('domain')->toArray(); | 312 | $other = DB::connection('projects_mysql')->table('projects')->where('switch', 1)->pluck('domain')->toArray(); |
| 299 | - | ||
| 300 | $data = []; | 313 | $data = []; |
| 301 | foreach ($list as $project) { | 314 | foreach ($list as $project) { |
| 315 | + $lang = WebLanguage::getLangById($this->project['main_lang_id']??1)['short']; | ||
| 316 | + if(empty($project->domainInfo['domain'])){ | ||
| 317 | + continue; | ||
| 318 | + } | ||
| 302 | //其他地方在引流就不再引流了 | 319 | //其他地方在引流就不再引流了 |
| 303 | if(in_array($project->domainInfo['domain'], $other)){ | 320 | if(in_array($project->domainInfo['domain'], $other)){ |
| 304 | continue; | 321 | continue; |
| @@ -306,9 +323,9 @@ class WebTraffic extends Command | @@ -306,9 +323,9 @@ class WebTraffic extends Command | ||
| 306 | $data[] = [ | 323 | $data[] = [ |
| 307 | 'project_id' => $project['project_id'], | 324 | 'project_id' => $project['project_id'], |
| 308 | 'domain' => 'https://' . $project->domainInfo['domain'] . '/', | 325 | 'domain' => 'https://' . $project->domainInfo['domain'] . '/', |
| 326 | + 'lang' => $lang | ||
| 309 | ]; | 327 | ]; |
| 310 | } | 328 | } |
| 311 | - | ||
| 312 | return $data; | 329 | return $data; |
| 313 | } | 330 | } |
| 314 | 331 | ||
| @@ -440,7 +457,12 @@ class WebTraffic extends Command | @@ -440,7 +457,12 @@ class WebTraffic extends Command | ||
| 440 | /** | 457 | /** |
| 441 | * 获取访问来路 | 458 | * 获取访问来路 |
| 442 | */ | 459 | */ |
| 443 | - protected function getReferer($ip_area){ | 460 | + protected function getReferer($ip_area, $lang){ |
| 461 | + | ||
| 462 | + if($lang == 'ru'){ | ||
| 463 | + return $this->get_rand($this->eylyzb); | ||
| 464 | + } | ||
| 465 | + | ||
| 444 | if($ip_area == '美国'){ | 466 | if($ip_area == '美国'){ |
| 445 | $referer = $this->get_rand($this->lyzb); | 467 | $referer = $this->get_rand($this->lyzb); |
| 446 | }else{ | 468 | }else{ |
| @@ -12,6 +12,8 @@ namespace App\Http\Controllers\Aside\Com; | @@ -12,6 +12,8 @@ namespace App\Http\Controllers\Aside\Com; | ||
| 12 | use App\Enums\Common\Code; | 12 | use App\Enums\Common\Code; |
| 13 | use App\Http\Controllers\Aside\BaseController; | 13 | use App\Http\Controllers\Aside\BaseController; |
| 14 | use App\Models\Com\KeywordVideoTask; | 14 | use App\Models\Com\KeywordVideoTask; |
| 15 | +use App\Models\Domain\DomainInfo; | ||
| 16 | +use App\Models\Project\Project; | ||
| 15 | 17 | ||
| 16 | class KeywordVideoController extends BaseController | 18 | class KeywordVideoController extends BaseController |
| 17 | { | 19 | { |
| @@ -24,9 +26,55 @@ class KeywordVideoController extends BaseController | @@ -24,9 +26,55 @@ class KeywordVideoController extends BaseController | ||
| 24 | */ | 26 | */ |
| 25 | public function lists(){ | 27 | public function lists(){ |
| 26 | $keywordModel = new KeywordVideoTask(); | 28 | $keywordModel = new KeywordVideoTask(); |
| 27 | - $lists = $keywordModel->lists($this->map,$this->page,$this->row); | 29 | + $query = $keywordModel->leftJoin('gl_project', 'gl_keyword_video_task.project_id', '=', 'gl_project.id'); |
| 30 | + $query = $this->searchParam($query); | ||
| 31 | + $query = $this->orderByList($query); | ||
| 32 | + $lists = $query->paginate($this->row, $this->selectParam(), 'page', $this->page)->toArray(); | ||
| 28 | $this->response('success',Code::SUCCESS,$lists); | 33 | $this->response('success',Code::SUCCESS,$lists); |
| 29 | } | 34 | } |
| 35 | + /** | ||
| 36 | + * 需要查询的字段 | ||
| 37 | + * @return array | ||
| 38 | + */ | ||
| 39 | + public function selectParam(){ | ||
| 40 | + $select = [ | ||
| 41 | + 'gl_keyword_video_task.id AS id', | ||
| 42 | + 'gl_keyword_video_task.project_id AS project_id', | ||
| 43 | + 'gl_keyword_video_task.number AS number', | ||
| 44 | + 'gl_keyword_video_task.status AS status', | ||
| 45 | + 'gl_keyword_video_task.sort AS sort', | ||
| 46 | + 'gl_keyword_video_task.created_at AS created_at', | ||
| 47 | + 'gl_keyword_video_task.updated_at AS updated_at', | ||
| 48 | + 'gl_project.title AS title', | ||
| 49 | + 'gl_project.company AS company', | ||
| 50 | + ]; | ||
| 51 | + return $select; | ||
| 52 | + } | ||
| 53 | + /** | ||
| 54 | + * @remark :搜索参数处理 | ||
| 55 | + * @name :searchParam | ||
| 56 | + * @author :lyh | ||
| 57 | + * @method :post | ||
| 58 | + * @time :2023/8/18 10:58 | ||
| 59 | + */ | ||
| 60 | + public function searchParam(&$query){ | ||
| 61 | + if(isset($this->map['project_name']) && is_array($this->map['project_name'])){ | ||
| 62 | + $query->where('gl_project.title','like','%'.$this->map['project_name'].'%'); | ||
| 63 | + } | ||
| 64 | + return $query; | ||
| 65 | + } | ||
| 66 | + | ||
| 67 | + /** | ||
| 68 | + * @remark :排序 | ||
| 69 | + * @name :orderByList | ||
| 70 | + * @author :lyh | ||
| 71 | + * @method :post | ||
| 72 | + * @time :2023/12/29 17:14 | ||
| 73 | + */ | ||
| 74 | + public function orderByList(&$query){ | ||
| 75 | + $query = $query->orderBy('gl_keyword_video_task.sort', 'desc')->orderBy('gl_keyword_video_task.id', 'desc'); | ||
| 76 | + return $query; | ||
| 77 | + } | ||
| 30 | 78 | ||
| 31 | /** | 79 | /** |
| 32 | * @remark :创建关键字任务池子 | 80 | * @remark :创建关键字任务池子 |
| @@ -43,6 +91,12 @@ class KeywordVideoController extends BaseController | @@ -43,6 +91,12 @@ class KeywordVideoController extends BaseController | ||
| 43 | 'project_id.required' => '项目唯一标识不为空', | 91 | 'project_id.required' => '项目唯一标识不为空', |
| 44 | 'number.required' => 'number不为空', | 92 | 'number.required' => 'number不为空', |
| 45 | ]); | 93 | ]); |
| 94 | + //查看当前项目是否有正式域名 | ||
| 95 | + $domainModel = new DomainInfo(); | ||
| 96 | + $info = $domainModel->read(['project_id'=>$this->param['project_id']]); | ||
| 97 | + if($info === false){ | ||
| 98 | + $this->response('请先设置域名',Code::SYSTEM_ERROR); | ||
| 99 | + } | ||
| 46 | $keywordModel = new KeywordVideoTask(); | 100 | $keywordModel = new KeywordVideoTask(); |
| 47 | $rs = $keywordModel->add($this->param); | 101 | $rs = $keywordModel->add($this->param); |
| 48 | if($rs === false){ | 102 | if($rs === false){ |
| @@ -65,7 +119,7 @@ class KeywordVideoController extends BaseController | @@ -65,7 +119,7 @@ class KeywordVideoController extends BaseController | ||
| 65 | 'id.required' => '主键标识不为空', | 119 | 'id.required' => '主键标识不为空', |
| 66 | ]); | 120 | ]); |
| 67 | $keywordModel = new KeywordVideoTask(); | 121 | $keywordModel = new KeywordVideoTask(); |
| 68 | - $rs = $keywordModel->edit(['sort'=>$this->param['sort']],['id'=>$this->param['id']]); | 122 | + $rs = $keywordModel->edit($this->param,['id'=>$this->param['id']]); |
| 69 | if($rs === false){ | 123 | if($rs === false){ |
| 70 | $this->response('编辑失败',Code::SYSTEM_ERROR); | 124 | $this->response('编辑失败',Code::SYSTEM_ERROR); |
| 71 | } | 125 | } |
| @@ -5,19 +5,15 @@ namespace App\Http\Controllers\Aside\Optimize; | @@ -5,19 +5,15 @@ namespace App\Http\Controllers\Aside\Optimize; | ||
| 5 | use App\Enums\Common\Code; | 5 | use App\Enums\Common\Code; |
| 6 | use App\Helper\Arr; | 6 | use App\Helper\Arr; |
| 7 | use App\Http\Controllers\Aside\BaseController; | 7 | use App\Http\Controllers\Aside\BaseController; |
| 8 | -use App\Http\Logic\Aside\Optimize\OptimizeLogic; | ||
| 9 | use App\Http\Logic\Aside\Project\ProjectLogic; | 8 | use App\Http\Logic\Aside\Project\ProjectLogic; |
| 10 | use App\Models\Ai\AiPrefix; | 9 | use App\Models\Ai\AiPrefix; |
| 11 | use App\Models\ASide\APublicModel; | 10 | use App\Models\ASide\APublicModel; |
| 12 | use App\Models\Channel\Channel; | 11 | use App\Models\Channel\Channel; |
| 13 | use App\Models\Domain\DomainInfo; | 12 | use App\Models\Domain\DomainInfo; |
| 14 | -use App\Models\Manage\Manage; | ||
| 15 | use App\Models\Manage\ManageHr; | 13 | use App\Models\Manage\ManageHr; |
| 16 | -use App\Models\Project\OnlineCheck; | 14 | +use App\Models\Project\DeployOptimize; |
| 17 | use App\Models\Project\Project; | 15 | use App\Models\Project\Project; |
| 18 | use App\Models\RankData\RankData; | 16 | use App\Models\RankData\RankData; |
| 19 | -use App\Models\Task\Task; | ||
| 20 | -use Illuminate\Support\Facades\DB; | ||
| 21 | 17 | ||
| 22 | /** | 18 | /** |
| 23 | * @remark :优化 | 19 | * @remark :优化 |
| @@ -194,6 +190,7 @@ class OptimizeController extends BaseController | @@ -194,6 +190,7 @@ class OptimizeController extends BaseController | ||
| 194 | 'gl_project_deploy_optimize.quality_mid AS quality_mid', | 190 | 'gl_project_deploy_optimize.quality_mid AS quality_mid', |
| 195 | 'gl_project_deploy_optimize.design_mid AS design_mid', | 191 | 'gl_project_deploy_optimize.design_mid AS design_mid', |
| 196 | 'gl_project_deploy_optimize.start_date AS start_date', | 192 | 'gl_project_deploy_optimize.start_date AS start_date', |
| 193 | + 'gl_project_deploy_optimize.backlink AS backlink', | ||
| 197 | ]; | 194 | ]; |
| 198 | return $select; | 195 | return $select; |
| 199 | } | 196 | } |
| @@ -365,4 +362,24 @@ class OptimizeController extends BaseController | @@ -365,4 +362,24 @@ class OptimizeController extends BaseController | ||
| 365 | $projectModel->edit([$this->param['type']=>$this->param['status']],['id'=>$this->param['project_id']]); | 362 | $projectModel->edit([$this->param['type']=>$this->param['status']],['id'=>$this->param['project_id']]); |
| 366 | $this->response('success'); | 363 | $this->response('success'); |
| 367 | } | 364 | } |
| 365 | + | ||
| 366 | + /** | ||
| 367 | + * @remark :标记反向链接 | ||
| 368 | + * @name :editBacklink | ||
| 369 | + * @author :lyh | ||
| 370 | + * @method :post | ||
| 371 | + * @time :2024/2/29 9:18 | ||
| 372 | + */ | ||
| 373 | + public function editBacklink(){ | ||
| 374 | + $this->request->validate([ | ||
| 375 | + 'project_id'=>'required', | ||
| 376 | + 'backlink'=>'required', | ||
| 377 | + ],[ | ||
| 378 | + 'project_id.required' => 'project_id不能为空', | ||
| 379 | + 'backlink.required' => 'backlink不能为空', | ||
| 380 | + ]); | ||
| 381 | + $optimizeModel = new DeployOptimize(); | ||
| 382 | + $optimizeModel->edit(['backlink'=>$this->param['backlink']],['project_id'=>$this->param['project_id']]); | ||
| 383 | + $this->response('success'); | ||
| 384 | + } | ||
| 368 | } | 385 | } |
| 1 | +<?php | ||
| 2 | +/** | ||
| 3 | + * @remark : | ||
| 4 | + * @name :MinorLanguagesController.php | ||
| 5 | + * @author :lyh | ||
| 6 | + * @method :post | ||
| 7 | + * @time :2024/2/28 9:08 | ||
| 8 | + */ | ||
| 9 | + | ||
| 10 | +namespace App\Http\Controllers\Aside\Project; | ||
| 11 | + | ||
| 12 | +use App\Enums\Common\Code; | ||
| 13 | +use App\Http\Controllers\Aside\BaseController; | ||
| 14 | +use App\Models\Project\MinorLanguages; | ||
| 15 | + | ||
| 16 | +/** | ||
| 17 | + * @remark :小语种 | ||
| 18 | + * @name :MinorLanguagesController | ||
| 19 | + * @author :lyh | ||
| 20 | + * @method :post | ||
| 21 | + * @time :2024/2/28 9:09 | ||
| 22 | + */ | ||
| 23 | +class MinorLanguagesController extends BaseController | ||
| 24 | +{ | ||
| 25 | + public function getMinorLanguageList(){ | ||
| 26 | + $this->request->validate([ | ||
| 27 | + 'project_id'=>'required', | ||
| 28 | + ],[ | ||
| 29 | + 'project_id.required' => 'keyword不能为空', | ||
| 30 | + ]); | ||
| 31 | + $languageModel = new MinorLanguages(); | ||
| 32 | + $lists = $languageModel->list($this->map,'id',['language','type','keywords','service_day']); | ||
| 33 | + $this->response('success',Code::SUCCESS,$lists); | ||
| 34 | + } | ||
| 35 | +} |
| @@ -76,6 +76,49 @@ class ProjectController extends BaseController | @@ -76,6 +76,49 @@ class ProjectController extends BaseController | ||
| 76 | } | 76 | } |
| 77 | 77 | ||
| 78 | /** | 78 | /** |
| 79 | + * 需要查询的字段 | ||
| 80 | + * @return array | ||
| 81 | + */ | ||
| 82 | + public function selectParam(){ | ||
| 83 | + $select = [ | ||
| 84 | + 'gl_project.id AS id', | ||
| 85 | + 'gl_project.title AS title', | ||
| 86 | + 'gl_project.channel AS channel', | ||
| 87 | + 'gl_project.company AS company', | ||
| 88 | + 'gl_project.type AS type', | ||
| 89 | + 'gl_project.is_upgrade AS is_upgrade', | ||
| 90 | + 'gl_project.created_at AS created_at', | ||
| 91 | + 'gl_project.cooperate_date AS cooperate_date', | ||
| 92 | + 'gl_project_online_check.id AS online_check_id', | ||
| 93 | + 'gl_project_online_check.question AS question', | ||
| 94 | + 'gl_project_online_check.optimist_status AS optimist_status', | ||
| 95 | + 'gl_project_online_check.qa_status AS qa_status', | ||
| 96 | + 'gl_project_payment.amount AS amount', | ||
| 97 | + 'gl_project_deploy_build.dept_id AS dept_id', | ||
| 98 | + 'gl_project_deploy_build.keyword_num AS key', | ||
| 99 | + 'gl_project_deploy_build.service_duration AS day', | ||
| 100 | + 'gl_project_deploy_build.leader_mid AS leader_mid', | ||
| 101 | + 'gl_project_deploy_build.manager_mid AS manager_mid', | ||
| 102 | + 'gl_project_deploy_build.designer_mid AS designer_mid', | ||
| 103 | + 'gl_project_deploy_build.tech_mid AS tech_mid', | ||
| 104 | + 'gl_project_deploy_build.test_domain AS test_domain', | ||
| 105 | + 'gl_project_deploy_build.plan AS plan', | ||
| 106 | + 'gl_project_deploy_optimize.dept_id AS optimize_dept_id', | ||
| 107 | + 'gl_project_deploy_optimize.manager_mid AS optimize_manager_mid', | ||
| 108 | + 'gl_project_deploy_optimize.optimist_mid AS optimize_optimist_mid', | ||
| 109 | + 'gl_project_deploy_optimize.assist_mid AS optimize_assist_mid', | ||
| 110 | + 'gl_project_deploy_optimize.tech_mid AS optimize_tech_mid', | ||
| 111 | + 'gl_project_deploy_optimize.design_mid AS design_mid', | ||
| 112 | + 'gl_project_deploy_optimize.tech_leader AS tech_leader', | ||
| 113 | + 'gl_project_deploy_optimize.domain AS domain', | ||
| 114 | + 'gl_project_deploy_optimize.quality_mid AS quality_mid', | ||
| 115 | + 'gl_project_deploy_optimize.design_mid AS design_mid', | ||
| 116 | + 'gl_project_deploy_optimize.api_no AS api_no', | ||
| 117 | + ]; | ||
| 118 | + return $select; | ||
| 119 | + } | ||
| 120 | + | ||
| 121 | + /** | ||
| 79 | * @remark :排序 | 122 | * @remark :排序 |
| 80 | * @name :orderByList | 123 | * @name :orderByList |
| 81 | * @author :lyh | 124 | * @author :lyh |
| @@ -146,49 +189,6 @@ class ProjectController extends BaseController | @@ -146,49 +189,6 @@ class ProjectController extends BaseController | ||
| 146 | } | 189 | } |
| 147 | 190 | ||
| 148 | /** | 191 | /** |
| 149 | - * 需要查询的字段 | ||
| 150 | - * @return array | ||
| 151 | - */ | ||
| 152 | - public function selectParam(){ | ||
| 153 | - $select = [ | ||
| 154 | - 'gl_project.id AS id', | ||
| 155 | - 'gl_project.title AS title', | ||
| 156 | - 'gl_project.channel AS channel', | ||
| 157 | - 'gl_project.company AS company', | ||
| 158 | - 'gl_project.type AS type', | ||
| 159 | - 'gl_project.is_upgrade AS is_upgrade', | ||
| 160 | - 'gl_project.created_at AS created_at', | ||
| 161 | - 'gl_project.cooperate_date AS cooperate_date', | ||
| 162 | - 'gl_project_online_check.id AS online_check_id', | ||
| 163 | - 'gl_project_online_check.question AS question', | ||
| 164 | - 'gl_project_online_check.optimist_status AS optimist_status', | ||
| 165 | - 'gl_project_online_check.qa_status AS qa_status', | ||
| 166 | - 'gl_project_payment.amount AS amount', | ||
| 167 | - 'gl_project_deploy_build.dept_id AS dept_id', | ||
| 168 | - 'gl_project_deploy_build.keyword_num AS key', | ||
| 169 | - 'gl_project_deploy_build.service_duration AS day', | ||
| 170 | - 'gl_project_deploy_build.leader_mid AS leader_mid', | ||
| 171 | - 'gl_project_deploy_build.manager_mid AS manager_mid', | ||
| 172 | - 'gl_project_deploy_build.designer_mid AS designer_mid', | ||
| 173 | - 'gl_project_deploy_build.tech_mid AS tech_mid', | ||
| 174 | - 'gl_project_deploy_build.test_domain AS test_domain', | ||
| 175 | - 'gl_project_deploy_build.plan AS plan', | ||
| 176 | - 'gl_project_deploy_optimize.dept_id AS optimize_dept_id', | ||
| 177 | - 'gl_project_deploy_optimize.manager_mid AS optimize_manager_mid', | ||
| 178 | - 'gl_project_deploy_optimize.optimist_mid AS optimize_optimist_mid', | ||
| 179 | - 'gl_project_deploy_optimize.assist_mid AS optimize_assist_mid', | ||
| 180 | - 'gl_project_deploy_optimize.tech_mid AS optimize_tech_mid', | ||
| 181 | - 'gl_project_deploy_optimize.design_mid AS design_mid', | ||
| 182 | - 'gl_project_deploy_optimize.tech_leader AS tech_leader', | ||
| 183 | - 'gl_project_deploy_optimize.domain AS domain', | ||
| 184 | - 'gl_project_deploy_optimize.quality_mid AS quality_mid', | ||
| 185 | - 'gl_project_deploy_optimize.design_mid AS design_mid', | ||
| 186 | - 'gl_project_deploy_optimize.api_no AS api_no', | ||
| 187 | - ]; | ||
| 188 | - return $select; | ||
| 189 | - } | ||
| 190 | - | ||
| 191 | - /** | ||
| 192 | * 搜索框 | 192 | * 搜索框 |
| 193 | * @param $query | 193 | * @param $query |
| 194 | * @return mixed | 194 | * @return mixed |
| @@ -80,6 +80,11 @@ class LoginController extends BaseController | @@ -80,6 +80,11 @@ class LoginController extends BaseController | ||
| 80 | */ | 80 | */ |
| 81 | public function autologin(UserLoginLogic $logic, EncryptUtils $encrypt) | 81 | public function autologin(UserLoginLogic $logic, EncryptUtils $encrypt) |
| 82 | { | 82 | { |
| 83 | + $this->request->validate([ | ||
| 84 | + 'code' => 'required', | ||
| 85 | + ],[ | ||
| 86 | + 'code.required' => 'code不能为空', | ||
| 87 | + ]); | ||
| 83 | $serviceSettingModel = new Service(); | 88 | $serviceSettingModel = new Service(); |
| 84 | $info = $serviceSettingModel->read(['type'=>4]); | 89 | $info = $serviceSettingModel->read(['type'=>4]); |
| 85 | if($info === false){ | 90 | if($info === false){ |
| @@ -284,7 +284,7 @@ class ProductController extends BaseController | @@ -284,7 +284,7 @@ class ProductController extends BaseController | ||
| 284 | $v = $this->getHandleFileImage($v); | 284 | $v = $this->getHandleFileImage($v); |
| 285 | $template_id = $this->getTemplateId(BTemplate::SOURCE_PRODUCT,BTemplate::IS_DETAIL); | 285 | $template_id = $this->getTemplateId(BTemplate::SOURCE_PRODUCT,BTemplate::IS_DETAIL); |
| 286 | $v['is_renovation'] = $this->getIsRenovation(BTemplate::SOURCE_PRODUCT,BTemplate::IS_DETAIL,$template_id,$v['id'] ?? 0); | 286 | $v['is_renovation'] = $this->getIsRenovation(BTemplate::SOURCE_PRODUCT,BTemplate::IS_DETAIL,$template_id,$v['id'] ?? 0); |
| 287 | - $v['url'] = $this->user['domain'].$v['route']; | 287 | + $v['url'] = $this->user['domain'].$v['route'] ?? ''; |
| 288 | //获取当前数据扩展字段及值 | 288 | //获取当前数据扩展字段及值 |
| 289 | $v['extend'] = $this->getExtendInfo($v['id']); | 289 | $v['extend'] = $this->getExtendInfo($v['id']); |
| 290 | return $v; | 290 | return $v; |
| @@ -525,4 +525,22 @@ class ProductController extends BaseController | @@ -525,4 +525,22 @@ class ProductController extends BaseController | ||
| 525 | } | 525 | } |
| 526 | $this->response('success',Code::SUCCESS,$info); | 526 | $this->response('success',Code::SUCCESS,$info); |
| 527 | } | 527 | } |
| 528 | + | ||
| 529 | + /** | ||
| 530 | + * @remark :Ai发布新闻 | ||
| 531 | + * @name :sendAiNews | ||
| 532 | + * @author :lyh | ||
| 533 | + * @method :post | ||
| 534 | + * @time :2024/1/26 15:33 | ||
| 535 | + */ | ||
| 536 | + public function sendAiProduct(){ | ||
| 537 | + $this->request->validate([ | ||
| 538 | + 'keyword'=>'required', | ||
| 539 | + ],[ | ||
| 540 | + 'keyword.required' => 'keyword不能为空', | ||
| 541 | + ]); | ||
| 542 | + $data = curl_c('http://title.globalso.com/ajax_data_for_web.php?keyword='.$this->param['keyword'],false); | ||
| 543 | + @file_put_contents(storage_path('logs/lyh_error.log'), var_export($data, true) . PHP_EOL, FILE_APPEND); | ||
| 544 | + $this->response('success',Code::SUCCESS,$data); | ||
| 545 | + } | ||
| 528 | } | 546 | } |
| @@ -84,10 +84,12 @@ class CreateKeywordLogic extends BaseLogic | @@ -84,10 +84,12 @@ class CreateKeywordLogic extends BaseLogic | ||
| 84 | } | 84 | } |
| 85 | $except_k = ['Quality','Philippines','USA','UK','America','China','Wholesale','Hot Sale','Cheap','cheap','price','pricelist','hot sale','Price','Pricelist','With ','For ','And ','Oem','Odm','Supplier','Manufacturer','CE Certification','Factory','Exporters','Company','Companies','Suppliers','Manufacturers','Factories','Company','Companies','Exporters','Exporter','Buy ',' Buy','Where ','What ','When ','How ','Which ','Producer','Producers','Best Selling','Hot Selling','Near','Chinese','India','use','high quality','discount','online','custom','customized','Enterprise','Agent','Plant','Refinery','Foundry','Maker','Distributor']; | 85 | $except_k = ['Quality','Philippines','USA','UK','America','China','Wholesale','Hot Sale','Cheap','cheap','price','pricelist','hot sale','Price','Pricelist','With ','For ','And ','Oem','Odm','Supplier','Manufacturer','CE Certification','Factory','Exporters','Company','Companies','Suppliers','Manufacturers','Factories','Company','Companies','Exporters','Exporter','Buy ',' Buy','Where ','What ','When ','How ','Which ','Producer','Producers','Best Selling','Hot Selling','Near','Chinese','India','use','high quality','discount','online','custom','customized','Enterprise','Agent','Plant','Refinery','Foundry','Maker','Distributor']; |
| 86 | $filterKeywords = []; | 86 | $filterKeywords = []; |
| 87 | - foreach ($this->param['keyword'] as $k=>$v){ | ||
| 88 | - if(in_array($v,$except_k)){ | ||
| 89 | - unset($this->param['keyword'][$k]); | ||
| 90 | - $filterKeywords[] = $v; | 87 | + foreach ($this->param['keyword'] as $k=>$keyword){ |
| 88 | + foreach ($except_k as $exc_k){ | ||
| 89 | + if(strpos(strtolower($keyword),strtolower($exc_k)) !== false){ | ||
| 90 | + unset($this->param['keyword'][$k]); | ||
| 91 | + $filterKeywords[] = $keyword; | ||
| 92 | + } | ||
| 91 | } | 93 | } |
| 92 | } | 94 | } |
| 93 | $prefix_keyword = $this->prefixKeyword($this->param['prefix'] ?? [],$this->param['keyword'],$except_k); | 95 | $prefix_keyword = $this->prefixKeyword($this->param['prefix'] ?? [],$this->param['keyword'],$except_k); |
| @@ -12,6 +12,7 @@ use App\Models\Com\NoticeLog; | @@ -12,6 +12,7 @@ use App\Models\Com\NoticeLog; | ||
| 12 | use App\Models\Com\UpdateLog; | 12 | use App\Models\Com\UpdateLog; |
| 13 | use App\Models\Devops\ServerConfig; | 13 | use App\Models\Devops\ServerConfig; |
| 14 | use App\Models\Project\InquiryFilterConfig; | 14 | use App\Models\Project\InquiryFilterConfig; |
| 15 | +use App\Models\Project\MinorLanguages; | ||
| 15 | use App\Models\Project\ProjectRenew; | 16 | use App\Models\Project\ProjectRenew; |
| 16 | use App\Models\Template\Setting; | 17 | use App\Models\Template\Setting; |
| 17 | use App\Models\User\ProjectMenu; | 18 | use App\Models\User\ProjectMenu; |
| @@ -150,12 +151,9 @@ class ProjectLogic extends BaseLogic | @@ -150,12 +151,9 @@ class ProjectLogic extends BaseLogic | ||
| 150 | $this->saveProjectDeployOptimize($this->param['deploy_optimize']); | 151 | $this->saveProjectDeployOptimize($this->param['deploy_optimize']); |
| 151 | //保存售后信息 | 152 | //保存售后信息 |
| 152 | $this->saveProjectAfter($this->param['project_after']); | 153 | $this->saveProjectAfter($this->param['project_after']); |
| 153 | - //保存询盘过滤配置 | ||
| 154 | -// $this->param['inquiry_filter_config']['project_id'] = $this->param['id']; | ||
| 155 | -// $this->saveInquiryFilterConfig($this->param['inquiry_filter_config']); | 154 | + $this->saveMinorLanguages($this->param['minor_language'] ?? []); |
| 156 | $this->syncImageFile($this->param['project_location'],$this->param['id']); | 155 | $this->syncImageFile($this->param['project_location'],$this->param['id']); |
| 157 | //创建站点 | 156 | //创建站点 |
| 158 | -// $this->createSite($this->param); | ||
| 159 | (new SyncService())->projectAcceptAddress($this->param['id']); | 157 | (new SyncService())->projectAcceptAddress($this->param['id']); |
| 160 | } | 158 | } |
| 161 | DB::commit(); | 159 | DB::commit(); |
| @@ -186,6 +184,9 @@ class ProjectLogic extends BaseLogic | @@ -186,6 +184,9 @@ class ProjectLogic extends BaseLogic | ||
| 186 | $param['extend_type'] = Project::TYPE_FIVE; | 184 | $param['extend_type'] = Project::TYPE_FIVE; |
| 187 | unset($param['type']); | 185 | unset($param['type']); |
| 188 | } | 186 | } |
| 187 | + if((($param['type'] == Project::TYPE_TWO) || ($param['type'] == Project::TYPE_THREE)) && empty($param['uptime'])){ | ||
| 188 | + $param['uptime'] = date('Y-m-d H:i:s'); | ||
| 189 | + } | ||
| 189 | if(isset($param['level']) && !empty($param['level'])){ | 190 | if(isset($param['level']) && !empty($param['level'])){ |
| 190 | $param['level'] = Arr::arrToSet($param['level']); | 191 | $param['level'] = Arr::arrToSet($param['level']); |
| 191 | } | 192 | } |
| @@ -210,7 +211,8 @@ class ProjectLogic extends BaseLogic | @@ -210,7 +211,8 @@ class ProjectLogic extends BaseLogic | ||
| 210 | } | 211 | } |
| 211 | $param['remain_day'] = $param['deploy_build']['service_duration'] - $param['finish_remain_day']; | 212 | $param['remain_day'] = $param['deploy_build']['service_duration'] - $param['finish_remain_day']; |
| 212 | $param['remain_day'] = ($param['remain_day'] > 0) ? $param['remain_day'] : 0; | 213 | $param['remain_day'] = ($param['remain_day'] > 0) ? $param['remain_day'] : 0; |
| 213 | - unset($param['payment'],$param['deploy_build'],$param['deploy_optimize'],$param['online_check'],$param['project_after'],$param['inquiry_filter_config']); | 214 | + unset($param['payment'],$param['deploy_build'],$param['deploy_optimize'], |
| 215 | + $param['online_check'],$param['project_after'],$param['inquiry_filter_config'],$param['minor_language']); | ||
| 214 | //文件上传默认值 | 216 | //文件上传默认值 |
| 215 | if($param['is_upload_manage']){ | 217 | if($param['is_upload_manage']){ |
| 216 | $param['upload_config'] = [ | 218 | $param['upload_config'] = [ |
| @@ -224,6 +226,7 @@ class ProjectLogic extends BaseLogic | @@ -224,6 +226,7 @@ class ProjectLogic extends BaseLogic | ||
| 224 | $param['is_visualization'] = json_encode($param['is_visualization']); | 226 | $param['is_visualization'] = json_encode($param['is_visualization']); |
| 225 | } | 227 | } |
| 226 | } | 228 | } |
| 229 | + | ||
| 227 | $this->model->edit($param,['id'=>$param['id']]); | 230 | $this->model->edit($param,['id'=>$param['id']]); |
| 228 | Common::del_user_cache($this->model->getTable(),$param['id']); | 231 | Common::del_user_cache($this->model->getTable(),$param['id']); |
| 229 | return $this->success(); | 232 | return $this->success(); |
| @@ -278,7 +281,7 @@ class ProjectLogic extends BaseLogic | @@ -278,7 +281,7 @@ class ProjectLogic extends BaseLogic | ||
| 278 | //更改域名 | 281 | //更改域名 |
| 279 | $this->editDomainStatus($deploy_optimize['domain'],$deploy_optimize['project_id']); | 282 | $this->editDomainStatus($deploy_optimize['domain'],$deploy_optimize['project_id']); |
| 280 | } | 283 | } |
| 281 | - $deploy_optimize['minor_languages'] = Arr::a2s(!empty($deploy_optimize['minor_languages']) ? $deploy_optimize['minor_languages'] : []); | 284 | + $deploy_optimize['minor_languages'] = Arr::a2s( []); |
| 282 | $deploy_optimize['minor_keywords'] = Arr::a2s(!empty($deploy_optimize['minor_keywords']) ? $deploy_optimize['minor_keywords'] : []); | 285 | $deploy_optimize['minor_keywords'] = Arr::a2s(!empty($deploy_optimize['minor_keywords']) ? $deploy_optimize['minor_keywords'] : []); |
| 283 | $deploy_optimize['special'] = !empty($deploy_optimize['special']) ? ','.trim($deploy_optimize['special'],',').',' : ''; | 286 | $deploy_optimize['special'] = !empty($deploy_optimize['special']) ? ','.trim($deploy_optimize['special'],',').',' : ''; |
| 284 | //是否更新了api_no | 287 | //是否更新了api_no |
| @@ -305,6 +308,32 @@ class ProjectLogic extends BaseLogic | @@ -305,6 +308,32 @@ class ProjectLogic extends BaseLogic | ||
| 305 | } | 308 | } |
| 306 | 309 | ||
| 307 | /** | 310 | /** |
| 311 | + * @remark :保存小语种配置 | ||
| 312 | + * @name :saveMinorLanguages | ||
| 313 | + * @author :lyh | ||
| 314 | + * @method :post | ||
| 315 | + * @time :2023/8/30 13:57 | ||
| 316 | + */ | ||
| 317 | + protected function saveMinorLanguages($minor_language){ | ||
| 318 | + $data = []; | ||
| 319 | + //查询数据是否存在 | ||
| 320 | + $languageModel = new MinorLanguages(); | ||
| 321 | + $languageModel->del(['project_id'=>$this->param['id']]); | ||
| 322 | + if(!empty($minor_language)){ | ||
| 323 | + foreach ($minor_language as $k => $v){ | ||
| 324 | + if(!empty($v['language'])){ | ||
| 325 | + $v['project_id'] = $this->param['id']; | ||
| 326 | + $data[] = $v; | ||
| 327 | + } | ||
| 328 | + } | ||
| 329 | + if(!empty($data)){ | ||
| 330 | + $languageModel->insert($minor_language); | ||
| 331 | + } | ||
| 332 | + } | ||
| 333 | + return $this->success(); | ||
| 334 | + } | ||
| 335 | + | ||
| 336 | + /** | ||
| 308 | * @remark :创建初始数据 | 337 | * @remark :创建初始数据 |
| 309 | * @name :createProjectData | 338 | * @name :createProjectData |
| 310 | * @author :lyh | 339 | * @author :lyh |
| @@ -14,6 +14,7 @@ use App\Http\Logic\Bside\BaseLogic; | @@ -14,6 +14,7 @@ use App\Http\Logic\Bside\BaseLogic; | ||
| 14 | use App\Models\Domain\DomainInfo; | 14 | use App\Models\Domain\DomainInfo; |
| 15 | use App\Models\Project\DeployBuild; | 15 | use App\Models\Project\DeployBuild; |
| 16 | use App\Models\Project\DeployOptimize; | 16 | use App\Models\Project\DeployOptimize; |
| 17 | +use App\Models\Project\MinorLanguages; | ||
| 17 | use App\Models\Project\Project; | 18 | use App\Models\Project\Project; |
| 18 | use App\Models\RankData\ExternalLinks; | 19 | use App\Models\RankData\ExternalLinks; |
| 19 | use App\Models\RankData\ExternalLinks as ExternalLinksModel; | 20 | use App\Models\RankData\ExternalLinks as ExternalLinksModel; |
| @@ -83,14 +84,16 @@ class RankDataLogic extends BaseLogic | @@ -83,14 +84,16 @@ class RankDataLogic extends BaseLogic | ||
| 83 | $lang_data = $quanqiusou_api->getLangRankData($api_no); | 84 | $lang_data = $quanqiusou_api->getLangRankData($api_no); |
| 84 | $lang_data = Arr::setValueToKey($lang_data, 'language'); | 85 | $lang_data = Arr::setValueToKey($lang_data, 'language'); |
| 85 | $data['langs'] = []; | 86 | $data['langs'] = []; |
| 86 | - if(isset($project['deploy_optimize']['minor_languages']) && !empty($project['deploy_optimize']['minor_languages']) && is_array($project['deploy_optimize']['minor_languages'])){ | ||
| 87 | - foreach($project['deploy_optimize']['minor_languages']??[] as $lang){ | ||
| 88 | - $remain_day = $lang_data[$lang['tl']]['dabiao_day'] ?? 0; | ||
| 89 | - $data['langs'][$lang['tl'] ?? ''] = [ | 87 | + $languageModel = new MinorLanguages(); |
| 88 | + $languageList = $languageModel->list(['project_id'=>$project['id']]); | ||
| 89 | + if(!empty($languageList) && is_array($languageList)){ | ||
| 90 | + foreach($languageList as $lang){ | ||
| 91 | + $remain_day = $lang_data[$lang['language']]['dabiao_day'] ?? 0; | ||
| 92 | + $data['langs'][$lang['language'] ?? ''] = [ | ||
| 90 | 'lang_text' => Translate::getTls($lang['tl'] ?? ''), | 93 | 'lang_text' => Translate::getTls($lang['tl'] ?? ''), |
| 91 | 'keyword_num' => $lang['keywords'] ?? 0, | 94 | 'keyword_num' => $lang['keywords'] ?? 0, |
| 92 | - 'reach_day' => $lang_data[$lang['tl']]['dabiao_day'] ?? 0, | ||
| 93 | - 'home_cnt' => $lang_data[$lang['tl']]['home_cnt'] ?? 0, | 95 | + 'reach_day' => $lang_data[$lang['language']]['dabiao_day'] ?? 0, |
| 96 | + 'home_cnt' => $lang_data[$lang['language']]['home_cnt'] ?? 0, | ||
| 94 | 'remain_day' => ($lang['type']??0) == 1 ? $data['project']['remain_day'] : $lang['service_day'] - $remain_day, | 97 | 'remain_day' => ($lang['type']??0) == 1 ? $data['project']['remain_day'] : $lang['service_day'] - $remain_day, |
| 95 | 'type' => $lang['type'] ?? 0, //1 项目关键词 项目天数 2 保证首页关键词 项目达标天数 | 98 | 'type' => $lang['type'] ?? 0, //1 项目关键词 项目天数 2 保证首页关键词 项目达标天数 |
| 96 | ]; | 99 | ]; |
| @@ -139,7 +142,6 @@ class RankDataLogic extends BaseLogic | @@ -139,7 +142,6 @@ class RankDataLogic extends BaseLogic | ||
| 139 | 'data' => $rank_week['data'] ?? [], | 142 | 'data' => $rank_week['data'] ?? [], |
| 140 | 'labels' => $rank_week['date'] ?? [], | 143 | 'labels' => $rank_week['date'] ?? [], |
| 141 | ]; | 144 | ]; |
| 142 | - | ||
| 143 | return $data; | 145 | return $data; |
| 144 | } | 146 | } |
| 145 | 147 | ||
| @@ -472,7 +474,7 @@ class RankDataLogic extends BaseLogic | @@ -472,7 +474,7 @@ class RankDataLogic extends BaseLogic | ||
| 472 | 474 | ||
| 473 | //关键词达标天数 | 475 | //关键词达标天数 |
| 474 | $model->is_compliance = 0; | 476 | $model->is_compliance = 0; |
| 475 | - if($model->updated_date != date('Y-m-d') && !$lang){ | 477 | + if($model->updated_date != date('Y-m-d')){ |
| 476 | //保证关键词数 | 478 | //保证关键词数 |
| 477 | $keyword_num = DeployBuild::where('project_id', $project_id)->value('keyword_num'); | 479 | $keyword_num = DeployBuild::where('project_id', $project_id)->value('keyword_num'); |
| 478 | $type = Project::where('id', $project_id)->value('type'); | 480 | $type = Project::where('id', $project_id)->value('type'); |
| @@ -480,8 +482,10 @@ class RankDataLogic extends BaseLogic | @@ -480,8 +482,10 @@ class RankDataLogic extends BaseLogic | ||
| 480 | $model->compliance_day = $model->compliance_day + 1; | 482 | $model->compliance_day = $model->compliance_day + 1; |
| 481 | $model->is_compliance = 1; | 483 | $model->is_compliance = 1; |
| 482 | //项目表更新 | 484 | //项目表更新 |
| 483 | - $compliance_day = Project::where(['id' => $project_id])->value('finish_remain_day') ?: 0; | ||
| 484 | - Project::where('id', $project_id)->update(['is_remain_today' => 1, 'finish_remain_day' => $compliance_day+1]); | 485 | + if(!$lang){ |
| 486 | + $compliance_day = Project::where(['id' => $project_id])->value('finish_remain_day') ?: 0; | ||
| 487 | + Project::where('id', $project_id)->update(['is_remain_today' => 1, 'finish_remain_day' => $compliance_day+1]); | ||
| 488 | + } | ||
| 485 | } | 489 | } |
| 486 | } | 490 | } |
| 487 | 491 |
| @@ -58,7 +58,7 @@ class RatingLogic extends BaseLogic | @@ -58,7 +58,7 @@ class RatingLogic extends BaseLogic | ||
| 58 | 'type'=>$this->param['type'] | 58 | 'type'=>$this->param['type'] |
| 59 | ]; | 59 | ]; |
| 60 | $this->scoringModel->add($param); | 60 | $this->scoringModel->add($param); |
| 61 | - return $this->httpSore($this->param['data'],$this->project['post_id'],$this->param['type']); | 61 | + return $this->httpSore($this->param['data'],$this->project['id'],$this->param['type']); |
| 62 | } | 62 | } |
| 63 | 63 | ||
| 64 | /** | 64 | /** |
| @@ -25,7 +25,7 @@ class AiCommandRequest extends FormRequest | @@ -25,7 +25,7 @@ class AiCommandRequest extends FormRequest | ||
| 25 | { | 25 | { |
| 26 | return [ | 26 | return [ |
| 27 | 'key'=>'required', | 27 | 'key'=>'required', |
| 28 | - 'scene'=>'required', | 28 | +// 'scene'=>'required', |
| 29 | 'ai'=>'required', | 29 | 'ai'=>'required', |
| 30 | ]; | 30 | ]; |
| 31 | } | 31 | } |
| @@ -34,7 +34,7 @@ class AiCommandRequest extends FormRequest | @@ -34,7 +34,7 @@ class AiCommandRequest extends FormRequest | ||
| 34 | { | 34 | { |
| 35 | return [ | 35 | return [ |
| 36 | 'key.required'=>'key不能为空', | 36 | 'key.required'=>'key不能为空', |
| 37 | - 'scene.required' => '场景不能为空', | 37 | +// 'scene.required' => '场景不能为空', |
| 38 | 'ai.required'=>'指令你能为空', | 38 | 'ai.required'=>'指令你能为空', |
| 39 | ]; | 39 | ]; |
| 40 | } | 40 | } |
app/Models/Project/MinorLanguages.php
0 → 100644
| 1 | +<?php | ||
| 2 | +/** | ||
| 3 | + * @remark : | ||
| 4 | + * @name :MinorLanguages.php | ||
| 5 | + * @author :lyh | ||
| 6 | + * @method :post | ||
| 7 | + * @time :2024/2/28 9:26 | ||
| 8 | + */ | ||
| 9 | + | ||
| 10 | +namespace App\Models\Project; | ||
| 11 | + | ||
| 12 | +use App\Models\Base; | ||
| 13 | + | ||
| 14 | +/** | ||
| 15 | + * @remark :项目小语种 | ||
| 16 | + * @name :MinorLanguages | ||
| 17 | + * @author :lyh | ||
| 18 | + * @method :post | ||
| 19 | + * @time :2024/2/28 9:27 | ||
| 20 | + */ | ||
| 21 | +class MinorLanguages extends Base | ||
| 22 | +{ | ||
| 23 | + protected $table = 'gl_project_minor_languages'; | ||
| 24 | +} |
| @@ -48,7 +48,7 @@ class ProjectUpdateTdk extends Base | @@ -48,7 +48,7 @@ class ProjectUpdateTdk extends Base | ||
| 48 | $project_id = Redis::rpop('updateSeoTdk'); | 48 | $project_id = Redis::rpop('updateSeoTdk'); |
| 49 | $data = []; | 49 | $data = []; |
| 50 | if($project_id){ | 50 | if($project_id){ |
| 51 | - $data = self::find($project_id); | 51 | + $data = self::where('status', self::STATUS_PENDING)->where('project_id', $project_id)->orderBy('id', 'asc')->first(); |
| 52 | } | 52 | } |
| 53 | if($data){ | 53 | if($data){ |
| 54 | return $data; | 54 | return $data; |
| @@ -55,8 +55,10 @@ class RouteMap extends Base | @@ -55,8 +55,10 @@ class RouteMap extends Base | ||
| 55 | public static function generateRoute($title, $source, $source_id, $project_id){ | 55 | public static function generateRoute($title, $source, $source_id, $project_id){ |
| 56 | if(preg_match('/[\x{4e00}-\x{9fa5}]/u', $title)){ | 56 | if(preg_match('/[\x{4e00}-\x{9fa5}]/u', $title)){ |
| 57 | $title = Translate::tran($title, 'en'); | 57 | $title = Translate::tran($title, 'en'); |
| 58 | - }elseif (preg_match('/[а-яА-Я]/u', $title)) { | ||
| 59 | - $title = Translate::tran($title, 'en'); | 58 | + }else{ |
| 59 | + if(!preg_match('/^[a-zA-Z\s]+$/', $title)){ | ||
| 60 | + $title = Translate::tran($title, 'en'); | ||
| 61 | + } | ||
| 60 | } | 62 | } |
| 61 | $i=1; | 63 | $i=1; |
| 62 | $sign = generateRoute($title); | 64 | $sign = generateRoute($title); |
| @@ -190,6 +190,10 @@ Route::middleware(['aloginauth'])->group(function () { | @@ -190,6 +190,10 @@ Route::middleware(['aloginauth'])->group(function () { | ||
| 190 | Route::any('/save', [Aside\Project\KeywordPrefixController::class, 'save'])->name('admin.keyword_save'); | 190 | Route::any('/save', [Aside\Project\KeywordPrefixController::class, 'save'])->name('admin.keyword_save'); |
| 191 | Route::any('/del', [Aside\Project\KeywordPrefixController::class, 'del'])->name('admin.keyword_del'); | 191 | Route::any('/del', [Aside\Project\KeywordPrefixController::class, 'del'])->name('admin.keyword_del'); |
| 192 | }); | 192 | }); |
| 193 | + | ||
| 194 | + Route::prefix('language')->group(function () { | ||
| 195 | + Route::any('/', [Aside\Project\MinorLanguagesController::class, 'getMinorLanguageList'])->name('admin.getMinorLanguageList'); | ||
| 196 | + }); | ||
| 193 | //更新项目tdk | 197 | //更新项目tdk |
| 194 | Route::any('/updateSeoTdk', [Aside\Com\UpdateController::class, 'updateSeoTdk'])->name('admin.project_updateSeoTdk'); | 198 | Route::any('/updateSeoTdk', [Aside\Com\UpdateController::class, 'updateSeoTdk'])->name('admin.project_updateSeoTdk'); |
| 195 | //项目内容采集 | 199 | //项目内容采集 |
| @@ -266,6 +270,7 @@ Route::middleware(['aloginauth'])->group(function () { | @@ -266,6 +270,7 @@ Route::middleware(['aloginauth'])->group(function () { | ||
| 266 | Route::any('/getAiPrefix', [Aside\Optimize\OptimizeController::class, 'getAiPrefix'])->name('admin.optimize_getAiPrefix');//获取Ai前后缀 | 270 | Route::any('/getAiPrefix', [Aside\Optimize\OptimizeController::class, 'getAiPrefix'])->name('admin.optimize_getAiPrefix');//获取Ai前后缀 |
| 267 | Route::any('/saveAiPrefix', [Aside\Optimize\OptimizeController::class, 'saveAiPrefix'])->name('admin.optimize_saveAiPrefix');//保存Ai前后缀 | 271 | Route::any('/saveAiPrefix', [Aside\Optimize\OptimizeController::class, 'saveAiPrefix'])->name('admin.optimize_saveAiPrefix');//保存Ai前后缀 |
| 268 | Route::any('/setRobots', [Aside\Optimize\OptimizeController::class, 'setRobots'])->name('admin.optimize_setRobots');//设置robots开关 | 272 | Route::any('/setRobots', [Aside\Optimize\OptimizeController::class, 'setRobots'])->name('admin.optimize_setRobots');//设置robots开关 |
| 273 | + Route::any('/editBacklink', [Aside\Optimize\OptimizeController::class, 'editBacklink'])->name('admin.optimize_editBacklink');//设置backlink开关 | ||
| 269 | Route::any('/editTranslateStatus', [Aside\Optimize\OptimizeController::class, 'editTranslateStatus'])->name('admin.optimize_editTranslateStatus');//设置robots开关 | 274 | Route::any('/editTranslateStatus', [Aside\Optimize\OptimizeController::class, 'editTranslateStatus'])->name('admin.optimize_editTranslateStatus');//设置robots开关 |
| 270 | }); | 275 | }); |
| 271 | //生成关键字 | 276 | //生成关键字 |
| @@ -230,6 +230,7 @@ Route::middleware(['bloginauth'])->group(function () { | @@ -230,6 +230,7 @@ Route::middleware(['bloginauth'])->group(function () { | ||
| 230 | Route::any('/statusNum', [\App\Http\Controllers\Bside\Product\ProductController::class, 'getStatusNumber'])->name('product_statusNum'); | 230 | Route::any('/statusNum', [\App\Http\Controllers\Bside\Product\ProductController::class, 'getStatusNumber'])->name('product_statusNum'); |
| 231 | Route::any('/copyProduct', [\App\Http\Controllers\Bside\Product\ProductController::class, 'copyProduct'])->name('product_copyProduct'); | 231 | Route::any('/copyProduct', [\App\Http\Controllers\Bside\Product\ProductController::class, 'copyProduct'])->name('product_copyProduct'); |
| 232 | Route::any('/batchSetCategory', [\App\Http\Controllers\Bside\Product\ProductController::class, 'batchSetCategory'])->name('product_batchSetCategory'); | 232 | Route::any('/batchSetCategory', [\App\Http\Controllers\Bside\Product\ProductController::class, 'batchSetCategory'])->name('product_batchSetCategory'); |
| 233 | + Route::any('/sendAiProduct', [\App\Http\Controllers\Bside\Product\ProductController::class, 'sendAiProduct'])->name('product_sendAiProduct'); | ||
| 233 | //产品分类 | 234 | //产品分类 |
| 234 | Route::get('category', [\App\Http\Controllers\Bside\Product\CategoryController::class, 'index'])->name('product_category'); | 235 | Route::get('category', [\App\Http\Controllers\Bside\Product\CategoryController::class, 'index'])->name('product_category'); |
| 235 | Route::get('category/info', [\App\Http\Controllers\Bside\Product\CategoryController::class, 'info'])->name('product_category_info'); | 236 | Route::get('category/info', [\App\Http\Controllers\Bside\Product\CategoryController::class, 'info'])->name('product_category_info'); |
-
请 注册 或 登录 后发表评论