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

257 lines
8.6 KiB
Markdown
Raw Normal View History

# 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. 推荐算法:社区内容推荐可以使用机器学习算法