UOTA详情表结构
引用文件
目录
简介
本文件聚焦于UOTA详情表(task_uota_detail)的结构设计与使用规范,围绕以下目标展开:
- 明确UOTA详情表的核心字段及其语义,包括固件版本号、固件URL、MD5校验值、固件大小、发布状态、发布时间等。
- 解释UOTA升级流程中的关键数据字段含义,如升级条件、兼容性检查、升级包验证机制。
- 给出字段约束说明,包括 唯一性约束、非空约束、格式验证等。
- 说明UOTA详情表与任务/规则引擎等模块的关联关系与数据一致性保障机制。
- 提供典型数据示例与升级流程中的数据变化说明。
项目结构
与UOTA详情表直接相关的后端模块位于任务模块(task module),主要由以下层次构成:
- 控制层:对外暴露REST API,负责参数接收与响应封装。
- 服务层:实现业务逻辑,包括创建、更新、查询、校验等。
- 数据访问层:MyBatis Mapper,负责持久化操作。
- 数据对象层:DO/VO,映射数据库表结构与前端展示需求。
- 文档与协议:升级流程、TCP协议说明、规则引擎集成等。
图表来源
- UotaDetailController.java
- UotaDetailService.java
- UotaDetailServiceImpl.java
- UotaDetailMapper.java
- UotaDetailDO.java
- UotaDetailSaveReqVO.java
- UotaDetailRespVO.java
- uota.md
- README.md(UOTA TCP协议说明)
章节来源
核心组件
- UotaDetailDO:数据库实体,映射task_uota_detail表,承载升级包元数据与状态。
- UotaDetailController:管理后台接口,提供创建、更新、删除、分页查询等能力。
- UotaDetailService/Impl:业务服务,封装校验、落库、变更记录等逻辑。
- UotaDetailMapper:MyBatis映射,提供基础CRUD与条件查询。
- VO类:UotaDetailSaveReqVO、UotaDetailRespVO,用于接口入参与出参的结构化传输。
章节来源
- UotaDetailDO.java
- UotaDetailController.java
- UotaDetailService.java
- UotaDetailServiceImpl.java
- UotaDetailMapper.java
- UotaDetailSaveReqVO.java
- UotaDetailRespVO.java
架构总览
UOTA详情表作为升级包元数据的权威来源,与以下模块协同工作:
- 规则引擎:用于灰度、地区、渠道等多维条件匹配,决定设备是否可升级。
- 文件管理:通过文件ID关联实际的升级包文件,提供下载地址。
- TCP协议服务:在设备侧发起升级请求,服务端返回升级包信息(URL、MD5、大小等)。
- 任务调度/导出:支持批量导出与异步任务管理。
图表来源
- README.md(UOTA TCP协议说明)
- UotaTcpServerHandler.java
- uota.md
- UotaDetailServiceImpl.java
- UotaDetailMapper.java
- UotaDetailDO.java
详细组件分析
数据模型与字段定义
UotaDetailDO映射task_uota_detail表,核心字段如下(按出现顺序整理):
- id:主键
- name:UOTA名称
- infraFileId:关联文件资源ID(指向文件管理)
- packageName:应用包名
- versionCode:版本号(整数)
- versionName:版本名称(字符串)
- developer:开发者
- describeInfo:描述
- remark:备注
- isAutoStart:是否自动启动(布尔)
- isSystemApp:是否系统应用(布尔)
- installPath:系统应用安装路径(系统应用必填)
- valid:是否有效(布尔,草稿以外生效)
- status:状态(整型,枚举值)
- createTime/updateTime/creator/updater:审计字段
字段约束与校验要点(基于VO与业务实现推断):
- 非空约束:名称、包名、版本号、版本名称等在保存时通常要求非空。
- 唯一性约束:包名+版本号在业务上常用于唯一标识同一升级包;具体索引以数据库为准。
- 格式验证:版本号为整数;系统应用时安装路径必填;布尔字段取值0/1或true/false。
- 审计字段:创建/更新时间与创建者/更新者字段由框架自动维护。
章节来源
升级流程与数据字段含义
升级流程的关键步骤与数据流转:
- 设备发起升级请求,携带当前版本号、平台、MAC等信息。
- 服务端根据平台与当前版本号,筛选出更高版本的UOTA包。
- 对每个候选包执行“规则匹配”与“渠道匹配”双重校验。
- 若命中任一条件,则加入候选集;最终选择最高版本返回。
- 返回给设备的升级包信息包含:下载URL、文件大小、MD5校验值、版本号等。
图表来源
- README.md(UOTA TCP协议说明)
- UotaTcpServerHandler.java
- uota.md
- UotaDetailServiceImpl.java
- UotaDetailMapper.java
升级包验证机制
- URL有效性:通过文件ID关联文件管理,确保下 载地址有效且可访问。
- MD5校验:设备端下载完成后进行MD5校验,确保完整性。
- 大小校验:设备端可对比文件大小,避免下载不完整。
- 时间戳与加密:请求中包含时间戳,防止重放攻击;生产环境使用动态密钥进行加解密。
章节来源
典型数据示例
- UOTA详情记录(示意)
- 名称:示例升级包
- 包名:com.example.app
- 版本号:100
- 版本名称:1.0.0
- 是否系统应用:是
- 安装路径:/system/app/App.apk
- 是否自动启动:是
- 有效状态:有效
- 关联文件ID:123456
- 设备请求升级包(示意)
- 平台:allwinner
- 当前版本号:99
- MAC:AA:BB:CC:DD:EE:FF
- 服务端响应(示意)
- url:http://.../download/xxx.apk
- size:4747480
- md5:c7d614b68b94ef0ca470fb30fc3a79ec
- versionCode:100
章节来源
依赖分析
- 控制层依赖服务层接口,通过权限注解与参数校验保证输入质量。
- 服务层依赖Mapper与规则引擎,完成数据查询与策略匹配。
- Mapper依赖DO与数据库,承担持久化职责。
- DO与VO之间通过服务层转换,避免直接跨层耦合。
图表来源
- UotaDetailController.java
- UotaDetailService.java
- UotaDetailServiceImpl.java
- UotaDetailMapper.java
- UotaDetailDO.java
- UotaDetailSaveReqVO.java
- UotaDetailRespVO.java
性能考虑
- 查询优化:针对“平台+当前版本号”的筛选,建议在数据库层面建立复合索引,减少全表扫描。
- 规则匹配并行:在服务层对候选包的规则匹配与渠道匹配采用并行计算,缩短响应时间。
- 缓存策略:对热点升级包信息可引入Redis缓存,降低数据库压力。
- 大数据导出:列表导出采用异步任务,避免阻塞主线程。
章节来源
故障排查指南
- 升级包未返回
- 检查是否存在更高版本的UOTA包。
- 核对规则引擎与渠道配置是否允许该设备命中。
- 下载失败或校验失败
- 确认文件ID有效且文件可访问。
- 对比响应中的MD5与下载文件的实际MD5。
- 时间戳/加密异常
- 核对请求头中的sdkVersion与密钥配置。
- 检查是否启用了时间戳校验与忽略标志。
章节来源
结论
UOTA详情表(task_uota_detail)是升级包元数据的权威来源,结合规则引擎与文件管理,实现了灵活的升级策略与可靠的下载校验。通过明确的字段约束、严格的升级流程与完善的验证机制,系统能够在多设备、多平台环境下稳定地完成远程升级。
附录
字段约束与校验清单(基于代码与文档推断)
- 非空约束
- 名称、包名、版本号、版本名称在保存时通常要求非空。
- 唯一性约束
- 包名+版本号在业务上常用于唯一标识升级包(具体索引以数据库为准)。
- 格式约束
- 版本号为整数;布尔字段取值0/1或true/false;系统应用时安装路径必填。
- 审计字段
- 创建/更新时间与创建者/更新者由框架自动维护。
章节来源