Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

WorkGroupChatMemberDao.php 3.5KB

2 лет назад
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. <?php
  2. namespace app\dao\work;
  3. use app\dao\BaseDao;
  4. use app\model\work\WorkGroupChatMember;
  5. use crmeb\traits\SearchDaoTrait;
  6. /**
  7. * 企业微信群成员
  8. * Class WorkGroupChatMemberDao
  9. * @package app\dao\work
  10. */
  11. class WorkGroupChatMemberDao extends BaseDao
  12. {
  13. use SearchDaoTrait;
  14. /**
  15. * @return string
  16. */
  17. protected function setModel(): string
  18. {
  19. return WorkGroupChatMember::class;
  20. }
  21. /**
  22. * 获取今日新增成员数
  23. * @param int $groupId
  24. * @return int
  25. */
  26. public function getToDaySum(int $groupId)
  27. {
  28. return $this->getModel()->where('status', 1)->where('group_id', $groupId)->whereDay('join_time')->count();
  29. }
  30. /**
  31. * 获取今日退群成员数
  32. * @param int $groupId
  33. * @return int
  34. */
  35. public function getToDayReturn(int $groupId)
  36. {
  37. return $this->getModel()->where('status', 0)->where('group_id', $groupId)->whereDay('join_time')->count();
  38. }
  39. /**
  40. * 获取人数统计
  41. * @param int $groupId
  42. * @param string $fromUnixtime
  43. * @param array $field
  44. * @param int $status
  45. * @param string $time
  46. * @param int $page
  47. * @param int $limit
  48. * @return mixed
  49. */
  50. public function getChatMemberStatistics(int $groupId, string $fromUnixtime = 'create_time', array $field = [], int $status = 1, string $time = '', int $page = 0, int $limit = 0)
  51. {
  52. $date = '%Y-%m-%d';
  53. switch ($time) {
  54. case 'today':
  55. case 'yesterday':
  56. $date = '%Y-%m-%d %H';
  57. break;
  58. case 'week':
  59. case 'last week':
  60. case 'last month':
  61. case 'month':
  62. $date = '%Y-%m-%d';
  63. break;
  64. case 'year':
  65. case 'last year':
  66. $date = '%Y-%m';
  67. break;
  68. }
  69. return $this->search(['time' => $time, 'timeKey' => $fromUnixtime])
  70. ->where('group_id', $groupId)
  71. ->where('status', $status)
  72. ->when($page && $limit, function ($query) use ($page, $limit) {
  73. $query->page($page, $limit);
  74. })
  75. ->field(array_merge($field, ['from_unixtime(' . $fromUnixtime . ',"' . $date . '") as time']))
  76. ->group('time')
  77. ->select()->toArray();
  78. }
  79. /**
  80. * 获取人数统计条数
  81. * @param int $groupId
  82. * @param int $status
  83. * @param string $time
  84. * @return mixed
  85. */
  86. public function getChatMemberStatisticsCount(int $groupId, int $status = 1, string $time = '')
  87. {
  88. $date = '%Y-%m-%d';
  89. switch ($time) {
  90. case 'today':
  91. case 'yesterday':
  92. $date = '%Y-%m-%d %H';
  93. break;
  94. case 'week':
  95. case 'last week':
  96. case 'last month':
  97. case 'month':
  98. $date = '%Y-%m-%d';
  99. break;
  100. case 'year':
  101. case 'last year':
  102. $date = '%Y-%m';
  103. break;
  104. }
  105. return $this->search(['time' => $time, 'timeKey' => 'update_time'])
  106. ->where('group_id', $groupId)
  107. ->where('status', $status)
  108. ->field(['from_unixtime(update_time,"' . $date . '") as time'])
  109. ->group('time')
  110. ->count();
  111. }
  112. /**
  113. * 当前用户所在群个数
  114. * @param string $userid
  115. * @return int
  116. */
  117. public function getChatSum(string $userid)
  118. {
  119. return $this->getModel()->where('userid', $userid)->group('group_id')->count();
  120. }
  121. }