套餐管理
根据分类id查询菜品接口
public Result<List<Dish>> list(Long categoryId){
List<Dish> list = dishService.list(categoryId);
return Result.success(list);
}
public List<Dish> list(Long categoryId) {
Dish dish = Dish.builder().
categoryId(categoryId).
status(StatusConstant.ENABLE).build();
return dishMapper.list(dish);
}
<select id="list" resultType="Dish" parameterType="Dish">
select * from dish<where><if test="name != null">
and name like concat('%',#{name},'%')</if>
<if test="categoryId != null">and category_id = #{categoryId}</if>
<if test="status != null">and status = #{status}</if>
</where>order by create_time desc
</select>
新增套餐
public Result save(@RequestBody SetMealDTO setMealDTO){
log.info("新增套餐:{}",setMealDTO);
setMealService.saveWithDish(setMealDTO);
return Result.success();
}
public void saveWithDish(SetMealDTO setMealDTO) {
SetMeal setMeal=new SetMeal();
BeanUtils.copyProperties(setMealDTO,setMeal);
//套餐状态默认为禁用状态0
setMealDTO.setStatus(StatusConstant.DISABLE);
setMealMapper.insert(setMealDTO);
Long setMealId=setMeal.getId();
//向菜品插入n条数据
List<SetmealDish>setmealDishes=setMealDTO.getSetmealDishes();
if (setmealDishes != null && setmealDishes.size() > 0 ){
setmealDishes.forEach(setmealDish -> {
setmealDish.setSetmealId(setMealId);
});
setMealDishMapper.insertBatch(setmealDishes);
}
}
<insert id="insertBatch">
insert into setmeal_dish(setmeal_id, dish_id, name, price, copies) values
<foreach collection="setmealDishes" item="setmealDish" separator=",">
(#{setmealDish.setmealId},#{setmealDish.dishId},#{setmealDish.name},#{setmealDish.price},#{setmealDish.copies})
</foreach>
</insert>
套餐分页查询
public Result<PageResult> pageQuery(SetmealPageQueryDTO setmealPageQueryDTO){
log.info("套餐分页查询:{}",setmealPageQueryDTO);
PageResult pageResult=setmealService.pageQuery(setmealPageQueryDTO);
return Result.success(pageResult);
}
public PageResult pageQuery(SetmealPageQueryDTO setmealPageQueryDTO) {
PageHelper.startPage(setmealPageQueryDTO.getPage(),setmealPageQueryDTO.getPageSize());
Page<SetmealVO> page=setMealMapper.pageQuery(setmealPageQueryDTO);
return new PageResult(page.getTotal(),page.getResult());
}
<select id="pageQuery" resultType="com.guslegend.vo.SetmealVO">
select setmeal.*,category.name as categoryName from setmeal left join category on
setmeal.category_id = category.id
<where>
<if test="name != null ">
and setmeal.name like concat('%',#{name},'%')
</if>
<if test="categoryId != null">
and setmeal.category_id = #{categoryId}
</if>
<if test="status != null">
and setmeal.status = #{status}
</if>
</where>
</select>
这里为什么要用SetmealVO类?如下图所示,没有使用VO就等不得套餐分类
对比entity和vo我们可以知道,Setmeal里面有一个categoryName分类名称,故要用vo类
启售停售套餐
@PostMapping("/status/{status}")
@ApiOperation("启售停售套餐")
public Result startOrStop(@PathVariable Integer status,Long id) {
log.info("启售停售套餐:{},{}", status, id);
setmealService.startOrStop(status, id);
return Result.success();
}
public void startOrStop(Integer status, Long id) {
Setmeal setmeal = Setmeal.builder()
.status(status)
.id(id)
.build();
setMealMapper.update(setmeal);
}
<update id="update">
update setmeal
<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>
删除套餐
public Result delete(@RequestParam List<Long> ids) {
log.info("根据id批量删除套餐:{}", ids);
setmealService.deleteBtach(ids);
return Result.success();
}
@Transactional
public void deleteBtach(List<Long> ids) {
//判断当前套餐是否在启售中,启售中不能删除
for (Long id : ids) {
Setmeal setmeal = setMealMapper.getById(id);
if (setmeal.getStatus() == StatusConstant.ENABLE){
throw new DeletionNotAllowedException(MessageConstant.SETMEAL_ON_SALE);
}
}
//删除套餐表里的套餐
setMealMapper.deleteByIds(ids);
//删除套餐菜品表里的菜品
setMealDishMapper.deleteByDishIds(ids);
}
<delete id="deleteByDishIds">
delete from setmeal_dish where setmeal_id in
<foreach collection="ids" item="id" open="(" close=")" separator=",">
#{id}
</foreach>
</delete>
<select id="getById" parameterType="Long" resultType="com.guslegend.entity.Setmeal">
SELECT * FROM setmeal WHERE id = #{id}
</select>
<delete id="deleteByIds">
delete from setmeal where id in
<foreach collection="ids" separator="," item="id" open="(" close=")">
#{id}
</foreach>
</delete>
根据ID查询套餐
public Result<SetmealVO> getBySetmealId(@PathVariable Long id) {
log.info("根据id查询套餐:{}", id);
SetmealVO setmealVOs = setmealService.getById(id);
return Result.success(setmealVOs);
}
public SetmealVO getById(Long id) {
Setmeal setmeal = setMealMapper.getById(id);
//根据id查询对应菜品
List<SetmealDish> setmealDishs = setMealDishMapper.getBySetmealId(id);
//将结果封装到VO
SetmealVO setmealVO = new SetmealVO();
BeanUtils.copyProperties(setmeal,setmealVO);
setmealVO.setSetmealDishes(setmealDishs);
return setmealVO;
}
<select id="getBySetmealId" parameterType="Long" resultType="com.guslegend.entity.SetmealDish">
SELECT * FROM setmeal_dish WHERE setmeal_id = #{setmealId}
</select>
修改套餐
public Result update(@RequestBody SetmealDTO setmealDTO){
log.info("修改套餐:{}",setmealDTO);
setmealService.update(setmealDTO);
return Result.success();
}
public void update(SetmealDTO setmealDTO) {
Setmeal setmeal = new Setmeal();
BeanUtils.copyProperties(setmealDTO,setmeal);
//修改套餐
setMealMapper.update(setmeal);
List<Long> ids = new ArrayList<>();
ids.add(setmealDTO.getId());
//删除原有的菜品
setMealDishMapper.deleteByDishIds(ids);
List<SetmealDish> setmealDishes = setmealDTO.getSetmealDishes();
//插入套餐对应的菜品
if (setmealDishes != null && setmealDishes.size() > 0){
setmealDishes.forEach(setmealDish -> {
setmealDish.setSetmealId(setmealDTO.getId());
});
}
//批量插入菜品
setMealDishMapper.insertBatch(setmealDishes);
}