• 瑞吉外卖项目实战Day04


    瑞吉外卖项目实战Day04

    一、添加菜品

    进入添加菜品界面,会发出一个请求查询菜品分类

    image-20220803103433413

    /**
     * 根据条件查询分类数据
     * @param category
     * @return
     */
    @GetMapping("/list")
    public R<List<Category>> list(Category category){
        //条件构造器
        LambdaQueryWrapper<Category> queryWrapper = new LambdaQueryWrapper<>();
        //添加条件
        queryWrapper.eq(category.getType() != null,Category::getType,category.getType());
        //添加排序条件
        queryWrapper.orderByAsc(Category::getSort).orderByDesc(Category::getUpdateTime);
    
        List<Category> list = categoryService.list(queryWrapper);
        return R.success(list);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    上传图片:

    在配置文件中定义保存文件的地址:

    #自定义文件保存的路径
    reggie:
        path: D:\im
    
    • 1
    • 2
    • 3
    //文件的上传和下载
    @RestController
    @RequestMapping("/common")
    public class CommonController {
        @Value("${reggie.path}")
    private String path;
    
        //文件上传
        @PostMapping("/upload")
        public R<String> upload(MultipartFile file){
        //file是一个临时文件,需要转存,否则本次请求结束后就消失
        //使用UUID随机生成文件名
            //获取文件后缀
               //获取原始文件名
            String originalFilename = file.getOriginalFilename();
               //截取后缀
            String substring = originalFilename.substring(originalFilename.lastIndexOf("."));
    
            String FileName = UUID.randomUUID().toString()+substring;
    
            //需要判断path是否存在
              File dir=new File(path);
              if (!dir.exists()){
                  //目录不存在,需要创建
                  dir.mkdirs();
              }
    
            try {
                file.transferTo(new File(path+FileName));
            } catch (IOException e) {
                e.printStackTrace();
            }
            //需要返回文件名,以便保存到数据库
            return R.success(FileName);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    下载图片

        //文件下载
        @GetMapping("/download")
        public void download(String name, HttpServletResponse response){
            //输入流,读取文件内容
    
            try {
                FileInputStream fileInputStream=new FileInputStream(new File(path+name));
    
            //输出流,将文件写回浏览器
                  //设置写回浏览器的文件格式
                 response.setContentType("image/jpeg");
    
                byte[] bytes=new byte[1024];
                int len=0;
                ServletOutputStream outputStream = response.getOutputStream();
                while ((len=fileInputStream.read(bytes))!=-1){
                    outputStream.write(bytes,0,len);
                    outputStream.flush();
                }
                //关闭流
                fileInputStream.close();
                outputStream.close();
    
    
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
    
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    导入dish(菜品)实体类和dishflavor(口味)实体类

    创建DishMapper和DishFlavorMapper

    创建DishService,DishFlavorService和DishServiceImpl,DishFlavorServiceImpl

    创建DishController

    image-20220804091715407

    因为需要同时操作两张表

    所以需要自定义一个方法完成数据的插入,并且需要添加事务

    由于前端传过来的数据包括口味

    我们需要重新创建一个实体类 DishDto

    @Data
    public class DishDto extends Dish {
    
        private List<DishFlavor> flavors = new ArrayList<>();
    
        private String categoryName;
    
        private Integer copies;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    image-20220804093050971

    @Service
    public class DishServiceImpl extends ServiceImpl<DishMapper, Dish> implements DishService {
    
        @Autowired
        private DishFlavorService dishFlavorService;
        @Override
        @Transactional
        public void addDish(DishDto dishDto) {
            //需要操作两张表
              //向dish表中添加菜品
            this.save(dishDto);
    
             //向dishFlavor表中插入数据
              //获取dish_id
            Long id = dishDto.getId();
              //获取口味
            List<DishFlavor> flavors = dishDto.getFlavors();
              //给口味对应的菜品id赋值
            flavors =flavors.stream().map((item)->{
                 item.setDishId(id);
                 return item;
             }).collect(Collectors.toList());
    
            //添加到口味表中
            dishFlavorService.saveBatch(flavors);
    
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    在DishController中调用这个方法,返回成功即可

    二、分页查询

    @GetMapping("/page")
    public  R<Page> selectByPage(int page,int pageSize,String name){
        Page<Dish> pageDish=new Page<>(page,pageSize);
        LambdaQueryWrapper<Dish> lambdaQueryWrapper=new LambdaQueryWrapper<>();
        lambdaQueryWrapper.like(name!=null,Dish::getName,name);
        lambdaQueryWrapper.orderByAsc(Dish::getId);
        dishService.page(pageDish,lambdaQueryWrapper);
        return  R.success(pageDish);
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    实现结果:

    image-20220804101549808

    而DithDto中有个属性就是categoryName

        @GetMapping("/page")
        public  R<Page> selectByPage(int page,int pageSize,String name){
            Page<Dish> pageDish=new Page<>(page,pageSize);
            LambdaQueryWrapper<Dish> lambdaQueryWrapper=new LambdaQueryWrapper<>();
            lambdaQueryWrapper.like(name!=null,Dish::getName,name);
            lambdaQueryWrapper.orderByAsc(Dish::getId);
            dishService.page(pageDish,lambdaQueryWrapper);
            
            //复制分页,除了数据不复制
            Page<DishDto> pageDishDto=new Page<>();
            BeanUtils.copyProperties(pageDish,pageDishDto,"records");
    
            //获取原来的分页数据
            List<Dish> records = pageDish.getRecords();
    
            List<DishDto> DishDtoRecords=records.stream().map((item)->{
                //对其进行加工处理,
                DishDto dishDto=new DishDto();
                //复制数据
                BeanUtils.copyProperties(item,dishDto);
    
                Long id =item.getId();
                Dish dish = dishService.getById(id);
    
                if (dish!=null){
                    Long categoryId = dish.getCategoryId();
                    //得到分类名称
                    Category category = categoryService.getById(categoryId);
                    String categoryName = category.getName();
                    //设置dishDto中的分类名称
                    dishDto.setCategoryName(categoryName);
                }
                return dishDto;
    
            }).collect(Collectors.toList());
    pageDishDto.setRecords(DishDtoRecords);
    
            return  R.success(pageDishDto);
    
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

    三、批量启售停售

    前端发来的请求:

    image-20220805091342320

    dishController中

     //批量启售停售
        @PostMapping("/status/{status}")
        public R<String> update(@PathVariable int status,Long [] ids){
           //修改对应id的状态为0
            for (Long id:ids
                 ) {
                Dish dish = dishService.getById(id);
                if (dish!=null&&dish.getIsDeleted()==0){
                    dish.setStatus(status);
                    dishService.updateById(dish);
                }
                else{
                    return R.error("菜品已经被删除了");
                }
    
            }
            return R.success("修改成功");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    四、批量删除

    只有菜品处于停售状态才可删除

    注意修改分页查询的条件(当菜品的isDeleted=1时)不展示该菜品

      @DeleteMapping
        public R<String> deleteByIds(Long[]ids){
            int msg=0;//0表示删除失败,1表示删除成功
            //判断是否是停售状态,只有停售状态才能删除
            for (Long id:ids){
                Dish dish = dishService.getById(id);
    
                if (dish.getStatus()==1){
                   msg=0;
    
                }
    
                else{
                    dish.setIsDeleted(1);
                    dishService.updateById(dish);
                    msg=1;
                }
            }
    return msg==1? R.success("删除成功"):R.error("该菜品处于启售状态,删除失败");
    
        }
    
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
  • 相关阅读:
    Failed to start mysql.service Unit mysql.service not found
    2.1数据的表示和运算--进位制
    【线性代数基础进阶】特征值和特征向量-补充+练习
    RocketMQ知识点总结
    Java_IO流05:打印流、数据流、标准输入、输出流(了解)
    2022-06-26 数据结构-数组、链表、栈、队列
    【历史上的今天】6 月 30 日:冯·诺依曼发表第一份草案;九十年代末的半导体大战;CBS 收购 CNET
    vue3 - Element Plus暗黑模式适配、切换及自定义颜色
    怎么看网站域名有没有收录 收录情况怎么样 网站收录查询
    HCIP学习笔记
  • 原文地址:https://blog.csdn.net/qq_57907966/article/details/126171387