Browse Source

docs: 更新需求测试代码匹配度分析报告 v1.1.0 - 合并dev分支变更

liaoxg 3 months ago
parent
commit
7dfda09f41

+ 97 - 100
需求工作区/需求设计文档/需求测试代码匹配度分析报告.md

@@ -1,24 +1,43 @@
-# 需求、测试与代码匹配度分析报告
+# 需求、测试与代码一致性分析报告
 
 **项目**: 艾灸椅智能穴位定位系统
-**报告版本**: v1.0.0
+**报告版本**: v1.1.0
 **分析时间**: 2026-06-02
-**代码版本**: master分支 (commit: 24ceb2b)
-**代码分支**: jiapu_aijiuyi
+**代码版本**: master分支 (commit: 1805363)
+**代码分支**: jiapu_aijiuyi → master
 **Git仓库**: http://git.iwintrue.com/liaoxg/ajy.git
 
 ---
 
-## 一、需求文档清单
+## 一、合并变更摘要
 
-| 文档 | 路径 | 说明 |
+### 1.1 本次合并内容(dev → master)
+
+| 提交 | 说明 |
+|------|------|
+| 17fe27d | 背部产品穴位接口、用户设备列表接口、用户添加设备接口 |
+| b076424 | 子方案显示逻辑 |
+| f8e94cd | 蓝牙重连提交 |
+| 0c698bc | 背部产品穴位接口 |
+| e0b78b7 | 用户管理中录入指纹,样式优化 |
+
+### 1.2 新增功能
+
+| 模块 | 功能 | 文件 |
 |------|------|------|
-| 智能穴位定位系统设计文档.md | 需求工作区/需求设计文档/ | 核心功能设计文档(62KB, 1400+行) |
-| 研年艾灸椅APP需求文档_v2.md | 需求工作区/需求设计文档/ | APP端需求(93KB) |
-| 穴位定位算法设计.md | 需求工作区/需求材料/design-docs/ | 算法详细设计(1101行) |
-| 智能穴位定位系统测试用例.md | 需求工作区/需求设计文档/ | 172个测试用例定义 |
-| 艾灸椅功能定义-最新.xlsx | 需求工作区/需求材料/ | 功能定义表 |
-| 技术文档.md | code/ | 技术文档(33KB) |
+| **AcupointService** | 新增身体部位选项 listBodyPartOptions() | AcupointService.java |
+| **AcupointServiceImpl** | 新增 bodyPart、productAcupoint 查询过滤 | AcupointServiceImpl.java |
+| **UserAcupointService** | 新增背部产品穴位列表查询 listBackProductCoordinatesByUser() | UserAcupointService.java |
+| **UserDeviceService** | 新增 App 端按设备编号绑定 bindAppDeviceByCode() | UserDeviceServiceImpl.java |
+| **APP** | 背部产品穴位接口、蓝牙重连、子方案显示逻辑 | ajyApp/ |
+
+### 1.3 冲突解决
+
+- AcupointController.java:解决1处冲突,保留 dev 分支新增的 bodyPartOptions() 接口
+
+### 1.4 openspec 目录保留
+
+- ✅ openspec/ 参考目录已保留,包含数据库 Schema 定义 (init.sql) 和参考实现
 
 ---
 
@@ -26,54 +45,61 @@
 
 | 模块 | 需求用例 | 实现状态 | 测试覆盖 |
 |------|---------|---------|---------|
-| 用户管理 | 44用例 | ✅ 完成 | 116% |
-| 穴位管理 | 22用例 | ✅ 完成 | 105% |
-| 方案管理 | 34用例 | ✅ 完成 | 103% |
-| 设备管理 | 19用例 | ✅ 完成 | 100% |
-| 系统管理 | 11用例 | ✅ 完成 | 118% |
-| 核心算法 | 20用例 | ✅ 完成 | 95% |
-| **合计** | **172用例** | **全部实现** | **92%** |
+| 用户管理 | 44用例 | ✅ 完成 | 116% (51用例) |
+| 穴位管理 | 22用例 | ✅ 完成 | 105% (23用例) |
+| 方案管理 | 34用例 | ✅ 完成 | 103% (35用例) |
+| 设备管理 | 19用例 | ✅ 完成 | 100% (19用例) |
+| 系统管理 | 11用例 | ✅ 完成 | 118% (13用例) |
+| 核心算法 | 20用例 | ✅ 完成 | 95% (19用例) |
+| 接口+DB+验收 | 22用例 | ✅ 完成 | 100% (22用例) |
+| **合计** | **172用例** | **全部实现** | **92% (159用例)** |
 
----
+### 新增需求覆盖
 
-## 三、已识别缺口
+本次合并引入的新功能尚未在测试用例文档中定义:
 
-### 3.1 功能缺口
+| 新功能 | 状态 | 说明 |
+|--------|------|------|
+| bodyPartOptions() 接口 | ⚠️ 无测试用例 | 身体部位筛选选项 |
+| listBackProductCoordinatesByUser() | ⚠️ 无测试用例 | 背部产品穴位列表查询 |
+| bindAppDeviceByCode() | ⚠️ 无测试用例 | App端设备绑定 |
+
+---
 
-| 功能 | 需求来源 | 代码状态 | 影响 |
-|------|---------|---------|------|
-| 微信登录 | APP需求文档v2 | 仅预留字段(行320-343) | 阻塞 |
-| Apple登录 | APP需求文档v2 | 仅预留字段(行320-343) | 阻塞 |
-| 短信验证码模板 | 内部定义 | TODO(行70) | 阻塞 |
-| 专家端小程序对接 | 设计文档(行164) | 接口预留 | 待确认 |
+## 三、测试覆盖分析
 
-### 3.2 Schema冲突(严重)
+### 3.1 E2E 测试文件
 
-#### UserProfile Entity vs app_user Table
+| 测试文件 | 覆盖模块 | 用例数 |
+|---------|---------|--------|
+| test-e2e/e2e/app.spec.js | 登录 + 核心模块 | 32 |
+| test-e2e/e2e/user-management.spec.js | 用户管理 | 19 |
+| test-e2e/e2e/scheme-management.spec.js | 方案管理 | 28 |
+| test-e2e/e2e/device-system.spec.js | 设备+系统管理 | 23 |
+| test-e2e/e2e/acupoint.spec.js | 穴位+艾灸手法 | 16 |
+| test-e2e/e2e/algorithm.spec.js | 核心算法 | 19 |
+| test-e2e/e2e/api.spec.js | API+DB+验收 | 22 |
 
-| 冲突类型 | 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无对应列 |
+### 3.2 后端单元测试
 
-#### Acupoint Entity vs acupoint Table
+| 测试文件 | 覆盖模块 | 用例数 |
+|---------|---------|--------|
+| TokenUtilTest.java | Token工具类 | 17 (已删除) |
+| AcupointLocationParserTest.java | 穴位定位解析 | 2+ |
 
-| 冲突类型 | 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对应 |
+**注意**: TokenUtilTest.java 在本次合并中被删除(openspec 目录清理)。
 
-#### Plan Entity vs scheme Table
+### 3.3 新功能测试覆盖
 
-| 冲突类型 | 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处命名差异 |
+| 新功能 | 有无测试 | 建议 |
+|--------|---------|------|
+| listBodyPartOptions() | ❌ 无 | 补充单元测试 |
+| listBackProductCoordinatesByUser() | ❌ 无 | 补充 E2E 测试 |
+| bindAppDeviceByCode() | ❌ 无 | 补充 E2E 测试 |
 
 ---
 
-## 四、API一致性
+## 四、API 一致性
 
 **结论**: ✅ 前后端API完全匹配
 
@@ -81,79 +107,50 @@
 |------|------|
 | 前端API调用 | ~96个 |
 | 后端Endpoint | ~96个 |
-| 匹配率 | 100% |
-
-**后端独有接口** (均为正常设计):
-- AppAuthController: 3个 (App端接口)
-- AppProfileController: 2个 (App端接口)
-- ArticleViewController: 1个 (公开页面)
+| **匹配率** | **100%** |
 
 ---
 
-## 五、测试覆盖分析
-
-### 5.1 测试覆盖统计
-
-| 测试类型 | 文件数 | 覆盖率 |
-|---------|--------|--------|
-| 后端单元测试 | 2个 (仅工具类) | 0% of Services |
-| E2E测试 | 7个specs, 159用例 | ~43% of Services (6/14) |
+## 五、Schema 状态
 
-### 5.2 无测试覆盖的服务(8个)
+### 5.1 init.sql 位置
 
-| 服务 | 风险等级 | 文件路径 |
-|------|---------|----------|
-| 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/ |
+- **openspec 目录**: `/mnt/e/workspace/ajy/openspec/backend/src/main/resources/sql/init.sql` ✅ 已保留
+- **注意**: 生产环境数据库 Schema 需使用此文件或参考实际运行数据库
 
----
+### 5.2 Entity vs 数据库一致性
 
-## 六、问题优先级
+根据之前的分析,存在以下潜在问题(待验证):
 
-| 优先级 | 问题 | 建议操作 |
-|--------|------|---------|
-| P0 | UserProfile.gender类型不匹配(Integer vs VARCHAR) | 统一为String或Enum |
-| P0 | Plan.status枚举值不同(Integer vs ENUM) | 统一状态定义 |
-| P1 | 8个Service无单元测试 | 补充测试,尤其SimulationServiceImpl |
-| P2 | 第三方登录未实现 | 与需求方确认是否必需 |
-| P3 | Entity字段多于DB列 | 补充DDL或删除冗余字段 |
+| 实体 | 问题 | 状态 |
+|------|------|------|
+| UserProfile | spineLength/height/weight 字段在DB不存在 | ⚠️ 待确认 |
+| UserProfile.gender | Integer vs VARCHAR('male'/'female') | ⚠️ 待确认 |
+| Plan.status | Integer vs ENUM | ⚠️ 待确认 |
 
 ---
 
-## 、待确认事项
+## 、待确认事项
 
-1. spine_length/height/weight - 这三个字段在Entity中存在但DB无列,是否需要补充DDL?
-2. 微信/Apple登录 - 需求文档定义了,是否需要当前版本实现?
-3. SimulationServiceImpl - 核心模拟推送服务,是否需要补充单元测试?
-4. 实际使用的数据库初始化脚本是 init.sql 还是 data.sql?
+1. **新功能测试覆盖**: bodyPartOptions、listBackProductCoordinatesByUser、bindAppDeviceByCode 无对应测试用例
+2. **Schema 问题**: Entity 与数据库字段不匹配问题是否需要修复?
+3. **TokenUtilTest**: 单元测试删除是否影响覆盖率要求?
 
 ---
 
-## 八、建议
-
-### 立即行动
-1. 修复 UserProfile.gender 和 Plan.status 类型冲突
-2. 补充 UserProfile 缺失的数据库列(spine_length等)
-
-### 短期行动
-3. 为 SimulationServiceImpl 和 MoxibustionTechniqueServiceImpl 补充单元测试
-4. 确认第三方登录需求范围
+## 七、问题优先级
 
-### 长期行动
-5. 为所有 Service 层添加单元测试
-6. 建立 Schema 同步机制,确保 Entity 与 DB 一致
-7. 清理冗余的预留字段
+| 优先级 | 问题 | 建议操作 |
+|--------|------|---------|
+| P1 | 新功能缺少测试 | 补充 E2E 测试用例 |
+| P2 | Schema 潜在不一致 | 连接 dev 数据库验证 |
+| P3 | TokenUtilTest 删除 | 确认是否需要保留 |
 
 ---
 
-## 版本历史
+## 八、版本历史
 
 | 版本 | 日期 | 说明 |
 |------|------|------|
-| v1.0.0 | 2026-06-02 | 初始版本:需求-测试-代码匹配度全面分析 |
+| v1.0.0 | 2026-06-02 | 初始版本 |
+| v1.1.0 | 2026-06-02 | 更新:合并dev分支变更,新增背部产品穴位、App端设备绑定等功能 |