Junjie
6 天以前 72c49f3afa22c4f84760d57001e45a4fadf2d482
src/main/java/com/zy/asrs/service/impl/TvDeviceServiceImpl.java
@@ -1,7 +1,7 @@
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;
@@ -37,7 +37,7 @@
    @Override
    public String testConnection(Long id) throws Exception {
        TvDevice device = this.selectById(id);
        TvDevice device = this.getById(id);
        if (device == null) {
            throw new RuntimeException("设备不存在");
        }
@@ -83,7 +83,7 @@
    @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 {
@@ -98,7 +98,7 @@
    @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("设备不存在");
        }
@@ -143,7 +143,7 @@
    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);
@@ -157,12 +157,12 @@
    @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("设备不存在");
        }
@@ -253,7 +253,7 @@
    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);
@@ -267,7 +267,7 @@
    @Override
    public String captureScreen(Long deviceId) throws Exception {
        TvDevice device = this.selectById(deviceId);
        TvDevice device = this.getById(deviceId);
        if (device == null) {
            throw new RuntimeException("设备不存在");
        }
@@ -334,6 +334,78 @@
        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命令
     */