123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208 |
- <?php
- /**
- * Created by PhpStorm.
- * User: shensong
- * Date: 2022/7/27
- * Time: 10:54
- */
- namespace App\Service\ChatGroup;
- use App\Log;
- use App\Models\ChatGroup;
- use App\Models\ChatGroupMassMsg;
- use App\Models\Customer;
- use App\Models\DjUser;
- use App\Models\Es\ChatGroupMember;
- use App\Service\MassMsgRuleService;
- class ChatGroupRuleService
- {
- public static function setChatGroupMassMsg($ruleId, $params)
- {
- try {
- if($params['operate_type'] == 2){
- if($params['send_mode'] == 1) {
- $senders = json_decode($params['senders'], true);
- } elseif ($params['send_mode'] == 2) {
- $senders = json_decode($params['chat_groups'], true);
- }
- $corpIdList = MassMsgRuleService::getCorpIdListBySenders($senders);
- $params['corpid'] = implode(',', $corpIdList);
- }
- if($ruleId){ // 编辑群发规则
- # 判断是否为未发送状态
- $ruleInfo = ChatGroupMassMsg::where('id', $ruleId)->first();
- // 发送失败以及待发送状态 群发规则暂不支持编辑操作
- if(!isset($ruleInfo->enable) || !in_array($ruleInfo->enable, [-1, 1])) {
- return 2102;
- }
- $result = ChatGroupMassMsg::where('id', $ruleId)->update($params);
- } else {
- # 设置新群发规则
- $massMsgModel = new ChatGroupMassMsg();
- $massMsgModel->admin_id = $params['admin_id'];
- $massMsgModel->corpid = $params['corpid'];
- $massMsgModel->name = $params['name'];
- $massMsgModel->send_type = $params['send_type'];
- $massMsgModel->send_time = $params['send_time'];
- $massMsgModel->senders = $params['senders'];
- $massMsgModel->content = $params['content'];
- $massMsgModel->attachments = html_entity_decode($params['attachments']);
- $massMsgModel->chat_groups = $params['chat_groups'];
- $massMsgModel->send_mode = $params['send_mode'];
- $massMsgModel->item_id = $params['item_id'];
- $massMsgModel->operate_type = $params['operate_type'];
- $result = $massMsgModel->save();
- }
- if(!$result) return 2103;
- } catch (\Exception $e) {
- Log::logError('群发规则设置发生异常', [
- 'line' => $e->getLine(),
- 'msg' => $e->getMessage(),
- 'params' => $params,
- 'trace' => $e->getTraceAsString(),
- ], 'SetChatGroupMassMsgRule');
- return 2101;
- }
- return 0;
- }
- /**
- * 更新群发规则状态
- * @param $ruleId integer 群发规则ID
- * @param $status integer 群发规则待更新到的状态值 状态 -2:已删除 -1:发送失败 1:待发送 2:正在发送中 3:发送完成
- * @return int
- * */
- public static function updateStatus($ruleId, $status)
- {
- # 修改群发规则状态为已发送
- $updateStatus = ChatGroupMassMsg::updateRuleStatus($ruleId, $status);
- if(!$updateStatus) {
- Log::logError('ChatGroupRuleService.updateStatus', [
- 'err_msg' => '客户群群发规则状态更新失败',
- 'rule_id' => $ruleId,
- 'status' => $status
- ], 'interface');
- }
- return $updateStatus;
- }
- /**
- * 获取客户群列表
- * @param $corpid string 企业id
- * @param $owner string 群主user_id集合
- * @param $keyword string 群名称关键词
- * */
- public static function groupList($corpid, $owner, $keyword, $page, $pageSize)
- {
- list($list, $count) = ChatGroup::getGroupList($corpid, $owner, $keyword, $page, $pageSize);
- if(empty($list)) return [[], 0];
- # 获取群主信息
- $userIds = $list->pluck('owner')->toArray();
- $userIds = array_unique($userIds);
- $userList = DjUser::select(['user_id', 'name'])->whereIn('user_id', $userIds)->where('corpid', $corpid)->get();
- # 获取群人数
- $chatIds = $list->pluck('chat_id')->toArray();
- $chatIds = array_unique($chatIds);
- $groupMemberCount = ChatGroupMember::groupMemberCount($corpid, $chatIds);
- # 数据处理
- foreach ($list as $datum) {
- # 群主
- $userInfo = $userList->where('user_id', $datum->owner)->first();
- $datum->owner_name = $userInfo->name ?? '';
- # 群人数
- $datum->member_count = $groupMemberCount[$datum->chat_id] ?? 0;
- # 分享群ID
- $datum->share_chatid = $datum->corpid.'@@@'.$datum->chat_id;
- }
- return [$list, $count];
- }
- /**
- * 查询企业所有群内去重后的客户数
- * */
- public static function getUniqueMemberCount($corpid)
- {
- $count = ChatGroupMember::getUniqueMemberCount($corpid);
- return $count;
- }
- /**
- * 获取群概况
- * */
- public static function groupCondition($corpid, $chatId)
- {
- # 查询群基本信息
- $groupInfo = ChatGroup::select(['chat_id', 'name', 'owner', 'create_time', 'notice', 'status'])
- ->where('chat_id', $chatId)->where('corpid', $corpid)->where('enable', 1)
- ->first();
- if(empty($groupInfo)) return [];
- # 查询群成员概况
- list($joinTodayCount, $quitTodayCount, $memberCount, $joinTodayTotal) = ChatGroupMember::getGroupCondition($corpid, $chatId);
- # 今日加群客户数
- $groupInfo->join_today = $joinTodayCount;
- # 今日退群客户数
- $groupInfo->quit_today = $quitTodayCount;
- # 群内总客户数
- $groupInfo->member_count = $memberCount;
- # 群主
- $groupInfo->owner_name = DjUser::where('user_id', $groupInfo->owner)->where('corpid', $corpid)->value('name');
- return $groupInfo;
- }
- /**
- * 获取群成员列表
- * */
- public static function getMemberList($corpid, $chatId, $status, $keyword, $joinTimeStart, $joinTimeEnd, $page, $pageSize)
- {
- list($list, $count) = ChatGroupMember::getMemberList($corpid, $chatId, $status, $keyword, $joinTimeStart, $joinTimeEnd
- , $page, $pageSize);
- if(empty($list)) return [[], 0];
- $userIds = array_unique(array_column($list, 'user_id'));
- $customerList = Customer::suffix($corpid)->select(['id', 'external_userid', 'name', 'avatar'])
- ->where('corpid', $corpid)
- ->whereIn('external_userid', $userIds)->get();
- $userList = DjUser::select(['id','user_id', 'name', 'avatar'])
- ->whereIn('user_id', $userIds)->where('corpid', $corpid)->get();
- foreach ($list as &$item) {
- if($item['type'] == 1) { // 内部成员
- $userInfo = $userList->where('user_id', $item['user_id'])->first();
- } else { // 外部成员
- $userInfo = $customerList->where('external_userid', $item['user_id'])->first();
- }
- # 按用户名查询其所在的总群数
- $item['group_count'] = ChatGroupMember::getGroupCountByUserName($item['name']);
- $item['customer_id'] = $userInfo->id ?? '';
- $item['avatar'] = $userInfo->avatar ?? '';
- }
- return [$list, $count];
- }
- }
|