Browse Source

friends room_info

huangdong 6 years ago
parent
commit
288e0dd246
2 changed files with 171 additions and 1 deletions
  1. 30 1
      data/model/room.model.php
  2. 141 0
      test/TestTalk.php

+ 30 - 1
data/model/room.model.php

@@ -152,7 +152,6 @@ class roomModel extends Model
         }
         }
     }
     }
 
 
-
     public function getNotReadCnt($type,$from,$to,$member_cond=0){
     public function getNotReadCnt($type,$from,$to,$member_cond=0){
         if($type == 'chatwo'){
         if($type == 'chatwo'){
             $table = "room_chatwo_msg";
             $table = "room_chatwo_msg";
@@ -173,6 +172,36 @@ class roomModel extends Model
         return $this->table($table)->where($condtion)->count();
         return $this->table($table)->where($condtion)->count();
     }
     }
 
 
+
+    public function getChatsRoom($user)
+    {
+        return $this->table('room_participant,room')
+                ->join('left')->on('room_participant.room_id = room.room_id')
+                ->field('room.*')
+                ->where(['room.type'=>\room\proto_type::room_chat,'room_participant.member_id'=>$user])
+                ->select();
+    }
+
+    public function getJoinedChatRoom($user){
+        $join_rooms = $this->getJoinedRoom($user);
+        if(!empty($join_rooms)){
+            $roomids = [];
+            foreach ($join_rooms as $room){$roomids[] = $room['room_id'];}
+            return $this->table('room')->field('*')->where(['type'=>\room\proto_type::room_chat,'room_id'=>['in',$roomids]])->select();
+        }else{
+            return [];
+        }
+    }
+
+    private function getJoinedRoom($user){
+        return $this->table('room_participant')->field('*')->where(['member_id'=>$user,'state'=>0])->select();
+    }
+
+    public function getRoomMember($room){
+        return  $this->table('room_participant')->field('*')->where(['room_id'=>$room,'state'=>0])->select();
+    }
+
+
     public function getUserRoomMsg($room_id,$userid,$msg_type)
     public function getUserRoomMsg($room_id,$userid,$msg_type)
     {
     {
         return $this->table('room_msg')->field('*')->where(['room_id' => $room_id,'member_id' => $userid,'type' => $msg_type])->order('add_time desc')->select();
         return $this->table('room_msg')->field('*')->where(['room_id' => $room_id,'member_id' => $userid,'type' => $msg_type])->order('add_time desc')->select();

+ 141 - 0
test/TestTalk.php

@@ -280,4 +280,145 @@ class TestTalk extends PHPUnit_Framework_TestCase
         return $items;
         return $items;
     }
     }
 
 
+
+
+    public function testRoom_list(){
+        $_SESSION['is_login'] =1;
+        $_SESSION['member_id'] = 39623;
+
+        $user = 39623;
+
+        $case1 = $this->room_case1($user);
+
+        $case2 = $this->room_case2($user);
+        echo 0;
+    }
+
+    private function room_case2($user){
+        $mod_room = Model("room");
+        $chats_rooms = $mod_room->getChatsRoom($user);
+
+        $rooms = [];
+        $uids_total = [];
+        if(!empty($chats_rooms))
+        {
+            foreach ($chats_rooms as $room)
+            {
+                $uids = [];
+                $paticipates = $mod_room->getRoomMember($room['room_id']);
+                if(!empty($paticipates))
+                {
+                    foreach ($paticipates as $one)
+                    {
+                        $uids[] = $one['member_id'];
+                    }
+
+                    $uids_total = array_merge($uids_total,$uids);
+                }
+
+
+                $rooms[] = [
+                    "room_id"=>$room['room_id'],
+                    "room_name"=>$room['room_name'],
+                    "avatar"=>"",
+                    "room_members"=>$uids
+                ];
+            }
+
+            $members = [];
+            if(!empty($uids_total))
+            {
+                $uids_total = array_unique($uids_total);
+                $items = Model('member')->getMemberList(['member_id' => ['in',$uids_total]]);
+
+                foreach ($items as $item){
+                    try
+                    {
+                        $info = new member_info($item);
+                        $members[$item['member_id']] = $info->filter();
+                    }
+                    catch (Exception $ex) {
+                        Log::record($ex->getMessage(),Log::ERR);
+                    }
+                }
+            }
+
+
+            if(!empty($members))
+            {
+                foreach ($rooms as $index => $room){
+                    $room_members = [];
+                    if(!empty($room['room_members']))
+                    {
+                        foreach ($room['room_members'] as $uid)
+                        {
+                            if(isset($members[$uid])){
+                                $room_members[] = $members[$uid];
+                            }
+
+                        }
+                    }
+                    $rooms[$index]['room_members'] = $room_members;
+                }
+            }
+        }
+
+        return $rooms;
+    }
+
+    private function room_case1($user)
+    {
+        $mod_room = Model('room');
+        $chat_rooms = $mod_room->getJoinedChatRoom($user);
+
+        $rooms = [];
+        if(!empty($chat_rooms))
+        {
+            foreach ($chat_rooms as $item)
+            {
+                $rooms[] = $this->room_info($item);
+            }
+        }
+
+        return $rooms;
+    }
+
+    private function room_info($room){
+        $mod_room = Model("room");
+        $paticipates = $mod_room->getRoomMember($room['room_id']);
+
+        $uids = [];
+        if(!empty($paticipates))
+        {
+            foreach ($paticipates as $one){
+                $uids[] = $one['member_id'];
+            }
+        }
+
+        if(empty($uids)){
+            $items = [];
+        }else{
+            $items = Model('member')->getMemberList(['member_id' => ['in',$uids]]);
+        }
+
+        $members = [];
+        foreach ($items as $item){
+            try
+            {
+                $info = new member_info($item);
+                $members[] = $info->filter();
+            }
+            catch (Exception $ex) {
+                Log::record($ex->getMessage(),Log::ERR);
+            }
+        }
+
+        $ret = [
+            "room_id"=>$room['room_id'],
+            "room_name"=>$room["room_name"],
+            "avatar"=> "", //头像和member查询维度太高
+            "room_members"=>$members,
+        ];
+        return $ret;
+    }
 }
 }