瑞吉外卖-Day6-功能开发(7)

功能开发-前端菜品套餐展示功能

一、菜品展示功能

1.1、需求分析

在这里插入图片描述
在这里插入图片描述

获取分类后,根据分类的state去请求dish或setmeal传CategoryId

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.2、代码开发

当前点击菜品分类,已经能显示菜品,但是口味没有显示,所以要用DishDto返回,
修改/dish/list
思路:查出list,循环每一个dish,新增dto,复制dish到dto,查出,Category,dish_flavor放到dto里面
package com.xxxit.reggie.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xxxit.reggie.common.R;
import com.xxxit.reggie.dto.DishDto;
import com.xxxit.reggie.entity.Category;
import com.xxxit.reggie.entity.Dish;
import com.xxxit.reggie.entity.DishFlavor;
import com.xxxit.reggie.service.CategoryService;
import com.xxxit.reggie.service.DishFlavorService;
import com.xxxit.reggie.service.DishService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.stream.Collectors;

/**
 * 菜品管理
 */
@RestController
@Slf4j
@RequestMapping("/dish")
public class DishController {

    @Autowired
    private DishService dishService;

    @Autowired
    private DishFlavorService dishFlavorService;


    @Autowired
    private CategoryService categoryService;

    /**
     * 新增菜品
     * @param dishDto
     * @return
     */
    @PostMapping
    public R<String> save(@RequestBody DishDto dishDto){
        log.info(dishDto.toString());

        // 保存菜品,直接存,向上转型
        dishService.saveWithFlavor(dishDto);

        return R.success("新增菜品成功");

    }

    /**
     * 查询菜品分页功能
     * @param page
     * @param pageSize
     * @param name
     * @return
     */
    @GetMapping("/page")
    public R<Page> page(int page,int pageSize,String name){
        log.info("获取菜品分页信息");

        // 构造分页构造器对象
        Page<Dish> pageInfo = new Page<>(page,pageSize);
        Page<DishDto> dishDtoPage = new Page<>();

        // 条件构造器
        LambdaQueryWrapper<Dish> DishQueryWrapper = new LambdaQueryWrapper<>();

        // 添加查询条件
        DishQueryWrapper.like(name != null,Dish::getName,name);
        // 添加排序添加
        DishQueryWrapper.orderByDesc(Dish::getUpdateTime);

        // 执行
        dishService.page(pageInfo,DishQueryWrapper);

        // 复制,忽略数据库数据,只拿页码数据条数
        BeanUtils.copyProperties(pageInfo,dishDtoPage,"records");

        // 分类id改名字
        List<Dish> records = pageInfo.getRecords();
        List<DishDto> DishDtoRecords = records.stream().map((item) -> {
            // 把Dish的数据复制到dishDto
            DishDto dishDto = new DishDto();

            // 复制
            BeanUtils.copyProperties(item,dishDto);

            Long categoryId = item.getCategoryId();
            Category category = categoryService.getById(categoryId);
            String categoryName = category.getName();
            dishDto.setCategoryName(categoryName);

            return dishDto;
        }).collect(Collectors.toList());

        // 把数据放进页面
        dishDtoPage.setRecords(DishDtoRecords);

        return R.success(dishDtoPage);
    }

    /**
     * 根据id查询菜品信息
     * @param id
     * @return
     */
    @GetMapping("/{id}")
    public R<DishDto> get(@PathVariable Long id){
        log.info("查询菜品信息:{}",id);
        DishDto dish = dishService.getByIdWithFlavor(id);
        return R.success(dish);
    }


    /**
     * 修改菜品
     * @param dishDto
     * @return
     */
    @PutMapping
    public R<String> update(@RequestBody DishDto dishDto){
        log.info(dishDto.toString());

        dishService.updateWithFlavor(dishDto);

        return R.success("新增菜品成功");
    }


    /**
     * 根据条件查询对应的菜品数据
     * @param dish
     * @return
     */
    /*@GetMapping("/list")
    public R<List<Dish>> list(Dish dish){
        //构造查询条件
        LambdaQueryWrapper<Dish> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(dish.getCategoryId() != null ,Dish::getCategoryId,dish.getCategoryId());
        //添加条件,查询状态为1(起售状态)的菜品
        queryWrapper.eq(Dish::getStatus,1);

        //添加排序条件
        queryWrapper.orderByAsc(Dish::getSort).orderByDesc(Dish::getUpdateTime);

        List<Dish> list = dishService.list(queryWrapper);

        return R.success(list);
    }*/

    /**
     * 根据分类id查询对应菜品
     * @param dish
     * @return
     */
    @RequestMapping("/list")
    public R<List<DishDto>> list(Dish dish){

        // 条件构建器
        LambdaQueryWrapper<Dish> dishLambdaQueryWrapper = new LambdaQueryWrapper<>();
        // 添加条件
        dishLambdaQueryWrapper.eq(dish.getCategoryId() != null,Dish::getCategoryId,dish.getCategoryId());
        // 添加条件:启售
        dishLambdaQueryWrapper.eq(Dish::getStatus,1);
        // 添加排序条件
        dishLambdaQueryWrapper.orderByAsc(Dish::getSort).orderByDesc(Dish::getUpdateTime);
        // 执行
        List<Dish> list = dishService.list(dishLambdaQueryWrapper);

        List<DishDto> dishDtos = list.stream().map((item) -> {

            // 创建一个新的dishDto,复制Dish内容
            DishDto dishDto = new DishDto();
            BeanUtils.copyProperties(item,dishDto);

            // 顺便把CategoryName也填充了,方便以后使用
            // 1.获取CategoryId
            Long categoryId = item.getCategoryId();
            // 2.获取Name
            Category category = categoryService.getById(categoryId);
            if(category != null){
                String categoryName = category.getName();
                // 3.设置DishDto的categoryName
                dishDto.setCategoryName(categoryName);
            }

            // 按Dish的id查询dish_flavor,填充进去
            // 当前菜品id
            Long dishId = item.getId();
            // 1.条件构造器
            LambdaQueryWrapper<DishFlavor> dishFlavorLambdaQueryWrapper = new LambdaQueryWrapper<>();
            // 2.添加条件
            dishFlavorLambdaQueryWrapper.eq(DishFlavor::getDishId,dishId);
            // 3.查询属于该菜品的所有口味
            List<DishFlavor> flavors = dishFlavorService.list(dishFlavorLambdaQueryWrapper);
            // 4.设置
            dishDto.setFlavors(flavors);

            return dishDto;
        }).collect(Collectors.toList());

        return R.success(dishDtos);
    }

}

1.3、测试

二、套餐展示

2.1、需求分析

当前就点击菜品分类会展示菜品信息,点击套餐分类还没反应,套餐不需要dto,虽有菜品,但是需要的是直接往购物车加入一个套餐

在这里插入图片描述

2.2、代码开发

package com.xxxit.reggie.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xxxit.reggie.common.R;
import com.xxxit.reggie.dto.SetmealDto;
import com.xxxit.reggie.entity.Category;
import com.xxxit.reggie.entity.Setmeal;
import com.xxxit.reggie.service.CategoryService;
import com.xxxit.reggie.service.SetmealDishService;
import com.xxxit.reggie.service.SetmealService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.stream.Collectors;

/**
 * 套餐管理
 */
@RestController
@RequestMapping("/setmeal")
@Slf4j
public class SetmealController {

    @Autowired
    private SetmealService setmealService;

    @Autowired
    private SetmealDishService setmealDishService;

    @Autowired
    private CategoryService categoryService;

    /**
     * 新增套餐
     * @param setmealDto
     * @return
     */
    @PostMapping
    public R<String> save(@RequestBody SetmealDto setmealDto){
        log.info("新增套餐信息:{}",setmealDto.toString());
        setmealService.saveWithDish(setmealDto);
        return R.success("新增成功");
    }

    /**
     * 分页查询功能
     * @param page
     * @param pageSize
     * @param name
     * @return
     */
    @GetMapping("/page")
    public R<Page> page(int page,int pageSize,String name){

        // 前端展示的套餐分类不是id而是名称所以用dto返回结果
        // 分页构造器
        Page<Setmeal> pageInfo = new Page<>(page,pageSize);
        Page<SetmealDto> setmealDtoPage = new Page<>();

        // 条件构造器
        LambdaQueryWrapper<Setmeal> setmealLambdaQueryWrapper = new LambdaQueryWrapper<>();
        // 添加条件
        setmealLambdaQueryWrapper.like(name != null,Setmeal::getName,name);
        setmealLambdaQueryWrapper.orderByDesc(Setmeal::getUpdateTime);

        setmealService.page(pageInfo,setmealLambdaQueryWrapper);

        // 复制页面信息,忽略数据库信息
        BeanUtils.copyProperties(pageInfo,setmealDtoPage,"records");

        // 赋值分类名称
        List<Setmeal> records = pageInfo.getRecords();
        List<SetmealDto> list = records.stream().map((item) -> {
            // Setmeal信息复制到SetmealDto
            SetmealDto setmealDto = new SetmealDto();
            BeanUtils.copyProperties(item,setmealDto);

            // 获取名字赋值
            Long categoryId = item.getCategoryId();
            Category category = categoryService.getById(categoryId);
            if (category != null){
                setmealDto.setCategoryName(category.getName());
            }

            return setmealDto;
        }).collect(Collectors.toList());

        // 设置数据库数据
        setmealDtoPage.setRecords(list);

        return R.success(setmealDtoPage);
    }

    @DeleteMapping
    public R<String> delete(@RequestParam List<Long> ids){
        log.info("ids:{}",ids);
        setmealService.removeWithDish(ids);
        return R.success("套餐数据删除成功");
    }

    /**
     * 根据分类id查询分类下套餐
     * @param setmeal
     * @return
     */
    @GetMapping("/list")
    public R<List<Setmeal>> list(Setmeal setmeal){	// //因为id和status在地址传递,不用@RequestBody
        log.info("查看套餐:{}",setmeal.toString());
        
        // 1.获取CategoryId
        Long categoryId = setmeal.getCategoryId();
        // 2.条件构造器
        LambdaQueryWrapper<Setmeal> categoryLambdaQueryWrapper = new LambdaQueryWrapper<>();
        // 3.添加条件
        categoryLambdaQueryWrapper.eq(setmeal.getCategoryId() != null,Setmeal::getCategoryId,categoryId);
        categoryLambdaQueryWrapper.eq(setmeal.getStatus() != null,Setmeal::getStatus,setmeal.getStatus());
        categoryLambdaQueryWrapper.orderByDesc(Setmeal::getUpdateTime);
        // 4.查询
        List<Setmeal> list = setmealService.list(categoryLambdaQueryWrapper);

        return R.success(list);
    }
}

2.3、测试

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值