作者 刘锟

update

1 -<?php  
2 -  
3 -namespace App\Console\Commands\Update;  
4 -  
5 -use App\Models\Blog\Blog;  
6 -use App\Models\Com\UpdateLog;  
7 -use App\Models\News\News;  
8 -use App\Services\ProjectServer;  
9 -use Illuminate\Console\Command;  
10 -use Illuminate\Support\Facades\DB;  
11 -  
12 -/**  
13 - * 4.0,5.0升级到6.0,内容同步  
14 - * Class ProjectImport  
15 - * @package App\Console\Commands  
16 - * @author Akun  
17 - * @date 2023/10/9 15:04  
18 - */  
19 -class Temp extends Command  
20 -{  
21 - /**  
22 - * The name and signature of the console command.  
23 - *  
24 - * @var string  
25 - */  
26 - protected $signature = 'project_update_temp';  
27 -  
28 - /**  
29 - * The console command description.  
30 - *  
31 - * @var string  
32 - */  
33 - protected $description = '执行项目升级任务';  
34 -  
35 -  
36 - public function handle()  
37 - {  
38 - $this->start_update();  
39 - }  
40 -  
41 - protected function start_update()  
42 - {  
43 - $list = UpdateLog::where('project_id', '!=', 437)->where('api_type', 'news')->get();  
44 -  
45 - foreach ($list as $task) {  
46 - $project_id = $task->project_id;  
47 - $api_type = $task->api_type;  
48 - $api_url_arr = explode('?', $task->api_url);  
49 - $api_url = $api_url_arr[0];  
50 -  
51 - $page_size = 20;  
52 -  
53 - echo 'date:' . date('Y-m-d H:i:s') . ', task_id: ' . $task->id . ', task_type: ' . $api_type . ', update start' . PHP_EOL;  
54 -  
55 -  
56 - //设置数据库  
57 - $project = ProjectServer::useProject($project_id);  
58 - if ($project) {  
59 - //新闻或博客  
60 - $url = $api_url . '?' . http_build_query(['w' => $api_type, 'page' => 1, 'pagesize' => 0]);  
61 - $data = curl_c($url);  
62 - if (isset($data['code']) && $data['code'] == 200) {  
63 - $count = $data['data']['count'] ?? 0;  
64 -  
65 - $total_page = ceil($count / $page_size);  
66 - for ($page = 1; $page <= $total_page; $page++) {  
67 - $url_page = $api_url . '?' . http_build_query(['w' => $api_type, 'page' => $page, 'pagesize' => $page_size]);  
68 - $data_page = curl_c($url_page);  
69 - if (isset($data_page['code']) && $data_page['code'] == 200) {  
70 - $items = $data_page['data']['data'] ?? [];  
71 -  
72 - if ($api_type == 'news') {  
73 - $model = new News();  
74 - } else {  
75 - $model = new Blog();  
76 - }  
77 -  
78 - foreach ($items as $item) {  
79 -  
80 - if ($item['ttile'] ?? '') {  
81 - $news = $model->read(['name' => $item['ttile']], 'id');  
82 - if ($news) {  
83 - try {  
84 - if (is_array($item['images'])) {  
85 - $image = $item['images'][0] ?? '';  
86 - } else {  
87 - $image = $item['images'] ?? '';  
88 - }  
89 - if (strpos($image, '//') === 0) {  
90 - $image = 'https:' . $image;  
91 - }  
92 - $model->edit(['image' => $image], ['id' => $news['id']]);  
93 - } catch (\Exception $e) {  
94 - echo 'date:' . date('Y-m-d H:i:s') . ', task_id: ' . $task->id . ', error: ' . $e->getMessage() . PHP_EOL;  
95 - continue;  
96 - }  
97 - }  
98 - }  
99 - }  
100 - }  
101 - }  
102 - } else {  
103 - continue;  
104 - }  
105 - }  
106 - //关闭数据库  
107 - DB::disconnect('custom_mysql');  
108 -  
109 - echo 'date:' . date('Y-m-d H:i:s') . ', task_id: ' . $task->id . ', task_type: ' . $api_type . ', update end ' . PHP_EOL;  
110 - }  
111 - }  
112 -}