|
@@ -15,7 +15,7 @@ class FetchTicketProjects extends Command |
|
@@ -15,7 +15,7 @@ class FetchTicketProjects extends Command |
|
15
|
*
|
15
|
*
|
|
16
|
* @var string
|
16
|
* @var string
|
|
17
|
*/
|
17
|
*/
|
|
18
|
- protected $signature = 'workorder:fetch-ticket-projects {version}';
|
18
|
+ protected $signature = 'workorder:fetch-ticket-projects {action}}';
|
|
19
|
|
19
|
|
|
20
|
/**
|
20
|
/**
|
|
21
|
* The console command description.
|
21
|
* The console command description.
|
|
@@ -41,15 +41,8 @@ class FetchTicketProjects extends Command |
|
@@ -41,15 +41,8 @@ class FetchTicketProjects extends Command |
|
41
|
*/
|
41
|
*/
|
|
42
|
public function handle()
|
42
|
public function handle()
|
|
43
|
{
|
43
|
{
|
|
44
|
- $version = $this->argument('version');
|
|
|
|
45
|
- if ($version == 'v5') {
|
|
|
|
46
|
- $this->fetch_v5();
|
|
|
|
47
|
- } elseif ($version == 'v6') {
|
|
|
|
48
|
- $this->fetch_v6();
|
|
|
|
49
|
- } else {
|
|
|
|
50
|
- $this->error('Invalid action. Use "v5" or "v6".');
|
|
|
|
51
|
- return 1;
|
|
|
|
52
|
- }
|
44
|
+ $action = $this->argument('action');
|
|
|
|
45
|
+ $this->$action();
|
|
53
|
return 0;
|
46
|
return 0;
|
|
54
|
}
|
47
|
}
|
|
55
|
|
48
|
|
|
@@ -58,7 +51,7 @@ class FetchTicketProjects extends Command |
|
@@ -58,7 +51,7 @@ class FetchTicketProjects extends Command |
|
58
|
* @return void
|
51
|
* @return void
|
|
59
|
* 请求:https://www.quanqiusou.cn/extend_api/webs/globalso_all.php
|
52
|
* 请求:https://www.quanqiusou.cn/extend_api/webs/globalso_all.php
|
|
60
|
*/
|
53
|
*/
|
|
61
|
- public function fetch_v5()
|
54
|
+ public function fetchV5()
|
|
62
|
{
|
55
|
{
|
|
63
|
# pm 项目经理 assm 售后服务经理
|
56
|
# pm 项目经理 assm 售后服务经理
|
|
64
|
$response = Http::get('https://www.quanqiusou.cn/extend_api/webs/globalso_all.php');
|
57
|
$response = Http::get('https://www.quanqiusou.cn/extend_api/webs/globalso_all.php');
|
|
@@ -68,22 +61,25 @@ class FetchTicketProjects extends Command |
|
@@ -68,22 +61,25 @@ class FetchTicketProjects extends Command |
|
68
|
# V5: 版本号+postid
|
61
|
# V5: 版本号+postid
|
|
69
|
$uuid = md5("V5{$item['postid']}");
|
62
|
$uuid = md5("V5{$item['postid']}");
|
|
70
|
$project = TicketProject::where('uuid', $uuid)->first();
|
63
|
$project = TicketProject::where('uuid', $uuid)->first();
|
|
71
|
-
|
|
|
|
72
|
- $item['pm'] = $item['pm'] == '未安排' ? '杨长远' : $item['pm'];
|
|
|
|
73
|
- $item['assm'] = $item['assm'] == '未安排' ? '杨长远' : $item['assm'];
|
|
|
|
74
|
- $item['yhs'] = $item['yhs'] == '未安排' ? '杨长远' : $item['yhs'];
|
|
|
|
75
|
-
|
|
|
|
76
|
- // 如果 $item['cate'] 包含”推广“字符,则$engineer_name = $item['assm']
|
|
|
|
77
|
- $engineer_name = (strpos($item['cate'], '推广') !== false) ? $item['yhs'] : $item['assm'];
|
64
|
+ $assm_id = Manage::where('name', $item['assm'])->value('id') ?? Manage::where('name', '张鸿飞')->value('id') ?? 0; //售后服务经理
|
|
|
|
65
|
+ $seom_id = Manage::where('name', $item['yhs'])->value('id') ?? Manage::where('name', '陶婵')->value('id') ?? 0; //优化师
|
|
|
|
66
|
+ // 如果 $item['cate'] 包含”推广“字符,则 $engineer_name = $item['assm']
|
|
|
|
67
|
+ /**
|
|
|
|
68
|
+ * 第一负责人逻即说明:
|
|
|
|
69
|
+ * 优化推广项目:找售后服务经理??鸿飞
|
|
|
|
70
|
+ * 建站类项目: 找杨长远
|
|
|
|
71
|
+ */
|
|
|
|
72
|
+ $engineer_id = (strpos($item['cate'], '推广') !== false) ? $assm_id : Manage::where('name', '杨长远')->value('id') ?? 0;
|
|
78
|
|
73
|
|
|
79
|
$fields = [
|
74
|
$fields = [
|
|
80
|
'post_id' => $item['postid'],
|
75
|
'post_id' => $item['postid'],
|
|
81
|
'company_name' => $item['company'],
|
76
|
'company_name' => $item['company'],
|
|
82
|
'title' => $item['title'],
|
77
|
'title' => $item['title'],
|
|
83
|
- 'engineer_id' => Manage::where('name', $engineer_name)->value('id') ?? 0, // 第一负责人
|
|
|
|
84
|
- 'assm_id' => Manage::where('name', $item['assm'])->value('id') ?? 0, //售后服务经理
|
|
|
|
85
|
- 'seom_id' => Manage::where('name', $item['yhs'])->value('id') ?? 0, //售后服务经理
|
78
|
+ 'engineer_id' => $engineer_id, // 第一负责人
|
|
|
|
79
|
+ 'assm_id' => $assm_id,
|
|
|
|
80
|
+ 'seom_id' => $seom_id,
|
|
86
|
'website' => $item['main_url'] ?? '',
|
81
|
'website' => $item['main_url'] ?? '',
|
|
|
|
82
|
+ 'is_del' => 0,
|
|
87
|
];
|
83
|
];
|
|
88
|
if (!$project) {
|
84
|
if (!$project) {
|
|
89
|
$new = new TicketProject();
|
85
|
$new = new TicketProject();
|
|
@@ -106,8 +102,13 @@ class FetchTicketProjects extends Command |
|
@@ -106,8 +102,13 @@ class FetchTicketProjects extends Command |
|
106
|
$project->save();
|
102
|
$project->save();
|
|
107
|
}
|
103
|
}
|
|
108
|
}
|
104
|
}
|
|
109
|
- echo "V5: {$item['postid']} - {$item['title']} - {$item['company']} - {$item['main_url']}\n";
|
|
|
|
110
|
}
|
105
|
}
|
|
|
|
106
|
+ $postids = collect($items)->pluck('postid')->toArray();
|
|
|
|
107
|
+ // 软删除 gl_ticket_projects 中不存在的项目
|
|
|
|
108
|
+ TicketProject::where('version', 5)
|
|
|
|
109
|
+ ->whereNotIn('post_id', $postids)
|
|
|
|
110
|
+ ->update(['is_del' => 1]);
|
|
|
|
111
|
+ echo date("Y-m-d H:i:s") . " V5: fetch completed, total " . count($items) . " items\n";
|
|
111
|
}
|
112
|
}
|
|
112
|
}
|
113
|
}
|
|
113
|
|
114
|
|
|
@@ -116,12 +117,15 @@ class FetchTicketProjects extends Command |
|
@@ -116,12 +117,15 @@ class FetchTicketProjects extends Command |
|
116
|
* 1. 按照ID升序查询 gl_project 表 limit 10
|
117
|
* 1. 按照ID升序查询 gl_project 表 limit 10
|
|
117
|
* 2。同步到 TicketProject 后,redis 缓存 ID
|
118
|
* 2。同步到 TicketProject 后,redis 缓存 ID
|
|
118
|
*/
|
119
|
*/
|
|
119
|
- public function fetch_v6()
|
120
|
+ public function fetchV6()
|
|
120
|
{
|
121
|
{
|
|
121
|
$lastid = 0;
|
122
|
$lastid = 0;
|
|
122
|
while (true) {
|
123
|
while (true) {
|
|
123
|
try {
|
124
|
try {
|
|
124
|
$items = Project::where('id', '>', intval($lastid))
|
125
|
$items = Project::where('id', '>', intval($lastid))
|
|
|
|
126
|
+// ->where('delete_status', 0)
|
|
|
|
127
|
+// ->where('extend_type', '!=', 5) // 排除归档项目
|
|
|
|
128
|
+// ->where('type', '!=', 8) // 排除归档项目
|
|
125
|
->orderBy('id', 'asc')
|
129
|
->orderBy('id', 'asc')
|
|
126
|
->limit(10)
|
130
|
->limit(10)
|
|
127
|
->get();
|
131
|
->get();
|
|
@@ -130,16 +134,47 @@ class FetchTicketProjects extends Command |
|
@@ -130,16 +134,47 @@ class FetchTicketProjects extends Command |
|
130
|
break;
|
134
|
break;
|
|
131
|
}
|
135
|
}
|
|
132
|
foreach ($items as $item) {
|
136
|
foreach ($items as $item) {
|
|
133
|
- $uuid = md5("V5{$item->id}");
|
137
|
+ $uuid = md5("V6{$item->id}");
|
|
134
|
$project = TicketProject::where('uuid', $uuid)->first();
|
138
|
$project = TicketProject::where('uuid', $uuid)->first();
|
|
|
|
139
|
+ // 售后服务经理
|
|
|
|
140
|
+ $assm_id = collect([
|
|
|
|
141
|
+ $item->deploy_optimize->manager_mid ?? 0,
|
|
|
|
142
|
+ $item->deploy_optimize->tech_leader ?? 0,
|
|
|
|
143
|
+ Manage::where('name', '张鸿飞')->value('id') ?? 0,
|
|
|
|
144
|
+ 0
|
|
|
|
145
|
+ ])->first(fn($v) => $v !== null && $v !== 0, 0);
|
|
|
|
146
|
+ $seom_id = !empty($item->deploy_optimize->optimist_mid) ? $item->deploy_optimize->optimist_mid : $assm_id;
|
|
|
|
147
|
+ /**
|
|
|
|
148
|
+ * 第一负责人逻辑
|
|
|
|
149
|
+ * 建站类项目:找杨长远
|
|
|
|
150
|
+ * 推广类:找售后
|
|
|
|
151
|
+ */
|
|
|
|
152
|
+ if (in_array($item->type, [Project::TYPE_TWO, Project::TYPE_FOUR, Project::TYPE_SIX])) {
|
|
|
|
153
|
+ // 优化推广项目
|
|
|
|
154
|
+ $engineer_id = $assm_id;
|
|
|
|
155
|
+ } elseif ($item->type == Project::TYPE_THREE) {
|
|
|
|
156
|
+ $engineer_id = Manage::where('name', '杨长远')->value('id') ?? 0; // 建站类项目找杨长远
|
|
|
|
157
|
+ } else {
|
|
|
|
158
|
+ $engineer_id = collect([
|
|
|
|
159
|
+ $item->deploy_build->manager_mid ?? 0,
|
|
|
|
160
|
+ $item->deploy_build->leader_mid ?? 0,
|
|
|
|
161
|
+ 0
|
|
|
|
162
|
+ ])->first(fn($v) => $v !== null && $v !== 0, 0);
|
|
|
|
163
|
+ }
|
|
|
|
164
|
+ $is_del = (
|
|
|
|
165
|
+ $item->extend_type == 5
|
|
|
|
166
|
+ || $item->type == 8
|
|
|
|
167
|
+ || $item->delete_status == 1
|
|
|
|
168
|
+ || $item->site_status == 1
|
|
|
|
169
|
+ ) ? 1 : 0;
|
|
|
|
170
|
+
|
|
135
|
$fields = [
|
171
|
$fields = [
|
|
136
|
'company_name' => $item->company,
|
172
|
'company_name' => $item->company,
|
|
137
|
'title' => $item->title,
|
173
|
'title' => $item->title,
|
|
138
|
- 'assm_id' => $item->type ==3 ? $item->deploy_optimize->manager_mid ?? 0 : $item->deploy_build->manager_mid ?? 0, // 售后服务经理
|
|
|
|
139
|
- 'seom_id' => $item->deploy_optimize->optimist_mid ?? $item->deploy_optimize->manager_mid ?? $item->deploy_optimize->tech_leader ?? 0, // 优化推广负责人
|
|
|
|
140
|
- 'engineer_id' => $item->type == 3 ?
|
|
|
|
141
|
- $item->deploy_optimize->optimist_mid ?? $item->deploy_optimize->manager_mid ?? $item->deploy_optimize->tech_leader ?? 0
|
|
|
|
142
|
- : $item->deploy_build->manager_mid ?? $item->deploy_build->leader_mid ?? 0, // 技术组长
|
174
|
+ 'assm_id' => $assm_id,
|
|
|
|
175
|
+ 'seom_id' => $seom_id,
|
|
|
|
176
|
+ 'engineer_id' => $engineer_id,
|
|
|
|
177
|
+ 'is_del' => $is_del
|
|
143
|
];
|
178
|
];
|
|
144
|
if (!$project) {
|
179
|
if (!$project) {
|
|
145
|
$project = new TicketProject();
|
180
|
$project = new TicketProject();
|
|
@@ -151,7 +186,7 @@ class FetchTicketProjects extends Command |
|
@@ -151,7 +186,7 @@ class FetchTicketProjects extends Command |
|
151
|
$project->$k = $v;
|
186
|
$project->$k = $v;
|
|
152
|
}
|
187
|
}
|
|
153
|
$project->save();
|
188
|
$project->save();
|
|
154
|
- }else{
|
189
|
+ } else {
|
|
155
|
$changed = false;
|
190
|
$changed = false;
|
|
156
|
foreach ($fields as $k => $v) {
|
191
|
foreach ($fields as $k => $v) {
|
|
157
|
if ($project->$k != $v) {
|
192
|
if ($project->$k != $v) {
|
|
@@ -166,7 +201,35 @@ class FetchTicketProjects extends Command |
|
@@ -166,7 +201,35 @@ class FetchTicketProjects extends Command |
|
166
|
$lastid = $item->id;
|
201
|
$lastid = $item->id;
|
|
167
|
echo date('Y-m-d H:i:s') . " V6: $item->id {$item->company} fetch ok \n";
|
202
|
echo date('Y-m-d H:i:s') . " V6: $item->id {$item->company} fetch ok \n";
|
|
168
|
}
|
203
|
}
|
|
169
|
- }catch (\Exception $exception) {
|
204
|
+ } catch (\Exception $exception) {
|
|
|
|
205
|
+ echo $exception;
|
|
|
|
206
|
+ break;
|
|
|
|
207
|
+ }
|
|
|
|
208
|
+ }
|
|
|
|
209
|
+ }
|
|
|
|
210
|
+
|
|
|
|
211
|
+ public function fetch_uuid()
|
|
|
|
212
|
+ {
|
|
|
|
213
|
+ $lastid = 0;
|
|
|
|
214
|
+ while (true) {
|
|
|
|
215
|
+ try {
|
|
|
|
216
|
+ $items = TicketProject::where('id', '>', $lastid)
|
|
|
|
217
|
+ ->where('version', 6)
|
|
|
|
218
|
+ ->orderBy('id', 'asc')
|
|
|
|
219
|
+ ->limit(10)
|
|
|
|
220
|
+ ->get();
|
|
|
|
221
|
+ if ($items->isEmpty()) {
|
|
|
|
222
|
+ echo "not found items \n";
|
|
|
|
223
|
+ break;
|
|
|
|
224
|
+ }
|
|
|
|
225
|
+ foreach ($items as $item) {
|
|
|
|
226
|
+ $uuid = md5("V6{$item->table_id}");
|
|
|
|
227
|
+ $item->uuid = $uuid;
|
|
|
|
228
|
+ $item->save();
|
|
|
|
229
|
+ $lastid = $item->id;
|
|
|
|
230
|
+ echo date('Y-m-d H:i:s') . " V6: $item->id fetch ok \n";
|
|
|
|
231
|
+ }
|
|
|
|
232
|
+ } catch (\Exception $exception) {
|
|
170
|
echo $exception;
|
233
|
echo $exception;
|
|
171
|
break;
|
234
|
break;
|
|
172
|
}
|
235
|
}
|