123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- <?php
- /**
- * Created by PhpStorm.
- * User: Administrator
- * Date: 2020/6/19 0019
- * Time: 11:34
- */
- namespace App\Http\Controllers\Admin\Analyze;
- use App\Http\Controllers\Controller;
- use App\Http\Models\Role;
- use App\Http\Models\Site;
- use App\Http\Models\User;
- use Illuminate\Database\Eloquent\Relations\BelongsToMany;
- use Illuminate\Http\Request;
- use Illuminate\Support\Facades\DB;
- class StaffController extends Controller
- {
- public function index(Request $request)
- {
- if (!$request->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
- ]);
- }
- }
|