Files
msh-system/docs/Testing/test-0415-fix-plan.md
msh-agent 276366f98e docs(test-0415): 更新 fix-plan 状态:P0 8 项全部完成
- 顶部新增 commit 清单表
- 每项补 root cause / 修复要点 / 验收 checklist
- 当前阻塞项明确归属

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-03 02:44:13 +08:00

11 KiB
Raw Blame History

test-0415 反馈问题 — 修复方案与执行计划

源:docs/Testing/test-0415.md 维护:本文档为执行表,每修一项更新【状态】与【验收】列。 工作量符号S ≤ 1dM = 23dL = 1 周XL = 1 周以上(涉及功能开发/产品对齐)。 最近更新2026-05-03 P0 全部完成

0. 优先级排序与分阶段

阶段 目标 包含项 状态
P0 当前迭代 已交付功能的 BUG 修复,影响主链路 4-1, 4-2, 4-3, 5-1, 6-1, 6-2, 6-3, 3-1 8/8 已修复,待 QA 现场回归
P0+ 信息不足 反馈描述不清,需测试同学补充信息 4-3b 🟡 阻塞
P1 下一迭代 性能/体验优化,需要后端/Prompt 调优 3-2, 3-3, 3-4, 2-1, 2-2 待启动
P2 待立项 整块新功能,需产品/排期对齐 1-1打卡任务/福利/邀请), 5-2一键借鉴 🔴 待 PRD

0.1 已交付 commit 清单fix/test-feedback-0403 分支)

Commit 摘要
4-1 食物图片归一化 e9c2404 ToolFoodServiceImpl.normalizeImageForOutput 处理 3 类历史脏数据
4-2 按分类配置兜底默认图 6187a92 8 类 emoji+背景色映射,零新增图片资源
4-3 列表闪烁 c089e8c 空数组初始化 + foodLoaded 骨架占位
3-1 AI 营养师语音录入 82735a5 跳过 OSS 上传mp3 被图片接口拒绝),改用 base64 一句话识别
5-1 社区关注状态不持久 5c0beec getDetailisFollowed 字段,未登录默认 false
6-1 购物车不可进入 33602ea switchTabnavigatecart 未注册为 tabBar 页)
6-2 联系客服失效 f36f8ff 小程序也存 chatUrl;空值兜底 toastchatConfig 缺省值
6-3 下单流程 2c91cfe 提交订单与拉起支付分离,跳转支付页支持二次支付

一、打卡模块

1-1 任务/福利/邀请功能未开发 — XLP2

  • 现状pages/tool/checkin.vue 仅有发布打卡。
  • 方案:拆 3 个子需求立项,每个独立设计文档:
    • 打卡任务:每日/每周任务 + 完成进度 + 奖励发放(积分或优惠券)。需要 v2_checkin_task 表 + /api/front/tool/checkin/tasks/* 接口。
    • 福利领取:连续打卡 N 天解锁福利(优惠券/积分)。复用 couponuser_integral 模块。
    • 邀请好友:分享拉新,被邀请人完成首次打卡发奖。复用现有分享与 H5 路由。
  • 测试:每个子需求按 PRD 编写 E2E 用例Playwright 覆盖。
  • 验收:打卡 → 任务自动达成 → 福利可领 → 邀请链接被新用户使用后返奖。
  • 状态:⏸ 待产品立项

二、食谱计算器模块

2-1 算法推荐准确性无校验 — MP1

  • 方案
    • 引入「校验规则集」JSON 配置能量±10%、钾≤限值、磷钙比 1.01.5),后端在生成推荐后过滤。
    • /api/front/tool/calculator/validate 接口给前端 mock 校对。
    • 把 5 例标杆病例(医生标注)做单元测试基准。
  • 验收5 例基准全部通过;运行时不再出现钾/磷越限的推荐。
  • 状态 P1

2-2 无操作历史记录 — MP1

  • 方案
    • 后端建 v2_calculator_history(user_id, input_json, result_json, created_at)
    • POST /api/front/tool/calculator/calculate 同步落库。
    • 新增 GET /history 与「我的历史」页面,复用列表组件。
  • 验收:计算 3 次后,历史页倒序展示 3 条,详情可重新载入参数。
  • 状态 P1

三、AI 营养师模块

3-1 语音录入失效 — 已修复 ✓82735a5

  • 根因:录音 mp3 被上传到 /api/front/upload/imageOuter(图片专用接口),后端 uploadValidate 用图片扩展名白名单校验mp3 被拒。
  • 修复:跳过 OSS 上传,本地读 base64 直接调用 /api/front/tencent/asr/sentence-recognitionsourceType=1适用 ≤60s 的录音上限。
  • 验收
    • 微信小程序录 515s 中文 → 文本回写输入框
    • iOS / 安卓两端各成功 3 次
  • 状态:✓ 代码已上,待 QA 真机回归

3-2 AI 文字回复响应慢 — MP1

  • 方案
    • 后端流式:检查 commit 58ea764 修复是否回归,确保 SSE 不被网关缓冲(X-Accel-Buffering: no)。
    • 前端:首字节立即停 loading 圈,逐 token 渲染。
    • 监控接入:记录 TTFB 与 token/s目标 TTFB < 1.5s。
  • 验收:连续 5 条对话 P95 TTFB < 1.5s;首句出现到完整回复 ≤ 6s。
  • 状态 P1

3-3 TTS 朗读延迟过高 — SP1

  • 方案
    • 把全文播放改为「分句缓冲,首句生成完即播」。
    • Coze TTS 已具备分段返回,前端拼接队列即可。
  • 验收:从点击播放到首句出声 ≤ 1.5s。
  • 状态 P1

3-4 图文问答未基于上传图识别 — MP1

  • 假设Coze multimodal 入参未把 image_url 透传,或 prompt 里没引用图片。
  • 方案
    • 后端 LLMServiceImpl 在 message 里附 content_type=image_url 多模态字段。
    • prompt 模板加入「请基于用户上传的图片回答」指令。
  • 验收上传一张番茄图AI 应识别为番茄并给出对应饮食建议;负样本(非食物图)应回应「不是食物」。
  • 状态 P1

四、食物百科 & 健康知识

4-1 部分页面图片不显示 — 已修复 ✓e9c2404

  • 根因DB 里食物 image 存了 3 类形态:相对 crmebimage/...、双层 host 前缀脏数据、AI 生成的纯 OSS URL。前端 getFoodImage 只能正确处理纯 http URL前两类显示失败。
  • 修复ToolFoodServiceImpl.normalizeImageForOutput 输出端归一化:定位 crmebimage/ 片段 → 剥前缀 → prefixImage 拼单层 cdnUrlAI URL 透传。
  • 验收
    • 列表页 / 详情页 / 相似推荐三处图片全部显示(后端已 01:21 重启)
    • 至少包含 1 条历史脏数据样本验证
  • 状态:✓ 代码与后端均已生效,待现场回归

4-2 按分类配置兜底默认图 — 已修复 ✓6187a92

  • 根因:仅 food-placeholder.svg 一张通用占位。
  • 修复8 个分类(grain/vegetable/fruit/meat/seafood/dairy/bean/nut)各对应 emoji + 浅色背景;categoryType 优先匹配,回落到中文 category 关键字推断。
  • 验收
    • 故意把数据 image 置空,列表页按分类显示对应 emoji
    • 分类无法识别时回落到通用 🍽️ 浅灰底
  • 状态:✓ 代码已上,待现场回归

4-3 列表页面闪烁 — 已修复 ✓c089e8c

  • 根因foodList 初始化为 6 条 figma.com mock 数据,首屏先渲染拉不到的 figma 图片,再被 API 替换 → 闪烁。
  • 修复:空数组初始化 + foodLoaded 标记 + 骨架占位;同时收纳 scroll-view 高度修复BUG-003
  • 验收
    • Chrome DevTools Slow 3G 模式刷新无 figma 残影
    • Offline 模式不展示 mock 数据
  • 状态:✓ 已上 fix/test-feedback-0403

4-3b UI 适配 bug — 信息不足

  • 方案:要求测试同学补充:机型/分辨率、截图、复现步骤。否则无法定位。
  • 状态🟡 等待信息

五、社区模块

5-1 关注功能失效 — 已修复 ✓5c0beec

  • 根因:后端 getDetail 仅回传 isLiked / isCollectedisFollowed 字段。每次进入帖子页按钮都重置为「+ 关注」,用户重复点击 follow → unfollow状态看似无效。
  • 修复:补充 isFollowed 查询;未登录场景三个状态都默认 false。
  • 验收A 关注 B → 退出 B 帖子页 → 重进 → 按钮显示「已关注」;再点 → 切回「+ 关注」并持久化。
  • 状态:✓ 代码已上,待后端重启 + 现场回归

5-2 一键借鉴打卡仅做跳转 — LP2

  • 方案
    • 前端:「借鉴」按钮跳到打卡发布页时携带 referId
    • 后端:发布打卡接口接受 referId,在 v2_checkin 上记录原始打卡 ID 形成引用关系。
    • 列表页展示「借鉴自 @xxx」徽章。
  • 验收B 在 A 的打卡上点「借鉴」→ 发布页预填 A 的食物 → 提交后社区 B 的打卡显示「借鉴自 A」。
  • 状态:⏸ P2

六、商城模块

6-1 购物车不可进入 — 已修复 ✓33602ea

  • 根因order_addcart 未注册为 tabBar 页,但商品详情页底部购物车 <navigator open-type='switchTab'> 用了 switchTab → 静默失败;pages/user/index.vue switchTab/navigateTo 黑名单逻辑也搞反了。
  • 修复:商品详情 open-type='navigate';用户中心黑/白名单纠正,仅 user/indexgoods_cate 走 switchTab。
  • 验收
    • 商品详情底部点购物车图标 → 进 cart 列表页
    • 个人中心其他菜单跳转正常
  • 状态:✓ 代码已上,待现场回归

6-2 联系客服失效 — 已修复 ✓f36f8ff

  • 根因:①chatUrl 仅 H5/APP-PLUS 写入 vuex小程序拿不到chatConfig 缓存为 null 时模板 v-if 取属性报错;③ chatUrl 空值时仍跳到 web_page 显示空白。
  • 修复:去掉 #ifdefwxChatService 空值兜底 toast「客服暂未配置」chatConfig 取不到给默认对象。
  • 验收
    • 未先访问商城首页直接进「我的」点客服 → 给出明确 toast
    • 访问过商城后客服入口正常打开
    • 微信客服按钮 open-type='contact' 在 wx_chat_independent='open' 时生效(需小程序后台配置)
  • 状态:✓ 前端代码已上;如客服仍打不开,需要运营在小程序后台开通客服功能

6-3 下单流程 bug — 已修复 ✓2c91cfe

  • 根因onCreateorderCreate 成功后立即调用 getOrderPayrequestPayment,强制弹支付;用户取消后留在 confirm 页,二次支付走的是同一函数链,体验割裂。
  • 修复onCreate 改为 redirectTo /pages/order/order_payment,由用户主动点「去支付」;payment() else 分支同步纠正。order_payment 自带重试/取消处理。
  • 验收
    • 提交订单不弹支付,跳到 order_payment
    • 手动「去支付」→ 弹起支付,取消 → 仍在 order_payment,再点「去支付」可重新拉起
    • DB 中只有 1 条 store_order 记录(不会重复落单)
  • 状态:✓ 代码已上,待现场回归

执行节奏

P0 → P1 → P2 推进,每修完一项:

  1. test-0415.md 行尾追加 已修复 commit:<sha> → 改为本文件维护
  2. 更新本文件状态列与验收勾选
  3. push 到 fix/test-feedback-0403,由 QA 现场回归确认

当前阻塞 / 下一步

阻塞项 谁来推
后端 sophia profile 重启(让 4-1, 5-1 后端代码生效) IDEA 重启 PID 17597
QA 现场回归 P0 8 项(按各项验收勾选清单) 测试同学
4-3b UI bug 复现信息(机型/分辨率/截图) 测试同学
P1 启动3-2, 3-3, 3-4, 2-1, 2-2 你确认顺序后我执行
P2 PRD1-1 打卡, 5-2 一键借鉴) 产品