| | |
| | | package com.zy.asrs.service.impl; |
| | | |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.baomidou.mybatisplus.service.impl.ServiceImpl; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.zy.asrs.entity.TvDevice; |
| | | import com.zy.asrs.mapper.TvDeviceMapper; |
| | | import com.zy.asrs.service.TvDeviceService; |
| | |
| | | |
| | | @Override |
| | | public String testConnection(Long id) throws Exception { |
| | | TvDevice device = this.selectById(id); |
| | | TvDevice device = this.getById(id); |
| | | if (device == null) { |
| | | throw new RuntimeException("设备不存在"); |
| | | } |
| | |
| | | |
| | | @Override |
| | | public int refreshAllStatus() { |
| | | List<TvDevice> devices = this.selectList(null); |
| | | List<TvDevice> devices = this.list(new QueryWrapper<>()); |
| | | int count = 0; |
| | | for (TvDevice device : devices) { |
| | | try { |
| | |
| | | |
| | | @Override |
| | | public String installApk(Long deviceId, String apkPath) throws Exception { |
| | | TvDevice device = this.selectById(deviceId); |
| | | TvDevice device = this.getById(deviceId); |
| | | if (device == null) { |
| | | throw new RuntimeException("设备不存在"); |
| | | } |
| | |
| | | public List<String> batchInstallApk(List<Long> deviceIds, String apkPath) { |
| | | List<String> results = new ArrayList<>(); |
| | | for (Long deviceId : deviceIds) { |
| | | TvDevice device = this.selectById(deviceId); |
| | | TvDevice device = this.getById(deviceId); |
| | | String deviceName = device != null ? device.getName() : "ID:" + deviceId; |
| | | try { |
| | | String result = installApk(deviceId, apkPath); |
| | |
| | | |
| | | @Override |
| | | public List<TvDevice> getOnlineDevices() { |
| | | return this.selectList(new EntityWrapper<TvDevice>().eq("status", 1)); |
| | | return this.list(new QueryWrapper<TvDevice>().eq("status", 1)); |
| | | } |
| | | |
| | | @Override |
| | | public String launchApp(Long deviceId, String packageName) throws Exception { |
| | | TvDevice device = this.selectById(deviceId); |
| | | TvDevice device = this.getById(deviceId); |
| | | if (device == null) { |
| | | throw new RuntimeException("设备不存在"); |
| | | } |
| | |
| | | public List<String> batchLaunchApp(List<Long> deviceIds, String packageName) { |
| | | List<String> results = new ArrayList<>(); |
| | | for (Long deviceId : deviceIds) { |
| | | TvDevice device = this.selectById(deviceId); |
| | | TvDevice device = this.getById(deviceId); |
| | | String deviceName = device != null ? device.getName() : "ID:" + deviceId; |
| | | try { |
| | | String result = launchApp(deviceId, packageName); |
| | |
| | | |
| | | @Override |
| | | public String captureScreen(Long deviceId) throws Exception { |
| | | TvDevice device = this.selectById(deviceId); |
| | | TvDevice device = this.getById(deviceId); |
| | | if (device == null) { |
| | | throw new RuntimeException("设备不存在"); |
| | | } |
| | |
| | | return base64Image; |
| | | } |
| | | |
| | | @Override |
| | | public String stopApp(Long deviceId, String packageName) throws Exception { |
| | | TvDevice device = this.getById(deviceId); |
| | | if (device == null) { |
| | | throw new RuntimeException("设备不存在"); |
| | | } |
| | | |
| | | String pkg = (packageName != null && !packageName.trim().isEmpty()) ? packageName.trim() : defaultPackage; |
| | | StringBuilder result = new StringBuilder(); |
| | | String adbAddress = device.getAdbAddress(); |
| | | |
| | | // 先连接设备 |
| | | String connectResult = executeAdbCommand("connect", adbAddress); |
| | | result.append("连接: ").append(connectResult).append("\n"); |
| | | |
| | | if (connectResult.contains("failed")) { |
| | | device.setStatus((short) 0); |
| | | device.setUpdateTime(new Date()); |
| | | this.updateById(device); |
| | | throw new RuntimeException("连接设备失败: " + connectResult); |
| | | } |
| | | |
| | | Thread.sleep(500); |
| | | |
| | | // 使用am force-stop关闭应用 |
| | | String stopResult = executeAdbCommand("-s", adbAddress, "shell", "am", "force-stop", pkg); |
| | | result.append("关闭: ").append(stopResult.isEmpty() ? "成功" : stopResult); |
| | | |
| | | // 更新设备状态 |
| | | device.setStatus((short) 1); |
| | | device.setLastConnectTime(new Date()); |
| | | device.setUpdateTime(new Date()); |
| | | this.updateById(device); |
| | | |
| | | log.info("设备 {} 关闭应用 {} 成功", device.getName(), pkg); |
| | | return result.toString(); |
| | | } |
| | | |
| | | @Override |
| | | public String restartApp(Long deviceId, String packageName) throws Exception { |
| | | StringBuilder result = new StringBuilder(); |
| | | |
| | | // 先关闭应用 |
| | | String stopResult = stopApp(deviceId, packageName); |
| | | result.append("【关闭应用】\n").append(stopResult).append("\n\n"); |
| | | |
| | | // 等待1秒确保应用完全关闭 |
| | | Thread.sleep(1000); |
| | | |
| | | // 再启动应用 |
| | | String launchResult = launchApp(deviceId, packageName); |
| | | result.append("【启动应用】\n").append(launchResult); |
| | | |
| | | return result.toString(); |
| | | } |
| | | |
| | | @Override |
| | | public List<String> batchRestartApp(List<Long> deviceIds, String packageName) { |
| | | List<String> results = new ArrayList<>(); |
| | | for (Long deviceId : deviceIds) { |
| | | TvDevice device = this.getById(deviceId); |
| | | String deviceName = device != null ? device.getName() : "ID:" + deviceId; |
| | | try { |
| | | String result = restartApp(deviceId, packageName); |
| | | results.add(deviceName + ": 重启成功\n" + result); |
| | | } catch (Exception e) { |
| | | results.add(deviceName + ": 重启失败 - " + e.getMessage()); |
| | | } |
| | | } |
| | | return results; |
| | | } |
| | | |
| | | /** |
| | | * 执行ADB命令 |
| | | */ |