feat(device): 重构应用图标功能,新增停止应用操作

- 静态资源路径从 /api/v1/device/app_icon 迁移至 /static/app_icon,避免与 Controller 路径冲突,并添加 immutable 长缓存策略
- 数据库及实体新增 app_name 字段,支持图标上报时同步应用名称
- 图标锁定场景改用 BusinessException(APP_ICON_LOCKED) 明确业务拒绝码,设备端可识别为终态
- 新增 STOP_APP 操作类型及对应推送接口
- 安全配置放行 /static/** 静态资源路径
This commit is contained in:
2026-08-05 16:25:33 +08:00
committed by TongTongStudio
parent 749cf44754
commit 157e708a5b
18 changed files with 864 additions and 26 deletions

View File

@@ -5,6 +5,7 @@ import com.youlai.boot.common.enums.ActionTypeEnum;
import com.youlai.boot.common.enums.LogModuleEnum;
import com.youlai.boot.common.result.Result;
import com.youlai.boot.device.model.entity.SnDeviceInfo;
import com.youlai.boot.device.model.form.AppActionForm;
import com.youlai.boot.device.model.form.DeveloperForm;
import com.youlai.boot.device.model.vo.DevicePageVO;
import com.youlai.boot.device.service.DeviceService;
@@ -129,4 +130,28 @@ public class DeviceOpsController {
boolean result = deviceService.deleteDeveloperConfig(sn);
return Result.judge(result);
}
@Operation(summary = "打开应用")
@PostMapping("/{sn}/app/launch")
@Log(module = LogModuleEnum.DEVICE, value = ActionTypeEnum.LAUNCH_APP)
public Result<?> launchApp(@PathVariable String sn, @Valid @RequestBody AppActionForm form) {
boolean result = deviceService.launchApp(sn, form.getPackageName());
return Result.judge(result);
}
@Operation(summary = "清除应用数据")
@PostMapping("/{sn}/app/clear_data")
@Log(module = LogModuleEnum.DEVICE, value = ActionTypeEnum.CLEAR_APP_DATA)
public Result<?> clearAppData(@PathVariable String sn, @Valid @RequestBody AppActionForm form) {
boolean result = deviceService.clearAppData(sn, form.getPackageName());
return Result.judge(result);
}
@Operation(summary = "卸载应用")
@PostMapping("/{sn}/app/uninstall")
@Log(module = LogModuleEnum.DEVICE, value = ActionTypeEnum.UNINSTALL_APP)
public Result<?> uninstallApp(@PathVariable String sn, @Valid @RequestBody AppActionForm form) {
boolean result = deviceService.uninstallApp(sn, form.getPackageName());
return Result.judge(result);
}
}