- 修复油脂类食物推荐量系数 (5.7→2.5) [ToolCalculatorServiceImpl] - AI营养师接入真实Coze API,替换Mock回复 [ToolAiNutritionistServiceImpl] - 食物百科详情新增钙/铁/维C/嘌呤/重量基准字段返回 [ToolFoodServiceImpl] - V2Food模型新增purine、servingSize字段 [V2Food.java] - 食物百科详情页动态重量标注+新增4项营养展示+替换Figma URL [food-detail.vue] - 修复营养素列表dataset传参Bug(WeChat camelCase) [nutrition-knowledge.vue] - 营养素详情页接入后端API+兜底本地数据+替换Figma URL [nutrient-detail.vue] - 新增数据库迁移脚本及参考初始化数据 [docs/sql/] - 新增前端占位图标5个 [static/images/] - 新增开发任务完成报告 [docs/] Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
5.0 KiB
开发任务完成报告 2026-03-25
任务总览
| 任务 | 状态 | 说明 |
|---|---|---|
| 任务 0:数据库表结构变更 | ✅ 完成 | V2Food.java 新增 purine、servingSize 字段 |
| 任务 1:油脂系数 Bug 修复 | ✅ 完成 | 油脂类系数 5.7 → 2.5 |
| 任务 2:AI 营养师接入 Coze API | ✅ 完成 | 替换 Mock 回复为 Coze API 调用 |
| 任务 3:食物百科详情字段补全 | ✅ 完成 | 新增钙、铁、维生素C、嘌呤、重量基准 |
| 任务 4:食物百科详情页前端修复 | ✅ 完成 | 动态重量标注 + Figma URL 替换 + 营养成分扩展 |
| 任务 5:营养素列表传参 Bug 修复 | ✅ 完成 | dataset 传参改为直接传参 |
| 任务 6:营养素详情页接入后端 API | ✅ 完成 | 优先 API、本地 map 兜底 + Figma URL 替换 |
详细修改记录
任务 0:数据库表结构变更
文件: msh_crmeb_22/crmeb-common/src/main/java/com/zbkj/common/model/tool/V2Food.java
- 在 vitaminC 字段后(约第 70 行)新增:
purine(BigDecimal):嘌呤含量(mg),对应数据库字段purineservingSize(String):营养成分重量基准,对应数据库字段serving_size
- 类已使用
@Data注解(Lombok),无需手动添加 getter/setter
任务 1:油脂系数 Bug 修复
文件: msh_crmeb_22/crmeb-service/src/main/java/com/zbkj/service/service/impl/tool/ToolCalculatorServiceImpl.java
- 第 516 行:
round(5.7 * energyRatio)→round(2.5 * energyRatio) - 验证:文件中仅第 510 行谷薯类保留
5.7系数,油脂类已改为2.5
任务 2:AI 营养师接入 Coze API
文件: msh_crmeb_22/crmeb-service/src/main/java/com/zbkj/service/service/impl/tool/ToolAiNutritionistServiceImpl.java
- 新增注入:
ToolCozeService toolCozeService - 新增 import:
ToolCozeService、CozeChatRequest、CozeBaseResponse sendMessage()方法中:- 移除 Mock 回复
"这是一个模拟的AI回复。" - 替换为
toolCozeService.chat(cozeRequest)调用 - Bot ID:
7591133240535449654 - 添加 try-catch 异常处理,失败时设置
aiResponseStatus("failed")
- 移除 Mock 回复
任务 3:食物百科详情字段补全
文件: msh_crmeb_22/crmeb-service/src/main/java/com/zbkj/service/service/impl/tool/ToolFoodServiceImpl.java
getDetail()方法中(约第 121 行后)新增 5 个字段返回:calcium、iron、vitaminC、purine、servingSize
任务 4:食物百科详情页前端修复
文件: msh_single_uniapp/pages/tool/food-detail.vue
- 修复点 A: 两处
"每100g"硬编码替换为{{ foodData.servingSize || '每100g' }} - 修复点 B:
parseNutritionTable中新增铁 (iron) 和维生素C (vitaminC) 营养项;parseKeyNutrients和parseNutritionTable的 nutrients 来源改为兼容平铺字段 (data.nutrients || data.nutritionData || data) - 修复点 C: 3 处 Figma 临时 URL 替换为本地占位图路径(
/static/images/icon-share.png、/static/images/icon-search.png、空字符串)
任务 5:营养素列表传参 Bug 修复
文件: msh_single_uniapp/pages/tool/nutrition-knowledge.vue
- 第 39 行:
@click="goToNutrientDetail" :data-nutrient-index="index"→@click="goToNutrientDetail(index)" goToNutrientDetail方法:参数从event改为直接接收index,移除event.currentTarget.dataset.nutrientIndex取值逻辑
任务 6:营养素详情页接入后端 API
文件: msh_single_uniapp/pages/tool/nutrient-detail.vue
- 修复点 A:
nutrientData默认值从硬编码的"钠"数据改为空对象{} - 修复点 B:
loadNutrientData()方法改为 async,优先调用getNutrientDetail(name)API,失败时使用本地nutrientMap兜底 - 修复点 C: 3 处 Figma 临时图片 URL 替换为本地占位图路径
遇到的问题及处理方式
-
ToolCozeService 接口设计:
chat()方法接收CozeChatRequest对象而非简单的(botId, message, userId)参数。处理方式:构造完整的CozeChatRequest对象,设置botId、userId、additionalMessages等字段。 -
food-detail.vue 营养数据解析:后端返回的是平铺字段(如
data.calcium),而前端解析方法原本从data.nutrients子对象取值。处理方式:将 nutrients 来源改为data.nutrients || data.nutritionData || data,兼容两种数据结构。 -
Figma 临时图片 URL:多个 Vue 文件中使用了 Figma API 的临时资源 URL。处理方式:统一替换为本地静态资源路径(
/static/images/xxx.png),需后续补充实际图标文件。
后续待办
- 数据库执行 ALTER TABLE 添加
purine和serving_size字段 - 补充
/static/images/下的图标文件(icon-share.png、icon-search.png、icon-why-important.png、icon-recommendation.png、icon-suggestions.png) - 后端实现
getNutrientDetail接口(若尚未实现) - 用户手动执行
git push origin main