瑞吉外卖项目——新增套餐

需求分析

套餐就是菜品的集合。
后台系统中可以管理套餐信息,通过新增套餐功能来增加一个新的套餐,在添加套餐时需要选择套餐分类和包含的菜品,并且需要选择套餐所对应的图片,在移动端会展示相应的界面。

数据模型

新增套餐其实就是将新增页面提交的套餐信息插入到setmeal表,还需要向setmeal_dish表插入套餐和关联数据,所以在新增套餐时涉及两个表:setmeal表和setmeal_dish表。

代码开发

搭建基本环境
mapper、service、controller。

注意:
@service注解最好添加在service实现类上,因为一个sevice接口可能有多个实现类。只有一个不用指定id别名,有多个实现类时最好指定
id别名。

前后端交互过程

  • 页面发送ajax请求到服务端,服务端接收请求返回给套餐分类数据到前端并展示到下拉框。
  • 页面发送ajax请求,请求服务端获取菜品分类数据并展示到添加菜品窗口。
  • 页面发送ajax请求,根据菜品分类查询对应的菜品数据并展示到添加菜品窗口中。
  /**
   * 根据条件查询对应的菜品信息。
   * @param dish
   * @return
   */
  @GetMapping("/list")
  public R<List<Dish>> list(Dish dish) {
    log.info("接收参数:{}",dish);
    //构造查询条件
    LambdaQueryWrapper<Dish> queryWrapper = new LambdaQueryWrapper<>();
    //查询起售的。
    queryWrapper.eq(Dish::getStatus,1);
    queryWrapper.eq(dish.getCategoryId()!=null,Dish::getCategoryId,dish.getCategoryId());
    //添加排序条件
    queryWrapper.orderByAsc(Dish::getSort).orderByDesc(Dish::getUpdateTime);
    //执行查询
    List<Dish> dishList = dishService.list(queryWrapper);
    return R.success(dishList);
  }

  • 页面发送请求进行图片上传,请求服务端将图片保存到服务器。
  • 页面发送请求进行图片下载,将上传的图片进行回显。
  • 点击保存按钮,发送ajax请求,将页面输入的套餐信息以json数据提交到服务端并进行保存。
    Service层
/**
 * @Author 小杰 @Date 2022/4/27 15:13 @Version 1.0
 */
@Service
public class SetmealServiceImpl extends ServiceImpl<SetmealMapper, Setmeal>
    implements SetmealService {
  @Autowired private SetmealDishService setmealDishService;

  @Transactional
  @Override
  public void saveWithDish(SetmealDto setmealDto) {
    // 1.先保存基本信息到setmeal表。
    this.save(setmealDto);
    // 2.保存套餐对应的菜品信息到setmeal_dish表。
    List<SetmealDish> setmealDishes = setmealDto.getSetmealDishes();
    // Field 'setmeal_id' doesn't have a default value] with root cause
    // 所以需要处理setmeal_id字段。
        setmealDishes.stream()
            .map(
                (item) -> {
                  item.setSetmealId(setmealDto.getId());
                  return item;
                })
            .collect(Collectors.toList());
    setmealDishService.saveBatch(setmealDishes);
  }

注意:保存时,不仅要保存setmeal基本信息,还要保存套餐所对应的菜品到setmeal_dish表,所以涉及到两个表的保存,所以控制器方法需要一个dto类型来接收前端参数。因为前端提交是json数据的格式,所以要在形参加@RequestBody注解接收。

controller层

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

功能测试

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值