作者 ZhengBing He

fetch project add status pm ok’

@@ -56,65 +56,99 @@ class FetchTicketProjects extends Command @@ -56,65 +56,99 @@ class FetchTicketProjects extends Command
56 */ 56 */
57 public function fetchV5() 57 public function fetchV5()
58 { 58 {
59 - # pm 项目经理 assm 售后服务经理  
60 - $response = Http::get('https://www.quanqiusou.cn/extend_api/webs/globalso_all.php');  
61 - if ($response->status() == 200) {  
62 - $items = $response->json();  
63 - foreach ($items as $item) {  
64 - # V5: 版本号+postid  
65 - $uuid = md5("V5{$item['postid']}");  
66 - $project = TicketProject::where('uuid', $uuid)->first();  
67 - $assm_id = Manage::where('name', $item['assm'])->value('id') ?? Manage::where('name', '张鸿飞')->value('id') ?? 0; //售后服务经理  
68 - $seom_id = Manage::where('name', $item['yhs'])->value('id') ?? Manage::where('name', '陶婵')->value('id') ?? 0; //优化师  
69 - // 如果 $item['cate'] 包含”推广“字符,则 $engineer_name = $item['assm']  
70 - /**  
71 - * 第一负责人逻即说明:  
72 - * 优化推广项目:找售后服务经理??鸿飞  
73 - * 建站类项目: 找杨长远  
74 - */  
75 - $engineer_id = (strpos($item['cate'], '推广') !== false) ? $assm_id : Manage::where('name', '杨长远')->value('id') ?? 0; 59 + $page = 1;
  60 + $postids = [];
76 61
77 - $fields = [  
78 - 'post_id' => $item['postid'],  
79 - 'company_name' => $item['company'],  
80 - 'title' => $item['title'],  
81 - 'engineer_id' => $engineer_id, // 第一负责人  
82 - 'assm_id' => $assm_id,  
83 - 'seom_id' => $seom_id,  
84 - 'website' => $item['main_url'] ?? '',  
85 - 'test_website' => $item['test_url'] ?? '',  
86 - 'is_del' => 0,  
87 - 'plan' => $item['plan'] ?? '',  
88 - 'project_cate' => 1,  
89 - ];  
90 - if (!$project) {  
91 - $new = new TicketProject();  
92 - $new->uuid = $uuid;  
93 - $new->version = 5;  
94 - $new->table_id = 0;  
95 - foreach ($fields as $k => $v) {  
96 - $new->$k = $v;  
97 - }  
98 - $new->save();  
99 - } else {  
100 - $changed = false;  
101 - foreach ($fields as $k => $v) {  
102 - if ($project->$k != $v) {  
103 - $project->$k = $v;  
104 - $changed = true; 62 + while (true) {
  63 + $response = Http::get('https://www.quanqiusou.cn/extend_api/webs/globalso_all.php?page=' . $page);
  64 + if ($response->status() == 200) {
  65 + $resp_json = $response->json();
  66 + $items = $resp_json['data'] ?? [];
  67 + if (empty($items))
  68 + {
  69 + echo now() . " | INFO | V5: not found items on page $page \n";
  70 + break;
  71 + }
  72 + foreach ($items as $item) {
  73 + # V5: 版本号+postid
  74 + $uuid = md5("V5{$item['postid']}");
  75 + $project = TicketProject::where('uuid', $uuid)->first();
  76 +
  77 + // 项目状态, 根据 $item['cate'] 判断,建站中,建站客户,推广
  78 + if (strpos($item['cate'], '推广') !== false)
  79 + $status=3; // 推广
  80 + elseif ($item['cate'] == "建站客户")
  81 + $status=2; // 建站客户
  82 + elseif ($item['cate'] == "建站中")
  83 + $status=1; // 建站中
  84 +
  85 + $assm_id = Manage::where('name', $item['assm'])->value('id') ?? Manage::where('name', '张鸿飞')->value('id') ?? 0; //售后服务经理
  86 + $seom_id = Manage::where('name', $item['yhs'])->value('id') ?? Manage::where('name', '陶婵')->value('id') ?? 0; //优化师
  87 + $pm_id = Manage::where('name', $item['pm'])->value('id') ?? Manage::where('name', '李洁玉')->value('id') ?? 0; // 项目经理
  88 +
  89 + /**
  90 + * 第一负责人逻即说明:
  91 + * 优化推广项目:找售后服务经理??鸿飞
  92 + * 建站中:项目经理
  93 + * 建站完成:杨长远
  94 + */
  95 +
  96 + if ($status == 3)
  97 + $engineer_id = $assm_id; // 推广类项目找售后服务经理
  98 + elseif ($status == 2)
  99 + $engineer_id = Manage::where('name', '杨长远')->value('id') ?? 0; //建站完成
  100 + elseif ($status == 1)
  101 + $engineer_id = $pm_id; // 建站中找项目经理
  102 +
  103 + $fields = [
  104 + 'post_id' => $item['postid'],
  105 + 'company_name' => $item['company'],
  106 + 'title' => $item['title'],
  107 + 'engineer_id' => $engineer_id, // 第一负责人
  108 + 'assm_id' => $assm_id,
  109 + 'seom_id' => $seom_id,
  110 + 'website' => $item['main_url'] ?? '',
  111 + 'test_website' => $item['test_url'] ?? '',
  112 + 'is_del' => 0,
  113 + 'plan' => $item['plan'] ?? '',
  114 + 'project_cate' => 1,
  115 + 'pm_id' => $pm_id,
  116 + 'status' => $status, // 项目状态
  117 + 'wechat_group_id' => $item['wx_id']
  118 + ];
  119 + if (!$project) {
  120 + $new = new TicketProject();
  121 + $new->uuid = $uuid;
  122 + $new->version = 5;
  123 + $new->table_id = 0;
  124 + foreach ($fields as $k => $v) {
  125 + $new->$k = $v;
  126 + }
  127 + $new->save();
  128 + } else {
  129 + $changed = false;
  130 + foreach ($fields as $k => $v) {
  131 + if ($project->$k != $v) {
  132 + $project->$k = $v;
  133 + $changed = true;
  134 + }
  135 + }
  136 + if ($changed) {
  137 + $project->save();
105 } 138 }
106 } 139 }
107 - if ($changed) {  
108 - $project->save();  
109 - } 140 + echo now() . " | INFO | V5: {$item['postid']} {$item['company']} fetch ok \n";
110 } 141 }
  142 + $page++;
  143 + $postids = array_merge($postids, collect($items)->pluck('postid')->toArray());
111 } 144 }
112 - $postids = collect($items)->pluck('postid')->toArray(); 145 + }
  146 + if ($postids)
  147 + {
113 // 软删除 gl_ticket_projects 中不存在的项目 148 // 软删除 gl_ticket_projects 中不存在的项目
114 TicketProject::where('version', 5) 149 TicketProject::where('version', 5)
115 ->whereNotIn('post_id', $postids) 150 ->whereNotIn('post_id', $postids)
116 ->update(['is_del' => 1]); 151 ->update(['is_del' => 1]);
117 - echo date("Y-m-d H:i:s") . " V5: fetch completed, total " . count($items) . " items\n";  
118 } 152 }
119 } 153 }
120 154
@@ -142,26 +176,35 @@ class FetchTicketProjects extends Command @@ -142,26 +176,35 @@ class FetchTicketProjects extends Command
142 foreach ($items as $item) { 176 foreach ($items as $item) {
143 $uuid = md5("V6{$item->id}"); 177 $uuid = md5("V6{$item->id}");
144 $project = TicketProject::where('uuid', $uuid)->first(); 178 $project = TicketProject::where('uuid', $uuid)->first();
  179 + // 项目状态
  180 + if ($item->type == Project::TYPE_ONE)
  181 + $status = 1; // 建站中
  182 + elseif ($item->type == Project::TYPE_THREE)
  183 + $status = 2; // 建站完成
  184 + else
  185 + $status = 3; // 推广找售后服务经理
  186 +
145 // 售后服务经理 187 // 售后服务经理
146 $assm_id = collect([ 188 $assm_id = collect([
147 ManageHr::find($item->deploy_optimize->manager_mid)->manage_id ?? 0, 189 ManageHr::find($item->deploy_optimize->manager_mid)->manage_id ?? 0,
148 ManageHr::find($item->deploy_optimize->tech_leader)->manage_id ?? 0, 190 ManageHr::find($item->deploy_optimize->tech_leader)->manage_id ?? 0,
149 8, //张鸿飞 191 8, //张鸿飞
150 ])->first(fn($v) => $v !== null && $v !== 0, 0); 192 ])->first(fn($v) => $v !== null && $v !== 0, 0);
  193 +
151 // 优化师 194 // 优化师
152 - $optimist_mid = ManageHr::find($item->deploy_optimize->optimist_mid) ? ManageHr::find($item->deploy_optimize->optimist_mid)->manage_id : 0;  
153 - $seom_id = $optimist_mid ? $optimist_mid : $assm_id;  
154 - /**  
155 - * 第一负责人逻辑  
156 - * 建站类项目:找杨长远  
157 - * 推广类:找售后  
158 - */  
159 - if ($item->type == Project::TYPE_THREE) {  
160 - $engineer_id = Manage::where('name', '杨长远')->value('id') ?? 0; // 建站类项目找杨长远  
161 - }else {  
162 - // 其他找售后服务经理  
163 - $engineer_id = $assm_id;  
164 - } 195 + $seom_id = ManageHr::find($item->deploy_optimize->optimist_mid) ? ManageHr::find($item->deploy_optimize->optimist_mid)->manage_id : 0;
  196 +
  197 + // 项目经理
  198 + $pm_id = ManageHr::find($item->deploy_build->manager_mid)->manage_id ?? ManageHr::where('name', '李洁玉')->value('manage_id') ?? 0;
  199 +
  200 + // 第一负责人
  201 + if ($status == 1)
  202 + $engineer_id = $pm_id; // 建站中找项目经理
  203 + elseif ($status == 2)
  204 + $engineer_id = Manage::where('name', '杨长远')->value('id') ?? 0; // 建站完成找杨长远
  205 + else
  206 + $engineer_id = $assm_id; // 推广找售后服务经理
  207 +
165 $is_del = ( 208 $is_del = (
166 $item->extend_type == 5 209 $item->extend_type == 5
167 || $item->type == 8 210 || $item->type == 8
@@ -184,7 +227,9 @@ class FetchTicketProjects extends Command @@ -184,7 +227,9 @@ class FetchTicketProjects extends Command
184 'wechat_group_id' => ProjectAssociation::where('project_id', $project->table_id) 227 'wechat_group_id' => ProjectAssociation::where('project_id', $project->table_id)
185 ->where('status', ProjectAssociation::STATUS_NORMAL) 228 ->where('status', ProjectAssociation::STATUS_NORMAL)
186 ->where('binding_app', ProjectAssociation::ENTERPRISE_WECHAT) 229 ->where('binding_app', ProjectAssociation::ENTERPRISE_WECHAT)
187 - ->value('friend_id') 230 + ->value('friend_id'),
  231 + 'pm_id' => $pm_id,
  232 + 'status' => $status, // 项目状态
188 ]; 233 ];
189 if (!$project) { 234 if (!$project) {
190 $project = new TicketProject(); 235 $project = new TicketProject();