| 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        ]);    }}
 |