Java后端项目瑞吉外卖-修改菜品功能

1.需求分析

在修改页面回显菜品相关信息并进行修改

2.代码开发

梳理交互过程

1.页面发送ajax请求,请求服务端获取分类数据,用于菜品下拉框中数据显示

 @GetMapping("/list")
    public R<List<Category>> list(Category category){
        //查询,条件构造器
        LambdaQueryWrapper<Category> queryWrapper = new LambdaQueryWrapper<>();
        //添加条件,首先判断传过来的type不为空,然后再进行type值的判断
        queryWrapper.eq(category.getType() != null,Category::getType,category.getType());
        //添加一个排序条件,orderByDesc是更新时间,优先sort排序,如果sort值相同,就使用更新时间
        queryWrapper.orderByAsc(Category::getSort).orderByDesc(Category::getUpdateTime);

        //进行查询
        List<Category> list = categoryService.list(queryWrapper);

        //封装一下返回值
        return R.success(list);
    }

2.页面发送ajax请求,请求服务端,根据id查询当前菜品信息,用于菜品信息回显

Controller层

/**
     * 根据id来查询菜品信息和对应的口味信息
     * @param id
     * @return
     */
    @GetMapping("/{id}")
    public R<DishDto> get(@PathVariable Long id){//id在请求路径里面,所以加PathVariable注解
        //要查两张表,菜品表和口味表
        DishDto dishDto = dishService.getByIdWithFlavor(id);

        return R.success(dishDto);
    }

Service层

//根据id来查询对应的菜品信息和口味信息
    public DishDto getByIdWithFlavor(Long id);//声明方法

Service实现层

/**
     * 根据id来查询对应的菜品信息和口味信息
     * @param id
     * @return
     */
    public DishDto getByIdWithFlavor(Long id) {
        //第一步,查询菜品信息,在dish表中查询
        Dish dish = this.getById(id);

        //对象拷贝
        DishDto dishDto = new DishDto();
        BeanUtils.copyProperties(dish,dishDto);

        //第二步,查询口味信息,在dish_flavor表中查询
        //构造器
        LambdaQueryWrapper<DishFlavor> queryWrapper = new LambdaQueryWrapper<>();
        //查询条件
        queryWrapper.eq(DishFlavor::getDishId,dish.getId());
        //进行查询
        List<DishFlavor> flavors = dishFlavorService.list(queryWrapper);

        //将查询到的值赋给dishDto
        dishDto.setFlavors(flavors);

        return dishDto;
    }

3.页面发送请求,请求服务端进行图片下载,用于页图片回显

 @GetMapping("/download")
    public void download(String name, HttpServletResponse response){

        try {
            //输入流,通过输入流读取文件内容
            FileInputStream fileInputStream = new FileInputStream(new File(basePath + name));

            //输出流,通过输出流将文件写回浏览器
            ServletOutputStream outputStream = response.getOutputStream();

            response.setContentType("image/jpeg");

            int len = 0;
            byte[] bytes = new byte[1024];
            while ((len = fileInputStream.read(bytes)) != -1){
                outputStream.write(bytes,0,len);
                outputStream.flush();
            }

            //关闭资源
            outputStream.close();
            fileInputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

4.点击保存按钮,页面发送ajax请求,将修改过的菜品相关数据以json形式提交到服务端

Controller

 /**
     * 修改菜品
     * @return
     */
    @PutMapping
    public R<String> update(@RequestBody DishDto dishDto){
        //更新时也涉及到两张表
        dishService.updateWithFlavor(dishDto);
        return R.success("修改菜品成功");
    }

Service

 //更新菜品信息,同时更新口味信息
    public void updateWithFlavor(DishDto dishDto);//声明方法

Service实现

/**
     * 更新菜品和口味信息
     * @param dishDto
     * @return
     */
    @Override
    @Transactional//事务注解,保证事务的一致性
    public void updateWithFlavor(DishDto dishDto) {
        //第一步,更新菜品表基本信息
        this.updateById(dishDto);

        //第二步,更新口味信息
        //1.删除delete当前口味数据
        LambdaQueryWrapper<DishFlavor> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(DishFlavor::getDishId,dishDto.getId());//根据当前菜品id删除
        dishFlavorService.remove(queryWrapper);
        //2.添加insert当前提交过来的口味数据
        List<DishFlavor> flavors = dishDto.getFlavors();


        //当前只有name和falvor,没有dishid
        flavors = flavors.stream().map((item) -> {
            item.setDishId(dishDto.getId());//将上面获取的dishId传进去
            return item;
        }).collect(Collectors.toList());

        dishFlavorService.saveBatch(flavors);

    }

总结:牵扯到两张表的操作,注意增改和查询都要进行对应的修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值