|
...
|
...
|
@@ -15,7 +15,7 @@ class FetchTicketProjects extends Command |
|
|
|
*
|
|
|
|
* @var string
|
|
|
|
*/
|
|
|
|
protected $signature = 'workorder:fetch-ticket-projects {version}';
|
|
|
|
protected $signature = 'workorder:fetch-ticket-projects {action}}';
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The console command description.
|
|
...
|
...
|
@@ -41,15 +41,8 @@ class FetchTicketProjects extends Command |
|
|
|
*/
|
|
|
|
public function handle()
|
|
|
|
{
|
|
|
|
$version = $this->argument('version');
|
|
|
|
if ($version == 'v5') {
|
|
|
|
$this->fetch_v5();
|
|
|
|
} elseif ($version == 'v6') {
|
|
|
|
$this->fetch_v6();
|
|
|
|
} else {
|
|
|
|
$this->error('Invalid action. Use "v5" or "v6".');
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
$action = $this->argument('action');
|
|
|
|
$this->$action();
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
...
|
...
|
@@ -58,7 +51,7 @@ class FetchTicketProjects extends Command |
|
|
|
* @return void
|
|
|
|
* 请求:https://www.quanqiusou.cn/extend_api/webs/globalso_all.php
|
|
|
|
*/
|
|
|
|
public function fetch_v5()
|
|
|
|
public function fetchV5()
|
|
|
|
{
|
|
|
|
# pm 项目经理 assm 售后服务经理
|
|
|
|
$response = Http::get('https://www.quanqiusou.cn/extend_api/webs/globalso_all.php');
|
|
...
|
...
|
@@ -68,22 +61,25 @@ class FetchTicketProjects extends Command |
|
|
|
# V5: 版本号+postid
|
|
|
|
$uuid = md5("V5{$item['postid']}");
|
|
|
|
$project = TicketProject::where('uuid', $uuid)->first();
|
|
|
|
|
|
|
|
$item['pm'] = $item['pm'] == '未安排' ? '杨长远' : $item['pm'];
|
|
|
|
$item['assm'] = $item['assm'] == '未安排' ? '杨长远' : $item['assm'];
|
|
|
|
$item['yhs'] = $item['yhs'] == '未安排' ? '杨长远' : $item['yhs'];
|
|
|
|
|
|
|
|
// 如果 $item['cate'] 包含”推广“字符,则$engineer_name = $item['assm']
|
|
|
|
$engineer_name = (strpos($item['cate'], '推广') !== false) ? $item['yhs'] : $item['assm'];
|
|
|
|
$assm_id = Manage::where('name', $item['assm'])->value('id') ?? Manage::where('name', '张鸿飞')->value('id') ?? 0; //售后服务经理
|
|
|
|
$seom_id = Manage::where('name', $item['yhs'])->value('id') ?? Manage::where('name', '陶婵')->value('id') ?? 0; //优化师
|
|
|
|
// 如果 $item['cate'] 包含”推广“字符,则 $engineer_name = $item['assm']
|
|
|
|
/**
|
|
|
|
* 第一负责人逻即说明:
|
|
|
|
* 优化推广项目:找售后服务经理??鸿飞
|
|
|
|
* 建站类项目: 找杨长远
|
|
|
|
*/
|
|
|
|
$engineer_id = (strpos($item['cate'], '推广') !== false) ? $assm_id : Manage::where('name', '杨长远')->value('id') ?? 0;
|
|
|
|
|
|
|
|
$fields = [
|
|
|
|
'post_id' => $item['postid'],
|
|
|
|
'company_name' => $item['company'],
|
|
|
|
'title' => $item['title'],
|
|
|
|
'engineer_id' => Manage::where('name', $engineer_name)->value('id') ?? 0, // 第一负责人
|
|
|
|
'assm_id' => Manage::where('name', $item['assm'])->value('id') ?? 0, //售后服务经理
|
|
|
|
'seom_id' => Manage::where('name', $item['yhs'])->value('id') ?? 0, //售后服务经理
|
|
|
|
'website' => $item['main_url'] ?? '',
|
|
|
|
'post_id' => $item['postid'],
|
|
|
|
'company_name' => $item['company'],
|
|
|
|
'title' => $item['title'],
|
|
|
|
'engineer_id' => $engineer_id, // 第一负责人
|
|
|
|
'assm_id' => $assm_id,
|
|
|
|
'seom_id' => $seom_id,
|
|
|
|
'website' => $item['main_url'] ?? '',
|
|
|
|
'is_del' => 0,
|
|
|
|
];
|
|
|
|
if (!$project) {
|
|
|
|
$new = new TicketProject();
|
|
...
|
...
|
@@ -106,8 +102,13 @@ class FetchTicketProjects extends Command |
|
|
|
$project->save();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
echo "V5: {$item['postid']} - {$item['title']} - {$item['company']} - {$item['main_url']}\n";
|
|
|
|
}
|
|
|
|
$postids = collect($items)->pluck('postid')->toArray();
|
|
|
|
// 软删除 gl_ticket_projects 中不存在的项目
|
|
|
|
TicketProject::where('version', 5)
|
|
|
|
->whereNotIn('post_id', $postids)
|
|
|
|
->update(['is_del' => 1]);
|
|
|
|
echo date("Y-m-d H:i:s") . " V5: fetch completed, total " . count($items) . " items\n";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
...
|
...
|
@@ -116,12 +117,15 @@ class FetchTicketProjects extends Command |
|
|
|
* 1. 按照ID升序查询 gl_project 表 limit 10
|
|
|
|
* 2。同步到 TicketProject 后,redis 缓存 ID
|
|
|
|
*/
|
|
|
|
public function fetch_v6()
|
|
|
|
public function fetchV6()
|
|
|
|
{
|
|
|
|
$lastid = 0;
|
|
|
|
while (true) {
|
|
|
|
try {
|
|
|
|
$items = Project::where('id', '>', intval($lastid))
|
|
|
|
// ->where('delete_status', 0)
|
|
|
|
// ->where('extend_type', '!=', 5) // 排除归档项目
|
|
|
|
// ->where('type', '!=', 8) // 排除归档项目
|
|
|
|
->orderBy('id', 'asc')
|
|
|
|
->limit(10)
|
|
|
|
->get();
|
|
...
|
...
|
@@ -130,16 +134,47 @@ class FetchTicketProjects extends Command |
|
|
|
break;
|
|
|
|
}
|
|
|
|
foreach ($items as $item) {
|
|
|
|
$uuid = md5("V5{$item->id}");
|
|
|
|
$uuid = md5("V6{$item->id}");
|
|
|
|
$project = TicketProject::where('uuid', $uuid)->first();
|
|
|
|
// 售后服务经理
|
|
|
|
$assm_id = collect([
|
|
|
|
$item->deploy_optimize->manager_mid ?? 0,
|
|
|
|
$item->deploy_optimize->tech_leader ?? 0,
|
|
|
|
Manage::where('name', '张鸿飞')->value('id') ?? 0,
|
|
|
|
0
|
|
|
|
])->first(fn($v) => $v !== null && $v !== 0, 0);
|
|
|
|
$seom_id = !empty($item->deploy_optimize->optimist_mid) ? $item->deploy_optimize->optimist_mid : $assm_id;
|
|
|
|
/**
|
|
|
|
* 第一负责人逻辑
|
|
|
|
* 建站类项目:找杨长远
|
|
|
|
* 推广类:找售后
|
|
|
|
*/
|
|
|
|
if (in_array($item->type, [Project::TYPE_TWO, Project::TYPE_FOUR, Project::TYPE_SIX])) {
|
|
|
|
// 优化推广项目
|
|
|
|
$engineer_id = $assm_id;
|
|
|
|
} elseif ($item->type == Project::TYPE_THREE) {
|
|
|
|
$engineer_id = Manage::where('name', '杨长远')->value('id') ?? 0; // 建站类项目找杨长远
|
|
|
|
} else {
|
|
|
|
$engineer_id = collect([
|
|
|
|
$item->deploy_build->manager_mid ?? 0,
|
|
|
|
$item->deploy_build->leader_mid ?? 0,
|
|
|
|
0
|
|
|
|
])->first(fn($v) => $v !== null && $v !== 0, 0);
|
|
|
|
}
|
|
|
|
$is_del = (
|
|
|
|
$item->extend_type == 5
|
|
|
|
|| $item->type == 8
|
|
|
|
|| $item->delete_status == 1
|
|
|
|
|| $item->site_status == 1
|
|
|
|
) ? 1 : 0;
|
|
|
|
|
|
|
|
$fields = [
|
|
|
|
'company_name' => $item->company,
|
|
|
|
'title' => $item->title,
|
|
|
|
'assm_id' => $item->type ==3 ? $item->deploy_optimize->manager_mid ?? 0 : $item->deploy_build->manager_mid ?? 0, // 售后服务经理
|
|
|
|
'seom_id' => $item->deploy_optimize->optimist_mid ?? $item->deploy_optimize->manager_mid ?? $item->deploy_optimize->tech_leader ?? 0, // 优化推广负责人
|
|
|
|
'engineer_id' => $item->type == 3 ?
|
|
|
|
$item->deploy_optimize->optimist_mid ?? $item->deploy_optimize->manager_mid ?? $item->deploy_optimize->tech_leader ?? 0
|
|
|
|
: $item->deploy_build->manager_mid ?? $item->deploy_build->leader_mid ?? 0, // 技术组长
|
|
|
|
'company_name' => $item->company,
|
|
|
|
'title' => $item->title,
|
|
|
|
'assm_id' => $assm_id,
|
|
|
|
'seom_id' => $seom_id,
|
|
|
|
'engineer_id' => $engineer_id,
|
|
|
|
'is_del' => $is_del
|
|
|
|
];
|
|
|
|
if (!$project) {
|
|
|
|
$project = new TicketProject();
|
|
...
|
...
|
@@ -151,7 +186,7 @@ class FetchTicketProjects extends Command |
|
|
|
$project->$k = $v;
|
|
|
|
}
|
|
|
|
$project->save();
|
|
|
|
}else{
|
|
|
|
} else {
|
|
|
|
$changed = false;
|
|
|
|
foreach ($fields as $k => $v) {
|
|
|
|
if ($project->$k != $v) {
|
|
...
|
...
|
@@ -166,7 +201,35 @@ class FetchTicketProjects extends Command |
|
|
|
$lastid = $item->id;
|
|
|
|
echo date('Y-m-d H:i:s') . " V6: $item->id {$item->company} fetch ok \n";
|
|
|
|
}
|
|
|
|
}catch (\Exception $exception) {
|
|
|
|
} catch (\Exception $exception) {
|
|
|
|
echo $exception;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function fetch_uuid()
|
|
|
|
{
|
|
|
|
$lastid = 0;
|
|
|
|
while (true) {
|
|
|
|
try {
|
|
|
|
$items = TicketProject::where('id', '>', $lastid)
|
|
|
|
->where('version', 6)
|
|
|
|
->orderBy('id', 'asc')
|
|
|
|
->limit(10)
|
|
|
|
->get();
|
|
|
|
if ($items->isEmpty()) {
|
|
|
|
echo "not found items \n";
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
foreach ($items as $item) {
|
|
|
|
$uuid = md5("V6{$item->table_id}");
|
|
|
|
$item->uuid = $uuid;
|
|
|
|
$item->save();
|
|
|
|
$lastid = $item->id;
|
|
|
|
echo date('Y-m-d H:i:s') . " V6: $item->id fetch ok \n";
|
|
|
|
}
|
|
|
|
} catch (\Exception $exception) {
|
|
|
|
echo $exception;
|
|
|
|
break;
|
|
|
|
}
|
...
|
...
|
|