StaffController.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Administrator
  5. * Date: 2020/6/19 0019
  6. * Time: 11:34
  7. */
  8. namespace App\Http\Controllers\Admin\Analyze;
  9. use App\Http\Controllers\Controller;
  10. use App\Http\Models\Role;
  11. use App\Http\Models\Site;
  12. use App\Http\Models\User;
  13. use Illuminate\Database\Eloquent\Relations\BelongsToMany;
  14. use Illuminate\Http\Request;
  15. use Illuminate\Support\Facades\DB;
  16. class StaffController extends Controller
  17. {
  18. public function index(Request $request)
  19. {
  20. if (!$request->ajax()) {
  21. $roles = Role::query()->pluck('name', 'id');
  22. return view('admin.analyze.staff', [
  23. 'roles' => $roles,
  24. ]);
  25. }
  26. $builder = User::query();
  27. if ($roleId = $request->input('roleId')) {
  28. $builder->where('role_id', $roleId);
  29. } else {
  30. //$builder->whereIn('role_id', [Role::TYPE_MANAGER, Role::TYPE_AE, Role::TYPE_OPTIMIZER, Role::TYPE_MANAGE_HELPER]);
  31. }
  32. $records = $builder->with(['role', 'sites' => function (BelongsToMany $query) {
  33. $query->selectRaw('id,status,design_score,online_score,reach_score');
  34. }])->where(['status' => 1])->paginate($request->input('pageSize') ?? TABLE_PAGE_SIZE);
  35. $items = $records->items();
  36. foreach ($items as &$item) {
  37. $item->roleName = $item->role->name ?? '暂无';
  38. $item->buildNum = $item->sites->where('status', 1)->count();
  39. $item->impleNum = $item->sites->where('status', 2)->count();
  40. $item->srvNum = $item->sites->where('status', 3)->count();
  41. $designNum = $designScore = 0;
  42. $onlineNum = $onlineScore = 0;
  43. $reachNum = $reachScore = 0;
  44. foreach ($item->sites as $site) {
  45. if ($site->design_score) {
  46. $designNum++;
  47. $designScore += floatval($site->design_score);
  48. }
  49. if ($site->online_score) {
  50. $onlineNum++;
  51. $onlineScore += floatval($site->online_score);
  52. }
  53. if ($site->reach_score) {
  54. $reachNum++;
  55. $reachScore += floatval($site->reach_score);
  56. }
  57. }
  58. $item->avgDesignScore = $designNum ? number_format($designScore / $designNum, 2) : 0;
  59. $item->avgOnlineScore = $onlineNum ? number_format($onlineScore / $onlineNum, 2) : 0;
  60. $item->avgReachScore = $reachNum ? number_format($reachScore / $reachNum, 2) : 0;
  61. if ($item->role_id == Role::TYPE_OPTIMIZER) {
  62. $item->totalScore = $item->impleNum + $item->srvNum;
  63. } else {
  64. $item->totalScore = $item->buildNum + $item->impleNum + $item->srvNum;
  65. }
  66. }
  67. return response()->json([
  68. 'rows' => $records->items(),
  69. 'total' => $records->total()
  70. ]);
  71. }
  72. public function sales(Request $request)
  73. {
  74. if (!$request->ajax()) {
  75. return view('admin.analyze.sales', [
  76. ]);
  77. }
  78. $users = User::query()->where('role_id', Role::TYPE_SELLER)->where('status', 1)->pluck('nickname', 'id');
  79. $userList = DB::table('users as a')
  80. ->leftJoin('user_has_sites as b', 'a.id', '=', 'b.user_id')
  81. ->leftJoin('sites as c', 'b.site_id', '=', 'c.id')
  82. ->select('a.id', 'a.nickname', 'c.cn_title', 'c.status')
  83. ->where('a.role_id', Role::TYPE_SELLER)
  84. ->where('a.status', 1)
  85. ->whereNull('c.deleted_at')
  86. ->get();
  87. $result = [];
  88. foreach ($users as $key => $value) {
  89. $sitesCount = 0;//总数
  90. $buildStation = 0;//建站
  91. $implement = 0;//实施
  92. $service = 0;//服务器
  93. $pause = 0;//暂停
  94. $renew = 0;//续费
  95. $termination = 0;//终止
  96. foreach ($userList as $kk => $vv) {
  97. if ($key == $vv->id) {
  98. $sitesCount++;
  99. if ($vv->status == 1) {
  100. $buildStation++;
  101. }
  102. if ($vv->status == 2) {
  103. $implement++;
  104. }
  105. if ($vv->status == 3) {
  106. $service++;
  107. }
  108. if ($vv->status == 4) {
  109. $pause++;
  110. }
  111. if ($vv->status == 5) {
  112. $renew++;
  113. }
  114. if ($vv->status == 7) {
  115. $termination++;
  116. }
  117. }
  118. }
  119. $result[] = [
  120. 'userId' => $key,
  121. 'sitesCount' => $sitesCount,
  122. 'buildStation' => $buildStation,
  123. 'implement' => $implement,
  124. 'service' => $service,
  125. 'pause' => $pause,
  126. 'renew' => $renew,
  127. 'termination' => $termination
  128. ];
  129. }
  130. foreach ($result as $key => $value) {
  131. $result[$key]['nickname'] = $users[$value['userId']] ?? '';
  132. }
  133. return response()->json([
  134. 'rows' => $result,
  135. 'total' => count($result) ?? 0
  136. ]);
  137. }
  138. }