超管后台 - 获取公司关联的设备列表
This commit is contained in:
@@ -17,4 +17,14 @@ class DeviceWechatLogin extends Model
|
||||
protected $createTime = 'createTime';
|
||||
protected $updateTime = 'updateTime';
|
||||
|
||||
}
|
||||
/**
|
||||
* 获取设备最新登录记录的id
|
||||
*
|
||||
* @param array $deviceIds
|
||||
* @return array
|
||||
*/
|
||||
public static function getDevicesLatestLogin(array $deviceIds): array
|
||||
{
|
||||
return self::fieldRaw('max(id) as lastedId,deviceId')->whereIn('deviceId', $deviceIds)->group('deviceId')->select()->toArray();
|
||||
}
|
||||
}
|
||||
@@ -41,5 +41,6 @@ Route::group('', function () {
|
||||
Route::get('list', 'app\superadmin\controller\company\GetCompanyListController@index');
|
||||
Route::get('detail/:id', 'app\superadmin\controller\company\GetCompanyDetailForUpdateController@index');
|
||||
Route::get('profile/:id', 'app\superadmin\controller\company\GetCompanyDetailForProfileController@index');
|
||||
Route::get('devices', 'app\superadmin\controller\company\GetCompanyDevicesForProfileController@index');
|
||||
});
|
||||
})->middleware(['app\superadmin\middleware\AdminAuth']);
|
||||
@@ -0,0 +1,95 @@
|
||||
<?php
|
||||
|
||||
namespace app\superadmin\controller\company;
|
||||
|
||||
use app\common\model\Device as DeviceModel;
|
||||
use app\common\model\DeviceWechatLogin as DeviceWechatLoginModel;
|
||||
use app\common\model\WechatFriend as WechatFriendModel;
|
||||
use Eison\Utils\Helper\ArrHelper;
|
||||
use library\ResponseHelper;
|
||||
use think\Controller;
|
||||
|
||||
/**
|
||||
* 设备管理控制器
|
||||
*/
|
||||
class GetCompanyDevicesForProfileController extends Controller
|
||||
{
|
||||
/**
|
||||
* 获取项目下的所有设备
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected function getDevicesWithCompanyId(): array
|
||||
{
|
||||
$companyId = $this->request->param('companyId/d', 0);
|
||||
|
||||
$devices = DeviceModel::where(compact('companyId'))->field('id,memo,phone,model,brand,alive,id deviceId')
|
||||
->select()
|
||||
->toArray();
|
||||
|
||||
if (empty($devices)) {
|
||||
throw new \Exception('暂无设备', 200);
|
||||
}
|
||||
|
||||
return $devices;
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询设备与微信的关联关系.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected function getDeviceWechatRelationsByDeviceIds(array $deviceIds): array
|
||||
{
|
||||
// 获取设备最新登录记录的id
|
||||
$latestLogs = DeviceWechatLoginModel::getDevicesLatestLogin($deviceIds);
|
||||
|
||||
// 获取最新登录记录id
|
||||
$latestIds = array_column($latestLogs, 'lastedId');
|
||||
|
||||
return DeviceWechatLoginModel::field('deviceId,wechatId,alive wAlive')
|
||||
->whereIn('id', $latestIds)
|
||||
->select()
|
||||
->toArray();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取设备的微信好友统计
|
||||
*
|
||||
* @param array $ownerWechatId
|
||||
* @return void
|
||||
*/
|
||||
protected function getWechatFriendsCount(array $deviceIds): array
|
||||
{
|
||||
// 查询设备与微信的关联关系
|
||||
$relations = $this->getDeviceWechatRelationsByDeviceIds($deviceIds);
|
||||
|
||||
// 统计微信好友数量
|
||||
$friendCounts = WechatFriendModel::alias('f')->field('ownerWechatId wechatId,count(*) friendCount')
|
||||
->whereIn('ownerWechatId', array_column($relations, 'wechatId'))
|
||||
->group('ownerWechatId')
|
||||
->select()
|
||||
->toArray();
|
||||
|
||||
return ArrHelper::join($relations, $friendCounts, 'wechatId');
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取公司关联的设备列表
|
||||
*
|
||||
* @return \think\response\Json
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
try {
|
||||
$devices = $this->getDevicesWithCompanyId();
|
||||
$friendCount = $this->getWechatFriendsCount(array_column($devices, 'id'));
|
||||
|
||||
$result = ArrHelper::leftJoin($devices, $friendCount, 'deviceId');
|
||||
|
||||
return ResponseHelper::success($result);
|
||||
} catch (\Exception $e) {
|
||||
return ResponseHelper::error($e->getMessage(), $e->getCode());
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user