diff --git a/pom.xml b/pom.xml index 7208ef1..e4490fe 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.daxiang agent - 0.7.6 + 0.7.8 jar diff --git a/src/main/java/com/daxiang/action/AndroidAction.java b/src/main/java/com/daxiang/action/AndroidAction.java index 726066b..c4f6d64 100644 --- a/src/main/java/com/daxiang/action/AndroidAction.java +++ b/src/main/java/com/daxiang/action/AndroidAction.java @@ -6,7 +6,6 @@ import com.daxiang.core.mobile.android.AndroidUtil; import com.daxiang.core.mobile.android.IDeviceExecuteShellCommandException; import lombok.extern.slf4j.Slf4j; -import org.springframework.util.Assert; /** * Created by jiangyitao. @@ -25,22 +24,16 @@ public AndroidAction(AndroidDevice androidDevice) { @Action(id = 2000, name = "清除apk数据", platforms = 1) public void clearApkData(@Param(description = "包名") String packageName) throws IDeviceExecuteShellCommandException { - Assert.hasText(packageName, "包名不能为空"); - AndroidUtil.clearApkData(androidDevice.getIDevice(), packageName); } @Action(id = 2001, name = "启动/重启apk", platforms = 1) public void restartApk(@Param(description = "包名") String packageName, @Param(description = "启动Activity名") String launchActivity) throws IDeviceExecuteShellCommandException { - Assert.hasText(packageName, "包名不能为空"); - Assert.hasText(launchActivity, "启动Activity不能为空"); - AndroidUtil.restartApk(androidDevice.getIDevice(), packageName, launchActivity); } @Action(id = 2002, name = "执行adb shell命令", returnValueDesc = "命令返回信息", platforms = 1) public String executeAdbShellCommand(@Param(description = "命令") String cmd) throws IDeviceExecuteShellCommandException { - Assert.hasText(cmd, "命令不能为空"); return AndroidUtil.executeShellCommand(androidDevice.getIDevice(), cmd); } } diff --git a/src/main/java/com/daxiang/controller/ActionController.java b/src/main/java/com/daxiang/controller/ActionController.java index 007f815..40b9ff7 100644 --- a/src/main/java/com/daxiang/controller/ActionController.java +++ b/src/main/java/com/daxiang/controller/ActionController.java @@ -22,15 +22,4 @@ public class ActionController { public Response debug(@Valid @RequestBody ActionDebugRequest request) { return actionService.debug(request); } - - /** - * 给开发者调试专用 - * - * @param code - * @return - */ - @PostMapping("/developer/debug") - public Response developerDebug(String className, String code) { - return actionService.compileAndDebug(className, code); - } } diff --git a/src/main/java/com/daxiang/controller/AndroidController.java b/src/main/java/com/daxiang/controller/AndroidController.java index 9f1351d..510b2ac 100644 --- a/src/main/java/com/daxiang/controller/AndroidController.java +++ b/src/main/java/com/daxiang/controller/AndroidController.java @@ -2,6 +2,7 @@ import com.daxiang.model.Response; import com.daxiang.service.AndroidService; +import com.google.common.collect.ImmutableMap; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -17,26 +18,30 @@ public class AndroidController { @GetMapping("/{mobileId}/adbkit/start") public Response startAdbKit(@PathVariable String mobileId) { - return androidService.startAdbKit(mobileId); + int port = androidService.startAdbKit(mobileId); + return Response.success(ImmutableMap.of("port", port)); } @GetMapping("/{mobileId}/adbkit/stop") public Response stop(@PathVariable String mobileId) { - return androidService.stopAdbKit(mobileId); + androidService.stopAdbKit(mobileId); + return Response.success("停止完成"); } @PostMapping("/aaptDumpBadging") public Response aaptDumpBadging(@RequestBody String apkDownloadUrl) { - return androidService.aaptDumpBadging(apkDownloadUrl); + String res = androidService.aaptDumpBadging(apkDownloadUrl); + return Response.success("ok", res); } @GetMapping("{mobileId}/imeList") public Response getImeList(@PathVariable String mobileId) { - return androidService.getImeList(mobileId); + return Response.success(androidService.getImeList(mobileId)); } @PostMapping("{mobileId}/ime") public Response setIme(@PathVariable String mobileId, String ime) { - return androidService.setIme(mobileId, ime); + androidService.setIme(mobileId, ime); + return Response.success("设置输入法成功"); } } \ No newline at end of file diff --git a/src/main/java/com/daxiang/controller/BrowserController.java b/src/main/java/com/daxiang/controller/BrowserController.java index b4dc617..fd2eb4a 100644 --- a/src/main/java/com/daxiang/controller/BrowserController.java +++ b/src/main/java/com/daxiang/controller/BrowserController.java @@ -20,6 +20,6 @@ public class BrowserController { @GetMapping("/{browserId}") public Response getBrowser(@PathVariable String browserId) { - return browserService.getBrowser(browserId); + return Response.success(browserService.getBrowser(browserId)); } } diff --git a/src/main/java/com/daxiang/controller/DeviceController.java b/src/main/java/com/daxiang/controller/DeviceController.java index afbba7f..d7a3848 100644 --- a/src/main/java/com/daxiang/controller/DeviceController.java +++ b/src/main/java/com/daxiang/controller/DeviceController.java @@ -17,12 +17,12 @@ public class DeviceController { @GetMapping("/{deviceId}/dump") public Response dump(@PathVariable String deviceId) { - return deviceService.dump(deviceId); + return Response.success(deviceService.dump(deviceId)); } @GetMapping("/{deviceId}/screenshot") public Response screenshot(@PathVariable String deviceId) { - return deviceService.screenshot(deviceId); + return Response.success(deviceService.screenshot(deviceId)); } } diff --git a/src/main/java/com/daxiang/controller/MobileController.java b/src/main/java/com/daxiang/controller/MobileController.java index a67d40d..e8ffac3 100644 --- a/src/main/java/com/daxiang/controller/MobileController.java +++ b/src/main/java/com/daxiang/controller/MobileController.java @@ -18,11 +18,12 @@ public class MobileController { @PostMapping("/{mobileId}/installApp") public Response installApp(MultipartFile app, @PathVariable String mobileId) { - return mobileService.installApp(app, mobileId); + mobileService.installApp(app, mobileId); + return Response.success("安装成功"); } @GetMapping("/{mobileId}") public Response getMobile(@PathVariable String mobileId) { - return mobileService.getMobile(mobileId); + return Response.success(mobileService.getMobile(mobileId)); } } diff --git a/src/main/java/com/daxiang/core/mobile/android/ADB.java b/src/main/java/com/daxiang/core/mobile/android/ADB.java index 365b530..48d3636 100644 --- a/src/main/java/com/daxiang/core/mobile/android/ADB.java +++ b/src/main/java/com/daxiang/core/mobile/android/ADB.java @@ -7,6 +7,8 @@ import java.io.File; import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; /** * Created by jiangyitao. @@ -28,26 +30,22 @@ public static void startServer() throws IOException { Terminal.execute("adb start-server"); } - /** - * 获取adb路径 - * - * @return - */ private static String getPath() { String androidHome = System.getenv("ANDROID_HOME"); - log.info("环境变量ANDROID_HOME: {}", androidHome); + log.info("ANDROID_HOME: {}", androidHome); if (StringUtils.isEmpty(androidHome)) { - throw new RuntimeException("未获取到ANDROID_HOME,请配置ANDROID_HOME环境变量"); + throw new IllegalStateException("环境变量缺少ANDROID_HOME"); } - String adbPath = androidHome + File.separator + "platform-tools" + File.separator; - if (Terminal.IS_WINDOWS) { - adbPath = adbPath + "adb.exe"; - } else { - adbPath = adbPath + "adb"; - } + String adbPrefixPath = androidHome + File.separator + "platform-tools" + File.separator; + String adbPath = Terminal.IS_WINDOWS ? adbPrefixPath + "adb.exe" : adbPrefixPath + "adb"; log.info("adb路径: {}", adbPath); + + if (!Files.exists(Paths.get(adbPath))) { + throw new IllegalStateException(adbPath + "文件不存在"); + } + return adbPath; } } \ No newline at end of file diff --git a/src/main/java/com/daxiang/core/mobile/android/AndroidUtil.java b/src/main/java/com/daxiang/core/mobile/android/AndroidUtil.java index 22e061b..bc807bb 100644 --- a/src/main/java/com/daxiang/core/mobile/android/AndroidUtil.java +++ b/src/main/java/com/daxiang/core/mobile/android/AndroidUtil.java @@ -55,7 +55,9 @@ public static String getMemSize(IDevice iDevice) throws IDeviceExecuteShellComma } public static String getDeviceName(IDevice iDevice) { - return String.format("[%s] %s", iDevice.getProperty("ro.product.brand"), iDevice.getProperty("ro.product.model")); + String brand = iDevice.getProperty("ro.product.brand"); + String model = iDevice.getProperty("ro.product.model"); + return String.format("[%s] %s", brand, model); } public static String getAndroidVersion(Integer sdkVerison) { @@ -134,10 +136,14 @@ public static String aaptDumpBadging(String apkPath) throws IOException { } public static void clearApkData(IDevice iDevice, String packageName) throws IDeviceExecuteShellCommandException { + Assert.hasText(packageName, "packageName must has text"); executeShellCommand(iDevice, "pm clear " + packageName); } public static void restartApk(IDevice iDevice, String packageName, String launchActivity) throws IDeviceExecuteShellCommandException { + Assert.hasText(packageName, "packageName must has text"); + Assert.hasText(launchActivity, "launchActivity must has text"); + executeShellCommand(iDevice, "am start -S -n " + packageName + "/" + launchActivity); } @@ -168,6 +174,7 @@ public static List getImeList(IDevice iDevice) throws IDeviceExecuteShel } public static void setIme(IDevice iDevice, String ime) throws IDeviceExecuteShellCommandException { + Assert.hasText(ime, "ime must has text"); executeShellCommand(iDevice, "ime set " + ime); } diff --git a/src/main/java/com/daxiang/core/testng/TestNGRunner.java b/src/main/java/com/daxiang/core/testng/TestNGRunner.java index 80ae798..a34b314 100644 --- a/src/main/java/com/daxiang/core/testng/TestNGRunner.java +++ b/src/main/java/com/daxiang/core/testng/TestNGRunner.java @@ -1,6 +1,6 @@ package com.daxiang.core.testng; -import com.daxiang.model.Response; +import com.daxiang.exception.ActionDebugException; import org.springframework.util.CollectionUtils; import org.testng.ITestNGListener; import org.testng.TestNG; @@ -21,18 +21,18 @@ public static void runTestCases(Class[] classes, Integer failRetryCount) { } } - public static Response debugAction(Class clazz) { + public static String debugAction(Class clazz) throws ActionDebugException { TestNG testNG = run(new Class[]{clazz}, Arrays.asList(DebugActionTestListener.class)); if (testNG.getStatus() != 0) { // 运行有错误 - return Response.fail(DebugActionTestListener.getFailMsg()); - } else { // 运行成功 - List printMsgList = DebugActionTestListener.getPrintMsgList(); - if (CollectionUtils.isEmpty(printMsgList)) { - printMsgList = Arrays.asList("执行成功"); - } - - return Response.success(String.join("\n", printMsgList)); + throw new ActionDebugException(DebugActionTestListener.getFailMsg()); } + + List printMsgList = DebugActionTestListener.getPrintMsgList(); + if (CollectionUtils.isEmpty(printMsgList)) { + printMsgList = Arrays.asList("执行成功"); + } + + return String.join("\n", printMsgList); } private static TestNG run(Class[] testClasses, List> listenerClasses) { diff --git a/src/main/java/com/daxiang/exception/ActionDebugException.java b/src/main/java/com/daxiang/exception/ActionDebugException.java new file mode 100644 index 0000000..32f5dd5 --- /dev/null +++ b/src/main/java/com/daxiang/exception/ActionDebugException.java @@ -0,0 +1,10 @@ +package com.daxiang.exception; + +/** + * Created by jiangyitao. + */ +public class ActionDebugException extends Exception { + public ActionDebugException(String msg) { + super(msg); + } +} diff --git a/src/main/java/com/daxiang/model/Response.java b/src/main/java/com/daxiang/model/Response.java index 9b107a3..3ad8a93 100644 --- a/src/main/java/com/daxiang/model/Response.java +++ b/src/main/java/com/daxiang/model/Response.java @@ -17,8 +17,8 @@ public class Response { private String msg; private T data; - private static Response buildResponse(Integer status, String msg, T data) { - Response response = new Response(); + private static Response createResponse(Integer status, String msg, T data) { + Response response = new Response<>(); response.setStatus(status); response.setMsg(msg); response.setData(data); @@ -27,35 +27,35 @@ private static Response buildResponse(Integer status, String msg, T data) @JsonIgnore public boolean isSuccess() { - return status == SUCCESS; + return SUCCESS.equals(status); } public static Response success() { - return buildResponse(SUCCESS, "success", null); + return createResponse(SUCCESS, "success", null); } public static Response success(T data) { - return buildResponse(SUCCESS, "success", data); + return createResponse(SUCCESS, "success", data); } public static Response success(String msg) { - return buildResponse(SUCCESS, msg, null); + return createResponse(SUCCESS, msg, null); } public static Response success(String msg, T data) { - return buildResponse(SUCCESS, msg, data); + return createResponse(SUCCESS, msg, data); } public static Response fail(String msg) { - return buildResponse(FAIL, msg, null); + return createResponse(FAIL, msg, null); } public static Response fail(String msg, T data) { - return buildResponse(FAIL, msg, data); + return createResponse(FAIL, msg, data); } public static Response error(String msg) { - return buildResponse(ERROR, msg, null); + return createResponse(ERROR, msg, null); } } diff --git a/src/main/java/com/daxiang/service/ActionService.java b/src/main/java/com/daxiang/service/ActionService.java index 8bb4f32..997cca3 100644 --- a/src/main/java/com/daxiang/service/ActionService.java +++ b/src/main/java/com/daxiang/service/ActionService.java @@ -11,7 +11,6 @@ import com.daxiang.utils.UUIDUtil; import com.google.common.collect.ImmutableMap; import lombok.extern.slf4j.Slf4j; -import org.dvare.dynamic.exceptions.DynamicCompilerException; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; @@ -24,12 +23,6 @@ @Service public class ActionService { - /** - * 调试action - * - * @param request - * @return - */ public Response debug(ActionDebugRequest request) { DeviceTestTask deviceTestTask = new DeviceTestTask(); BeanUtils.copyProperties(request, deviceTestTask); @@ -48,21 +41,13 @@ public Response debug(ActionDebugRequest request) { return Response.fail(e.getMessage()); } - Response response = compileAndDebug(className, code); - response.setData(ImmutableMap.of("code", code)); - return response; - } - - /** - * 编译调试运行 - */ - public Response compileAndDebug(String className, String code) { try { Class clazz = JavaCompiler.compile(className, code); - return TestNGRunner.debugAction(clazz); - } catch (DynamicCompilerException e) { - log.error("编译{}失败: {}", className, e.getMessage()); - return Response.fail(e.getMessage()); + String printInfo = TestNGRunner.debugAction(clazz); + return Response.success(printInfo, ImmutableMap.of("code", code)); + } catch (Exception e) { + log.error("[{}]err msg: {}, code: {} ", request.getDeviceId(), e.getMessage(), code); + return Response.fail(e.getMessage(), ImmutableMap.of("code", code)); } } diff --git a/src/main/java/com/daxiang/service/AndroidService.java b/src/main/java/com/daxiang/service/AndroidService.java index 9ec0152..73fccdb 100644 --- a/src/main/java/com/daxiang/service/AndroidService.java +++ b/src/main/java/com/daxiang/service/AndroidService.java @@ -6,15 +6,15 @@ import com.daxiang.core.mobile.android.AndroidDevice; import com.daxiang.core.mobile.android.AndroidUtil; import com.daxiang.core.mobile.android.IDeviceExecuteShellCommandException; -import com.daxiang.model.Response; +import com.daxiang.exception.AgentException; import com.daxiang.utils.HttpUtil; -import com.google.common.collect.ImmutableMap; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.FileUtils; import org.springframework.stereotype.Service; import java.io.File; import java.io.IOException; +import java.util.List; /** * Created by jiangyitao. @@ -23,74 +23,70 @@ @Service public class AndroidService { - public Response startAdbKit(String mobileId) { + public int startAdbKit(String mobileId) { Device device = DeviceHolder.getConnectedDevice(mobileId); if (device == null) { - return Response.fail(mobileId + "未连接"); + throw new AgentException(mobileId + "未连接"); } try { - int port = ((AndroidDevice) device).getAdbKit().start(); - return Response.success(ImmutableMap.of("port", port)); + return ((AndroidDevice) device).getAdbKit().start(); } catch (IOException e) { - log.error("[{}]启动adbkit失败", device.getId(), e); - return Response.fail(e.getMessage()); + log.error("[{}]启动adbkit失败", mobileId, e); + throw new AgentException(e.getMessage()); } } - public Response stopAdbKit(String mobileId) { + public void stopAdbKit(String mobileId) { Device device = DeviceHolder.getConnectedDevice(mobileId); if (device == null) { - return Response.fail(mobileId + "未连接"); + throw new AgentException(mobileId + "未连接"); } ((AndroidDevice) device).getAdbKit().stop(); - return Response.success("停止完成"); } - public Response aaptDumpBadging(String apkDownloadUrl) { + public String aaptDumpBadging(String apkDownloadUrl) { File apkFile = null; try { apkFile = HttpUtil.downloadFile(apkDownloadUrl); - String result = AndroidUtil.aaptDumpBadging(apkFile.getAbsolutePath()); - return Response.success("ok", result); + return AndroidUtil.aaptDumpBadging(apkFile.getAbsolutePath()); } catch (IOException e) { - log.error("io error", e); - return Response.fail(e.getMessage()); + log.error(e.getMessage(), e); + throw new AgentException(e.getMessage()); } finally { FileUtils.deleteQuietly(apkFile); } } - public Response getImeList(String mobileId) { + public List getImeList(String mobileId) { Device device = DeviceHolder.getConnectedDevice(mobileId); if (device == null) { - return Response.fail(mobileId + "未连接"); + throw new AgentException(mobileId + "未连接"); } try { IDevice iDevice = ((AndroidDevice) device).getIDevice(); - return Response.success(AndroidUtil.getImeList(iDevice)); + return AndroidUtil.getImeList(iDevice); } catch (IDeviceExecuteShellCommandException e) { - log.error("[{}]获取输入法失败", device.getId(), e); - return Response.fail(e.getMessage()); + log.error("[{}]获取输入法失败", mobileId, e); + throw new AgentException(e.getMessage()); } } - public Response setIme(String mobileId, String ime) { + public void setIme(String mobileId, String ime) { Device device = DeviceHolder.getConnectedDevice(mobileId); if (device == null) { - return Response.fail(mobileId + "未连接"); + throw new AgentException(mobileId + "未连接"); } try { IDevice iDevice = ((AndroidDevice) device).getIDevice(); AndroidUtil.setIme(iDevice, ime); - return Response.success("设置输入法成功"); } catch (IDeviceExecuteShellCommandException e) { - log.error("[{}]设置输入法失败", device.getId(), e); - return Response.fail(e.getMessage()); + log.error("[{}]设置输入法失败", mobileId, e); + throw new AgentException(e.getMessage()); } } } \ No newline at end of file diff --git a/src/main/java/com/daxiang/service/BrowserService.java b/src/main/java/com/daxiang/service/BrowserService.java index c65a628..3ac9ba3 100644 --- a/src/main/java/com/daxiang/service/BrowserService.java +++ b/src/main/java/com/daxiang/service/BrowserService.java @@ -2,8 +2,9 @@ import com.daxiang.core.Device; import com.daxiang.core.DeviceHolder; +import com.daxiang.core.pc.web.Browser; import com.daxiang.core.pc.web.BrowserDevice; -import com.daxiang.model.Response; +import com.daxiang.exception.AgentException; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; @@ -13,18 +14,13 @@ @Service public class BrowserService { - public Response getBrowser(String browserId) { + public Browser getBrowser(String browserId) { if (StringUtils.isEmpty(browserId)) { - return Response.fail("browserId不能为空"); + throw new AgentException("browserId不能为空"); } Device device = DeviceHolder.get(browserId); - if (device == null) { - return Response.success(); - } else { - BrowserDevice browserDevice = (BrowserDevice) device; - return Response.success(browserDevice.getBrowser()); - } + return device == null ? null : ((BrowserDevice) device).getBrowser(); } } diff --git a/src/main/java/com/daxiang/service/DeviceService.java b/src/main/java/com/daxiang/service/DeviceService.java index bbeb456..5071abb 100644 --- a/src/main/java/com/daxiang/service/DeviceService.java +++ b/src/main/java/com/daxiang/service/DeviceService.java @@ -1,16 +1,18 @@ package com.daxiang.service; -import com.alibaba.fastjson.JSONObject; import com.daxiang.core.Device; import com.daxiang.core.DeviceHolder; import com.daxiang.core.mobile.MobileDevice; -import com.daxiang.model.Response; +import com.daxiang.exception.AgentException; import com.daxiang.model.UploadFile; import io.appium.java_client.AppiumDriver; import lombok.extern.slf4j.Slf4j; import org.openqa.selenium.Dimension; import org.springframework.stereotype.Service; +import java.util.HashMap; +import java.util.Map; + /** * Created by jiangyitao. */ @@ -18,17 +20,17 @@ @Service public class DeviceService { - public Response screenshot(String deviceId) { + public Map screenshot(String deviceId) { Device device = DeviceHolder.getConnectedDevice(deviceId); if (device == null) { - return Response.fail(deviceId + "未连接"); + throw new AgentException(deviceId + "未连接"); } UploadFile uploadFile = device.screenshotThenUploadToServer(); - JSONObject response = new JSONObject(); - response.put("imgUrl", uploadFile.getDownloadUrl()); - response.put("imgPath", uploadFile.getFilePath()); + Map res = new HashMap<>(); + res.put("imgUrl", uploadFile.getDownloadUrl()); + res.put("imgPath", uploadFile.getFilePath()); if (device instanceof MobileDevice) { MobileDevice mobileDevice = (MobileDevice) device; @@ -37,21 +39,21 @@ public Response screenshot(String deviceId) { // 在竖/横屏时,若android截图有虚拟按键,这里window的高度/宽度不包含虚拟按键 AppiumDriver driver = (AppiumDriver) mobileDevice.getDriver(); Dimension window = driver.manage().window().getSize(); - response.put("windowHeight", window.getHeight()); - response.put("windowWidth", window.getWidth()); - response.put("windowOrientation", driver.getOrientation().value()); + res.put("windowHeight", window.getHeight()); + res.put("windowWidth", window.getWidth()); + res.put("windowOrientation", driver.getOrientation().value()); } } - return Response.success(response); + return res; } - public Response dump(String deviceId) { + public Map dump(String deviceId) { Device device = DeviceHolder.getConnectedDevice(deviceId); if (device == null) { - return Response.fail(deviceId + "未连接"); + throw new AgentException(deviceId + "未连接"); } - return Response.success(device.dump()); + return device.dump(); } } diff --git a/src/main/java/com/daxiang/service/MobileService.java b/src/main/java/com/daxiang/service/MobileService.java index a16447c..d9461c1 100644 --- a/src/main/java/com/daxiang/service/MobileService.java +++ b/src/main/java/com/daxiang/service/MobileService.java @@ -1,9 +1,10 @@ package com.daxiang.service; import com.daxiang.core.Device; +import com.daxiang.core.mobile.Mobile; import com.daxiang.core.mobile.MobileDevice; import com.daxiang.core.DeviceHolder; -import com.daxiang.model.Response; +import com.daxiang.exception.AgentException; import com.daxiang.utils.UUIDUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.FileUtils; @@ -20,43 +21,33 @@ @Service public class MobileService { - public Response installApp(MultipartFile app, String mobileId) { + public void installApp(MultipartFile app, String mobileId) { Device device = DeviceHolder.getConnectedDevice(mobileId); if (device == null) { - return Response.fail(mobileId + "未连接"); + throw new AgentException(mobileId + "未连接"); } String fileName = app.getOriginalFilename(); - if (fileName.contains(".")) { - fileName = UUIDUtil.getUUID() + "." + StringUtils.unqualify(fileName); - } else { - fileName = UUIDUtil.getUUID(); - } - + fileName = UUIDUtil.getUUIDFilename(fileName); File appFile = new File(fileName); + try { FileUtils.copyInputStreamToFile(app.getInputStream(), appFile); ((MobileDevice) device).installApp(appFile); - return Response.success("安装成功"); } catch (Exception e) { log.error("[{}]安装app失败", mobileId, e); - return Response.fail(e.getMessage()); + throw new AgentException(e.getMessage()); } finally { FileUtils.deleteQuietly(appFile); } } - public Response getMobile(String mobileId) { + public Mobile getMobile(String mobileId) { if (StringUtils.isEmpty(mobileId)) { - return Response.fail("mobileId不能为空"); + throw new AgentException("mobileId不能为空"); } Device device = DeviceHolder.get(mobileId); - if (device == null) { - return Response.success(); - } else { - MobileDevice mobileDevice = (MobileDevice) device; - return Response.success(mobileDevice.getMobile()); - } + return device == null ? null : ((MobileDevice) device).getMobile(); } } diff --git a/src/main/java/com/daxiang/utils/HttpUtil.java b/src/main/java/com/daxiang/utils/HttpUtil.java index 796936d..872a0cf 100644 --- a/src/main/java/com/daxiang/utils/HttpUtil.java +++ b/src/main/java/com/daxiang/utils/HttpUtil.java @@ -2,7 +2,6 @@ import com.daxiang.App; import org.apache.commons.io.FileUtils; -import org.springframework.util.StringUtils; import org.springframework.web.client.RestTemplate; import java.io.File; @@ -25,11 +24,7 @@ public static File downloadFile(String url) throws IOException { public static File downloadFile(String url, boolean renameFile) throws IOException { String fileName = url.substring(url.lastIndexOf("/") + 1); if (renameFile) { - if (fileName.contains(".")) { - fileName = UUIDUtil.getUUID() + "." + StringUtils.unqualify(fileName); - } else { - fileName = UUIDUtil.getUUID(); - } + fileName = UUIDUtil.getUUIDFilename(fileName); } File file = new File(fileName); diff --git a/src/main/java/com/daxiang/utils/UUIDUtil.java b/src/main/java/com/daxiang/utils/UUIDUtil.java index 29492ea..f89bbf1 100644 --- a/src/main/java/com/daxiang/utils/UUIDUtil.java +++ b/src/main/java/com/daxiang/utils/UUIDUtil.java @@ -1,12 +1,21 @@ package com.daxiang.utils; +import org.springframework.util.Assert; +import org.springframework.util.StringUtils; + import java.util.UUID; /** * Created by jiangyitao. */ public class UUIDUtil { + public static String getUUID() { return UUID.randomUUID().toString().replace("-", "").toLowerCase(); } + + public static String getUUIDFilename(String filename) { + Assert.hasText(filename, "filename不能为空"); + return filename.contains(".") ? getUUID() + "." + StringUtils.unqualify(filename) : getUUID(); + } }