作者 刘锟

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

@@ -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); 266 + $projectModel = new Project();
  267 + $list = $projectModel->list(['type'=>['in',[2,3]]]);
  268 + foreach ($list as $k => $v){
286 $domainModel = new DomainInfo(); 269 $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; 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;
300 } 277 }
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 } 278 }
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;  
320 } 279 }
321 - }else{  
322 - $products = Product::where("project_id", $project_id)->where("status",1)->inRandomOrder()->take(13)->get();  
323 - }  
324 - }  
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)){ 87 + foreach ($this->param['keyword'] as $k=>$keyword){
  88 + foreach ($except_k as $exc_k){
  89 + if(strpos(strtolower($keyword),strtolower($exc_k)) !== false){
89 unset($this->param['keyword'][$k]); 90 unset($this->param['keyword'][$k]);
90 - $filterKeywords[] = $v; 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,10 +482,12 @@ class RankDataLogic extends BaseLogic @@ -480,10 +482,12 @@ 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 //项目表更新
  485 + if(!$lang){
483 $compliance_day = Project::where(['id' => $project_id])->value('finish_remain_day') ?: 0; 486 $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]); 487 Project::where('id', $project_id)->update(['is_remain_today' => 1, 'finish_remain_day' => $compliance_day+1]);
485 } 488 }
486 } 489 }
  490 + }
487 491
488 $model->project_id = $project_id; 492 $model->project_id = $project_id;
489 $model->first_num = $first_num; 493 $model->first_num = $first_num;
@@ -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 }
@@ -30,7 +30,7 @@ class DomainInfo extends Base @@ -30,7 +30,7 @@ class DomainInfo extends Base
30 const DELETED_DELETE = 1; 30 const DELETED_DELETE = 1;
31 31
32 protected $hidden = [ 32 protected $hidden = [
33 - 'created_at', 33 +// 'created_at',
34 'updated_at' 34 'updated_at'
35 ]; 35 ];
36 36
  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,9 +55,11 @@ class RouteMap extends Base @@ -55,9 +55,11 @@ 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)) { 58 + }else{
  59 + if(!preg_match('/^[a-zA-Z\s]+$/', $title)){
59 $title = Translate::tran($title, 'en'); 60 $title = Translate::tran($title, 'en');
60 } 61 }
  62 + }
61 $i=1; 63 $i=1;
62 $sign = generateRoute($title); 64 $sign = generateRoute($title);
63 $info = self::where(['project_id' => $project_id, 'source' => $source, 'source_id'=>$source_id])->first(); 65 $info = self::where(['project_id' => $project_id, 'source' => $source, 'source_id'=>$source_id])->first();
@@ -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');