Sfoglia il codice sorgente

add membertalk friends msgs

stanley-king 6 anni fa
parent
commit
38463de3c6

+ 11 - 2
core/framework/libraries/pinyin.php

@@ -7040,9 +7040,18 @@ class Pinyin
         if(empty($words)) {
             return '';
         }
-        else {
+        else
+        {
             $ar = str_split($words);
-            return $ar[0];
+
+            $first = $ar[0];
+            $ch = ord($first);
+            if(ctype_alnum($ar[0]) && $ch < 128) {
+                return strtoupper($first);
+            }
+            else {
+                return "Z";
+            }
         }
     }
 }

+ 10 - 0
data/model/room.model.php

@@ -54,6 +54,16 @@ class roomModel extends Model
         return $this->table('room_msg')->field('*')->where(['room_id' => $room_id, 'type' => $msg_type])->order('add_time desc')->select();
     }
 
+    public function getRoomMsgList($condition, $pagesize = '', $field = '*', $order = 'msg_id desc',$master = false)
+    {
+        return $this->table('room_msg')->field($field)->where($condition)->order($order)->limit($pagesize)->master($master)->select();
+    }
+
+    public function getChatwoMsgList($condition, $pagesize = '', $field = '*', $order = 'msg_id desc',$master = false)
+    {
+        return $this->table('room_chatwo_msg')->field($field)->where($condition)->page($pagesize)->order($order)->limit($pagesize)->master($master)->select();
+    }
+
     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();

+ 2 - 0
fooder.php

@@ -32,6 +32,8 @@ require_once(BASE_CORE_PATH . '/framework/db/mysqli.php');
 require_once(BASE_CORE_PATH . '/framework/function/goods.php');
 require_once(BASE_CORE_PATH . '/framework/libraries/validator.php');
 require_once(BASE_CORE_PATH . '/framework/libraries/resizeimage.php');
+require_once(BASE_CORE_PATH . '/framework/libraries/pinyin.php');
+
 
 require_once(BASE_ROOT_PATH . '/helper/performance_helper.php');
 require_once(BASE_ROOT_PATH . '/helper/sensitive_word/dfa.php');

+ 24 - 1
helper/model/member_info.php

@@ -9,6 +9,8 @@
 
 require_once (BASE_ROOT_PATH . '/helper/util_helper.php');
 require_once (BASE_ROOT_PATH . '/helper/url_helper.php');
+require_once (BASE_CORE_PATH . '/framework/libraries/pinyin.php');
+
 
 class member_info
 {
@@ -131,14 +133,18 @@ class member_info
     }
     public function filter()
     {
+        $info = [];
+
+        $nickname = $this->nickname();
         $info['member_id'] = $this->member_id();
         $info['is_man'] = $this->is_man();
-        $info['nickname'] = $this->nickname();
+        $info['nickname'] = $nickname;
         $info['avatar'] = $this->avatar();
         $info['available_bonus'] = $this->available_bonus();
         $info['discount_self']   = $this->discount_self();
         $info['member_index'] = url_helper::member_index($info['member_id']);
         $info['enmember_id'] = $this->enmember_id();
+        $info['alpha'] = Pinyin::getAlpha($nickname);
 
         return $info;
     }
@@ -188,4 +194,21 @@ class member_info
         return intval($this->member_info['invited_bonus']) == 1;
     }
 
+    static function alpha_compare($left,$right)
+    {
+        $l = $left['alpha'];
+        $r = $right['alpha'];
+
+        if($l > $r) {
+            return 1;
+        }
+        elseif($l == $r) {
+            $l_name = $left['nickname'];
+            $r_name = $right['nickname'];
+            return strcmp($l_name,$r_name);
+        }
+        else {
+            return -1;
+        }
+    }
 }

+ 1 - 1
helper/room/bargain_room.php

@@ -92,7 +92,7 @@ class bargain_room extends base_room
     {
         parent::__construct($cinfos,$participants);
 
-        $this->mRoomType = 'bargain_goods';
+        $this->mRoomType = proto_type::sroom_bargain;
         $this->mManager = new bargain_manager($this->room_id());
     }
 

+ 6 - 6
helper/room/chat_room.php

@@ -2,17 +2,17 @@
 /**
  * Created by PhpStorm.
  * User: stanley-king
- * Date: 2017/12/18
- * Time: 下午4:34
+ * Date: 2018/7/30
+ * Time: 下午9:10
  */
 
 namespace room;
 
 class chat_room extends base_room
 {
-    public function __construct($cinfos, $participants = [])
+    public function __construct($cinfos, array $participants = [])
     {
-        $this->mRoomType = 'chat';
-        parent::__construct($cinfos,$participants);
+        $this->mRoomType = 'shake_bonus';
+        parent::__construct($cinfos, $participants);
     }
-}
+}

+ 1 - 1
helper/room/factory.php

@@ -50,7 +50,7 @@ class factory
             return new bargain_room($room_params,$participants);
         }
         elseif ($rinfo->type() == proto_type::room_group) {
-            return new group_room($room_params,$participants);
+            return new chat_room($room_params,$participants);
         }
         elseif($rinfo->type() == proto_type::room_shake_bonus) {
             return new shake_room($room_params,$participants);

+ 1 - 0
helper/room/factory_client.php

@@ -108,6 +108,7 @@ class factory_client extends tcp_client
         }
     }
 
+    //////////////////////////////////////fcgi//////////////////////////////////////////////////////////////////////////
     public function invite($roomid, $inviter,$invitees)
     {
         $param = ["act" => 'fcgi','op' => 'invite','room' => $roomid,'inviter' => $inviter,'invitees' => $invitees];

+ 1 - 1
helper/room/proto_type.php

@@ -30,7 +30,7 @@ class proto_type
     const sroom_group    = 'group';
     const room_group   = 2;
 
-    const sroom_chat   = 'chat';
+    const sroom_chat   = 'chat_room';
     const room_chat   = 3;
 
     const sroom_shake_bonus = 'shake_bonus';

+ 0 - 9
helper/room/group_room.php

@@ -31,12 +31,3 @@ class shake_room extends base_room
         return true;
     }
 }
-
-class group_room extends base_room
-{
-    public function __construct($cinfos, array $participants = [])
-    {
-        $this->mRoomType = 'shake_bonus';
-        parent::__construct($cinfos, $participants);
-    }
-}

+ 9 - 9
helper/room_helper.php

@@ -6,13 +6,13 @@
  * Time: 下午9:12
  */
 
-require_once (BASE_ROOT_PATH . '/helper/room/access_client.php');
-require_once (BASE_ROOT_PATH . '/helper/room/proto_type.php');
-require_once (BASE_ROOT_PATH . '/helper/room/base_room.php');
-require_once (BASE_ROOT_PATH . '/helper/room/bargain_room.php');
-require_once(BASE_ROOT_PATH . '/helper/room/chat_room.php');
+require_once(BASE_ROOT_PATH . '/helper/room/access_client.php');
+require_once(BASE_ROOT_PATH . '/helper/room/proto_type.php');
+require_once(BASE_ROOT_PATH . '/helper/room/base_room.php');
+require_once(BASE_ROOT_PATH . '/helper/room/bargain_room.php');
+require_once(BASE_ROOT_PATH . '/helper/room/shake_room.php');
 require_once(BASE_ROOT_PATH . '/helper/room/chatwo.php');
-require_once (BASE_ROOT_PATH . '/helper/room/factory_client.php');
-require_once (BASE_ROOT_PATH . '/helper/room/group_room.php');
-require_once (BASE_ROOT_PATH . '/helper/room/room_client.php');
-require_once (BASE_ROOT_PATH . '/helper/room/bargain_manager.php');
+require_once(BASE_ROOT_PATH . '/helper/room/factory_client.php');
+require_once(BASE_ROOT_PATH . '/helper/room/chat_room.php');
+require_once(BASE_ROOT_PATH . '/helper/room/room_client.php');
+require_once(BASE_ROOT_PATH . '/helper/room/bargain_manager.php');

BIN
mac_webacc


+ 126 - 81
mobile/control/member_talk.php

@@ -11,8 +11,10 @@ require_once(BASE_ROOT_PATH . '/helper/room/factory_client.php');
 require_once(BASE_ROOT_PATH . '/helper/room/proto_type.php');
 require_once(BASE_ROOT_PATH . '/helper/room/author.php');
 
-class member_talkControl extends mobileControl //mbMemberControl
+class member_talkControl extends mbMemberControl
 {
+    const max_msgid = 1 << 32;
+
     private $mAccaddr;
     public function __construct()
     {
@@ -24,11 +26,10 @@ class member_talkControl extends mobileControl //mbMemberControl
 
     public function authonOp()
     {
-        $userid = intval($_GET['userid']);
         $result = [];
-        $result['addr'] = $this->mAccaddr;
-//        $result['token'] = room\author::sign_native(session_helper::memberid());
-        $result['token'] = room\author::sign_native($userid);
+        $result['addr']  = $this->mAccaddr;
+        $result['token'] = room\author::sign_native(session_helper::memberid());
+        $result['user']  = session_helper::memberid();
         return self::outsuccess($result);
     }
 
@@ -37,7 +38,7 @@ class member_talkControl extends mobileControl //mbMemberControl
         global $config;
         $room_id = $config['special_rooms']['shake_bonus'];
         $webaddr = $config['access_addr'];
-        $userid = intval($_GET['userid']);
+        $userid = session_helper::memberid();
 
         $creator = self::shake_creator($room_id);
         $ret = room\factory_client::instance()->invite($room_id,$creator,[$userid]);
@@ -67,87 +68,148 @@ class member_talkControl extends mobileControl //mbMemberControl
         return $stCreator;
     }
 
-    public function friendsOp(){
-        $memberid = session_helper::memberid();
-        $iRelation = new relation\mem_relation($memberid);
-        $follows = $iRelation->follower();//我关注的
-        $fans = $iRelation->subscriber();//关注我的
-        $friends_id = array_unique(array_merge($follows,$fans));
+    private function relations($user)
+    {
+        try
+        {
+            $relation = new relation\mem_relation($user);
+            $follows = $relation->follower();//我关注的
+            $fans = $relation->subscriber();//关注我的
+
+            return array_merge($follows,$fans);
+        }
+        catch (Exception $ex) {
+            return [];
+        }
+    }
+
+    private function invitees($user)
+    {
+        $mod_member = Model('member');
+        $items = $mod_member->getMemberList(['inviter_id' => $user],'member_id', 0, '');
+
+        $users = [];
+        foreach ($items as $item) {
+            $users[] = intval($item['member_id']);
+        }
+        return $users;
+    }
 
-        $members_list = [];
-        if(!empty($friends_id))
+    public function friendsOp()
+    {
+        $user = session_helper::memberid();
+
+        $relations = $this->relations($user);
+        $invitees = $this->invitees($user);
+        $friends = array_merge($relations,$invitees);
+        $friends = array_unique($friends);
+        $items = Model('member')->getMemberList(['member_id' => ['in',$friends]]);
+
+        $members = [];
+        foreach ($items as $item)
         {
-            $members = Model('member')->getMemberList(array('member_id' => array('in',$friends_id)));
-            if(!empty($members))
+            try
             {
-                foreach ($members as $val)
-                {
-                    $member_name = empty($val['member_nickname']) ? '熊猫美妆用户' : $val['member_nickname'];
-                    $alpha = Pinyin::getAlpha($member_name);
-                    $item = [
-                        'member_id' => $val['member_id'],
-                        'member_avatar' => $val['member_avatar'],
-                        'member_nickname' => $member_name,
-                        'member_prefix' => $alpha?strtoupper($alpha):'Z',
-                    ];
-                    $members_list[]= $item;
-
-                    //测试用
-                    $item['member_prefix'] = 'C';
-                    $members_list[]= $item;
-                    $item['member_prefix'] = 'A';
-                    $members_list[]= $item;
-                    $item['member_prefix'] = 'H';
-                    $members_list[]= $item;
-                }
-                usort($members_list,['member_talkControl','alpha_compare']);
+                $info = new member_info($item);
+                $members[] = $info->filter();
             }
+            catch (Exception $ex) {
+                Log::record($ex->getMessage(),Log::ERR);
+            }
+        }
+        usort($members,['member_info','alpha_compare']);
+
+        $uids = [];
+        foreach ($members as $member) {
+            $uids[] = $member['member_id'];
         }
 
-        $res = [
-            'friends_list' => $members_list,
-            'total_count' => count($members_list),
-        ];
-        return self::outsuccess($res);
+        return self::outsuccess(['friends' => $uids,
+            'count' => count($uids),
+            'mem_desc' => $members,
+            'mobile_page' => mobile_page(1)]);
     }
 
-    public function friend_detailOp(){
+    public function msgsOp()
+    {
+        $msgid = intval($_GET['msgid']);
+        $type = $_GET['type'];
+
+        if($msgid == 0 || empty($type)) {
+            return self::outerr(errcode::ErrParamter);
+        }
+        if($msgid < 0) {
+            $msgid = self::max_msgid;
+        }
+
+        if($type == 'room')
+        {
+            $room  = intval($_GET['room']);
+            if($room <= 0) {
+                return self::outerr(errcode::ErrParamter);
+            }
+
+            $msgs = $this->roomsg($msgid,$room);
+        }
+        elseif($type == 'chatwo')
+        {
+            $user  =  intval($_GET['user']);
+            if($user <= 0) {
+                return self::outerr(errcode::ErrParamter);
+            }
+            $msgs = $this->chatwomsg($msgid,$user);
+        }
+        else {
+
+        }
+
+        return self::outsuccess($msgs);
+    }
+
+    private function roomsg($msgid,$room)
+    {
+        $mod_room = Model('room');
+        $msgs = $mod_room->getRoomMsgList(['room_id' => $room,'msg_id' => ['lt',$msgid]], $this->page_size);
+        return $msgs;
+    }
+
+    private function chatwomsg($msgid,$user)
+    {
+        $mod_room = Model('room');
+        $user_1 = session_helper::memberid();
+        $user_2 = $user;
+
+        $cond['from_user&to_user&msg_id'] = ['_multi' => true,$user_1,$user_2,['lt',$msgid]];
+        $cond['to_user&from_user&msg_id'] = ['_multi' => true,$user_1,$user_2,['lt',$msgid]];
+        $cond['_op'] = 'OR';
+
+        $msgs = $mod_room->getChatwoMsgList($cond, $this->page_size);
+        return $msgs;
+    }
+
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    public function friend_detailOp()
+    {
         if(!isset($_GET['userid']) || empty($_GET['userid'])){
             return self::outerr("参数有误");
         }
 
         $member = new member_info($_GET['userid']);
-
         return self::outsuccess($member);
     }
 
-    public function msgsOp()
+    public function roomsOp()
     {
-        $msg_clue = [
-            "type"      =>  $_GET['type']=='room'?'room':'chatto',
-            "msg_id"    =>  intval($_GET['msg_id']),
-            "from"      =>  session_helper::memberid(),
-            "to"        =>  intval($_GET['to']),
-            "room_id"   =>  intval($_GET['$=room_id']),
-            "time"      =>  time(),
-        ];
-
-        $list = $this->get_msg($msg_clue);
-        $res = ["list" => $list, "total"=> count($list),];
-        return self::outsuccess($res);
-    }
-
-    public function roomsOp(){
         $user_id = $_GET['userid'];
 
         $model = new Model();
         $rooms = $model->table('room_participant')->field('*')
             ->where(['member_id'=>$user_id,'state'=>0])
-//            ->order(['time','asc'])
             ->limit(false)
             ->select();
 
-        if(!empty($rooms)){
+        if(!empty($rooms))
+        {
             foreach ($rooms as $i=>$room){
                 $room_id = $room['room_id'];
                 $room_rela = $model->table('room_participant')
@@ -223,24 +285,6 @@ class member_talkControl extends mobileControl //mbMemberControl
         }
     }
 
-    static function alpha_compare($left,$right)
-    {
-        $l = $left['member_prefix'][0];
-        $r = $right['member_prefix'][0];
-
-        if($l > $r) {
-            return 1;
-        }
-        elseif($l == $r) {
-            $l_name = $left['member_nickname'];
-            $r_name = $right['member_nickname'];
-            return strcmp($l_name,$r_name);
-        }
-        else {
-            return -1;
-        }
-    }
-
     private function get_msg($msg_clue){
         $model = new Model();
         if($msg_clue['type']=='room')
@@ -284,7 +328,8 @@ class member_talkControl extends mobileControl //mbMemberControl
         {
             if(!empty($list))
             {
-                foreach ($list as $item){
+                foreach ($list as $item)
+                {
                     $format[] = [
                         "act"     => $msg_clue['type'],
                         "from"    => $member[$item['member_id']],

+ 1 - 0
mobile/util/errcode.php

@@ -98,6 +98,7 @@ class errcode extends SplEnum
     const ErrRoomAccessOp  = 18007;
     const ErrRoomPush  = 18008;
     const ErrAccess = 19000;
+    const ErrTalk = 20000;
 
 
 

+ 2 - 2
room_factory.php

@@ -14,10 +14,10 @@ require_once (BASE_ROOT_PATH . '/helper/event_looper.php');
 require_once(BASE_ROOT_PATH . '/helper/room/factory_processor.php');
 require_once(BASE_ROOT_PATH . '/helper/room/proto_type.php');
 require_once(BASE_ROOT_PATH . '/helper/room/base_room.php');
-require_once(BASE_ROOT_PATH . '/helper/room/chat_room.php');
 require_once(BASE_ROOT_PATH . '/helper/room/chatwo.php');
-require_once(BASE_ROOT_PATH . '/helper/room/group_room.php');
+require_once(BASE_ROOT_PATH . '/helper/room/chat_room.php');
 require_once(BASE_ROOT_PATH . '/helper/room/bargain_room.php');
+require_once(BASE_ROOT_PATH . '/helper/room/shake_room.php');
 require_once(BASE_ROOT_PATH . '/helper/room/factory.php');
 require_once(BASE_ROOT_PATH . '/helper/room/room_client.php');
 

+ 2 - 2
room_srv.php

@@ -13,10 +13,10 @@ require_once (BASE_ROOT_PATH . '/helper/event_looper.php');
 require_once(BASE_ROOT_PATH . '/helper/room/room_processor.php');
 require_once(BASE_ROOT_PATH . '/helper/room/proto_type.php');
 require_once(BASE_ROOT_PATH . '/helper/room/base_room.php');
-require_once(BASE_ROOT_PATH . '/helper/room/chat_room.php');
 require_once(BASE_ROOT_PATH . '/helper/room/chatwo.php');
-require_once(BASE_ROOT_PATH . '/helper/room/group_room.php');
+require_once(BASE_ROOT_PATH . '/helper/room/chat_room.php');
 require_once(BASE_ROOT_PATH . '/helper/room/bargain_room.php');
+require_once(BASE_ROOT_PATH . '/helper/room/shake_room.php');
 require_once(BASE_ROOT_PATH . '/helper/room/factory.php');
 require_once(BASE_ROOT_PATH . '/helper/room/room_client.php');
 require_once(BASE_ROOT_PATH . '/helper/room/bargain_manager.php');

+ 2 - 2
test/TestEvent.php

@@ -14,10 +14,10 @@ require_once(BASE_ROOT_PATH . '/helper/search/tcp_client.php');
 require_once(BASE_ROOT_PATH . '/helper/room/factory_processor.php');
 require_once(BASE_ROOT_PATH . '/helper/room/proto_type.php');
 require_once(BASE_ROOT_PATH . '/helper/room/base_room.php');
-require_once(BASE_ROOT_PATH . '/helper/room/chat_room.php');
 require_once(BASE_ROOT_PATH . '/helper/room/chatwo.php');
-require_once(BASE_ROOT_PATH . '/helper/room/group_room.php');
+require_once(BASE_ROOT_PATH . '/helper/room/chat_room.php');
 require_once(BASE_ROOT_PATH . '/helper/room/bargain_room.php');
+require_once(BASE_ROOT_PATH . '/helper/room/shake_room.php');
 require_once(BASE_ROOT_PATH . '/helper/room/factory.php');
 require_once(BASE_ROOT_PATH . '/helper/room/room_client.php');
 require_once(BASE_ROOT_PATH . '/helper/room/factory_client.php');

+ 2 - 2
test/TestRoomFactory.php

@@ -14,10 +14,10 @@ require_once(BASE_ROOT_PATH . '/helper/search/tcp_client.php');
 require_once(BASE_ROOT_PATH . '/helper/room/factory_processor.php');
 require_once(BASE_ROOT_PATH . '/helper/room/proto_type.php');
 require_once(BASE_ROOT_PATH . '/helper/room/base_room.php');
-require_once(BASE_ROOT_PATH . '/helper/room/chat_room.php');
 require_once(BASE_ROOT_PATH . '/helper/room/chatwo.php');
-require_once(BASE_ROOT_PATH . '/helper/room/group_room.php');
+require_once(BASE_ROOT_PATH . '/helper/room/chat_room.php');
 require_once(BASE_ROOT_PATH . '/helper/room/bargain_room.php');
+require_once(BASE_ROOT_PATH . '/helper/room/shake_room.php');
 require_once(BASE_ROOT_PATH . '/helper/room/factory.php');
 require_once(BASE_ROOT_PATH . '/helper/room/room_client.php');
 require_once(BASE_ROOT_PATH . '/helper/room/factory_client.php');

+ 2 - 2
test/TestRoomSrv.php

@@ -12,10 +12,10 @@ require_once(BASE_ROOT_PATH . '/helper/event_looper.php');
 require_once(BASE_ROOT_PATH . '/helper/room/room_processor.php');
 require_once(BASE_ROOT_PATH . '/helper/room/proto_type.php');
 require_once(BASE_ROOT_PATH . '/helper/room/base_room.php');
-require_once(BASE_ROOT_PATH . '/helper/room/chat_room.php');
 require_once(BASE_ROOT_PATH . '/helper/room/chatwo.php');
-require_once(BASE_ROOT_PATH . '/helper/room/group_room.php');
+require_once(BASE_ROOT_PATH . '/helper/room/chat_room.php');
 require_once(BASE_ROOT_PATH . '/helper/room/bargain_room.php');
+require_once(BASE_ROOT_PATH . '/helper/room/shake_room.php');
 require_once(BASE_ROOT_PATH . '/helper/room/factory.php');
 require_once(BASE_ROOT_PATH . '/helper/room/room_client.php');
 

+ 5 - 0
test/TestSearch.php

@@ -338,4 +338,9 @@ class TestSearch extends PHPUnit_Framework_TestCase
 
         echo ($y - $x);
     }
+    public function testPing()
+    {
+        $val = '🐳🐳🐳²₀¹₇';
+        $info['alpha'] = Pinyin::getAlpha($val);
+    }
 }

+ 22 - 0
test/TestTalk.php

@@ -55,4 +55,26 @@ class TestTalk extends PHPUnit_Framework_TestCase
 
         return $stCreator;
     }
+
+    public function testSql()
+    {
+        $left['from_user&to_user&msg_id'] = ['_multi' => true,1,2,['lt',100]];
+        $left['to_user&from_user&msg_id'] = ['_multi' => true,1,2,['lt',100]];
+        $left['_op'] = 'OR';
+
+//        $right['msg_id'] = ['lt',100];
+//
+//        $cond[] = $left;
+//        $cond[] = $right;
+//        $cond['_op'] = 'and';
+
+
+        $mod_room = Model('room');
+//        $msgs = $mod_room->getRoomMsgList($cond,20);
+        $msgs = $mod_room->getChatwoMsgList($left,20);
+
+
+
+
+    }
 }