Sisyphus Agent 31df3c1ba4 docs: 完整E2E测试报告2026-07-01 + ISSUE-003修复验证 + ISSUE-004/005/006录入 + 测试用例矩阵更新 3 месяцев назад
..
.gitkeep 506a014104 docs: 添加测试追踪系统 + 多角色E2E测试报告 (2026-06-29) 3 месяцев назад
ISSUE-001-vendor-shelve.md 506a014104 docs: 添加测试追踪系统 + 多角色E2E测试报告 (2026-06-29) 3 месяцев назад
ISSUE-002-article-publish.md 506a014104 docs: 添加测试追踪系统 + 多角色E2E测试报告 (2026-06-29) 3 месяцев назад
ISSUE-003-admin-create-user.md 21497bf1dc docs: 更新测试追踪报告 + ISSUE-003根因确认 (2026-06-30) 3 месяцев назад
README.md 31df3c1ba4 docs: 完整E2E测试报告2026-07-01 + ISSUE-003修复验证 + ISSUE-004/005/006录入 + 测试用例矩阵更新 3 месяцев назад

README.md

测试问题追踪 — 2026-07-01(第三轮完整测试)

测试环境: http://cfc.iwintrue.com:80 测试脚本: e2e_complete_test.py 测试commit: 2a1ac7d (cfclub branch) 测试时间: 2026-07-01 09:00 UTC+8 测试账号: admin (13800138000, adminId=7), vendor (13800138001, userId=81069), parent (userId=8)


问题总览

# 问题ID 模块 严重度 状态 发现日期 根因确认日期 解决日期 验证日期
1 ISSUE-001 商品上下架 中 ⏳ 待验证 2026-06-29 2026-06-30 2026-06-30 —
2 ISSUE-002 文章发布 高 ✅ 已验证 2026-06-29 2026-06-29 2026-06-29 2026-07-01
3 ISSUE-003 创建用户 中 ✅ 已验证 2026-06-29 2026-06-30 2026-06-30 2026-07-01
4 ISSUE-004 打卡统计400错误 低 🔍 待分析 2026-07-01 — — —
5 ISSUE-005 财商打卡500错误 中 🔍 待分析 2026-07-01 — — —
6 ISSUE-006 能量总览400错误 低 🔍 待分析 2026-07-01 — — —

ISSUE-001:供应商端商品上下架失败

严重度: 中 状态: ⏳ 待验证(供应商 81069 仍为 pending 状态,无法完成完整流程测试) 发现日期: 2026-06-29 解决日期: 2026-06-30(代码已修复) 验证日期: 2026-07-01 模块: 商品管理 / 供应商权限 测试用例: VENDOR-PRODUCT-SHELVE

问题描述

管理员对商品执行「上架」操作成功后,供应商侧再次对同一商品执行「上架」操作失败。

错误信息

[VENDOR-PRODUCT-SHELVE] FAIL code=200 resp={'code': 500, 'message': '商品未通过审核,无法上下架', 'data': None}

复现步骤

  1. 供应商(userId=81069)创建商品 → POST /api/product/create → 状态=pending
  2. 管理员审核通过 → POST /api/admin/product/review (action=approve) → 状态=approved
  3. 管理员上架商品 → POST /api/admin/product/shelve (shelve=true) → 状态=on_shelf
  4. 供应商上架商品 → POST /api/product/shelve (productId=7, action=shelve) → 失败

根因分析

文件: cfc-backend/src/main/java/com/etotem/cfc/service/ProductService.java

// 修复前:统一检查 status=="approved"
if (!"approved".equals(product.getStatus())) {          // ← BUG
    return Result.error("商品未通过审核,无法上下架");
}

供应商调用 shelve 时,商品状态已为 on_shelf(管理员已上架),而非 approved。 原代码仅允许状态为 approved 时操作,但管理员上架后状态变为 on_shelf,导致供应商无法再次上下架。

修复方案

按动作区分状态检查:

  • 上架(action=shelve):允许 approved(待上架)或 off_shelf(已下架)→ 变为 on_shelf
  • 下架(action=unshelve):允许 on_shelf(已上架)→ 变为 off_shelf

    if ("shelve".equals(action)) {
    if (!"approved".equals(product.getStatus()) && !"off_shelf".equals(product.getStatus())) {
        return Result.error("商品未通过审核,无法上架");
    }
    product.setStatus("on_shelf");
    } else if ("unshelve".equals(action)) {
    if (!"on_shelf".equals(product.getStatus())) {
        return Result.error("商品未上架,无法下架");
    }
    product.setStatus("off_shelf");
    }
    

影响范围

  • 供应商无法自主管理商品上下架状态
  • 管理员上架后,供应商只能等待管理员下架才能操作

ISSUE-002:文章创建后发布失败

严重度: 高 状态: ✅ 已验证(2026-07-01回归测试通过) 发现日期: 2026-06-29 解决日期: 2026-06-29 验证日期: 2026-07-01 模块: 文章管理 测试用例: ARTICLE-ADMIN-001 → ARTICLE-ADMIN-002

问题描述

文章创建成功后,获取到的 articleId 为字符串 "创建成功" 而非数字 ID,导致发布时类型转换失败。

错误信息

[ADMIN-ARTICLE-CREATE] OK articleId=创建成功       // ← articleId 应该是数字
[ADMIN-ARTICLE-PUBLISH] FAIL code=200 resp={'code': 400, 'message': 'For input string: "创建成功"', 'data': None}

复现步骤

  1. 管理员登录 → POST /api/admin-auth/login
  2. 创建文章 → POST /api/admin/articles/create → 返回 {"code":200,"message":"success","data":"创建成功"}
  3. 发布文章 → POST /api/admin/articles/publish → 失败(尝试将 "创建成功" 解析为 Long)

根因分析

分析:根据代码 AdminArticleController.create() 应返回 {"id": <articleId>},但实际返回了字符串。

可能原因:

  1. 远程代码版本差异:本地代码可能与部署的远程代码不一致(AdminArticleController 最近有49行修改)
  2. articleService.create() 抛出异常被全局捕获:返回了非标准错误响应
  3. 拦截器/过滤器修改了响应体

影响范围

  • 文章发布流程完全不可用
  • 管理员无法通过 API 发布文章

修复建议

  1. 确认远程 AdminArticleController.java 的 create 方法返回逻辑
  2. 检查是否有全局异常处理器修改了响应格式
  3. 确保 articleService.create() 正确设置 article.id 后再返回

远程代码变更(本地 HEAD vs origin/cfclub)

- AdminArticleController.java: 49 行修改
- AdminController.java: 14 行修改
- ProductController.java: 10 行修改
- VendorController.java: 8 行修改

ISSUE-003:管理员创建用户500错误

严重度: 中 状态: ✅ 已验证(2026-07-01回归测试通过) 发现日期: 2026-06-29 解决日期: 2026-06-30 验证日期: 2026-07-01 模块: 用户管理 测试用例: USER-ADMIN-001

问题描述

管理员通过 POST /api/admin/users/create 创建新用户(phone=13800138002)时返回 HTTP 500。

错误信息

[ADMIN-CREATE-PARENT] FAIL code=500 resp={'timestamp': '2026-06-29T06:40:45.577+00:00', 'error': 'Internal Server Error', 'path': '/api/admin/users/create'}

复现步骤

  1. 管理员登录 → POST /api/admin-auth/login
  2. 创建用户 → POST /api/admin/users/create (phone=13800138002, role=parent, nickname="E2E测试家长")
  3. 失败:返回 Spring Boot 默认 500 错误页面(非业务 Result.error)

根因分析

根因确认:users 表 DDL 中 openid VARCHAR(64) NOT NULL 和 family_id BIGINT NOT NULL 两个字段不可为空,但 AdminController.createUser() 未设置这两个字段的值,导致 MyBatis-Plus 插入时写入 NULL 触发 MySQL 字段约束异常,Spring Boot 返回默认 500 错误页面。

文件: cfc-backend/src/main/java/com/etotem/cfc/controller/admin/AdminController.java

// 修复前:未设置 openid 和 family_id
User user = new User();
user.setPhone(phone);
// ... 缺少 openid 和 family_id 默认值
userMapper.insert(user);  // → MySQL 报错: Field 'openid'/'family_id' has no default value

修复方案

在创建用户时补充 NOT NULL 字段的默认值:

user.setOpenid("");   // 非微信用户,默认空值
user.setFamilyId(0L); // 尚未加入家庭,默认 0

影响范围

  • 管理员无法通过管理后台创建新用户
  • 影响自动化测试中的用户创建流程

回归验证(2026-07-01)

[USER-ADMIN-001] OK userId=81178

测试通过:创建用户成功返回 userId。修复已部署并验证有效。


ISSUE-004:打卡统计端点400错误

严重度: 低 状态: 🔍 待分析 发现日期: 2026-07-01 模块: 打卡统计 测试用例: HEALTH-003, FINANCE-003

问题描述

健康打卡和财商打卡的 stats 端点返回 400 Bad Request:

  • POST /api/health/checkin/stats → 400
  • POST /api/wealth/checkin/stats → 400

测试日志

[HEALTH-003] FAIL resp={'status': 400, 'error': 'Bad Request', 'path': '/api/health/checkin/stats'}
[FINANCE-003] FAIL resp={'status': 400, 'error': 'Bad Request', 'path': '/api/wealth/checkin/stats'}

初步分析

端点存在(非404),但请求被Spring拒绝。可能是:

  1. 缺少必需的请求头或参数
  2. @RequestBody 解析问题
  3. 端点需要非空body或特定Content-Type

影响范围

  • 打卡统计功能在前端不可用
  • 用户无法查看打卡汇总数据

ISSUE-005:财商打卡创建500错误

严重度: 中 状态: 🔍 待分析 发现日期: 2026-07-01 模块: 财商打卡 测试用例: FINANCE-001

问题描述

POST /api/wealth/checkin/create 返回 500 Internal Server Error。

测试日志

[FINANCE-001] FAIL resp={'status': 500, 'error': 'Internal Server Error', 'path': '/api/wealth/checkin/create'}

初步分析

测试body包含 childId, checkinDate, amount, note 字段,但 FinanceCheckin 实体可能含有其他 NOT NULL 字段未被设置。

影响范围

  • 用户无法创建财商打卡记录
  • 财富维度打卡功能不可用

ISSUE-006:能量总览端点400错误

严重度: 低 状态: 🔍 待分析 发现日期: 2026-07-01 模块: 能量系统 测试用例: ENERGY-001

问题描述

POST /api/energy/overview 返回 400 Bad Request。

测试日志

[ENERGY-001] FAIL resp={'status': 400, 'error': 'Bad Request', 'path': '/api/energy/overview'}

初步分析

端点存在但请求被拒绝。可能原因是 @RequestBody 需要特定格式或参数。

影响范围

  • 用户无法查看五维能量总览

更新记录

日期 操作人 内容
2026-06-29 Sisyphus 创建问题追踪文档,录入 ISSUE-001/002/003
2026-06-30 Sisyphus ✅ 修复 ISSUE-001:ProductService.shelve() 状态检查按动作区分(上架允许 approved/off_shelf,下架允许 on_shelf)
2026-06-30 Sisyphus ✅ 修复 ISSUE-003:AdminController.createUser() 补充 openid="" / familyId=0L 默认值
2026-06-30 Sisyphus 后端 jar 重新部署到 251(commit d7a1c29)
2026-07-01 Sisyphus 第三轮完整测试:✅ 验证 ISSUE-002/003 修复有效;录入 ISSUE-004/005/006 新问题;ISSUE-001 → ⏳ 待验证(供应商pending)