input('type'); $dutyId = $request->input('duty_id'); if (!empty($dutyId)) { $weekTaskInfo->where('duty_id', $dutyId); } if ($userId != 0) { $weekTaskInfo->where('duty_id', auth()->user()->id); } $type = $type == 'next' ? 'next' : 'now'; $condition = ['type' => $type]; list($web, $design, $exam, $siteExam, $site, $seo, $allUserList) = $this->getTaskByUserList(); $taskInfoList = $weekTaskInfo->where($condition) ->orderBy('deadline', 'asc') ->get()->groupBy('user_type') ->map(function (Collection $item) { return $item->groupBy('day')->toArray(); })->toArray(); $user = User::query()->where('status', 1)->pluck('nickname', 'id'); $condList = DB::table('week_task_cond')->pluck('name', 'id')->toArray(); foreach ($taskInfoList as $key => $value) { foreach ($value as $kk => $vv) { foreach ($vv as $kkk => $vvv) { if (substr($vvv['user_type'], 0, 3) == 'wfp') { $vv[$kkk]['user_name'] = '未分配'; } else { $vv[$kkk]['user_name'] = $user[$vvv['user_type']] ?? ''; } $vv[$kkk]['cond_name'] = $condList[$vvv['cond_id']] ?? ''; $vv[$kkk]['web_name'] = $web[$vvv['web_id']] ?? ''; $vv[$kkk]['design_name'] = $design[$vvv['design_id']] ?? ''; $vv[$kkk]['duty_name'] = $allUserList[$vvv['duty_id']] ?? ''; } $value[$kk] = $vv; } $taskInfoList[$key] = $value; } $taskStaffList = [ 'web' => [], 'design' => [], 'exam' => [], 'site-exam' => [], 'site' => [], 'seo' => [], ]; //前端 $taskStaffList['web']['wfp-web'] = '未分配'; foreach ($web as $key => $item) { $taskStaffList['web'][$key] = $item; } //设计 $taskStaffList['design']['wfp-design'] = '未分配'; foreach ($design as $key => $item) { $taskStaffList['design'][$key] = $item; } //seo质检 $taskStaffList['exam']['wfp-exam'] = '未分配'; foreach ($exam as $key => $item) { $taskStaffList['exam'][$key] = $item; } //建站质检 $taskStaffList['site-exam']['wfp-site-exam'] = '未分配'; foreach ($siteExam as $key => $item) { $taskStaffList['site-exam'][$key] = $item; } //策划部 $taskStaffList['site']['wfp-site'] = '未分配'; foreach ($site as $key => $item) { $taskStaffList['site'][$key] = $item; } //优化部 $taskStaffList['seo']['wfp-seo'] = '未分配'; foreach ($seo as $key => $item) { $taskStaffList['seo'][$key] = $item; } $weekDateList = $this->getWeek(time()); $weekDate = []; foreach ($weekDateList as $item) { $weekDate[] = $item['date']; } return view('admin/plan/task', [ 'allUserList' => $allUserList, 'designerList' => $design, 'webList' => $web, 'taskInfoList' => $taskInfoList, 'type' => $type, 'dutyId' => $dutyId, 'taskStaffList' => $taskStaffList, 'is_user' => $userId, 'weekDate' => $weekDate, ]); } /** * 添加任务页面 * @param $taskId * @param $auth * @return Factory|View */ public function addTask($taskId, $auth) { $auth = explode(':', $auth); $condList = DB::table('week_task_cond') ->where('type', $auth[0]) ->pluck('name', 'id') ->toArray(); if ($auth[4] == 1) { $differenceCondId = WeekTaskInfo::query() ->where('id', $taskId) ->value('cond_id'); $condIds = DB::table('week_task_cond') ->where('id', $differenceCondId) ->pluck('name', 'id') ->toArray(); //兼容 foreach ($condList as $key => $value) { foreach ($condIds as $kk => $vv) { if ($key !== $kk) { $condList[$kk] = $vv; } } } } list($web, $design, $exam, $siteExam, $site, $seo, $allUserList) = $this->getTaskByUserList(); $weekTaskInfo = WeekTaskInfo::query()->where('id', $taskId)->first(); $user = auth()->user(); return view('admin/plan/add_task', [ 'condList' => $condList, 'web' => $web, 'design' => $design, 'exam' => $exam, 'siteExam' => $siteExam, 'site' => $site, 'seo' => $seo, 'allUserList' => $allUserList, 'role' => 'wfp-' . $auth[0], 'type' => $auth[1], 'taskId' => $taskId, 'weekTaskInfo' => $weekTaskInfo, 'week' => date('w'), 'day' => $auth[2], 'role_id' => $user->role_id, 'user_id' => $auth[3], ]); } /** * 保存 * @param Request $request * @param int $taskId * @return JsonResponse */ public function saveTask(Request $request, $taskId = 0) { $data = []; $type = $request->input('type'); $role = $request->input('role'); $condId = $request->input('cond_id'); if (empty($condId)) { return response()->json(['message' => '请选择任务类型'], 400); } $data['cond_id'] = $condId; $describe = $request->input('describe') ?? ''; if (empty($describe)) { return response()->json(['message' => '请填写任务描述'], 400); } $data['describe'] = $describe; $userType = $request->input('user_type') ?? $role; $data['user_type'] = $userType; $dutyId = $request->input('duty_id'); if (empty($dutyId)) { return response()->json(['message' => '请填写负责人'], 400); } $data['duty_id'] = $dutyId; $designId = $request->input('design_id') ?? 0; if (!empty($designId) && $designId == 'wfp-design') { $data['design_id'] = null; } else { $data['design_id'] = $designId; } $webId = $request->input('web_id') ?? 0; if (!empty($webId) && $webId == 'wfp-web') { $data['web_id'] = null; } else { $data['web_id'] = $webId; } $checkScore = $request->input('check_score') ?? 0; $data['check_score'] = $checkScore; $remark = $request->input('remark'); if (in_array($condId, [5, 1]) && !$remark) { return response()->json(['message' => '请填写上测试站链接'], 400); } if ($condId == 16 && !$remark) { return response()->json(['message' => '请填写上内页链接'], 400); } $data['remark'] = $remark; $day = $request->input('day'); if (substr($userType, 0, 3) == 'wfp') { $day = 0; } $user = auth()->user(); $deadline = $request->input('deadline'); if (empty($taskId)) { if (empty($deadline)) { return response()->json(['message' => '请填写上最后期限时间'], 400); } if (strtotime($deadline) == strtotime(date('Y-m-d')) || strtotime($deadline) < strtotime(date('Y-m-d'))) { return response()->json(['message' => '不允许创建截止时间为当天或小于当天的任务'], 400); } $data['deadline'] = $deadline; } else { if (!in_array($user->role_id, [14, 27])) { if (empty($deadline)) { return response()->json(['message' => '请填写上最后期限时间'], 400); } else { $data['deadline'] = $deadline; } } } $data['day'] = $day; $data['type'] = $type; $data['created_at'] = date('Y-m-d H:i:s'); if (empty($taskId)) { $id = WeekTaskInfo::query()->insertGetId($data); $this->createTask($id); } else { unset($data['created_at']); WeekTaskInfo::query()->where('id', $taskId)->update($data); $this->createTask($taskId); } return response()->json(['message' => '操作成功']); } /** * 自动创建设计任务 * @param $taskId * @param int $status */ public function createTask($taskId, $status = 0) { $weekTaskInfo = WeekTaskInfo::query()->where('id', $taskId)->first(); //筛选出最近2个礼拜的时间排除周末 $dayList = $this->getDay(); $data['describe'] = $weekTaskInfo->describe ?? ''; $data['duty_id'] = $weekTaskInfo->duty_id ?? 0; $data['web_id'] = $weekTaskInfo->web_id ?? 0; $data['design_id'] = $weekTaskInfo->design_id ?? 0; $data['created_at'] = date('Y-m-d H:i:s'); $data['remark'] = $weekTaskInfo->remark ?? ''; //前端 首页切片创建时 创建 设计 移动端设计(历史任务和当前任务都没有才创建) $taskHistory = WeekTaskHistory::query()->where(['cond_id' => 18, 'describe' => $weekTaskInfo->describe])->first(); $task = WeekTaskInfo::query()->where(['cond_id' => 18, 'describe' => $weekTaskInfo->describe])->first(); if (in_array($weekTaskInfo->cond_id, [1]) && !$taskHistory && !$task) { $data['user_type'] = 'wfp-design'; $data['type'] = 'now'; $data['status'] = ''; $data['day'] = 0; $data['cond_id'] = '18'; $data['deadline'] = $dayList[2]; WeekTaskInfo::query()->insert($data); } //完成时触发 if ($status == 1) { //前端 测试站检查触 发建站质检的 测试站检查 (暂停) /* if (in_array($weekTaskInfo->cond_id, [5]) && $weekTaskInfo->status == 'ok' && !WeekTaskInfo::query()->where(['cond_id' => 66, 'describe' => $weekTaskInfo->describe])->exists()) { $data['user_type'] = 'wfp-site-exam'; $data['type'] = 'now'; $data['status'] = ''; $data['day'] = 0; $data['cond_id'] = '66'; $data['deadline'] = $dayList[1]; WeekTaskInfo::query()->insert($data); }*/ //前端 首页切片、内页切片 if (in_array($weekTaskInfo->cond_id, [1, 16]) && $weekTaskInfo->status == 'ok' && !WeekTaskInfo::query()->where(['cond_id' => 65, 'describe' => $weekTaskInfo->describe])->exists()) { $data['user_type'] = 'wfp-site-exam'; $data['type'] = 'now'; $data['status'] = ''; $data['day'] = 0; $data['cond_id'] = '65'; $data['deadline'] = $dayList[1]; WeekTaskInfo::query()->insert($data); } //建站质检 上线表格检查 触发seo质检 上线前质检 /* if (in_array($weekTaskInfo->cond_id, [67]) && $weekTaskInfo->status == 'ok' && !WeekTaskInfo::query()->where(['cond_id' => 70, 'describe' => $weekTaskInfo->describe])->exists()) { $data['user_type'] = 'wfp-exam'; $data['type'] = 'now'; $data['status'] = ''; $data['day'] = 0; $data['cond_id'] = '70'; $data['deadline'] = $dayList[0]; WeekTaskInfo::query()->insert($data); }*/ //建站质检 上线后检查表 触发seo质检 上线后质检 if (in_array($weekTaskInfo->cond_id, [68]) && $weekTaskInfo->status == 'ok' && !WeekTaskInfo::query()->where(['cond_id' => 71, 'describe' => $weekTaskInfo->describe])->exists()) { //延时任务 $data['user_type'] = 'wfp-exam'; $data['type'] = 'now'; $data['status'] = ''; $data['day'] = 0; $data['cond_id'] = '71'; unset($data['deadline']); ScheduledTasks::query()->insert($data);//入库定时拉取 } //建站质检 中的 上线表格检查 点击完成 三天后在 SEO质检 中自动生成 上线前质检 任务,且任务时限为三天 if (in_array($weekTaskInfo->cond_id, [67]) && $weekTaskInfo->status == 'ok' && !ScheduledTasks::query()->where(['cond_id' => 70, 'describe' => $weekTaskInfo->describe])->exists()) { //延时任务 $data['user_type'] = 'wfp-exam'; $data['type'] = 'now'; $data['status'] = ''; $data['day'] = 0; $data['cond_id'] = '70'; unset($data['deadline']); ScheduledTasks::query()->insert($data);//入库定时拉取 } //前端百千读取读取 触发 建站质检的百千还原度检查 if (in_array($weekTaskInfo->cond_id, [74]) && $weekTaskInfo->status == 'ok' && !WeekTaskInfo::query()->where(['cond_id' => 75, 'describe' => $weekTaskInfo->describe])->exists()) { $data['user_type'] = 'wfp-site-exam'; $data['type'] = 'now'; $data['status'] = ''; $data['day'] = 0; $data['cond_id'] = '75'; $data['deadline'] = $dayList[1]; WeekTaskInfo::query()->insert($data); } //接单关键词查询完成发送短信给销售 if (in_array($weekTaskInfo->cond_id, [87]) && $weekTaskInfo->status == 'ok') { $result = GoogleTrendsKeyword::query()->where('keyword', $weekTaskInfo->describe)->first(); if (!empty($result)) { //自动创建任务并发短信给优化 $sendMessageService = new SendMessageService(); $user = User::query()->where('id', $weekTaskInfo->duty_id)->first(); if (!empty($user->phone)) { $sendMessageService->sendMessage($user->phone, $weekTaskInfo->describe ?? '', 2); } } } } } public function condItems(Request $request) { $condId = $request->input('condId'); $taskItems = DB::table('week_task_items')->where(['cond_id' => $condId])->get()->toArray(); return response()->json(['data' => $taskItems]); } public function del(Request $request) { $taskId = $request->input('taskId'); $user = auth()->user(); if (!in_array($user->role_id, [14, 27])) { WeekTaskInfo::query()->where(['id' => $taskId])->delete(); return response()->json(['message' => '操作成功']); } else { return response()->json(['message' => '操作失败'], 400); } } public function release(Request $request) { $taskId = $request->input('taskId'); $type = $request->input('type'); WeekTaskInfo::query()->where(['id' => $taskId])->update(['user_type' => 'wfp-' . $type, 'day' => 0]); return response()->json(['message' => '操作成功']); } public function changeStatus(Request $request) { $taskId = $request->input('taskId'); $statusType = $request->input('statusType'); $type = $request->input('type'); if ($statusType == 'ok') { //完成 $update = ['status' => $statusType, 'type' => $type, 'complete' => date('Y-m-d H:i:s')]; } else { $update = ['status' => $statusType, 'type' => $type, 'complete' => null]; } $weekTaskInfo = WeekTaskInfo::query()->where(['id' => $taskId])->first(); if (!empty($weekTaskInfo)) { WeekTaskInfo::query()->where(['id' => $taskId])->update($update); $this->createTask($taskId, 1); //通知后台邮箱 $user = User::query()->where('id', $weekTaskInfo->user_type)->value('nickname') ?? ''; $string = $user . ' 完成了 ' . '" ' . $weekTaskInfo->describe . ' "' . ' 这个任务'; Mailbox::query()->insert(['message' => $string, 'user_id' => $weekTaskInfo->duty_id]); } return response()->json(['message' => '操作成功']); } //任务迁移 public function migrate() { WeekTaskInfo::query()->where(['type' => 'now', 'status' => 'ok'])->delete(); WeekTaskInfo::query()->where(['type' => 'now'])->whereNotIn('user_type', ['wfp-web', 'wfp-design', 'wfp-exam', 'wfp-site-exam', 'wfp-site', 'wfp-seo'])->update(['day' => 1]); WeekTaskInfo::query()->where(['type' => 'next'])->update(['type' => 'now']); return response()->json(['message' => '操作成功,清刷新当前任务的页面']); } //任务历史 public function taskHistory(Request $request) { if (!$request->ajax()) { //采编、项目经理 $userList = User::query()->where('status', 1)->whereIn('role_id', [2, 25, 26, 29])->get(); $webList = User::query()->where('status', 1)->whereIn('role_id', [14, 27])->get(); return view('admin/plan/task_history', [ 'user' => $userList ?? [], 'web' => $webList, ]); } $pageSize = $request->input('pageSize') ?? TABLE_PAGE_SIZE; //$builder = WeekTaskHistory::query()->with(['designer', 'dutyMan', 'webMan']); $builder = WeekTaskHistory::query(); if ($insertDate = $request->input('insert_date')) { $builder->whereDate('insert_date', '=', $insertDate); } if ($desc = $request->input('desc')) { $builder->where('describe', 'like', '%' . $desc . '%'); } if ($user_type = $request->input('user_type')) { $builder->where('user_type', '=', $user_type); } if ($duty_id = $request->input('duty_id')) { $builder->where('duty_id', '=', $duty_id); } $articles = $builder->where($condition ?? [])->orderByDesc('id') ->paginate($pageSize); $items = $articles->items(); $userList = User::query()->pluck('nickname', 'id'); $roles = Role::query()->pluck('name', 'id'); $mapCondScore = DB::table('week_task_cond')->pluck('score', 'id')->toArray(); if ($insertDate && $user_type) { $totalScore = 0; } else { $totalScore = ''; } $overdueList = []; $array = []; array_walk($items, function ($item) use (&$userList, &$mapCondScore, &$totalScore, &$insertDate, &$user_type, &$count, &$array, &$roles, &$overdueList) { if ($item->slices_number != 0) { $item->cond_name = $item->cond_name . '*' . $item->slices_number; } if (empty($item->cond_item_id)) { $item->cond_item_id = 0; } $item->beOverdueDay = ''; if ($item->status !== 'ok' && $item->deadline && strtotime($item->deadline) < strtotime(date('Y-m-d'))) { $beOverdueDay = (strtotime(date('Y-m-d')) - strtotime($item->deadline)) / 3600 / 24; $item->beOverdueDay = '逾期' . round($beOverdueDay) . '天'; /* $overdueList[] = [ 'user_id' => $item->user_type ?? '', 'day' => $beOverdueDay, ];*/ } $item->completeBeOverdueDay = ''; if ($item->status == 'ok' && $item->complete && strtotime(date('Y-m-d', strtotime($item->complete))) > strtotime($item->deadline)) { $completeBeOverdueDay = (strtotime(date('Y-m-d', strtotime($item->complete))) - strtotime($item->deadline)) / 3600 / 24; $item->completeBeOverdueDay = '逾期' . round($completeBeOverdueDay) . '天'; $overdueList[] = [ 'user_id' => $item->user_type ?? '', 'day' => $completeBeOverdueDay, 'task' => $item->id, ]; } $item->deadline = substr($item->deadline, 0, 10); //$item->complete = substr($item->complete, 0, 10); $item->cond_item_list = DB::table('week_task_items')->where('cond_id', $item->cond_id)->pluck('name', 'id')->toArray() ?? []; $item->username = $userList[$item->user_type] ?? ''; $item->role_id = User::query()->where('id', $item->user_type)->first()->role_id ?? ''; $item->role_type = $roles[$item->role_id] ?? ''; $item->designerName = $userList[$item->design_id] ?? ''; $item->dutyName = $userList[$item->duty_id] ?? ''; $item->webName = $userList[$item->web_id] ?? ''; $item->statusTitle = WeekTaskInfo::StatusMap[$item->status] ?? ''; if ($item->status == 'ok' && $insertDate && $user_type) { //切片数量,没有默认为1 if ($item->slices_number == 0) { $slicesNumber = 1; } else { $slicesNumber = $item->slices_number; } if ($item['cond_id'] == 16) { $totalScore = floatval(bcadd(($mapCondScore[$item['cond_id']] ?? 0) * $slicesNumber, $totalScore, 2)); } else { $totalScore = floatval(bcadd($mapCondScore[$item['cond_id']] ?? 0, $totalScore, 2)); } $array[] = $item->cond_id; } }); if (!empty($array)) { //过滤null foreach ($array as $key => $v) { if (empty($v)) { $array[$key] = 15; } } $result = array_count_values($array); $list = []; foreach ($result as $key => $value) { $list[$key]['key'] = $key; $list[$key]['value'] = $value; } $condIdList = WeekTaskHistory::query()->groupBy('cond_id', 'cond_name')->pluck('cond_name', 'cond_id')->toArray(); foreach ($list as $key => $value) { $list[$key]['cond'] = $condIdList[$value['key']]; } $string = ''; foreach ($list as $key => $value) { $string .= $value['cond'] . ':' . $value['value'] . ' '; } } $webs = User::query()->where('role_id', 14)->pluck('id')->toArray(); $design = User::query()->where('role_id', 27)->pluck('id')->toArray(); $webOverdueDay = 0; $webTask = 0; $designOverdueDay = 0; $designTask = 0; foreach ($overdueList as $value) { if (in_array($value['user_id'], $webs)) { $webOverdueDay += $value['day']; $webTask++; } if (in_array($value['user_id'], $design)) { $designOverdueDay += $value['day']; $designTask++; } } return response()->json([ 'rows' => $items, 'total' => $articles->total(), 'totalScore' => $totalScore, 'listCount' => $string ?? '', 'webOverdueDay' => $webOverdueDay, 'webTask' => $webTask, 'designOverdueDay' => $designOverdueDay, 'designTask' => $designTask, ]); } public function historyExport(Request $request) { $request = $request->all(); $builder = WeekTaskHistory::query(); if (!empty($request['duty_id'])) { $builder->where('duty_id', $request['duty_id']); } if (!empty($request['user_type'])) { $builder->where('user_type', $request['user_type']); } if (!empty($request['desc'])) { $builder->where('describe', 'like', '%' . $request['desc'] . '%'); } if (!empty($request['insert_date'])) { $builder->whereDate('insert_date', '=', $request['insert_date']); } else { $builder->whereDate('insert_date', '=', date("Y-m-d", strtotime("-1 day"))); } $userList = User::query()->pluck('nickname', 'id'); $roles = Role::query()->pluck('name', 'id'); $items = $builder->orderByDesc('id')->get(); $overdueList = []; foreach ($items as $item) { $item->beOverdueDay = ''; if ($item->status !== 'ok' && $item->deadline && strtotime($item->deadline) < strtotime(date('Y-m-d'))) { $beOverdueDay = (strtotime(date('Y-m-d')) - strtotime($item->deadline)) / 3600 / 24; $item->beOverdueDay = '逾期' . round($beOverdueDay) . '天'; } $item->completeBeOverdueDay = ''; if ($item->status == 'ok' && $item->complete && strtotime(date('Y-m-d', strtotime($item->complete))) > strtotime($item->deadline)) { $completeBeOverdueDay = (strtotime(date('Y-m-d', strtotime($item->complete))) - strtotime($item->deadline)) / 3600 / 24; $item->completeBeOverdueDay = '逾期' . round($completeBeOverdueDay) . '天'; $overdueList[] = [ 'user_id' => $item->user_type ?? '', 'day' => $completeBeOverdueDay, 'task' => $item->id, ]; } $item->deadline = substr($item->deadline, 0, 10); $item->username = $userList[$item->user_type] ?? ''; $item->role_id = User::query()->where('id', $item->user_type)->first()->role_id ?? ''; $item->role_type = $roles[$item->role_id] ?? ''; $item->designerName = $userList[$item->design_id] ?? ''; $item->dutyName = $userList[$item->duty_id] ?? ''; $item->webName = $userList[$item->web_id] ?? ''; $item->statusTitle = WeekTaskInfo::StatusMap[$item->status] ?? ''; } $result = []; foreach ($items as $key => $item) { if ($item->status == 'ok') { $status = '完成'; } else { $status = '未完成'; } if ($item->check_score == 0) { $evaluation = '未评价'; } elseif ($item->check_score == 1) { $evaluation = '非常满意'; } elseif ($item->check_score == 2) { $evaluation = '满意'; } elseif ($item->check_score == 3) { $evaluation = '一般'; } else { $evaluation = ''; } $data = [ 'date' => $item->insert_date, 'user' => $userList[$item->user_type] ?? [], 'user_type' => $roles[$item->role_id] ?? '', 'describe' => $item->describe ?? '', 'dutyMan' => $item->dutyName ?? '', 'designerName' => $item->designerName ?? '', 'webMan' => $item->webName ?? '', 'cond_name' => $item->cond_name ?? '', 'deadline' => $item->deadline ?? '', 'remark' => $item->remark ?? '', 'beOverdueDay' => $item->beOverdueDay, 'status' => $status, 'complete' => $item->complete, 'completeBeOverdueDay' => $item->completeBeOverdueDay, 'evaluation' => $evaluation, ]; $result[] = $data; } array_unshift($result, ['时间', '用户', '类型', '任务描述', '负责人', '设计', '前端', '检查类型', '截止时间', '备注', '逾期时长', '状态', '完成时间', '完成逾期时长', '检查反馈']); return (new BasicExport($result))->download(sprintf('任务历史记录%s.xls', date('YmdHis'))); } public function historyUpdate(Request $request, $id) { $checkScore = $request->input('check_score'); if (!$request->ajax()) { $weekTaskHistory = WeekTaskHistory::query()->where('id', $id)->first() ?? ''; return view('admin/plan/task_history_update', [ 'weekTaskHistory' => $weekTaskHistory, ]); } $result = WeekTaskHistory::query()->where('id', $id)->update(['check_score' => $checkScore]); if (!empty($result)) { return response()->json(['message' => '操作成功']); } } public function rank(Request $request, $type) { $userList = User::query()->where('role_id', $type)->where('status', 1)->pluck('nickname', 'id')->toArray(); $userId = User::query()->where('role_id', $type)->where('status', 1)->value('id'); if ($type == 14) { $auth = 'web'; } else { $auth = 'design'; } list($cond, $condList) = $this->getWeekTaskCondList($auth); $user = $request->input('user') ?? $userId; $date = $request->input('date') ?? date('Y-m'); $userRank = []; foreach ($userList as $key => $item) { //这个月 $thisMonth = $this->getSunday($date); list($thisMonth, $thisMonthSum) = $this->getRankList($thisMonth, $key, $condList, $cond, $userList); $data = [ 'user' => $item, 'rank' => $thisMonthSum, ]; $userRank[] = $data; } array_multisort(array_column($userRank, 'rank'), SORT_DESC, $userRank); //这个月 $thisMonth = $this->getSunday($date); list($thisMonth, $thisMonthSum) = $this->getRankList($thisMonth, $user, $condList, $cond, $userList); return view('admin.plan.rank', [ 'type' => $type, 'userList' => $userList, 'user' => $user, 'rank' => $userRank, 'date' => $date, 'list' => $thisMonth, ]); } public function getRankList($dateList, $user, $condList, $cond, $userList) { $result = []; foreach ($dateList as $key => $value) { $condition = [ ['status', '=', 'ok'], ['user_type', '=', $user], ['insert_date', '=', $value], ]; $historyList1 = WeekTaskHistory::query() ->select('cond_id', DB::raw('COUNT(id) as complete_total'), DB::raw('SUM(slices_number) as complete_slices_total')) ->whereIn('cond_id', $condList) ->where($condition) ->groupBy('cond_id') ->get()->toArray(); $list1 = []; foreach ($historyList1 as $kk => $vv) { $list1[$vv['cond_id']] = $vv['complete_total']; } $list2 = []; foreach ($historyList1 as $kk => $vv) { $list2[$vv['cond_id']] = $vv['complete_slices_total']; } $condition = [ ['user_type', '=', $user], ['insert_date', '=', $value], ]; $historyList = WeekTaskHistory::query() ->select('cond_id', 'user_type', 'cond_name', 'insert_date', DB::raw('COUNT(id) as total'), DB::raw('SUM(slices_number) as slices_total')) ->whereIn('cond_id', $condList) ->where($condition) ->groupBy('cond_id', 'user_type', 'cond_name', 'insert_date') ->get()->toArray(); foreach ($historyList as $kkk => $vvv) { $historyList[$kkk]['user'] = $userList[$vvv['user_type']] ?? ''; $historyList[$kkk]['complete_total'] = $list1[$vvv['cond_id']] ?? 0; $historyList[$kkk]['complete_slices_total'] = $list2[$vvv['cond_id']] ?? 0; } $result[] = $historyList; } $res = []; foreach ($result as $key => $value) { foreach ($value as $kk => $vv) { $res[] = $vv; } } foreach ($cond as $key => $value) { $cond[$key]['user'] = ''; $cond[$key]['complete_total'] = 0; $cond[$key]['complete_slices_total'] = 0; $cond[$key]['count'] = 0; $cond[$key]['end_date'] = ''; $cond[$key]['slices_number'] = 0; foreach ($res as $kk => $vv) { if ($value['id'] == $vv['cond_id']) { $cond[$key]['user'] = $vv['user']; $cond[$key]['complete_total'] += $vv['complete_total']; $cond[$key]['complete_slices_total'] += $vv['complete_slices_total']; $cond[$key]['count'] += $vv['total']; $cond[$key]['end_date'] = $vv['insert_date']; $cond[$key]['slices_number'] += $vv['slices_total']; } } } $sum = 0; foreach ($cond as $key => $item) { $sum += ($item['score'] * $item['complete_total']); /* if ($item['id'] == 16) { $sum += ($item['score'] * $item['complete_slices_total']); } else { $sum += ($item['score'] * $item['complete_total']); }*/ } return [$cond, $sum]; } public function getSunday($month = '') { if (empty($month)) { $month = date("Y-m"); } $maxDay = date('t', strtotime($month . "-01")); $mondays = array(); for ($i = 1; $i <= $maxDay; $i++) { if (date('w', strtotime($month . "-" . $i)) == 0) { $mondays[] = $month . "-" . ($i > 9 ? '' : '0') . $i; } } if (count($mondays) > 4) { array_shift($mondays); } return $mondays; } public function getWeekTaskCondList($type = 'web') { $cond = DB::table('week_task_cond') ->where('type', $type)->get()->toJson(); $cond = json_decode($cond, true) ?? []; $condList = DB::table('week_task_cond') ->where('type', $type)->pluck('id')->toArray() ?? []; return [$cond, $condList]; } /** * 部门人员列表 * @return array */ public function getTaskByUserList() { $web = User::query()->where('status', 1) ->where('role_id', Role::TYPE_WEB) ->pluck('nickname', 'id')->toArray(); $design = User::query()->where('status', 1) ->where('role_id', Role::TYPE_DESIGNER) ->pluck('nickname', 'id')->toArray(); $exam = User::query()->where('status', 1) ->whereIn('role_id', [Role::TYPE_OPTIMIZER, Role::TYPE_MANAGE_HELPER]) ->pluck('nickname', 'id')->toArray(); $siteExam = User::query()->where('status', 1) ->where('role_id', Role::TYPE_QUALITY) ->pluck('nickname', 'id')->toArray(); $site = User::query()->where('status', 1) ->whereIn('role_id', [Role::TYPE_MANAGE_HELPER, Role::TYPE_AE]) ->pluck('nickname', 'id')->toArray(); $seo = User::query()->where('status', 1) ->whereIn('role_id', [Role::TYPE_OPTIMIZER, Role::TYPE_OPTIMIZATION_EDITING]) ->pluck('nickname', 'id')->toArray(); $web['wfp-web'] = '未分配'; $design['wfp-design'] = '未分配'; $exam['wfp-exam'] = '未分配'; $siteExam['wfp-site-exam'] = '未分配'; $site['wfp-site'] = '未分配'; $seo['wfp-seo'] = '未分配'; ksort($web); ksort($design); ksort($exam); ksort($siteExam); ksort($site); ksort($seo); //负责人 $allUserList = User::query() ->where('status', 1) ->whereIn('role_id', [1, 2, 6, 16, 17, 18, 25, 26, 29, 30, 32]) ->orderBy('role_id', 'asc') ->pluck('nickname', 'id')->toArray(); $allUserList[0] = '未分配'; ksort($allUserList); return [$web, $design, $exam, $siteExam, $site, $seo, $allUserList]; } public function getDay() { //筛选出最近2个礼拜的时间排除周末 $days = 12; $dayList = []; for ($i = 1; $i <= $days; $i++) { $day = date('Y-m-d', strtotime(date('Y-m-d')) + 86400 * $i); $result = $this->isWeekend($day); if (!$result) { $dayList[] = $day; } } return $dayList; } public function isWeekend($date) { if ((date('w', strtotime($date)) == 6) || (date('w', strtotime($date)) == 0)) { return true; } else { return false; } } function getWeek($time, $format = "Y-m-d") { //最近一个礼拜的日期 $week = date('w', $time); $weekList = array('星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'); //星期日排到末位 if (empty($week)) { $week = 7; } $data = []; for ($i = 0; $i <= 6; $i++) { $day = '+' . ($i + 1 - $week - 1) . ' days'; $data[$i]['date'] = date($format, strtotime($day, $time)); $data[$i]['week'] = $weekList[$i]; } return $data; } }