项目实训第八周工作汇报:

工作内容:

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生成助眠解压音乐。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐