瑞吉外卖(19) - 新增套餐业务开发
文章目录
- 效果展示
- 新增套餐需求分析
- 数据模型 - setmeal
- 代码开发
- 搭建框架
- 导入实体类SetmealDish
- 导入SetmealDto.java
- 新建SetmealDishMapper.java
- 新建SetmealDishService.java
- 新建SetmealDishServiceImpl.java
- 新建SetmealController.java
- 梳理交互过程
- 编写dishController.java
- 功能测试
- 添加过滤条件status
- 编辑DishController.java
- 测试sql
- 根据请求信息完善最后提交功能
- 分析提交信息
- 编写SetmealController.java
- 测试业务准确性
- 编写SetmealService.java
- 编写SetmealServiceImpl.java
- 完善SetmealController.java
- 功能测试
效果展示
新增套餐需求分析
数据模型 - setmeal
代码开发
搭建框架
导入实体类SetmealDish
package com.taotao.reggie.entity;
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;
}
导入SetmealDto.java
package com.taotao.reggie.dto;
import com.taotao.reggie.entity.Setmeal;
import com.taotao.reggie.entity.SetmealDish;
import lombok.Data;
import java.util.List;
@Data
public class SetmealDto extends Setmeal {
private List<SetmealDish> setmealDishes;
private String categoryName;
}
新建SetmealDishMapper.java
package com.taotao.reggie.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.taotao.reggie.entity.SetmealDish;
import org.apache.ibatis.annotations.Mapper;
/**
* create by 刘鸿涛
* 2022/9/25 16:20
*/
@SuppressWarnings({"all"})
@Mapper
public interface SetmealDishMapper extends BaseMapper<SetmealDish> {
}
新建SetmealDishService.java
package com.taotao.reggie.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.taotao.reggie.entity.SetmealDish;
/**
* create by 刘鸿涛
* 2022/9/25 16:25
*/
@SuppressWarnings({"all"})
public interface SetmealDishService extends IService<SetmealDish> {
}
新建SetmealDishServiceImpl.java
package com.taotao.reggie.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.taotao.reggie.entity.SetmealDish;
import com.taotao.reggie.mapper.SetmealDishMapper;
import com.taotao.reggie.service.SetmealDishService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
/**
* create by 刘鸿涛
* 2022/9/25 16:27
*/
@SuppressWarnings({"all"})
@Service
@Slf4j
public class SetmealDishServiceImpl extends ServiceImpl<SetmealDishMapper, SetmealDish> implements SetmealDishService {
}
新建SetmealController.java
package com.taotao.reggie.controller;
import com.taotao.reggie.service.SetmealDishService;
import com.taotao.reggie.service.SetmealService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* create by 刘鸿涛
* 2022/9/25 16:32
*/
@SuppressWarnings({"all"})
@RestController
@RequestMapping("/setmeal")
@Slf4j
public class SetmealController {
@Autowired
private SetmealService setmealService;
@Autowired
private SetmealDishService setmealDishService;
}
梳理交互过程
前后端一共6次交互过程
看到这里的请求时dish/list,所以我们编辑dishController.java
编写dishController.java
/**
* 根据条件来查询对应的菜品数据
* @param dish
* @return
*/
@GetMapping("/list")
public R<List<Dish>> list(Dish dish){
//构造查询条件
LambdaQueryWrapper<Dish> queryWrapper = new LambdaQueryWrapper<>();
//因为传过来的时id,所以是等值查询
queryWrapper.eq(dish.getCategoryId() != null,Dish::getCategoryId,dish.getCategoryId());
//添加排序条件
queryWrapper.orderByAsc(Dish::getSort).orderByDesc(Dish::getUpdateTime);
List<Dish> list = dishService.list(queryWrapper);
return R.success(list);
}
功能测试
结果正常
添加过滤条件status
编辑DishController.java
//添加条件,查询状态为1(起售状态)的菜品
queryWrapper.eq(Dish::getStatus,1);
测试sql
根据请求信息完善最后提交功能
分析提交信息
编写SetmealController.java
/**
* 新增套餐
* @param setmealDto
* @return
*/
@PostMapping //因为是post请求所以用postmapping
public R<String> save(@RequestBody SetmealDto setmealDto){
log.info("套餐信息:{}",setmealDto);
return null;
}
测试业务准确性
编写SetmealService.java
public void saveWithDish(SetmealDto setmealDto);
编写SetmealServiceImpl.java
package com.taotao.reggie.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.taotao.reggie.dto.SetmealDto;
import com.taotao.reggie.entity.Setmeal;
import com.taotao.reggie.entity.SetmealDish;
import com.taotao.reggie.mapper.SetmealMapper;
import com.taotao.reggie.service.SetmealDishService;
import com.taotao.reggie.service.SetmealService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.stream.Collectors;
/**
* create by 刘鸿涛
* 2022/6/8 8:23
*/
@SuppressWarnings({"all"})
@Slf4j
@Service
public class SetmealServiceImpl extends ServiceImpl<SetmealMapper, Setmeal> implements SetmealService {
@Autowired
private SetmealDishService setmealDishService;
/**
* 新增套餐,同时需要保存套餐和菜品的关联关系
* @param setmealDto
*/
@Override
@Transactional //事务注解
public void saveWithDish(SetmealDto setmealDto) {
//保存套餐的基本信息,操作setmeal,执行insert操作
this.save(setmealDto);
List<SetmealDish> setmealDishes = setmealDto.getSetmealDishes();
setmealDishes.stream().map((item) ->{
item.setSetmealId(setmealDto.getId());
return item;
}).collect(Collectors.toList());
//保存套餐和菜品的关联信息,操作setmeal_dish,执行insert操作
setmealDishService.saveBatch(setmealDishes); //saveBatch批量保存
}
}
完善SetmealController.java
功能测试
正常