# 代码质量审计报告

审计时间：2026-04-28
审计范围：server/、miniprogram/、admin-console/ 全部源码 + 设计文档合规性

## 审计结果总览

### 代码质量（修复前 -> 修复后）

| 模块 | 修复前 CRITICAL | 修复后 CRITICAL | 修复的问题数 |
|------|----------------|----------------|-------------|
| Server 后端 | 4 | 0 | 13 |
| 小程序 | 7 | 0 | 14 |
| Admin 管理后台 | 5 | 0 | 16 |
| 文档一致性 | 6 | 3 (已知差距) | 3 |

42 个文件修改，+495 / -1216 行（净减少 721 行），经两轮独立审查验证通过。

### 文档合规校验

| 校验维度 | 符合 | 部分符合 | 未实现 |
|----------|------|----------|--------|
| BLE 通信协议 | 4/10 | 2/10 | 2/10 |
| API 接口 | 9/17 | 6/17 | 2/17 |
| 数据库表结构 | 0/8 | 6/8 | 2/8 |
| 安全与鉴权 | 4/15 | 4/15 | 7/15 |
| 小程序业务流程 | 3/9 | 6/9 | 0/9 |
| 管理后台功能 | 5/9 | 4/9 | 0/9 |

---

## 已修复的问题

### Server（13 项）

1. JWT 密钥生产环境强制校验（不允许默认值）
2. 订阅 verify 改为 admin-only（堵免费订阅漏洞）
3. 设备命令结果上报增加设备归属校验
4. 设备事件上报增加设备归属校验
5. 护理记录同步增加设备归属校验
6. 移除 admin token 从请求 body 读取
7. 管理员设置接口增加 key 白名单
8. 管理员创建订阅增加用户存在性校验
9. COS getObjectUrl 改为 callback-based Promise
10. 固件检查增加版本比较逻辑
11. 绑定返回真实订阅状态（替代硬编码 trial）
12. 分页参数增加边界保护（pageSize 上限 100）
13. 提取公共工具函数（limitClause, toMysqlDate, formatDate）

### 小程序（14 项）

1. 扫描 PD 假数据替换为占位符
2. 护理完成标记为 client_timer 来源
3. mock.js 禁用
4. auto-scan 增加 onUnload 清理 BLE 监听器
5. wear-check 增加 onUnload 清理 BLE 监听器
6. ble-connect 增加 onUnload 清理 BLE 监听器
7. index 页 ble.off 传入具体回调（不再清除所有监听器）
8. subscription status 类型统一为数字
9. BLE 扫描回调累积修复（offBluetoothDeviceFound）
10. 历史统计数据跨页累加
11. subscribe-success 从参数读取实际套餐信息
12. treatment-done 从参数读取实际护理模式
13. BLE 断连检测（onBLEConnectionStateChange）
14. 购买流程替换为联系管理员弹窗

### Admin 管理后台（16 项）

1. AdminLayout 退出功能修复（require->import, logout->clearToken）
2. 删除全部 mock 数据和 getMockData 函数
3. Dashboard 假数据替换为真实 API 调用
4. Dashboard monthly_revenue 替换为 subscription_count
5. 订阅统计 || 改为 ?? 修复 0 值显示
6. Token 增加 7 天过期校验
7. 设备状态码统一（"库存"改为"未激活"）
8. 用户页"记录"链接指向正确页面
9. 订阅 createForm.user_id 类型修复
10. 所有 catch 块增加错误提示 Toast
11. 订阅状态文本统一
12. 删除无效的"记住登录状态"复选框
13. 提取公共 CSS 到 common.css（减少 900+ 行重复）
14. 提取 formatDate 到 utils/format.js
15. AdminLayout 显示真实管理员名称
16. 移除未使用的 uview-plus 依赖

---

## 剩余差距

详见 `docs/planning/12-待办事项决策分类.md`，分为：
- 需要硬件团队确认的 6 项（BLE 协议细节）
- 需要产品团队确认的 6 项（功能范围）
- 需要运维确认的 5 项（部署配置）
- 可独立完成的 P0 共 6 项、P1 共 8 项、P2 共 6 项
