2025-04-22 19:17:14 +08:00
< ? php
namespace app\cunkebao\controller\chatroom ;
use app\cunkebao\controller\BaseController ;
use app\cunkebao\model\WechatChatroom ;
use think\Db ;
/**
* 群聊管理控制器
*/
class GetChatroomListV1Controller extends BaseController
{
/**
* 获取群聊列表
* @ return \think\response\Json
*/
public function index ()
{
$page = $this -> request -> param ( 'page' , 1 );
$limit = $this -> request -> param ( 'limit' , 20 );
$keyword = $this -> request -> param ( 'keyword' , '' );
try {
2025-07-10 14:07:11 +08:00
2025-10-21 16:46:55 +08:00
$companyId = ( int ) $this -> getUserInfo ( 'companyId' );
2025-07-10 14:07:11 +08:00
$wechatIds = Db :: name ( 'device' ) -> alias ( 'd' )
2025-09-24 16:22:24 +08:00
// 仅关联每个设备在 device_wechat_login 中的最新一条记录
-> join ( '(SELECT MAX(id) AS id, deviceId FROM ck_device_wechat_login WHERE companyId=' . $companyId . ' GROUP BY deviceId) dwl_max' , 'dwl_max.deviceId = d.id' )
-> join ( 'device_wechat_login dwl' , 'dwl.id = dwl_max.id' )
-> where ([ 'd.companyId' => $companyId , 'd.deleteTime' => 0 ])
2025-10-21 16:46:55 +08:00
-> column ( 'dwl.wechatId' );
2025-09-28 16:01:31 +08:00
2025-10-21 16:46:55 +08:00
/* $wechatIds = Db :: name ( 'device' ) -> alias ( 'd' )
2025-09-28 16:01:31 +08:00
-> join ( 'device_wechat_login dwl' , 'dwl.deviceId=d.id AND dwl.companyId=' . $this -> getUserInfo ( 'companyId' ))
-> where ([ 'd.companyId' => $this -> getUserInfo ( 'companyId' ), 'd.deleteTime' => 0 ])
2025-10-21 16:46:55 +08:00
-> column ( 'dwl.wechatId' ); */
2025-07-10 14:07:11 +08:00
2025-09-28 16:01:31 +08:00
2025-04-22 19:17:14 +08:00
$where = [];
if ( $this -> getUserInfo ( 'isAdmin' ) == 1 ) {
2025-12-25 15:39:57 +08:00
$where [] = [ 'gg.isDeleted' , '=' , 0 ];
2025-07-10 14:07:11 +08:00
$where [] = [ 'g.ownerWechatId' , 'in' , $wechatIds ];
2025-04-22 19:17:14 +08:00
} else {
2025-12-25 15:39:57 +08:00
$where [] = [ 'gg.isDeleted' , '=' , 0 ];
2025-07-10 14:07:11 +08:00
$where [] = [ 'g.ownerWechatId' , 'in' , $wechatIds ];
2025-04-22 19:17:14 +08:00
//$where[] = ['g.userId', '=', $this->getUserInfo('id')];
}
if ( ! empty ( $keyword )){
$where [] = [ 'g.name' , 'like' , '%' . $keyword . '%' ];
}
2025-07-10 14:07:11 +08:00
2025-04-22 19:17:14 +08:00
$data = WechatChatroom :: alias ( 'g' )
-> field ([ 'g.id' , 'g.chatroomId' , 'g.name' , 'g.avatar' , 'g.ownerWechatId' , 'g.identifier' , 'g.createTime' ,
'wa.nickname as ownerNickname' , 'wa.avatar as ownerAvatar' , 'wa.alias as ownerAlias' ])
2025-07-10 14:07:11 +08:00
-> join ( 'wechat_account wa' , 'g.ownerWechatId = wa.wechatId' , 'LEFT' )
2025-12-25 15:39:57 +08:00
-> join ([ 's2_wechat_chatroom' => 'gg' ], 'g.id = gg.id' , 'LEFT' )
2025-04-22 19:17:14 +08:00
-> where ( $where );
$total = $data -> count ();
$list = $data -> page ( $page , $limit ) -> order ( 'g.id DESC' ) -> select ();
return json ([
'code' => 200 ,
'msg' => '获取成功' ,
'data' => [
'list' => $list ,
'total' => $total ,
]
]);
} catch ( \Exception $e ) {
return json ([
'code' => $e -> getCode (),
'msg' => $e -> getMessage ()
]);
}
}
/**
* 获取群成员列表
* @ return \think\response\Json
*/
public function getMemberList ()
{
$page = $this -> request -> param ( 'page' , 1 );
$limit = $this -> request -> param ( 'limit' , 20 );
$keyword = $this -> request -> param ( 'keyword' , '' );
$groupId = $this -> request -> param ( 'groupId' , 0 );
if ( empty ( $groupId )) {
return json ([
'code' => 400 ,
'msg' => '群ID不能为空'
]);
}
try {
$where = [];
$where [] = [ 'm.groupId' , '=' , $groupId ];
2025-04-23 12:01:49 +08:00
$where [] = [ 'm.deleteTime' , '<=' , 0 ];
2025-04-22 19:17:14 +08:00
// 如果有搜索关键词
if ( ! empty ( $keyword )) {
2025-04-23 12:01:49 +08:00
$where [] = [ 'wa.nickname|m.identifier' , 'like' , '%' . $keyword . '%' ];
2025-04-22 19:17:14 +08:00
}
$data = Db :: name ( 'wechat_group_member' )
-> alias ( 'm' )
-> field ([
'm.id' ,
'm.identifier' ,
'm.customerIs' ,
'wa.nickname' ,
'wa.avatar' ,
'm.groupId' ,
'm.createTime' ,
'g.name as groupName' ,
'g.chatroomId'
])
-> join ( 'wechat_group g' , 'm.groupId = g.id' , 'LEFT' )
-> join ( 'wechat_account wa' , 'wa.wechatId = m.identifier' , 'LEFT' )
-> where ( $where );
$total = $data -> count ();
$list = $data -> page ( $page , $limit )
-> order ( 'm.id DESC' )
-> select ();
// 格式化时间
foreach ( $list as & $item ) {
if ( ! empty ( $item [ 'createTime' ])) {
$item [ 'createTime' ] = date ( 'Y-m-d H:i:s' , $item [ 'createTime' ]);
}
}
return json ([
'code' => 200 ,
'msg' => '获取成功' ,
'data' => [
'list' => $list ,
'total' => $total ,
]
]);
} catch ( \Exception $e ) {
return json ([
'code' => $e -> getCode () ? : 500 ,
'msg' => $e -> getMessage ()
]);
}
}
}