SystemLoginLogLogic.php 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | saiadmin [ saiadmin快速开发框架 ]
  4. // +----------------------------------------------------------------------
  5. // | Author: sai <1430792918@qq.com>
  6. // +----------------------------------------------------------------------
  7. namespace plugin\saiadmin\app\logic\system;
  8. use plugin\saiadmin\app\model\system\SystemLoginLog;
  9. use plugin\saiadmin\basic\think\BaseLogic;
  10. use plugin\saiadmin\utils\Helper;
  11. use support\think\Db;
  12. /**
  13. * 登录日志逻辑层
  14. */
  15. class SystemLoginLogLogic extends BaseLogic
  16. {
  17. /**
  18. * 构造函数
  19. */
  20. public function __construct()
  21. {
  22. $this->model = new SystemLoginLog();
  23. }
  24. /**
  25. * 登录统计图表
  26. * @return array
  27. */
  28. public function loginChart(): array
  29. {
  30. $sql = "
  31. SELECT
  32. d.date AS login_date,
  33. COUNT(l.login_time) AS login_count
  34. FROM
  35. (SELECT CURDATE() - INTERVAL (a.N) DAY AS date
  36. FROM (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3
  37. UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6
  38. UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a
  39. ) d
  40. LEFT JOIN sa_system_login_log l
  41. ON DATE(l.login_time) = d.date
  42. GROUP BY d.date
  43. ORDER BY d.date ASC;
  44. ";
  45. $data = Db::query($sql);
  46. return [
  47. 'login_count' => array_column($data, 'login_count'),
  48. 'login_date' => array_column($data, 'login_date'),
  49. ];
  50. }
  51. /**
  52. * 登录统计图表
  53. * @return array
  54. */
  55. public function loginBarChart(): array
  56. {
  57. $sql = "
  58. SELECT
  59. -- 拼接成 YYYY-MM 格式,例如 2023-01
  60. CONCAT(LPAD(m.month_num, 2, '0'), '月') AS login_month,
  61. COUNT(l.login_time) AS login_count
  62. FROM
  63. -- 生成 1 到 12 的月份数字
  64. (SELECT 1 AS month_num UNION ALL SELECT 2 UNION ALL SELECT 3
  65. UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6
  66. UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9
  67. UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12) m
  68. LEFT JOIN sa_system_login_log l
  69. -- 关联条件:年份等于今年 且 月份等于生成的数字
  70. ON YEAR(l.login_time) = YEAR(CURDATE())
  71. AND MONTH(l.login_time) = m.month_num
  72. GROUP BY
  73. m.month_num
  74. ORDER BY
  75. m.month_num ASC;
  76. ";
  77. $data = Db::query($sql);
  78. return [
  79. 'login_count' => array_column($data, 'login_count'),
  80. 'login_month' => array_column($data, 'login_month'),
  81. ];
  82. }
  83. }