IndexController.php 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. <?php
  2. namespace plugin\admin\app\controller;
  3. use plugin\admin\app\common\Util;
  4. use plugin\admin\app\model\Option;
  5. use plugin\admin\app\model\Payorder;
  6. use plugin\admin\app\model\Sign;
  7. use plugin\admin\app\model\Stream;
  8. use plugin\admin\app\model\User;
  9. use plugin\admin\app\model\Withdraw;
  10. use support\exception\BusinessException;
  11. use support\Request;
  12. use support\Response;
  13. use think\db\Where;
  14. use Throwable;
  15. use Workerman\Worker;
  16. class IndexController
  17. {
  18. /**
  19. * 无需登录的方法
  20. * @var string[]
  21. */
  22. protected $noNeedLogin = ['index'];
  23. /**
  24. * 不需要鉴权的方法
  25. * @var string[]
  26. */
  27. protected $noNeedAuth = ['dashboard'];
  28. /**
  29. * 后台主页
  30. * @param Request $request
  31. * @return Response
  32. * @throws BusinessException|Throwable
  33. */
  34. public function index(Request $request): Response
  35. {
  36. clearstatcache();
  37. if (!is_file(base_path('plugin/admin/config/database.php'))) {
  38. return raw_view('index/install');
  39. }
  40. $admin = admin();
  41. if (!$admin) {
  42. $name = 'system_config';
  43. $config = Option::where('name', $name)->value('value');
  44. $config = json_decode($config, true);
  45. $title = $config['logo']['title'] ?? 'webman admin';
  46. $logo = $config['logo']['image'] ?? '/app/admin/admin/images/logo.png';
  47. return raw_view('account/login', ['logo' => $logo, 'title' => $title]);
  48. }
  49. return raw_view('index/index');
  50. }
  51. /**
  52. * 仪表板
  53. * @param Request $request
  54. * @return Response
  55. * @throws Throwable
  56. */
  57. public function dashboard(Request $request): Response
  58. {
  59. $teamId = admin('team_id');
  60. $data = Payorder::query()
  61. ->where('is_pay', 2)
  62. ->whereExists(function ($query) use ($teamId) {
  63. $query->from('wa_users')->whereRaw('wa_users.id=wa_payorder.user_id');
  64. if (!empty($teamId)) {
  65. $query->where('team_id', $teamId);
  66. }
  67. })
  68. ->select(['user_id', 'created_at', 'goods_type'])
  69. ->get()
  70. ->toArray();
  71. /** @var $user_id 获取今日购买订单信息 */
  72. $user_id = collect($data)->where('created_at', '>=', date('Y-m-d') . ' 00:00:00')->pluck('user_id')->toArray();
  73. $cja = collect($data)->where('created_at', '<', date('Y-m-d') . ' 00:00:00')->whereIn('user_id', $user_id)->pluck('user_id')->toArray();
  74. $numDya = count(array_unique($user_id)) - count(array_unique($cja));
  75. /** @var $num 购买总人数 */
  76. $num = collect($data)->groupBy('user_id')->count();
  77. $myGoodModel = Payorder::query()
  78. ->where('is_pay', 2)
  79. ->where('created_at','>=', '2025-10-07 23:59:59')
  80. ->whereExists(function ($query) use ($teamId) {
  81. $query->from('wa_users')->whereRaw('wa_users.id=wa_payorder.user_id');
  82. if (!empty($teamId)) {
  83. $query->where('team_id', $teamId);
  84. }
  85. });
  86. $withdrawModel = Withdraw::query()->where('status', 3)->whereExists(function ($query) use ($teamId) {
  87. $query->from('wa_users')->whereRaw('wa_users.id=wa_withdraw.user_id');
  88. if (!empty($teamId)) {
  89. $query->where('team_id', $teamId);
  90. }
  91. });
  92. if ($request->isAjax()) {
  93. $time = strtotime(date('Y-m-d') . ' 23:59:59');
  94. $arr = [
  95. date('Y-m-d', $time - 6 * 24 * 60 * 60),
  96. date('Y-m-d', $time - 5 * 24 * 60 * 60),
  97. date('Y-m-d', $time - 4 * 24 * 60 * 60),
  98. date('Y-m-d', $time - 3 * 24 * 60 * 60),
  99. date('Y-m-d', $time - 2 * 24 * 60 * 60),
  100. date('Y-m-d', $time - 1 * 24 * 60 * 60),
  101. date('Y-m-d', $time),
  102. ];
  103. $array = [];
  104. foreach ($arr as $v) {
  105. $array[] = [
  106. 'name' => date('m月d日', strtotime($v)),
  107. 'value1' => (clone $myGoodModel)->whereBetween('created_at', [$v . ' 00:00:00', $v . ' 23:59:59'])->sum('money'),
  108. 'value2' => (clone $withdrawModel)->whereBetween('updated_at', [$v . ' 00:00:00', $v . ' 23:59:59'])->sum('money'),
  109. ];
  110. }
  111. return adminsuccess($array);
  112. }
  113. // 总用户数
  114. $user_count = User::query()->where(function ($query) use ($teamId) {
  115. if (!empty($teamId)) {
  116. $query->where('team_id', $teamId);
  117. }
  118. })->count();
  119. // 今日签到
  120. $day7_user_count = Stream::query()
  121. ->whereExists(function ($query) use ($teamId) {
  122. $query->from('wa_users')->whereRaw('wa_users.id=wa_stream.user_id');
  123. if (!empty($teamId)) {
  124. $query->where('team_id', $teamId);
  125. }
  126. })->where('type', streamType2)
  127. ->whereBetween('created_at', [date('Y-m-d') . ' 00:00:00', date('Y-m-d') . ' 23:59:59'])
  128. ->count();
  129. // 在线用户
  130. $today_user_count = User::where('last_login', '>', time())->where(function ($query) use ($teamId) {
  131. if (!empty($teamId)) {
  132. $query->where('team_id', $teamId);
  133. }
  134. })->count();
  135. //今日注册人数
  136. $register_num = User::whereBetween('created_at',[date('Y-m-d').' 00:00:00',date('Y-m-d').' 23:59:59'])->where(function ($query) use ($teamId) {
  137. if (!empty($teamId)) {
  138. $query->where('team_id', $teamId);
  139. }
  140. })->count();
  141. // 订单金额
  142. $day30_user_count = Payorder::where('is_pay', 2)
  143. ->where('created_at','>=', '2025-10-07 23:59:59')
  144. ->whereExists(function ($query) use ($teamId) {
  145. $query->from('wa_users')->whereRaw('wa_users.id=wa_payorder.user_id');
  146. if (!empty($teamId)) {
  147. $query->where('team_id', $teamId);
  148. }
  149. })
  150. ->sum('money');
  151. $day7_detail = [];
  152. $now = time();
  153. for ($i = 0; $i < 7; $i ++) {
  154. $date = date('Y-m-d', $now - 24 * 60 * 60 * $i);
  155. $day7_detail[substr($date, 5)] = User::query()->where(function ($query) use ($teamId) {
  156. if (!empty($teamId)) {
  157. $query->where('team_id', $teamId);
  158. }
  159. })->whereBetween('created_at', ["$date 00:00:00", "$date 23:59:59"])->count();
  160. }
  161. /** 新增购买 */
  162. /** 总购买数 */
  163. return raw_view('index/dashboard', [
  164. 'today_user_count' => $today_user_count,
  165. 'day7_user_count' => $day7_user_count,
  166. 'day30_user_count' => $day30_user_count,
  167. 'user_count' => $user_count,
  168. 'day7_detail' => array_reverse($day7_detail),
  169. 'tal_num' => $num,
  170. 'numDya' => $numDya,
  171. 'register_num'=>$register_num,
  172. /* 'two_withdraw'=>(clone $withdrawModel)->sum('money'),*/
  173. 'app' => User::where('is_app', 1)->where(function ($query) use ($teamId) {
  174. if (!empty($teamId)) {
  175. $query->where('team_id', $teamId);
  176. }
  177. })->count()
  178. ]);
  179. }
  180. }