瑞吉外卖项目实战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;
}
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;
}

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);
}

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

在这里插入图片描述

提交表单

在这里插入图片描述

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

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

引入一个dto类

@Data
public class SetmealDto extends Setmeal {

    private List<SetmealDish> setmealDishes;

    private String categoryName;
}

需要在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());


    }
}

在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("新增成功");
    }
}

二、分页查询

同理
在这里插入图片描述

//分页查询
@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);
}

三、批量停售

//批量停售

@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("修改成功");
}

四、批量删除

//批量删除
@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("删除成功");
}

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

lambdaQueryWrapper.eq(Setmeal::getIsDeleted,0);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值