ajax()) { $roles = Role::query()->pluck('name', 'id'); return view('admin.analyze.staff', [ 'roles' => $roles, ]); } $builder = User::query(); if ($roleId = $request->input('roleId')) { $builder->where('role_id', $roleId); } else { //$builder->whereIn('role_id', [Role::TYPE_MANAGER, Role::TYPE_AE, Role::TYPE_OPTIMIZER, Role::TYPE_MANAGE_HELPER]); } $records = $builder->with(['role', 'sites' => function (BelongsToMany $query) { $query->selectRaw('id,status,design_score,online_score,reach_score'); }])->where(['status' => 1])->paginate($request->input('pageSize') ?? TABLE_PAGE_SIZE); $items = $records->items(); foreach ($items as &$item) { $item->roleName = $item->role->name ?? '暂无'; $item->buildNum = $item->sites->where('status', 1)->count(); $item->impleNum = $item->sites->where('status', 2)->count(); $item->srvNum = $item->sites->where('status', 3)->count(); $designNum = $designScore = 0; $onlineNum = $onlineScore = 0; $reachNum = $reachScore = 0; foreach ($item->sites as $site) { if ($site->design_score) { $designNum++; $designScore += floatval($site->design_score); } if ($site->online_score) { $onlineNum++; $onlineScore += floatval($site->online_score); } if ($site->reach_score) { $reachNum++; $reachScore += floatval($site->reach_score); } } $item->avgDesignScore = $designNum ? number_format($designScore / $designNum, 2) : 0; $item->avgOnlineScore = $onlineNum ? number_format($onlineScore / $onlineNum, 2) : 0; $item->avgReachScore = $reachNum ? number_format($reachScore / $reachNum, 2) : 0; if ($item->role_id == Role::TYPE_OPTIMIZER) { $item->totalScore = $item->impleNum + $item->srvNum; } else { $item->totalScore = $item->buildNum + $item->impleNum + $item->srvNum; } } return response()->json([ 'rows' => $records->items(), 'total' => $records->total() ]); } public function sales(Request $request) { if (!$request->ajax()) { return view('admin.analyze.sales', [ ]); } $users = User::query()->where('role_id', Role::TYPE_SELLER)->where('status', 1)->pluck('nickname', 'id'); $userList = DB::table('users as a') ->leftJoin('user_has_sites as b', 'a.id', '=', 'b.user_id') ->leftJoin('sites as c', 'b.site_id', '=', 'c.id') ->select('a.id', 'a.nickname', 'c.cn_title', 'c.status') ->where('a.role_id', Role::TYPE_SELLER) ->where('a.status', 1) ->whereNull('c.deleted_at') ->get(); $result = []; foreach ($users as $key => $value) { $sitesCount = 0;//总数 $buildStation = 0;//建站 $implement = 0;//实施 $service = 0;//服务器 $pause = 0;//暂停 $renew = 0;//续费 $termination = 0;//终止 foreach ($userList as $kk => $vv) { if ($key == $vv->id) { $sitesCount++; if ($vv->status == 1) { $buildStation++; } if ($vv->status == 2) { $implement++; } if ($vv->status == 3) { $service++; } if ($vv->status == 4) { $pause++; } if ($vv->status == 5) { $renew++; } if ($vv->status == 7) { $termination++; } } } $result[] = [ 'userId' => $key, 'sitesCount' => $sitesCount, 'buildStation' => $buildStation, 'implement' => $implement, 'service' => $service, 'pause' => $pause, 'renew' => $renew, 'termination' => $termination ]; } foreach ($result as $key => $value) { $result[$key]['nickname'] = $users[$value['userId']] ?? ''; } return response()->json([ 'rows' => $result, 'total' => count($result) ?? 0 ]); } }