Files
cunkebao_v3/Server/application/cunkebao/controller/device/GetDeviceListV1Controller.php
2025-04-17 17:18:35 +08:00

143 lines
3.9 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace app\cunkebao\controller\device;
use app\common\model\Device as DeviceModel;
use app\common\model\DeviceUser as DeviceUserModel;
use app\common\model\WechatFriend;
use app\cunkebao\controller\BaseController;
/**
* 设备管理控制器
*/
class GetDeviceListV1Controller extends BaseController
{
/**
* 构建查询条件
*
* @param array $params
* @return array
*/
protected function makeWhere(array $params = []): array
{
$where = [];
// 关键词搜索同时搜索IMEI和备注
if (!empty($keyword = $this->request->param('keyword'))) {
$where[] = ['exp', "d.imei LIKE '%{$keyword}%' OR d.memo LIKE '%{$keyword}%'"];
}
// 设备在线状态
if (is_numeric($alive = $this->request->param('alive'))) {
$where['d.alive'] = $alive;
}
$where['d.companyId'] = $this->getUserInfo('companyId');
$where['d.deleteTime'] = 0;
return array_merge($params, $where);
}
/**
* 获取指定用户的所有设备ID
*
* @return array
*/
protected function makeDeviceIdsWhere(): array
{
$deviceIds = DeviceUserModel::where(
$this->getUserInfo('id'),
$this->getUserInfo('companyId')
)
->column('deviceId');
if (empty($deviceIds)) {
throw new \Exception('请联系管理员绑定设备', 403);
}
$where['d.id'] = ['in', $deviceIds];
return $where;
}
/**
* 获取设备列表
*
* @param array $where 查询条件
* @param int $page 页码
* @param int $limit 每页数量
* @return \think\Paginator 分页对象
*/
protected function getDeviceList(array $where, int $page = 1, int $limit = 10): \think\Paginator
{
$query = DeviceModel::alias('d')
->field(['d.id', 'd.imei', 'd.memo', 'l.wechatId', 'd.alive','wa.nickname','wa.alias', '0 totalFriend'])
->leftJoin('device_wechat_login l', 'd.id = l.deviceId')
->leftJoin('wechat_account wa', 'l.wechatId = wa.wechatId')
->order('d.id desc');
foreach ($where as $key => $value) {
if (is_numeric($key) && is_array($value) && isset($value[0]) && $value[0] === 'exp') {
$query->whereExp('', $value[1]);
continue;
}
$query->where($key, $value);
}
return $query->paginate($this->request->param('limit/d', 10), false, ['page' => $this->request->param('page/d', 1)]);
}
/**
* 统计微信好友
*
* @param \think\Paginator $list
* @return array
*/
protected function countFriend(\think\Paginator $list): array
{
$result = [];
foreach ($list->items() as $item) {
$section = $item->toArray();
if ($item->wechatId) {
$section['totalFriend'] = WechatFriend::where(['ownerWechatId' => $section['wechatId']])->count();
}
array_push($result, $section);
}
return $result;
}
/**
* 获取设备列表
* @return \think\response\Json
*/
public function index()
{
try {
if ($this->getUserInfo('isAdmin') == 1) {
$where = $this->makeWhere();
$result = $this->getDeviceList($where);
} else {
$where = $this->makeWhere($this->makeDeviceIdsWhere());
$result = $this->getDeviceList($where);
}
return json([
'code' => 200,
'msg' => '获取成功',
'data' => [
'list' => $this->countFriend($result),
'total' => $result->total(),
]
]);
} catch (\Exception $e) {
return json([
'code' => $e->getCode(),
'msg' => $e->getMessage()
]);
}
}
}