新增套餐——后端

1.交互逻辑

新增套餐,就是将新增页面的套餐信息插入到setmeal表,并向setmeal_dish中插入套餐和菜品关联数据。涉及setmeal, setmeal_dish两张表。

页面发送ajax请求,请求服务端获取套餐分类数据并展示到下拉框中;获取菜品分类数据并展示到菜品窗口中;根据菜品分类查询对应的菜品数据并展示到添加菜品窗口中;进行图片上传,将图片保存到服务器并进行图片下载,将上传的图片进行回显;点击保存按钮,页面发送ajax请求,将套餐相关数据以json形式提交到服务端。

服务端需要处理以上页面发送的请求。

2.代码实现

2.1 根据分类查询菜品

java 复制代码
    /**
     * 根据条件查询对应的菜品数据
     * @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);
    }

2.2 服务端接收数据并保存

SetmealController.java中:

java 复制代码
    /**
     * 新增套餐
     * @param setmealDto
     * @return
     */
    @PostMapping
    public R<String> save(@RequestBody SetmealDto setmealDto){
        log.info("套餐信息:{}", setmealDto);

        setmealService.saveWithDish(setmealDto);
        return R.success("新增套餐成功");
    }

SetmealServiceImpl.java中:

java 复制代码
    @Autowired
    private SetmealDishService setmealDishService;
    /**
     * 新增套餐,同时需要保存套餐和菜品的关联关系
     * @param setmealDto
     */
    @Transactional
    public void saveWithDish(SetmealDto setmealDto) {
        //保存套餐的基本信息,setmeal表
        this.save(setmealDto);
        //保存套餐和菜品的关联关系
        List<SetmealDish> setmealDishes = setmealDto.getSetmealDishes();
        setmealDishes.stream().map((item) -> {
            item.setSetmealId(setmealDto.getId());
            return item;
        }).collect(Collectors.toList());

        setmealDishService.saveBatch(setmealDishes);
    }
相关推荐
Wang's Blog9 分钟前
Java框架快速入门:深入MyBatis-Plus高级DML操作(ID策略·逻辑删除·乐观锁)
java·数据库·mybatis
程序员爱钓鱼16 分钟前
Rust 数据类型详解:整数、浮点数、布尔、字符、元组和数组
后端·rust
KaMeidebaby17 分钟前
卡梅德生物技术快报|噬菌体筛选:噬菌体筛选工程化优化方案:基于侵染全链条参数调控与水环境应用验证
java·开发语言·人工智能·机器学习·spark
geovindu17 分钟前
go: Floyd-Warshall Algorithms
开发语言·后端·算法·golang
AC赳赳老秦21 分钟前
Excel 动态仪表盘制作:用 OpenClaw 自动处理数据、生成交互式图表并实时更新仪表盘
大数据·服务器·后端·测试用例·excel·deepseek·openclaw
CoderYanger22 分钟前
视频裁剪+缩放+自动添加水印脚本(Python版)
开发语言·后端·python·程序人生·职场和发展·音视频·学习方法
从零开始的代码生活_1 小时前
C++ 模板入门:函数模板、类模板与实例化机制
开发语言·c++·后端
我命由我123459 小时前
Android Studio - Android Studio 自定义预览尺寸
android·java·ide·java-ee·android studio·android-studio·android runtime
mCell10 小时前
你以为短链接只是 Hash + 301/302?
后端·算法·架构
咖啡八杯10 小时前
GoF设计模式——迭代器模式
java·后端·设计模式·迭代器模式