目录
套餐管理实战
新增套餐功能
根据分类ID查询菜品
新增套餐(提交操作)
套餐分页查询功能
删除套餐功能
修改套餐功能
根据id查询套餐
修改套餐(提交操作)
套餐起售停售功能
根据产品原型进行需求分析,分析出业务规则后完成新增套餐、套餐分页查询、删除套餐、修改套餐、起售停售套餐功能。
用什么方法请求?传入什么参数?返回什么数据?
根据接口文档,该方法以Post的方式进行请求。传入的参数包含套餐实体类的属性,此外从接口文档中我们还可以看出还包含一个Object这种一般都是另一个实体类。
因此,设计了SetmealDTO的来接收前端传过来的数据。新增操作没有额外的数据需要返回给前端。
根据产品原型来设计接口,我们需要设计四个接口,其中两个已经在之前完成,因此这里就是完成根据发呢类Id查询菜品和整个套餐的提交过程。
下面给出在xml下的动态sql和mp的代码。
public List list(Long categoryId) {
String name=new String();
QueryWrapper qw=new QueryWrapper();
//第一个参数是条件,第二个参数是数据库的字段名称,
qw.like(Strings.isNotEmpty(name),"name",name);
qw.eq("category_id",categoryId);
//假设有传入status
//qw.eq("status",status);
List dishes = dishMapper.selectList(qw);
System.out.println(dishes);
return dishes;
}
新增套餐,同时需要保存套餐和菜品的关联关系,涉及多个表需要开启事务,在业务层实现类的方法上使用注解 @Transactional开启事务。
向套餐表插入套餐数据后,返回该套餐的id,然后将该此id赋给SetmealDish对象中的setmealId,随后批量插入到setmeal_id表中保存套餐和菜品的关联关系。
用什么方法请求?传入什么参数?返回什么数据?
使用get的请求方式。传入SetmealPageQueryDTO,需要返回页数以及套餐数据。由于查询套餐涉及多张表,因此使用xml的方式。
用什么方法请求?传入什么参数?返回什么数据?
从产品原型得删除功能能够一次删除一个套餐也可以是多个,且其手中的套餐不能被删除。该方法使用delete的方式请求,需要Long型的id序列,这里使用集合接收。多删除和当个删除都可用该功能解决。无额外需要传送回来的数据。
删除的思路:判断是否是起售状态(起售状态不能删除)-----> 删除套餐表中的数据以及套餐菜品关系表中的数据。
根据产品原型设计接口,修改套餐设计 根据id查询套餐、根据类型查询分类、根据分类id查询菜品、图片上传、修改套餐。
用什么方法请求?传入什么参数?返回什么数据?
该方法使用get的请求方式。需要传入id的作为参数。给前端返回setmealVO。
思路:现根据传入的套餐id查询出套餐,然后根据套餐的去查询所有菜品信息,最后封装到setmealVO中。
用什么方法请求?传入什么参数?返回什么数据?
该方法以put的方式进行请求。需要传入SetmealVO的参数。无额外的返回数据。
思路:修改套餐可能会新增菜品或删除菜品,可以统一删除,之后在添加。因此,删除套餐和菜品的关联关系,操作setmeal_dish表,执行delete。重新插入套餐和菜品的关联关系,操作setmeal_dish表,执行insert。
在套餐起售停售中,可以对状态为起售的套餐进行停售操作,可以对状态为停售的套餐进行起售操作。起售的套餐可以展示在用户端,停售的套餐不能展示在用户端。起售套餐时,如果套餐内包含停售的菜品,则不能起售。
用什么方法请求?传入什么参数?返回什么数据?
使用post方式请求,用路径参数接收状态,没有额外需要的数据需要返回给前端。
起售套餐时,判断套餐内是否有包含停售菜品,如果有则不能起售。因此先根据套餐id查询菜品,将查询到的菜品遍历一遍检查一下。
@Select("select a.* from sky_take_out.dish a left join sky_take_out.setmeal_dish b on a.id = b.dish_id where b.setmeal_id = #{setmealId}")
List getBySetmealId(Long id);
如果不包含停售菜品则调用直接调用先前写的套餐更新。
如果有帮助到你,希望可以点赞收藏转发~