// +---------------------------------------------------------------------- namespace app\dao\work; use app\dao\BaseDao; use app\model\work\WorkGroupChatMember; use crmeb\traits\SearchDaoTrait; /** * 企业微信群成员 * Class WorkGroupChatMemberDao * @package app\dao\work */ class WorkGroupChatMemberDao extends BaseDao { use SearchDaoTrait; /** * @return string */ protected function setModel(): string { return WorkGroupChatMember::class; } /** * 获取今日新增成员数 * @param int $groupId * @return int */ public function getToDaySum(int $groupId) { return $this->getModel()->where('status', 1)->where('group_id', $groupId)->whereDay('join_time')->count(); } /** * 获取今日退群成员数 * @param int $groupId * @return int */ public function getToDayReturn(int $groupId) { return $this->getModel()->where('status', 0)->where('group_id', $groupId)->whereDay('join_time')->count(); } /** * 获取人数统计 * @param int $groupId * @param string $fromUnixtime * @param array $field * @param int $status * @param string $time * @param int $page * @param int $limit * @return mixed */ public function getChatMemberStatistics(int $groupId, string $fromUnixtime = 'create_time', array $field = [], int $status = 1, string $time = '', int $page = 0, int $limit = 0) { $date = '%Y-%m-%d'; switch ($time) { case 'today': case 'yesterday': $date = '%Y-%m-%d %H'; break; case 'week': case 'last week': case 'last month': case 'month': $date = '%Y-%m-%d'; break; case 'year': case 'last year': $date = '%Y-%m'; break; } return $this->search(['time' => $time, 'timeKey' => $fromUnixtime]) ->where('group_id', $groupId) ->where('status', $status) ->when($page && $limit, function ($query) use ($page, $limit) { $query->page($page, $limit); }) ->field(array_merge($field, ['from_unixtime(' . $fromUnixtime . ',"' . $date . '") as time'])) ->group('time') ->select()->toArray(); } /** * 获取人数统计条数 * @param int $groupId * @param int $status * @param string $time * @return mixed */ public function getChatMemberStatisticsCount(int $groupId, int $status = 1, string $time = '') { $date = '%Y-%m-%d'; switch ($time) { case 'today': case 'yesterday': $date = '%Y-%m-%d %H'; break; case 'week': case 'last week': case 'last month': case 'month': $date = '%Y-%m-%d'; break; case 'year': case 'last year': $date = '%Y-%m'; break; } return $this->search(['time' => $time, 'timeKey' => 'update_time']) ->where('group_id', $groupId) ->where('status', $status) ->field(['from_unixtime(update_time,"' . $date . '") as time']) ->group('time') ->count(); } /** * 当前用户所在群个数 * @param string $userid * @return int */ public function getChatSum(string $userid) { return $this->getModel()->where('userid', $userid)->group('group_id')->count(); } }