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

45
sql/app_icon.sql Normal file
View File

@@ -0,0 +1,45 @@
-- =============================================================================
-- 应用图标库表app_icon
--
-- 设计目标:
-- 1. 全局图标库同一应用包名package_name的所有设备共用图标按包名维度维护
-- 2. 历史版本同一包名可保存多个历史图标版本status 区分当前生效/历史),
-- 支持从历史版本中选取并锁定,规避三方 App 活动期换图标带广告等风险
-- 3. 锁定机制locked=1 的版本不可被设备端/管理端上传覆盖,需先解锁
-- 4. 内容指纹icon_md5 用于内容去重(同一图标不同包名复用同一文件)
--
-- 约定:
-- - 同一 package_name 下 status=1当前生效的记录有且仅有一条
-- - 历史版本status=0仅用于展示与选取锁定不物理删除
-- - 图标文件按 {md5}.{ext} 内容寻址存储,访问路径由后端拼接
--
-- 部署规范:不直连库,由 DBA 执行;先 DROP 再 CREATE 确保结构与实体完全一致
-- DROP 会清空历史图标数据,可由设备端重新上报补齐)。
-- =============================================================================
DROP TABLE IF EXISTS `app_icon`;
CREATE TABLE `app_icon`
(
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`package_name` VARCHAR(255) NOT NULL COMMENT '应用包名(全局唯一维度,同包名多版本共存)',
`icon_url` VARCHAR(500) NOT NULL COMMENT '图标访问地址(相对路径,如 /api/v1/device/app_icon/{md5}.png',
`icon_md5` VARCHAR(64) DEFAULT NULL COMMENT '图标文件MD5内容指纹用于去重与换图标检测',
`version` INT NOT NULL DEFAULT 1 COMMENT '版本号同包名内自增从1开始',
`status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态1当前生效 0历史版本',
`locked` TINYINT NOT NULL DEFAULT 0 COMMENT '是否锁定0未锁定 1已锁定锁定后不可上传覆盖',
`source` VARCHAR(20) NOT NULL DEFAULT 'device' COMMENT '图标来源device设备端上报 admin管理端上传',
`create_by` BIGINT DEFAULT NULL COMMENT '创建人ID',
`create_time` DATETIME DEFAULT NULL COMMENT '创建时间',
`update_by` BIGINT DEFAULT NULL COMMENT '更新人ID',
`update_time` DATETIME DEFAULT NULL COMMENT '更新时间',
`is_deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '逻辑删除0未删 1已删',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_package_version` (`package_name`, `version`),
KEY `idx_package_status` (`package_name`, `status`),
KEY `idx_md5` (`icon_md5`),
KEY `idx_is_deleted` (`is_deleted`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COMMENT = '应用图标库(含历史版本)';