作者 ZhengBing He

合并分支 'workorder' 到 'master'

is_del

整合项目,添加软删除

查看合并请求 !2163
@@ -51,7 +51,7 @@ class FetchTicketProjects extends Command @@ -51,7 +51,7 @@ class FetchTicketProjects extends Command
51 * @return void 51 * @return void
52 * 请求:https://www.quanqiusou.cn/extend_api/webs/globalso_all.php 52 * 请求:https://www.quanqiusou.cn/extend_api/webs/globalso_all.php
53 */ 53 */
54 - public function fetch_v5() 54 + public function fetchV5()
55 { 55 {
56 # pm 项目经理 assm 售后服务经理 56 # pm 项目经理 assm 售后服务经理
57 $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');
@@ -72,13 +72,14 @@ class FetchTicketProjects extends Command @@ -72,13 +72,14 @@ class FetchTicketProjects extends Command
72 $engineer_id = (strpos($item['cate'], '推广') !== false) ? $assm_id : Manage::where('name', '杨长远')->value('id') ?? 0; 72 $engineer_id = (strpos($item['cate'], '推广') !== false) ? $assm_id : Manage::where('name', '杨长远')->value('id') ?? 0;
73 73
74 $fields = [ 74 $fields = [
75 - 'post_id' => $item['postid'],  
76 - 'company_name' => $item['company'],  
77 - 'title' => $item['title'],  
78 - 'engineer_id' => $engineer_id, // 第一负责人  
79 - 'assm_id' => $assm_id,  
80 - 'seom_id' => $seom_id,  
81 - 'website' => $item['main_url'] ?? '', 75 + 'post_id' => $item['postid'],
  76 + 'company_name' => $item['company'],
  77 + 'title' => $item['title'],
  78 + 'engineer_id' => $engineer_id, // 第一负责人
  79 + 'assm_id' => $assm_id,
  80 + 'seom_id' => $seom_id,
  81 + 'website' => $item['main_url'] ?? '',
  82 + 'is_del' => 0,
82 ]; 83 ];
83 if (!$project) { 84 if (!$project) {
84 $new = new TicketProject(); 85 $new = new TicketProject();
@@ -103,6 +104,12 @@ class FetchTicketProjects extends Command @@ -103,6 +104,12 @@ class FetchTicketProjects extends Command
103 } 104 }
104 echo "V5: {$item['postid']} - {$item['title']} - {$item['company']} - {$item['main_url']}\n"; 105 echo "V5: {$item['postid']} - {$item['title']} - {$item['company']} - {$item['main_url']}\n";
105 } 106 }
  107 + $postids = collect($items)->pluck('postid')->toArray();
  108 + // 软删除 gl_ticket_projects 中不存在的项目
  109 + TicketProject::where('version', 5)
  110 + ->whereNotIn('post_id', $postids)
  111 + ->update(['is_del' => 1]);
  112 + echo "V5: fetch completed, total " . count($items) . " items\n";
106 } 113 }
107 } 114 }
108 115
@@ -111,12 +118,15 @@ class FetchTicketProjects extends Command @@ -111,12 +118,15 @@ class FetchTicketProjects extends Command
111 * 1. 按照ID升序查询 gl_project 表 limit 10 118 * 1. 按照ID升序查询 gl_project 表 limit 10
112 * 2。同步到 TicketProject 后,redis 缓存 ID 119 * 2。同步到 TicketProject 后,redis 缓存 ID
113 */ 120 */
114 - public function fetch_v6() 121 + public function fetchV6()
115 { 122 {
116 $lastid = 0; 123 $lastid = 0;
117 while (true) { 124 while (true) {
118 try { 125 try {
119 $items = Project::where('id', '>', intval($lastid)) 126 $items = Project::where('id', '>', intval($lastid))
  127 +// ->where('delete_status', 0)
  128 +// ->where('extend_type', '!=', 5) // 排除归档项目
  129 +// ->where('type', '!=', 8) // 排除归档项目
120 ->orderBy('id', 'asc') 130 ->orderBy('id', 'asc')
121 ->limit(10) 131 ->limit(10)
122 ->get(); 132 ->get();
@@ -143,22 +153,29 @@ class FetchTicketProjects extends Command @@ -143,22 +153,29 @@ class FetchTicketProjects extends Command
143 if (in_array($item->type, [Project::TYPE_TWO, Project::TYPE_FOUR, Project::TYPE_SIX])) { 153 if (in_array($item->type, [Project::TYPE_TWO, Project::TYPE_FOUR, Project::TYPE_SIX])) {
144 // 优化推广项目 154 // 优化推广项目
145 $engineer_id = $assm_id; 155 $engineer_id = $assm_id;
146 - }elseif ($item->type == Project::TYPE_THREE) { 156 + } elseif ($item->type == Project::TYPE_THREE) {
147 $engineer_id = Manage::where('name', '杨长远')->value('id') ?? 0; // 建站类项目找杨长远 157 $engineer_id = Manage::where('name', '杨长远')->value('id') ?? 0; // 建站类项目找杨长远
148 - }else{ 158 + } else {
149 $engineer_id = collect([ 159 $engineer_id = collect([
150 $item->deploy_build->manager_mid ?? 0, 160 $item->deploy_build->manager_mid ?? 0,
151 $item->deploy_build->leader_mid ?? 0, 161 $item->deploy_build->leader_mid ?? 0,
152 0 162 0
153 ])->first(fn($v) => $v !== null && $v !== 0, 0); 163 ])->first(fn($v) => $v !== null && $v !== 0, 0);
154 } 164 }
  165 + $is_del = (
  166 + $item->extend_type == 5
  167 + || $item->type == 8
  168 + || $item->delete_status == 1
  169 + || $item->site_status == 1
  170 + ) ? 1 : 0;
155 171
156 $fields = [ 172 $fields = [
157 - 'company_name' => $item->company,  
158 - 'title' => $item->title, 173 + 'company_name' => $item->company,
  174 + 'title' => $item->title,
159 'assm_id' => $assm_id, 175 'assm_id' => $assm_id,
160 'seom_id' => $seom_id, 176 'seom_id' => $seom_id,
161 - 'engineer_id' => $engineer_id 177 + 'engineer_id' => $engineer_id,
  178 + 'is_del' => $is_del
162 ]; 179 ];
163 if (!$project) { 180 if (!$project) {
164 $project = new TicketProject(); 181 $project = new TicketProject();
@@ -170,7 +187,7 @@ class FetchTicketProjects extends Command @@ -170,7 +187,7 @@ class FetchTicketProjects extends Command
170 $project->$k = $v; 187 $project->$k = $v;
171 } 188 }
172 $project->save(); 189 $project->save();
173 - }else{ 190 + } else {
174 $changed = false; 191 $changed = false;
175 foreach ($fields as $k => $v) { 192 foreach ($fields as $k => $v) {
176 if ($project->$k != $v) { 193 if ($project->$k != $v) {
@@ -185,7 +202,7 @@ class FetchTicketProjects extends Command @@ -185,7 +202,7 @@ class FetchTicketProjects extends Command
185 $lastid = $item->id; 202 $lastid = $item->id;
186 echo date('Y-m-d H:i:s') . " V6: $item->id {$item->company} fetch ok \n"; 203 echo date('Y-m-d H:i:s') . " V6: $item->id {$item->company} fetch ok \n";
187 } 204 }
188 - }catch (\Exception $exception) { 205 + } catch (\Exception $exception) {
189 echo $exception; 206 echo $exception;
190 break; 207 break;
191 } 208 }
@@ -213,7 +230,7 @@ class FetchTicketProjects extends Command @@ -213,7 +230,7 @@ class FetchTicketProjects extends Command
213 $lastid = $item->id; 230 $lastid = $item->id;
214 echo date('Y-m-d H:i:s') . " V6: $item->id fetch ok \n"; 231 echo date('Y-m-d H:i:s') . " V6: $item->id fetch ok \n";
215 } 232 }
216 - }catch (\Exception $exception) { 233 + } catch (\Exception $exception) {
217 echo $exception; 234 echo $exception;
218 break; 235 break;
219 } 236 }
@@ -46,12 +46,9 @@ class TicketController extends BaseController @@ -46,12 +46,9 @@ class TicketController extends BaseController
46 $request->validated(); 46 $request->validated();
47 $project = TicketProject::where('uuid', $project_id)->first(); 47 $project = TicketProject::where('uuid', $project_id)->first();
48 if (!$project) return $this->error('未找到项目', 404); 48 if (!$project) return $this->error('未找到项目', 404);
49 - if ($project->version == 6){  
50 - if ($project->project->projectV6->delete_status) return $this->error('该项目已被删除', 400);  
51 - if ($project->project->projectV6->extend_type == 5) return $this->error('未续费', 400);  
52 - if ($project->project->projectV6->type == 8) return $this->error('项目已归档', 400);  
53 - if ($project->project->projectV6->site_status == 1) return $this->error('站点已关闭', 400);  
54 - } 49 + if ($project->is_del) return $this->error('项目状态异常', 400);
  50 + if (empty($project->engineer_id)) return $this->error('项目未分配工单负责人', 400);
  51 +
55 $result = DB::transaction(function () use ($request, $project) { 52 $result = DB::transaction(function () use ($request, $project) {
56 $ticket = new Tickets(); 53 $ticket = new Tickets();
57 $ticket->project_id = $project->id; 54 $ticket->project_id = $project->id;
@@ -68,21 +65,7 @@ class TicketController extends BaseController @@ -68,21 +65,7 @@ class TicketController extends BaseController
68 $ticket->submit_username = $request->input('submit_username'); 65 $ticket->submit_username = $request->input('submit_username');
69 $ticket->save(); 66 $ticket->save();
70 $log = new TicketLog(); 67 $log = new TicketLog();
71 - if ($project->version == 5){  
72 - # V5  
73 - $log->engineer_id = $project->engineer_id;  
74 - }else{  
75 - # V6 的项目  
76 - if ($project->projectV6->type == 3){  
77 - // 项目类型是优化推广,项目负责人找优化  
78 - $seo = $project->projectV6->deploy_optimize;  
79 - $log->engineer_id = $seo->manager_mid ?? $seo->optimist_mid ?? 0;  
80 - }else{  
81 - // 非优化推广项目,项目负责人找技术组长  
82 - $build = $project->projectV6->deploy_build;  
83 - $log->engineer_id = $build->leader_mid ?? 0;  
84 - }  
85 - } 68 + $log->engineer_id = $project->engineer_id; // 默认第一负责人
86 $ticket->logs()->save($log); 69 $ticket->logs()->save($log);
87 return $ticket; 70 return $ticket;
88 }); 71 });
@@ -107,12 +90,8 @@ class TicketController extends BaseController @@ -107,12 +90,8 @@ class TicketController extends BaseController
107 90
108 if ($ticket->project->uuid !== $project_id) return $this->error('无权限查看该工单', 403); 91 if ($ticket->project->uuid !== $project_id) return $this->error('无权限查看该工单', 403);
109 92
110 - if ($ticket->project->version == 6){  
111 - if ($ticket->project->projectV6->delete_status) return $this->error('该项目已被删除', 400);  
112 - if ($ticket->project->projectV6->extend_type == 5) return $this->error('未续费', 400);  
113 - if ($ticket->project->projectV6->type == 8) return $this->error('项目已归档', 400);  
114 - if ($ticket->project->projectV6->site_status == 1) return $this->error('站点已关闭', 400);  
115 - } 93 + if ($ticket->project->is_del) return $this->error('项目状态异常', 400);
  94 +
116 return response()->json(['data' => $ticket]); 95 return response()->json(['data' => $ticket]);
117 } 96 }
118 97
@@ -73,6 +73,7 @@ class AsideTicketController extends BaseController @@ -73,6 +73,7 @@ class AsideTicketController extends BaseController
73 $projects = TicketProject::with([ 73 $projects = TicketProject::with([
74 'projectV6:id,company,title', 74 'projectV6:id,company,title',
75 ]) 75 ])
  76 + ->where('is_del', 0)
76 ->where(function ($query) use ($search) { 77 ->where(function ($query) use ($search) {
77 $query->where('title', 'like', '%' . $search . '%') 78 $query->where('title', 'like', '%' . $search . '%')
78 ->orWhere('company_name', 'like', '%' . $search . '%') 79 ->orWhere('company_name', 'like', '%' . $search . '%')
@@ -95,12 +96,7 @@ class AsideTicketController extends BaseController @@ -95,12 +96,7 @@ class AsideTicketController extends BaseController
95 { 96 {
96 $request->validated(); 97 $request->validated();
97 $project = TicketProject::where('uuid', $request->input('project_id'))->first(); 98 $project = TicketProject::where('uuid', $request->input('project_id'))->first();
98 - if ($project->version == 6){  
99 - if ($project->projectV6->delete_status) $this->response('该项目已被删除', Code::USER_MODEL_NOTFOUND_ERROE);  
100 - if ($project->projectV6->extend_type == 5) $this->response('未续费', Code::USER_MODEL_NOTFOUND_ERROE);  
101 - if ($project->projectV6->type == 8) $this->response('项目已归档', Code::USER_MODEL_NOTFOUND_ERROE);  
102 - if ($project->projectV6->site_status == 1) $this->response('站点已关闭', Code::USER_MODEL_NOTFOUND_ERROE);  
103 - } 99 + if ($project->is_del) $this->response('该项目状态异常', Code::USER_MODEL_NOTFOUND_ERROE);
104 $result = DB::transaction(function () use ($request, $project) { 100 $result = DB::transaction(function () use ($request, $project) {
105 $ticket = new Tickets(); 101 $ticket = new Tickets();
106 $ticket->project_id = $project->id; 102 $ticket->project_id = $project->id;