MemberController.php 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. <?php
  2. namespace app\admin\controller\statistics;
  3. use app\model\Member;
  4. use support\Db;
  5. class MemberController
  6. {
  7. public function index()
  8. {
  9. // 会员数量
  10. $memberCount = Member::where('member_is_owner', 'N')->where('member_mobile','<>','0000')->count();
  11. // 业主数量
  12. $ownerCount = Member::where('member_is_owner', 'Y')->count();
  13. // 用户总数
  14. $userCount = $memberCount + $ownerCount;
  15. // 今日新增用户数
  16. $todayTime = strtotime(date('Y-m-d 00:00:00'));
  17. $todayCount = Member::where('member_addtimes', '>', $todayTime)->where('member_is_owner', 'N')->count();
  18. // 本月新增用户数
  19. $monthTime = strtotime(date('Y-m-01 00:00:00'));
  20. $monthCount = Member::where('member_addtimes', '>', $monthTime)->where('member_is_owner', 'N')->count();
  21. // 折线图
  22. $newAddition = Db::select("
  23. SELECT t1.month, t1.member_count,
  24. SUM(t2.member_count) AS member_month_count
  25. FROM (
  26. SELECT DATE_FORMAT(FROM_UNIXTIME(member_addtimes), '%Y/%m') AS month,
  27. COUNT(member_id) AS member_count
  28. FROM app_member
  29. GROUP BY month
  30. ) t1
  31. JOIN (
  32. SELECT DATE_FORMAT(FROM_UNIXTIME(member_addtimes), '%Y/%m') AS month,
  33. COUNT(member_id) AS member_count
  34. FROM app_member
  35. GROUP BY month
  36. ) t2 ON t1.month >= t2.month
  37. GROUP BY t1.month;
  38. ");
  39. $newAdditionData = [];
  40. foreach ($newAddition as $item) {
  41. $newAdditionData['category'][] = $item->month;
  42. $newAdditionData['data'][] = $item->member_count;
  43. $newAdditionData['month_total'][] = $item->member_month_count;
  44. }
  45. // 饼图
  46. $newAdditionBing = Db::select("
  47. SELECT CASE
  48. WHEN TIMESTAMPDIFF(YEAR, member_cert_birth, CURDATE()) BETWEEN 0 AND 1 THEN '0'
  49. WHEN TIMESTAMPDIFF(YEAR, member_cert_birth, CURDATE()) BETWEEN 1 AND 39 THEN '39'
  50. WHEN TIMESTAMPDIFF(YEAR, member_cert_birth, CURDATE()) BETWEEN 40 AND 50 THEN '40-50'
  51. WHEN TIMESTAMPDIFF(YEAR, member_cert_birth, CURDATE()) BETWEEN 51 AND 60 THEN '51-60'
  52. WHEN TIMESTAMPDIFF(YEAR, member_cert_birth, CURDATE()) BETWEEN 61 AND 70 THEN '60-70'
  53. WHEN TIMESTAMPDIFF(YEAR, member_cert_birth, CURDATE()) BETWEEN 71 AND 80 THEN '70-80'
  54. ELSE '81以上'
  55. END AS age_group,
  56. COUNT(*) AS number_of_people
  57. FROM
  58. app_member_cert
  59. WHERE member_cert_birth != ''
  60. GROUP BY
  61. age_group
  62. ORDER BY
  63. age_group;
  64. ");
  65. $newAdditionBingData = [];
  66. foreach ($newAdditionBing as $item) {
  67. if ($item->age_group == '0') {
  68. $item->age_group = '未知';
  69. }elseif ($item->age_group == '39'){
  70. $item->age_group = '40以下';
  71. }
  72. $newAdditionBingData[] = [
  73. 'name' => $item->age_group,
  74. 'value' => $item->number_of_people
  75. ];
  76. }
  77. $data = [
  78. 'memberCount' => $memberCount,
  79. 'ownerCount' => $ownerCount,
  80. 'userCount' => $userCount,
  81. 'todayCount' => $todayCount,
  82. 'monthCount' => $monthCount,
  83. 'newAdditionData' => $newAdditionData,
  84. 'newAdditionBingData' => $newAdditionBingData
  85. ];
  86. return json_success('', $data);
  87. }
  88. }