Przeglądaj źródła

创建公会时,创建派对和环信聊天室

lizhen_gitee 1 rok temu
rodzic
commit
807782cb75

+ 157 - 1
application/api/controller/Guild.php

@@ -18,6 +18,15 @@ class Guild extends Api
     protected $noNeedLogin = ['getGuildList'];
     protected $noNeedRight = ['*'];
 
+    protected $roomTypeArr;
+
+    public function __construct()
+    {
+        parent::__construct();
+
+        $this->roomTypeArr = [1=>"party",2=>"live"];
+    }
+
     /**
      * 获取搜索公会列表
      */
@@ -234,8 +243,11 @@ class Guild extends Api
                 $guildInfo->g_id = getUinqueId(4, [$ids]);
                 $guildInfo->status = 0;
 
-                //去环信建个房间
                 //去派对建个房间
+                $party_info = $this->createParty($user_id,$guild_name,$guild_image,$guild_desc,$guild_notice,8,1,1);
+                $guildInfo->party_id = $party_info['party_id'];
+                $guildInfo->easemob_room_id = $party_info['easemob_room_id'];
+
             } else {
                 // 获取公会信息
                 $guildInfo = \app\common\model\Guild::where(["id"=>$guild_id])->find();
@@ -293,6 +305,150 @@ class Guild extends Api
     }
 
     /**
+     * 创建/进入派对
+     */
+    private function createParty($user_id,$party_name,$party_logo,$guild_desc,$guild_notice,$seatnum = 8,$is_public = 1,$room_type = 1) {
+
+        $partyModel = new \app\common\model\Party();
+        // 判断派对是否存在
+
+
+
+        // sql中不存在派对信息
+
+        $party_type = 7; // 派对类型(情感互动,心动点单 等)
+        $party_notice = $guild_desc; // 派对公告
+        $party_notice_detail = $guild_notice; // 派对公告详情
+
+        $party_ids = $partyModel->column("party_id");
+        // 创建派对ID (临时ID四位,派对数不超过8999)
+        $party_id = $this->auth->getUinqueId(4,$party_ids);
+        if($party_id > 9999) {
+            $this->error("房间超限,请联系客服");
+        }
+
+        //创建房间,初始化环信
+        $easemob_room_id = $this->easemob_createroom($party_name,$party_logo,$seatnum,$is_public,$room_type);
+
+        //写入派对
+        $data = [];
+        $data["user_id"] = $user_id;
+        $data["room_type"] = $room_type;
+        $data["party_id"] = $party_id;
+        $data["party_hot"] = 0;
+        $data["party_name"] = $party_name;
+        $data["party_logo"] = $party_logo;
+        $data["party_type"] = $party_type;
+        $data["party_notice"] = $party_notice;
+        $data["party_notice_detail"] = $party_notice_detail;
+        $data["is_online"] = 1;
+        $data["status"] = -1;//封禁状态
+        $data["is_recommend"] = 0;
+        $data["createtime"] = time();
+        $data["easemob_room_id"] = $easemob_room_id;
+        $id = $partyModel->insertGetId($data);
+        if(!$id) {
+            $this->error("工会房间创建失败,请稍后重试!");
+        }
+        $data["id"] = $id;
+
+        $partyInfo = $partyModel->where(["id"=>$id])->find();
+        $partyInfo["is_new"] = 1;
+
+
+        $partyInfo["type_name"] = '工会房';
+
+        //redis
+        $redis = new Redis();
+        $redisconfig = config("redis");
+        $redis->connect($redisconfig["host"], $redisconfig["port"]);
+        if ($redisconfig['redis_pwd']) {
+            $redis->auth($redisconfig['redis_pwd']);
+        }
+        if($redisconfig['redis_selectdb'] > 0){
+            $redis->select($redisconfig['redis_selectdb']);
+        }
+
+        // 加入缓存排序,rediskey:派对热度
+        $redis->zAdd($this->roomTypeArr[$room_type]."Rank", $partyInfo['party_hot'], $partyInfo["id"]);
+        // 加入缓存,rediskey:派对详情
+        $redis->set($this->roomTypeArr[$room_type]."_".$partyInfo["id"],json_encode($partyInfo));
+
+        //更新家族 party_id
+        $rs = [
+            'party_id' => $party_id,
+            'easemob_room_id' => $easemob_room_id,
+        ];
+
+        return $rs;
+
+        //声网三个token
+//        $partyInfo['shengwang_token'] = $this->shengwang_token_private($easemob_room_id);
+
+
+    }
+
+    //创建房间,初始化环信
+    private function easemob_createroom($party_name,$party_logo,$seatnum,$is_public,$room_type){
+        //[环信]创建聊天室
+        $easemob = new Easemob();
+        $easemob_room_id = $easemob->room_createRoom($party_name,$party_name,$this->auth->id);
+        if(empty($easemob_room_id)){
+            $this->error('创建房间失败');
+        }
+
+        //[环信]初始化房间,初始化自定义属性
+        $matedata = [
+            'seatnum'=> $seatnum,//麦位数量
+            'waitsing_list'  => json_encode([]),//已点歌曲列表
+            'party_name' => $party_name,//房名字
+            'party_logo' => $party_logo,//logo
+            'is_public'  => $is_public,//是否公开
+            'room_type'  => $room_type,//房间类型
+            'online_user_num' => 0,//当前房间在线的人
+            'wealth_top3_userlist' => json_encode([]),//财富榜前3个人列表
+            'background' => '', //房间背景
+        ];
+        $rs = $easemob->room_setRoomCustomAttributeForced($easemob_room_id,$this->auth->id,$matedata);
+
+        //[环信]初始化N个麦位
+        $seatdata = [];
+        for($i=0;$i<$seatnum;$i++){
+            $seat = [
+                'charm'    => 0,                    //红心,魅力值
+
+                'isMaster'       => false,            // 是否是房主
+                'headUrl'        => '',              // 头像
+                'userNo'         => '',               // 座位上用户no
+                'rtcUid'         => '',               // 座位上用户id,与rtc的userId一致
+                'name'           => '',                 // 座位上用户昵称
+                'seatIndex'      => -1,               // 座位编号
+                'chorusSongCode' => '',             // 是否合唱
+                'isAudioMuted'   => 1,            // 是否静音
+                'isVideoMuted'   => 0,            // 是否开启视频
+                'checked'        => false,       // 用于送礼物选择用户
+                'isUsed'         => true,          // 用于送礼物选择用户
+                'gender'         => 1, //性别
+            ];
+
+            //创建完房间就进入,所以房主直接在麦位0
+            if($i == 0){
+                $seat['isMaster'] = true;
+                $seat['headUrl']  = localpath_to_netpath($this->auth->avatar);
+                $seat['userNo']   = $this->auth->id;
+                $seat['rtcUid']   = $this->auth->id;
+                $seat['name']     = $this->auth->nickname;
+                $seat['seatIndex'] = $i;
+            }
+
+            $seatdata['seat'.$i] = json_encode($seat);
+        }
+        $rs = $easemob->room_setRoomCustomAttributeForced($easemob_room_id,$this->auth->id,$seatdata);
+
+        return $easemob_room_id;
+    }
+
+    /**
      * 公会签约申请
      */
     public function guildJoinin() {

+ 4 - 2
application/api/controller/Party.php

@@ -151,11 +151,11 @@ class Party extends Api
         $sqlPartyInfo = $partyModel->where($where)->find();
 
         if(!$sqlPartyInfo) { // sql中不存在派对信息
-            $partylimit = config("site.roomLimit");
+            /*$partylimit = config("site.roomLimit");
             $partycount = $partyModel->where(['is_close'=>0])->count("id");
             if($partycount >= $partylimit && $partylimit != -1) {
                 $this->error("房间数量已达上线,请联系客服!");
-            }
+            }*/
 
             $party_type = 8; // 派对类型(情感互动,心动点单 等)
             $party_notice = "请编辑房间公告"; // 派对公告
@@ -271,6 +271,8 @@ class Party extends Api
                 $easemob_room_id = $sqlPartyInfo['easemob_room_id'];
             }
 
+            //重置easemob_room_id
+
         }
 
         //声网三个token