作者 lyh

超过120小时未处理的工单

@@ -22,7 +22,7 @@ class AsideTicketController extends BaseController @@ -22,7 +22,7 @@ class AsideTicketController extends BaseController
22 * 22 *
23 * @return \Illuminate\Http\Response 23 * @return \Illuminate\Http\Response
24 */ 24 */
25 - public function index(AsideTicketListRequest $request) 25 + public function indexs(AsideTicketListRequest $request)
26 { 26 {
27 $validated = $request->validated(); 27 $validated = $request->validated();
28 $query = Tickets::with([ 28 $query = Tickets::with([
@@ -142,6 +142,120 @@ class AsideTicketController extends BaseController @@ -142,6 +142,120 @@ class AsideTicketController extends BaseController
142 $this->response('success', Code::SUCCESS, $lists); 142 $this->response('success', Code::SUCCESS, $lists);
143 } 143 }
144 144
  145 + public function index(AsideTicketListRequest $request)
  146 + {
  147 + $validated = $request->validated();
  148 +
  149 + $query = Tickets::with([
  150 + 'logs:ticket_id,engineer_id,status',
  151 + 'logs.engineer:id,name',
  152 + 'project:id,uuid,title,company_name,pm_id,status,project_cate',
  153 + 'project.pm:id,name',
  154 + 'project.projectV6:id,project_id' // 根据实际字段替换
  155 + ])
  156 + ->when(!empty($validated['engineer_id']), function ($query) use ($validated) {
  157 + $engineerId = $validated['engineer_id'];
  158 + return $query->where(function ($q) use ($engineerId) {
  159 + $q->where('submit_user_id', $engineerId)
  160 + ->orWhereHas('logs', function ($q1) use ($engineerId) {
  161 + $q1->where('engineer_id', $engineerId);
  162 + });
  163 + });
  164 + })
  165 + ->when($request->input('project_id') !== null, function ($query) use ($request) {
  166 + $projectId = $request->input('project_id');
  167 + return $query->whereHas('project', function ($q) use ($projectId) {
  168 + $q->where('uuid', $projectId);
  169 + });
  170 + })
  171 + ->when($request->input('status') !== null, function ($query) use ($request) {
  172 + $status = $request->input('status');
  173 + if ($status == '-1') {
  174 + $newTime = date("Y-m-d H:i:s", strtotime("-120 hours"));
  175 + return $query->where('status', 0)->where('plan_end_at','<',$newTime);
  176 + } else {
  177 + return $query->where('status', $status);
  178 + }
  179 + })
  180 + ->when($request->input('timeout') !== null, function ($query) use ($request) {
  181 + $timeout = $request->input('timeout');
  182 + switch ($timeout) {
  183 + case 1: $newTime = date("Y-m-d H:i:s", strtotime("-24 hours")); break;
  184 + case 2: $newTime = date("Y-m-d H:i:s", strtotime("-48 hours")); break;
  185 + case 3: $newTime = date("Y-m-d H:i:s", strtotime("-72 hours")); break;
  186 + default: $newTime = date("Y-m-d H:i:s"); break;
  187 + }
  188 + return $query->where('status', 0)->where('plan_end_at','<',$newTime);
  189 + })
  190 + ->when($request->input('star') !== null, function ($query) use ($request) {
  191 + return $query->where('star', $request->input('star'));
  192 + })
  193 + ->when($request->input('search'), function ($query) use ($request) {
  194 + $search = $request->input('search');
  195 + return $query->where(function ($q) use ($search) {
  196 + $q->where('title', 'like', '%' . $search . '%')
  197 + ->orWhereHas('project', function ($q1) use ($search) {
  198 + $q1->where('title', 'like', '%' . $search . '%')
  199 + ->orWhere('company_name', 'like', '%' . $search . '%');
  200 + });
  201 + });
  202 + })
  203 + ->when($request->input('project_status') !== null, function ($query) use ($request) {
  204 + return $query->whereHas('project', function ($q) use ($request) {
  205 + $q->where('status', $request->input('project_status'));
  206 + });
  207 + })
  208 + ->when($request->input('project_cate') !== null, function ($query) use ($request) {
  209 + return $query->whereHas('project', function ($q) use ($request) {
  210 + $q->where('project_cate', $request->input('project_cate'));
  211 + });
  212 + });
  213 +
  214 + // 用户部门搜索
  215 + if(isset($this->param['dept_id']) && !empty($this->param['dept_id'])){
  216 + $manageHrModel = new ManageHr();
  217 + $manageIdArr = $manageHrModel->selectField(['dept_id'=>$this->param['dept_id'],'status'=>1],'manage_id');
  218 + $query->whereHas('logs', function ($q) use ($manageIdArr) {
  219 + $q->whereIn('engineer_id', $manageIdArr);
  220 + });
  221 + }
  222 + if(!empty($this->param['start_at']) && !empty($this->param['end_at'])){
  223 + $query->whereBetween('created_at',[$this->param['start_at'],$this->param['end_at']]);
  224 + }
  225 + // 排序
  226 + $sortField = $request->input('sort_field', 'plan_end_at');
  227 + $sortOrder = strtolower($request->input('sort_order', 'asc'));
  228 + $query->orderBy('status', 'asc');
  229 + $query->orderBy($sortField, $sortOrder);
  230 + if ($sortField != 'plan_end_at') $query->orderBy('plan_end_at', 'asc');
  231 + // 先统计总条数
  232 + $total = (clone $query)->count();
  233 + // 再查询数据
  234 + $listsData = $query->offset(($this->page - 1) * $this->row)
  235 + ->limit($this->row)
  236 + ->get()
  237 + ->toArray();
  238 + // 计算超时小时数
  239 + foreach ($listsData as $key => $item){
  240 + if($item['status'] == 0){
  241 + $end = date('Y-m-d H:i:s');
  242 + $start = $item['plan_end_at'];
  243 + if($start < $end){
  244 + $item['plan_ent_time'] = diffInHours($start,$end);
  245 + }
  246 + }
  247 + $listsData[$key] = $item;
  248 + }
  249 + // 还原分页结构
  250 + $lists = [
  251 + 'total' => $total,
  252 + 'per_page' => $this->row,
  253 + 'current_page' => $this->page,
  254 + 'last_page' => ceil($total / $this->row),
  255 + 'list' => $listsData,
  256 + ];
  257 + $this->response('success', Code::SUCCESS, $lists);
  258 + }
145 259
146 /** 260 /**
147 * @param $search 261 * @param $search