From d9071fdef58ecee98c568fdbb0d1345bebb06948 Mon Sep 17 00:00:00 2001 From: tongtongstudio Date: Sat, 13 Sep 2025 09:09:53 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0sn=E6=8E=A8=E9=80=81=E6=8E=A7?= =?UTF-8?q?=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../videotablet/config/PushIdConfig.java | 9 ++++-- .../controller/pub/ManageSnController.java | 2 +- .../controller/sn/DevicesController.java | 24 +++++++-------- .../controller/user/UserController.java | 30 +++++++++++++++++++ .../onekeycall/videotablet/result/Result.java | 14 +++++++-- .../videotablet/result/ResultCodeEnum.java | 18 +++++++++-- 6 files changed, 77 insertions(+), 20 deletions(-) diff --git a/src/main/java/com/onekeycall/videotablet/config/PushIdConfig.java b/src/main/java/com/onekeycall/videotablet/config/PushIdConfig.java index 35315a7..e5d87a3 100644 --- a/src/main/java/com/onekeycall/videotablet/config/PushIdConfig.java +++ b/src/main/java/com/onekeycall/videotablet/config/PushIdConfig.java @@ -3,8 +3,13 @@ package com.onekeycall.videotablet.config; public class PushIdConfig { /*绑定设备*/ public static final String BIND_DEVICE = "1"; - /*卸载应用*/ - public static final String UNINSTALL_APK = "2"; + /*添加联系人*/ public static final String CONTACT_ADD = "3"; + + public static final String OPEN_APP = "10"; + public static final String KILL_APP = "11"; + public static final String CLEAR_APP = "12"; + /*卸载应用*/ + public static final String UNINSTALL_APP = "13"; } diff --git a/src/main/java/com/onekeycall/videotablet/controller/pub/ManageSnController.java b/src/main/java/com/onekeycall/videotablet/controller/pub/ManageSnController.java index c4a01c8..91d1320 100644 --- a/src/main/java/com/onekeycall/videotablet/controller/pub/ManageSnController.java +++ b/src/main/java/com/onekeycall/videotablet/controller/pub/ManageSnController.java @@ -55,7 +55,7 @@ public class ManageSnController { // 3. 校验 sn 是否存在 DeviceInfo oldDeviceInfo = deviceSnService.findBySn(sn); if (oldDeviceInfo != null) { - return Result.error().message("sn already exists"); + return Result.exists().message("sn already exists"); } // 4. 新增 sn diff --git a/src/main/java/com/onekeycall/videotablet/controller/sn/DevicesController.java b/src/main/java/com/onekeycall/videotablet/controller/sn/DevicesController.java index 6ed5528..e5555c4 100644 --- a/src/main/java/com/onekeycall/videotablet/controller/sn/DevicesController.java +++ b/src/main/java/com/onekeycall/videotablet/controller/sn/DevicesController.java @@ -117,7 +117,6 @@ public class DevicesController { @RequestParam(value = "version_code") Long versionCode, @RequestParam(value = "md5") String md5 ) throws Exception { - String iconPath = FilePath.getApkIconPath(); logger.info("uploadApkIcon, iconPath: {}", iconPath); File fileDir = new File(iconPath); @@ -125,22 +124,23 @@ public class DevicesController { fileDir.mkdirs(); } - String fileMd5 = HashUtils.calculateMultipartFileMd5(file); - - if (!fileMd5.equals(md5)) { - return Result.error().message("file md5 not match"); - } - - logger.info("uploadApkIcon, fileMd5: {}", fileMd5); - if (apkIconService.existsByPackageNameAndMd5(packageName, md5)) { - return Result.error().message("apk icon already exists"); - } - String originName = file.getOriginalFilename(); String fileExtension = FilenameUtils.getExtension(originName); if (TextUtils.isEmpty(fileExtension)) { return Result.error().message("file extension is empty"); } + + String fileMd5 = HashUtils.calculateMultipartFileMd5(file); + + if (!fileMd5.equalsIgnoreCase(md5)) { + return Result.error().message("file md5 not match"); + } + + logger.info("uploadApkIcon, fileMd5: {}", fileMd5); + if (apkIconService.existsByPackageNameAndMd5(packageName, md5)) { + return Result.exists().message("apk icon already exists"); + } + String fileName = packageName + "_" + md5 + "." + fileExtension; File destFile = new File(fileDir, fileName); file.transferTo(destFile); diff --git a/src/main/java/com/onekeycall/videotablet/controller/user/UserController.java b/src/main/java/com/onekeycall/videotablet/controller/user/UserController.java index 5a9982e..06ac8a0 100644 --- a/src/main/java/com/onekeycall/videotablet/controller/user/UserController.java +++ b/src/main/java/com/onekeycall/videotablet/controller/user/UserController.java @@ -1,16 +1,19 @@ package com.onekeycall.videotablet.controller.user; +import com.onekeycall.videotablet.config.PushIdConfig; import com.onekeycall.videotablet.controller.pub.LoginController; import com.onekeycall.videotablet.dto.TokenPair; import com.onekeycall.videotablet.entity.DeviceApkInfo; import com.onekeycall.videotablet.entity.DeviceInfo; import com.onekeycall.videotablet.entity.DeviceLocation; import com.onekeycall.videotablet.entity.User; +import com.onekeycall.videotablet.gson.GsonUtils; import com.onekeycall.videotablet.result.Result; import com.onekeycall.videotablet.service.DeviceApkInfoService; import com.onekeycall.videotablet.service.DeviceLocationService; import com.onekeycall.videotablet.service.DeviceSnService; import com.onekeycall.videotablet.service.UserService; +import com.onekeycall.videotablet.utils.DevicePushUtils; import com.onekeycall.videotablet.utils.JwtUtil; import com.onekeycall.videotablet.utils.TextUtils; import org.slf4j.Logger; @@ -23,6 +26,7 @@ import org.springframework.web.bind.annotation.*; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.ExecutionException; @RestController @RequestMapping("/user") @@ -188,4 +192,30 @@ public class UserController { } return Result.ok().data(deviceApkInfo.getApkList()); } + + @PostMapping("/control_app") + public Result controlApp(@RequestParam String sn, + @RequestParam(value = "package_name") String packageName, + @RequestParam String action + ) throws ExecutionException, InterruptedException { + Map params = new HashMap<>(); + params.put("package_name", packageName); + switch (action){ + case "open": + DevicePushUtils.aliyunAsyncPush(PushIdConfig.OPEN_APP, sn, GsonUtils.toJSONString(params)); + break; + case "kill": + DevicePushUtils.aliyunAsyncPush(PushIdConfig.KILL_APP, sn, GsonUtils.toJSONString(params)); + break; + case "clear": + DevicePushUtils.aliyunAsyncPush(PushIdConfig.CLEAR_APP, sn, GsonUtils.toJSONString(params)); + break; + case "uninstall": + DevicePushUtils.aliyunAsyncPush(PushIdConfig.UNINSTALL_APP, sn, GsonUtils.toJSONString(params)); + break; + default: + return Result.error().message("action is empty"); + } + return Result.ok().message("success"); + } } diff --git a/src/main/java/com/onekeycall/videotablet/result/Result.java b/src/main/java/com/onekeycall/videotablet/result/Result.java index ce1e176..c37c0ce 100644 --- a/src/main/java/com/onekeycall/videotablet/result/Result.java +++ b/src/main/java/com/onekeycall/videotablet/result/Result.java @@ -54,9 +54,9 @@ public class Result { public static Result error() { Result r = new Result(); - r.setSuccess(ResultCodeEnum.UNKNOWN_REASON.getSuccess()); - r.setCode(ResultCodeEnum.UNKNOWN_REASON.getCode()); - r.setMessage(ResultCodeEnum.UNKNOWN_REASON.getMessage()); + r.setSuccess(ResultCodeEnum.FAIL.getSuccess()); + r.setCode(ResultCodeEnum.FAIL.getCode()); + r.setMessage(ResultCodeEnum.FAIL.getMessage()); return r; } @@ -76,6 +76,14 @@ public class Result { return r; } + public static Result exists() { + Result r = new Result(); + r.setSuccess(ResultCodeEnum.EXISTS.getSuccess()); + r.setCode(ResultCodeEnum.EXISTS.getCode()); + r.setMessage(ResultCodeEnum.EXISTS.getMessage()); + return r; + } + public static Result setResult(ResultCodeEnum resultCodeEnum) { Result r = new Result(); r.setSuccess(resultCodeEnum.getSuccess()); diff --git a/src/main/java/com/onekeycall/videotablet/result/ResultCodeEnum.java b/src/main/java/com/onekeycall/videotablet/result/ResultCodeEnum.java index 1157ec5..05f35ae 100644 --- a/src/main/java/com/onekeycall/videotablet/result/ResultCodeEnum.java +++ b/src/main/java/com/onekeycall/videotablet/result/ResultCodeEnum.java @@ -11,11 +11,25 @@ public enum ResultCodeEnum { SUCCESS(true, 20000, "成功"), UNKNOWN_REASON(false, 20001, "未知错误"), - NOT_FOUND(true, 20004, "没有数据"), + /** + * 失败 + */ + FAIL(false, 20002, "失败"), + /** * 未登录 */ - UNAUTHORIZED(false, 20003, "未登录"); + UNAUTHORIZED(false, 20003, "未登录"), + /** + * 没有数据 + */ + NOT_FOUND(false, 20004, "没有数据"), + /** + * 已存在 + */ + EXISTS(false, 20005, "已存在"), + + ; private final Boolean success;