8--苍穹外卖-SpringBoot项目中套餐管理 详解(二)
目录
删除套餐
需求分析和设计
代码开发
根据id查询套餐
mapper层
Service层
ServiceImpl层
Mapper层
批量删除套餐
mapper层
Service层
ServiceImpl层
Mapper层
SetmealMapper.xml
修改套餐
需求分析和设计
代码开发
起售停售套餐
需求分析和设计
代码开发
1--苍穹外卖-SpringBoot项目介绍及环境搭建 详解-CSDN博客
2--苍穹外卖-SpringBoot项目中员工管理 详解(一)-CSDN博客
3--苍穹外卖-SpringBoot项目中员工管理 详解(二)-CSDN博客
4--苍穹外码-SpringBoot项目中分类管理 详解-CSDN博客
5--苍穹外卖-SpringBoot项目中菜品管理 详解(一)-CSDN博客
6--苍穹外卖-SpringBoot项目中菜品管理 详解(二)-CSDN博客
7--苍穹外卖-SpringBoot项目中套餐管理 详解(一)-CSDN博客
8--苍穹外卖-SpringBoot项目中套餐管理 详解(二)-CSDN博客
9--苍穹外卖-SpringBoot项目中Redis的介绍及其使用实例 详解-CSDN博客
10--苍穹外卖-SpringBoot项目中微信登录 详解-CSDN博客
删除套餐
需求分析和设计
业务规则:
-
可以一次删除一个套餐,也可以批量删除套餐
-
起售中的套餐不能删除
-
删除套餐后,菜品的关联数据也需要删除掉
代码开发
根据id查询套餐
mapper层
//根据id查询套餐
@GetMapping("/{id}")
@ApiOperation("根据id查询套餐")
public Result<SetmealVO> getById(@PathVariable Long id){
log.info("根据id查询套餐:{}",id);
SetmealVO setmealVO=setmealService.getByIdWithDish(id);
return Result.success(setmealVO);
}
Service层
//根据id查询套餐
SetmealVO getByIdWithDish(Long id);
ServiceImpl层
//根据id查询套餐
@Override
public SetmealVO getByIdWithDish(Long id) {
Setmeal setmeal=setmealMapper.getById(id);
List<SetmealDish> setmealDishes=setmealDishMapper.getDishId(id);
SetmealVO setmealVO = new SetmealVO();
BeanUtils.copyProperties(setmeal,setmealVO);
setmealVO.setSetmealDishes(setmealDishes);
return setmealVO;
}
Mapper层
//根据id查询套餐
@Select("select *from setmeal where id=#{id}")
Setmeal getById(Long id);
//根据id查询对应的菜品数据
@Select("select *from setmeal_dish where setmeal_id=#{dishId}")
List<SetmealDish> getDishId(Long dishId);
批量删除套餐
mapper层
//批量删除套餐
@DeleteMapping
@ApiOperation("批量删除套餐")
public Result<String> delete(@RequestParam List<Long> ids){
log.info("批量删除套餐:{}",ids);
setmealService.deleteBatch(ids);
return Result.success();
}
Service层
//批量删除套餐
void deleteBatch(List<Long> ids);
ServiceImpl层
//批量删除套餐
@Override
@Transactional
public void deleteBatch(List<Long> ids) {
for (Long id:ids){
Setmeal setmeal=setmealMapper.getById(id);
if (Objects.equals(setmeal.getStatus(), StatusConstant.ENABLE)) {
throw new DeletionNotAllowedException(MessageConstant.SETMEAL_ON_SALE);
}
}
setmealMapper.deleteByIds(ids);
setmealMapper.deleteByDishIds(ids);
}
Mapper层
//根据id集合批量删除套餐数据
void deleteByIds(List<Long> ids);
//根据id集合批量删除套餐关联的菜品数据
void deleteByDishIds(List<Long> ids);
SetmealMapper.xml
<delete id="deleteByIds">
delete from setmeal where id in
<foreach collection="ids" open="(" separator="," close=")" item="id">
#{id}
</foreach>
</delete>
<delete id="deleteByDishIds">
delete from setmeal_dish where setmeal_id in
<foreach collection="dishIds" open="(" close=")" separator="," item="dishId">
#{dishId}
</foreach>
</delete>
修改套餐
需求分析和设计
代码开发
Controller层
//修改套餐
@PutMapping
@ApiOperation("修改套餐")
public Result<String> update(@RequestBody SetmealDTO setmealDTO){
log.info("修改套餐:{}",setmealDTO);
setmealService.update(setmealDTO);
return Result.success();
}
Service层
//修改套餐
void update(SetmealDTO setmealDTO);
ServiceImpl层
//修改套餐
@Override
public void update(SetmealDTO setmealDTO) {
Setmeal setmeal = new Setmeal();
BeanUtils.copyProperties(setmealDTO,setmeal);
setmealMapper.update(setmeal);
setmealDishMapper.deleteByDishId(setmealDTO.getId());
List<SetmealDish> setmealDishes = setmealDTO.getSetmealDishes();
if(setmealDishes!=null&&!setmealDishes.isEmpty()){
setmealDishes.forEach(setmealDish -> {
setmealDish.setSetmealId(setmealDTO.getId());
});
setmealDishMapper.insertBatch(setmealDishes);
}
}
Mapper层
//根据id动态修改套餐数据
@AutoFill(value = OperationType.UPDATE)
void update(Setmeal setmeal);
//根据套餐id删除对应的菜品数据
@Delete("delete from setmeal_dish where setmeal_id=#{dishId}")
void deleteByDishId(Long dishId);
SetmealMapper.xml
<update id="update">
update dish
<set>
<if test="name!=null">name=#{name},</if>
<if test="categoryId!=null">category_id=#{categoryId},</if>
<if test="price!=null">price=#{price},</if>
<if test="image!=null">image=#{image},</if>
<if test="description!=null">description=#{description},</if>
<if test="status!=null">status=#{status},</if>
<if test="updateTime!=null">update_time=#{updateTime},</if>
<if test="updateUser!=null">update_user=#{updateUser},</if>
</set>
where id=#{id}
</update>
起售停售套餐
需求分析和设计
业务规则:
- 可以对状态为“启售” 的套餐进行“停售”操作
- 可以对状态为“停售”的套餐进行“启售”操作
- 状态为“停售”的套餐不在前台展示
代码开发
Controller层
//起售禁售套餐
@PostMapping("/status/{status}")
@ApiOperation("起售禁售套餐")
public Result<String> startOrStop(@PathVariable Integer status,Long id){
log.info("起售禁售套餐:{},{}",status,id);
setmealService.startOrStop(status,id);
return Result.success();
}
Service层
//起售禁售套餐
void startOrStop(Integer status, Long id);
ServiceImpl层
//起售禁售套餐
@Override
public void startOrStop(Integer status, Long id) {
Setmeal setmeal = Setmeal.builder()
.status(status)
.id(id)
.build();
setmealMapper.update(setmeal);
}