2025-04-18 10:38:50 +08:00
< ? php
namespace app\cunkebao\controller\friend ;
use app\common\model\Device as DeviceModel ;
use app\common\model\DeviceUser as DeviceUserModel ;
2025-05-12 15:32:42 +08:00
use app\common\model\WechatFriendShip as WechatFriendShipModel ;
2025-04-18 10:38:50 +08:00
use app\cunkebao\controller\BaseController ;
2025-12-11 17:32:59 +08:00
use app\api\controller\AutomaticAssign ;
2025-04-22 19:17:14 +08:00
use think\Db ;
2025-04-18 10:38:50 +08:00
/**
* 设备管理控制器
*/
class GetFriendListV1Controller extends BaseController
{
/**
* 获取好友列表
* @ return \think\response\Json
*/
public function index ()
{
2025-04-18 13:46:34 +08:00
$page = $this -> request -> param ( 'page' , 1 );
$limit = $this -> request -> param ( 'limit' , 20 );
2025-04-21 09:19:50 +08:00
$keyword = $this -> request -> param ( 'keyword' , '' );
2025-05-14 17:29:32 +08:00
$deviceIds = $this -> request -> param ( 'deviceIds' , '' );
if ( ! empty ( $deviceIds )){
$deviceIds = explode ( ',' , $deviceIds );
}
2025-04-18 10:38:50 +08:00
try {
$where = [];
if ( $this -> getUserInfo ( 'isAdmin' ) == 1 ) {
2025-07-03 10:44:41 +08:00
$where [] = [ 'isDeleted' , '=' , 0 ];
2025-04-18 10:38:50 +08:00
} else {
2025-07-03 10:44:41 +08:00
$where [] = [ 'isDeleted' , '=' , 0 ];
2025-04-18 10:38:50 +08:00
}
2025-04-22 19:17:14 +08:00
if ( ! empty ( $keyword )){
2025-07-03 10:44:41 +08:00
$where [] = [ 'nickname|alias|wechatId' , 'like' , '%' . $keyword . '%' ];
2025-04-21 09:19:50 +08:00
}
2025-04-18 13:46:34 +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' ))
2025-10-21 16:46:55 +08:00
-> where ([ 'd.companyId' => $this -> getUserInfo ( 'companyId' ), 'd.deleteTime' => 0 ])
-> group ( 'dwl.deviceId' )
-> order ( 'dwl.id desc' ); */
2025-09-28 16:01:31 +08:00
2025-10-21 16:46:55 +08:00
$companyId = $this -> getUserInfo ( 'companyId' );
$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' )
2025-10-21 16:46:55 +08:00
-> where ([ 'd.companyId' => $companyId , 'd.deleteTime' => 0 ]);
2025-09-28 16:01:31 +08:00
2025-07-03 10:44:41 +08:00
2025-07-11 16:16:10 +08:00
if ( ! empty ( $deviceIds )){
2025-07-14 09:31:23 +08:00
$wechatIds = $wechatIds -> where ( 'd.id' , 'in' , $deviceIds );
2025-05-14 17:29:32 +08:00
}
2025-07-11 16:16:10 +08:00
$wechatIds = $wechatIds -> column ( 'dwl.wechatId' );
$where [] = [ 'ownerWechatId' , 'in' , $wechatIds ];
2025-05-14 17:29:32 +08:00
2025-07-03 10:44:41 +08:00
$data = Db :: table ( 's2_wechat_friend' )
2025-12-11 17:32:59 +08:00
-> field ([
'id' , 'nickname' , 'avatar' , 'alias' , 'wechatId' ,
'gender' , 'phone' , 'createTime' , 'updateTime' , 'deleteTime' ,
'ownerNickname' , 'ownerAlias' , 'ownerWechatId' ,
'accountUserName' , 'accountNickname' , 'accountRealName'
])
2025-04-18 10:38:50 +08:00
-> where ( $where );
2025-04-18 13:46:34 +08:00
$total = $data -> count ();
2025-07-03 10:44:41 +08:00
$list = $data -> page ( $page , $limit ) -> order ( 'id DESC' ) -> select ();
2025-12-11 17:32:59 +08:00
// 格式化时间字段和处理数据
$formattedList = [];
foreach ( $list as $item ) {
$formattedItem = [
'id' => $item [ 'id' ],
'nickname' => $item [ 'nickname' ] ? ? '' ,
'avatar' => $item [ 'avatar' ] ? ? '' ,
'alias' => $item [ 'alias' ] ? ? '' ,
'wechatId' => $item [ 'wechatId' ] ? ? '' ,
'gender' => $item [ 'gender' ] ? ? 0 ,
'phone' => $item [ 'phone' ] ? ? '' ,
'account' => $item [ 'accountUserName' ] ? ? '' ,
'username' => $item [ 'accountRealName' ] ? ? '' ,
'createTime' => ! empty ( $item [ 'createTime' ]) ? date ( 'Y-m-d H:i:s' , $item [ 'createTime' ]) : '1970-01-01 08:00:00' ,
'updateTime' => ! empty ( $item [ 'updateTime' ]) ? date ( 'Y-m-d H:i:s' , $item [ 'updateTime' ]) : '1970-01-01 08:00:00' ,
'deleteTime' => ! empty ( $item [ 'deleteTime' ]) ? date ( 'Y-m-d H:i:s' , $item [ 'deleteTime' ]) : '1970-01-01 08:00:00' ,
'ownerNickname' => $item [ 'ownerNickname' ] ? ? '' ,
'ownerAlias' => $item [ 'ownerAlias' ] ? ? '' ,
'ownerWechatId' => $item [ 'ownerWechatId' ] ? ? '' ,
'accountNickname' => $item [ 'accountNickname' ] ? ? ''
];
$formattedList [] = $formattedItem ;
}
2025-04-18 10:38:50 +08:00
return json ([
'code' => 200 ,
'msg' => '获取成功' ,
'data' => [
2025-12-11 17:32:59 +08:00
'list' => $formattedList ,
2025-04-18 13:46:34 +08:00
'total' => $total ,
2025-06-27 10:02:53 +08:00
'companyId' => $this -> getUserInfo ( 'companyId' )
2025-04-18 10:38:50 +08:00
]
]);
} catch ( \Exception $e ) {
return json ([
'code' => $e -> getCode (),
'msg' => $e -> getMessage ()
]);
}
}
2025-12-11 17:32:59 +08:00
/**
* 好友转移
* @ return \think\response\Json
*/
public function transfer ()
{
$friendId = $this -> request -> param ( 'friendId' , 0 );
$toAccountId = $this -> request -> param ( 'toAccountId' , '' );
$comment = $this -> request -> param ( 'comment' , '' );
$companyId = $this -> getUserInfo ( 'companyId' );
// 参数验证
if ( empty ( $friendId )) {
return json ([
'code' => 400 ,
'msg' => '好友ID不能为空'
]);
}
if ( empty ( $toAccountId )) {
return json ([
'code' => 400 ,
'msg' => '目标账号ID不能为空'
]);
}
try {
// 验证目标账号是否存在且属于当前公司
$accountInfo = Db :: table ( 's2_company_account' )
-> where ( 'id' , $toAccountId )
-> where ( 'departmentId' , $companyId )
-> field ( 'id as accountId, userName as accountUserName, realName as accountRealName, nickname as accountNickname, tenantId' )
-> find ();
if ( empty ( $accountInfo )) {
return json ([
'code' => 404 ,
'msg' => '目标账号不存在'
]);
}
// 调用 AutomaticAssign 进行好友转移
$automaticAssign = new AutomaticAssign ();
$result = $automaticAssign -> allotWechatFriend ([
'wechatFriendId' => $friendId ,
'toAccountId' => $toAccountId ,
'comment' => $comment ,
'notifyReceiver' => false ,
'optFrom' => 4
], true );
$resultData = json_decode ( $result , true );
if ( ! empty ( $resultData ) && $resultData [ 'code' ] == 200 ) {
// 转移成功后更新数据库
$updateData = [
'accountId' => $accountInfo [ 'accountId' ],
'accountUserName' => $accountInfo [ 'accountUserName' ],
'accountRealName' => $accountInfo [ 'accountRealName' ],
'accountNickname' => $accountInfo [ 'accountNickname' ],
'updateTime' => time ()
];
Db :: table ( 's2_wechat_friend' )
-> where ( 'id' , $friendId )
-> update ( $updateData );
return json ([
'code' => 200 ,
'msg' => '好友转移成功' ,
'data' => [
'friendId' => $friendId ,
'toAccountId' => $toAccountId
]
]);
} else {
return json ([
'code' => 500 ,
'msg' => '好友转移失败:' . ( $resultData [ 'msg' ] ? ? '未知错误' )
]);
}
} catch ( \Exception $e ) {
return json ([
'code' => 500 ,
'msg' => '好友转移失败:' . $e -> getMessage ()
]);
}
}
2025-04-18 10:38:50 +08:00
}