作者 刘锟

Merge remote-tracking branch 'origin/master' into akun

@@ -109,15 +109,31 @@ class AsideTicketController extends BaseController @@ -109,15 +109,31 @@ class AsideTicketController extends BaseController
109 //TODO::用户部门搜索 109 //TODO::用户部门搜索
110 if(isset($this->param['dept_id']) && !empty($this->param['dept_id'])){ 110 if(isset($this->param['dept_id']) && !empty($this->param['dept_id'])){
111 $manageHrModel = new ManageHr(); 111 $manageHrModel = new ManageHr();
112 - $manageIdArr = $manageHrModel->selectField(['dept_id'=>$this->param['dept_id'],'status'=>1],'manage_id');  
113 - $query->whereHas('logs', function ($q) use ($manageIdArr) {  
114 - $q->whereIn('engineer_id', $manageIdArr);  
115 - }); 112 + //售后优化+技术搜索
  113 + if($this->param['dept_id'] == 2 && !empty($this->param['entry_position'])) {//售后部
  114 + if ($this->param['entry_position'] == 1) {
  115 + $manageIdArr = $manageHrModel->selectField(['entry_position' => ['in', [44, 46, 49]], 'status' => 1], 'manage_id');
  116 + } else {
  117 + //售后技术
  118 + $manageIdArr = $manageHrModel->selectField(['entry_position' => ['in', [42, 43, 45, 48, 51]], 'status' => 1], 'manage_id');
  119 + }
  120 + $query->whereHas('logs', function ($q) use ($manageIdArr) {
  121 + $q->whereIn('engineer_id', $manageIdArr);
  122 + });
  123 + }else{
  124 + $manageIdArr = $manageHrModel->selectField(['dept_id'=>$this->param['dept_id'],'status'=>1],'manage_id');
  125 + $query->whereHas('logs', function ($q) use ($manageIdArr) {
  126 + $q->whereIn('engineer_id', $manageIdArr);
  127 + });
  128 + }
116 } 129 }
117 if(!empty($this->param['start_at']) && !empty($this->param['end_at'])){ 130 if(!empty($this->param['start_at']) && !empty($this->param['end_at'])){
118 return $query->whereBetween('created_at',[$this->param['start_at'],$this->param['end_at']]); 131 return $query->whereBetween('created_at',[$this->param['start_at'],$this->param['end_at']]);
119 } 132 }
120 - 133 + //搜索提交人姓名
  134 + if(!empty($this->param['submit_username'])){
  135 + return $query->where('submit_username','%'.$this->param['submit_username'].'%');
  136 + }
121 // 添加排序功能 137 // 添加排序功能
122 $query->orderBy('status', 'asc'); 138 $query->orderBy('status', 'asc');
123 // $query->orderBy('id', 'desc'); 139 // $query->orderBy('id', 'desc');
@@ -142,113 +158,6 @@ class AsideTicketController extends BaseController @@ -142,113 +158,6 @@ class AsideTicketController extends BaseController
142 $this->response('success', Code::SUCCESS, $lists); 158 $this->response('success', Code::SUCCESS, $lists);
143 } 159 }
144 160
145 - /**  
146 - * @remark :列表数据  
147 - * @name :lists  
148 - * @author :lyh  
149 - * @method :post  
150 - * @time :2025/9/1 16:45  
151 - */  
152 - public function lists(AsideTicketListRequest $request)  
153 - {  
154 - $validated = $request->validated();  
155 - $ticketsModel = new Tickets();  
156 - $query = $ticketsModel->leftJoin('gl_ticket_projects', 'gl_ticket_projects.id', '=', 'gl_tickets.project_id')  
157 - ->leftJoin('gl_ticket_logs', 'gl_ticket_logs.ticket_id', '=', 'gl_tickets.id')  
158 - ->select([  
159 - 'gl_tickets.*',  
160 - 'gl_ticket_projects.title as project_title',  
161 - 'gl_ticket_projects.company_name as project_company',  
162 - 'gl_ticket_projects.status as project_status',  
163 - 'gl_ticket_projects.project_cate as project_cate',  
164 - ])  
165 - ->distinct(); // 避免多条 logs 时数据重复  
166 -  
167 - // 工程师过滤  
168 - if (!empty($validated['engineer_id'])) {  
169 - $engineerId = $validated['engineer_id'];  
170 - $query->where(function ($q) use ($engineerId) {  
171 - $q->where('gl_tickets.submit_user_id', $engineerId)  
172 - ->orWhere('gl_ticket_logs.engineer_id', $engineerId);  
173 - });  
174 - }  
175 - // project_id 过滤  
176 - if ($request->filled('project_id')) {  
177 - $query->where('gl_ticket_projects.uuid', $request->input('project_id'));  
178 - }  
179 - // status 过滤  
180 - if ($request->filled('status')) {  
181 - $status = $request->input('status');  
182 - if ($status == -1) {  
183 - $newTime = now()->subHours(120);  
184 - $query->where('gl_tickets.status', 0)  
185 - ->where('gl_tickets.plan_end_at', '<', $newTime);  
186 - } else {  
187 - $query->where('gl_tickets.status', $status);  
188 - }  
189 - }  
190 - // timeout 过滤  
191 - if ($request->filled('timeout')) {  
192 - $timeout = (int)$request->input('timeout');  
193 - switch ($timeout) {  
194 - case 1: $newTime = now()->subHours(24); break;  
195 - case 2: $newTime = now()->subHours(48); break;  
196 - case 3: $newTime = now()->subHours(72); break;  
197 - default: $newTime = now(); break;  
198 - }  
199 - $query->where('gl_tickets.status', 0)  
200 - ->where('gl_tickets.plan_end_at', '<', $newTime);  
201 - }  
202 - // star 过滤  
203 - if ($request->filled('star')) {  
204 - $query->where('gl_tickets.star', $request->input('star'));  
205 - }  
206 - // search 模糊搜索  
207 - if ($request->filled('search')) {  
208 - $search = $request->input('search');  
209 - $query->where(function ($q) use ($search) {  
210 - $q->where('gl_tickets.title', 'like', "%$search%")  
211 - ->orWhere('gl_ticket_projects.title', 'like', "%$search%")  
212 - ->orWhere('gl_ticket_projects.company_name', 'like', "%$search%");  
213 - });  
214 - }  
215 - // project_status  
216 - if ($request->filled('project_status')) {  
217 - $query->where('gl_ticket_projects.status', $request->input('project_status'));  
218 - }  
219 - // project_cate  
220 - if ($request->filled('project_cate')) {  
221 - $query->where('gl_ticket_projects.project_cate', $request->input('project_cate'));  
222 - }  
223 - // 部门搜索  
224 - if (!empty($this->param['dept_id'])) {  
225 - $manageHrModel = new ManageHr();  
226 - $manageIdArr = $manageHrModel->selectField(['dept_id'=>$this->param['dept_id'],'status'=>1],'manage_id');  
227 - $query->whereIn('gl_ticket_logs.engineer_id', $manageIdArr);  
228 - }  
229 - // 时间区间  
230 - if (!empty($this->param['start_at']) && !empty($this->param['end_at'])) {  
231 - $query->whereBetween('gl_tickets.created_at', [$this->param['start_at'], $this->param['end_at']]);  
232 - }  
233 - // 排序  
234 - $query->orderBy('gl_tickets.status', 'asc');  
235 - $sortField = $request->input('sort_field', 'gl_tickets.plan_end_at');  
236 - $sortOrder = strtolower($request->input('sort_order', 'asc'));  
237 - $query->orderBy($sortField, $sortOrder);  
238 - if ($sortField != 'gl_tickets.plan_end_at') {  
239 - $query->orderBy('gl_tickets.plan_end_at', 'asc');  
240 - }  
241 - // 分页 (建议用 simplePaginate 提速)  
242 - $lists = $query->paginate($this->row, ['*'], 'page', $this->page);  
243 - // 计算超时小时数(也可以 SQL 里用 TIMESTAMPDIFF 算好)  
244 - foreach ($lists as $item) {  
245 - if ($item->status == 0 && $item->plan_end_at < now()) {  
246 - $item->plan_ent_time = diffInHours($item->plan_end_at, now());  
247 - }  
248 - }  
249 - $this->response('success', Code::SUCCESS, $lists);  
250 - }  
251 -  
252 /** 161 /**
253 * @param $search 162 * @param $search
254 * @return void 163 * @return void