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