作者 刘锟

update

@@ -3,20 +3,12 @@ @@ -3,20 +3,12 @@
3 namespace App\Console\Commands\Test; 3 namespace App\Console\Commands\Test;
4 4
5 use App\Helper\Arr; 5 use App\Helper\Arr;
6 -use App\Models\Collect\CollectTask;  
7 use App\Models\Com\Notify; 6 use App\Models\Com\Notify;
8 -use App\Models\Com\UpdateLog;  
9 -use App\Models\Com\UpdateVisit;  
10 use App\Models\Devops\ServerConfig; 7 use App\Models\Devops\ServerConfig;
  8 +use App\Models\Devops\ServersIp;
11 use App\Models\Domain\DomainInfo; 9 use App\Models\Domain\DomainInfo;
12 -use App\Models\Product\Product;  
13 use App\Models\Project\Project; 10 use App\Models\Project\Project;
14 -use App\Services\ProjectServer;  
15 -use App\Utils\HttpUtils;  
16 -use GuzzleHttp\Exception\GuzzleException;  
17 use Illuminate\Console\Command; 11 use Illuminate\Console\Command;
18 -use Illuminate\Support\Facades\DB;  
19 -use Symfony\Component\Process\Process;  
20 12
21 class Temp extends Command 13 class Temp extends Command
22 { 14 {
@@ -34,55 +26,72 @@ class Temp extends Command @@ -34,55 +26,72 @@ class Temp extends Command
34 */ 26 */
35 protected $description = '临时脚本'; 27 protected $description = '临时脚本';
36 28
37 - public function handle(){  
38 - ProjectServer::useProject(1515);  
39 -  
40 - $products = Product::select(['id','content'])->get(); 29 + public function handle()
  30 + {
  31 + $notify_model = new Notify();
41 32
42 - foreach ($products as $product){  
43 - $content = $product->content;  
44 - $content = str_replace('<h1','<h2', $content);  
45 - $content = str_replace('</h1','</h2', $content); 33 + $domain_list = DomainInfo::where('status', 1)->where('amp_status', 1)->get();
46 34
47 - $product->content = $content;  
48 - $product->save(); 35 + foreach ($domain_list as $domain) {
  36 + $project_id = $domain->project_id;
  37 + $domain = $domain->domain;
49 38
50 - $this->output('productID:'.$product->id.',success');  
51 - } 39 + $this->output('项目id:' . $project_id . ',start');
52 40
53 - $this->output('end');  
54 - } 41 + //获取项目所在服务器
  42 + $project_model = new Project();
  43 + $project_info = $project_model->read(['id' => $project_id], ['serve_id']);
  44 + if (!$project_info) {
  45 + $this->output('未查询到项目数据');
  46 + }
  47 + $serve_ip_model = new ServersIp();
  48 + $serve_ip_info = $serve_ip_model->read(['id' => $project_info['serve_id']], ['servers_id']);
  49 + if (!$serve_ip_info) {
  50 + $this->output('未查询到服务器数据');
  51 + }
  52 + $servers_id = $serve_ip_info['servers_id'];
55 53
56 - public function check_cname($domain, $server_info)  
57 - {  
58 - $checkA = false;  
59 - $checkCname = false; 54 + if ($servers_id == ServerConfig::SELF_SITE_ID) {
  55 + //自建站服务器:如果项目已经上线,不请求C端接口,数据直接入库
  56 + //判断是否已有更新进行中
  57 + $data = [
  58 + 'project_id' => $project_id,
  59 + 'type' => 3,
  60 + 'route' => 1,
  61 + 'server_id' => ServerConfig::SELF_SITE_ID,
  62 + 'status' => ['!=', Notify::STATUS_FINISH_SITEMAP]
  63 + ];
  64 + $notify = $notify_model->read($data, ['id']);
60 65
61 - $process = new Process(['nslookup', '-qt=a', $domain]);  
62 - $process->run();  
63 - $output = explode(PHP_EOL, $process->getOutput());  
64 - foreach ($output as $line) {  
65 - if ($line) {  
66 - $checkA = strpos($line, $server_info['ip']) !== false;  
67 - if ($checkA) {  
68 - return $domain;  
69 - }  
70 - }  
71 - } 66 + if (!$notify) {
  67 + $domain_array = parse_url($domain);
  68 + $host = $domain_array['host'] ?? $domain_array['path'];
  69 + $host_array = explode('.', $host);
  70 + if (count($host_array) <= 2) {
  71 + array_unshift($host_array, 'm');
  72 + } else {
  73 + $host_array[0] = 'm';
  74 + }
  75 + $domain = implode('.', $host_array);
72 76
73 - //是否cname  
74 - $process = new Process(['nslookup', '-qt=cname', $domain]);  
75 - $process->run();  
76 - $output = explode(PHP_EOL, $process->getOutput());  
77 - foreach ($output as $line) {  
78 - if ($line) {  
79 - $checkCname = (strpos($line, $server_info['domain']) !== false);  
80 - if ($checkCname) {  
81 - return $domain; 77 + $data['data'] = Arr::a2s(['domain' => $domain, 'url' => [], 'language' => []]);
  78 + $data['status'] = Notify::STATUS_INIT;
  79 + $notify_model->add($data);
82 } 80 }
  81 + } else {
  82 + //其他服务器:请求对应C端接口
  83 + $c_url = $domain . '/api/update_page/';
  84 + $param = [
  85 + 'project_id' => $project_id,
  86 + 'type' => 3,
  87 + 'route' => 1,
  88 + 'url' => [],
  89 + 'language' => []
  90 + ];
  91 + http_post($c_url, json_encode($param));
83 } 92 }
  93 + $this->output('项目id:' . $project_id . ',end');
84 } 94 }
85 - return false;  
86 } 95 }
87 96
88 public function output($msg) 97 public function output($msg)