zhangxiaobin il y a 1 an
Parent
commit
305ccdbc87

+ 130 - 137
addons/qcloudsms/config.php

@@ -1,139 +1,132 @@
 <?php
 
-return array(
-    array(
-        'name'    => 'appid',
-        'title'   => '应用AppID',
-        'type'    => 'string',
-        'content' =>
-            array(),
-        'value'   => '',
-        'rule'    => 'required',
-        'msg'     => '',
-        'tip'     => '',
-        'ok'      => '',
-        'extend'  => '',
-    ),
-    array(
-        'name'    => 'appkey',
-        'title'   => '应用AppKEY',
-        'type'    => 'string',
-        'content' =>
-            array(),
-        'value'   => '',
-        'rule'    => 'required',
-        'msg'     => '',
-        'tip'     => '',
-        'ok'      => '',
-        'extend'  => '',
-    ),
-    array(
-        'name'    => 'voiceAppid',
-        'title'   => '语音短信AppID',
-        'type'    => 'string',
-        'content' =>
-            array(),
-        'value'   => '',
-        'rule'    => 'required',
-        'msg'     => '使用语音短信必须设置',
-        'tip'     => '',
-        'ok'      => '',
-        'extend'  => '',
-    ),
-    array(
-        'name'    => 'voiceAppkey',
-        'title'   => '语音短信AppKEY',
-        'type'    => 'string',
-        'content' =>
-            array(),
-        'value'   => '',
-        'rule'    => 'required',
-        'msg'     => '使用语音短信必须设置',
-        'tip'     => '',
-        'ok'      => '',
-        'extend'  => '',
-    ),
-    array(
-        'name'    => 'sign',
-        'title'   => '签名',
-        'type'    => 'string',
-        'content' =>
-            array(),
-        'value'   => 'your sign',
-        'rule'    => 'required',
-        'msg'     => '',
-        'tip'     => '',
-        'ok'      => '',
-        'extend'  => '',
-    ),
-    array(
-        'name'    => 'isVoice',
-        'title'   => '是否使用语音短信',
-        'type'    => 'radio',
-        'content' =>
-            array(
-                0 => '否',
-                1 => '是',
-            ),
-        'value'   => '0',
-        'rule'    => 'required',
-        'msg'     => '',
-        'tip'     => '',
-        'ok'      => '',
-        'extend'  => '',
-    ),
-    array(
-        'name'    => 'isTemplateSender',
-        'title'   => '是否使用短信模板发送',
-        'type'    => 'radio',
-        'content' =>
-            array(
-                0 => '否',
-                1 => '是',
-            ),
-        'value'   => '1',
-        'rule'    => 'required',
-        'msg'     => '',
-        'tip'     => '',
-        'ok'      => '',
-        'extend'  => '',
-    ),
-    array(
-        'name'    => 'template',
-        'title'   => '短信模板',
-        'type'    => 'array',
-        'content' =>
-            array(),
-        'value'   =>
-            array(
-                'register'  => '',
-                'resetpwd'  => '',
-                'changepwd' => '',
-                'profile'   => '',
-            ),
-        'rule'    => 'required',
-        'msg'     => '',
-        'tip'     => '',
-        'ok'      => '',
-        'extend'  => '',
-    ),
-    array(
-        'name'    => 'voiceTemplate',
-        'title'   => '语音短信模板',
-        'type'    => 'array',
-        'content' =>
-            array(),
-        'value'   =>
-            array(
-                'register'  => '',
-                'resetpwd'  => '',
-                'changepwd' => '',
-                'profile'   => '',
-            ),
-        'rule'    => 'required',
-        'msg'     => '',
-        'tip'     => '',
-        'ok'      => '',
-        'extend'  => '',
-    ),
-);
+return [
+    [
+        'name' => 'appid',
+        'title' => '应用AppID',
+        'type' => 'string',
+        'content' => [],
+        'value' => '1400833869',
+        //'value' => '1400660166',
+        'rule' => 'required',
+        'msg' => '',
+        'tip' => '',
+        'ok' => '',
+        'extend' => '',
+    ],
+    [
+        'name' => 'appkey',
+        'title' => '应用AppKEY',
+        'type' => 'string',
+        'content' => [],
+        'value' => '3e0db2730e8098a9fd000f54833ee87f',
+        //'value' => 'a1c1c62f069082143ae207927155014b',
+        'rule' => 'required',
+        'msg' => '',
+        'tip' => '',
+        'ok' => '',
+        'extend' => '',
+    ],
+    [
+        'name' => 'voiceAppid',
+        'title' => '语音短信AppID',
+        'type' => 'string',
+        'content' => [],
+        'value' => '-',
+        'rule' => 'required',
+        'msg' => '使用语音短信必须设置',
+        'tip' => '',
+        'ok' => '',
+        'extend' => '',
+    ],
+    [
+        'name' => 'voiceAppkey',
+        'title' => '语音短信AppKEY',
+        'type' => 'string',
+        'content' => [],
+        'value' => '-',
+        'rule' => 'required',
+        'msg' => '使用语音短信必须设置',
+        'tip' => '',
+        'ok' => '',
+        'extend' => '',
+    ],
+    [
+        'name' => 'sign',
+        'title' => '签名',
+        'type' => 'string',
+        'content' => [],
+        'value' => '道乐传媒',
+        //'value' => '荧火旅行',
+        'rule' => 'required',
+        'msg' => '',
+        'tip' => '',
+        'ok' => '',
+        'extend' => '',
+    ],
+    [
+        'name' => 'isVoice',
+        'title' => '是否使用语音短信',
+        'type' => 'radio',
+        'content' => [
+            '否',
+            '是',
+        ],
+        'value' => '0',
+        'rule' => 'required',
+        'msg' => '',
+        'tip' => '',
+        'ok' => '',
+        'extend' => '',
+    ],
+    [
+        'name' => 'isTemplateSender',
+        'title' => '是否使用短信模板发送',
+        'type' => 'radio',
+        'content' => [
+            '否',
+            '是',
+        ],
+        'value' => '1',
+        'rule' => 'required',
+        'msg' => '',
+        'tip' => '',
+        'ok' => '',
+        'extend' => '',
+    ],
+    [
+        'name' => 'template',
+        'title' => '短信模板',
+        'type' => 'array',
+        'content' => [],
+        'value' => [
+            'register' => '1844866',
+            'resetpwd' => '1844866',
+            'changepwd' => '1844866',
+            'profile' => '1844866',
+            'changepaypwd' => '1844866',
+        ],
+        'rule' => 'required',
+        'msg' => '',
+        'tip' => '',
+        'ok' => '',
+        'extend' => '',
+    ],
+    [
+        'name' => 'voiceTemplate',
+        'title' => '语音短信模板',
+        'type' => 'array',
+        'content' => [],
+        'value' => [
+            'register' => '-',
+            'resetpwd' => '-',
+            'changepwd' => '-',
+            'profile' => '-',
+        ],
+        'rule' => 'required',
+        'msg' => '',
+        'tip' => '',
+        'ok' => '',
+        'extend' => '',
+    ],
+];

+ 76 - 1
application/api/controller/Index.php

@@ -4,9 +4,11 @@ namespace app\api\controller;
 
 use app\common\controller\Api;
 use fast\Random;
+use think\Collection;
 use \think\Log;
 use Redis;
 use app\common\library\Sms as Smslib;
+use app\common\service\TenimService;
 /**
  * 首页接口
  */
@@ -254,6 +256,79 @@ class Index extends Api
     }
 
     /**
+     * 首页搜索
+     */
+    public function searchList() {
+        $search = $this->request->request("search"); //关键词筛选
+        if(!$search) {
+            $this->error("请输入搜索内容!");
+        }
+        // 搜索房间(派对和直播)
+        global $whereOr;
+        $where = [];
+        $whereOr["party_id"] = $search;
+        $whereOr["party_name"] = ["like","%$search%"];
+        //$where['is_online'] = 1;
+        $where['status'] = 1;
+        $partyList = \app\common\model\Party::field("id,party_logo,party_id,party_name")
+            ->where($where)
+            ->where(function ($query) {
+                global $whereOr;
+                $query->whereOr($whereOr);
+            })->order("party_hot","desc")->select();
+        $partyList = collection($partyList)->toArray();
+        if (!empty($partyList)) {//在线信息
+            $partyListIds = array_column($partyList,'id');
+            $tenimService = new TenimService();
+            $partyParams = ['party_ids'=>$partyListIds];
+            $partyRes = $tenimService->getRoomUser($partyParams);
+            if ($partyRes['status'] == 1) {
+                foreach ($partyList as $pKey => &$pVal) {
+                    if (isset($partyRes['data'][$pVal['id']])) {
+                        $pVal['member_list'] = $partyRes['data'][$pVal['id']]['member_list'];
+                        $pVal['online_num'] = $partyRes['data'][$pVal['id']]['online_num'];
+                    }
+                }
+            }
+        }
+        // 家族
+        $guildWhere['status'] = 1;
+        $guildWhere['name'] = ["like","%$search%"];
+        $guildList = model('Guild')->where($guildWhere)->with(['guildmember'=>function($gquery){
+            $gquery->where(['status'=>1]);
+        }])->field('id,g_id,name,image')->select();
+        if (!empty($guildList)) {
+            $userField = 'id,nickname,avatar';
+            foreach ($guildList as $gKey => &$gVal) {
+                $userData =[];
+                if (isset($gVal['guildmember'])) {
+                    $memberUids = array_column($gVal['guildmember'],'user_id');
+                    $userWhere['is_online'] = 1;
+                    $userWhere['id'] = ['in',$memberUids];
+                    $userData = model('User')->field($userField)->where($userWhere)->select();
+                }
+                $gVal['member_list'] = $userData;
+                $gVal['online_num'] = count($userData);
+                unset($gVal['guildmember']);
+            }
+        }
+        // 相关用户
+        $where = [];
+        $where["a.nickname"] = ["like","%$search%"];
+        $where["a.u_id"] = $search;
+        $userList = \app\common\model\User::alias("a")->field("id,avatar,nickname,u_id,f.fans")
+            ->join("hx_view_fans f","f.user_id = a.id","left")
+            ->order("a.is_online,a.noble,a.level")
+            ->whereOr($where)->select();
+        $res = [];
+        $res["roomlist"] = $partyList;
+        $res["guildlist"] = $guildList;
+        $res["userlist"] = $userList;
+
+        $this->success("获取成功!",$res);
+    }
+
+    /**
      * 获取下载二维码和邀请码
      */
     public function getInviteCode() {
@@ -460,7 +535,7 @@ class Index extends Api
     }
 
     /**
-     * 星座列表
+     * 轮播图列表
      * @return void
      */
     public function bannerList()

+ 135 - 4
application/api/controller/Tenim.php

@@ -14,7 +14,8 @@ use think\Db;
  */
 class Tenim extends Api
 {
-    protected $noNeedLogin = ["callback",'test','createIMGroup','updateRoomInfo','setImManage','sendMessageToUser','outMemberFromRoom'];
+    protected $noNeedLogin = ["callback",'test','createIMGroup','updateRoomInfo','setImManage','sendMessageToUser','outMemberFromRoom',
+        'autoUserLine','getRoomUser','getGroupList','getGroupInfo'];
     protected $noNeedRight = ['*'];
 
 
@@ -184,7 +185,8 @@ exit;
     /**
      * 获取群组信息
      */
-    public function getGroupInfo($party_id) {
+    public function getGroupInfo($party_id='0') {
+        $party_id = !empty($party_id) ? $party_id : $this->request->param('part_id',0);
         $random = rand(10000000,99999999);
         $usersig = $this->usersig("administrator");
         // 获取配置信息
@@ -198,9 +200,39 @@ exit;
         $tencentObj = new tencentim($url);
         $data = [];
         $data["GroupIdList"] = [$party_id];
-        $data["ResponseFilter"] = ["AppDefinedDataFilter_Group"=>[]];
+        $data["ResponseFilter"] = [
+            "GroupBaseInfoFilter" => ["GroupId","Type","Name","FaceUrl","Owner_Account","MemberNum"],
+            "MemberInfoFilter" => ["Account","Role"],
+            "AppDefinedDataFilter_Group" => ["roomInfo"],
+        ];
         $groupInfo = $tencentObj->toSend($data);
-        return $groupInfo;
+        $this->success('获取成功',$groupInfo['GroupInfo']);
+    }
+
+    /**
+     * 获取所有群组
+     */
+    public function getGroupList() {
+        $random = rand(10000000,99999999);
+        $usersig = $this->usersig("administrator");
+        // 获取配置信息
+        $config = config("tencent_im");
+        $url = "https://console.tim.qq.com/v4/group_open_http_svc/get_appid_group_list";
+        $url .= "?sdkappid=".$config["sdkappid"];
+        $url .= "&identifier=administrator";
+        $url .= "&usersig=".$usersig;
+        $url .= "&random==".$random;
+        $url .= "&contenttype=json";
+        $tencentObj = new tencentim($url);
+        $data = [];
+        $data["Limit"] = 100;//本次获取的群组 ID 数量的上限,不得超过 10000。如果不填,默认为最大值 10000
+        $data["GroupType"] = 'AVChatRoom';//群组形态包括 Public(公开群),Private(即 Work,好友工作群),ChatRoom(即 Meeting,会议群),AVChatRoom(音视频聊天室),BChatRoom(在线成员广播大群)和社群(Community)
+        $groupList = $tencentObj->toSend($data);
+        $result = [];
+        if (isset($groupList['ActionStatus']) && $groupList['ActionStatus'] == 'OK') {
+            $result = isset($groupList['GroupIdList']) ? $groupList['GroupIdList'] : [];
+        }
+        $this->success('获取成功',$result);
     }
 
     /**
@@ -833,4 +865,103 @@ exit;
         $this->sendMessageToUser($from_user,$to_user,$message);
     }
 
+    /**
+     * 获取用户在线更新
+     */
+    public function autoUserLine() {
+        $random = rand(10000000,99999999);
+        $usersig = $this->usersig("administrator");
+        // 获取配置信息
+        $config = config("tencent_im");
+        $url = "https://console.tim.qq.com/v4/openim/query_online_status";
+        $url .= "?sdkappid=".$config["sdkappid"];
+        $url .= "&identifier=administrator";
+        $url .= "&usersig=".$usersig;
+        $url .= "&random=".$random;
+        $url .= "&contenttype=json";
+        $tencentObj = new tencentim($url);
+        // 获取用户
+        $where = [];
+        $userData = model('User')->field('id')->where($where)->order('id asc')->select();
+        $userArr = array_column($userData,'id');
+        $data = [];
+        $data["To_Account"] = $userArr;
+        $result = [];
+        if(!empty($data)) {
+            $result = $tencentObj->toSend($data);
+            if (isset($result['ActionStatus']) && $result['ActionStatus'] == 'OK') {
+                if (isset($result['ErrorList'])) {//没有人员
+                    unset($result['ErrorList']);
+                    /*foreach ($result['ErrorList'] as $errKey => $errVal) {
+                        $userError[] = $errVal['To_Account'];
+                    }*/
+                }
+                if (isset($result['QueryResult'])) {
+                    $userOnline = $userOffline=[];
+                    foreach ($result['QueryResult'] as $key => $value) {
+                        if (in_array($value['Status'],['Online','PushOnline'])) {//在线(前台在线和后台在线)
+                            $userOnline[] = intval($value['To_Account']);
+                        } else {//离线
+                            $userOffline[] = intval($value['To_Account']);
+                        }
+                    }
+                    if (!empty($userOnline)) {//处理在线
+                        $onlineWhere['id'] = ['in',$userOnline];
+                        $onlineWhere['is_online'] = 0;
+                        model('User')->where($onlineWhere)->update(['is_online'=>1]);
+                    }
+                    if (!empty($userOffline)) {//处理离线
+                        $offlineWhere['id'] = ['in',$userOffline];
+                        $offlineWhere['is_online'] = 1;
+                        model('User')->where($offlineWhere)->update(['is_online'=>0]);
+                    }
+                }
+            }
+        }
+        $this->success('操作成功');
+    }
+
+    /**
+     * 获取房间用户
+     */
+    public function getRoomUser() {
+        $partyIds = $this->request->param('party_ids','');
+        if (!empty($partyIds)) {
+            $partyIds = explode(',',$partyIds);
+        }
+        $random = rand(10000000,99999999);
+        $usersig = $this->usersig("administrator");
+        // 获取配置信息
+        $config = config("tencent_im");
+        $url = "https://console.tim.qq.com/v4/group_open_avchatroom_http_svc/get_members";
+        $url .= "?sdkappid=".$config["sdkappid"];
+        $url .= "&identifier=administrator";
+        $url .= "&usersig=".$usersig;
+        $url .= "&random=".$random;
+        $url .= "&contenttype=json";
+        $tencentObj = new tencentim($url);
+        //获取用户 ["57","62","63","105","106","107","108","109","116","119"]
+        $partyArr = $partyIds;
+        $memberList = [];
+        if(!empty($partyArr)) {
+            foreach ($partyArr as $key => $value) {
+                $data["GroupId"] = $value;
+                $result = $tencentObj->toSend($data);
+                if (isset($result['ActionStatus']) && $result['ActionStatus'] == 'OK') {
+                    if (isset($result['MemberList']) && !empty($result['MemberList'])) {
+                        foreach ($result['MemberList'] as $ukey => $uval) {
+                            $memberList[$value]['member_list'][] = [
+                                'avatar' => $uval['Avatar'],
+                                'user_id'=> $uval['Member_Account'],
+                                'nickname' => $uval['NickName'],
+                            ];
+                        }
+                        $memberList[$value]['online_num'] = count($memberList[$value]['member_list']);
+                    }
+                }
+            }
+        }
+        $result = $memberList;
+        $this->success('操作成功',$result);
+    }
 }

+ 4 - 0
application/common/model/Guild.php

@@ -74,4 +74,8 @@ class Guild extends Model
         return $newid;
     }
 
+    public function guildmember()
+    {
+        return $this->hasMany('GuildMember', 'guild_id', 'id',[],'LEFT');
+    }
 }

+ 82 - 0
application/common/service/TenimService.php

@@ -0,0 +1,82 @@
+<?php
+namespace app\common\service;
+use getusersig\getusersig;
+use tencentim\tencentim;
+use think\Db;
+use think\Exception;
+
+class TenimService
+{
+    private $url =  '';
+
+    /**
+     * 初始化方法
+     */
+    public function __construct()
+    {
+        $random = rand(10000000,99999999);
+        $usersig = $this->usersig("administrator");
+        // 获取配置信息
+        $config = config("tencent_im");
+        $url = "?sdkappid=".$config["sdkappid"];
+        $url .= "&identifier=administrator";
+        $url .= "&usersig=".$usersig;
+        $url .= "&random=".$random;
+        $url .= "&contenttype=json";
+        $this->url = $url;
+    }
+
+    /**
+     * 获取usersig签名-具体操作
+     */
+    private function usersig($user_id) {
+        // 获取配置信息
+        $config = config("tencent_im");
+        $usersigObj = new getusersig($config["sdkappid"],$config["key"]);
+        $usersig = $usersigObj->genUserSig($user_id);
+        return $usersig;
+    }
+
+    /**
+     * 获取房间用户
+     */
+    public function getRoomUser($params=[])
+    {
+        $result = [
+            'status' => 1,
+            'msg' => '获取成功',
+            'data' => [],
+        ];
+        try {
+            $partyIds = isset($params['party_ids']) ? $params['party_ids'] : [];
+            $url = "https://console.tim.qq.com/v4/group_open_avchatroom_http_svc/get_members".$this->url;
+            $tencentObj = new tencentim($url);
+            //获取用户 ["57","62","63","105","106","107","108","109","116","119"]
+            $partyArr = $partyIds;
+            $memberList = [];
+            if(!empty($partyArr)) {
+                foreach ($partyArr as $key => $value) {
+                    $data["GroupId"] = $value;
+                    $tencentRes = $tencentObj->toSend($data);
+                    if (isset($tencentRes['ActionStatus']) && $tencentRes['ActionStatus'] == 'OK') {
+                        if (isset($tencentRes['MemberList']) && !empty($tencentRes['MemberList'])) {
+                            foreach ($tencentRes['MemberList'] as $ukey => $uval) {
+                                $memberList[$value]['member_list'][] = [
+                                    'avatar' => $uval['Avatar'],
+                                    'user_id'=> $uval['Member_Account'],
+                                    'nickname' => $uval['NickName'],
+                                ];
+                            }
+                            $memberList[$value]['online_num'] = count($memberList[$value]['member_list']);
+                        }
+                    }
+                }
+            }
+            $result['data'] = $memberList;
+        } catch (\Exception $e) {
+            $result['status'] = 0;
+            $result['msg'] = $e->getMessage();
+        }
+        return $result;
+    }
+}