Files
msh-system/msh_crmeb_22/documents/实现方案_Tool模块API接口.md

257 lines
8.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Tool模块API接口实现方案
## 概述
本文档说明如何根据数据库设计和前端API接口`documents/api/tool.js`)实现后端服务。
## 已完成的工作
### 1. 数据库设计
-`sql/eb_msh_2.2.sql` - 完整的数据库表结构设计
- ✅ 所有表使用 `v2_` 前缀
- ✅ 使用现有表扩展:`eb_user_sign`(打卡)、`eb_article`AI视频`eb_user_integral_record`(积分流水)
### 2. 前端Controller
-`crmeb-front/src/main/java/com/zbkj/front/controller/ToolController.java` - 已存在,包含所有接口定义
### 3. Service接口
- ✅ 所有Service接口已存在`crmeb-service/src/main/java/com/zbkj/service/service/tool/`
### 4. 已创建的实现类
-`ToolCalculatorServiceImpl.java` - 食谱计算器服务实现
-`ToolPointsServiceImpl.java` - 积分系统服务实现
-`ToolUploadServiceImpl.java` - 文件上传服务实现(已存在)
### 5. 已创建的DAO接口
-`V2CalculatorResultDao.java` - 食谱计算器结果表DAO
-`V2NutritionPlanDao.java` - 营养计划表DAO
### 6. 已创建的Model类
-`V2CalculatorResult.java` - 食谱计算器结果实体
-`V2NutritionPlan.java` - 营养计划实体
## 待完成的工作
### 1. Model实体类需要创建
需要在 `crmeb-common/src/main/java/com/zbkj/common/model/tool/` 目录下创建以下实体类:
1. **V2Food.java** - 食物百科表(`v2_foods`
2. **V2Knowledge.java** - 营养知识表(`v2_knowledge`
3. **V2Recipe.java** - 食谱表(`v2_recipes`
4. **V2CommunityPost.java** - 社区内容表(`v2_community_posts`
5. **V2CommunityInteraction.java** - 社区互动表(`v2_community_interactions`
6. **V2CommunityComment.java** - 社区评论表(`v2_community_comments`
7. **V2CommunityFollow.java** - 关注关系表(`v2_community_follows`
8. **V2AiConversation.java** - AI营养师对话表`v2_ai_conversations`
9. **V2AiMessage.java** - AI营养师消息表`v2_ai_messages`
10. **V2NutritionistConsultation.java** - 营养师咨询记录表(`v2_nutritionist_consultations`
11. **V2UserPoints.java** - 用户积分表(`v2_user_points`
12. **V2QuickCheckinRecord.java** - 一键打卡记录表(`v2_quick_checkin_records`
**注意**
- `eb_user_sign` 表已存在需要扩展字段通过ALTER TABLE
- `eb_article` 表已存在需要扩展字段通过ALTER TABLE
- `eb_user_integral_record` 表已存在需要扩展字段通过ALTER TABLE
### 2. DAO接口需要创建
需要在 `crmeb-service/src/main/java/com/zbkj/service/dao/tool/` 目录下创建以下DAO接口
1. **V2FoodDao.java**
2. **V2KnowledgeDao.java**
3. **V2RecipeDao.java**
4. **V2CommunityPostDao.java**
5. **V2CommunityInteractionDao.java**
6. **V2CommunityCommentDao.java**
7. **V2CommunityFollowDao.java**
8. **V2AiConversationDao.java**
9. **V2AiMessageDao.java**
10. **V2NutritionistConsultationDao.java**
11. **V2UserPointsDao.java**
12. **V2QuickCheckinRecordDao.java**
### 3. Service实现类需要创建
需要在 `crmeb-service/src/main/java/com/zbkj/service/service/impl/tool/` 目录下创建以下实现类:
1. **ToolCheckinServiceImpl.java** - 饮食打卡服务实现(核心功能)
2. **ToolFoodServiceImpl.java** - 食物百科服务实现
3. **ToolKnowledgeServiceImpl.java** - 营养知识服务实现
4. **ToolRecipeServiceImpl.java** - 食谱服务实现
5. **ToolCommunityServiceImpl.java** - 打卡社区服务实现(核心功能)
6. **ToolAiNutritionistServiceImpl.java** - AI营养师服务实现
7. **ToolHomeServiceImpl.java** - 首页数据服务实现
### 4. 核心实现逻辑说明
#### 4.1 ToolCheckinServiceImpl饮食打卡
**主要功能**
- `submit()` - 提交打卡记录
- 保存到 `eb_user_sign`type=3
- 调用AI识别服务如果启用
- 计算营养数据
- 生成营养分析报告
- 计算并发放积分
- 更新连续打卡天数
- `getList()` - 获取打卡记录列表
- 查询 `eb_user_sign`type=3
- 支持按日期、餐次筛选
- `getDetail()` - 获取打卡详情
- 包含AI识别结果、营养分析等
- `getStreak()` - 获取连续打卡统计
-`v2_user_points` 表获取
- `getCalendar()` - 获取打卡日历数据
- 按月统计打卡情况
- `copy()` - 一键复制打卡
- 复制现有打卡记录
- `learn()` - 一键借鉴打卡
- 从社区内容创建打卡记录
#### 4.2 ToolCommunityServiceImpl打卡社区
**主要功能**
- `getList()` - 获取社区内容列表
- 支持推荐/最新/关注/热门等Tab
- 需要实现推荐算法
- `publish()` - 发布社区内容
- 保存到 `v2_community_posts`
- 关联打卡记录(可选)
- `toggleLike()` - 点赞/取消点赞
- 操作 `v2_community_interactions`
- `addComment()` - 发表评论
- 保存到 `v2_community_comments`
- 支持二级评论
#### 4.3 ToolAiNutritionistServiceImplAI营养师
**主要功能**
- `sendMessage()` - 发送消息
- 保存到 `v2_ai_messages`
- 调用AI接口获取回复
- 保存AI回复
- `getHistory()` - 获取对话历史
- 查询 `v2_ai_conversations``v2_ai_messages`
#### 4.4 ToolFoodServiceImpl食物百科
**主要功能**
- `search()` - 搜索食物
- 支持关键词和分类搜索
- 查询 `v2_foods`
- `getDetail()` - 获取食物详情
- 包含营养成分、适宜性等信息
#### 4.5 ToolKnowledgeServiceImpl营养知识
**主要功能**
- `getList()` - 获取知识列表
- 支持按类型、分类筛选
- 查询 `v2_knowledge`
#### 4.6 ToolRecipeServiceImpl食谱
**主要功能**
- `getList()` - 获取食谱列表
- 支持按餐次筛选
- 查询 `v2_recipes`
#### 4.7 ToolHomeServiceImpl首页数据
**主要功能**
- `getData()` - 获取首页数据
- 整合各种数据源
- `getRecommendedRecipes()` - 获取推荐食谱
- 根据用户健康数据推荐
- `getRecommendedKnowledge()` - 获取推荐营养知识
- 根据用户CKD分期推荐
## 实现步骤建议
### 第一步创建所有Model实体类
参考 `V2CalculatorResult.java` 的格式,根据数据库表结构创建所有实体类。
### 第二步创建所有DAO接口
参考 `V2CalculatorResultDao.java` 的格式创建所有DAO接口。
### 第三步实现核心Service
按优先级实现:
1. ToolCheckinServiceImpl核心功能
2. ToolPointsServiceImpl已完成
3. ToolCommunityServiceImpl核心功能
4. ToolCalculatorServiceImpl已完成
5. 其他Service
### 第四步:测试和优化
- 单元测试
- 集成测试
- 性能优化
## 注意事项
1. **用户认证**:所有接口都需要通过 `FrontTokenComponent.getUserId()` 获取当前用户ID
2. **事务管理**:涉及多表操作的接口需要使用 `@Transactional` 注解
3. **异常处理**:统一使用 `CrmebException` 抛出业务异常
4. **分页查询**:使用 `PageHelper.startPage()` 进行分页
5. **JSON字段**:使用 `JSON.toJSONString()``JSON.parseObject()` 处理JSON字段
6. **日期处理**:注意 `LocalDate``Date` 的转换
7. **积分计算**参考PRD文档中的积分规则实现
8. **AI识别**AI识别功能需要对接第三方服务如腾讯云、百度AI等
## 数据库字段映射
### eb_user_sign 扩展字段(打卡专用)
- `plan_id` - 关联的营养计划ID
- `meal_type` - 餐次
- `photos_json` - 照片数组
- `notes` - 备注
- `voice_url` - 语音URL
- `ai_recognized_foods_json` - AI识别结果
- `ai_recognition_status` - AI识别状态
- `actual_protein` - 实际蛋白质
- `actual_energy` - 实际能量
- `nutrition_score` - 营养评分
- 等等...
### eb_article 扩展字段AI视频专用
- `post_id` - 关联的社区内容ID
- `check_in_record_id` - 关联的打卡记录ID
- `thumbnail_url` - 视频缩略图
- `duration` - 视频时长
- `script_json` - 视频脚本
- `dishes_json` - 菜品清单
- `nutrition_json` - 营养数据
- `generation_method` - 生成方式
- `ai_provider` - AI提供商
- 等等...
## 参考代码
- `ToolCalculatorServiceImpl.java` - 食谱计算器实现示例
- `ToolPointsServiceImpl.java` - 积分系统实现示例
- `UserSignServiceImpl.java` - 用户签到服务实现(可参考)
- `ArticleServiceImpl.java` - 文章服务实现(可参考)
## 后续优化
1. 缓存优化使用Redis缓存热点数据
2. 异步处理AI识别、视频生成等耗时操作使用异步处理
3. 消息队列:使用消息队列处理积分计算、统计等任务
4. 搜索引擎食物搜索、知识搜索可以使用Elasticsearch
5. 推荐算法:社区内容推荐可以使用机器学习算法