• 瑞吉外卖项目实战Day05


    瑞吉外卖项目实战Day05

    一、新增套餐

    1.创建套餐实体类Setmeal和套餐与菜品的关系SetmealDish实体类

    /**
     * 套餐
     */
    @Data
    public class Setmeal implements Serializable {
    
        private static final long serialVersionUID = 1L;
    
        private Long id;
    
    
        //分类id
        private Long categoryId;
    
    
        //套餐名称
        private String name;
    
    
        //套餐价格
        private BigDecimal price;
    
    
        //状态 0:停用 1:启用
        private Integer status;
    
    
        //编码
        private String code;
    
    
        //描述信息
        private String description;
    
    
        //图片
        private String image;
    
    
        @TableField(fill = FieldFill.INSERT)
        private LocalDateTime createTime;
    
    
        @TableField(fill = FieldFill.INSERT_UPDATE)
        private LocalDateTime updateTime;
    
    
        @TableField(fill = FieldFill.INSERT)
        private Long createUser;
    
    
        @TableField(fill = FieldFill.INSERT_UPDATE)
        private Long updateUser;
    
    
        //是否删除
        private Integer isDeleted;
    }
    
    • 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
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    import com.baomidou.mybatisplus.annotation.FieldFill;
    import com.baomidou.mybatisplus.annotation.TableField;
    import lombok.Data;
    import java.io.Serializable;
    import java.math.BigDecimal;
    import java.time.LocalDateTime;
    
    /**
     * 套餐菜品关系
     */
    @Data
    public class SetmealDish implements Serializable {
    
        private static final long serialVersionUID = 1L;
    
        private Long id;
    
    
        //套餐id
        private Long setmealId;
    
    
        //菜品id
        private Long dishId;
    
    
        //菜品名称 (冗余字段)
        private String name;
    
        //菜品原价
        private BigDecimal price;
    
        //份数
        private Integer copies;
    
    
        //排序
        private Integer sort;
    
    
        @TableField(fill = FieldFill.INSERT)
        private LocalDateTime createTime;
    
    
        @TableField(fill = FieldFill.INSERT_UPDATE)
        private LocalDateTime updateTime;
    
    
        @TableField(fill = FieldFill.INSERT)
        private Long createUser;
    
    
        @TableField(fill = FieldFill.INSERT_UPDATE)
        private Long updateUser;
    
    
        //是否删除
        private Integer isDeleted;
    }
    
    • 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
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59

    2.创建对应的mapper和servlet及其实现类

    3.创建SetmealController类

    当点击添加菜品时,根据分类查询菜品,并且设置菜品为的排序是按照价格升序排序

    在这里插入图片描述

    //根据分类查询菜品
    @GetMapping("/list")
    public R<List<Dish>> selectByList(Long categoryId) {
        LambdaQueryWrapper<Dish> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        lambdaQueryWrapper.eq(Dish::getCategoryId, categoryId);
       lambdaQueryWrapper.orderByAsc(Dish::getPrice);
        List<Dish> list = dishService.list(lambdaQueryWrapper);
        
        return R.success(list);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    前面写过这个分类查询,根据前端请求的type查询

    在这里插入图片描述

    提交表单

    在这里插入图片描述

    该表单数据包含了套餐分类和套餐内容

    所以需要同时完成两张表的新增操作

    引入一个dto类

    @Data
    public class SetmealDto extends Setmeal {
    
        private List<SetmealDish> setmealDishes;
    
        private String categoryName;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    需要在SetmealServiceImpl中自定义一个方法来完成

    Service
    public class SetmealServiceImpl extends ServiceImpl<SetmealMapper, Setmeal>implements SetmealService {
    
        @Autowired
        private SetmealService setmealService;
        @Override
        @Transactional
        public void addSetmeal(SetmealDto setmealDto) {
            //添加数据到setmeal表中
            setmealService.save(setmealDto);
            //添加数据到setmealDish表中
            List<SetmealDish> setmealDishes = setmealDto.getSetmealDishes();
    
            setmealDishes=setmealDishes.stream().map((item)->{
                //查询setmealId将di加入到setmealDto
    
                item.setSetmealId(setmealDto.getId());
                return  item;
            }).collect(Collectors.toList());
    
    
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    在SetmealController中调用这个方法

    @RestController
    @RequestMapping("/setmeal")
    public class SetmealController {
    
        @Autowired
        private SetmealService setmealService;
    
        //新增套餐
        @PostMapping
        public R<String> addSetmeal(@RequestBody SetmealDto setmealDto){
            setmealService.addSetmeal(setmealDto);
    
            return R.success("新增成功");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    二、分页查询

    同理
    在这里插入图片描述

    //分页查询
    @GetMapping("/page")
    public R<Page> selectByPage(int page, int pageSize, String name){
    
        Page<Setmeal> pageInfo=new Page<>(page,pageSize);
    
        LambdaQueryWrapper<Setmeal> lambdaQueryWrapper=new LambdaQueryWrapper<>();
        lambdaQueryWrapper.like(name!=null,Setmeal::getName,name);
        lambdaQueryWrapper.orderByAsc(Setmeal::getPrice);
        setmealService.page(pageInfo,lambdaQueryWrapper);
    
        Page<SetmealDto> pageInfo2=new Page<>();
        BeanUtils.copyProperties(pageInfo,pageInfo2,"records");
    
    
        List<Setmeal> records = pageInfo.getRecords();
        List<SetmealDto> list=records.stream().map((item)->{
            //拷贝对象数据
            SetmealDto setmealDto=new SetmealDto();
            BeanUtils.copyProperties(item,setmealDto);
    
            //获取分类的id
            Long categoryId = item.getCategoryId();
            //得到对应的名字
            Category category = categoryService.getById(categoryId);
    
            String categoryName = category.getName();
            setmealDto.setCategoryName(categoryName);
            return setmealDto;
    
        }).collect(Collectors.toList());
        pageInfo2.setRecords(list);
        return R.success(pageInfo2);
    }
    
    • 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

    三、批量停售

    //批量停售
    
    @PostMapping("/status/{status}")
    public R<String> updateStatus(@PathVariable int status, Long[]ids){
        for (Long id:ids
             ) {
            //查询
            LambdaQueryWrapper<Setmeal> lambdaQueryWrapper=new LambdaQueryWrapper<>();
            lambdaQueryWrapper.eq(Setmeal::getId,id);
            Setmeal one = setmealService.getOne(lambdaQueryWrapper);
            if (one!=null){
                one.setStatus(status);
                setmealService.updateById(one);
            }
    
        }
        return R.success("修改成功");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    四、批量删除

    //批量删除
    @DeleteMapping
    public  R<String> deleteByIds(Long []ids){
        for (Long id:ids
             ) {
            //查询
            LambdaQueryWrapper<Setmeal>lambdaQueryWrapper=new LambdaQueryWrapper<>();
            lambdaQueryWrapper.eq(Setmeal::getId,id);
            //并且是停售状态才能删除
            lambdaQueryWrapper.eq(Setmeal::getStatus,0);
            Setmeal one = setmealService.getOne(lambdaQueryWrapper);
            if (one!=null){
                one.setIsDeleted(1);
                setmealService.updateById(one);
            }
        }
        return R.success("删除成功");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    添加分页查询的条件(判断是否被删除)

    lambdaQueryWrapper.eq(Setmeal::getIsDeleted,0);
    
    • 1
  • 相关阅读:
    如何才能找到合适的法语交传翻译服务呢?
    使用SeaFile搭建私有云盘并公网访问【cpolar内网穿透】
    【2023秋招】金融技术类客观题整理
    各种信息收集
    Python sort 自定义函数排序
    【static】
    leetcode 1222. 可以攻击国王的皇后(每日一题)
    Temporal线上部署
    Elasticsearch从入门到精通-01认识Elasticsearch
    STM32C8T6配置普通IO口(关闭JTAG和SWD调试)
  • 原文地址:https://blog.csdn.net/qq_57907966/article/details/126189239