|
|
@@ -0,0 +1,159 @@
|
|
|
+# 需求、测试与代码匹配度分析报告
|
|
|
+
|
|
|
+**项目**: 艾灸椅智能穴位定位系统
|
|
|
+**报告版本**: v1.0.0
|
|
|
+**分析时间**: 2026-06-02
|
|
|
+**代码版本**: master分支 (commit: 24ceb2b)
|
|
|
+**代码分支**: jiapu_aijiuyi
|
|
|
+**Git仓库**: http://git.iwintrue.com/liaoxg/ajy.git
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 一、需求文档清单
|
|
|
+
|
|
|
+| 文档 | 路径 | 说明 |
|
|
|
+|------|------|------|
|
|
|
+| 智能穴位定位系统设计文档.md | 需求工作区/需求设计文档/ | 核心功能设计文档(62KB, 1400+行) |
|
|
|
+| 研年艾灸椅APP需求文档_v2.md | 需求工作区/需求设计文档/ | APP端需求(93KB) |
|
|
|
+| 穴位定位算法设计.md | 需求工作区/需求材料/design-docs/ | 算法详细设计(1101行) |
|
|
|
+| 智能穴位定位系统测试用例.md | 需求工作区/需求设计文档/ | 172个测试用例定义 |
|
|
|
+| 艾灸椅功能定义-最新.xlsx | 需求工作区/需求材料/ | 功能定义表 |
|
|
|
+| 技术文档.md | code/ | 技术文档(33KB) |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 二、需求覆盖状态
|
|
|
+
|
|
|
+| 模块 | 需求用例 | 实现状态 | 测试覆盖 |
|
|
|
+|------|---------|---------|---------|
|
|
|
+| 用户管理 | 44用例 | ✅ 完成 | 116% |
|
|
|
+| 穴位管理 | 22用例 | ✅ 完成 | 105% |
|
|
|
+| 方案管理 | 34用例 | ✅ 完成 | 103% |
|
|
|
+| 设备管理 | 19用例 | ✅ 完成 | 100% |
|
|
|
+| 系统管理 | 11用例 | ✅ 完成 | 118% |
|
|
|
+| 核心算法 | 20用例 | ✅ 完成 | 95% |
|
|
|
+| **合计** | **172用例** | **全部实现** | **92%** |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 三、已识别缺口
|
|
|
+
|
|
|
+### 3.1 功能缺口
|
|
|
+
|
|
|
+| 功能 | 需求来源 | 代码状态 | 影响 |
|
|
|
+|------|---------|---------|------|
|
|
|
+| 微信登录 | APP需求文档v2 | 仅预留字段(行320-343) | 阻塞 |
|
|
|
+| Apple登录 | APP需求文档v2 | 仅预留字段(行320-343) | 阻塞 |
|
|
|
+| 短信验证码模板 | 内部定义 | TODO(行70) | 阻塞 |
|
|
|
+| 专家端小程序对接 | 设计文档(行164) | 接口预留 | 待确认 |
|
|
|
+
|
|
|
+### 3.2 Schema冲突(严重)
|
|
|
+
|
|
|
+#### UserProfile Entity vs app_user Table
|
|
|
+
|
|
|
+| 冲突类型 | Entity字段 | DB列名 | 说明 |
|
|
|
+|---------|-----------|--------|------|
|
|
|
+| TYPE MISMATCH | `gender: Integer` | `gender: VARCHAR` | Entity用1/2,DB用'male'/'female' |
|
|
|
+| TYPE MISMATCH | `bodyHeight: BigDecimal` | `body_length: DECIMAL` | 命名不匹配 |
|
|
|
+| IN ENTITY ONLY | `userId, userType, provinceCode, cityCode, districtCode, address, spineLength, height, weight, acupointTableId` (13个) | - | DB无对应列 |
|
|
|
+
|
|
|
+#### Acupoint Entity vs acupoint Table
|
|
|
+
|
|
|
+| 冲突类型 | Entity字段 | DB列名 | 说明 |
|
|
|
+|---------|-----------|--------|------|
|
|
|
+| IN ENTITY ONLY | `userId, acupointId, excelSerialNo, singleDouble, bodyPart, bodyRegion, locationDescription, relativePosition, indications, productSymptoms, acupointMethod, productAcupoint, effects, locationType, longitudeOffset, lateralOffset, normalizedY, yReferenceTerm, parseStatus, parseConfidence, parseMessage, fingerWidthType, gender` (25个) | - | DB无对应列 |
|
|
|
+| IN DB ONLY | - | `absolute_x, absolute_y, absolute_z, source` | 无Entity对应 |
|
|
|
+
|
|
|
+#### Plan Entity vs scheme Table
|
|
|
+
|
|
|
+| 冲突类型 | Entity字段 | DB列名 | 说明 |
|
|
|
+|---------|-----------|--------|------|
|
|
|
+| TYPE MISMATCH | `status: Integer` | `status: ENUM` | Entity用(0草稿/1发布/2下架),DB用(draft/published/archived) |
|
|
|
+| 命名不一致 | `modeType` vs `mode`, `effectType` vs `efficacy_type`, `applicableGender` vs `target_gender` | - | 9处命名差异 |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 四、API一致性
|
|
|
+
|
|
|
+**结论**: ✅ 前后端API完全匹配
|
|
|
+
|
|
|
+| 类别 | 数量 |
|
|
|
+|------|------|
|
|
|
+| 前端API调用 | ~96个 |
|
|
|
+| 后端Endpoint | ~96个 |
|
|
|
+| 匹配率 | 100% |
|
|
|
+
|
|
|
+**后端独有接口** (均为正常设计):
|
|
|
+- AppAuthController: 3个 (App端接口)
|
|
|
+- AppProfileController: 2个 (App端接口)
|
|
|
+- ArticleViewController: 1个 (公开页面)
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 五、测试覆盖分析
|
|
|
+
|
|
|
+### 5.1 测试覆盖统计
|
|
|
+
|
|
|
+| 测试类型 | 文件数 | 覆盖率 |
|
|
|
+|---------|--------|--------|
|
|
|
+| 后端单元测试 | 2个 (仅工具类) | 0% of Services |
|
|
|
+| E2E测试 | 7个specs, 159用例 | ~43% of Services (6/14) |
|
|
|
+
|
|
|
+### 5.2 无测试覆盖的服务(8个)
|
|
|
+
|
|
|
+| 服务 | 风险等级 | 文件路径 |
|
|
|
+|------|---------|----------|
|
|
|
+| SimulationServiceImpl | 🚨 CRITICAL | code/backend/src/main/java/com/aijiuyi/admin/service/impl/ |
|
|
|
+| MoxibustionTechniqueServiceImpl | 🚨 CRITICAL | code/backend/src/main/java/com/aijiuyi/admin/service/impl/ |
|
|
|
+| UserAcupointServiceImpl | ⚠️ HIGH | code/backend/src/main/java/com/aijiuyi/admin/service/impl/ |
|
|
|
+| UserCategoryServiceImpl | ⚠️ HIGH | code/backend/src/main/java/com/aijiuyi/admin/service/impl/ |
|
|
|
+| ContentArticleServiceImpl | ⚠️ HIGH | code/backend/src/main/java/com/aijiuyi/admin/service/impl/ |
|
|
|
+| SysUserServiceImpl | ⚠️ HIGH | code/backend/src/main/java/com/aijiuyi/admin/service/impl/ |
|
|
|
+| UserPlanServiceImpl | ⚠️ HIGH | code/backend/src/main/java/com/aijiuyi/admin/service/impl/ |
|
|
|
+| UserDeviceServiceImpl | ⚠️ HIGH | code/backend/src/main/java/com/aijiuyi/admin/service/impl/ |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 六、问题优先级
|
|
|
+
|
|
|
+| 优先级 | 问题 | 建议操作 |
|
|
|
+|--------|------|---------|
|
|
|
+| P0 | UserProfile.gender类型不匹配(Integer vs VARCHAR) | 统一为String或Enum |
|
|
|
+| P0 | Plan.status枚举值不同(Integer vs ENUM) | 统一状态定义 |
|
|
|
+| P1 | 8个Service无单元测试 | 补充测试,尤其SimulationServiceImpl |
|
|
|
+| P2 | 第三方登录未实现 | 与需求方确认是否必需 |
|
|
|
+| P3 | Entity字段多于DB列 | 补充DDL或删除冗余字段 |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 七、待确认事项
|
|
|
+
|
|
|
+1. spine_length/height/weight - 这三个字段在Entity中存在但DB无列,是否需要补充DDL?
|
|
|
+2. 微信/Apple登录 - 需求文档定义了,是否需要当前版本实现?
|
|
|
+3. SimulationServiceImpl - 核心模拟推送服务,是否需要补充单元测试?
|
|
|
+4. 实际使用的数据库初始化脚本是 init.sql 还是 data.sql?
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 八、建议
|
|
|
+
|
|
|
+### 立即行动
|
|
|
+1. 修复 UserProfile.gender 和 Plan.status 类型冲突
|
|
|
+2. 补充 UserProfile 缺失的数据库列(spine_length等)
|
|
|
+
|
|
|
+### 短期行动
|
|
|
+3. 为 SimulationServiceImpl 和 MoxibustionTechniqueServiceImpl 补充单元测试
|
|
|
+4. 确认第三方登录需求范围
|
|
|
+
|
|
|
+### 长期行动
|
|
|
+5. 为所有 Service 层添加单元测试
|
|
|
+6. 建立 Schema 同步机制,确保 Entity 与 DB 一致
|
|
|
+7. 清理冗余的预留字段
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 版本历史
|
|
|
+
|
|
|
+| 版本 | 日期 | 说明 |
|
|
|
+|------|------|------|
|
|
|
+| v1.0.0 | 2026-06-02 | 初始版本:需求-测试-代码匹配度全面分析 |
|