项目实训第八周工作汇报
尝试使用了学校提供的deepseek R1 接口来生成饮食推荐,但由于deepseek R1是推理模型,生成时间极长,较影响用户体验,未被采用。(1)前端调用select方法获得当天的打卡记录和所使用的卡路里,打卡记录通过列表给出,卡路里通过圆环图给出,更加清晰。(2)前端向后端传递selectedDate(默认为当天)获取当天的打卡记录,并在前端通过列表显示。(3)前端进行打卡,选择餐别(早、午
·
项目实训第八周工作汇报:
工作内容:
1、用户端饮食推荐功能的实现
2、用户端饮食打卡功能的实现
3、用户端饮食记录功能的实现
界面展示:
饮食推荐:
饮食打卡:
饮食记录:
工作内容细讲:
1、饮食推荐
尝试使用了学校提供的deepseek R1 接口来生成饮食推荐,但由于deepseek R1是推理模型,生成时间极长,较影响用户体验,未被采用。所以本周写出的算法是Java后端写的随机算法,之后会尝试通过优化提示词或者使用其他公司提供的deepseek V3接口来加快生成速率。
后端随机算法如下:
@Transactional
public void recommend(Long userId) {
List<Food> allFoods = foodMapper.selectAll(new Food());
this.recommendFoods(TARGET_CALORIES, allFoods, "早餐", userId);
this.recommendFoods(TARGET_CALORIES, allFoods, "午餐", userId);
this.recommendFoods(TARGET_CALORIES, allFoods, "晚餐", userId);
}
public void recommendFoods(float targetCalories, List<Food> allFoods, String type, Long userId) {
Collections.shuffle(allFoods);//打乱列表,引入随机性
Double totalCalories = 0.0;
float everCalories = targetCalories / 3.0f;
for (Food food : allFoods) {
if (food.getCalories() <= everCalories) {
FoodRecommend foodRecommend = new FoodRecommend();
foodRecommend.setUserId(userId);
foodRecommend.setFoodId(food.getId());
foodRecommend.setFoodName(food.getName());
foodRecommend.setRecommendType(type);
Integer grams = Math.round(everCalories / food.getCalories()) * 100;
foodRecommend.setGramAte(grams);
Double b = (double)grams / 100;
foodRecommend.setCaloriesAte(Math.round(food.getCalories() * b * 10) / 10.0);
foodRecommend.setCarbohydratesAte(Math.round(food.getCarbohydrates() * b * 10) / 10.0);
foodRecommend.setFatAte(Math.round(food.getFat() * b * 10) / 10.0);
foodRecommend.setProteinAte(Math.round(food.getProtein() * b * 10) / 10.0);
foodRecommend.setFiberAte(Math.round(food.getFiber() * b * 10) / 10.0);
foodRecommend.setCreateTime(LocalDateTime.now());
totalCalories += foodRecommend.getCaloriesAte();
foodRecommendMapper.insert(foodRecommend);
// 如果已达到目标卡路里消耗,停止推荐
if (totalCalories >= targetCalories*0.95) {
break;
}
}
}
}
2、饮食打卡
(1)前端调用select方法获得当天的打卡记录和所使用的卡路里,打卡记录通过列表给出,卡路里通过圆环图给出,更加清晰。
(2)前端调用后端selectAll()获得food表中的所有饮食。
(3)前端进行打卡,选择餐别(早、午、晚餐)、食物、食物克数,调用后端的add方法实现打卡。
3、饮食记录
(1)前端调用后端的selectCheckinDaysAndCalories方法获得当月打卡天数和食用总卡路里,并在前端通过圆环图显示。
(2)前端向后端传递selectedDate(默认为当天)获取当天的打卡记录,并在前端通过列表显示。
下周任务:
实现睡眠板块的助睡音乐播放器功能,并尝试调用suno等音乐生成相关模型的API生成助眠解压音乐。
更多推荐
所有评论(0)