attempts() > 3 || !in_array($action,$this->actions)) { $job->delete(); return; } try { // 根据不同的方法执行处理数据 $res=$this->$action($data); if($res){ print("".$action." is success \n"); }else{ print("".$action." is error \n"); } } catch (\Exception $e) { print("".$action." error: ".$e->getMessage()." \n"); } $job->delete(); } // 创建头像 public function createAvatar($data) { $group_id=$data['group_id'] ?? 0; if(!$group_id){ return false;} $userList = GroupUser::where(['group_id' => $group_id,'status'=>1])->limit(9)->column('user_id'); $userList = User::where('user_id', 'in', $userList)->select()->toArray(); $imgList = []; $dirPath = app()->getRootPath() . 'public/temp'; foreach ($userList as $k => $v) { if ($v['avatar']) { $imgList[] = avatarUrl($v['avatar'], $v['realname'], $v['user_id']); } else { $imgList[] = circleAvatar($v['realname'], 80, $v['user_id'], 1, $dirPath); } } $groupId = 'group_' . $group_id; $path = $dirPath . '/' . $groupId . '.jpg'; $a = getGroupAvatar($imgList, 1, $path); $url = ''; if ($a) { $upload = new Upload(); $newPath = $upload->uploadLocalAvatar($path, [], $groupId); if ($newPath) { Group::where('group_id', $group_id)->update(['avatar' => $newPath]); $url = avatarUrl($newPath); } } $files = glob($dirPath . '/*'); // 获取目录下所有文件路径 foreach ($files as $file) { if (is_file($file)) { // 如果是文件则删除 unlink($file); } } wsSendMsg($group_id,"setManager",['group_id'=>'group-'.$group_id,'avatar'=>$url],1); return true; } // 清理除了音频相关的文件 public function clearFiles($data){ $fileIds = $data['fileIds']; $count=0; foreach($fileIds as $fileId){ $message=Message::where(['file_id'=>$fileId])->count(); // 如果还有消息,就不删除文件 if($message>0){ continue; } $file=File::find($fileId); if($file){ $MD5=$file->md5; $src=$file->src; $file->delete(); // 查询相同文件 $sameFile=File::where(['md5'=>$MD5])->count(); // 如果有相同的文件,则不删除原件 if($sameFile){ continue; } $count++; // 删除源文件 $disk=env('filesystem.driver','local'); Filesystem::disk($disk)->delete($src); } print("成功删除".$count."个文件! \n"); return true; } } // 清理除了音频相关的文件 public function clearVoice($data){ $list = $data['list']; foreach($list as $content){ $src = str_encipher($content,false); // 解密文件路径,删除源文件 $disk=env('filesystem.driver','local'); Filesystem::disk($disk)->delete($src); } print("成功删除".count($list)."个音频文件! \n"); return true; } // 设置已读 public function setIsRead($data){ $is_group=$data['is_group']; $to_user= $data['to_user']; $messages=$data['messages']; $user_id=$data['user_id']; if ($is_group==1) { $toContactId = explode('-', $to_user)[1]; // 将@消息放到定时任务中逐步清理 if($messages){ Message::setAtRead($messages,$user_id); } // 更新群里面我的所有未读消息为0 GroupUser::editGroupUser(['user_id' => $user_id, 'group_id' => $toContactId], ['unread' => 0]); } else if($is_group==0) { $chat_identify = chat_identify($user_id, $to_user); // 更新我的未读消息为0 Message::update(['is_read' => 1], [['chat_identify', '=', $chat_identify], ['to_user', '=', $user_id]]); // 告诉对方我阅读了消息 wsSendMsg($to_user, 'readAll', ['toContactId' => $user_id]); } return true; } // 转发消息 public function forwardMessage($data){ try{ $is_group=0; $error=0; $simpleChat=$data['config']['chatInfo']['simpleChat'] ?? 1; $userInfo=$data['userInfo']; $userIds=$data['user_ids']; foreach($userIds as $k=>$v){ $msgInfo=$data['message']; if(strpos($v,'group')!==false){ $is_group=1; }else{ $is_group=0; } if($is_group==0 && $simpleChat==0){ $error++; continue; } $msgInfo['id']=\utils\Str::getUuid(); $msgInfo['status']='successd'; $msgInfo['user_id']=$userInfo['user_id']; $msgInfo['sendTime']=time()*1000; $msgInfo['toContactId']=$v; $msgInfo['content']=str_encipher($msgInfo['content'],false); $msgInfo['fromUser']=[ 'id'=>$userInfo['user_id'], 'avatar'=>avatarUrl($userInfo['avatar'],$userInfo['realname'],$userInfo['user_id'],120), 'displayName'=>$userInfo['realname'] ]; $msgInfo['is_group']=$is_group; $message=new Message(); $msgInfo['is_forward']=1; $isSend=$message->sendMessage($msgInfo,$data['config']); if(!$isSend){ $error++; } } $count=count($userIds); print("成功转发".($count - $error)."条消息 \n"); return true; }catch(\Exception $e){ print("转发失败! \n".$e->getMessage().$e->getLine()); } } }