|
@@ -19,6 +19,7 @@ use App\Services\ProjectServer; |
|
@@ -19,6 +19,7 @@ use App\Services\ProjectServer; |
|
19
|
use Illuminate\Console\Command;
|
19
|
use Illuminate\Console\Command;
|
|
20
|
use Illuminate\Support\Facades\DB;
|
20
|
use Illuminate\Support\Facades\DB;
|
|
21
|
use Illuminate\Support\Facades\Log;
|
21
|
use Illuminate\Support\Facades\Log;
|
|
|
|
22
|
+use Illuminate\Support\Facades\Redis;
|
|
22
|
|
23
|
|
|
23
|
/**
|
24
|
/**
|
|
24
|
* Class SyncInquiryProject
|
25
|
* Class SyncInquiryProject
|
|
@@ -38,7 +39,7 @@ class SyncInquiryProject extends Command |
|
@@ -38,7 +39,7 @@ class SyncInquiryProject extends Command |
|
38
|
*
|
39
|
*
|
|
39
|
* @var string
|
40
|
* @var string
|
|
40
|
*/
|
41
|
*/
|
|
41
|
- protected $description = '同步询盘信息:项目以及对应路由,';
|
42
|
+ protected $description = '同步询盘信息:项目';
|
|
42
|
|
43
|
|
|
43
|
/**
|
44
|
/**
|
|
44
|
* Create a new command instance.
|
45
|
* Create a new command instance.
|
|
@@ -61,8 +62,6 @@ class SyncInquiryProject extends Command |
|
@@ -61,8 +62,6 @@ class SyncInquiryProject extends Command |
|
61
|
$this->syncGloV5();
|
62
|
$this->syncGloV5();
|
|
62
|
echo '开始同步v6' . PHP_EOL;
|
63
|
echo '开始同步v6' . PHP_EOL;
|
|
63
|
$this->syncGloV6();
|
64
|
$this->syncGloV6();
|
|
64
|
- echo '删除过期数据' . PHP_EOL;
|
|
|
|
65
|
- $this->deleteExpire();
|
|
|
|
66
|
return true;
|
65
|
return true;
|
|
67
|
}
|
66
|
}
|
|
68
|
|
67
|
|
|
@@ -72,73 +71,50 @@ class SyncInquiryProject extends Command |
|
@@ -72,73 +71,50 @@ class SyncInquiryProject extends Command |
|
72
|
*/
|
71
|
*/
|
|
73
|
public function syncGloV5()
|
72
|
public function syncGloV5()
|
|
74
|
{
|
73
|
{
|
|
|
|
74
|
+ $date = intval(date('Ymd'));
|
|
75
|
$result = http_get('https://www.quanqiusou.cn/extend_api/webs/globalso_v5_tg.php');
|
75
|
$result = http_get('https://www.quanqiusou.cn/extend_api/webs/globalso_v5_tg.php');
|
|
76
|
$channel = Channel::pluck('contact_mobile', 'id')->toArray();
|
76
|
$channel = Channel::pluck('contact_mobile', 'id')->toArray();
|
|
77
|
foreach ($result as $key=>$val)
|
77
|
foreach ($result as $key=>$val)
|
|
78
|
{
|
78
|
{
|
|
79
|
echo '同步项目:' . $val['postid'] . ' - ' . $val['company'] . PHP_EOL;
|
79
|
echo '同步项目:' . $val['postid'] . ' - ' . $val['company'] . PHP_EOL;
|
|
80
|
// 记录渠道商, 如果渠道有问题, 记录日志, 跳过当前项目, 处理数据后, 第二天再重新同步
|
80
|
// 记录渠道商, 如果渠道有问题, 记录日志, 跳过当前项目, 处理数据后, 第二天再重新同步
|
|
81
|
- $channel_flag = false;
|
|
|
|
82
|
$channel_tmp = [];
|
81
|
$channel_tmp = [];
|
|
83
|
foreach ($val['agent'] as $v) {
|
82
|
foreach ($val['agent'] as $v) {
|
|
84
|
$channel_id = array_search($v, $channel);
|
83
|
$channel_id = array_search($v, $channel);
|
|
|
|
84
|
+ // 代理信息 只要找到一个, 就需要继续记录
|
|
85
|
if (empty($channel_id)) {
|
85
|
if (empty($channel_id)) {
|
|
86
|
$this->log('ERROR 代理商找不到不记录当前项目, 代理商手机号码:' . $v);
|
86
|
$this->log('ERROR 代理商找不到不记录当前项目, 代理商手机号码:' . $v);
|
|
87
|
- $channel_flag = true;
|
|
|
|
88
|
- break;
|
87
|
+ continue;
|
|
89
|
}
|
88
|
}
|
|
90
|
array_push($channel_tmp, $channel_id);
|
89
|
array_push($channel_tmp, $channel_id);
|
|
91
|
}
|
90
|
}
|
|
92
|
|
91
|
|
|
93
|
- if ($channel_flag || empty($channel_tmp)) {
|
92
|
+ if (empty($channel_tmp)) {
|
|
94
|
$this->log('ERROR 代理商找不到不记录当前项目, 项目ID:' . $val['postid']);
|
93
|
$this->log('ERROR 代理商找不到不记录当前项目, 项目ID:' . $val['postid']);
|
|
95
|
continue;
|
94
|
continue;
|
|
96
|
}
|
95
|
}
|
|
97
|
|
96
|
|
|
98
|
- // 保存项目 以及路由
|
|
|
|
99
|
- $project = InquiryProject::saveProject($val['v'], $val['postid'], $val['company'], implode(',', $channel_tmp), $val['main_url'], $val['is_split'], $val['test_url']);
|
97
|
+ // 保存项目 以及 获取路由信息
|
|
|
|
98
|
+ $project = InquiryProject::saveProject($date, $val['v'], $val['postid'], $val['company'], implode(',', $channel_tmp), $val['main_url'], $val['is_split'], $val['test_url']);
|
|
100
|
$route_domain = $val['is_split'] && $val['test_url'] ? $val['test_url'] : $val['main_url'];
|
99
|
$route_domain = $val['is_split'] && $val['test_url'] ? $val['test_url'] : $val['main_url'];
|
|
101
|
- $this->syncGloV5Route($project->id, $route_domain);
|
|
|
|
102
|
- }
|
|
|
|
103
|
- return true;
|
|
|
|
104
|
- }
|
|
|
|
105
|
-
|
|
|
|
106
|
- /**
|
|
|
|
107
|
- * 同步v4 v5项目路由
|
|
|
|
108
|
- * @param $project_id
|
|
|
|
109
|
- * @param $route_domain
|
|
|
|
110
|
- * @return bool
|
|
|
|
111
|
- */
|
|
|
|
112
|
- public function syncGloV5Route($project_id, $route_domain)
|
|
|
|
113
|
- {
|
|
|
|
114
|
- try{
|
|
|
|
115
|
- $result = http_get($route_domain . 'k_u_api.php');
|
|
|
|
116
|
- if (empty($result)) {
|
|
|
|
117
|
- $this->log('syncGloV5Route 未获取到路由信息:' . $project_id . ', 路由获取地址:' . $route_domain . 'k_u_api.php');
|
|
|
|
118
|
- return false;
|
|
|
|
119
|
- }
|
|
|
|
120
|
- } catch (\Exception $e) {
|
|
|
|
121
|
- $this->log('syncGloV5Route 未获取到路由信息:' . $project_id . ', 路由获取地址:' . $route_domain . 'k_u_api.php' . ', 错误信息:' . $e->getMessage());
|
|
|
|
122
|
- echo 'syncGloV5Route 未获取到路由信息:' . $project_id . ', 路由获取地址:' . $route_domain . 'k_u_api.php' . ', 错误信息:' . $e->getMessage() . PHP_EOL;
|
|
|
|
123
|
- return false;
|
|
|
|
124
|
- }
|
|
|
|
125
|
-
|
|
|
|
126
|
- foreach ($result as $key=>$val) {
|
|
|
|
127
|
- try {
|
|
|
|
128
|
- $tmp = explode('|', $val);
|
|
|
|
129
|
- $url_tmp = parse_url($tmp[0]);
|
|
|
|
130
|
- $route = trim($url_tmp['path'], '/');
|
|
|
|
131
|
- $title = str_replace('+', ' ', $tmp[1]);
|
|
|
|
132
|
- if (strlen($title) > 200 || strlen($route) > 200) {
|
|
|
|
133
|
- $this->log('syncGloV5Route 路由或标题过长,无效记录');
|
|
|
|
134
|
- continue;
|
100
|
+ try{
|
|
|
|
101
|
+ $result = http_get($route_domain . 'k_u_api.php');
|
|
|
|
102
|
+ if (empty($result)) {
|
|
|
|
103
|
+ $this->log('syncGloV5Route 未获取到路由信息:' . $project->id . ', 路由获取地址:' . $route_domain . 'k_u_api.php');
|
|
|
|
104
|
+ return false;
|
|
135
|
}
|
105
|
}
|
|
136
|
- InquiryProjectRoute::saveProjectRoute($project_id, $title, $route);
|
106
|
+ file_put_contents(storage_path('logs/sync_inquiry_project_route/' . $project->id . '.json'), json_encode($result));
|
|
|
|
107
|
+ $this->pushTask($project->id);
|
|
137
|
} catch (\Exception $e) {
|
108
|
} catch (\Exception $e) {
|
|
138
|
- $this->log('syncGloV5Route 解析路径:' . $val . ', 错误信息:' . $e->getMessage());
|
|
|
|
139
|
- echo 'syncGloV5Route 解析路径:' . $val . ', 错误信息:' . $e->getMessage() . PHP_EOL;
|
109
|
+ $this->log('syncGloV5Route 未获取到路由信息:' . $project->id . ', 路由获取地址:' . $route_domain . 'k_u_api.php' . ', 错误信息:' . $e->getMessage());
|
|
|
|
110
|
+ echo 'syncGloV5Route 未获取到路由信息:' . $project->id . ', 路由获取地址:' . $route_domain . 'k_u_api.php' . ', 错误信息:' . $e->getMessage() . PHP_EOL;
|
|
|
|
111
|
+ return false;
|
|
140
|
}
|
112
|
}
|
|
141
|
}
|
113
|
}
|
|
|
|
114
|
+
|
|
|
|
115
|
+ $ids = InquiryProject::where('date', '<', $date)->where('version', '<', InquiryProject::VERSION_SIX)->pluck('id')->toArray();
|
|
|
|
116
|
+ $this->deleteExpire($ids);
|
|
|
|
117
|
+
|
|
142
|
return true;
|
118
|
return true;
|
|
143
|
}
|
119
|
}
|
|
144
|
|
120
|
|
|
@@ -148,6 +124,7 @@ class SyncInquiryProject extends Command |
|
@@ -148,6 +124,7 @@ class SyncInquiryProject extends Command |
|
148
|
*/
|
124
|
*/
|
|
149
|
public function syncGloV6()
|
125
|
public function syncGloV6()
|
|
150
|
{
|
126
|
{
|
|
|
|
127
|
+ $date = intval(date('Ymd'));
|
|
151
|
// 获取优化中台项目
|
128
|
// 获取优化中台项目
|
|
152
|
$project = Project::leftJoin('gl_project_online_check', 'gl_project.id', '=', 'gl_project_online_check.project_id')
|
129
|
$project = Project::leftJoin('gl_project_online_check', 'gl_project.id', '=', 'gl_project_online_check.project_id')
|
|
153
|
->where('gl_project.type', Project::TYPE_TWO)
|
130
|
->where('gl_project.type', Project::TYPE_TWO)
|
|
@@ -165,55 +142,40 @@ class SyncInquiryProject extends Command |
|
@@ -165,55 +142,40 @@ class SyncInquiryProject extends Command |
|
165
|
// 过滤暂停优化项目, 映射类型2, model没有定义常量
|
142
|
// 过滤暂停优化项目, 映射类型2, model没有定义常量
|
|
166
|
if (in_array(2, $val->level))
|
143
|
if (in_array(2, $val->level))
|
|
167
|
continue;
|
144
|
continue;
|
|
168
|
- $project = InquiryProject::saveProject(InquiryProject::VERSION_SIX, $val->id, $val->title, $val->channel['channel_id'], $domains[$val->id]);
|
|
|
|
169
|
- $this->syncGloV6Route($project->id, $val->id);
|
145
|
+ $project = InquiryProject::saveProject($date,InquiryProject::VERSION_SIX, $val->id, $val->title, $val->channel['channel_id'], $domains[$val->id]);
|
|
|
|
146
|
+ $this->pushTask($project->id);
|
|
170
|
}
|
147
|
}
|
|
|
|
148
|
+
|
|
|
|
149
|
+ $ids = InquiryProject::where('date', '<', $date)->where('version', '=', InquiryProject::VERSION_SIX)->pluck('id')->toArraty();
|
|
|
|
150
|
+ $this->deleteExpire($ids);
|
|
|
|
151
|
+
|
|
171
|
return true;
|
152
|
return true;
|
|
172
|
}
|
153
|
}
|
|
173
|
|
154
|
|
|
|
|
155
|
+
|
|
174
|
/**
|
156
|
/**
|
|
175
|
- * 同步v6项目路由
|
|
|
|
176
|
- * @param $project_id
|
|
|
|
177
|
- * @param $origin_project_id
|
157
|
+ * 删除过期数据, 非当日更新数据, 都删除, 误删第二天再重新同步更新
|
|
|
|
158
|
+ * @param $ids
|
|
178
|
* @return bool
|
159
|
* @return bool
|
|
179
|
*/
|
160
|
*/
|
|
180
|
- public function syncGloV6Route($project_id, $origin_project_id)
|
161
|
+ public function deleteExpire($ids)
|
|
181
|
{
|
162
|
{
|
|
182
|
- ProjectServer::useProject($origin_project_id);
|
|
|
|
183
|
- // TODO 产品分类标题、路由, 产品标题、路由, 同步到路由表
|
|
|
|
184
|
- $category = Category::where('status', Category::STATUS_ACTIVE)->get(['title', 'route']);
|
|
|
|
185
|
- foreach ($category as $key=>$val) {
|
|
|
|
186
|
- InquiryProjectRoute::saveProjectRoute($project_id, $val->title, $val->route);
|
|
|
|
187
|
- }
|
|
|
|
188
|
-
|
|
|
|
189
|
- // 产品数量会比较多, 所以使用分页 同步数据
|
|
|
|
190
|
- $id = 0;
|
|
|
|
191
|
- while (true) {
|
|
|
|
192
|
- echo '同步项目路由:' . $id . PHP_EOL;
|
|
|
|
193
|
- $product = Product::where('status', Product::STATUS_ON)->where('id', '>', $id)->orderBy('id', 'asc')->limit(1000)->get(['id', 'title', 'route']);
|
|
|
|
194
|
- if ($product->isEmpty())
|
|
|
|
195
|
- break;
|
|
|
|
196
|
-
|
|
|
|
197
|
- foreach ($product as $key=>$val) {
|
|
|
|
198
|
- $id = $val->id;
|
|
|
|
199
|
- InquiryProjectRoute::saveProjectRoute($project_id, $val->title, $val->route);
|
|
|
|
200
|
- }
|
|
|
|
201
|
- }
|
|
|
|
202
|
-
|
|
|
|
203
|
- DB::disconnect('custom_mysql');
|
163
|
+ if (empty($ids))
|
|
|
|
164
|
+ return true;
|
|
|
|
165
|
+ $project_num = InquiryProject::whereIn('id', $ids)->delete();
|
|
|
|
166
|
+ $project_route_num = InquiryProjectRoute::whereIn('project_id', $ids)->delete();
|
|
|
|
167
|
+ $this->log('删除过期项目数量:' . $project_num . ', 删除过期项目路由数量:' . $project_route_num);
|
|
204
|
return true;
|
168
|
return true;
|
|
205
|
}
|
169
|
}
|
|
206
|
|
170
|
|
|
207
|
/**
|
171
|
/**
|
|
208
|
- * 删除过期数据, 非当日更新数据, 都删除, 误删第二天再重新同步更新
|
172
|
+ * 往任务队列中生产数据
|
|
|
|
173
|
+ * @param $id
|
|
209
|
* @return bool
|
174
|
* @return bool
|
|
210
|
*/
|
175
|
*/
|
|
211
|
- public function deleteExpire()
|
176
|
+ public function pushTask($id)
|
|
212
|
{
|
177
|
{
|
|
213
|
- $date = intval(date('Ymd'));
|
|
|
|
214
|
- $project_num = InquiryProject::where('date', '<', $date)->delete();
|
|
|
|
215
|
- $project_route_num = InquiryProjectRoute::where('date', '<', $date)->delete();
|
|
|
|
216
|
- $this->log('删除过期项目数量:' . $project_num . ', 删除过期路由数量:' . $project_route_num);
|
178
|
+ Redis::lPush('sync_inquiry_project_route_task', $id);
|
|
217
|
return true;
|
179
|
return true;
|
|
218
|
}
|
180
|
}
|
|
219
|
|
181
|
|